2008-01-02 02:51:23 +08:00
|
|
|
#!/bin/bash
|
2001-12-20 10:55:11 +08:00
|
|
|
lib=$1; shift
|
|
|
|
as=$1; shift
|
|
|
|
ar=$1; shift
|
|
|
|
rm -rf newsym.dir
|
2003-07-07 13:30:33 +08:00
|
|
|
trap "rm -rf newsym.dir" 0 1 2 15
|
2001-12-20 10:55:11 +08:00
|
|
|
mkdir newsym.dir
|
|
|
|
while [ -n "$1" ]; do
|
|
|
|
newsym=$1; shift
|
|
|
|
oldsym=$1; shift
|
2008-01-02 02:51:23 +08:00
|
|
|
if [[ "$newsym" = *:d ]]; then
|
|
|
|
newsym=${newsym%:d}
|
|
|
|
else
|
|
|
|
cat <<EOF
|
|
|
|
.text
|
2001-12-20 10:55:11 +08:00
|
|
|
.global _$newsym
|
|
|
|
_$newsym:
|
|
|
|
jmp *__imp__$oldsym
|
2008-01-02 02:51:23 +08:00
|
|
|
EOF
|
|
|
|
fi > newsym.dir/$newsym.s
|
2003-07-07 13:23:35 +08:00
|
|
|
|
2008-01-02 02:51:23 +08:00
|
|
|
cat <<EOF >> newsym.dir/$newsym.s
|
2003-07-07 13:23:35 +08:00
|
|
|
.section .idata\$7
|
|
|
|
.long __head_cygwin1_dll
|
|
|
|
|
2008-01-02 02:51:23 +08:00
|
|
|
.section .idata\$5
|
|
|
|
.global __imp__$newsym
|
2003-07-07 13:23:35 +08:00
|
|
|
__imp__$newsym: .rva 1f
|
|
|
|
|
|
|
|
.section .idata\$4
|
|
|
|
.rva 1f
|
|
|
|
|
|
|
|
.section .idata\$6
|
|
|
|
1: .short 2
|
|
|
|
.asciz "$oldsym"
|
2001-12-20 10:55:11 +08:00
|
|
|
EOF
|
|
|
|
$as -o newsym.dir/$newsym.o newsym.dir/$newsym.s
|
|
|
|
done
|
2003-07-07 13:30:33 +08:00
|
|
|
$ar crus $lib newsym.dir/*.o
|