From f88af2f152042ac1f2a687bbf49a0b0b140c5b7a Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Wed, 13 Jan 2010 11:35:19 +0000 Subject: [PATCH] 2010-01-13 Tristan Gingold * reloc.c: Add MACH_O_X86_64 relocations. * bfd-in2.h: Regenerate. * libbfd.h: Regenerate. --- bfd/ChangeLog | 6 ++++++ bfd/bfd-in2.h | 29 ++++++++++++++++++++++++++++- bfd/libbfd.h | 9 +++++++++ bfd/reloc.c | 47 ++++++++++++++++++++++++++++++++++++++++++----- 4 files changed, 85 insertions(+), 6 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 8c397c3ee88..b70e9347358 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2010-01-13 Tristan Gingold + + * reloc.c: Add MACH_O_X86_64 relocations. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + 2010-01-13 Tristan Gingold * archive.c (normalize): Use lbasename. diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 447f7879832..b17f2e196dc 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -4563,9 +4563,36 @@ BFD_RELOC_XTENSA_ASM_EXPAND. */ BFD_RELOC_MACH_O_PAIR. */ BFD_RELOC_MACH_O_SECTDIFF, -/* Mach-O generic relocations. */ +/* Pair of relocation. Contains the first symbol. */ BFD_RELOC_MACH_O_PAIR, +/* PCREL relocations. They are marked as branch to create PLT entry if +required. */ + BFD_RELOC_MACH_O_X86_64_BRANCH32, + BFD_RELOC_MACH_O_X86_64_BRANCH8, + +/* Used when referencing a GOT entry. */ + BFD_RELOC_MACH_O_X86_64_GOT, + +/* Used when loading a GOT entry with movq. It is specially marked so that +the linker could optimize the movq to a leaq if possible. */ + BFD_RELOC_MACH_O_X86_64_GOT_LOAD, + +/* Symbol will be substracted. Must be followed by a BFD_RELOC_64. */ + BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32, + +/* Symbol will be substracted. Must be followed by a BFD_RELOC_64. */ + BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64, + +/* Same as BFD_RELOC_32_PCREL but with an implicit -1 addend. */ + BFD_RELOC_MACH_O_X86_64_PCREL32_1, + +/* Same as BFD_RELOC_32_PCREL but with an implicit -2 addend. */ + BFD_RELOC_MACH_O_X86_64_PCREL32_2, + +/* Same as BFD_RELOC_32_PCREL but with an implicit -4 addend. */ + BFD_RELOC_MACH_O_X86_64_PCREL32_4, + /* This is a 32 bit reloc for the microblaze that stores the low 16 bits of a value */ BFD_RELOC_MICROBLAZE_32_LO, diff --git a/bfd/libbfd.h b/bfd/libbfd.h index 8146ef90116..073086ca8f8 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -2103,6 +2103,15 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_LM32_RELATIVE", "BFD_RELOC_MACH_O_SECTDIFF", "BFD_RELOC_MACH_O_PAIR", + "BFD_RELOC_MACH_O_X86_64_BRANCH32", + "BFD_RELOC_MACH_O_X86_64_BRANCH8", + "BFD_RELOC_MACH_O_X86_64_GOT", + "BFD_RELOC_MACH_O_X86_64_GOT_LOAD", + "BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32", + "BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64", + "BFD_RELOC_MACH_O_X86_64_PCREL32_1", + "BFD_RELOC_MACH_O_X86_64_PCREL32_2", + "BFD_RELOC_MACH_O_X86_64_PCREL32_4", "BFD_RELOC_MICROBLAZE_32_LO", "BFD_RELOC_MICROBLAZE_32_LO_PCREL", "BFD_RELOC_MICROBLAZE_32_ROSDA", diff --git a/bfd/reloc.c b/bfd/reloc.c index 0ea7a85c192..9451740b98b 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -5235,14 +5235,51 @@ ENUMDOC Lattice Mico32 relocations. ENUM - BFD_RELOC_MACH_O_SECTDIFF + BFD_RELOC_MACH_O_SECTDIFF ENUMDOC - Difference between two section addreses. Must be followed by a - BFD_RELOC_MACH_O_PAIR. + Difference between two section addreses. Must be followed by a + BFD_RELOC_MACH_O_PAIR. ENUM - BFD_RELOC_MACH_O_PAIR + BFD_RELOC_MACH_O_PAIR ENUMDOC - Mach-O generic relocations. + Pair of relocation. Contains the first symbol. + +ENUM + BFD_RELOC_MACH_O_X86_64_BRANCH32 +ENUMX + BFD_RELOC_MACH_O_X86_64_BRANCH8 +ENUMDOC + PCREL relocations. They are marked as branch to create PLT entry if + required. +ENUM + BFD_RELOC_MACH_O_X86_64_GOT +ENUMDOC + Used when referencing a GOT entry. +ENUM + BFD_RELOC_MACH_O_X86_64_GOT_LOAD +ENUMDOC + Used when loading a GOT entry with movq. It is specially marked so that + the linker could optimize the movq to a leaq if possible. +ENUM + BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32 +ENUMDOC + Symbol will be substracted. Must be followed by a BFD_RELOC_64. +ENUM + BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64 +ENUMDOC + Symbol will be substracted. Must be followed by a BFD_RELOC_64. +ENUM + BFD_RELOC_MACH_O_X86_64_PCREL32_1 +ENUMDOC + Same as BFD_RELOC_32_PCREL but with an implicit -1 addend. +ENUM + BFD_RELOC_MACH_O_X86_64_PCREL32_2 +ENUMDOC + Same as BFD_RELOC_32_PCREL but with an implicit -2 addend. +ENUM + BFD_RELOC_MACH_O_X86_64_PCREL32_4 +ENUMDOC + Same as BFD_RELOC_32_PCREL but with an implicit -4 addend. ENUM BFD_RELOC_MICROBLAZE_32_LO -- 2.30.2