| ! Force .got aligned to 4K, so it very likely gets at 0x413000 |
| .data |
| .balign 4096 |
| .section ".tdata", "awT", @progbits |
| .globl sg1, sg2 |
| .globl sh1, sh2 |
| .hidden sh1, sh2 |
| sg1: .long 17 |
| sg2: .long 18 |
| sl1: .long 65 |
| sl2: .long 66 |
| sh1: .long 257 |
| sh2: .long 258 |
| ! Force .text aligned to 4K, so it very likely gets at 0x401000. |
| .text |
| .balign 4096 |
| .globl fn2 |
| .type fn2,@function |
| fn2: |
| mov.l r12,@-r15 |
| mov.l r14,@-r15 |
| sts.l pr,@-r15 |
| mova .L3,r0 |
| mov.l .L3,r12 |
| add r0,r12 |
| mov r15,r14 |
| nop;nop;nop;nop |
| |
| ! GD -> IE because variable is not defined in executable |
| mov.l 1f,r4 |
| mova 2f,r0 |
| mov.l 2f,r1 |
| add r0,r1 |
| jsr @r1 |
| add r12,r4 |
| bra 3f |
| nop |
| .align 2 |
| 1: .long sG1@TLSGD |
| 2: .long __tls_get_addr@PLT |
| 3: |
| nop;nop;nop;nop |
| |
| ! GD -> IE because variable is not defined in executable where |
| ! the variable is referenced through @gottpoff too |
| mov.l 1f,r4 |
| mova 2f,r0 |
| mov.l 2f,r1 |
| add r0,r1 |
| jsr @r1 |
| add r12,r4 |
| bra 3f |
| nop |
| .align 2 |
| 1: .long sG2@TLSGD |
| 2: .long __tls_get_addr@PLT |
| 3: |
| nop;nop;nop;nop |
| |
| ! GD -> LE with global variable defined in executable |
| mov.l 1f,r4 |
| mova 2f,r0 |
| mov.l 2f,r1 |
| add r0,r1 |
| jsr @r1 |
| add r12,r4 |
| bra 3f |
| nop |
| .align 2 |
| 1: .long sg1@TLSGD |
| 2: .long __tls_get_addr@PLT |
| 3: |
| nop;nop;nop;nop |
| |
| ! GD -> LE with local variable defined in executable |
| mov.l 1f,r4 |
| mova 2f,r0 |
| mov.l 2f,r1 |
| add r0,r1 |
| jsr @r1 |
| add r12,r4 |
| bra 3f |
| nop |
| .align 2 |
| 1: .long sl1@TLSGD |
| 2: .long __tls_get_addr@PLT |
| 3: |
| nop;nop;nop;nop |
| |
| ! GD -> LE with hidden variable defined in executable |
| mov.l 1f,r4 |
| mova 2f,r0 |
| mov.l 2f,r1 |
| add r0,r1 |
| jsr @r1 |
| add r12,r4 |
| bra 3f |
| nop |
| .align 2 |
| 1: .long sh1@TLSGD |
| 2: .long __tls_get_addr@PLT |
| 3: |
| nop;nop;nop;nop |
| |
| ! LD -> LE with local variable defined in executable |
| mov.l 1f,r4 |
| mova 2f,r0 |
| mov.l 2f,r1 |
| add r0,r1 |
| jsr @r1 |
| add r12,r4 |
| bra 3f |
| nop |
| .align 2 |
| 1: .long sl1@TLSLDM |
| 2: .long __tls_get_addr@PLT |
| 3: |
| nop;nop |
| mov.l .L4,r1 |
| add r0,r1 |
| nop;nop |
| mov.l .L5,r2 |
| add r0,r2 |
| nop;nop;nop;nop |
| |
| ! LD -> LE against hidden variables |
| mov.l 1f,r4 |
| mova 2f,r0 |
| mov.l 2f,r1 |
| add r0,r1 |
| jsr @r1 |
| add r12,r4 |
| bra 3f |
| nop |
| .align 2 |
| 1: .long sh1@TLSLDM |
| 2: .long __tls_get_addr@PLT |
| 3: |
| nop;nop |
| mov.l .L6,r1 |
| add r0,r1 |
| nop;nop |
| mov.l .L7,r2 |
| add r0,r2 |
| nop;nop;nop;nop |
| |
| ! @GOTTPOFF IE against global var |
| mov.l 1f,r0 |
| stc gbr,r1 |
| mov.l @(r0,r12),r0 |
| bra 2f |
| add r0,r1 |
| .align 2 |
| 1: .long sG2@GOTTPOFF |
| 2: |
| nop;nop;nop;nop |
| |
| ! @GOTTPOFF IE against global var |
| mov.l 1f,r0 |
| stc gbr,r1 |
| mov.l @(r0,r12),r0 |
| bra 2f |
| add r1,r0 |
| .align 2 |
| 1: .long sG4@GOTTPOFF |
| 2: |
| nop;nop;nop;nop |
| |
| ! @GOTTPOFF IE -> LE against global var defined in exec |
| mov.l 1f,r0 |
| stc gbr,r1 |
| mov.l @(r0,r12),r0 |
| bra 2f |
| add r0,r1 |
| .align 2 |
| 1: .long sg1@GOTTPOFF |
| 2: |
| nop;nop;nop;nop |
| |
| ! @GOTTPOFF IE -> LE against hidden var |
| mov.l 1f,r0 |
| stc gbr,r1 |
| mov.l @(r0,r12),r0 |
| bra 2f |
| add r0,r1 |
| .align 2 |
| 1: .long sh1@GOTTPOFF |
| 2: |
| nop;nop;nop;nop |
| |
| mov r14,r15 |
| lds.l @r15+,pr |
| mov.l @r15+,r14 |
| rts |
| mov.l @r15+,r12 |
| |
| .align 2 |
| .L3: .long _GLOBAL_OFFSET_TABLE_ |
| .L4: .long sl1@DTPOFF |
| .L5: .long sl2@DTPOFF |
| .L6: .long sh1@DTPOFF |
| .L7: .long sh2@DTPOFF |
| ! Fill page with 0. |
| .space .L8-. |
| .balign 4096 |
| .L8: |