summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-02-28 16:17:04 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2011-02-28 16:17:04 +0000
commitf49117a33b85a922f01a2f5778b3a893aec9cd01 (patch)
treebb68de6af40c669f6a55c7930392504c5ddd57fa
parent19e5102c2092360289be306ea6d52d9628e7c1f4 (diff)
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 d5e94068d..d201821fc 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