Procházet zdrojové kódy

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.
Rich Felker před 13 roky
rodič
revize
b768c7bc63
1 změnil soubory, kde provedl 7 přidání a 2 odebrání
  1. 7 2
      tools/gen-musl-gcc.sh

+ 7 - 2
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
 }