aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-02-28 16:17:04 +0000
committerFelix Fietkau <nbd@openwrt.org>2011-02-28 16:17:04 +0000
commit57b134349f8c8e27117525f220122eea2edbc834 (patch)
treebb68de6af40c669f6a55c7930392504c5ddd57fa
parent77dd25bd3b6912f6911f297ca4c5154cc9dffd86 (diff)
downloadupstream-57b134349f8c8e27117525f220122eea2edbc834.tar.gz
upstream-57b134349f8c8e27117525f220122eea2edbc834.tar.bz2
upstream-57b134349f8c8e27117525f220122eea2edbc834.zip
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
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@25793 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--tools/mklibs/patches/009-uclibc_libgcc_link.patch40
1 files 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