From 602fd9fe080a0822fc63bbda2b484fbc75901c3e Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jeremy@system76.com>
Date: Wed, 28 Apr 2021 21:29:09 -0600
Subject: [PATCH] Fixes for TCB arch_read on aarch64

---
 src/ld_so/tcb.rs | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/src/ld_so/tcb.rs b/src/ld_so/tcb.rs
index a1058c941..e9133c849 100644
--- a/src/ld_so/tcb.rs
+++ b/src/ld_so/tcb.rs
@@ -214,20 +214,15 @@ impl Tcb {
     #[inline(always)]
     #[cfg(target_arch = "aarch64")]
     unsafe fn arch_read(offset: usize) -> usize {
-        let mut value = 0usize;
-        let mut tmp = 0usize;
-
-        llvm_asm!("
-            mrs $0, tpidr_el0
-            add $0, $0, $2
-            ldr $1, [$0]
-            "
-            : "=r"(tmp), "=r"(value)
-            : "r"(offset)
+        let tp: usize;
+        llvm_asm!("mrs $0, tpidr_el0"
+            : "=r"(tp)
+            :
             :
             : "volatile"
         );
-        value
+
+        *((tp + offset) as *const usize)
     }
 
     /// Architecture specific code to read a usize from the TCB - x86_64
-- 
GitLab