diff mbox series

[OpenWrt-Devel,RFC] toolchain: gcc: drop 850-use_shared_libgcc.patch

Message ID 20180625053001.2360-1-yszhou4tech@gmail.com
State RFC
Headers show
Series [OpenWrt-Devel,RFC] toolchain: gcc: drop 850-use_shared_libgcc.patch | expand

Commit Message

Yousong Zhou June 25, 2018, 5:30 a.m. UTC
A link error was encountered when invoking "gccgo -static hello.go" to test a
fix for gccgo [1].  The linker cannot find reference to _Unwind_Resume which is
defined in libgcc_eh.a and from the "gccgo -v" and "gccgo -dumpspecs" output, I
found the issue was caused by libgcc_spec being patched by the said patch

The patch was originally introduced for linaro-gcc 4.5 in 2011 commit
23e18c9 ("gcc-linaro: fix the libgcc spec to default to using the shared
libgcc").  It should be not needed now as the libgcc_spec logic of since
at least gcc 5.5.0 already takes that into account

    %{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared-libgcc:-lgcc --as-needed -lgcc_s --no-as-needed}%{shared-libgcc:-lgcc_s%{!shared: -lgcc}}}}

It should also be noted that -lgcc_eh was removed in a followed up
commit c2e2651 ("toolchain: remove -lgcc_eh from the default libgcc
spec, it breaks packages"), though the actual symptom was not
recorded then

 [1] https://bugs.openwrt.org/index.php?do=details&task_id=1498

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
---
 .../gcc/patches/5.5.0/850-use_shared_libgcc.patch  | 47 -------------------
 .../gcc/patches/7.3.0/850-use_shared_libgcc.patch  | 54 ----------------------
 .../850-use_shared_libgcc.patch                    | 54 ----------------------
 3 files changed, 155 deletions(-)
 delete mode 100644 toolchain/gcc/patches/5.5.0/850-use_shared_libgcc.patch
 delete mode 100644 toolchain/gcc/patches/7.3.0/850-use_shared_libgcc.patch
 delete mode 100644 toolchain/gcc/patches/arc-2017.09-release/850-use_shared_libgcc.patch

Comments

Felix Fietkau July 4, 2018, 7:53 p.m. UTC | #1
On 2018-06-25 07:30, Yousong Zhou wrote:
> A link error was encountered when invoking "gccgo -static hello.go" to test a
> fix for gccgo [1].  The linker cannot find reference to _Unwind_Resume which is
> defined in libgcc_eh.a and from the "gccgo -v" and "gccgo -dumpspecs" output, I
> found the issue was caused by libgcc_spec being patched by the said patch
> 
> The patch was originally introduced for linaro-gcc 4.5 in 2011 commit
> 23e18c9 ("gcc-linaro: fix the libgcc spec to default to using the shared
> libgcc").  It should be not needed now as the libgcc_spec logic of since
> at least gcc 5.5.0 already takes that into account
> 
>     %{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared-libgcc:-lgcc --as-needed -lgcc_s --no-as-needed}%{shared-libgcc:-lgcc_s%{!shared: -lgcc}}}}
Won't this link in libgcc by default unless -shared-libgcc is passed?
I think last time I looked into this, this caused some extra bloat to
creep into every single compiled binary.
Maybe you could compare binaries before and after this change to make
sure that is no longer the case.

- Felix
Felix Fietkau July 4, 2018, 8:22 p.m. UTC | #2
On 2018-07-04 21:53, Felix Fietkau wrote:
> On 2018-06-25 07:30, Yousong Zhou wrote:
>> A link error was encountered when invoking "gccgo -static hello.go" to test a
>> fix for gccgo [1].  The linker cannot find reference to _Unwind_Resume which is
>> defined in libgcc_eh.a and from the "gccgo -v" and "gccgo -dumpspecs" output, I
>> found the issue was caused by libgcc_spec being patched by the said patch
>> 
>> The patch was originally introduced for linaro-gcc 4.5 in 2011 commit
>> 23e18c9 ("gcc-linaro: fix the libgcc spec to default to using the shared
>> libgcc").  It should be not needed now as the libgcc_spec logic of since
>> at least gcc 5.5.0 already takes that into account
>> 
>>     %{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared-libgcc:-lgcc --as-needed -lgcc_s --no-as-needed}%{shared-libgcc:-lgcc_s%{!shared: -lgcc}}}}
> Won't this link in libgcc by default unless -shared-libgcc is passed?
> I think last time I looked into this, this caused some extra bloat to
> creep into every single compiled binary.
> Maybe you could compare binaries before and after this change to make
> sure that is no longer the case.
I just ran that test. With that patch applied, it seems that every
single executable gets bigger by a considerable amount.

- Felix
diff mbox series

Patch

diff --git a/toolchain/gcc/patches/5.5.0/850-use_shared_libgcc.patch b/toolchain/gcc/patches/5.5.0/850-use_shared_libgcc.patch
deleted file mode 100644
index 5818cf4da0..0000000000
--- a/toolchain/gcc/patches/5.5.0/850-use_shared_libgcc.patch
+++ /dev/null
@@ -1,47 +0,0 @@ 
---- a/gcc/config/arm/linux-eabi.h
-+++ b/gcc/config/arm/linux-eabi.h
-@@ -131,10 +131,6 @@
- #define ENDFILE_SPEC \
-   LINUX_OR_ANDROID_LD (GNU_USER_TARGET_ENDFILE_SPEC, ANDROID_ENDFILE_SPEC)
- 
--/* Use the default LIBGCC_SPEC, not the version in linux-elf.h, as we
--   do not use -lfloat.  */
--#undef LIBGCC_SPEC
--
- /* Clear the instruction cache from `beg' to `end'.  This is
-    implemented in lib1funcs.S, so ensure an error if this definition
-    is used.  */
---- a/gcc/config/linux.h
-+++ b/gcc/config/linux.h
-@@ -53,6 +53,10 @@ see the files COPYING3 and COPYING.RUNTI
- 	builtin_assert ("system=posix");			\
-     } while (0)
- 
-+#ifndef LIBGCC_SPEC
-+#define LIBGCC_SPEC "%{static|static-libgcc:-lgcc}%{!static:%{!static-libgcc:-lgcc_s}}"
-+#endif
-+
- /* Determine which dynamic linker to use depending on whether GLIBC or
-    uClibc or Bionic or musl is the default C library and whether
-    -muclibc or -mglibc or -mbionic or -mmusl has been passed to change
---- a/libgcc/mkmap-symver.awk
-+++ b/libgcc/mkmap-symver.awk
-@@ -132,5 +132,5 @@ function output(lib) {
-   else if (inherit[lib])
-     printf("} %s;\n", inherit[lib]);
-   else
--    printf ("\n  local:\n\t*;\n};\n");
-+    printf ("\n\t*;\n};\n");
- }
---- a/gcc/config/rs6000/linux.h
-+++ b/gcc/config/rs6000/linux.h
-@@ -60,6 +60,9 @@
- #undef	CPP_OS_DEFAULT_SPEC
- #define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux)"
- 
-+#undef LIBGCC_SPEC
-+#define LIBGCC_SPEC "%{!static:%{!static-libgcc:-lgcc_s}} -lgcc"
-+
- #undef  LINK_SHLIB_SPEC
- #define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}}"
- 
diff --git a/toolchain/gcc/patches/7.3.0/850-use_shared_libgcc.patch b/toolchain/gcc/patches/7.3.0/850-use_shared_libgcc.patch
deleted file mode 100644
index 1d07efed80..0000000000
--- a/toolchain/gcc/patches/7.3.0/850-use_shared_libgcc.patch
+++ /dev/null
@@ -1,54 +0,0 @@ 
-commit dcfc40358b5a3cae7320c17f8d1cebd5ad5540cd
-Author: Felix Fietkau <nbd@openwrt.org>
-Date:   Sun Feb 12 20:25:47 2012 +0000
-
-    gcc 4.6: port over the missing patch 850-use_shared_libgcc.patch to prevent libgcc crap from leaking into every single binary
-    
-    SVN-Revision: 30486
---- a/gcc/config/arm/linux-eabi.h
-+++ b/gcc/config/arm/linux-eabi.h
-@@ -126,10 +126,6 @@
-   "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} "	\
-   LINUX_OR_ANDROID_LD (GNU_USER_TARGET_ENDFILE_SPEC, ANDROID_ENDFILE_SPEC)
- 
--/* Use the default LIBGCC_SPEC, not the version in linux-elf.h, as we
--   do not use -lfloat.  */
--#undef LIBGCC_SPEC
--
- /* Clear the instruction cache from `beg' to `end'.  This is
-    implemented in lib1funcs.S, so ensure an error if this definition
-    is used.  */
---- a/gcc/config/linux.h
-+++ b/gcc/config/linux.h
-@@ -53,6 +53,10 @@ see the files COPYING3 and COPYING.RUNTI
- 	builtin_assert ("system=posix");			\
-     } while (0)
- 
-+#ifndef LIBGCC_SPEC
-+#define LIBGCC_SPEC "%{static|static-libgcc:-lgcc}%{!static:%{!static-libgcc:-lgcc_s}}"
-+#endif
-+
- /* Determine which dynamic linker to use depending on whether GLIBC or
-    uClibc or Bionic or musl is the default C library and whether
-    -muclibc or -mglibc or -mbionic or -mmusl has been passed to change
---- a/libgcc/mkmap-symver.awk
-+++ b/libgcc/mkmap-symver.awk
-@@ -136,5 +136,5 @@ function output(lib) {
-   else if (inherit[lib])
-     printf("} %s;\n", inherit[lib]);
-   else
--    printf ("\n  local:\n\t*;\n};\n");
-+    printf ("\n\t*;\n};\n");
- }
---- a/gcc/config/rs6000/linux.h
-+++ b/gcc/config/rs6000/linux.h
-@@ -60,6 +60,9 @@
- #undef	CPP_OS_DEFAULT_SPEC
- #define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux)"
- 
-+#undef LIBGCC_SPEC
-+#define LIBGCC_SPEC "%{!static:%{!static-libgcc:-lgcc_s}} -lgcc"
-+
- #undef  LINK_SHLIB_SPEC
- #define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}}"
- 
diff --git a/toolchain/gcc/patches/arc-2017.09-release/850-use_shared_libgcc.patch b/toolchain/gcc/patches/arc-2017.09-release/850-use_shared_libgcc.patch
deleted file mode 100644
index 1d07efed80..0000000000
--- a/toolchain/gcc/patches/arc-2017.09-release/850-use_shared_libgcc.patch
+++ /dev/null
@@ -1,54 +0,0 @@ 
-commit dcfc40358b5a3cae7320c17f8d1cebd5ad5540cd
-Author: Felix Fietkau <nbd@openwrt.org>
-Date:   Sun Feb 12 20:25:47 2012 +0000
-
-    gcc 4.6: port over the missing patch 850-use_shared_libgcc.patch to prevent libgcc crap from leaking into every single binary
-    
-    SVN-Revision: 30486
---- a/gcc/config/arm/linux-eabi.h
-+++ b/gcc/config/arm/linux-eabi.h
-@@ -126,10 +126,6 @@
-   "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} "	\
-   LINUX_OR_ANDROID_LD (GNU_USER_TARGET_ENDFILE_SPEC, ANDROID_ENDFILE_SPEC)
- 
--/* Use the default LIBGCC_SPEC, not the version in linux-elf.h, as we
--   do not use -lfloat.  */
--#undef LIBGCC_SPEC
--
- /* Clear the instruction cache from `beg' to `end'.  This is
-    implemented in lib1funcs.S, so ensure an error if this definition
-    is used.  */
---- a/gcc/config/linux.h
-+++ b/gcc/config/linux.h
-@@ -53,6 +53,10 @@ see the files COPYING3 and COPYING.RUNTI
- 	builtin_assert ("system=posix");			\
-     } while (0)
- 
-+#ifndef LIBGCC_SPEC
-+#define LIBGCC_SPEC "%{static|static-libgcc:-lgcc}%{!static:%{!static-libgcc:-lgcc_s}}"
-+#endif
-+
- /* Determine which dynamic linker to use depending on whether GLIBC or
-    uClibc or Bionic or musl is the default C library and whether
-    -muclibc or -mglibc or -mbionic or -mmusl has been passed to change
---- a/libgcc/mkmap-symver.awk
-+++ b/libgcc/mkmap-symver.awk
-@@ -136,5 +136,5 @@ function output(lib) {
-   else if (inherit[lib])
-     printf("} %s;\n", inherit[lib]);
-   else
--    printf ("\n  local:\n\t*;\n};\n");
-+    printf ("\n\t*;\n};\n");
- }
---- a/gcc/config/rs6000/linux.h
-+++ b/gcc/config/rs6000/linux.h
-@@ -60,6 +60,9 @@
- #undef	CPP_OS_DEFAULT_SPEC
- #define CPP_OS_DEFAULT_SPEC "%(cpp_os_linux)"
- 
-+#undef LIBGCC_SPEC
-+#define LIBGCC_SPEC "%{!static:%{!static-libgcc:-lgcc_s}} -lgcc"
-+
- #undef  LINK_SHLIB_SPEC
- #define LINK_SHLIB_SPEC "%{shared:-shared} %{!shared: %{static:-static}}"
-