This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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) ' |\
[...]


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]