ref: 7e737ab9f7d62562c927a6af15dfc8eb78ecaec8
parent: a165af3d8406d98aaf6bb86048690ca3d4e6648d
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Mon Oct 7 17:22:53 EDT 2019
[libc] Revert crt.o changes Crt.o cannot go in libcrt.o because it has a dependency with exit() and it makes a circular dependency.
--- a/src/libc/Makefile.libc
+++ b/src/libc/Makefile.libc
@@ -4,9 +4,14 @@
include rules.mk
include objlst.mk
-TARGET = $(LIBCDIR)/libc.a
+LIBC = $(LIBCDIR)/libc.a
+CRT = $(LIBCDIR)/crt.o
+TARGET = $(LIBC) $(CRT)
all: $(TARGET)
-$(TARGET): $(OBJS)
+$(LIBC): $(OBJS)
mklib -o $@ $?
+
+$(CRT): arch/$(ARCH)/$(SYS)/crt.o
+ cp arch/$(ARCH)/$(SYS)/crt.o $@
--- /dev/null
+++ b/src/libc/arch/amd64/crt-posix.s
@@ -1,0 +1,19 @@
+ .bss
+ .globl _environ
+_environ:
+ .quad 0
+
+ .text
+ .globl _start
+_start:
+ movq %rsp,%rbp
+
+ /* load argc, argv, envp from stack */
+ movq (%rbp),%rdi /* argc */
+ leaq 8(%rbp),%rsi /* argv */
+ leaq 16(%rbp,%rdi,8),%rdx /* envp = argv + 8*argc + 8 */
+ movq %rdx,_environ(%rip)
+
+ call main
+ movl %eax,%edi
+ jmp exit
--- a/src/libc/arch/amd64/darwin/Makefile
+++ b/src/libc/arch/amd64/darwin/Makefile
@@ -19,11 +19,14 @@
signal.o \
time.o \
_sys_errlist.o \
+ crt.o \
all: syscall
$(MAKE) objs
objs: $(OBJS)
+
+crt.o: ../crt-posix.s
syscall: syscall.lst
gensys.sh syscall.lst
--- /dev/null
+++ b/src/libc/arch/amd64/darwin/crt.s
@@ -1,0 +1,19 @@
+ .bss
+ .globl __environ
+__environ:
+ .quad 0
+
+ .text
+ .global start
+start:
+ movq %rsp,%rbp
+
+ /* load argc, argv, envp from stack */
+ movq (%rbp),%rdi /* argc */
+ leaq 8(%rbp),%rsi /* argv */
+ leaq 16(%rbp,%rdi,8),%rdx /* envp = argv + 8*argc + 8 */
+ movq %rdx,__environ(%rip)
+
+ call _main
+ movl %eax,%edi
+ jmp _exit
--- a/src/libc/arch/amd64/dragonfly/Makefile
+++ b/src/libc/arch/amd64/dragonfly/Makefile
@@ -20,11 +20,14 @@
signal.o \
time.o \
_sys_errlist.o \
+ crt.o \
all: syscall
$(MAKE) objs
objs: $(OBJS)
+
+crt.o: crt-posix.s
syscall: syscall.lst
gensys.sh syscall.lst
--- /dev/null
+++ b/src/libc/arch/amd64/dragonfly/crt.s
@@ -1,0 +1,1 @@
+ .include "../crt-posix.s"
--- a/src/libc/arch/amd64/linux/Makefile
+++ b/src/libc/arch/amd64/linux/Makefile
@@ -22,11 +22,14 @@
signal.o \
time.o \
_sys_errlist.o \
+ crt.o \
all: syscall
$(MAKE) objs
objs: $(OBJS)
+
+crt.o: ../crt-posix.s
syscall: syscall.lst
gensys.sh syscall.lst
--- /dev/null
+++ b/src/libc/arch/amd64/linux/crt.s
@@ -1,0 +1,1 @@
+ .include "../crt-posix.s"
--- a/src/libc/arch/amd64/netbsd/Makefile
+++ b/src/libc/arch/amd64/netbsd/Makefile
@@ -23,11 +23,14 @@
signal.o \
time.o \
_sys_errlist.o \
+ crt.o \
all: syscall
$(MAKE) objs
objs: $(OBJS)
+
+crt.o: ../crt-posix.s ../../crt-netbsd.s
syscall: syscall.lst
gensys.sh syscall.lst
--- /dev/null
+++ b/src/libc/arch/amd64/netbsd/crt.s
@@ -1,0 +1,2 @@
+ .include "../../crt-netbsd.s"
+ .include "../crt-posix.s"
--- a/src/libc/arch/amd64/openbsd/Makefile
+++ b/src/libc/arch/amd64/openbsd/Makefile
@@ -20,11 +20,14 @@
signal.o \
time.o \
_sys_errlist.o \
+ crt.o \
all: syscall
$(MAKE) objs
objs: $(OBJS)
+
+crt.o: ../crt-posix.s ../../crt-openbsd.s
syscall: syscall.lst
gensys.sh syscall.lst
--- /dev/null
+++ b/src/libc/arch/amd64/openbsd/crt.s
@@ -1,0 +1,2 @@
+ .include "../../crt-openbsd.s"
+ .include "../crt-posix.s"
--- /dev/null
+++ b/src/libc/arch/arm32/crt-posix.s
@@ -1,0 +1,16 @@
+ .bss
+ .globl _environ
+_environ:
+ .word 0
+
+ .text
+ .globl _start
+_start:
+ ldr r0,[sp] /* argc */
+ add r1,sp,#4 /* argv */
+ add r2,r1,r0,lsl #2 /* argv = argc + 4*argc + 4 */
+ add r2,r2,#4
+ ldr r3,=_environ
+ str r2,[r3]
+ bl main
+ b exit
--- a/src/libc/arch/arm32/linux/Makefile
+++ b/src/libc/arch/arm32/linux/Makefile
@@ -22,11 +22,14 @@
signal.o \
time.o \
_sys_errlist.o \
+ crt.o \
all: syscall
$(MAKE) objs
objs: $(OBJS)
+
+crt.o: ../crt-posix.s
syscall: syscall.lst
gensys.sh syscall.lst
--- /dev/null
+++ b/src/libc/arch/arm32/linux/crt.s
@@ -1,0 +1,1 @@
+ .include "../crt-posix.s"
--- /dev/null
+++ b/src/libc/arch/arm64/crt-posix.s
@@ -1,0 +1,16 @@
+ .bss
+ .globl _environ
+_environ:
+ .quad 0
+
+ .text
+ .globl _start
+_start:
+ ldr x0,[sp] /* argc */
+ add x1,sp,#8 /* argv */
+ add x2,x1,x0,lsl #3 /* argv = argc + 8*argc + 8 */
+ add x2,x2,#8
+ adr x3,_environ
+ str x2,[x3]
+ bl main
+ b exit
--- a/src/libc/arch/arm64/linux/Makefile
+++ b/src/libc/arch/arm64/linux/Makefile
@@ -22,11 +22,14 @@
signal.o \
time.o \
_sys_errlist.o \
+ crt.o \
all: syscall
$(MAKE) objs
objs: $(OBJS)
+
+crt.o: ../crt-posix.s
syscall: syscall.lst
gensys.sh syscall.lst
--- /dev/null
+++ b/src/libc/arch/arm64/linux/crt.s
@@ -1,0 +1,1 @@
+ .include "../crt-posix.c"
--- /dev/null
+++ b/src/libc/arch/crt-netbsd.s
@@ -1,0 +1,9 @@
+ .file "crt-netbsd.s"
+ .section ".note.netbsd.ident", "a"
+ .p2align 2
+
+ .long 7
+ .long 4
+ .long 1
+ .ascii "NetBSD\0\0"
+ .long 800000000
--- /dev/null
+++ b/src/libc/arch/crt-openbsd.s
@@ -1,0 +1,9 @@
+ .file "crt-openbsd.s"
+ .section ".note.openbsd.ident", "a"
+ .p2align 2
+ .long 8
+ .long 4
+ .long 1
+ .ascii "OpenBSD\0"
+ .long 0
+ .p2align 2
--- /dev/null
+++ b/src/libc/arch/i386/crt-posix.s
@@ -1,0 +1,18 @@
+ .bss
+ .globl _environ
+_environ:
+ .long 0
+
+ .text
+ .global start
+_start:
+ movl %esp,%ebp
+
+ movl (%ebp),%edi
+ leal 8(%ebp),%esi
+ leal 16(%ebp,%edi,8),%edx
+ movl %edx,_environ
+
+ call main
+ movl %eax,%edi
+ jmp exit
--- a/src/libc/arch/i386/linux/Makefile
+++ b/src/libc/arch/i386/linux/Makefile
@@ -15,11 +15,14 @@
_getpid.o\
_Exit.o\
_kill.o\
+ crt.o\
all: syscall
$(MAKE) objs
objs: $(OBJS)
+
+crt.o: ../crt-posix.s
syscall: syscall.lst
gensys.sh syscall.lst
--- /dev/null
+++ b/src/libc/arch/i386/linux/crt.s
@@ -1,0 +1,1 @@
+ .include "../crt-posix.s"
--- a/src/libcrt/amd64/Makefile
+++ b/src/libcrt/amd64/Makefile
@@ -2,7 +2,7 @@
PROJECTDIR=../../..
include $(PROJECTDIR)/scripts/rules.mk
-OBJS = crt-$(SYS).o
+OBJS = dummy.o
TARGET = $(LIBCDIR)/libcrt.a
all: $(TARGET)
--- a/src/libcrt/amd64/crt-darwin.s
+++ /dev/null
@@ -1,19 +1,0 @@
- .bss
- .globl __environ
-__environ:
- .quad 0
-
- .text
- .global start
-start:
- movq %rsp,%rbp
-
- /* load argc, argv, envp from stack */
- movq (%rbp),%rdi /* argc */
- leaq 8(%rbp),%rsi /* argv */
- leaq 16(%rbp,%rdi,8),%rdx /* envp = argv + 8*argc + 8 */
- movq %rdx,__environ(%rip)
-
- call _main
- movl %eax,%edi
- jmp _exit
--- a/src/libcrt/amd64/crt-dragonfly.s
+++ /dev/null
@@ -1,1 +1,0 @@
- .include "crt-posix.s"
--- a/src/libcrt/amd64/crt-linux.s
+++ /dev/null
@@ -1,1 +1,0 @@
- .include "crt-posix.s"
--- a/src/libcrt/amd64/crt-netbsd.s
+++ /dev/null
@@ -1,2 +1,0 @@
- .include "../netbsd-ident.s"
- .include "crt-posix.s"
--- a/src/libcrt/amd64/crt-openbsd.s
+++ /dev/null
@@ -1,2 +1,0 @@
- .include "../openbsd-ident.s"
- .include "crt-posix.s"
--- a/src/libcrt/amd64/crt-posix.s
+++ /dev/null
@@ -1,19 +1,0 @@
- .bss
- .globl _environ
-_environ:
- .quad 0
-
- .text
- .globl _start
-_start:
- movq %rsp,%rbp
-
- /* load argc, argv, envp from stack */
- movq (%rbp),%rdi /* argc */
- leaq 8(%rbp),%rsi /* argv */
- leaq 16(%rbp,%rdi,8),%rdx /* envp = argv + 8*argc + 8 */
- movq %rdx,_environ(%rip)
-
- call main
- movl %eax,%edi
- jmp exit
--- a/src/libcrt/arm32/Makefile
+++ b/src/libcrt/arm32/Makefile
@@ -2,7 +2,7 @@
PROJECTDIR=../../..
include $(PROJECTDIR)/scripts/rules.mk
-OBJS = crt-$(SYS).o
+OBJS = dummy.o
TARGET = $(LIBCDIR)/libcrt.a
all: $(TARGET)
--- a/src/libcrt/arm32/crt-linux.s
+++ /dev/null
@@ -1,1 +1,0 @@
- .include "crt-posix.s"
--- a/src/libcrt/arm32/crt-posix.s
+++ /dev/null
@@ -1,16 +1,0 @@
- .bss
- .globl _environ
-_environ:
- .word 0
-
- .text
- .globl _start
-_start:
- ldr r0,[sp] /* argc */
- add r1,sp,#4 /* argv */
- add r2,r1,r0,lsl #2 /* argv = argc + 4*argc + 4 */
- add r2,r2,#4
- ldr r3,=_environ
- str r2,[r3]
- bl main
- b exit
--- a/src/libcrt/arm64/Makefile
+++ b/src/libcrt/arm64/Makefile
@@ -2,7 +2,7 @@
PROJECTDIR=../../..
include $(PROJECTDIR)/scripts/rules.mk
-OBJS = crt-$(SYS).o
+OBJS = dummy.o
TARGET = $(LIBCDIR)/libcrt.a
all: $(TARGET)
--- a/src/libcrt/arm64/crt-linux.s
+++ /dev/null
@@ -1,1 +1,0 @@
- .include "crt-posix.c"
--- a/src/libcrt/arm64/crt-posix.s
+++ /dev/null
@@ -1,16 +1,0 @@
- .bss
- .globl _environ
-_environ:
- .quad 0
-
- .text
- .globl _start
-_start:
- ldr x0,[sp] /* argc */
- add x1,sp,#8 /* argv */
- add x2,x1,x0,lsl #3 /* argv = argc + 8*argc + 8 */
- add x2,x2,#8
- adr x3,_environ
- str x2,[x3]
- bl main
- b exit
--- a/src/libcrt/i386/Makefile
+++ b/src/libcrt/i386/Makefile
@@ -2,7 +2,7 @@
PROJECTDIR=../../..
include $(PROJECTDIR)/scripts/rules.mk
-OBJS = crt-$(SYS).o
+OBJS = dummy.o
TARGET = $(LIBCDIR)/libcrt.a
all: $(TARGET)
--- a/src/libcrt/i386/crt-linux.s
+++ /dev/null
@@ -1,1 +1,0 @@
- .include "crt-posix.s"
--- a/src/libcrt/i386/crt-posix.s
+++ /dev/null
@@ -1,18 +1,0 @@
- .bss
- .globl _environ
-_environ:
- .long 0
-
- .text
- .global _start
-_start:
- movl %esp,%ebp
-
- movl (%ebp),%edi
- leal 8(%ebp),%esi
- leal 16(%ebp,%edi,8),%edx
- movl %edx,_environ
-
- call main
- movl %eax,%edi
- jmp exit
--- a/src/libcrt/netbsd-ident.s
+++ /dev/null
@@ -1,9 +1,0 @@
- .file "crt-netbsd.s"
- .section ".note.netbsd.ident", "a"
- .p2align 2
-
- .long 7
- .long 4
- .long 1
- .ascii "NetBSD\0\0"
- .long 800000000
--- a/src/libcrt/openbsd-ident.s
+++ /dev/null
@@ -1,9 +1,0 @@
- .file "crt-openbsd.s"
- .section ".note.openbsd.ident", "a"
- .p2align 2
- .long 8
- .long 4
- .long 1
- .ascii "OpenBSD\0"
- .long 0
- .p2align 2