1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
|
! 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:
|