diff options
| -rw-r--r-- | libc/sysdeps/linux/cris/Makefile | 9 | ||||
| -rw-r--r-- | libc/sysdeps/linux/cris/crt0.c | 13 | 
2 files changed, 16 insertions, 6 deletions
diff --git a/libc/sysdeps/linux/cris/Makefile b/libc/sysdeps/linux/cris/Makefile index 6b9931ebb..b3d7d16c5 100644 --- a/libc/sysdeps/linux/cris/Makefile +++ b/libc/sysdeps/linux/cris/Makefile @@ -16,8 +16,8 @@ TOPDIR=../../../../  include $(TOPDIR)Rules.mak  ASFLAGS=$(CFLAGS) -CRT0=crt0.c -CRT0_OBJ=$(patsubst %.c,%.o, $(CRT0)) +CRT0_SRC = crt0.c +CRT0_OBJ = crt0.o crt1.o  SSRC= setjmp.S __longjmp.S clone.S sysdep.S syscall.S  ifeq ($(UNIFIED_SYSCALL),y) @@ -39,8 +39,8 @@ ar-target: $(OBJS) $(CRT0_OBJ)  	$(AR) $(ARFLAGS) $(LIBC) $(OBJS)  	cp $(CRT0_OBJ) $(TOPDIR)libc/$(CRT0_OBJ) -$(CRT0_OBJ): %.o : %.c -	$(CC) $(CFLAGS) -c $< -o $@ +$(CRT0_OBJ): $(CRT0_SRC) +	$(CC) $(CFLAGS) -DL_$* $< -c -o $*.o  	$(STRIPTOOL) -x -R .note -R .comment $*.o  $(SOBJS): %.o : %.S @@ -52,7 +52,6 @@ $(COBJS): %.o : %.c  	$(STRIPTOOL) -x -R .note -R .comment $*.o  headers: -	@(TOPDIR=$(TOPDIR) CC=$(CC) /bin/sh $(TOPDIR)/extra/scripts/gen_bits_syscall_h.sh > bits/syscall.h )   clean:  	rm -f *.[oa] *~ core diff --git a/libc/sysdeps/linux/cris/crt0.c b/libc/sysdeps/linux/cris/crt0.c index 4fe68ce05..442a1c9ec 100644 --- a/libc/sysdeps/linux/cris/crt0.c +++ b/libc/sysdeps/linux/cris/crt0.c @@ -23,8 +23,15 @@ _start ()  	__asm__ volatile("jump start1");  } -void __uClibc_main(int argc, char **argv, char **envp) +#include <features.h> + +extern void __uClibc_main(int argc, char **argv, char **envp) +         __attribute__ ((__noreturn__)); +extern void __uClibc_start_main(int argc, char **argv, char **envp,  +	void (*app_init)(void), void (*app_fini)(void))           __attribute__ ((__noreturn__)); +extern void weak_function _init(void); +extern void weak_function _fini(void);  static void  start1 (int argc, char **argv) @@ -45,6 +52,10 @@ start1 (int argc, char **argv)  		 */  		--environ; +#if defined L_crt0 || ! defined __UCLIBC_CTOR_DTOR__  	/* Leave control to the libc */  	__uClibc_main(argc, argv, environ); +#else +	__uClibc_start_main(argc, argv, environ, _init, _fini); +#endif  }  | 
