summary refs log tree commit diff
path: root/extract-dynsym
blob: 421dbd6fd014b8bdfd31acb52ddfa7af605151c9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/sh

# Extract from an ELF shared object file just the dynamic symbols necessary
# to link against it and the (GNU extension) warning sections that linking
# against it may use to produce warning messages.

infile=$1
outfile=$2

# Handle both objdump -h output formats.
osechdr='^SECTION [0-9]+ \['
nsechdr='^ +[0-9]+ '

$OBJCOPY -S `$OBJDUMP -h $infile | $AWK "
/($osechdr|$nsechdr)"'\.(hash|dyn[a-z]+|gnu\.warning[a-zA-Z_.]*) / { next; }
/'"$osechdr"'/ { printf "--remove-section=%s ", $3 }
/'"$nsechdr"'/ { printf "--remove-section=%s ", $2 }
' |
# The old format puts brackets around section names.  The new format fails
# to delimit long section names from the following hex digits.
sed -e 's/[][]//g' -e 's/0[0-9a-f]* / /g'` $infile $outfile.new

mv -f $outfile.new $outfile