浏览代码

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 14 年之前
父节点
当前提交
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' \