#!/bin/sh

# Copyright (C) 2002-2022 Free Software Foundation, Inc.
#
# This file is part of the GNU ISO C++ Library.  This library is free
# software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the
# Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this library; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.


if test ${#} -lt 2 || test $1 = '--help'; then
  echo "Usage:  extract_symvers  shared_lib output_file" 1>&2
  exit 1
fi

lib=$1
output=$2

# This avoids weird sorting problems later.
LC_ALL=C
export LC_ALL
LANG=C
export LANG

tmp=extract.$$

case `uname -s` in
SunOS)
  # Ensure that output on Solaris 2 matches readelf below without requiring
  # GNU binutils to be installed.  This requires a combination of pvs and
  # elfdump, which is easier handled in a perl script.
  perl @glibcxx_srcdir@/scripts/extract_symvers.pl ${lib} > $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
  # Omit _DYNAMIC etc. for consistency with extract_symvers.pl, only
  # present on Solaris.
  ${readelf} ${lib} |\
  sed -e 's/ \[<other>: [A-Fa-f0-9]*\] //' -e '/\.dynsym/,/^$/p;d' |\
  sed -e 's/ \[<localentry>: [0-9]*\] //' |\
  grep -E -v ' (LOCAL|UND) ' |\
  grep -E -v ' (_DYNAMIC|_GLOBAL_OFFSET_TABLE_|_PROCEDURE_LINKAGE_TABLE_|_edata|_end|_etext)$' |\
  sed -e 's/ <processor specific>: / <processor_specific>:_/g' |\
  sed -e 's/ <OS specific>: / <OS_specific>:_/g' |\
  sed -e 's/ <unknown>: / <unknown>:_/g' |\
  awk '{ if ($4 == "FUNC" || $4 == "NOTYPE")
           printf "%s:%s\n", $4, $8;
         else if ($4 == "OBJECT" || $4 == "TLS")
           printf "%s:%s:%s\n", $4, $3, $8;
       }' | sort | uniq > $tmp 2>&1
#        else printf "Huh?  What is %s?\n", $8;
  ;;
esac

# I think we'll be doing some more with this file, but for now, dump.
mv $tmp $output

exit 0
