mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-23 12:09:49 +00:00
* elf32-arm.c (elf32_arm_modify_segment_map): New function.
(elf32_arm_additional_program_headers): Likewise. (elf_backend_modify_segment_map): Define. (elf_backend_additional_program_headers): Likewise. (elf32_arm_symbian_modify_segment_map): Use elf32_arm_modify_segment_map. * binutils/readelf.c (get_arm_segment_type): New function. (get_segment_type): Use it. * arm.h (PT_ARM_EXIDX): Define.
This commit is contained in:
parent
2a2a7c9466
commit
b294bdf8d0
@ -1,3 +1,14 @@
|
||||
2005-03-17 Paul Brook <paul@codesourcery.com>
|
||||
Dan Jacobowitz <dan@codesourcery.com>
|
||||
Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* elf32-arm.c (elf32_arm_modify_segment_map): New function.
|
||||
(elf32_arm_additional_program_headers): Likewise.
|
||||
(elf_backend_modify_segment_map): Define.
|
||||
(elf_backend_additional_program_headers): Likewise.
|
||||
(elf32_arm_symbian_modify_segment_map): Use
|
||||
elf32_arm_modify_segment_map.
|
||||
|
||||
2005-03-18 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elflink.c (elf_mark_used_section): Check bfd_is_const_section
|
||||
|
@ -5710,6 +5710,55 @@ elf32_arm_swap_symbol_out (bfd *abfd,
|
||||
bfd_elf32_swap_symbol_out (abfd, src, cdst, shndx);
|
||||
}
|
||||
|
||||
/* Add the PT_ARM_EXIDX program header. */
|
||||
|
||||
static bfd_boolean
|
||||
elf32_arm_modify_segment_map (bfd *abfd,
|
||||
struct bfd_link_info *info ATTRIBUTE_UNUSED)
|
||||
{
|
||||
struct elf_segment_map *m;
|
||||
asection *sec;
|
||||
|
||||
sec = bfd_get_section_by_name (abfd, ".ARM.exidx");
|
||||
if (sec != NULL && (sec->flags & SEC_LOAD) != 0)
|
||||
{
|
||||
/* If there is already a PT_ARM_EXIDX header, then we do not
|
||||
want to add another one. This situation arises when running
|
||||
"strip"; the input binary already has the header. */
|
||||
m = elf_tdata (abfd)->segment_map;
|
||||
while (m && m->p_type != PT_ARM_EXIDX)
|
||||
m = m->next;
|
||||
if (!m)
|
||||
{
|
||||
m = bfd_zalloc (abfd, sizeof (struct elf_segment_map));
|
||||
if (m == NULL)
|
||||
return FALSE;
|
||||
m->p_type = PT_ARM_EXIDX;
|
||||
m->count = 1;
|
||||
m->sections[0] = sec;
|
||||
|
||||
m->next = elf_tdata (abfd)->segment_map;
|
||||
elf_tdata (abfd)->segment_map = m;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* We may add a PT_ARM_EXIDX program header. */
|
||||
|
||||
static int
|
||||
elf32_arm_additional_program_headers (bfd *abfd)
|
||||
{
|
||||
asection *sec;
|
||||
|
||||
sec = bfd_get_section_by_name (abfd, ".ARM.exidx");
|
||||
if (sec != NULL && (sec->flags & SEC_LOAD) != 0)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* We use this to override swap_symbol_in and swap_symbol_out. */
|
||||
const struct elf_size_info elf32_arm_size_info = {
|
||||
sizeof (Elf32_External_Ehdr),
|
||||
@ -5780,6 +5829,9 @@ const struct elf_size_info elf32_arm_size_info = {
|
||||
#define elf_backend_copy_indirect_symbol elf32_arm_copy_indirect_symbol
|
||||
#define elf_backend_symbol_processing elf32_arm_symbol_processing
|
||||
#define elf_backend_size_info elf32_arm_size_info
|
||||
#define elf_backend_modify_segment_map elf32_arm_modify_segment_map
|
||||
#define elf_backend_additional_program_headers \
|
||||
elf32_arm_additional_program_headers
|
||||
|
||||
#define elf_backend_can_refcount 1
|
||||
#define elf_backend_can_gc_sections 1
|
||||
@ -5914,8 +5966,7 @@ elf32_arm_symbian_begin_write_processing (bfd *abfd,
|
||||
|
||||
static bfd_boolean
|
||||
elf32_arm_symbian_modify_segment_map (bfd *abfd,
|
||||
struct bfd_link_info *info
|
||||
ATTRIBUTE_UNUSED)
|
||||
struct bfd_link_info *info)
|
||||
{
|
||||
struct elf_segment_map *m;
|
||||
asection *dynsec;
|
||||
@ -5932,7 +5983,8 @@ elf32_arm_symbian_modify_segment_map (bfd *abfd,
|
||||
elf_tdata (abfd)->segment_map = m;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
/* Also call the generic arm routine. */
|
||||
return elf32_arm_modify_segment_map (abfd, info);
|
||||
}
|
||||
|
||||
#undef elf32_bed
|
||||
|
@ -1,3 +1,10 @@
|
||||
2005-03-17 Paul Brook <paul@codesourcery.com>
|
||||
Dan Jacobowitz <dan@codesourcery.com>
|
||||
Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* binutils/readelf.c (get_arm_segment_type): New function.
|
||||
(get_segment_type): Use it.
|
||||
|
||||
2005-03-18 Paul Brook <paul@codesourcery.com>
|
||||
|
||||
* objdump.c (objdump_print_addr): Avoid uninitialized warning.
|
||||
|
@ -2234,6 +2234,20 @@ get_osabi_name (unsigned int osabi)
|
||||
}
|
||||
}
|
||||
|
||||
static const char *
|
||||
get_arm_segment_type (unsigned long type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case PT_ARM_EXIDX:
|
||||
return "EXIDX";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const char *
|
||||
get_mips_segment_type (unsigned long type)
|
||||
{
|
||||
@ -2324,6 +2338,9 @@ get_segment_type (unsigned long p_type)
|
||||
|
||||
switch (elf_header.e_machine)
|
||||
{
|
||||
case EM_ARM:
|
||||
result = get_arm_segment_type (p_type);
|
||||
break;
|
||||
case EM_MIPS:
|
||||
case EM_MIPS_RS3_LE:
|
||||
result = get_mips_segment_type (p_type);
|
||||
|
@ -1,3 +1,9 @@
|
||||
2005-03-17 Paul Brook <paul@codesourcery.com>
|
||||
Dan Jacobowitz <dan@codesourcery.com>
|
||||
Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* arm.h (PT_ARM_EXIDX): Define.
|
||||
|
||||
2005-03-02 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
|
@ -37,6 +37,9 @@
|
||||
#define EF_ARM_VFP_FLOAT 0x400
|
||||
#define EF_ARM_MAVERICK_FLOAT 0x800
|
||||
|
||||
/* Frame unwind information */
|
||||
#define PT_ARM_EXIDX (PT_LOPROC + 1)
|
||||
|
||||
/* Other constants defined in the ARM ELF spec. version B-01. */
|
||||
#define EF_ARM_SYMSARESORTED 0x04 /* NB conflicts with EF_INTERWORK */
|
||||
#define EF_ARM_DYNSYMSUSESEGIDX 0x08 /* NB conflicts with EF_APCS26 */
|
||||
|
Loading…
Reference in New Issue
Block a user