~ubuntu-branches/ubuntu/utopic/eglibc/utopic

« back to all changes in this revision

Viewing changes to elf/tls-macros.h

  • Committer: Package Import Robot
  • Author(s): Adam Conrad
  • Date: 2012-10-26 05:14:58 UTC
  • mfrom: (1.5.1) (4.4.22 experimental)
  • Revision ID: package-import@ubuntu.com-20121026051458-oryotr4i03ob5pab
Tags: 2.16-0ubuntu1
* Merge with unreleased 2.16 in Debian experimental, remaining changes:
  - Drop the Breaks line from libc6, which refers to a Debian transition
  - Remove the libc6 recommends on libc6-i686, which we don't build
  - Enable libc6{,-dev}-armel on armhf and libc6{-dev}-armhf on armel
  - Ship update-locale and validlocale in /usr/sbin in libc-bin
  - Don't build locales or locales-all in Ubuntu, we rely on langpacks
  - Heavily mangle the way we do service restarting on major upgrades
  - Use different MIN_KERNEL_SUPPORTED versions than Debian, due to
    buildd needs.  This should be universally bumped to 3.2.0 once all
    our buildds (including the PPA guests) are running precise kernels
  - Build i386 variants as -march=i686, build amd64 with -O3, and build
    ppc64 variants (both 64-bit and 32-bit) with -O3 -fno-tree-vectorize
  - Re-enable unsubmitted-ldconfig-cache-abi.diff and rebuild the cache
    on upgrades from previous versions that used a different constant
  - debian/patches/any/local-CVE-2012-3406.diff: switch to malloc when
    array grows too large to handle via alloca extension (CVE-2012-3406)
  - Build generic i386/i686 flavour with -mno-tls-direct-seg-refs
* Changes added/dropped with this merge while reducing our delta:
  - Stop building glibc docs from the eglibc source, and instead make
    the glibc-docs stub have a hard dependency on glibc-doc-reference
  - Remove outdated conflicts against ancient versions of ia32-libs
  - Drop the tzdata dependency from libc6, it's in required and minimal
  - Use gcc-4.7/g++-4.7 by default on all our supported architectures
  - Save our historical changelog as changelog.ubuntu in the source
  - Drop nscd's libaudit build-dep for now, as libaudit is in universe
  - Drop the unnecessary Breaks from libc6 to locales and locales-all
  - Ship xen's ld.so.conf.d snippet as /etc/ld.so.conf.d/libc6-xen.conf
* Disable hard failures on the test suite for the first upload to raring

Show diffs side-by-side

added added

removed removed

Lines of Context:
101
101
 
102
102
# define TLS_LE(x) \
103
103
  ({ int *__l;                                                                \
104
 
     asm ("movq %%fs:0,%0\n\t"                                                \
105
 
          "leaq " #x "@tpoff(%0), %0"                                         \
 
104
     asm ("mov %%fs:0,%0\n\t"                                                 \
 
105
          "lea " #x "@tpoff(%0), %0"                                          \
106
106
          : "=r" (__l));                                                      \
107
107
     __l; })
108
108
 
109
109
# define TLS_IE(x) \
110
110
  ({ int *__l;                                                                \
111
 
     asm ("movq %%fs:0,%0\n\t"                                                \
112
 
          "addq " #x "@gottpoff(%%rip),%0"                                    \
 
111
     asm ("mov %%fs:0,%0\n\t"                                                 \
 
112
          "add " #x "@gottpoff(%%rip),%0"                                     \
113
113
          : "=r" (__l));                                                      \
114
114
     __l; })
115
115
 
122
122
          : : "rdi", "rsi", "r8", "r9", "r10", "r11");                        \
123
123
     __l; })
124
124
 
 
125
# ifdef __ILP32__
 
126
#  define TLS_GD_PREFIX
 
127
# else
 
128
#  define TLS_GD_PREFIX ".byte 0x66\n\t"
 
129
# endif
 
130
 
125
131
# define TLS_GD(x) \
126
132
  ({ int *__l, __c, __d;                                                      \
127
 
     asm (".byte 0x66\n\t"                                                    \
 
133
     asm (TLS_GD_PREFIX                                                       \
128
134
          "leaq " #x "@tlsgd(%%rip),%%rdi\n\t"                                \
129
135
          ".word 0x6666\n\t"                                                  \
130
136
          "rex64\n\t"                                                         \
279
285
     __l; })
280
286
#endif
281
287
 
282
 
#elif defined __alpha__
283
 
 
284
 
register void *__gp __asm__("$29");
285
 
 
286
 
# define TLS_LE(x) \
287
 
  ({ int *__l;                                                                \
288
 
     asm ("call_pal 158\n\tlda $0," #x "($0)\t\t!tprel" : "=v"(__l));         \
289
 
     __l; })
290
 
 
291
 
# define TLS_IE(x) \
292
 
  ({ char *__tp; unsigned long __o;                                           \
293
 
     asm ("call_pal 158\n\tldq %1," #x "($gp)\t\t!gottprel"                   \
294
 
          : "=v"(__tp), "=r"(__o) : "r"(__gp));                               \
295
 
     (int *)(__tp + __o); })
296
 
 
297
 
# define TLS_LD(x) \
298
 
  ({ extern void *__tls_get_addr(void *); int *__l; void *__i;                \
299
 
     asm ("lda %0," #x "($gp)\t\t!tlsldm" : "=r" (__i) : "r"(__gp));          \
300
 
     __i = __tls_get_addr(__i);                                               \
301
 
     asm ("lda %0, " #x "(%1)\t\t!dtprel" : "=r"(__l) : "r"(__i));            \
302
 
     __l; })
303
 
 
304
 
# define TLS_GD(x) \
305
 
  ({ extern void *__tls_get_addr(void *); void *__i;                          \
306
 
     asm ("lda %0," #x "($gp)\t\t!tlsgd" : "=r" (__i) : "r"(__gp));           \
307
 
     (int *) __tls_get_addr(__i); })
308
 
 
309
 
 
310
 
#elif defined __ia64__
311
 
 
312
 
# define TLS_LE(x) \
313
 
  ({ void *__l;                                                               \
314
 
     asm ("mov r2=r13\n\t"                                                    \
315
 
         ";;\n\t"                                                             \
316
 
         "addl %0=@tprel(" #x "),r2\n\t"                                      \
317
 
         : "=r" (__l) : : "r2"  ); __l; })
318
 
 
319
 
# define TLS_IE(x) \
320
 
  ({ void *__l;                                                               \
321
 
     register long __gp asm ("gp");                                           \
322
 
     asm (";;\n\t"                                                            \
323
 
         "addl r16=@ltoff(@tprel(" #x ")),gp\n\t"                             \
324
 
         ";;\n\t"                                                             \
325
 
         "ld8 r17=[r16]\n\t"                                                  \
326
 
         ";;\n\t"                                                             \
327
 
         "add %0=r13,r17\n\t"                                                 \
328
 
         ";;\n\t"                                                             \
329
 
         : "=r" (__l) : "r" (__gp) : "r16", "r17" ); __l; })
330
 
 
331
 
# define __TLS_CALL_CLOBBERS \
332
 
  "r2", "r3", "r8", "r9", "r10", "r11", "r14", "r15", "r16", "r17",           \
333
 
  "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26",              \
334
 
  "r27", "r28", "r29", "r30", "r31",                                          \
335
 
  "p6", "p7", "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15",           \
336
 
  "f6", "f7", "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",           \
337
 
  "b6", "b7",                                                                 \
338
 
  "out0", "out1", "out2", "out3", "out4", "out5", "out6", "out7"
339
 
 
340
 
# define TLS_LD(x) \
341
 
  ({ void *__l;                                                               \
342
 
     register long __gp asm ("gp");                                           \
343
 
     asm (";;\n\t"                                                            \
344
 
         "mov loc0=gp\n\t"                                                    \
345
 
         "addl r16=@ltoff(@dtpmod(" #x ")),gp\n\t"                            \
346
 
         "addl out1=@dtprel(" #x "),r0\n\t"                                   \
347
 
         ";;\n\t"                                                             \
348
 
         "ld8 out0=[r16]\n\t"                                                 \
349
 
         "br.call.sptk.many b0=__tls_get_addr"                                \
350
 
         ";;\n\t"                                                             \
351
 
         "mov gp=loc0\n\t"                                                    \
352
 
         "mov %0=r8\n\t"                                                      \
353
 
         ";;\n\t"                                                             \
354
 
         : "=r" (__l) : "r" (__gp) : "loc0", __TLS_CALL_CLOBBERS);            \
355
 
     __l; })
356
 
 
357
 
# define TLS_GD(x) \
358
 
  ({ void *__l;                                                               \
359
 
     register long __gp asm ("gp");                                           \
360
 
     asm (";;\n\t"                                                            \
361
 
         "mov loc0=gp\n\t"                                                    \
362
 
         "addl r16=@ltoff(@dtpmod(" #x ")),gp\n\t"                            \
363
 
         "addl r17=@ltoff(@dtprel(" #x ")),gp\n\t"                            \
364
 
         ";;\n\t"                                                             \
365
 
         "ld8 out0=[r16]\n\t"                                                 \
366
 
         "ld8 out1=[r17]\n\t"                                                 \
367
 
         "br.call.sptk.many b0=__tls_get_addr"                                \
368
 
         ";;\n\t"                                                             \
369
 
         "mov gp=loc0\n\t"                                                    \
370
 
         "mov %0=r8\n\t"                                                      \
371
 
         ";;\n\t"                                                             \
372
 
          : "=r" (__l) : "r" (__gp) : "loc0", __TLS_CALL_CLOBBERS);           \
373
 
     __l; })
374
 
 
375
288
#elif defined __sparc__ && !defined __arch64__
376
289
 
377
290
# define TLS_LE(x) \
546
459
          "0:\t.quad " #x "@tlsldm\n\t"                                       \
547
460
          ".quad " #x "@dtpoff\n"                                             \
548
461
          "1:\tlgr %1,%%r12\n\t"                                              \
549
 
          "larl %%r12,_GLOBAL_OFFSET_TABLE_\n\t"                              \
550
 
          "lg %%r2,0(%0)\n\t"                                                 \
 
462
          "larl %%r12,_GLOBAL_OFFSET_TABLE_\n\t"                              \
 
463
          "lg %%r2,0(%0)\n\t"                                                 \
551
464
          "brasl %%r14,__tls_get_offset@plt:tls_ldcall:" #x "\n\t"            \
552
465
          "lg %0,8(%0)\n\t"                                                   \
553
466
          "algr %0,%%r2\n\t"                                                  \
554
 
          "lgr %%r12,%1"                                                      \
 
467
          "lgr %%r12,%1"                                                      \
555
468
          : "=&a" (__offset), "=&a" (__save12)                                \
556
 
          : : "cc", "0", "1", "2", "3", "4", "5", "14" );                     \
 
469
          : : "cc", "0", "1", "2", "3", "4", "5", "14" );                     \
557
470
     (int *) (__builtin_thread_pointer() + __offset); })
558
471
# else
559
472
#  define TLS_LD(x) \
562
475
          "0:\t.quad " #x "@tlsldm\n\t"                                       \
563
476
          ".quad " #x "@dtpoff\n"                                             \
564
477
          "1:\tlarl %%r12,_GLOBAL_OFFSET_TABLE_\n\t"                          \
565
 
          "lg %%r2,0(%0)\n\t"                                                 \
 
478
          "lg %%r2,0(%0)\n\t"                                                 \
566
479
          "brasl %%r14,__tls_get_offset@plt:tls_ldcall:" #x "\n\t"            \
567
480
          "lg %0,8(%0)\n\t"                                                   \
568
481
          "algr %0,%%r2"                                                      \
578
491
          "0:\t.quad " #x "@tlsgd\n"                                          \
579
492
          "1:\tlgr %1,%%r12\n\t"                                              \
580
493
          "larl %%r12,_GLOBAL_OFFSET_TABLE_\n\t"                              \
581
 
          "lg %%r2,0(%0)\n\t"                                                 \
 
494
          "lg %%r2,0(%0)\n\t"                                                 \
582
495
          "brasl %%r14,__tls_get_offset@plt:tls_gdcall:" #x "\n\t"            \
583
 
          "lgr %0,%%r2\n\t"                                                   \
584
 
          "lgr %%r12,%1"                                                      \
 
496
          "lgr %0,%%r2\n\t"                                                   \
 
497
          "lgr %%r12,%1"                                                      \
585
498
          : "=&a" (__offset), "=&a" (__save12)                                \
586
 
          : : "cc", "0", "1", "2", "3", "4", "5", "14" );                     \
 
499
          : : "cc", "0", "1", "2", "3", "4", "5", "14" );                     \
587
500
     (int *) (__builtin_thread_pointer() + __offset); })
588
501
# else
589
502
#  define TLS_GD(x) \
593
506
          "1:\tlarl %%r12,_GLOBAL_OFFSET_TABLE_\n\t"                          \
594
507
          "lg %%r2,0(%0)\n\t"                                                 \
595
508
          "brasl %%r14,__tls_get_offset@plt:tls_gdcall:" #x "\n\t"            \
596
 
          "lgr %0,%%r2"                                                       \
 
509
          "lgr %0,%%r2"                                                       \
597
510
          : "=&a" (__offset)                                                  \
598
511
          : : "cc", "0", "1", "2", "3", "4", "5", "12", "14" );               \
599
512
     (int *) (__builtin_thread_pointer() + __offset); })
638
551
          ".long " #x "@tlsldm\n\t"                                           \
639
552
          ".long " #x "@dtpoff\n"                                             \
640
553
          "1:\tlr %1,%%r12\n\t"                                               \
641
 
          "l %%r12,0(%0)\n\t"                                                 \
642
 
          "la %%r12,0(%%r12,%0)\n\t"                                          \
 
554
          "l %%r12,0(%0)\n\t"                                                 \
 
555
          "la %%r12,0(%%r12,%0)\n\t"                                          \
643
556
          "l %%r1,4(%0)\n\t"                                                  \
644
557
          "l %%r2,8(%0)\n\t"                                                  \
645
558
          "bas %%r14,0(%%r1,%0):tls_ldcall:" #x "\n\t"                        \
646
559
          "l %0,12(%0)\n\t"                                                   \
647
560
          "alr %0,%%r2\n\t"                                                   \
648
 
          "lr %%r12,%1"                                                       \
 
561
          "lr %%r12,%1"                                                       \
649
562
          : "=&a" (__offset), "=&a" (__save12)                                \
650
 
          : : "cc", "0", "1", "2", "3", "4", "5" );                           \
 
563
          : : "cc", "0", "1", "2", "3", "4", "5" );                           \
651
564
     (int *) (__builtin_thread_pointer() + __offset); })
652
565
# else
653
566
#  define TLS_LD(x) \
675
588
          ".long __tls_get_offset@plt-0b\n\t"                                 \
676
589
          ".long " #x "@tlsgd\n"                                              \
677
590
          "1:\tlr %1,%%r12\n\t"                                               \
678
 
          "l %%r12,0(%0)\n\t"                                                 \
679
 
          "la %%r12,0(%%r12,%0)\n\t"                                          \
 
591
          "l %%r12,0(%0)\n\t"                                                 \
 
592
          "la %%r12,0(%%r12,%0)\n\t"                                          \
680
593
          "l %%r1,4(%0)\n\t"                                                  \
681
594
          "l %%r2,8(%0)\n\t"                                                  \
682
595
          "bas %%r14,0(%%r1,%0):tls_gdcall:" #x "\n\t"                        \
683
 
          "lr %0,%%r2\n\t"                                                    \
684
 
          "lr %%r12,%1"                                                       \
 
596
          "lr %0,%%r2\n\t"                                                    \
 
597
          "lr %%r12,%1"                                                       \
685
598
          : "=&a" (__offset), "=&a" (__save12)                                \
686
 
          : : "cc", "0", "1", "2", "3", "4", "5" );                           \
 
599
          : : "cc", "0", "1", "2", "3", "4", "5" );                           \
687
600
     (int *) (__builtin_thread_pointer() + __offset); })
688
601
# else
689
602
#  define TLS_GD(x) \
696
609
          "l %%r1,4(%0)\n\t"                                                  \
697
610
          "l %%r2,8(%0)\n\t"                                                  \
698
611
          "bas %%r14,0(%%r1):tls_gdcall:" #x "\n\t"                           \
699
 
          "lr %0,%%r2"                                                        \
 
612
          "lr %0,%%r2"                                                        \
700
613
          : "=&a" (__offset) : : "cc", "0", "1", "2", "3", "4", "5", "12" );  \
701
614
     (int *) (__builtin_thread_pointer() + __offset); })
702
615
# endif