summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-03-08 13:10:11 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-03-08 13:10:11 +0000
commit0e2d55e3e345e55a4c9c7335d42501301834d732 (patch)
tree8c8b9b744c6475692a2547845d1ede11ee4162d8
parentbe4aa36f4873365cbb465e3dfc648d023b681853 (diff)
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
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@25952 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--package/base-files/Makefile27
-rw-r--r--toolchain/gcc/patches/linaro/850-use_shared_libgcc.patch31
2 files changed, 32 insertions, 26 deletions
diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index 07cc8b460..086dd32bd 100644
--- a/package/base-files/Makefile
+++ b/package/base-files/Makefile
@@ -326,9 +326,12 @@ endef
LIBGCC_A=$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc_pic.a)
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),)
+ BUILD_LIBGCC:=$(if $(CONFIG_avr32)$(CONFIG_m68k)$(CONFIG_powerpc),,$(PKG_BUILD_DIR)/libgcc_s.so.*)
+endif
+
+ifneq ($(BUILD_LIBGCC),)
define Build/Compile/uClibc
$(SCRIPT_DIR)/relink-lib.sh \
"$(TARGET_CROSS)" \
@@ -360,14 +363,26 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
-ldl $(BUILD_LIBGCC) \
-Wl,-soname=libpthread.so.0
endef
- ifneq ($(BUILD_LIBGCC),)
- define Build/Compile/libgcc
+ define Build/Compile/libgcc
$(SCRIPT_DIR)/relink-lib.sh \
"$(TARGET_CROSS)" \
- "$(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so.*)" \
+ "$(LIBGCC_SO)" \
"$(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
+ 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
endif
endif
diff --git a/toolchain/gcc/patches/linaro/850-use_shared_libgcc.patch b/toolchain/gcc/patches/linaro/850-use_shared_libgcc.patch
index a9cc80bfe..5e33c9d4e 100644
--- a/toolchain/gcc/patches/linaro/850-use_shared_libgcc.patch
+++ b/toolchain/gcc/patches/linaro/850-use_shared_libgcc.patch
@@ -35,18 +35,6 @@
/* Determine which dynamic linker to use depending on whether GLIBC or
uClibc is the default C library and whether -muclibc or -mglibc has
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
+++ b/gcc/mkmap-symver.awk
@@ -132,5 +132,5 @@
@@ -56,14 +44,6 @@
- printf ("\n local:\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
+++ b/libgcc/Makefile.in
@@ -265,7 +265,7 @@
@@ -75,3 +55,14 @@
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)");
+