From 04e3dae4adbfd5a69595e17d9f437a60c64a7811 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Mon, 28 Feb 2011 16:17:04 +0000
Subject: [PATCH] mklibs: properly fix library linking - the relinking in some
 instances used static libraries instead of shared ones with the same name,
 that led to some nasty symbol conflicts and pic issues. fix this by always
 using the full path to the libraries and also fix the libc vs libpthread
 linking order

SVN-Revision: 25793
---
 .../patches/009-uclibc_libgcc_link.patch      | 40 +++++++++++--------
 1 file changed, 24 insertions(+), 16 deletions(-)

diff --git a/tools/mklibs/patches/009-uclibc_libgcc_link.patch b/tools/mklibs/patches/009-uclibc_libgcc_link.patch
index d5e94068d3..d201821fc6 100644
--- a/tools/mklibs/patches/009-uclibc_libgcc_link.patch
+++ b/tools/mklibs/patches/009-uclibc_libgcc_link.patch
@@ -1,30 +1,38 @@
 --- a/src/mklibs.py
 +++ b/src/mklibs.py
-@@ -560,6 +560,7 @@ while 1:
+@@ -112,11 +112,8 @@ def library_depends_gcc_libnames(obj, so
+     ret = []
+     for i in libs:
+         match = re.match("^(((?P<ld>ld\S*)|(lib(?P<lib>\S+))))\.so.*$", i)
+-        if match and not soname in ("libpthread.so.0"):
+-            if match.group('ld'):
+-                ret.append(find_lib(match.group(0)))
+-            elif match.group('lib'):
+-                ret.append('-l%s' % match.group('lib'))
++        if match:
++            ret.append(find_lib(match.group(0)))
+     return ' '.join(ret)
+ 
+ class Symbol(object):
+@@ -560,6 +557,7 @@ while 1:
              extra_flags = []
              extra_pre_obj = []
              extra_post_obj = []
-+            libgcc_link = "-lgcc"
++            libgcc_link = find_lib("libgcc_s.so.1")
  
              symbols.update(library_symbols_used[library])
  
-@@ -575,6 +576,10 @@ while 1:
-                 symbols.add(ProvidedSymbol('__uClibc_init', None, None, True))
-                 symbols.add(ProvidedSymbol('__uClibc_fini', None, None, True))
-                 extra_flags.append("-Wl,-init,__uClibc_init")
-+                libgcc_link = "-lgcc_s_pic"
-+
-+            if soname in ("libm.so.0"):
-+                libgcc_link = "-lgcc_s_pic"
- 
-             map_file = find_pic_map(library)
-             if map_file:
-@@ -590,7 +595,7 @@ while 1:
+@@ -590,9 +588,11 @@ while 1:
              cmd.append(pic_file)
              cmd.extend(extra_post_obj)
              cmd.extend(extra_flags)
 -            cmd.append("-lgcc")
-+            cmd.append(libgcc_link)
              cmd.extend(["-L%s" % a for a in [dest_path] + [sysroot + b for b in lib_path if sysroot == "" or b not in ("/" + libdir + "/", "/usr/" + libdir + "/")]])
-             cmd.append(library_depends_gcc_libnames(so_file, soname))
+-            cmd.append(library_depends_gcc_libnames(so_file, soname))
++            if soname != "libgcc_s.so.1" and soname != "libc.so.0":
++                cmd.append(library_depends_gcc_libnames(so_file, soname))
++            if soname != "libgcc_s.so.1":
++                cmd.append(libgcc_link)
              command(target + "gcc", *cmd)
+ 
+             ## DEBUG
-- 
GitLab