2003-02-04 22:52:11 +08:00
|
|
|
#source: tls.s
|
|
|
|
#as: -a64
|
2012-10-29 17:25:53 +08:00
|
|
|
#ld: -shared
|
2003-02-04 22:52:11 +08:00
|
|
|
#objdump: -dr
|
|
|
|
#target: powerpc64*-*-*
|
|
|
|
|
2013-08-22 15:34:28 +08:00
|
|
|
.*
|
2003-02-04 22:52:11 +08:00
|
|
|
|
|
|
|
Disassembly of section \.text:
|
|
|
|
|
2013-04-22 11:11:40 +08:00
|
|
|
.* <.*plt_call\.__tls_get_addr(|_opt)>:
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (f8 41 00 28|28 00 41 f8) std r2,40\(r1\)
|
2019-10-04 07:18:41 +08:00
|
|
|
.* (e9 82 80 98|98 80 82 e9) ld r12,-32616\(r2\)
|
2013-10-29 10:09:30 +08:00
|
|
|
.* (7d 89 03 a6|a6 03 89 7d) mtctr r12
|
2019-10-04 07:18:41 +08:00
|
|
|
.* (e8 42 80 a0|a0 80 42 e8) ld r2,-32608\(r2\)
|
2013-01-15 14:13:26 +08:00
|
|
|
.* (28 22 00 00|00 00 22 28) cmpldi r2,0
|
2013-10-29 10:09:30 +08:00
|
|
|
.* (4c e2 04 20|20 04 e2 4c) bnectr\+ *
|
|
|
|
.* (48 00 00 ..|.. 00 00 48) b .* <__tls_get_addr@plt>
|
2003-02-04 22:52:11 +08:00
|
|
|
|
2013-10-29 10:09:30 +08:00
|
|
|
.* <\._start>:
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (38 62 80 20|20 80 62 38) addi r3,r2,-32736
|
2013-01-15 14:13:26 +08:00
|
|
|
.* (4b ff ff ..|.. ff ff 4b) bl .*plt_call.__tls_get_addr.*
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (e8 41 00 28|28 00 41 e8) ld r2,40\(r1\)
|
2019-10-04 07:18:41 +08:00
|
|
|
.* (38 62 80 40|40 80 62 38) addi r3,r2,-32704
|
2013-01-15 14:13:26 +08:00
|
|
|
.* (4b ff ff ..|.. ff ff 4b) bl .*plt_call.__tls_get_addr.*
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (e8 41 00 28|28 00 41 e8) ld r2,40\(r1\)
|
2019-10-04 07:18:41 +08:00
|
|
|
.* (38 62 80 58|58 80 62 38) addi r3,r2,-32680
|
2013-01-15 14:13:26 +08:00
|
|
|
.* (4b ff ff ..|.. ff ff 4b) bl .*plt_call.__tls_get_addr.*
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (e8 41 00 28|28 00 41 e8) ld r2,40\(r1\)
|
2019-10-04 07:18:41 +08:00
|
|
|
.* (38 62 80 30|30 80 62 38) addi r3,r2,-32720
|
2013-01-15 14:13:26 +08:00
|
|
|
.* (4b ff ff ..|.. ff ff 4b) bl .*plt_call.__tls_get_addr.*
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (e8 41 00 28|28 00 41 e8) ld r2,40\(r1\)
|
|
|
|
.* (39 23 80 40|40 80 23 39) addi r9,r3,-32704
|
|
|
|
.* (3d 23 00 00|00 00 23 3d) addis r9,r3,0
|
|
|
|
.* (81 49 80 48|48 80 49 81) lwz r10,-32696\(r9\)
|
2019-10-04 07:18:41 +08:00
|
|
|
.* (e9 22 80 50|50 80 22 e9) ld r9,-32688\(r2\)
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (7d 49 18 2a|2a 18 49 7d) ldx r10,r9,r3
|
2019-10-04 07:18:41 +08:00
|
|
|
.* (e9 22 80 68|68 80 22 e9) ld r9,-32664\(r2\)
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (7d 49 6a 2e|2e 6a 49 7d) lhzx r10,r9,r13
|
|
|
|
.* (89 4d 00 00|00 00 4d 89) lbz r10,0\(r13\)
|
|
|
|
.* (3d 2d 00 00|00 00 2d 3d) addis r9,r13,0
|
|
|
|
.* (99 49 00 00|00 00 49 99) stb r10,0\(r9\)
|
|
|
|
.* (38 62 80 08|08 80 62 38) addi r3,r2,-32760
|
2013-01-15 14:13:26 +08:00
|
|
|
.* (4b ff ff ..|.. ff ff 4b) bl .*plt_call.__tls_get_addr.*
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (e8 41 00 28|28 00 41 e8) ld r2,40\(r1\)
|
2019-10-04 07:18:41 +08:00
|
|
|
.* (38 62 80 70|70 80 62 38) addi r3,r2,-32656
|
2013-01-15 14:13:26 +08:00
|
|
|
.* (4b ff ff ..|.. ff ff 4b) bl .*plt_call.__tls_get_addr.*
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (e8 41 00 28|28 00 41 e8) ld r2,40\(r1\)
|
|
|
|
.* (f9 43 80 08|08 80 43 f9) std r10,-32760\(r3\)
|
|
|
|
.* (3d 23 00 00|00 00 23 3d) addis r9,r3,0
|
|
|
|
.* (91 49 80 10|10 80 49 91) stw r10,-32752\(r9\)
|
|
|
|
.* (e9 22 80 18|18 80 22 e9) ld r9,-32744\(r2\)
|
|
|
|
.* (7d 49 19 2a|2a 19 49 7d) stdx r10,r9,r3
|
2019-10-04 07:18:41 +08:00
|
|
|
.* (e9 22 80 68|68 80 22 e9) ld r9,-32664\(r2\)
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (7d 49 6b 2e|2e 6b 49 7d) sthx r10,r9,r13
|
|
|
|
.* (e9 4d 00 02|02 00 4d e9) lwa r10,0\(r13\)
|
|
|
|
.* (3d 2d 00 00|00 00 2d 3d) addis r9,r13,0
|
|
|
|
.* (a9 49 00 00|00 00 49 a9) lha r10,0\(r9\)
|
|
|
|
.* (60 00 00 00|00 00 00 60) nop
|
Define various symbols conditionally in shared libraries
The values of symbols in shared libraries like _end, _edata, and
__bss_start are generally not that useful outside of the shared
library. This patch defines them conditionally with PROVIDE, since a
shared library might need the local value. An example is glibc ld.so
local access to "_begin", "_etext" and "_end". (ld.so gains access to
the local values by making the references using hidden visibility.
That makes the definitions hidden too.)
We can't use PROVIDE_HIDDEN in the linker scripts because the shared
library might need the value of the symbol in the executable. An
example is freebsd libc dynamic access to "_end".
PR ld/23161
* emulparams/aarch64cloudabi.sh: PROVIDE __bss_start__, _bss_end__,
and __end__ in shared libraries.
* emulparams/aarch64fbsd.sh: Likewise.
* emulparams/aarch64linux.sh: Likewise.
* emulparams/aarch64linux32.sh: Likewise.
* emulparams/armelf_fuchsia.sh: Likewise.
* emulparams/armelf_linux.sh: Likewise.
* emulparams/armelf_phoenix.sh: Likewise.
* emulparams/aarch64elf.sh: Likewise, and __data_start
* emulparams/aarch64elf32.sh: Likewise.
* emulparams/armelf.sh: Likewise.
* emulparams/armnto.sh: Likewise.
* emulparams/elf32bmip.sh: Remove duplicate ". = ." from
OTHER_GOT_SYMBOLS. PROVIDE _ftext, _fdata, and _fbss in shared libs.
* emulparams/elf32bmipn32-defs.sh: Likewise.
* emulparams/elf32frv.sh: PROVIDE __end and __data_start in shared libs.
* emulparams/elf32lriscv-defs.sh: Tidy.
* emulparams/elf32mcore.sh: PROVIDE __bss_start and _bss_end in
shared libs
* emulparams/elf32ppccommon.sh: PROVIDE __end in shared libs.
* emulparams/elf32rl78.sh: Tidy.
* emulparams/i386nto.sh: PROVIDE _btext in shared libs.
* emulparams/shelf_nto.sh: Likewise.
* emulparams/shlelf_nto.sh: Likewise.
* emulparams/score3_elf.sh: PROVIDE _gp, _bss_start__, _bss_end__,
__bss_end__, __end__, _fdata, _sdata_begin, and _bss_start in
shared libs.
* scripttempl/elf.sc: Don't use EXECUTABLE_SYMBOLS for shared
libraries. PROVIDE _edata, edata, __bss_start, and _end in shared
libraries.
* testsuite/ld-elf/pr23161.map,
* testsuite/ld-elf/pr23161a.c,
* testsuite/ld-elf/pr23161b.c,
* testsuite/ld-elf/pr23161c.c,
* testsuite/ld-elf/pr23161a.rd,
* testsuite/ld-elf/pr23161b.rd,
* testsuite/ld-elf/pr23161c.rd,
* testsuite/ld-elf/pr23161d.rd: New tests.
* testsuite/ld-elf/shared.exp: Run ld/23161 tests.
* testsuite/ld-elf/pr23162.rd,
* testsuite/ld-aarch64/ifunc-1-local.d,
* testsuite/ld-aarch64/ifunc-1.d,
* testsuite/ld-aarch64/ifunc-2-local.d,
* testsuite/ld-aarch64/ifunc-2.d,
* testsuite/ld-aarch64/ifunc-21.d,
* testsuite/ld-aarch64/ifunc-3a.d,
* testsuite/ld-alpha/tlsbin.rd,
* testsuite/ld-alpha/tlsbin.sd,
* testsuite/ld-alpha/tlsbinr.rd,
* testsuite/ld-alpha/tlspic.rd,
* testsuite/ld-alpha/tlspic.sd,
* testsuite/ld-cris/dso-pltdis1.d,
* testsuite/ld-cris/dso-pltdis2.d,
* testsuite/ld-cris/dso12-pltdis.d,
* testsuite/ld-cris/gotplt1.d,
* testsuite/ld-cris/gotplt2.d,
* testsuite/ld-cris/gotplt3.d,
* testsuite/ld-cris/hiddef1.d,
* testsuite/ld-cris/libdso-1.d,
* testsuite/ld-cris/libdso-10.d,
* testsuite/ld-cris/libdso-11.d,
* testsuite/ld-cris/libdso-12.d,
* testsuite/ld-cris/libdso-12b.d,
* testsuite/ld-cris/libdso-12c.d,
* testsuite/ld-cris/libdso-13.d,
* testsuite/ld-cris/libdso-13b.d,
* testsuite/ld-cris/libdso-14.d,
* testsuite/ld-cris/libdso-15.d,
* testsuite/ld-cris/libdso-15b.d,
* testsuite/ld-cris/libdso-1c.d,
* testsuite/ld-cris/libdso-1d.d,
* testsuite/ld-cris/libdso-2.d,
* testsuite/ld-cris/pic-gc-72.d,
* testsuite/ld-cris/pic-gc-73.d,
* testsuite/ld-cris/pr16044.d,
* testsuite/ld-cris/pv32-1.d,
* testsuite/ld-cris/tls-dso-dtpoffd2.d,
* testsuite/ld-cris/tls-dso-dtpoffd4.d,
* testsuite/ld-cris/tls-dso-tpoffgotcomm1.d,
* testsuite/ld-cris/tls-gc-71.d,
* testsuite/ld-cris/tls-gd-1.d,
* testsuite/ld-cris/tls-gd-1h.d,
* testsuite/ld-cris/tls-gd-2.d,
* testsuite/ld-cris/tls-gd-2h.d,
* testsuite/ld-cris/tls-ie-10.d,
* testsuite/ld-cris/tls-ie-11.d,
* testsuite/ld-cris/tls-ie-78.d,
* testsuite/ld-cris/tls-ie-8.d,
* testsuite/ld-cris/tls-ie-9.d,
* testsuite/ld-cris/tls-js1.d,
* testsuite/ld-cris/tls-ld-4.d,
* testsuite/ld-cris/tls-ld-5.d,
* testsuite/ld-cris/tls-ld-6.d,
* testsuite/ld-cris/tls-ld-7.d,
* testsuite/ld-cris/tls-ldgd-14.d,
* testsuite/ld-cris/tls-ldgd-15.d,
* testsuite/ld-cris/tls-ldgdex-14.d,
* testsuite/ld-cris/tls-ldgdex-15.d,
* testsuite/ld-cris/tls-ldgdx-14.d,
* testsuite/ld-cris/tls-ldgdx-15.d,
* testsuite/ld-cris/tls-legdx-16.d,
* testsuite/ld-cris/tls-legdx-17.d,
* testsuite/ld-cris/tls-local-54.d,
* testsuite/ld-cris/tls-local-60.d,
* testsuite/ld-cris/tls-local-61.d,
* testsuite/ld-cris/tls-local-63.d,
* testsuite/ld-cris/tls-local-64.d,
* testsuite/ld-cris/tls-ok-30.d,
* testsuite/ld-cris/tls-ok-32.d,
* testsuite/ld-cris/tls-ok-34.d,
* testsuite/ld-cris/tls-und-38.d,
* testsuite/ld-cris/tls-und-42.d,
* testsuite/ld-cris/tls-und-46.d,
* testsuite/ld-cris/tls-und-50.d,
* testsuite/ld-cris/weakhiddso.d,
* testsuite/ld-cris/weakref2.d,
* testsuite/ld-frv/fdpic-shared-1.d,
* testsuite/ld-frv/fdpic-shared-2.d,
* testsuite/ld-frv/fdpic-shared-3.d,
* testsuite/ld-frv/fdpic-shared-4.d,
* testsuite/ld-frv/fdpic-shared-5.d,
* testsuite/ld-frv/fdpic-shared-7.d,
* testsuite/ld-frv/fdpic-shared-8.d,
* testsuite/ld-frv/tls-dynamic-2.d,
* testsuite/ld-i386/ibt-plt-1.d,
* testsuite/ld-i386/ibt-plt-2a.d,
* testsuite/ld-i386/ibt-plt-2b.d,
* testsuite/ld-i386/ibt-plt-2c.d,
* testsuite/ld-i386/ibt-plt-2d.d,
* testsuite/ld-i386/ibt-plt-3a.d,
* testsuite/ld-i386/ibt-plt-3b.d,
* testsuite/ld-i386/ibt-plt-3c.d,
* testsuite/ld-i386/ibt-plt-3d.d,
* testsuite/ld-i386/plt2.dd,
* testsuite/ld-i386/pr20830.d,
* testsuite/ld-i386/tlsbin-nacl.rd,
* testsuite/ld-i386/tlsbin.rd,
* testsuite/ld-i386/tlsbin2-nacl.rd,
* testsuite/ld-i386/tlsbin2.rd,
* testsuite/ld-i386/tlsbindesc-nacl.rd,
* testsuite/ld-i386/tlsbindesc.rd,
* testsuite/ld-i386/tlsdesc-nacl.rd,
* testsuite/ld-i386/tlsdesc.rd,
* testsuite/ld-i386/tlsgdesc-nacl.rd,
* testsuite/ld-i386/tlsgdesc.rd,
* testsuite/ld-i386/tlsnopic-nacl.rd,
* testsuite/ld-i386/tlsnopic.dd,
* testsuite/ld-i386/tlsnopic.rd,
* testsuite/ld-i386/tlsnopic.sd,
* testsuite/ld-i386/tlspic-nacl.rd,
* testsuite/ld-i386/tlspic.rd,
* testsuite/ld-i386/tlspic2-nacl.rd,
* testsuite/ld-i386/tlspic2.rd,
* testsuite/ld-ia64/merge1.d,
* testsuite/ld-ia64/merge2.d,
* testsuite/ld-ia64/merge3.d,
* testsuite/ld-ia64/merge4.d,
* testsuite/ld-ia64/merge5.d,
* testsuite/ld-ia64/tlsbin.rd,
* testsuite/ld-ia64/tlspic.rd,
* testsuite/ld-ifunc/ifunc-2-i386-now.d,
* testsuite/ld-ifunc/ifunc-2-local-i386-now.d,
* testsuite/ld-ifunc/ifunc-2-local-x86-64-now.d,
* testsuite/ld-ifunc/ifunc-2-local-x86-64.d,
* testsuite/ld-ifunc/ifunc-2-x86-64-now.d,
* testsuite/ld-ifunc/ifunc-2-x86-64.d,
* testsuite/ld-ifunc/pr17154-i386-now.d,
* testsuite/ld-ifunc/pr17154-i386.d,
* testsuite/ld-ifunc/pr17154-x86-64-now.d,
* testsuite/ld-ifunc/pr17154-x86-64.d,
* testsuite/ld-m68k/tls-def-1.d,
* testsuite/ld-m68k/tls-gd-1.d2,
* testsuite/ld-metag/shared.d,
* testsuite/ld-metag/stub_pic_app.d,
* testsuite/ld-mips-elf/rel32-n32.d,
* testsuite/ld-mips-elf/rel32-o32.d,
* testsuite/ld-mips-elf/rel64.d,
* testsuite/ld-powerpc/ambiguousv1.d,
* testsuite/ld-powerpc/ambiguousv1b.d,
* testsuite/ld-powerpc/ambiguousv2.d,
* testsuite/ld-powerpc/ambiguousv2b.d,
* testsuite/ld-powerpc/tlsexe.d,
* testsuite/ld-powerpc/tlsexe.r,
* testsuite/ld-powerpc/tlsexe32.d,
* testsuite/ld-powerpc/tlsexe32.g,
* testsuite/ld-powerpc/tlsexe32.r,
* testsuite/ld-powerpc/tlsexetoc.d,
* testsuite/ld-powerpc/tlsexetoc.r,
* testsuite/ld-powerpc/tlsso.d,
* testsuite/ld-powerpc/tlsso.r,
* testsuite/ld-powerpc/tlsso32.g,
* testsuite/ld-powerpc/tlsso32.r,
* testsuite/ld-powerpc/tlstocso.d,
* testsuite/ld-powerpc/tlstocso.g,
* testsuite/ld-powerpc/tlstocso.r,
* testsuite/ld-s390/gotreloc_31-1.dd,
* testsuite/ld-s390/tlsbin.dd,
* testsuite/ld-s390/tlsbin.rd,
* testsuite/ld-s390/tlsbin_64.dd,
* testsuite/ld-s390/tlsbin_64.rd,
* testsuite/ld-s390/tlspic.rd,
* testsuite/ld-s390/tlspic_64.rd,
* testsuite/ld-sh/tlsbin-2.d,
* testsuite/ld-sh/tlspic-2.d,
* testsuite/ld-sparc/gotop32.rd,
* testsuite/ld-sparc/gotop64.rd,
* testsuite/ld-sparc/tlssunbin32.rd,
* testsuite/ld-sparc/tlssunbin64.rd,
* testsuite/ld-sparc/tlssunnopic32.rd,
* testsuite/ld-sparc/tlssunnopic64.rd,
* testsuite/ld-sparc/tlssunpic32.rd,
* testsuite/ld-sparc/tlssunpic64.rd,
* testsuite/ld-x86-64/bnd-branch-1-now.d,
* testsuite/ld-x86-64/bnd-ifunc-1-now.d,
* testsuite/ld-x86-64/bnd-ifunc-2-now.d,
* testsuite/ld-x86-64/bnd-ifunc-2.d,
* testsuite/ld-x86-64/bnd-plt-1-now.d,
* testsuite/ld-x86-64/bnd-plt-1.d,
* testsuite/ld-x86-64/ibt-plt-1-x32.d,
* testsuite/ld-x86-64/ibt-plt-1.d,
* testsuite/ld-x86-64/ibt-plt-2a-x32.d,
* testsuite/ld-x86-64/ibt-plt-2a.d,
* testsuite/ld-x86-64/ibt-plt-2b-x32.d,
* testsuite/ld-x86-64/ibt-plt-2b.d,
* testsuite/ld-x86-64/ibt-plt-2c-x32.d,
* testsuite/ld-x86-64/ibt-plt-2c.d,
* testsuite/ld-x86-64/ibt-plt-2d-x32.d,
* testsuite/ld-x86-64/ibt-plt-2d.d,
* testsuite/ld-x86-64/ibt-plt-3a-x32.d,
* testsuite/ld-x86-64/ibt-plt-3a.d,
* testsuite/ld-x86-64/ibt-plt-3b-x32.d,
* testsuite/ld-x86-64/ibt-plt-3b.d,
* testsuite/ld-x86-64/ibt-plt-3c-x32.d,
* testsuite/ld-x86-64/ibt-plt-3c.d,
* testsuite/ld-x86-64/ibt-plt-3d-x32.d,
* testsuite/ld-x86-64/ibt-plt-3d.d,
* testsuite/ld-x86-64/ilp32-4-nacl.d,
* testsuite/ld-x86-64/ilp32-4.d,
* testsuite/ld-x86-64/load1c-nacl.d,
* testsuite/ld-x86-64/load1c.d,
* testsuite/ld-x86-64/load1d-nacl.d,
* testsuite/ld-x86-64/load1d.d,
* testsuite/ld-x86-64/mpx3n.dd,
* testsuite/ld-x86-64/mpx4.dd,
* testsuite/ld-x86-64/mpx4n.dd,
* testsuite/ld-x86-64/plt2.dd,
* testsuite/ld-x86-64/pr14207.d,
* testsuite/ld-x86-64/pr19162.d,
* testsuite/ld-x86-64/pr20253-1f.d,
* testsuite/ld-x86-64/pr20253-1l.d,
* testsuite/ld-x86-64/pr20830a-now.d,
* testsuite/ld-x86-64/pr20830a.d,
* testsuite/ld-x86-64/pr20830b-now.d,
* testsuite/ld-x86-64/pr20830b.d,
* testsuite/ld-x86-64/pr21038a-now.d,
* testsuite/ld-x86-64/pr21038a.d,
* testsuite/ld-x86-64/pr21038b-now.d,
* testsuite/ld-x86-64/pr21038b.d,
* testsuite/ld-x86-64/pr21038c-now.d,
* testsuite/ld-x86-64/pr21038c.d,
* testsuite/ld-x86-64/tlsbin-nacl.rd,
* testsuite/ld-x86-64/tlsbin.rd,
* testsuite/ld-x86-64/tlsbin2-nacl.rd,
* testsuite/ld-x86-64/tlsbin2.rd,
* testsuite/ld-x86-64/tlsbindesc-nacl.rd,
* testsuite/ld-x86-64/tlsbindesc.rd,
* testsuite/ld-x86-64/tlsdesc-nacl.rd,
* testsuite/ld-x86-64/tlsdesc.rd,
* testsuite/ld-x86-64/tlsgdesc-nacl.rd,
* testsuite/ld-x86-64/tlsgdesc.rd,
* testsuite/ld-x86-64/tlspic-nacl.rd,
* testsuite/ld-x86-64/tlspic.rd,
* testsuite/ld-x86-64/tlspic2-nacl.rd,
* testsuite/ld-x86-64/tlspic2.rd: Update.
2018-06-08 18:47:34 +08:00
|
|
|
.* (00 00 00 00|b8 02 01 00) .*
|
|
|
|
.* (00 01 02 b8|00 00 00 00) .*
|
2009-10-02 23:00:30 +08:00
|
|
|
.* <__glink_PLTresolve>:
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (7d 88 02 a6|a6 02 88 7d) mflr r12
|
2012-11-23 11:28:13 +08:00
|
|
|
.* (42 9f 00 05|05 00 9f 42) bcl 20,4\*cr7\+so,.*
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (7d 68 02 a6|a6 02 68 7d) mflr r11
|
|
|
|
.* (e8 4b ff f0|f0 ff 4b e8) ld r2,-16\(r11\)
|
|
|
|
.* (7d 88 03 a6|a6 03 88 7d) mtlr r12
|
2013-10-29 10:09:30 +08:00
|
|
|
.* (7d 62 5a 14|14 5a 62 7d) add r11,r2,r11
|
|
|
|
.* (e9 8b 00 00|00 00 8b e9) ld r12,0\(r11\)
|
|
|
|
.* (e8 4b 00 08|08 00 4b e8) ld r2,8\(r11\)
|
|
|
|
.* (7d 89 03 a6|a6 03 89 7d) mtctr r12
|
|
|
|
.* (e9 6b 00 10|10 00 6b e9) ld r11,16\(r11\)
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (4e 80 04 20|20 04 80 4e) bctr
|
2013-10-29 10:09:30 +08:00
|
|
|
.* <__tls_get_addr@plt>:
|
2012-10-29 17:25:53 +08:00
|
|
|
.* (38 00 00 00|00 00 00 38) li r0,0
|
PowerPC PLT stub tidy
This is in preparation for the next patch adding Spectre variant 2
mitigation for PowerPC and PowerPC64. Besides tidying code involved
in stub output (to reduce the number of places where bctr is output),
the patch adds some user visible features:
1) PowerPC64 ELFv2 global entry stubs now are aligned under the
control of --plt-align, with a default alignment of 32 bytes.
2) PowerPC64 __glink_PLTresolve is no longer padded out with nops.
3) PowerPC32 PLT stubs are aligned under the control of --plt-align,
with the default alignment being 16 bytes as before.
4) The PowerPC32 branch/nop table emitted before __glink_PLTresolve
is now smaller in many cases. It was sized incorrectly when the
__tls_get_addr_opt stub was used, and unnecessarily included space
for local ifuncs.
bfd/
* elf32-ppc.c (GLINK_ENTRY_SIZE): Add parameters, handle
__tls_get_addr_opt, and alignment sizing.
(TLS_GET_ADDR_GLINK_SIZE): Delete.
(is_nonpic_glink_stub): Don't use GLINK_ENTRY_SIZE.
(ppc_elf_get_synthetic_symtab): Recognize stubs spaced at 4, 6,
or 8 insns.
(ppc_elf_link_hash_table_create): Init new ppc_elf_params field.
(allocate_dynrelocs): Use new GLINK_ENTRY_SIZE.
(ppc_elf_size_dynamic_sections): Likewise. Size branch table
by PLT reloc count.
(write_glink_stub): Handle __tls_get_addr_opt stub.
Pad out to size given by GLINK_ENTRY_SIZE.
(ppc_elf_relocate_section): Adjust write_glink_stub call.
(ppc_elf_finish_dynamic_symbol): Likewise.
(ppc_elf_finish_dynamic_sections): Write PLTresolve without using
insn array since so many need rewriting.
* elf32-ppc.h (struct ppc_elf_params): Add plt_stub_align.
* elf64-ppc.c (GLINK_PLTRESOLVE_SIZE): Rename from
GLINK_CALL_STUB_SIZE. Add htab param and evaluate to size without
nops. Adjust all uses.
(ppc64_elf_get_synthetic_symtab): Don't use GLINK_CALL_STUB_SIZE
in glink_vma calculation.
(struct ppc_link_hash_table): Add global_entry section pointer.
(create_linkage_sections): Create separate section for global
entry stubs.
(PPC_LO, PPC_HI, PPC_HA): Move earlier.
(size_global_entry_stubs): Handle sizing for aligned stubs.
(ppc64_elf_size_dynamic_sections): Handle global_entry alloc,
and don't stash end of glink branch table in rawsize.
(ppc_build_one_stub): Rewrite stub size calculations.
(build_global_entry_stubs): Use new section.
(ppc64_elf_build_stubs): Don't pad __glink_PLTresolve with nops.
Build lazy link stubs out to end of section. Build global entry
stubs in new section.
gold/
* options.h (plt_align): Support for PowerPC32 too.
* powerpc.cc (Stub_table::stub_align): Heed --plt-align for 32-bit.
(Stub_table::plt_call_size, branch_stub_size): Tidy.
(Stub_table::plt_call_align): Implement using stub_align.
(Output_data_glink::global_entry_align): New function.
(Output_data_glink::global_entry_off): New function.
(Output_data_glink::global_entry_address): Use global_entry_off.
(Output_data_glink::pltresolve_size): New function, replacing
pltresolve_size_ constant. Update all uses.
(Output_data_glink::add_global_entry): Align offset.
(Output_data_glink::set_final_data_size): Use global_entry_align.
(Stub_table::do_write): Don't pad __glink_PLTrelsolve with nops.
Tidy stub output. Use global_entry_off.
ld/
* emultempl/ppc32elf.em (params): Init new field.
(enum ppc32_opt): New enum to define OPTION_* values. Add
OPTION_PLT_ALIGN and OPTION_NO_PLT_ALIGN.
(PARSE_AND_LIST_LONGOPTS): Handle new options.
(PARSE_AND_LIST_ARGS_CASES): Likewise.
(PARSE_AND_LIST_OPTIONS): Likewise. Break up help output.
* emultempl/ppc64elf.em (ppc_add_stub_section): Init alignment
correctly for negative --plt-stub-align.
* testsuite/ld-powerpc/elfv2exe.d,
* testsuite/ld-powerpc/elfv2so.d,
* testsuite/ld-powerpc/relbrlt.d,
* testsuite/ld-powerpc/relbrlt.s,
* testsuite/ld-powerpc/tlsexe.d,
* testsuite/ld-powerpc/tlsexe.r,
* testsuite/ld-powerpc/tlsexe32.d,
* testsuite/ld-powerpc/tlsexe32.g,
* testsuite/ld-powerpc/tlsexe32.r,
* testsuite/ld-powerpc/tlsexetoc.d,
* testsuite/ld-powerpc/tlsexetoc.r,
* testsuite/ld-powerpc/tlsopt5_32.d,
* testsuite/ld-powerpc/tlsso.d,
* testsuite/ld-powerpc/tlstocso.d: Update for changed stub order.
2018-01-13 16:23:41 +08:00
|
|
|
.* (4b ff ff d0|d0 ff ff 4b) b .*
|