gcc: move the optimized assembler helpers back into the static libgcc and skip relinking for this arch. due to relocation constraints, the assembler functions cannot be in the shared libgcc and must always be linked in statically

SVN-Revision: 25952
lede-17.01
Felix Fietkau 2011-03-08 13:10:11 +00:00
parent fa6e1dd37d
commit e52b720870
2 changed files with 32 additions and 26 deletions

View File

@ -326,9 +326,12 @@ endef
LIBGCC_A=$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc_pic.a) LIBGCC_A=$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc_pic.a)
LIBGCC_MAP=$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.map) LIBGCC_MAP=$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.map)
BUILD_LIBGCC:=$(if $(CONFIG_avr32)$(CONFIG_m68k),,$(PKG_BUILD_DIR)/libgcc_s.so.*) LIBGCC_SO=$(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so.*)
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
BUILD_LIBGCC:=$(if $(CONFIG_avr32)$(CONFIG_m68k)$(CONFIG_powerpc),,$(PKG_BUILD_DIR)/libgcc_s.so.*)
endif
ifneq ($(BUILD_LIBGCC),)
define Build/Compile/uClibc define Build/Compile/uClibc
$(SCRIPT_DIR)/relink-lib.sh \ $(SCRIPT_DIR)/relink-lib.sh \
"$(TARGET_CROSS)" \ "$(TARGET_CROSS)" \
@ -360,14 +363,26 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
-ldl $(BUILD_LIBGCC) \ -ldl $(BUILD_LIBGCC) \
-Wl,-soname=libpthread.so.0 -Wl,-soname=libpthread.so.0
endef endef
ifneq ($(BUILD_LIBGCC),) define Build/Compile/libgcc
define Build/Compile/libgcc
$(SCRIPT_DIR)/relink-lib.sh \ $(SCRIPT_DIR)/relink-lib.sh \
"$(TARGET_CROSS)" \ "$(TARGET_CROSS)" \
"$(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so.*)" \ "$(LIBGCC_SO)" \
"$(LIBGCC_A)" \ "$(LIBGCC_A)" \
"$(patsubst $(TOOLCHAIN_DIR)/lib/%,$(PKG_BUILD_DIR)/%,$(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so.*))" \ "$(patsubst $(TOOLCHAIN_DIR)/lib/%,$(PKG_BUILD_DIR)/%,$(LIBGCC_SO))" \
-Wl,--version-script=$(LIBGCC_MAP) -Wl,-soname=libgcc_s.so.1 -Wl,--version-script=$(LIBGCC_MAP) -Wl,-soname=libgcc_s.so.1
endef
else
define Build/Compile/uClibc
$(CP) \
$(TOOLCHAIN_DIR)/lib/libuClibc-*.so \
$(TOOLCHAIN_DIR)/lib/libcrypt-*.so \
$(TOOLCHAIN_DIR)/lib/libm-*.so \
$(TOOLCHAIN_DIR)/lib/libpthread-*.so \
$(PKG_BUILD_DIR)/
endef
ifneq ($(LIBGCC_SO),)
define Build/Compile/libgcc
$(CP) $(LIBGCC_SO) $(PKG_BUILD_DIR)/
endef endef
endif endif
endif endif

View File

@ -35,18 +35,6 @@
/* Determine which dynamic linker to use depending on whether GLIBC or /* Determine which dynamic linker to use depending on whether GLIBC or
uClibc is the default C library and whether -muclibc or -mglibc has uClibc is the default C library and whether -muclibc or -mglibc has
been passed to change the default. */ been passed to change the default. */
--- a/gcc/config/rs6000/ppc-asm.h
+++ b/gcc/config/rs6000/ppc-asm.h
@@ -325,8 +325,7 @@
FUNC_NAME(name):
#define HIDDEN_FUNC(name) \
- FUNC_START(name) \
- .hidden FUNC_NAME(name);
+ FUNC_START(name);
#define FUNC_END(name) \
GLUE(.L,name): \
--- a/gcc/mkmap-symver.awk --- a/gcc/mkmap-symver.awk
+++ b/gcc/mkmap-symver.awk +++ b/gcc/mkmap-symver.awk
@@ -132,5 +132,5 @@ @@ -132,5 +132,5 @@
@ -56,14 +44,6 @@
- printf ("\n local:\n\t*;\n};\n"); - printf ("\n local:\n\t*;\n};\n");
+ printf ("\n\t*;\n};\n"); + printf ("\n\t*;\n};\n");
} }
--- a/libgcc/config/rs6000/t-ppccomm
+++ b/libgcc/config/rs6000/t-ppccomm
@@ -1,4 +1,4 @@
-LIB2ADD_ST += crtsavfpr.S crtresfpr.S \
+LIB2ADD += crtsavfpr.S crtresfpr.S \
crtsavgpr.S crtresgpr.S \
crtresxfpr.S crtresxgpr.S \
e500crtres32gpr.S \
--- a/libgcc/Makefile.in --- a/libgcc/Makefile.in
+++ b/libgcc/Makefile.in +++ b/libgcc/Makefile.in
@@ -265,7 +265,7 @@ @@ -265,7 +265,7 @@
@ -75,3 +55,14 @@
ifneq (,$(vis_hide)) ifneq (,$(vis_hide))
--- a/gcc/config/rs6000/linux.h
+++ b/gcc/config/rs6000/linux.h
@@ -85,6 +85,8 @@
#define USE_LD_AS_NEEDED 1
#endif
+#define LIBGCC_SPEC "%{!static:%{!static-libgcc:-lgcc_s}} -lgcc"
+
#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (PowerPC GNU/Linux)");