This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PATCH: PR libstdc++/45863: [4.6 regression] FAIL: libstdc++-abi/abi_check
Hello Rainer,
* Rainer Orth wrote on Tue, Oct 05, 2010 at 08:12:48PM CEST:
> 2010-10-04 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
>
> PR libstdc++/45863
> * scripts/extract_symvers: Restore revision 164879.
> Only use pvs on SunOS.
> --- dist/libstdc++-v3/scripts/extract_symvers 2010-10-04 12:01:36.677996000 +0200
> +++ solaris/libstdc++-v3/scripts/extract_symvers 2010-10-05 19:42:07.370992600 +0200
> @@ -42,6 +34,56 @@ export LANG
>
> tmp=extract.$$
>
> +case `uname -s` in
> +SunOS)
Is this cross-compile safe? Does it need to be?
Thanks,
Ralf
> + # Sun ld doesn't record symbol versions in .dynsym entries and they
> + # cannot easily be extracted from readelf --versions output, so use pvs
> + # instead. Linux may have a completely different pvs from LVM2, so only
> + # do this on SunOS.
> + # Need to use nawk on Solaris 2 since Solaris 8/9 awk (oawk) cannot handle
> + # sub.
> + pvs -dsvo ${lib} | \
> + nawk '# Remove colon separator from version field, trailing semicolon.
> + {
> + sub (/:$/, "", $3);
> + sub (/;$/, "");
> + }
> + # Record base version. The [BASE] field was only added in Solaris 11,
> + # so simply use the first record instead.
> + NR == 1 {
> + basever = $3;
> + next;
> + }
> + # Ignore version dependencies.
> + $4 ~ /\{.*\}/ {
> + next;
> + }
> + NF == 4 {
> + if ($3 == $4 || $3 == basever)
> + # Emit versions or symbols bound to base versions as objects.
> + printf "OBJECT:0:%s\n", $4;
> + else
> + # Everything else without a size field is a function.
> + printf "FUNC:%s@@%s\n", $4, $3;
> + next;
> + }
> + # Emit objects.
> + NF == 5 {
> + # Strip parens from object size.
> + sub (/^\(/, "", $5);
> + sub (/\)$/, "", $5);
> + printf "OBJECT:%s:%s@@%s\n", $5, $4, $3;
> + next;
> + }' | sort | uniq > $tmp 2>&1
> + ;;
> +*)
> + # GNU binutils, somewhere after version 2.11.2, requires -W/--wide to
> + # avoid default line truncation. -W is not supported and truncation did
> + # not occur by default before that point.
> + readelf="readelf --symbols"
> + if readelf --help | grep -- --wide > /dev/null; then
> + readelf="$readelf --wide"
> + fi
> ${readelf} ${lib} |\
> sed -e 's/ \[<other>: [A-Fa-f0-9]*\] //' -e '/\.dynsym/,/^$/p;d' |\
> egrep -v ' (LOCAL|UND) ' |\
[...]