diff --git a/src/ld_so/linker.rs b/src/ld_so/linker.rs
index a835a2e9177d0bf57ce352b8963b246fb54574cc..0f42d79eb4561fbbc846489d1d5e9cb45a8470ec 100644
--- a/src/ld_so/linker.rs
+++ b/src/ld_so/linker.rs
@@ -865,16 +865,6 @@ impl Linker {
 }
 
 unsafe extern "C" fn call_inits_finis(addr: usize) {
-    #[cfg(target_arch = "x86_64")]
-    asm!("
-        cmp qword ptr [rdi], 0
-        je end
-        call [rdi]
-end:    nop
-        "
-        :
-        :
-        :
-        : "intel", "volatile"
-    );
+    let func = transmute::<usize, *const Option<extern "C" fn()>>(addr);
+    (*func).map(|x| x());
 }