summaryrefslogtreecommitdiffstats
path: root/libstdc++-v3/scripts
diff options
context:
space:
mode:
authorro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>2010-10-01 11:58:21 +0000
committerro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>2010-10-01 11:58:21 +0000
commit64af546aeaf3893cfa14140ddda22de036322d57 (patch)
tree0d0f1e0dbd86f2e7fd6571b55562369fb53b9620 /libstdc++-v3/scripts
parentf2d9def0db225046734f18477921cc465d7bf995 (diff)
downloadppe42-gcc-64af546aeaf3893cfa14140ddda22de036322d57.tar.gz
ppe42-gcc-64af546aeaf3893cfa14140ddda22de036322d57.zip
* scripts/extract_symvers: Use pvs if present.
* config/abi/post/solaris2.8/baseline_symbols.txt: New file. * config/abi/post/solaris2.8/sparcv9/baseline_symbols.txt: Likewise. * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Likewise. * config/abi/post/solaris2.10/baseline_symbols.txt: Likewise. * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: Likewise. * configure.host (i?86-*-solaris2*): Remove. (sparc*-*-solaris2*): Remove. (*-*-solaris2.[89]): Use solaris2.8 baseline. (*-*-solaris2.1[0-9]): Use solaris2.10 baseline. * testsuite/Makefile.am (new-abi-baseline): Add missing /. * testsuite/Makefile.in: Regenerate. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@164879 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/scripts')
-rwxr-xr-xlibstdc++-v3/scripts/extract_symvers64
1 files changed, 55 insertions, 9 deletions
diff --git a/libstdc++-v3/scripts/extract_symvers b/libstdc++-v3/scripts/extract_symvers
index 5a0f3659c8d..9eb7be595c4 100755
--- a/libstdc++-v3/scripts/extract_symvers
+++ b/libstdc++-v3/scripts/extract_symvers
@@ -26,6 +26,14 @@ fi
lib=$1
output=$2
+# Sun ld doesn't record symbol versions in .dynsym entries and they cannot
+# easily be extracted from readelf --versions output, so use pvs instead.
+if type pvs 2>&1 | grep 'not found' > /dev/null; then
+ :
+else
+ pvs="pvs -dsvo"
+fi
+
# 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.
@@ -42,15 +50,53 @@ export LANG
tmp=extract.$$
-${readelf} ${lib} |\
-sed -e 's/ \[<other>: [A-Fa-f0-9]*\] //' -e '/\.dynsym/,/^$/p;d' |\
-egrep -v ' (LOCAL|UND) ' |\
-awk '{ if ($4 == "FUNC" || $4 == "NOTYPE")
- printf "%s:%s\n", $4, $8;
- else if ($4 == "OBJECT")
- printf "%s:%s:%s\n", $4, $3, $8;
- }' | sort | uniq > $tmp 2>&1
-# else printf "Huh? What is %s?\n", $8;
+# Prefer pvs if found. Need to use nawk on Solaris 2 since Solaris 8/9 awk
+# (oawk) cannot handle sub.
+if [ -n ${pvs} ]; then
+ ${pvs} ${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
+else
+ ${readelf} ${lib} |\
+ sed -e 's/ \[<other>: [A-Fa-f0-9]*\] //' -e '/\.dynsym/,/^$/p;d' |\
+ egrep -v ' (LOCAL|UND) ' |\
+ awk '{ if ($4 == "FUNC" || $4 == "NOTYPE")
+ printf "%s:%s\n", $4, $8;
+ else if ($4 == "OBJECT")
+ printf "%s:%s:%s\n", $4, $3, $8;
+ }' | sort | uniq > $tmp 2>&1
+# else printf "Huh? What is %s?\n", $8;
+fi
# I think we'll be doing some more with this file, but for now, dump.
OpenPOWER on IntegriCloud