| #!/bin/bash |
| lib=$1; shift |
| as=$1; shift |
| ar=$1; shift |
| rm -rf newsym.dir |
| trap "rm -rf newsym.dir" 0 1 2 15 |
| mkdir newsym.dir |
| while [ -n "$1" ]; do |
| newsym=$1; shift |
| oldsym=$1; shift |
| if [[ "$newsym" = *:d ]]; then |
| newsym=${newsym%:d} |
| else |
| cat <<EOF |
| .text |
| .global _$newsym |
| _$newsym: |
| jmp *__imp__$oldsym |
| EOF |
| fi > newsym.dir/$newsym.s |
| |
| cat <<EOF >> newsym.dir/$newsym.s |
| .section .idata\$7 |
| .long __head_cygwin1_dll |
| |
| .section .idata\$5 |
| .global __imp__$newsym |
| __imp__$newsym: .rva 1f |
| |
| .section .idata\$4 |
| .rva 1f |
| |
| .section .idata\$6 |
| 1: .short 2 |
| .asciz "$oldsym" |
| EOF |
| $as -o newsym.dir/$newsym.o newsym.dir/$newsym.s |
| done |
| $ar crus $lib newsym.dir/*.o |