binutils-gdb/include
Alan Modra c213164ad2 [PowerPC64] pc-relative TLS relocations
This patch supports using pcrel instructions in TLS code sequences.  A
number of new relocations are needed, gas operand modifiers to
generate those relocations, and new TLS optimisation.  For
optimisation it turns out that the new pcrel GD and LD sequences can
be distinguished from the non-pcrel GD and LD sequences by there being
different relocations on the new sequence.  The final "add ra,rb,13"
on IE sequences similarly needs a new relocation, or as I chose, a
modification of R_PPC64_TLS.  On pcrel IE code, the R_PPC64_TLS points
one byte into the "add" instruction rather than being on the
instruction boundary.

GD:
 pla 3,z@got@tlsgd@pcrel	  # R_PPC64_GOT_TLSGD34
 bl __tls_get_addr@notoc(z@tlsgd) # R_PPC64_TLSGD and R_PPC64_REL24_NOTOC
  edited to IE
   pld 3,z@got@tprel@pcrel
   add 3,3,13
  edited to LE
   paddi 3,13,z@tprel
   nop

LD:
 pla 3,z@got@tlsld@pcrel	  # R_PPC64_GOT_TLSLD34
 bl __tls_get_addr@notoc(z@tlsld) # R_PPC64_TLSLD and R_PPC64_REL24_NOTOC
 ..
 paddi 9,3,z2@dtprel
 pld 10,z3@got@dtprel@pcrel
 add 10,10,3
  edited to LE
   paddi 3,13,0x1000
   nop

IE:
 pld 9,z@got@tprel@pcrel	  # R_PPC64_GOT_TPREL34
 add 3,9,z@tls@pcrel		  # R_PPC64_TLS at insn+1
 ldx 4,9,z@tls@pcrel
 lwax 5,9,z@tls@pcrel
 stdx 5,9,z@tls@pcrel
  edited to LE
  paddi 9,13,z@tprel
  nop
  ld 4,0(9)
  lwa 5,0(9)
  std 5,0(9)

LE:
 paddi 10,13,z@tprel

include/
	* elf/ppc64.h (R_PPC64_TPREL34, R_PPC64_DTPREL34),
	(R_PPC64_GOT_TLSGD34, R_PPC64_GOT_TLSLD34),
	(R_PPC64_GOT_TPREL34, R_PPC64_GOT_DTPREL34): Define.
	(IS_PPC64_TLS_RELOC): Include new tls relocs.
bfd/
	* reloc.c (BFD_RELOC_PPC64_TPREL34, BFD_RELOC_PPC64_DTPREL34),
	(BFD_RELOC_PPC64_GOT_TLSGD34, BFD_RELOC_PPC64_GOT_TLSLD34),
	(BFD_RELOC_PPC64_GOT_TPREL34, BFD_RELOC_PPC64_GOT_DTPREL34),
	(BFD_RELOC_PPC64_TLS_PCREL): New pcrel tls relocs.
	* elf64-ppc.c (ppc64_elf_howto_raw): Add howtos for pcrel tls relocs.
	(ppc64_elf_reloc_type_lookup): Translate pcrel tls relocs.
	(must_be_dyn_reloc, dec_dynrel_count): Add R_PPC64_TPREL64.
	(ppc64_elf_check_relocs): Support pcrel tls relocs.
	(ppc64_elf_tls_optimize, ppc64_elf_relocate_section): Likewise.
	* bfd-in2.h: Regenerate.
	* libbfd.h: Regenerate.
gas/
	* config/tc-ppc.c (ppc_elf_suffix): Map "tls@pcrel", "got@tlsgd@pcrel",
	"got@tlsld@pcrel", "got@tprel@pcrel", and "got@dtprel@pcrel".
	(fixup_size, md_assemble): Handle pcrel tls relocs.
	(ppc_force_relocation, ppc_fix_adjustable): Likewise.
	(md_apply_fix, tc_gen_reloc): Likewise.
ld/
	* testsuite/ld-powerpc/tlsgd.d,
	* testsuite/ld-powerpc/tlsgd.s,
	* testsuite/ld-powerpc/tlsie.d,
	* testsuite/ld-powerpc/tlsie.s,
	* testsuite/ld-powerpc/tlsld.d,
	* testsuite/ld-powerpc/tlsld.s: New tests.
	* testsuite/ld-powerpc/powerpc.exp: Run them.
2019-07-19 18:01:25 +09:30
..
aout Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
cgen Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
coff PR24272, out-of-bounds read in pex64_xdata_print_uwd_codes 2019-03-01 13:30:38 +10:30
elf [PowerPC64] pc-relative TLS relocations 2019-07-19 18:01:25 +09:30
gdb Update copyright year range in all GDB files. 2019-01-01 10:01:51 +04:00
mach-o Use the correct name for various MACH-O based operating systems in comments. 2019-02-15 12:50:52 +00:00
opcode x86: fold SReg{2,3} 2019-07-16 09:30:29 +02:00
som Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
vms Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
alloca-conf.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
ansidecl.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
bfdlink.h x86: Move x86-specific linker options to elf_linker_x86_params 2019-04-06 07:25:31 -07:00
binary-io.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
bout.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
ChangeLog [PowerPC64] pc-relative TLS relocations 2019-07-19 18:01:25 +09:30
ChangeLog-0415 binutils ChangeLog rotation 2016-01-01 22:59:17 +10:30
ChangeLog-2016 ChangeLog rotation 2017-01-02 13:55:05 +10:30
ChangeLog-2017 ChangeLog rotation 2018-01-03 17:49:42 +10:30
ChangeLog-2018 ChangeLog rotation 2019-01-01 21:25:40 +10:30
ChangeLog-9103 Add copyright notices 2012-12-10 12:48:03 +00:00
COPYING
COPYING3 * COPYING3: New file. Contains version 3 of the GNU General Public License. 2007-07-17 13:50:23 +00:00
ctf-api.h libctf: introduce ctf_func_type_{info,args}, ctf_type_aname_raw 2019-07-18 20:53:57 +01:00
ctf.h libctf: endianness fixes 2019-06-21 13:04:02 +01:00
demangle.h Sync libiberty sources with gcc master versions. 2019-01-10 09:44:13 +00:00
diagnostics.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
dis-asm.h PowerPC add initial -mfuture instruction support 2019-05-24 10:24:45 +09:30
dwarf2.def Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
dwarf2.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
dyn-string.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
environ.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
fibheap.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
filenames.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
floatformat.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
fnmatch.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
fopen-bin.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
fopen-same.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
fopen-vms.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
gcc-c-fe.def Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
gcc-c-interface.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
gcc-cp-fe.def Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
gcc-cp-interface.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
gcc-interface.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
getopt.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
hashtab.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
hp-symtab.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
leb128.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
libiberty.h Merge from gcc: use "cannot" instead of "can not" in libiberty and include. 2019-01-09 13:59:16 -08:00
longlong.h Merge libiberty from gcc 2019-04-07 20:49:49 +09:30
lto-symtab.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
MAINTAINERS Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
md5.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
oasys.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
objalloc.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
obstack.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
os9k.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
partition.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
plugin-api.h Merge from gcc: use "cannot" instead of "can not" in libiberty and include. 2019-01-09 13:59:16 -08:00
progress.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
safe-ctype.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
sha1.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
simple-object.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
sort.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
splay-tree.h Fix splay tree KEY leak detected in GDB test gdb.base/macscp.exp 2019-02-12 06:06:19 -07:00
symcat.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
timeval-utils.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
vtv-change-permission.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
xregex2.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
xregex.h merge from gcc 2011-07-25 17:11:48 +00:00
xtensa-config.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
xtensa-isa-internal.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30
xtensa-isa.h Update year range in copyright notice of binutils files 2019-01-01 22:06:53 +10:30