Преглед на файлове

Correct instruction to read aarch64 thread pointer

Jeremy Soller преди 2 години
родител
ревизия
b0d3e5b154
променени са 1 файла, в които са добавени 4 реда и са изтрити 11 реда
  1. 4 11
      src/ld_so/mod.rs

+ 4 - 11
src/ld_so/mod.rs

@@ -146,17 +146,10 @@ pub unsafe fn init(sp: &'static Stack) {
     }
     #[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;
+        core::arch::asm!(
+            "mrs {}, tpidr_el0",
+            out(reg) tp,
+        );
     }
     #[cfg(all(target_os = "redox", target_arch = "x86"))]
     {