From 886f467a7523fd1dc80b616387e2c3d082afba6f Mon Sep 17 00:00:00 2001
From: Robin Randhawa <robin.randhawa@arm.com>
Date: Mon, 18 Jan 2021 22:01:32 +0000
Subject: [PATCH] aarch64: TLS arch_read implementation

---
 src/ld_so/tcb.rs | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/ld_so/tcb.rs b/src/ld_so/tcb.rs
index 923a40ca..0493f303 100644
--- a/src/ld_so/tcb.rs
+++ b/src/ld_so/tcb.rs
@@ -208,8 +208,20 @@ impl Tcb {
     #[inline(always)]
     #[cfg(target_arch = "aarch64")]
     unsafe fn arch_read(offset: usize) -> usize {
-        //TODO: aarch64
-        unimplemented!("arch_read not implemented on aarch64");
+        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)
+            :
+            : "volatile"
+        );
+        value
     }
 
     /// Architecture specific code to read a usize from the TCB - x86_64
-- 
GitLab