.globl bar[TL] | |
.csect bar[TL] | |
.long 1 | |
.toc | |
.tc gd[TC],bar[TL] | |
.tc .gd[TC],bar[TL]@m | |
.tc ld[TC],bar[TL]@ld | |
.tc mh[TC],mh[TC]@ml | |
.tc ie[TC],bar[TL]@ie | |
.tc le[TC],bar[TL]@le | |
.globl foo | |
.globl .foo | |
.csect foo[DS],3 | |
foo: | |
.if size == 32 | |
.long .foo, TOC[tc0], 0 | |
.else | |
.llong .foo, TOC[tc0], 0 | |
.endif | |
.csect foo[PR] | |
.foo: | |
#GD | |
.if size == 32 | |
lwz 4, gd[TC](2) | |
lwz 3, .gd[TC](2) | |
.else | |
ld 4, gd[TC](2) | |
ld 3, .gd[TC](2) | |
.endif | |
bla __tls_get_addr | |
#LD | |
.if size == 32 | |
lwz 3, mh[TC](2) | |
.else | |
ld 3, mh[TC](2) | |
.endif | |
bla __tls_get_mod | |
lwz 4, ld[TC](2) | |
add 5,3,4 | |
#IE | |
.if size == 32 | |
bla __get_tpointer | |
lwz 4, ie[TC](2) | |
add 5,3,4 | |
.else | |
ld 4, ie[TC](2) | |
add 5,4,13 | |
.endif | |
#LE | |
.if size == 32 | |
bla __get_tpointer | |
lwz 4, le[TC](2) | |
add 5,3,4 | |
.else | |
ld 4, le[TC](2) | |
add 5,3,13 | |
.endif | |
.rename mh[TC], "_$TLSML" # Symbol for the module handle |