Browse Source

Add x86 _start

Jeremy Soller 2 years ago
parent
commit
c1b20cdeab
1 changed files with 27 additions and 7 deletions
  1. 27 7
      src/crt0/src/lib.rs

+ 27 - 7
src/crt0/src/lib.rs

@@ -5,6 +5,33 @@
 
 use core::arch::global_asm;
 
+#[cfg(target_arch = "aarch64")]
+global_asm!("
+    .globl _start
+_start:
+    mov x0, sp
+    bl relibc_start
+");
+
+#[cfg(target_arch = "x86")]
+global_asm!("
+    .globl _start
+    .type _start, @function
+_start:
+    sub esp, 8
+
+    mov DWORD PTR [esp], 0x00001F80
+    # ldmxcsr [esp]
+    mov WORD PTR [esp], 0x031F
+    fldcw [esp]
+
+    add esp, 8
+
+    push esp
+    call relibc_start
+    .size _start, . - _start
+");
+
 #[cfg(target_arch = "x86_64")]
 global_asm!("
     .globl _start
@@ -25,13 +52,6 @@ _start:
     call relibc_start
     .size _start, . - _start
 ");
-#[cfg(target_arch = "aarch64")]
-global_asm!("
-    .globl _start
-_start:
-    mov x0, sp
-    bl relibc_start
-");
 
 #[linkage = "weak"]
 #[no_mangle]