mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-25 05:00:01 +00:00
2004-10-27 Richard Earnshaw <rearnsha@arm.com>
bfd/ * elf32-arm.h (bfd_elf32_arm_process_before_allocation): Handle R_ARM_CALL and R_ARM_JUMP24 as aliases of R_ARM_PC24. (elf32_arm_final_link_relocate): Ditto. (arm_add_to_rel, elf32_arm_relocate_section): Ditto. (elf32_arm_gc_sweep_hook, elf32_arm_check_relocs): Ditto (elf32_arm_adjust_dynamic_symbol): Ditto. * elfarm-nabi.c (elf32_arm_howto_table): Add R_ARM_CALL and R_ARM_JUMP32. Move R_ARM_R{REL32,ABS32,PC24,BASE}... (elf32_arm_r_howto): ... To here. (elf32_arm_howto_from_type): Use elf32_arm_r_howto. include/ * elf/arm.h: Add R_ARM_CALL and R_ARM_JUMP32.
This commit is contained in:
parent
fcad0fa40f
commit
5b5bb74101
@ -1,3 +1,16 @@
|
||||
2004-10-27 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
* elf32-arm.h (bfd_elf32_arm_process_before_allocation): Handle
|
||||
R_ARM_CALL and R_ARM_JUMP24 as aliases of R_ARM_PC24.
|
||||
(elf32_arm_final_link_relocate): Ditto.
|
||||
(arm_add_to_rel, elf32_arm_relocate_section): Ditto.
|
||||
(elf32_arm_gc_sweep_hook, elf32_arm_check_relocs): Ditto
|
||||
(elf32_arm_adjust_dynamic_symbol): Ditto.
|
||||
* elfarm-nabi.c (elf32_arm_howto_table): Add R_ARM_CALL and
|
||||
R_ARM_JUMP32. Move R_ARM_R{REL32,ABS32,PC24,BASE}...
|
||||
(elf32_arm_r_howto): ... To here.
|
||||
(elf32_arm_howto_from_type): Use elf32_arm_r_howto.
|
||||
|
||||
2004-10-26 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR 475
|
||||
|
@ -827,6 +827,10 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd,
|
||||
|
||||
/* These are the only relocation types we care about. */
|
||||
if ( r_type != R_ARM_PC24
|
||||
#ifndef OLD_ARM_ABI
|
||||
&& r_type != R_ARM_CALL
|
||||
&& r_type != R_ARM_JUMP24
|
||||
#endif
|
||||
&& r_type != R_ARM_THM_PC22)
|
||||
continue;
|
||||
|
||||
@ -864,6 +868,10 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd,
|
||||
switch (r_type)
|
||||
{
|
||||
case R_ARM_PC24:
|
||||
#ifndef OLD_ARM_ABI
|
||||
case R_ARM_CALL:
|
||||
case R_ARM_JUMP24:
|
||||
#endif
|
||||
/* This one is a call from arm code. We need to look up
|
||||
the target of the call. If it is a thumb target, we
|
||||
insert glue. */
|
||||
@ -1295,6 +1303,8 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
|
||||
case R_ARM_ABS32:
|
||||
case R_ARM_REL32:
|
||||
#ifndef OLD_ARM_ABI
|
||||
case R_ARM_CALL:
|
||||
case R_ARM_JUMP24:
|
||||
case R_ARM_XPC25:
|
||||
case R_ARM_PREL31:
|
||||
#endif
|
||||
@ -1344,6 +1354,10 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
|
||||
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||
|| h->root.type != bfd_link_hash_undefweak)
|
||||
&& r_type != R_ARM_PC24
|
||||
#ifndef OLD_ARM_ABI
|
||||
&& r_type != R_ARM_CALL
|
||||
&& r_type != R_ARM_JUMP24
|
||||
#endif
|
||||
&& r_type != R_ARM_PLT32)
|
||||
{
|
||||
Elf_Internal_Rela outrel;
|
||||
@ -1416,6 +1430,8 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
|
||||
{
|
||||
#ifndef OLD_ARM_ABI
|
||||
case R_ARM_XPC25: /* Arm BLX instruction. */
|
||||
case R_ARM_CALL:
|
||||
case R_ARM_JUMP24:
|
||||
#endif
|
||||
case R_ARM_PC24: /* Arm B/BL instruction */
|
||||
case R_ARM_PLT32:
|
||||
@ -2028,6 +2044,10 @@ arm_add_to_rel (bfd * abfd,
|
||||
break;
|
||||
|
||||
case R_ARM_PC24:
|
||||
#ifndef OLD_ARM_ABI
|
||||
case R_ARM_CALL:
|
||||
case R_ARM_JUMP24:
|
||||
#endif
|
||||
addend <<= howto->size;
|
||||
addend += increment;
|
||||
|
||||
@ -2188,6 +2208,10 @@ elf32_arm_relocate_section (bfd * output_bfd,
|
||||
switch (r_type)
|
||||
{
|
||||
case R_ARM_PC24:
|
||||
#ifndef OLD_ARM_ABI
|
||||
case R_ARM_CALL:
|
||||
case R_ARM_JUMP24:
|
||||
#endif
|
||||
case R_ARM_ABS32:
|
||||
case R_ARM_THM_PC22:
|
||||
case R_ARM_PLT32:
|
||||
@ -2861,6 +2885,8 @@ elf32_arm_gc_sweep_hook (bfd * abfd ATTRIBUTE_UNUSED,
|
||||
case R_ARM_PC24:
|
||||
case R_ARM_PLT32:
|
||||
#ifndef OLD_ARM_ABI
|
||||
case R_ARM_CALL:
|
||||
case R_ARM_JUMP24:
|
||||
case R_ARM_PREL31:
|
||||
#endif
|
||||
r_symndx = ELF32_R_SYM (rel->r_info);
|
||||
@ -3004,6 +3030,8 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
case R_ARM_PC24:
|
||||
case R_ARM_PLT32:
|
||||
#ifndef OLD_ARM_ABI
|
||||
case R_ARM_CALL:
|
||||
case R_ARM_JUMP24:
|
||||
case R_ARM_PREL31:
|
||||
#endif
|
||||
if (h != NULL)
|
||||
@ -3022,6 +3050,10 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
sure yet, because something later might force the
|
||||
symbol local. */
|
||||
if (r_type == R_ARM_PC24
|
||||
#ifndef OLD_ARM_ABI
|
||||
|| r_type == R_ARM_CALL
|
||||
|| r_type == R_ARM_JUMP24
|
||||
#endif
|
||||
|| r_type == R_ARM_PLT32)
|
||||
h->needs_plt = 1;
|
||||
|
||||
@ -3047,6 +3079,8 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||
&& ((r_type != R_ARM_PC24
|
||||
&& r_type != R_ARM_PLT32
|
||||
#ifndef OLD_ARM_ABI
|
||||
&& r_type != R_ARM_CALL
|
||||
&& r_type != R_ARM_JUMP24
|
||||
&& r_type != R_ARM_PREL31
|
||||
#endif
|
||||
&& r_type != R_ARM_REL32)
|
||||
@ -3336,9 +3370,9 @@ elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info,
|
||||
}
|
||||
else
|
||||
/* It's possible that we incorrectly decided a .plt reloc was
|
||||
needed for an R_ARM_PC24 reloc to a non-function sym in
|
||||
check_relocs. We can't decide accurately between function and
|
||||
non-function syms in check-relocs; Objects loaded later in
|
||||
needed for an R_ARM_PC24 or similar reloc to a non-function sym
|
||||
in check_relocs. We can't decide accurately between function
|
||||
and non-function syms in check-relocs; Objects loaded later in
|
||||
the link may change h->type. So fix it now. */
|
||||
h->plt.offset = (bfd_vma) -1;
|
||||
|
||||
|
@ -453,9 +453,35 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
||||
0x00ffffff, /* dst_mask */
|
||||
TRUE), /* pcrel_offset */
|
||||
|
||||
/* End of relocs used in ARM Linux */
|
||||
HOWTO (R_ARM_CALL, /* type */
|
||||
2, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
24, /* bitsize */
|
||||
TRUE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_CALL", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0x00ffffff, /* src_mask */
|
||||
0x00ffffff, /* dst_mask */
|
||||
TRUE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_RREL32, /* type */
|
||||
HOWTO (R_ARM_JUMP24, /* type */
|
||||
2, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
24, /* bitsize */
|
||||
TRUE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_signed,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_JUMP24", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0x00ffffff, /* src_mask */
|
||||
0x00ffffff, /* dst_mask */
|
||||
TRUE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_NONE, /* type */
|
||||
0, /* rightshift */
|
||||
0, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
0, /* bitsize */
|
||||
@ -463,13 +489,13 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_RREL32", /* name */
|
||||
"R_ARM_unknown_30", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0, /* src_mask */
|
||||
0, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_RABS32, /* type */
|
||||
HOWTO (R_ARM_NONE, /* type */
|
||||
0, /* rightshift */
|
||||
0, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
0, /* bitsize */
|
||||
@ -477,35 +503,7 @@ static reloc_howto_type elf32_arm_howto_table[] =
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_RABS32", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0, /* src_mask */
|
||||
0, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_RPC24, /* type */
|
||||
0, /* rightshift */
|
||||
0, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
0, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_RPC24", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0, /* src_mask */
|
||||
0, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_RBASE, /* type */
|
||||
0, /* rightshift */
|
||||
0, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
0, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_RBASE", /* name */
|
||||
"R_ARM_unknown_31", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0, /* src_mask */
|
||||
0, /* dst_mask */
|
||||
@ -746,6 +744,66 @@ static reloc_howto_type elf32_arm_got_prel =
|
||||
0xffffffff, /* dst_mask */
|
||||
TRUE); /* pcrel_offset */
|
||||
|
||||
/* Currently unused relocations. */
|
||||
static reloc_howto_type elf32_arm_r_howto[4] =
|
||||
{
|
||||
HOWTO (R_ARM_RREL32, /* type */
|
||||
0, /* rightshift */
|
||||
0, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
0, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_RREL32", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0, /* src_mask */
|
||||
0, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_RABS32, /* type */
|
||||
0, /* rightshift */
|
||||
0, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
0, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_RABS32", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0, /* src_mask */
|
||||
0, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_RPC24, /* type */
|
||||
0, /* rightshift */
|
||||
0, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
0, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_RPC24", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0, /* src_mask */
|
||||
0, /* dst_mask */
|
||||
FALSE), /* pcrel_offset */
|
||||
|
||||
HOWTO (R_ARM_RBASE, /* type */
|
||||
0, /* rightshift */
|
||||
0, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
0, /* bitsize */
|
||||
FALSE, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_dont,/* complain_on_overflow */
|
||||
bfd_elf_generic_reloc, /* special_function */
|
||||
"R_ARM_RBASE", /* name */
|
||||
FALSE, /* partial_inplace */
|
||||
0, /* src_mask */
|
||||
0, /* dst_mask */
|
||||
FALSE) /* pcrel_offset */
|
||||
};
|
||||
|
||||
static reloc_howto_type *
|
||||
elf32_arm_howto_from_type (unsigned int r_type)
|
||||
{
|
||||
@ -769,6 +827,12 @@ elf32_arm_howto_from_type (unsigned int r_type)
|
||||
case R_ARM_THM_PC9:
|
||||
return &elf32_arm_thm_pc9_howto;
|
||||
|
||||
case R_ARM_RREL32:
|
||||
case R_ARM_RABS32:
|
||||
case R_ARM_RPC24:
|
||||
case R_ARM_RBASE:
|
||||
return &elf32_arm_r_howto[r_type - R_ARM_RREL32];
|
||||
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
|
@ -1,3 +1,7 @@
|
||||
2004-10-27 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
* elf/arm.h: Add R_ARM_CALL and R_ARM_JUMP32.
|
||||
|
||||
2004-10-27 Tomer Levi <Tomer.Levi@nsc.com>
|
||||
|
||||
* opcode/crx.h (enum reg): Rearrange registers, remove 'ccfg' and `'pc'.
|
||||
|
@ -123,7 +123,9 @@ START_RELOC_NUMBERS (elf_arm_reloc_type)
|
||||
FAKE_RELOC (FIRST_INVALID_RELOC, 28)
|
||||
FAKE_RELOC (LAST_INVALID_RELOC, 249)
|
||||
#else /* not OLD_ARM_ABI */
|
||||
FAKE_RELOC (FIRST_INVALID_RELOC1, 28)
|
||||
RELOC_NUMBER (R_ARM_CALL, 28)
|
||||
RELOC_NUMBER (R_ARM_JUMP24, 29)
|
||||
FAKE_RELOC (FIRST_INVALID_RELOC1, 30)
|
||||
FAKE_RELOC (LAST_INVALID_RELOC1, 31)
|
||||
RELOC_NUMBER (R_ARM_ALU_PCREL7_0, 32)
|
||||
RELOC_NUMBER (R_ARM_ALU_PCREL15_8, 33)
|
||||
|
Loading…
Reference in New Issue
Block a user