| .section ".tbss", "awT", @nobits |
| .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8 |
| bg1: .space 4 |
| bg2: .space 4 |
| bg3: .space 4 |
| bg4: .space 4 |
| bg5: .space 4 |
| bg6: .space 4 |
| bg7: .space 4 |
| bg8: .space 4 |
| bl1: .space 4 |
| bl2: .space 4 |
| bl3: .space 4 |
| bl4: .space 4 |
| bl5: .space 4 |
| bl6: .space 4 |
| bl7: .space 4 |
| bl8: .space 4 |
| .text |
| .globl _start |
| .type _start,@function |
| _start: |
| pushl %ebp |
| movl %esp, %ebp |
| /* Set up .GOT pointer for non-pic @gottpoff sequences */ |
| call 1f |
| 1: popl %ecx |
| addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ecx |
| nop;nop;nop;nop |
| |
| /* @gottpoff IE against global var */ |
| movl %gs:0, %edx |
| nop;nop |
| subl sG6@gottpoff(%ecx), %edx |
| nop;nop;nop;nop |
| |
| /* @indntpoff IE against global var */ |
| movl %gs:0, %eax |
| nop;nop |
| addl sG7@indntpoff, %eax |
| nop;nop;nop;nop |
| |
| /* @indntpoff direct %gs access IE against global var */ |
| movl sG8@indntpoff, %edx |
| nop;nop |
| movl %gs:(%edx), %eax |
| nop;nop;nop;nop |
| |
| /* @gottpoff IE -> LE against global var defined in exec */ |
| movl %gs:0, %edx |
| nop;nop |
| subl bg6@gottpoff(%ecx), %edx |
| nop;nop;nop;nop |
| |
| /* @indntpoff IE -> LE against global var defined in exec */ |
| movl %gs:0, %eax |
| nop;nop |
| addl bg7@indntpoff, %eax |
| nop;nop;nop;nop |
| |
| /* @indntpoff direct %gs access IE -> LE against global var defined |
| in exec */ |
| movl bg8@indntpoff, %edx |
| nop;nop |
| movl %gs:(%edx), %eax |
| nop;nop;nop;nop |
| |
| /* @gottpoff IE -> LE against local var */ |
| movl %gs:0, %edx |
| nop;nop |
| subl bl6@gottpoff(%ecx), %edx |
| nop;nop;nop;nop |
| |
| /* @indntpoff IE -> LE against local var */ |
| movl %gs:0, %eax |
| nop;nop |
| addl bl7@indntpoff, %eax |
| nop;nop;nop;nop |
| |
| /* @indntpoff direct %gs access IE -> LE against local var */ |
| movl bl8@indntpoff, %edx |
| nop;nop |
| movl %gs:(%edx), %eax |
| nop;nop;nop;nop |
| |
| /* @gottpoff IE -> LE against hidden but not local var */ |
| movl %gs:0, %edx |
| nop;nop |
| subl sh6@gottpoff(%ecx), %edx |
| nop;nop;nop;nop |
| |
| /* @indntpoff IE -> LE against hidden but not local var */ |
| movl %gs:0, %eax |
| nop;nop |
| addl sh7@indntpoff, %eax |
| nop;nop;nop;nop |
| |
| /* @indntpoff direct %gs access IE -> LE against hidden but not |
| local var */ |
| movl sh8@indntpoff, %edx |
| nop;nop |
| movl %gs:(%edx), %eax |
| nop;nop;nop;nop |
| |
| /* LE @tpoff, global var defined in exec */ |
| movl $sg1@tpoff, %edx |
| nop;nop |
| movl %gs:0, %eax |
| nop;nop |
| subl %edx, %eax |
| nop;nop;nop;nop |
| |
| /* LE @tpoff, local var */ |
| movl $-1+bl1@tpoff, %eax |
| nop;nop |
| movl %gs:0, %edx |
| nop;nop |
| subl %eax, %edx |
| nop;nop;nop;nop |
| |
| /* LE @tpoff, hidden var defined in exec */ |
| movl $sh1@tpoff-3, %eax |
| nop;nop |
| movl %gs:0, %edx |
| nop;nop |
| subl %eax, %edx |
| nop;nop;nop;nop |
| |
| /* LE @ntpoff, global var defined in exec */ |
| movl %gs:0, %eax |
| nop;nop |
| leal sg2@ntpoff(%eax), %edx |
| nop;nop;nop;nop |
| |
| /* LE @ntpoff, local var, non-canonical sequence */ |
| movl $2+bl2@ntpoff, %eax |
| nop;nop |
| movl %gs:0, %edx |
| nop;nop |
| addl %eax, %edx |
| nop;nop;nop;nop |
| |
| /* LE @ntpoff, hidden var defined in exec, non-canonical sequence */ |
| movl %gs:0, %edx |
| nop;nop |
| addl $sh2@ntpoff+1, %edx |
| nop;nop;nop;nop |
| |
| /* Direct %gs access */ |
| |
| /* LE @ntpoff, global var defined in exec */ |
| movl %gs:sg3@ntpoff, %eax |
| nop;nop;nop;nop |
| |
| /* LE @ntpoff, local var */ |
| movl %gs:bl3@ntpoff+3, %edx |
| nop;nop;nop;nop |
| |
| /* LE @ntpoff, hidden var defined in exec */ |
| movl %gs:1+sh3@ntpoff, %edx |
| nop;nop;nop;nop |
| |
| movl -4(%ebp), %ebx |
| leave |
| ret |