1ffeaf689SAlexander Kabaev#!/bin/sh 2ffeaf689SAlexander Kabaev 3ffeaf689SAlexander Kabaev# Copyright (C) 2002, 2003 Free Software Foundation, Inc. 4ffeaf689SAlexander Kabaev# 5ffeaf689SAlexander Kabaev# This file is part of the GNU ISO C++ Library. This library is free 6ffeaf689SAlexander Kabaev# software; you can redistribute it and/or modify it under the 7ffeaf689SAlexander Kabaev# terms of the GNU General Public License as published by the 8ffeaf689SAlexander Kabaev# Free Software Foundation; either version 2, or (at your option) 9ffeaf689SAlexander Kabaev# any later version. 10ffeaf689SAlexander Kabaev# 11ffeaf689SAlexander Kabaev# This library is distributed in the hope that it will be useful, 12ffeaf689SAlexander Kabaev# but WITHOUT ANY WARRANTY; without even the implied warranty of 13ffeaf689SAlexander Kabaev# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14ffeaf689SAlexander Kabaev# GNU General Public License for more details. 15ffeaf689SAlexander Kabaev# 16ffeaf689SAlexander Kabaev# You should have received a copy of the GNU General Public License along 17ffeaf689SAlexander Kabaev# with this library; see the file COPYING. If not, write to the Free 18*f8a1b7d9SAlexander Kabaev# Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 19ffeaf689SAlexander Kabaev# USA. 20ffeaf689SAlexander Kabaev# 21ffeaf689SAlexander Kabaev# As a special exception, you may use this file as part of a free software 22ffeaf689SAlexander Kabaev# library without restriction. Specifically, if other files instantiate 23ffeaf689SAlexander Kabaev# templates or use macros or inline functions from this file, or you compile 24ffeaf689SAlexander Kabaev# this file and link it with other files to produce an executable, this 25ffeaf689SAlexander Kabaev# file does not by itself cause the resulting executable to be covered by 26ffeaf689SAlexander Kabaev# the GNU General Public License. This exception does not however 27ffeaf689SAlexander Kabaev# invalidate any other reasons why the executable file might be covered by 28ffeaf689SAlexander Kabaev# the GNU General Public License. 29ffeaf689SAlexander Kabaev 30ffeaf689SAlexander Kabaev 31ffeaf689SAlexander Kabaevif test ${#} -lt 2 || test $1 = '--help'; then 32ffeaf689SAlexander Kabaev echo "Usage: extract_symvers shared_lib output_file" 1>&2 33ffeaf689SAlexander Kabaev exit 1 34ffeaf689SAlexander Kabaevfi 35ffeaf689SAlexander Kabaev 36ffeaf689SAlexander Kabaevlib=$1 37ffeaf689SAlexander Kabaevoutput=$2 38ffeaf689SAlexander Kabaev 39ffeaf689SAlexander Kabaev# GNU binutils, somewhere after version 2.11.2, requires -W/--wide to avoid 40ffeaf689SAlexander Kabaev# default line truncation. -W is not supported and truncation did not occur 41ffeaf689SAlexander Kabaev# by default before that point. 42ffeaf689SAlexander Kabaevreadelf="readelf --symbols" 43ffeaf689SAlexander Kabaevif readelf --help | grep -- --wide > /dev/null; then 44ffeaf689SAlexander Kabaev readelf="$readelf --wide" 45ffeaf689SAlexander Kabaevfi 46ffeaf689SAlexander Kabaev 47ffeaf689SAlexander Kabaev# This avoids weird sorting problems later. 48ffeaf689SAlexander KabaevLC_ALL=C 49ffeaf689SAlexander Kabaevexport LC_ALL 50ffeaf689SAlexander KabaevLANG=C 51ffeaf689SAlexander Kabaevexport LANG 52ffeaf689SAlexander Kabaev 53ffeaf689SAlexander Kabaevtmp=extract.$$ 54ffeaf689SAlexander Kabaev 55ffeaf689SAlexander Kabaev${readelf} ${lib} | sed '/\.dynsym/,/^$/p;d' | egrep -v ' (LOCAL|UND) ' |\ 56ffeaf689SAlexander Kabaevawk '{ if ($4 == "FUNC" || $4 == "NOTYPE") 57ffeaf689SAlexander Kabaev printf "%s:%s\n", $4, $8; 58ffeaf689SAlexander Kabaev else if ($4 == "OBJECT") 59ffeaf689SAlexander Kabaev printf "%s:%s:%s\n", $4, $3, $8; 60ffeaf689SAlexander Kabaev }' | sort | uniq > $tmp 2>&1 61ffeaf689SAlexander Kabaev# else printf "Huh? What is %s?\n", $8; 62ffeaf689SAlexander Kabaev 63ffeaf689SAlexander Kabaev 64ffeaf689SAlexander Kabaev# I think we'll be doing some more with this file, but for now, dump. 65ffeaf689SAlexander Kabaevmv $tmp $output 66ffeaf689SAlexander Kabaev 67ffeaf689SAlexander Kabaevexit 0 68