diff options
| author | ro <ro@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-10-01 11:58:21 +0000 |
|---|---|---|
| committer | ro <ro@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-10-01 11:58:21 +0000 |
| commit | 64af546aeaf3893cfa14140ddda22de036322d57 (patch) | |
| tree | 0d0f1e0dbd86f2e7fd6571b55562369fb53b9620 /libstdc++-v3/scripts | |
| parent | f2d9def0db225046734f18477921cc465d7bf995 (diff) | |
| download | ppe42-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-x | libstdc++-v3/scripts/extract_symvers | 64 |
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. |

