268 lines
3.6 KiB
ArmAsm
268 lines
3.6 KiB
ArmAsm
|
.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
|
||
|
.text
|
||
|
.align 1
|
||
|
.globl fn1
|
||
|
.type fn1,@function
|
||
|
fn1:
|
||
|
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
|
||
|
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 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 against local variable
|
||
|
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 -> IE against local variable 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 sl2@TLSGD
|
||
|
2: .long __tls_get_addr@PLT
|
||
|
3:
|
||
|
nop;nop;nop;nop
|
||
|
|
||
|
! GD against hidden and local variable
|
||
|
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
|
||
|
|
||
|
! GD -> IE against hidden and local variable 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 sh2@TLSGD
|
||
|
2: .long __tls_get_addr@PLT
|
||
|
3:
|
||
|
nop;nop;nop;nop
|
||
|
|
||
|
! GD against hidden but not local variable
|
||
|
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
|
||
|
|
||
|
! GD -> IE against hidden but not local variable 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 sH2@TLSGD
|
||
|
2: .long __tls_get_addr@PLT
|
||
|
3:
|
||
|
nop;nop;nop;nop
|
||
|
|
||
|
! LD
|
||
|
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 against hidden and local 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 sl1@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
|
||
|
|
||
|
! LD against hidden but not local 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 .L8,r1
|
||
|
add r0,r1
|
||
|
nop;nop
|
||
|
mov.l .L9,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 local var
|
||
|
mov.l 1f,r0
|
||
|
stc gbr,r1
|
||
|
mov.l @(r0,r12),r0
|
||
|
bra 2f
|
||
|
add r0,r1
|
||
|
.align 2
|
||
|
1: .long sl2@GOTTPOFF
|
||
|
2:
|
||
|
nop;nop;nop;nop
|
||
|
|
||
|
! @GOTTPOFF IE against hidden and local var
|
||
|
mov.l 1f,r0
|
||
|
stc gbr,r1
|
||
|
mov.l @(r0,r12),r0
|
||
|
bra 2f
|
||
|
add r0,r1
|
||
|
.align 2
|
||
|
1: .long sh2@GOTTPOFF
|
||
|
2:
|
||
|
nop;nop;nop;nop
|
||
|
|
||
|
! @GOTTPOFF IE against hidden but not local var
|
||
|
mov.l 1f,r0
|
||
|
stc gbr,r1
|
||
|
mov.l @(r0,r12),r0
|
||
|
bra 2f
|
||
|
add r0,r1
|
||
|
.align 2
|
||
|
1: .long sH2@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 sl1@DTPOFF + 4
|
||
|
.L6: .long sh1@DTPOFF
|
||
|
.L7: .long sh2@DTPOFF
|
||
|
.L8: .long sH1@DTPOFF
|
||
|
.L9: .long sH2@DTPOFF
|