فهرست منبع

ctor/dtor nptl: Fix init and fini function compilation

We need to define the rules for .S files so it
gets the include paths some architectures like mips
include headers

Some architectures e.g. SH have their own version
of pt-initfini.c so look for that first before resorting
to generic version of pt-initfini.c

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Khem Raj 13 سال پیش
والد
کامیت
c97ce77636
3فایلهای تغییر یافته به همراه22 افزوده شده و 23 حذف شده
  1. 0 15
      libc/sysdeps/linux/mips/crtn.S
  2. 2 2
      libpthread/nptl/Makefile.in
  3. 20 6
      libpthread/nptl/sysdeps/pthread/Makefile.in

+ 0 - 15
libc/sysdeps/linux/mips/crtn.S

@@ -10,7 +10,6 @@
 #NO_APP
 	.align	2
 	.globl	_init
-	.ent	_init
 	.type	_init, @function
 #NO_APP
 	lw	$31,28($sp)
@@ -22,14 +21,12 @@
 	.set	macro
 	.set	reorder
 
-	.end	_init
 #APP
 	
 	.section .fini
 #NO_APP
 	.align	2
 	.globl	_fini
-	.ent	_fini
 	.type	_fini, @function
 #NO_APP
 	lw	$31,28($sp)
@@ -41,7 +38,6 @@
 	.set	macro
 	.set	reorder
 
-	.end	_fini
 #APP
 	
 	.ident	"GCC: (GNU) 3.3.2"
@@ -54,10 +50,8 @@
 	
 	.section .init
 #NO_APP
-	.align	2
 	.align	3
 	.globl	_init
-	.ent	_init
 	.type	_init, @function
 #NO_APP
 	ld	$31,8($sp)
@@ -68,16 +62,12 @@
 	addiu	$sp,$sp,16
 	.set	macro
 	.set	reorder
-
-	.end	_init
 #APP
 	
 	.section .fini
 #NO_APP
-	.align	2
 	.align	3
 	.globl	_fini
-	.ent	_fini
 	.type	_fini, @function
 #NO_APP
 	ld	$31,8($sp)
@@ -89,7 +79,6 @@
 	.set	macro
 	.set	reorder
 
-	.end	_fini
 #APP
 	
 	.ident	"GCC: (GNU) 3.4.3"
@@ -105,7 +94,6 @@
 #NO_APP
 	.align	2
 	.globl	_init
-	.ent	_init
 	.type	_init, @function
 #NO_APP
 	ld	$31,24($sp)
@@ -118,14 +106,12 @@
 	.set	macro
 	.set	reorder
 
-	.end	_init
 #APP
 	
 	.section .fini
 #NO_APP
 	.align	2
 	.globl	_fini
-	.ent	_fini
 	.type	_fini, @function
 #NO_APP
 	ld	$31,24($sp)
@@ -138,7 +124,6 @@
 	.set	macro
 	.set	reorder
 
-	.end	_fini
 #APP
 	
 	.ident	"GCC: (GNU) 3.3.2"

+ 2 - 2
libpthread/nptl/Makefile.in

@@ -64,8 +64,8 @@ endif
 librt-so-y += $(librt_OBJS:.o=.oS) $(librt-pt-shared-only-routines-y:.o=.oS)
 
 ifeq ($(UCLIBC_CTOR_DTOR),y)
-START_FILE-libpthread.so := $(top_builddir)libpthread/nptl/sysdeps/pthread/crti.o
-END_FILE-libpthread.so := $(top_builddir)libpthread/nptl/sysdeps/pthread/crtn.o
+START_FILE-libpthread.so := $(top_builddir)libpthread/nptl/sysdeps/pthread/pt-crti.o
+END_FILE-libpthread.so := $(top_builddir)libpthread/nptl/sysdeps/pthread/pt-crtn.o
 LDFLAGS-libpthread.so += -nostartfiles
 $(top_builddir)lib/libpthread.so: | $(START_FILE-libpthread.so) $(END_FILE-libpthread.so)
 endif

+ 20 - 6
libpthread/nptl/sysdeps/pthread/Makefile.in

@@ -73,23 +73,37 @@ CFLAGS-pt-initfini.c = -S -g0 $(PICFLAG) -fno-inline-functions	\
 			-finhibit-size-directive			\
 			-fno-asynchronous-unwind-tables -fno-unwind-tables \
 			$(patsubst -f%,-fno-%,$(call check_gcc,-fexceptions,))
-ASFLAGS-crti.S = -g0
-ASFLAGS-crtn.S = -g0
 
-$(libpthread_pthread_OUT)/pt-initfini.s: $(libpthread_pthread_DIR)/pt-initfini.c
+#ASFLAGS += $(PICFLAG) -I$(top_srcdir)include -I$(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)
+ifneq ($(wildcard $(libpthread_DIR)/sysdeps/linux/$(TARGET_ARCH)/pt-initfini.c),)
+PTHREAD_INITFINI := $(libpthread_DIR)/sysdeps/linux/$(TARGET_ARCH)/pt-initfini.c
+else
+PTHREAD_INITFINI := $(libpthread_pthread_DIR)/pt-initfini.c
+endif
+
+ASFLAGS-pt-crti.S =  $(PICFLAG)
+ASFLAGS-pt-crtn.S =  $(PICFLAG)
+
+$(libpthread_pthread_OUT)/pt-crti.o: $(libpthread_pthread_OUT)/pt-crti.S
+	$(compile.S)
+
+$(libpthread_pthread_OUT)/pt-crtn.o: $(libpthread_pthread_OUT)/pt-crtn.S
+	$(compile.S)
+
+$(libpthread_pthread_OUT)/pt-initfini.s: $(PTHREAD_INITFINI)
 	$(compile.c)
-$(libpthread_pthread_OUT)/defs.h: $(libpthread_pthread_DIR)/pt-initfini.c
+$(libpthread_pthread_OUT)/defs.h: $(PTHREAD_INITFINI)
 	$(do_sed) -n -e '/@TESTS_BEGIN/,/@TESTS_END/p' $< | \
 		$(AWK) -f $(top_srcdir)extra/scripts/defs.awk > $@.tmp
 	$(Q)mv $@.tmp $@
 
-$(libpthread_pthread_OUT)/crti.S: $(libpthread_pthread_OUT)/pt-initfini.s $(libpthread_pthread_OUT)/defs.h
+$(libpthread_pthread_OUT)/pt-crti.S: $(libpthread_pthread_OUT)/pt-initfini.s $(libpthread_pthread_OUT)/defs.h
 	$(do_sed) -n -e '/[ 	]*\.file/d' \
 		-e '1,/@HEADER_ENDS/p' \
 		-e '/@_.*_PROLOG_BEGINS/,/@_.*_PROLOG_ENDS/p' \
 		-e '/@TRAILER_BEGINS/,$$p' $< > $@.tmp
 	$(Q)mv $@.tmp $@
-$(libpthread_pthread_OUT)/crtn.S: $(libpthread_pthread_OUT)/pt-initfini.s $(libpthread_pthread_OUT)/defs.h
+$(libpthread_pthread_OUT)/pt-crtn.S: $(libpthread_pthread_OUT)/pt-initfini.s $(libpthread_pthread_OUT)/defs.h
 	$(do_sed) -n -e '/[ 	]*\.file/d' \
 		-e '1,/@HEADER_ENDS/p' \
 		-e '/@_.*_EPILOG_BEGINS/,/@_.*_EPILOG_ENDS/p' \