diff options
author | Mephi <mephi42@gmail.com> | 2018-06-18 12:56:44 +0100 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2018-06-18 12:56:44 +0100 |
commit | ed1299fe460812ad4bbdc2192d0c0cbeba3d6b66 (patch) | |
tree | 17c4f6b7e37957989ec1caf0b230c4a44d8a0e42 /bfd/mach-o-x86-64.c | |
parent | 02895270ec7243f46ea3e84dc385515533dc0139 (diff) | |
download | gdb-ed1299fe460812ad4bbdc2192d0c0cbeba3d6b66.zip gdb-ed1299fe460812ad4bbdc2192d0c0cbeba3d6b66.tar.gz gdb-ed1299fe460812ad4bbdc2192d0c0cbeba3d6b66.tar.bz2 |
Add support for the TLV relocation generated by LLVM for x86_64 MACH-O targets.
PR 23297
* mach-o-x86-64.c (x86_64_howto_table): Add entry for
BFD_RELOC_MACH_O_X86_64_RELOC_TLV.
(bfd_mach_o_x86_64_canonicalize_one_reloc): Handle the new reloc.
(bfd_mach_o_x86_64_swap_reloc_out): Likewise.
* reloc.c (BFD_RELOC_MACH_O_X86_64_TV): New entry.
* bfd-in2.h: Regenerate.
* libbfd.h: Regenerate.
Diffstat (limited to 'bfd/mach-o-x86-64.c')
-rw-r--r-- | bfd/mach-o-x86-64.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/bfd/mach-o-x86-64.c b/bfd/mach-o-x86-64.c index 667c1d0..9ee93a4 100644 --- a/bfd/mach-o-x86-64.c +++ b/bfd/mach-o-x86-64.c @@ -117,6 +117,11 @@ static reloc_howto_type x86_64_howto_table[]= complain_overflow_bitfield, NULL, "BRANCH8", FALSE, 0xff, 0xff, TRUE), + /* 12 */ + HOWTO(BFD_RELOC_MACH_O_X86_64_TLV, 0, 2, 32, TRUE, 0, + complain_overflow_bitfield, + NULL, "TLV", + FALSE, 0xffffffff, 0xffffffff, TRUE), }; static bfd_boolean @@ -220,6 +225,13 @@ bfd_mach_o_x86_64_canonicalize_one_reloc (bfd * abfd, return TRUE; } break; + case BFD_MACH_O_X86_64_RELOC_TLV: + if (reloc.r_length == 2 && reloc.r_pcrel && reloc.r_extern) + { + res->howto = &x86_64_howto_table[12]; + return TRUE; + } + break; default: return FALSE; } @@ -288,6 +300,11 @@ bfd_mach_o_x86_64_swap_reloc_out (arelent *rel, bfd_mach_o_reloc_info *rinfo) rinfo->r_pcrel = 1; rinfo->r_length = 2; break; + case BFD_RELOC_MACH_O_X86_64_TLV: + rinfo->r_type = BFD_MACH_O_X86_64_RELOC_TLV; + rinfo->r_pcrel = 1; + rinfo->r_length = 2; + break; default: return FALSE; } |