summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-03-08 13:10:11 +0000
committerFelix Fietkau <nbd@openwrt.org>2011-03-08 13:10:11 +0000
commite52b720870c23511cfc9323a784694c9dd24a0ab (patch)
tree7e618d0e20a26660f596f58c283cab7982e6c7d6
parentfa6e1dd37d33ffcba9d1fdf74d1c9f472a078da1 (diff)
downloadmtk-20170518-e52b720870c23511cfc9323a784694c9dd24a0ab.zip
mtk-20170518-e52b720870c23511cfc9323a784694c9dd24a0ab.tar.gz
mtk-20170518-e52b720870c23511cfc9323a784694c9dd24a0ab.tar.bz2
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
-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 07cc8b4..086dd32 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 a9cc80b..5e33c9d 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)");
+