From 647e66a67cd3fad6d37bb9fe5f76b1e5d8e93c96 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 17 Jan 2001 10:37:05 +0000 Subject: Now works on StrongArm (using crt0.S) and arm7tdmi/uClinux with the arm-pic-elf compiler (using crt0pic.S). -Erik --- libc/sysdeps/linux/arm/Makefile | 11 ++++-- libc/sysdeps/linux/arm/crt0pic.S | 74 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 libc/sysdeps/linux/arm/crt0pic.S (limited to 'libc/sysdeps/linux') diff --git a/libc/sysdeps/linux/arm/Makefile b/libc/sysdeps/linux/arm/Makefile index c6505c93c..4b23adae7 100644 --- a/libc/sysdeps/linux/arm/Makefile +++ b/libc/sysdeps/linux/arm/Makefile @@ -25,7 +25,14 @@ include $(TOPDIR)Rules.mak LIBC=$(TOPDIR)libc.a ASFLAGS=$(CFLAGS) -CRT0=crt0.S +TARGET_MACHINE_TYPE=$(shell $(CC) -dumpmachine) + +ifeq ($(TARGET_MACHINE_TYPE),arm-pic-elf) + CRT0=crt0pic.S +else + CRT0=crt0.S +endif + CRT0_OBJ=$(patsubst %.S,%.o, $(CRT0)) SSRC=longjmp.S setjmp.S @@ -43,7 +50,7 @@ $(LIBC): ar-target ar-target: $(OBJS) $(CRT0_OBJ) $(AR) $(ARFLAGS) $(LIBC) $(OBJS) - cp $(CRT0_OBJ) $(TOPDIR)$(CRT0_OBJ) + cp $(CRT0_OBJ) $(TOPDIR)crt0.o $(CRT0_OBJ): %.o : %.S $(CC) $(CFLAGS) -c $< -o $@ diff --git a/libc/sysdeps/linux/arm/crt0pic.S b/libc/sysdeps/linux/arm/crt0pic.S new file mode 100644 index 000000000..8e2257865 --- /dev/null +++ b/libc/sysdeps/linux/arm/crt0pic.S @@ -0,0 +1,74 @@ +.text + .align 2 + .global __environ + .global _start + .global exit + .global main + .global __libc_init + .global __init_stdio + .global __stdio_close_all + .global _void_void_null_func + + .type _start,%function + .type exit,%function + .type main,%function + .type __libc_init,%function + .type __init_stdio,%function + .type __stdio_close_all,%function + .type _void_void_null_func,%function + + + +@ r0 = argc +@ r1 = argv +@ r2 = envp +@ sl = data segment + +.text +_start: + @ adjust the data segment base pointer + ldr r3,=__data_start + sub sl,sl,r3 + mov r9,sl + + ldr r3, .L3 + str r2,[r9,r3] + ldr r0,[sp, #0] + ldr r1,[sp, #4] + ldr r2,[sp, #8] + + /* Tell libc to initialize whatever it needs */ + bl __libc_init + bl __init_stdio + bl main +/* ldr r0,=0 */ + bl exit + +_void_void_null_func: + nop + +.weak __libc_init +__libc_init = _void_void_null_func + +.weak __init_stdio +__init_stdio = _void_void_null_func + +.weak __stdio_close_all +__stdio_close_all = _void_void_null_func + +.align 2 +.L3: + .word environ + + +.data + .align 2 + .global __environ + +__environ: + .long 0 + +.weak environ +environ = __environ + + -- cgit v1.2.3