Bläddra i källkod

ld_so init for aarch64

Jeremy Soller 2 år sedan
förälder
incheckning
58ceae44e7
1 ändrade filer med 14 tillägg och 0 borttagningar
  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();