1 .section ".tdata", "awT", @progbits 2 .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8 3 .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 4 .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 5sg1: .long 17 6sg2: .long 18 7sg3: .long 19 8sg4: .long 20 9sg5: .long 21 10sg6: .long 22 11sg7: .long 23 12sg8: .long 24 13sl1: .long 65 14sl2: .long 66 15sl3: .long 67 16sl4: .long 68 17sl5: .long 69 18sl6: .long 70 19sl7: .long 71 20sl8: .long 72 21sh1: .long 257 22sh2: .long 258 23sh3: .long 259 24sh4: .long 260 25sh5: .long 261 26sh6: .long 262 27sh7: .long 263 28sh8: .long 264 29 .text 30 .globl fn1 31 .type fn1,@function 32fn1: 33 pushl %ebp 34 movl %esp, %ebp 35 pushl %ebx 36 pushl %eax 37 call 1f 381: popl %ebx 39 addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx 40 nop;nop;nop;nop 41 42 /* GD */ 43 leal sg1@tlsgd(%ebx), %eax 44 call *___tls_get_addr@GOT(%ebx) 45 nop;nop;nop;nop 46 47 /* GD -> IE because variable is referenced through @gottpoff too */ 48 leal sg2@tlsgd(%ecx), %eax 49 call *___tls_get_addr@GOT(%ecx) 50 nop;nop;nop;nop 51 52 /* GD -> IE because variable is referenced through @gotntpoff too */ 53 leal sg3@tlsgd(%edx), %eax 54 call *___tls_get_addr@GOT(%edx) 55 nop;nop;nop;nop 56 57 /* GD -> IE because variable is referenced through @gottpoff and 58 @gotntpoff too */ 59 leal sg4@tlsgd(%edi), %eax 60 call *___tls_get_addr@GOT(%edi) 61 nop;nop;nop;nop 62 63 /* GD against local variable */ 64 leal sl1@tlsgd(%esi), %eax 65 call *___tls_get_addr@GOT(%esi) 66 nop;nop;nop;nop 67 68 /* GD -> IE against local variable referenced through @gottpoff too */ 69 leal sl2@tlsgd(%ebp), %eax 70 call *___tls_get_addr@GOT(%ebp) 71 nop;nop;nop;nop 72 73 /* GD -> IE against local variable referenced through @gotntpoff 74 too */ 75 leal sl3@tlsgd(%ebx), %eax 76 call *___tls_get_addr@GOT(%ebx) 77 nop;nop;nop;nop 78 79 /* GD -> IE against local variable referenced through @gottpoff and 80 @gotntpoff too */ 81 leal sl4@tlsgd(%ebx), %eax 82 call *___tls_get_addr@GOT(%ebx) 83 nop;nop;nop;nop 84 85 /* GD against hidden and local variable */ 86 leal sh1@tlsgd(%ebx), %eax 87 call *___tls_get_addr@GOT(%ebx) 88 nop;nop;nop;nop 89 90 /* GD -> IE against hidden and local variable referenced through 91 @gottpoff too */ 92 leal sh2@tlsgd(%ebx), %eax 93 call *___tls_get_addr@GOT(%ebx) 94 nop;nop;nop;nop 95 96 /* GD -> IE against hidden and local variable referenced through 97 @gotntpoff too */ 98 leal sh3@tlsgd(%ebx), %eax 99 call *___tls_get_addr@GOT(%ebx) 100 nop;nop;nop;nop 101 102 /* GD -> IE against hidden and local variable referenced through 103 @gottpoff and @gotntpoff too */ 104 leal sh4@tlsgd(%ebx), %eax 105 call *___tls_get_addr@GOT(%ebx) 106 nop;nop;nop;nop 107 108 /* GD against hidden but not local variable */ 109 leal sH1@tlsgd(%ebx), %eax 110 call *___tls_get_addr@GOT(%ebx) 111 nop;nop;nop;nop 112 113 /* GD -> IE against hidden but not local variable referenced through 114 @gottpoff too */ 115 leal sH2@tlsgd(%ebx), %eax 116 call *___tls_get_addr@GOT(%ebx) 117 nop;nop;nop;nop 118 119 /* GD -> IE against hidden but not local variable referenced through 120 @gotntpoff too */ 121 leal sH3@tlsgd(%ebx), %eax 122 call *___tls_get_addr@GOT(%ebx) 123 nop;nop;nop;nop 124 125 /* GD -> IE against hidden but not local variable referenced through 126 @gottpoff and @gotntpoff too */ 127 leal sH4@tlsgd(%ebx), %eax 128 call *___tls_get_addr@GOT(%ebx) 129 nop;nop;nop;nop 130 131 /* LD */ 132 leal sl1@tlsldm(%ebx), %eax 133 call *___tls_get_addr@GOT(%ebx) 134 nop 135 leal sl1@dtpoff(%eax), %edx 136 nop;nop 137 leal 2+sl2@dtpoff(%eax), %ecx 138 nop;nop;nop;nop 139 140 /* LD against hidden and local variables */ 141 leal sh1@tlsldm(%ecx), %eax 142 call *___tls_get_addr@GOT(%ecx) 143 nop 144 leal sh1@dtpoff(%eax), %edx 145 nop;nop 146 leal sh2@dtpoff+3(%eax), %ecx 147 nop;nop;nop;nop 148 149 /* LD against hidden but not local variables */ 150 leal sH1@tlsldm(%edx), %eax 151 call *___tls_get_addr@GOT(%edx) 152 nop 153 leal sH1@dtpoff(%eax), %edx 154 nop;nop 155 leal sH2@dtpoff+1(%eax), %ecx 156 nop;nop 157 158 /* @gottpoff IE against global var */ 159 movl %gs:0, %ecx 160 nop;nop 161 subl sg2@gottpoff(%ebx), %ecx 162 nop;nop;nop;nop 163 164 /* @gottpoff IE against global var */ 165 movl %gs:0, %eax 166 nop;nop 167 subl sg4@gottpoff(%ebx), %eax 168 nop;nop;nop;nop 169 170 /* @gotntpoff IE against global var */ 171 movl %gs:0, %ecx 172 nop;nop 173 addl sg3@gotntpoff(%ebx), %ecx 174 nop;nop;nop;nop 175 176 /* @gotntpoff IE against global var */ 177 movl %gs:0, %eax 178 nop;nop 179 addl sg4@gotntpoff(%ebx), %eax 180 nop;nop;nop;nop 181 182 /* @gottpoff IE against local var */ 183 movl %gs:0, %ecx 184 nop;nop 185 subl sl2@gottpoff(%ebx), %ecx 186 nop;nop;nop;nop 187 188 /* @gottpoff IE against local var */ 189 movl %gs:0, %eax 190 nop;nop 191 subl sl4@gottpoff(%ebx), %eax 192 nop;nop;nop;nop 193 194 /* @gotntpoff IE against local var */ 195 movl %gs:0, %ecx 196 nop;nop 197 addl sl3@gotntpoff(%ebx), %ecx 198 nop;nop;nop;nop 199 200 /* @gotntpoff IE against local var */ 201 movl %gs:0, %eax 202 nop;nop 203 addl sl4@gotntpoff(%ebx), %eax 204 nop;nop;nop;nop 205 206 /* @gottpoff IE against hidden and local var */ 207 movl %gs:0, %ecx 208 nop;nop 209 subl sh2@gottpoff(%ebx), %ecx 210 nop;nop;nop;nop 211 212 /* @gottpoff IE against hidden and local var */ 213 movl %gs:0, %eax 214 nop;nop 215 subl sh4@gottpoff(%ebx), %eax 216 nop;nop;nop;nop 217 218 /* @gotntpoff IE against hidden and local var */ 219 movl %gs:0, %ecx 220 nop;nop 221 addl sh3@gotntpoff(%ebx), %ecx 222 nop;nop;nop;nop 223 224 /* @gotntpoff IE against hidden and local var */ 225 movl %gs:0, %eax 226 nop;nop 227 addl sh4@gotntpoff(%ebx), %eax 228 nop;nop;nop;nop 229 230 /* @gottpoff IE against hidden but not local var */ 231 movl %gs:0, %ecx 232 nop;nop 233 subl sH2@gottpoff(%ebx), %ecx 234 nop;nop;nop;nop 235 236 /* @gottpoff IE against hidden but not local var */ 237 movl %gs:0, %eax 238 nop;nop 239 subl sH4@gottpoff(%ebx), %eax 240 nop;nop;nop;nop 241 242 /* @gotntpoff IE against hidden but not local var */ 243 movl %gs:0, %ecx 244 nop;nop 245 addl sH3@gotntpoff(%ebx), %ecx 246 nop;nop;nop;nop 247 248 /* @gotntpoff IE against hidden but not local var */ 249 movl %gs:0, %eax 250 nop;nop 251 addl sH4@gotntpoff(%ebx), %eax 252 nop;nop;nop;nop 253 254 /* Direct access through %gs */ 255 256 /* @gotntpoff IE against global var */ 257 movl sg5@gotntpoff(%ebx), %ecx 258 nop;nop 259 movl %gs:(%ecx), %edx 260 nop;nop;nop;nop 261 262 /* @gotntpoff IE against local var */ 263 movl sl5@gotntpoff(%ebx), %eax 264 nop;nop 265 movl %gs:(%eax), %edx 266 nop;nop;nop;nop 267 268 /* @gotntpoff IE against hidden and local var */ 269 movl sh5@gotntpoff(%ebx), %edx 270 nop;nop 271 movl %gs:(%edx), %edx 272 nop;nop;nop;nop 273 274 /* @gotntpoff IE against hidden but not local var */ 275 movl sH5@gotntpoff(%ebx), %ecx 276 nop;nop 277 movl %gs:(%ecx), %edx 278 nop;nop;nop;nop 279 280 movl -4(%ebp), %ebx 281 leave 282 ret 283