gcc: move the optimized assembler helpers back into the static libgcc and skip relink...
authorFelix Fietkau <nbd@openwrt.org>
Tue, 8 Mar 2011 13:10:11 +0000 (13:10 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 8 Mar 2011 13:10:11 +0000 (13:10 +0000)
SVN-Revision: 25952

package/base-files/Makefile
toolchain/gcc/patches/linaro/850-use_shared_libgcc.patch

index 07cc8b460a6e2299145c16c527eff66467fedf73..086dd32bd8b4146fe367f8a680eef0fab4d638e5 100644 (file)
@@ -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
index a9cc80bfe036d6e0c9e1a8a72f6a29e07a1a0611..5e33c9d4e16de25aa100142cf5adcafa25226ad4 100644 (file)
  /* 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 @@
 -    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 @@
  
  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)");