1 .section ".tbss","awT",@nobits 2 .p2align 3 3pad: .space 8 4 .global a 5a: .space 8 6 .global b 7b: .space 8 8 .global c 9c: .space 8 10 .global d 11d: .space 8 12 13 .text 14 .globl _start 15_start: 16#Small model OpenPower 17 ld 9,.La@toc(2) 18 add 10,9,.La@tls 19 .section .toc,"aw",@progbits 20.La: 21 .quad a@tprel 22 .text 23 24#Medium model ELF 25 addis 9,2,b@got@tprel@ha 26 ld 10,b@got@tprel@l(9) 27 add 3,10,b@tls 28 29#PCrel 30 pld 4,c@got@tprel@pcrel 31 add 4,4,c@tls@pcrel 32 33#All of the above using the same symbol 34 addis 9,2,.Ld@toc@ha 35 ld 9,.Ld@toc@l(9) 36 add 10,9,.Ld@tls 37 .section .toc,"aw",@progbits 38.Ld: 39 .quad d@tprel 40 .text 41 addis 9,2,d@got@tprel@ha 42 ld 31,d@got@tprel@l(9) 43 add 3,31,d@tls 44 pld 30,d@got@tprel@pcrel 45 add 3,30,d@tls@pcrel 46#Note that after optimisation r31 and r30 above have a different value to 47#what they would have without optimisation. r31 may not even be written. 48#Here are all the other insns that gas/ld accept as the final insn of an 49#IE sequence. The r30 value below will be different after optimisation 50#for the non-update forms. 51 lwzx 4,30,d@tls@pcrel 52 lwzux 4,30,d@tls@pcrel 53 lbzx 5,30,d@tls@pcrel 54 lbzux 5,30,d@tls@pcrel 55 stwx 6,30,d@tls@pcrel 56 stwux 6,30,d@tls@pcrel 57 stbx 7,30,d@tls@pcrel 58 stbux 7,30,d@tls@pcrel 59 lhzx 8,30,d@tls@pcrel 60 lhzux 8,30,d@tls@pcrel 61 lhax 9,30,d@tls@pcrel 62 lhaux 9,30,d@tls@pcrel 63 sthx 10,30,d@tls@pcrel 64 sthux 10,30,d@tls@pcrel 65 lfsx 11,30,d@tls@pcrel 66 lfsux 11,30,d@tls@pcrel 67 lfdx 12,30,d@tls@pcrel 68 lfdux 12,30,d@tls@pcrel 69 stfsx 13,30,d@tls@pcrel 70 stfsux 13,30,d@tls@pcrel 71 stfdx 14,30,d@tls@pcrel 72 stfdux 14,30,d@tls@pcrel 73 ldx 15,30,d@tls@pcrel 74 ldux 15,30,d@tls@pcrel 75 stdx 16,30,d@tls@pcrel 76 stdux 16,30,d@tls@pcrel 77 lwax 17,30,d@tls@pcrel 78