|  | ! 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: |