diff --git a/src/crt0/src/lib.rs b/src/crt0/src/lib.rs
index c4ad4072b6c2386f07c8b2214147e1829adfba03..3b0595da8a76e0be3d553c9c79eac4b175fdef02 100644
--- a/src/crt0/src/lib.rs
+++ b/src/crt0/src/lib.rs
@@ -11,6 +11,7 @@ global_asm!(
     .globl _start
 _start:
     mov x0, sp
+    and sp, x0, #0xfffffffffffffff0 //align sp
     bl relibc_start
 "
 );
diff --git a/src/ld_so/src/lib.rs b/src/ld_so/src/lib.rs
index 748f337da8076b359c2ce4e0df0d23fb518c63e6..863660964b4a002670e3631a01f4cef237aca5ce 100644
--- a/src/ld_so/src/lib.rs
+++ b/src/ld_so/src/lib.rs
@@ -9,6 +9,7 @@ global_asm!(
 .globl _start
 _start:
     mov x0, sp
+    and sp, x0, #0xfffffffffffffff0 //align sp
     bl relibc_ld_so_start
     # TODO: aarch64
     udf #0