浏览代码

ld_so init for aarch64

Jeremy Soller 2 年之前
父节点
当前提交
58ceae44e7
共有 1 个文件被更改,包括 14 次插入0 次删除
  1. 14 0
      src/ld_so/mod.rs

+ 14 - 0
src/ld_so/mod.rs

@@ -144,6 +144,20 @@ pub unsafe fn init(sp: &'static Stack) {
         const ARCH_GET_FS: usize = 0x1003;
         syscall!(ARCH_PRCTL, ARCH_GET_FS, &mut tp as *mut usize);
     }
+    #[cfg(all(target_os = "redox", target_arch = "aarch64"))]
+    {
+        let mut env = syscall::EnvRegisters::default();
+
+        let file = syscall::open("thisproc:current/regs/env", syscall::O_CLOEXEC | syscall::O_RDONLY)
+            .expect_notls("failed to open handle for process registers");
+
+        let _ = syscall::read(file, &mut env)
+            .expect_notls("failed to read tpidr_el0");
+
+        let _ = syscall::close(file);
+
+        tp = env.tpidr_el0;
+    }
     #[cfg(all(target_os = "redox", target_arch = "x86"))]
     {
         let mut env = syscall::EnvRegisters::default();