summaryrefslogtreecommitdiffstats
path: root/tools/mklibs
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
commit04e3dae4adbfd5a69595e17d9f437a60c64a7811 (patch)
treef2727dc94848678ccd5fb09f16d9748829b4c2e4 /tools/mklibs
parentd8e217c28f40cc9e08abaa1c9425fe88b7aed675 (diff)
downloadopenwrt-04e3dae4adbfd5a69595e17d9f437a60c64a7811.tar.gz
openwrt-04e3dae4adbfd5a69595e17d9f437a60c64a7811.tar.bz2
openwrt-04e3dae4adbfd5a69595e17d9f437a60c64a7811.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
SVN-Revision: 25793
Diffstat (limited to 'tools/mklibs')
-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