mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
This script was failing for certain paths (dots, whitespace), and using sed to replace parts of the command line was overkill. Do less mangling, and quote command line args. Fixes 01org/hyperscan#51
29 lines
904 B
Bash
Executable File
29 lines
904 B
Bash
Executable File
#!/bin/sh -e
|
|
# This is used for renaming symbols for the fat runtime, don't call directly
|
|
# TODO: make this a lot less fragile!
|
|
cleanup () {
|
|
rm -f ${SYMSFILE} ${KEEPSYMS}
|
|
}
|
|
|
|
PREFIX=$1
|
|
KEEPSYMS_IN=$2
|
|
shift 2
|
|
# $@ contains the actual build command
|
|
OUT=$(echo "$@" | sed 's/.* -o \(.*\.o\).*/\1/')
|
|
trap cleanup INT QUIT EXIT
|
|
SYMSFILE=$(mktemp --tmpdir ${PREFIX}_rename.syms.XXXXX)
|
|
KEEPSYMS=$(mktemp --tmpdir keep.syms.XXXXX)
|
|
# find the libc used by gcc
|
|
LIBC_SO=$("$@" --print-file-name=libc.so.6)
|
|
cp ${KEEPSYMS_IN} ${KEEPSYMS}
|
|
# get all symbols from libc and turn them into patterns
|
|
nm -f p -g -D ${LIBC_SO} | sed -s 's/\([^ ]*\).*/^\1$/' >> ${KEEPSYMS}
|
|
# build the object
|
|
"$@"
|
|
# rename the symbols in the object
|
|
nm -f p -g ${OUT} | cut -f1 -d' ' | grep -v -f ${KEEPSYMS} | sed -e "s/\(.*\)/\1\ ${PREFIX}_\1/" >> ${SYMSFILE}
|
|
if test -s ${SYMSFILE}
|
|
then
|
|
objcopy --redefine-syms=${SYMSFILE} ${OUT}
|
|
fi
|