#!/bin/sh

OUTPUT=davro
LINKARGS=
TARGETELF=
TARGETOBJ=

while getopts l:L:o: flag
do
	case "$flag" in
		o) OUTPUT=$OPTARG;;
		l) LINKARGS="$LINKARGS -l$OPTARG";;
		L) LINKARGS="$LINKARGS -L$OPTARG";;
	esac
done

shift $((OPTIND-1))

TARGETOBJ=$1

# get the unresolved symbols
objdump -t $TARGETOBJ | awk ' /\*UND\*/{print $4}' > bdlesymbollist

# build asm file with symbols and hashes
awk '{print "global "$1}' < bdlesymbollist > bdlesymboldata.asm

echo '
global __procedure_list
section .bss
__procedure_list:' >> bdlesymboldata.asm
awk '{print $1": resb 6"}' < bdlesymbollist >> bdlesymboldata.asm

echo '
global __hash_list
section .data
__hash_list:' >> bdlesymboldata.asm
bdledjbhashlist <  bdlesymbollist | awk '{print "dd "$2" ; "$1}' >> bdlesymboldata.asm

echo "dd 0 ; end marker" >> bdlesymboldata.asm


nasm -f elf32 bdlesymboldata.asm
nasm -f elf32 import.asm
ld -r  $TARGETOBJ bdlesymboldata.o import.o -o davro.o
objcopy --localize-symbols=bdlesymbollist davro.o
ld davro.o -dynamic-linker /lib/ld-linux.so.2 -o davro $LINKARGS -T bdlelinkerscript
strip --remove-section=.hash --remove-section=.got.plt --remove-section=.dynsym davro
bdlemegastrip davro $OUTPUT

rm -f davro

gzip -n --best $OUTPUT
advdef -z -4 $OUTPUT.gz
cat stub $OUTPUT.gz > $OUTPUT
chmod +x $OUTPUT
rm -f $OUTPUT.gz

wc -c $OUTPUT