mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-12-16 16:47:52 +00:00
add LOCAL SECDIFF relocation for m32 mach-o
bfd: * reloc.c (BFD_RELOC_MACH_O_LOCAL_SECTDIFF): * libbfd.h: Regenerated. * bfd-in2.h: Likewise. * mach-o-i386.c (i386_howto_table): Include local sectdiff. (bfd_mach_o_i386_swap_reloc_in): Update for local sectdiff. (bfd_mach_o_i386_swap_reloc_out): Likewise.
This commit is contained in:
parent
ca193e2779
commit
e1e81ed3c3
@ -1,3 +1,12 @@
|
||||
2012-02-17 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* reloc.c (BFD_RELOC_MACH_O_LOCAL_SECTDIFF):
|
||||
* libbfd.h: Regenerated.
|
||||
* bfd-in2.h: Likewise.
|
||||
* mach-o-i386.c (i386_howto_table): Include local sectdiff.
|
||||
(bfd_mach_o_i386_swap_reloc_in): Update for local sectdiff.
|
||||
(bfd_mach_o_i386_swap_reloc_out): Likewise.
|
||||
|
||||
2012-02-17 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
|
||||
|
||||
* elf32-s390.c (elf_s390_relocate_section): Support basr in the
|
||||
|
@ -2161,6 +2161,7 @@ enum bfd_architecture
|
||||
#define bfd_mach_tilegx 1
|
||||
bfd_arch_last
|
||||
};
|
||||
|
||||
typedef struct bfd_arch_info
|
||||
{
|
||||
int bits_per_word;
|
||||
@ -4824,6 +4825,9 @@ BFD_RELOC_XTENSA_ASM_EXPAND. */
|
||||
BFD_RELOC_MACH_O_PAIR. */
|
||||
BFD_RELOC_MACH_O_SECTDIFF,
|
||||
|
||||
/* Like BFD_RELOC_MACH_O_SECTDIFF but with a local symbol. */
|
||||
BFD_RELOC_MACH_O_LOCAL_SECTDIFF,
|
||||
|
||||
/* Pair of relocation. Contains the first symbol. */
|
||||
BFD_RELOC_MACH_O_PAIR,
|
||||
|
||||
|
@ -2337,6 +2337,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@",
|
||||
"BFD_RELOC_LM32_JMP_SLOT",
|
||||
"BFD_RELOC_LM32_RELATIVE",
|
||||
"BFD_RELOC_MACH_O_SECTDIFF",
|
||||
"BFD_RELOC_MACH_O_LOCAL_SECTDIFF",
|
||||
"BFD_RELOC_MACH_O_PAIR",
|
||||
"BFD_RELOC_MACH_O_X86_64_BRANCH32",
|
||||
"BFD_RELOC_MACH_O_X86_64_BRANCH8",
|
||||
|
@ -63,6 +63,7 @@ bfd_mach_o_i386_mkobject (bfd *abfd)
|
||||
|
||||
static reloc_howto_type i386_howto_table[]=
|
||||
{
|
||||
/* 0 */
|
||||
HOWTO(BFD_RELOC_32, 0, 2, 32, FALSE, 0,
|
||||
complain_overflow_bitfield,
|
||||
NULL, "32",
|
||||
@ -79,6 +80,7 @@ static reloc_howto_type i386_howto_table[]=
|
||||
complain_overflow_bitfield,
|
||||
NULL, "DISP32",
|
||||
FALSE, 0xffffffff, 0xffffffff, TRUE),
|
||||
/* 4 */
|
||||
HOWTO(BFD_RELOC_16_PCREL, 0, 1, 16, TRUE, 0,
|
||||
complain_overflow_bitfield,
|
||||
NULL, "DISP16",
|
||||
@ -87,6 +89,10 @@ static reloc_howto_type i386_howto_table[]=
|
||||
complain_overflow_bitfield,
|
||||
NULL, "SECTDIFF_32",
|
||||
FALSE, 0xffffffff, 0xffffffff, FALSE),
|
||||
HOWTO(BFD_RELOC_MACH_O_LOCAL_SECTDIFF, 0, 2, 32, FALSE, 0,
|
||||
complain_overflow_bitfield,
|
||||
NULL, "LSECTDIFF_32",
|
||||
FALSE, 0xffffffff, 0xffffffff, FALSE),
|
||||
HOWTO(BFD_RELOC_MACH_O_PAIR, 0, 2, 32, FALSE, 0,
|
||||
complain_overflow_bitfield,
|
||||
NULL, "PAIR_32",
|
||||
@ -103,15 +109,19 @@ bfd_mach_o_i386_swap_reloc_in (arelent *res, bfd_mach_o_reloc_info *reloc)
|
||||
case BFD_MACH_O_GENERIC_RELOC_PAIR:
|
||||
if (reloc->r_length != 2)
|
||||
return FALSE;
|
||||
res->howto = &i386_howto_table[6];
|
||||
res->howto = &i386_howto_table[7];
|
||||
res->address = res[-1].address;
|
||||
return TRUE;
|
||||
case BFD_MACH_O_GENERIC_RELOC_SECTDIFF:
|
||||
case BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF:
|
||||
if (reloc->r_length != 2)
|
||||
return FALSE;
|
||||
res->howto = &i386_howto_table[5];
|
||||
return TRUE;
|
||||
case BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF:
|
||||
if (reloc->r_length != 2)
|
||||
return FALSE;
|
||||
res->howto = &i386_howto_table[6];
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
@ -183,6 +193,15 @@ bfd_mach_o_i386_swap_reloc_out (arelent *rel, bfd_mach_o_reloc_info *rinfo)
|
||||
rinfo->r_value = (*rel->sym_ptr_ptr)->value
|
||||
+ (*rel->sym_ptr_ptr)->section->vma;
|
||||
break;
|
||||
case BFD_RELOC_MACH_O_LOCAL_SECTDIFF:
|
||||
rinfo->r_scattered = 1;
|
||||
rinfo->r_type = BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF;
|
||||
rinfo->r_pcrel = 0;
|
||||
rinfo->r_length = 2;
|
||||
rinfo->r_extern = 0;
|
||||
rinfo->r_value = (*rel->sym_ptr_ptr)->value
|
||||
+ (*rel->sym_ptr_ptr)->section->vma;
|
||||
break;
|
||||
case BFD_RELOC_MACH_O_PAIR:
|
||||
rinfo->r_address = 0;
|
||||
rinfo->r_scattered = 1;
|
||||
|
@ -5593,6 +5593,10 @@ ENUM
|
||||
ENUMDOC
|
||||
Difference between two section addreses. Must be followed by a
|
||||
BFD_RELOC_MACH_O_PAIR.
|
||||
ENUM
|
||||
BFD_RELOC_MACH_O_LOCAL_SECTDIFF
|
||||
ENUMDOC
|
||||
Like BFD_RELOC_MACH_O_SECTDIFF but with a local symbol.
|
||||
ENUM
|
||||
BFD_RELOC_MACH_O_PAIR
|
||||
ENUMDOC
|
||||
|
Loading…
Reference in New Issue
Block a user