From: Rich Felker Date: Tue, 24 Jan 2012 05:22:27 +0000 (-0500) Subject: make gcc wrapper support -shared correctly X-Git-Url: http://nsz.repo.hu/git/?p=musl;a=commitdiff_plain;h=b768c7bc6398e297945b08dd5315cae472279a3a;ds=sidebyside make gcc wrapper support -shared correctly it was previously attempting to link start files as part of shared objects. this is definitely wrong and depending on the platform and linker could range from just adding extraneous junk to introducing textrels to making linking fail entirely. --- diff --git a/tools/gen-musl-gcc.sh b/tools/gen-musl-gcc.sh index 1ef0550f..edc40846 100644 --- a/tools/gen-musl-gcc.sh +++ b/tools/gen-musl-gcc.sh @@ -29,6 +29,7 @@ for i ; do case "$skip$i" in -I|-L) skip=--- ; continue ;; -[cSE]|-M*) nolink=1 ;; +-shared) nocrt=1 ;; -*) ;; *) havefile=1 ;; esac @@ -37,13 +38,17 @@ done [ "$havefile" ] || nolink=1 +[ "$nolink" ] && nocrt=1 + +[ "$nocrt" ] || set -- "$libc_start" "$libc_crt" "$@" "$libc_end" \ + [ "$nolink" ] || { tmp_specs=$HOME/.specs.tmp.$$ printf '*link_libgcc:\n\n\n' > "$tmp_specs" || exit 1 exec 3<"$tmp_specs" rm -f "$tmp_specs" -set -- -specs=/proc/self/fd/3 "$libc_start" "$libc_crt" "$@" "$libc_end" \ - -Wl,--start-group -lc -lgcc -lgcc_eh -Wl,--end-group \ +set -- -specs=/proc/self/fd/3 "$@" \ + -Wl,--as-needed -Wl,--start-group -lc -lgcc -lgcc_eh -Wl,--end-group \ -Wl,-dynamic-linker,"$ldso_pathname" -Wl,-nostdlib }