mescc: Tinycc support: refactor _start.
[mes.git] / mlibc / libc-mes.c
index d4f985a39e4de7b9fac9dff6d0976217c19e5d60..35b76770f47607ce42ca874df43577adec67d68c 100644 (file)
 
 int g_stdin = 0;
 char **g_environment;
-int _env ();
-int exit ();
-int main(int,char*[]);
+int main (int,char*[]);
 
 int
 _start ()
 {
-  asm ("mov____%ebp,%eax");      // mov    %ebp,%eax
-  asm ("add____$i8,%eax !8");    // add    $0x8,%eax
-  asm ("push___%eax");           // push   %eax
+  asm ("mov____%ebp,%eax");
+  asm ("add____$i8,%eax !4");
 
-  asm ("mov____%ebp,%eax");      // mov    %ebp,%eax
-  asm ("add____$i8,%eax !4");    // add    $0x4,%eax
-  asm ("movzbl_(%eax),%eax");    // movzbl (%eax),%eax
-  asm ("push___%eax");           // push   %eax
+  asm ("movzbl_(%eax),%eax");
+  asm ("add____$i8,%eax !3");
 
-  asm ("mov____%ebp,%eax");      // mov    %ebp,%eax
-  asm ("add____$i8,%eax !4");    // add    $0x4,%eax
+  asm ("shl____$i8,%eax !0x02");
+  asm ("add____%ebp,%eax");
+  asm ("mov____%eax,0x32 &g_environment");
 
-  asm ("movzbl_(%eax),%eax");    // movzbl (%eax),%eax
-  asm ("add____$i8,%eax !3");    // add    $0x3,%eax
+  asm ("mov____%ebp,%eax");
+  asm ("add____$i8,%eax !8");
+  asm ("push___%eax");
 
-  asm ("shl____$i8,%eax !0x02"); // shl    $0x2,%eax
-  asm ("add____%ebp,%eax");      // add    %ebp,%eax
-  asm ("push___%eax");           // push   %eax
+  asm ("mov____%ebp,%eax");
+  asm ("add____$i8,%eax !4");
+  asm ("movzbl_(%eax),%eax");
+  asm ("push___%eax");
 
-  g_environment = _env ();
-  asm ("pop____%eax");           // pop   %eax
-  int r = main ();
-  exit (r);
-}
+  main ();
 
-char **
-_env (char **e)
-{
-  return e;
+  asm ("mov____%eax,%ebx");
+  asm ("mov____$i32,%eax %1");
+  asm ("int____$0x80");
+  asm ("hlt");
 }
 
 void