mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
32 lines
1.1 KiB
Bash
Executable File
32 lines
1.1 KiB
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
|
|
BUILD=$@
|
|
OUT=$(echo $BUILD | sed 's/.* -o \(.*\.o\).*/\1/')
|
|
trap cleanup INT QUIT EXIT
|
|
SYMSFILE=$(mktemp --tmpdir ${PREFIX}_rename.syms.XXXXX)
|
|
KEEPSYMS=$(mktemp --tmpdir keep.syms.XXXXX)
|
|
# grab the command without the target obj or src file flags
|
|
# we don't just call gcc directly as there may be flags modifying the arch
|
|
CC_CMD=$(echo $BUILD | sed 's/ -o .*\.o//;s/ -c //;s/ .[^ ]*\.c//;')
|
|
# find me a libc
|
|
LIBC_SO=$(${CC_CMD} --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
|
|
${BUILD}
|
|
# 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
|