X-Git-Url: http://nsz.repo.hu/git/?p=musl;a=blobdiff_plain;f=tools%2Fgen-musl-gcc.sh;h=7b80fda624e72335f070b041839860eb46b820f0;hp=bf20c1f63ce1d19b68e67faec90f05a8cb0bbd7c;hb=02eb568dedadb3d66c2751aba6bea559370ff32c;hpb=71df8b2760348c55b1c0d04aeebcae372d9760d3 diff --git a/tools/gen-musl-gcc.sh b/tools/gen-musl-gcc.sh index bf20c1f6..7b80fda6 100644 --- a/tools/gen-musl-gcc.sh +++ b/tools/gen-musl-gcc.sh @@ -1,8 +1,9 @@ #!/bin/sh -printf '#!/bin/sh\n\nlibc_prefix="%s"\n' "$1" +printf '#!/bin/sh\n\nlibc_prefix="%s"\nldso_pathname="%s"\n' "$1" "$2" cat <<"EOF" +gcc=gcc libc_lib=$libc_prefix/lib libc_inc=$libc_prefix/include libc_crt="$libc_lib/crt1.o" @@ -10,22 +11,50 @@ libc_start="$libc_lib/crti.o" libc_end="$libc_lib/crtn.o" gcc_inc=$libc_inc -libgcc="`gcc \"$@\" -print-file-name=libgcc.a`" -libgcc=${libgcc%libgcc.a} - -gcc -wrapper sh,-c,' -x= ; y= ; z= ; s= ; for i ; do - [ "$z" ] || set -- ; z=1 - case "$i" in - -shared) s=1 ; set -- "$@" -shared ;; - -Lxxxxxx) x=1 ;; - -xxxxxx) x= ; [ "$s" ] || set -- "$@" "'"$libc_start"'" "'"$libc_crt"'" ;; - -l*) [ "$y" ] || set -- "$@" '"$libc_end"' ; set -- "$@" "$i" ; y=1 ;; - *) [ "$x" ] || set -- "$@" "$i" ;; - esac +libgcc="$("$gcc" -print-file-name=libgcc.a)" +libgcc=${libgcc%/libgcc.a} + +gccver=${libgcc##*/} +gcctarget=${libgcc%/*} +gcctarget=${gcctarget##*/} + +case "$gccver" in +[0123].*|4.[01]*) ;; +*) nosp=-fno-stack-protector ;; +esac + +[ "x$1" = "x-V" ] && { printf "%s: -V not supported\n" "$0" ; exit 1 ; } + +for i ; do +case "$skip$i" in +-I|-L) skip=--- ; continue ;; +-[cSE]|-M*) nolink=1 ;; +-shared|-nostartfiles|-nostdlib) nocrt=1 ;; +-*) ;; +*) havefile=1 ;; +esac +skip= done -exec "$0" "$@" -' -std=gnu99 -nostdinc -nostdlib \ - -isystem "$libc_inc" -isystem "$gcc_inc" \ - -Wl,-xxxxxx "$@" -L"$libc_lib" -lc -L"$libgcc" -lgcc -Lxxxxxx -Wl,-nostdlib + +[ "$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 "$@" \ + -Wl,--as-needed -Wl,--start-group -lc -lgcc -lgcc_eh -Wl,--end-group \ + -Wl,-dynamic-linker,"$ldso_pathname" -Wl,-nostdlib +} + +set -- -nostdinc -nostdlib $nosp \ + -isystem "$libc_inc" -isystem "$gcc_inc" "$@" \ + -L"$libc_lib" -L"$libgcc" + +exec "$gcc" "$@" EOF