Przeglądaj źródła

DynamicLoader+LibC: Make _start a naked function

Hendiadyoin1 4 lat temu
rodzic
commit
a8d86cc533

+ 7 - 5
Userland/DynamicLoader/main.cpp

@@ -94,13 +94,15 @@ this helper program directly.
 extern "C" {
 extern "C" {
 
 
 // The compiler expects a previous declaration
 // The compiler expects a previous declaration
+void _start(int, char**, char**);
 void _entry(int, char**, char**);
 void _entry(int, char**, char**);
 
 
-asm(
-    ".globl _start\n"
-    "_start:\n"
-    "push $0\n"
-    "jmp _entry@plt\n");
+NAKED void _start(int, char**, char**)
+{
+    asm(
+        "push $0\n"
+        "jmp _entry@plt\n");
+}
 
 
 void _entry(int argc, char** argv, char** envp)
 void _entry(int argc, char** argv, char** envp)
 {
 {

+ 7 - 5
Userland/Libraries/LibC/crt0.cpp

@@ -20,12 +20,14 @@ int main(int, char**, char**);
 
 
 // Tell the compiler that this may be called from somewhere else.
 // Tell the compiler that this may be called from somewhere else.
 int _entry(int argc, char** argv, char** env);
 int _entry(int argc, char** argv, char** env);
+void _start(int, char**, char**);
 
 
-asm(
-    ".globl _start\n"
-    "_start:\n"
-    "push $0\n"
-    "jmp _entry@plt\n");
+NAKED void _start(int, char**, char**)
+{
+    asm(
+        "push $0\n"
+        "jmp _entry@plt\n");
+}
 
 
 int _entry(int argc, char** argv, char** env)
 int _entry(int argc, char** argv, char** env)
 {
 {