| 1 | .macro bad args:vararg |
| 2 | .ifdef _bad_ |
| 3 | \args |
| 4 | .endif |
| 5 | .endm |
| 6 | |
| 7 | .macro ill args:vararg |
| 8 | # This is used to mark entries that aren't handled consistently, |
| 9 | # and thus shouldn't currently be checked for. |
| 10 | # \args |
| 11 | .endm |
| 12 | |
| 13 | .text |
| 14 | _start: |
| 15 | mov $xtrn, %eax |
| 16 | mov $xtrn, %ax |
| 17 | mov $xtrn, %al |
| 18 | mov xtrn(%ebx), %eax |
| 19 | mov xtrn(%bx), %eax |
| 20 | |
| 21 | mov $(xtrn - .), %eax |
| 22 | mov $(xtrn - .), %ax |
| 23 | mov $(xtrn - .), %al |
| 24 | mov xtrn - .(%ebx), %eax |
| 25 | mov xtrn - .(%bx), %eax |
| 26 | call xtrn |
| 27 | jecxz xtrn |
| 28 | |
| 29 | mov $xtrn@got, %eax |
| 30 | bad mov $xtrn@got, %ax |
| 31 | bad mov $xtrn@got, %al |
| 32 | mov xtrn@got(%ebx), %eax |
| 33 | bad mov xtrn@got(%bx), %eax |
| 34 | bad call xtrn@got |
| 35 | |
| 36 | mov $xtrn@gotoff, %eax |
| 37 | bad mov $xtrn@gotoff, %ax |
| 38 | bad mov $xtrn@gotoff, %al |
| 39 | mov xtrn@gotoff(%ebx), %eax |
| 40 | bad mov xtrn@gotoff(%bx), %eax |
| 41 | bad call xtrn@gotoff |
| 42 | |
| 43 | add $_GLOBAL_OFFSET_TABLE_, %eax |
| 44 | ill add $_GLOBAL_OFFSET_TABLE_, %ax |
| 45 | ill add $_GLOBAL_OFFSET_TABLE_, %al |
| 46 | add $(_GLOBAL_OFFSET_TABLE_ - .), %eax |
| 47 | ill add $(_GLOBAL_OFFSET_TABLE_ - .), %ax |
| 48 | ill add $(_GLOBAL_OFFSET_TABLE_ - .), %al |
| 49 | |
| 50 | mov $xtrn@plt, %eax |
| 51 | bad mov $xtrn@plt, %ax |
| 52 | bad mov $xtrn@plt, %al |
| 53 | mov xtrn@plt(%ebx), %eax |
| 54 | bad mov xtrn@plt(%bx), %eax |
| 55 | call xtrn@plt |
| 56 | bad jecxz xtrn@plt |
| 57 | |
| 58 | mov $xtrn@tlsgd, %eax |
| 59 | bad mov $xtrn@tlsgd, %ax |
| 60 | bad mov $xtrn@tlsgd, %al |
| 61 | mov xtrn@tlsgd(%ebx), %eax |
| 62 | bad mov xtrn@tlsgd(%bx), %eax |
| 63 | bad call xtrn@tlsgd |
| 64 | |
| 65 | mov $xtrn@gotntpoff, %eax |
| 66 | bad mov $xtrn@gotntpoff, %ax |
| 67 | bad mov $xtrn@gotntpoff, %al |
| 68 | mov xtrn@gotntpoff(%ebx), %eax |
| 69 | bad mov xtrn@gotntpoff(%bx), %eax |
| 70 | bad call xtrn@gotntpoff |
| 71 | |
| 72 | mov $xtrn@indntpoff, %eax |
| 73 | bad mov $xtrn@indntpoff, %ax |
| 74 | bad mov $xtrn@indntpoff, %al |
| 75 | mov xtrn@indntpoff(%ebx), %eax |
| 76 | bad mov xtrn@indntpoff(%bx), %eax |
| 77 | bad call xtrn@indntpoff |
| 78 | |
| 79 | mov $xtrn@gottpoff, %eax |
| 80 | bad mov $xtrn@gottpoff, %ax |
| 81 | bad mov $xtrn@gottpoff, %al |
| 82 | mov xtrn@gottpoff(%ebx), %eax |
| 83 | bad mov xtrn@gottpoff(%bx), %eax |
| 84 | bad call xtrn@gottpoff |
| 85 | |
| 86 | mov $xtrn@tlsldm, %eax |
| 87 | bad mov $xtrn@tlsldm, %ax |
| 88 | bad mov $xtrn@tlsldm, %al |
| 89 | mov xtrn@tlsldm(%ebx), %eax |
| 90 | bad mov xtrn@tlsldm(%bx), %eax |
| 91 | bad call xtrn@tlsldm |
| 92 | |
| 93 | mov $xtrn@dtpoff, %eax |
| 94 | bad mov $xtrn@dtpoff, %ax |
| 95 | bad mov $xtrn@dtpoff, %al |
| 96 | mov xtrn@dtpoff(%ebx), %eax |
| 97 | bad mov xtrn@dtpoff(%bx), %eax |
| 98 | bad call xtrn@dtpoff |
| 99 | |
| 100 | mov $xtrn@ntpoff, %eax |
| 101 | bad mov $xtrn@ntpoff, %ax |
| 102 | bad mov $xtrn@ntpoff, %al |
| 103 | mov xtrn@ntpoff(%ebx), %eax |
| 104 | bad mov xtrn@ntpoff(%bx), %eax |
| 105 | bad call xtrn@ntpoff |
| 106 | |
| 107 | mov $xtrn@tpoff, %eax |
| 108 | bad mov $xtrn@tpoff, %ax |
| 109 | bad mov $xtrn@tpoff, %al |
| 110 | mov xtrn@tpoff(%ebx), %eax |
| 111 | bad mov xtrn@tpoff(%bx), %eax |
| 112 | bad call xtrn@tpoff |
| 113 | |
| 114 | .data |
| 115 | .long xtrn |
| 116 | .long xtrn - . |
| 117 | .long xtrn@got |
| 118 | .long xtrn@gotoff |
| 119 | .long _GLOBAL_OFFSET_TABLE_ |
| 120 | .long _GLOBAL_OFFSET_TABLE_ - . |
| 121 | .long xtrn@plt |
| 122 | .long xtrn@tlsgd |
| 123 | .long xtrn@gotntpoff |
| 124 | .long xtrn@indntpoff |
| 125 | .long xtrn@gottpoff |
| 126 | .long xtrn@tlsldm |
| 127 | .long xtrn@dtpoff |
| 128 | .long xtrn@ntpoff |
| 129 | .long xtrn@tpoff |
| 130 | |
| 131 | .word xtrn |
| 132 | .word xtrn - . |
| 133 | bad .word xtrn@got |
| 134 | bad .word xtrn@gotoff |
| 135 | ill .word _GLOBAL_OFFSET_TABLE_ |
| 136 | ill .word _GLOBAL_OFFSET_TABLE_ - . |
| 137 | bad .word xtrn@plt |
| 138 | bad .word xtrn@tlsgd |
| 139 | bad .word xtrn@gotntpoff |
| 140 | bad .word xtrn@indntpoff |
| 141 | bad .word xtrn@gottpoff |
| 142 | bad .word xtrn@tlsldm |
| 143 | bad .word xtrn@dtpoff |
| 144 | bad .word xtrn@ntpoff |
| 145 | bad .word xtrn@tpoff |
| 146 | |
| 147 | .byte xtrn |
| 148 | .byte xtrn - . |
| 149 | bad .byte xtrn@got |
| 150 | bad .byte xtrn@gotoff |
| 151 | ill .byte _GLOBAL_OFFSET_TABLE_ |
| 152 | ill .byte _GLOBAL_OFFSET_TABLE_ - . |
| 153 | bad .byte xtrn@plt |
| 154 | bad .byte xtrn@tlsgd |
| 155 | bad .byte xtrn@gotntpoff |
| 156 | bad .byte xtrn@indntpoff |
| 157 | bad .byte xtrn@gottpoff |
| 158 | bad .byte xtrn@tlsldm |
| 159 | bad .byte xtrn@dtpoff |
| 160 | bad .byte xtrn@ntpoff |
| 161 | bad .byte xtrn@tpoff |
| 162 | .long xtrn@got + 4 |
| 163 | .long xtrn@got - 4 |