@@ -25,7 +25,8 @@ int main()
// printf("Hello World!\n");
print_ascii_logo();
print_copyright();
- exit(0);
- while (1)
- ;
+ // exit(0);
+ // while (1)
+ // ;
+ return 0;
}
@@ -1,7 +1,7 @@
OUTPUT_FORMAT("elf64-x86-64","elf64-x86-64","elf64-x86-64")
OUTPUT_ARCH(i386:x86-64)
-ENTRY(main)
+ENTRY(_start)
SECTIONS
{
@@ -4,6 +4,10 @@ CFLAGS += -I .
libc_sub_dirs=math sys
+ifeq ($(ARCH), __x86_64__)
+libc_sub_dirs += sysdeps/x86_64
+endif
+
libc: unistd.o fcntl.o malloc.o errno.o printf.o stdlib.o ctype.o string.o dirent.o
@list='$(libc_sub_dirs)'; for subdir in $$list; do \
@@ -0,0 +1,12 @@
+all: start.o
+start.o:
+ gcc $(CFLAGS) -c elf/start.c -o elf/start.o
+clean:
+ echo "Done."
@@ -0,0 +1,10 @@
+extern int main(int, char**);
+#include<libc/stdio.h>
+void _start(int argc, char** argv)
+{
+ printf("before main\n");
+ int retval = main(argc, argv);
+ printf("before exit, code=%d\n", retval);
+ exit(retval);
+}