.macro bad args:vararg .ifdef _bad_ \args .endif .endm .macro ill args:vararg # This is used to mark entries that aren't handled consistently, # and thus shouldn't currently be checked for. # \args .endm .text _start: mov $xtrn, %eax mov $xtrn, %ax mov $xtrn, %al mov xtrn(%ebx), %eax mov xtrn(%bx), %eax mov $(xtrn - .), %eax mov $(xtrn - .), %ax mov $(xtrn - .), %al mov xtrn - .(%ebx), %eax mov xtrn - .(%bx), %eax call xtrn jecxz xtrn mov $xtrn@got, %eax bad mov $xtrn@got, %ax bad mov $xtrn@got, %al mov xtrn@got(%ebx), %eax bad mov xtrn@got(%bx), %eax bad call xtrn@got mov $xtrn@gotoff, %eax bad mov $xtrn@gotoff, %ax bad mov $xtrn@gotoff, %al mov xtrn@gotoff(%ebx), %eax bad mov xtrn@gotoff(%bx), %eax bad call xtrn@gotoff add $_GLOBAL_OFFSET_TABLE_, %eax ill add $_GLOBAL_OFFSET_TABLE_, %ax ill add $_GLOBAL_OFFSET_TABLE_, %al add $(_GLOBAL_OFFSET_TABLE_ - .), %eax ill add $(_GLOBAL_OFFSET_TABLE_ - .), %ax ill add $(_GLOBAL_OFFSET_TABLE_ - .), %al mov $xtrn@plt, %eax bad mov $xtrn@plt, %ax bad mov $xtrn@plt, %al mov xtrn@plt(%ebx), %eax bad mov xtrn@plt(%bx), %eax call xtrn@plt bad jecxz xtrn@plt mov $xtrn@tlsgd, %eax bad mov $xtrn@tlsgd, %ax bad mov $xtrn@tlsgd, %al mov xtrn@tlsgd(%ebx), %eax bad mov xtrn@tlsgd(%bx), %eax bad call xtrn@tlsgd mov $xtrn@gotntpoff, %eax bad mov $xtrn@gotntpoff, %ax bad mov $xtrn@gotntpoff, %al mov xtrn@gotntpoff(%ebx), %eax bad mov xtrn@gotntpoff(%bx), %eax bad call xtrn@gotntpoff mov $xtrn@indntpoff, %eax bad mov $xtrn@indntpoff, %ax bad mov $xtrn@indntpoff, %al mov xtrn@indntpoff(%ebx), %eax bad mov xtrn@indntpoff(%bx), %eax bad call xtrn@indntpoff mov $xtrn@gottpoff, %eax bad mov $xtrn@gottpoff, %ax bad mov $xtrn@gottpoff, %al mov xtrn@gottpoff(%ebx), %eax bad mov xtrn@gottpoff(%bx), %eax bad call xtrn@gottpoff mov $xtrn@tlsldm, %eax bad mov $xtrn@tlsldm, %ax bad mov $xtrn@tlsldm, %al mov xtrn@tlsldm(%ebx), %eax bad mov xtrn@tlsldm(%bx), %eax bad call xtrn@tlsldm mov $xtrn@dtpoff, %eax bad mov $xtrn@dtpoff, %ax bad mov $xtrn@dtpoff, %al mov xtrn@dtpoff(%ebx), %eax bad mov xtrn@dtpoff(%bx), %eax bad call xtrn@dtpoff mov $xtrn@ntpoff, %eax bad mov $xtrn@ntpoff, %ax bad mov $xtrn@ntpoff, %al mov xtrn@ntpoff(%ebx), %eax bad mov xtrn@ntpoff(%bx), %eax bad call xtrn@ntpoff mov $xtrn@tpoff, %eax bad mov $xtrn@tpoff, %ax bad mov $xtrn@tpoff, %al mov xtrn@tpoff(%ebx), %eax bad mov xtrn@tpoff(%bx), %eax bad call xtrn@tpoff .data .long xtrn .long xtrn - . .long xtrn@got .long xtrn@gotoff .long _GLOBAL_OFFSET_TABLE_ .long _GLOBAL_OFFSET_TABLE_ - . .long xtrn@plt .long xtrn@tlsgd .long xtrn@gotntpoff .long xtrn@indntpoff .long xtrn@gottpoff .long xtrn@tlsldm .long xtrn@dtpoff .long xtrn@ntpoff .long xtrn@tpoff .word xtrn .word xtrn - . bad .word xtrn@got bad .word xtrn@gotoff ill .word _GLOBAL_OFFSET_TABLE_ ill .word _GLOBAL_OFFSET_TABLE_ - . bad .word xtrn@plt bad .word xtrn@tlsgd bad .word xtrn@gotntpoff bad .word xtrn@indntpoff bad .word xtrn@gottpoff bad .word xtrn@tlsldm bad .word xtrn@dtpoff bad .word xtrn@ntpoff bad .word xtrn@tpoff .byte xtrn .byte xtrn - . bad .byte xtrn@got bad .byte xtrn@gotoff ill .byte _GLOBAL_OFFSET_TABLE_ ill .byte _GLOBAL_OFFSET_TABLE_ - . bad .byte xtrn@plt bad .byte xtrn@tlsgd bad .byte xtrn@gotntpoff bad .byte xtrn@indntpoff bad .byte xtrn@gottpoff bad .byte xtrn@tlsldm bad .byte xtrn@dtpoff bad .byte xtrn@ntpoff bad .byte xtrn@tpoff