diff --git a/src/ld_so/tcb.rs b/src/ld_so/tcb.rs index 923a40ca133e92a9af39471621e0066c4a9080b9..0493f303e622e449da865d37fa7424c39c76e404 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