mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-25 05:00:01 +00:00
Fix formatting
This commit is contained in:
parent
345a835d18
commit
9b485d32de
@ -1,3 +1,7 @@
|
||||
2000-08-10 Nick Clifton <nickc@cygnus.com>
|
||||
|
||||
* elf32-arm.h: Fix formatting.
|
||||
|
||||
2000-08-10 Bernd Schmidt <bernds@cygnus.co.uk>
|
||||
|
||||
* elf32-sh.c (sh_elf_reloc_loop): Make LAST_SYMBOL_SECTION static.
|
||||
|
276
bfd/elf32-arm.h
276
bfd/elf32-arm.h
@ -37,7 +37,6 @@ static bfd_reloc_status_type elf32_arm_final_link_relocate
|
||||
PARAMS ((reloc_howto_type *, bfd *, bfd *, asection *, bfd_byte *,
|
||||
Elf_Internal_Rela *, bfd_vma, struct bfd_link_info *, asection *,
|
||||
const char *, unsigned char, struct elf_link_hash_entry *));
|
||||
|
||||
static insn32 insert_thumb_branch
|
||||
PARAMS ((insn32, int));
|
||||
static struct elf_link_hash_entry *find_thumb_glue
|
||||
@ -57,14 +56,12 @@ static int elf32_thumb_to_arm_stub
|
||||
PARAMS ((struct bfd_link_info *, const char *, bfd *, bfd *, asection *,
|
||||
bfd_byte *, asection *, bfd_vma, bfd_signed_vma, bfd_vma));
|
||||
|
||||
#define INTERWORK_FLAG(abfd) (elf_elfheader (abfd)->e_flags & EF_INTERWORK)
|
||||
|
||||
/* The linker script knows the section names for placement.
|
||||
The entry_names are used to do simple name mangling on the stubs.
|
||||
Given a function name, and its type, the stub can be found. The
|
||||
name can be changed. The only requirement is the %s be present.
|
||||
*/
|
||||
|
||||
#define INTERWORK_FLAG( abfd ) (elf_elfheader (abfd)->e_flags & EF_INTERWORK)
|
||||
|
||||
name can be changed. The only requirement is the %s be present. */
|
||||
#define THUMB2ARM_GLUE_SECTION_NAME ".glue_7t"
|
||||
#define THUMB2ARM_GLUE_ENTRY_NAME "__%s_from_thumb"
|
||||
|
||||
@ -76,14 +73,12 @@ static int elf32_thumb_to_arm_stub
|
||||
#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
|
||||
|
||||
/* The size in bytes of an entry in the procedure linkage table. */
|
||||
|
||||
#define PLT_ENTRY_SIZE 16
|
||||
|
||||
/* The first entry in a procedure linkage table looks like
|
||||
this. It is set up so that any shared library function that is
|
||||
called before the relocation has been set up calls the dynamic
|
||||
linker first */
|
||||
|
||||
linker first. */
|
||||
static const bfd_byte elf32_arm_plt0_entry [PLT_ENTRY_SIZE] =
|
||||
{
|
||||
0x04, 0xe0, 0x2d, 0xe5, /* str lr, [sp, #-4]! */
|
||||
@ -94,7 +89,6 @@ static const bfd_byte elf32_arm_plt0_entry [PLT_ENTRY_SIZE] =
|
||||
|
||||
/* Subsequent entries in a procedure linkage table look like
|
||||
this. */
|
||||
|
||||
static const bfd_byte elf32_arm_plt_entry [PLT_ENTRY_SIZE] =
|
||||
{
|
||||
0x04, 0xc0, 0x9f, 0xe5, /* ldr ip, [pc, #4] */
|
||||
@ -103,7 +97,6 @@ static const bfd_byte elf32_arm_plt_entry [PLT_ENTRY_SIZE] =
|
||||
0x00, 0x00, 0x00, 0x00 /* offset to symbol in got */
|
||||
};
|
||||
|
||||
|
||||
/* The ARM linker needs to keep track of the number of relocs that it
|
||||
decides to copy in check_relocs for each symbol. This is so that
|
||||
it can discard PC relative relocs if it doesn't need them when
|
||||
@ -112,7 +105,6 @@ static const bfd_byte elf32_arm_plt_entry [PLT_ENTRY_SIZE] =
|
||||
|
||||
/* This structure keeps track of the number of PC relative relocs we
|
||||
have copied for a given symbol. */
|
||||
|
||||
struct elf32_arm_pcrel_relocs_copied
|
||||
{
|
||||
/* Next section. */
|
||||
@ -124,7 +116,6 @@ struct elf32_arm_pcrel_relocs_copied
|
||||
};
|
||||
|
||||
/* Arm ELF linker hash entry. */
|
||||
|
||||
struct elf32_arm_link_hash_entry
|
||||
{
|
||||
struct elf_link_hash_entry root;
|
||||
@ -134,12 +125,10 @@ struct elf32_arm_link_hash_entry
|
||||
};
|
||||
|
||||
/* Declare this now that the above structures are defined. */
|
||||
|
||||
static boolean elf32_arm_discard_copies
|
||||
PARAMS ((struct elf32_arm_link_hash_entry *, PTR));
|
||||
|
||||
/* Traverse an arm ELF linker hash table. */
|
||||
|
||||
#define elf32_arm_link_hash_traverse(table, func, info) \
|
||||
(elf_link_hash_traverse \
|
||||
(&(table)->root, \
|
||||
@ -150,25 +139,25 @@ static boolean elf32_arm_discard_copies
|
||||
#define elf32_arm_hash_table(info) \
|
||||
((struct elf32_arm_link_hash_table *) ((info)->hash))
|
||||
|
||||
/* ARM ELF linker hash table */
|
||||
/* ARM ELF linker hash table. */
|
||||
struct elf32_arm_link_hash_table
|
||||
{
|
||||
/* The main hash table. */
|
||||
struct elf_link_hash_table root;
|
||||
{
|
||||
/* The main hash table. */
|
||||
struct elf_link_hash_table root;
|
||||
|
||||
/* The size in bytes of the section containg the Thumb-to-ARM glue. */
|
||||
long int thumb_glue_size;
|
||||
/* The size in bytes of the section containg the Thumb-to-ARM glue. */
|
||||
long int thumb_glue_size;
|
||||
|
||||
/* The size in bytes of the section containg the ARM-to-Thumb glue. */
|
||||
long int arm_glue_size;
|
||||
/* The size in bytes of the section containg the ARM-to-Thumb glue. */
|
||||
long int arm_glue_size;
|
||||
|
||||
/* An arbitary input BFD chosen to hold the glue sections. */
|
||||
bfd * bfd_of_glue_owner;
|
||||
/* An arbitary input BFD chosen to hold the glue sections. */
|
||||
bfd * bfd_of_glue_owner;
|
||||
|
||||
/* A boolean indicating whether knowledge of the ARM's pipeline
|
||||
length should be applied by the linker. */
|
||||
int no_pipeline_knowledge;
|
||||
};
|
||||
/* A boolean indicating whether knowledge of the ARM's pipeline
|
||||
length should be applied by the linker. */
|
||||
int no_pipeline_knowledge;
|
||||
};
|
||||
|
||||
|
||||
/* Create an entry in an ARM ELF linker hash table. */
|
||||
@ -201,7 +190,7 @@ elf32_arm_link_hash_newfunc (entry, table, string)
|
||||
return (struct bfd_hash_entry *) ret;
|
||||
}
|
||||
|
||||
/* Create an ARM elf linker hash table */
|
||||
/* Create an ARM elf linker hash table. */
|
||||
|
||||
static struct bfd_link_hash_table *
|
||||
elf32_arm_link_hash_table_create (abfd)
|
||||
@ -229,6 +218,8 @@ elf32_arm_link_hash_table_create (abfd)
|
||||
return &ret->root.root;
|
||||
}
|
||||
|
||||
/* Locate the Thumb encoded calling stub for NAME. */
|
||||
|
||||
static struct elf_link_hash_entry *
|
||||
find_thumb_glue (link_info, name, input_bfd)
|
||||
struct bfd_link_info *link_info;
|
||||
@ -242,7 +233,6 @@ find_thumb_glue (link_info, name, input_bfd)
|
||||
/* We need a pointer to the armelf specific hash table. */
|
||||
hash_table = elf32_arm_hash_table (link_info);
|
||||
|
||||
|
||||
tmp_name = ((char *)
|
||||
bfd_malloc (strlen (name) + strlen (THUMB2ARM_GLUE_ENTRY_NAME) + 1));
|
||||
|
||||
@ -255,7 +245,7 @@ find_thumb_glue (link_info, name, input_bfd)
|
||||
|
||||
if (hash == NULL)
|
||||
/* xgettext:c-format */
|
||||
_bfd_error_handler (_ ("%s: unable to find THUMB glue '%s' for `%s'"),
|
||||
_bfd_error_handler (_("%s: unable to find THUMB glue '%s' for `%s'"),
|
||||
bfd_get_filename (input_bfd), tmp_name, name);
|
||||
|
||||
free (tmp_name);
|
||||
@ -263,6 +253,8 @@ find_thumb_glue (link_info, name, input_bfd)
|
||||
return hash;
|
||||
}
|
||||
|
||||
/* Locate the ARM encoded calling stub for NAME. */
|
||||
|
||||
static struct elf_link_hash_entry *
|
||||
find_arm_glue (link_info, name, input_bfd)
|
||||
struct bfd_link_info *link_info;
|
||||
@ -288,7 +280,7 @@ find_arm_glue (link_info, name, input_bfd)
|
||||
|
||||
if (myh == NULL)
|
||||
/* xgettext:c-format */
|
||||
_bfd_error_handler (_ ("%s: unable to find ARM glue '%s' for `%s'"),
|
||||
_bfd_error_handler (_("%s: unable to find ARM glue '%s' for `%s'"),
|
||||
bfd_get_filename (input_bfd), tmp_name, name);
|
||||
|
||||
free (tmp_name);
|
||||
@ -296,24 +288,21 @@ find_arm_glue (link_info, name, input_bfd)
|
||||
return myh;
|
||||
}
|
||||
|
||||
/*
|
||||
ARM->Thumb glue:
|
||||
/* ARM->Thumb glue:
|
||||
|
||||
.arm
|
||||
__func_from_arm:
|
||||
ldr r12, __func_addr
|
||||
bx r12
|
||||
__func_addr:
|
||||
.word func @ behave as if you saw a ARM_32 reloc
|
||||
*/
|
||||
.word func @ behave as if you saw a ARM_32 reloc. */
|
||||
|
||||
#define ARM2THUMB_GLUE_SIZE 12
|
||||
static const insn32 a2t1_ldr_insn = 0xe59fc000;
|
||||
static const insn32 a2t2_bx_r12_insn = 0xe12fff1c;
|
||||
static const insn32 a2t3_func_addr_insn = 0x00000001;
|
||||
|
||||
/*
|
||||
Thumb->ARM: Thumb->(non-interworking aware) ARM
|
||||
/* Thumb->ARM: Thumb->(non-interworking aware) ARM
|
||||
|
||||
.thumb .thumb
|
||||
.align 2 .align 2
|
||||
@ -327,8 +316,7 @@ static const insn32 a2t3_func_addr_insn = 0x00000001;
|
||||
ldmia r13! {r6, lr}
|
||||
bx lr
|
||||
__func_addr:
|
||||
.word func
|
||||
*/
|
||||
.word func */
|
||||
|
||||
#define THUMB2ARM_GLUE_SIZE 8
|
||||
static const insn16 t2a1_bx_pc_insn = 0x4778;
|
||||
@ -408,7 +396,6 @@ record_arm_to_thumb_glue (link_info, h)
|
||||
s = bfd_get_section_by_name
|
||||
(globals->bfd_of_glue_owner, ARM2THUMB_GLUE_SECTION_NAME);
|
||||
|
||||
|
||||
BFD_ASSERT (s != NULL);
|
||||
|
||||
tmp_name = ((char *)
|
||||
@ -423,14 +410,14 @@ record_arm_to_thumb_glue (link_info, h)
|
||||
|
||||
if (myh != NULL)
|
||||
{
|
||||
/* We've already seen this guy. */
|
||||
free (tmp_name);
|
||||
return; /* we've already seen this guy */
|
||||
return;
|
||||
}
|
||||
|
||||
/* The only trick here is using hash_table->arm_glue_size as the value. Even
|
||||
though the section isn't allocated yet, this is where we will be putting
|
||||
it. */
|
||||
|
||||
_bfd_generic_link_add_one_symbol (link_info, globals->bfd_of_glue_owner, tmp_name,
|
||||
BSF_GLOBAL,
|
||||
s, globals->arm_glue_size + 1,
|
||||
@ -477,8 +464,9 @@ record_thumb_to_arm_glue (link_info, h)
|
||||
|
||||
if (myh != NULL)
|
||||
{
|
||||
/* We've already seen this guy. */
|
||||
free (tmp_name);
|
||||
return; /* we've already seen this guy */
|
||||
return;
|
||||
}
|
||||
|
||||
_bfd_generic_link_add_one_symbol (link_info, hash_table->bfd_of_glue_owner, tmp_name,
|
||||
@ -486,17 +474,16 @@ record_thumb_to_arm_glue (link_info, h)
|
||||
NULL, true, false,
|
||||
(struct bfd_link_hash_entry **) &myh);
|
||||
|
||||
/* If we mark it 'thumb', the disassembler will do a better job. */
|
||||
/* If we mark it 'Thumb', the disassembler will do a better job. */
|
||||
bind = ELF_ST_BIND (myh->type);
|
||||
myh->type = ELF_ST_INFO (bind, STT_ARM_TFUNC);
|
||||
|
||||
free (tmp_name);
|
||||
|
||||
/* Allocate another symbol to mark where we switch to arm mode. */
|
||||
|
||||
#define CHANGE_TO_ARM "__%s_change_to_arm"
|
||||
#define BACK_FROM_ARM "__%s_back_from_arm"
|
||||
|
||||
/* Allocate another symbol to mark where we switch to Arm mode. */
|
||||
tmp_name = (char *) bfd_malloc (strlen (name) + strlen (CHANGE_TO_ARM) + 1);
|
||||
|
||||
BFD_ASSERT (tmp_name);
|
||||
@ -520,6 +507,7 @@ record_thumb_to_arm_glue (link_info, h)
|
||||
/* Select a BFD to be used to hold the sections used by the glue code.
|
||||
This function is called from the linker scripts in ld/emultempl/
|
||||
{armelf/pe}.em */
|
||||
|
||||
boolean
|
||||
bfd_elf32_arm_get_bfd_for_interworking (abfd, info)
|
||||
bfd *abfd;
|
||||
@ -608,7 +596,6 @@ bfd_elf32_arm_process_before_allocation (abfd, link_info, no_pipeline_knowledge)
|
||||
|
||||
/* Here we have a bfd that is to be included on the link. We have a hook
|
||||
to do reloc rummaging, before section sizes are nailed down. */
|
||||
|
||||
globals = elf32_arm_hash_table (link_info);
|
||||
|
||||
BFD_ASSERT (globals != NULL);
|
||||
@ -628,8 +615,8 @@ bfd_elf32_arm_process_before_allocation (abfd, link_info, no_pipeline_knowledge)
|
||||
continue;
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
/* Load the relocs. */
|
||||
|
||||
/* Load the relocs. */
|
||||
irel = (_bfd_elf32_link_read_relocs (abfd, sec, (PTR) NULL,
|
||||
(Elf_Internal_Rela *) NULL, false));
|
||||
|
||||
@ -646,7 +633,7 @@ bfd_elf32_arm_process_before_allocation (abfd, link_info, no_pipeline_knowledge)
|
||||
r_type = ELF32_R_TYPE (irel->r_info);
|
||||
r_index = ELF32_R_SYM (irel->r_info);
|
||||
|
||||
/* These are the only relocation types we care about */
|
||||
/* These are the only relocation types we care about. */
|
||||
if ( r_type != R_ARM_PC24
|
||||
&& r_type != R_ARM_THM_PC22)
|
||||
continue;
|
||||
@ -663,6 +650,7 @@ bfd_elf32_arm_process_before_allocation (abfd, link_info, no_pipeline_knowledge)
|
||||
contents = (bfd_byte *) bfd_malloc (sec->_raw_size);
|
||||
if (contents == NULL)
|
||||
goto error_return;
|
||||
|
||||
free_contents = contents;
|
||||
|
||||
if (!bfd_get_section_contents (abfd, sec, contents,
|
||||
@ -684,7 +672,9 @@ bfd_elf32_arm_process_before_allocation (abfd, link_info, no_pipeline_knowledge)
|
||||
bfd_malloc (symtab_hdr->sh_size));
|
||||
if (extsyms == NULL)
|
||||
goto error_return;
|
||||
|
||||
free_extsyms = extsyms;
|
||||
|
||||
if (bfd_seek (abfd, symtab_hdr->sh_offset, SEEK_SET) != 0
|
||||
|| (bfd_read (extsyms, 1, symtab_hdr->sh_size, abfd)
|
||||
!= symtab_hdr->sh_size))
|
||||
@ -693,14 +683,13 @@ bfd_elf32_arm_process_before_allocation (abfd, link_info, no_pipeline_knowledge)
|
||||
}
|
||||
|
||||
/* If the relocation is not against a symbol it cannot concern us. */
|
||||
|
||||
h = NULL;
|
||||
|
||||
/* We don't care about local symbols */
|
||||
/* We don't care about local symbols. */
|
||||
if (r_index < symtab_hdr->sh_info)
|
||||
continue;
|
||||
|
||||
/* This is an external symbol */
|
||||
/* This is an external symbol. */
|
||||
r_index -= symtab_hdr->sh_info;
|
||||
h = (struct elf_link_hash_entry *)
|
||||
elf_sym_hashes (abfd)[r_index];
|
||||
@ -716,7 +705,6 @@ bfd_elf32_arm_process_before_allocation (abfd, link_info, no_pipeline_knowledge)
|
||||
/* 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. */
|
||||
|
||||
if (ELF_ST_TYPE(h->type) == STT_ARM_TFUNC)
|
||||
record_arm_to_thumb_glue (link_info, h);
|
||||
break;
|
||||
@ -725,7 +713,6 @@ bfd_elf32_arm_process_before_allocation (abfd, link_info, no_pipeline_knowledge)
|
||||
/* This one is a call from thumb code. We look
|
||||
up the target of the call. If it is not a thumb
|
||||
target, we insert glue. */
|
||||
|
||||
if (ELF_ST_TYPE (h->type) != STT_ARM_TFUNC)
|
||||
record_thumb_to_arm_glue (link_info, h);
|
||||
break;
|
||||
@ -788,7 +775,6 @@ insert_thumb_branch (br_insn, rel_off)
|
||||
unsigned int low_bits;
|
||||
unsigned int high_bits;
|
||||
|
||||
|
||||
BFD_ASSERT ((rel_off & 1) != 1);
|
||||
|
||||
rel_off >>= 1; /* Half word aligned address. */
|
||||
@ -800,14 +786,14 @@ insert_thumb_branch (br_insn, rel_off)
|
||||
else if ((br_insn & HI_LOW_ORDER) == HI_LOW_ORDER)
|
||||
br_insn = HI_LOW_ORDER | (high_bits << 16) | low_bits;
|
||||
else
|
||||
abort (); /* error - not a valid branch instruction form */
|
||||
/* FIXME: abort is probably not the right call. krk@cygnus.com */
|
||||
abort (); /* error - not a valid branch instruction form. */
|
||||
|
||||
/* FIXME: abort is probably not the right call. krk@cygnus.com */
|
||||
|
||||
return br_insn;
|
||||
}
|
||||
|
||||
/* Thumb code calling an ARM function */
|
||||
/* Thumb code calling an ARM function. */
|
||||
|
||||
static int
|
||||
elf32_thumb_to_arm_stub (info, name, input_bfd, output_bfd, input_section,
|
||||
hit_data, sym_sec, offset, addend, val)
|
||||
@ -854,10 +840,10 @@ elf32_thumb_to_arm_stub (info, name, input_bfd, output_bfd, input_section,
|
||||
&& !INTERWORK_FLAG (sym_sec->owner))
|
||||
{
|
||||
_bfd_error_handler
|
||||
(_ ("%s(%s): warning: interworking not enabled."),
|
||||
(_("%s(%s): warning: interworking not enabled."),
|
||||
bfd_get_filename (sym_sec->owner), name);
|
||||
_bfd_error_handler
|
||||
(_ (" first occurrence: %s: thumb call to arm"),
|
||||
(_(" first occurrence: %s: thumb call to arm"),
|
||||
bfd_get_filename (input_bfd));
|
||||
|
||||
return false;
|
||||
@ -873,13 +859,19 @@ elf32_thumb_to_arm_stub (info, name, input_bfd, output_bfd, input_section,
|
||||
s->contents + my_offset + 2);
|
||||
|
||||
ret_offset =
|
||||
((bfd_signed_vma) val) /* Address of destination of the stub */
|
||||
/* Address of destination of the stub. */
|
||||
((bfd_signed_vma) val)
|
||||
- ((bfd_signed_vma)
|
||||
(s->output_offset /* Offset from the start of the current section to the start of the stubs. */
|
||||
+ my_offset /* Offset of the start of this stub from the start of the stubs. */
|
||||
+ s->output_section->vma) /* Address of the start of the current section. */
|
||||
+ 4 /* The branch instruction is 4 bytes into the stub. */
|
||||
+ 8); /* ARM branches work from the pc of the instruction + 8. */
|
||||
/* Offset from the start of the current section to the start of the stubs. */
|
||||
(s->output_offset
|
||||
/* Offset of the start of this stub from the start of the stubs. */
|
||||
+ my_offset
|
||||
/* Address of the start of the current section. */
|
||||
+ s->output_section->vma)
|
||||
/* The branch instruction is 4 bytes into the stub. */
|
||||
+ 4
|
||||
/* ARM branches work from the pc of the instruction + 8. */
|
||||
+ 8);
|
||||
|
||||
bfd_put_32 (output_bfd,
|
||||
t2a3_b_insn | ((ret_offset >> 2) & 0x00FFFFFF),
|
||||
@ -907,7 +899,8 @@ elf32_thumb_to_arm_stub (info, name, input_bfd, output_bfd, input_section,
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Arm code calling a Thumb function */
|
||||
/* Arm code calling a Thumb function. */
|
||||
|
||||
static int
|
||||
elf32_arm_to_thumb_stub (info, name, input_bfd, output_bfd, input_section,
|
||||
hit_data, sym_sec, offset, addend, val)
|
||||
@ -952,12 +945,13 @@ elf32_arm_to_thumb_stub (info, name, input_bfd, output_bfd, input_section,
|
||||
&& !INTERWORK_FLAG (sym_sec->owner))
|
||||
{
|
||||
_bfd_error_handler
|
||||
(_ ("%s(%s): warning: interworking not enabled."),
|
||||
(_("%s(%s): warning: interworking not enabled."),
|
||||
bfd_get_filename (sym_sec->owner), name);
|
||||
_bfd_error_handler
|
||||
(_ (" first occurrence: %s: arm call to thumb"),
|
||||
(_(" first occurrence: %s: arm call to thumb"),
|
||||
bfd_get_filename (input_bfd));
|
||||
}
|
||||
|
||||
--my_offset;
|
||||
myh->root.u.def.value = my_offset;
|
||||
|
||||
@ -977,7 +971,7 @@ elf32_arm_to_thumb_stub (info, name, input_bfd, output_bfd, input_section,
|
||||
tmp = bfd_get_32 (input_bfd, hit_data);
|
||||
tmp = tmp & 0xFF000000;
|
||||
|
||||
/* Somehow these are both 4 too far, so subtract 8. */
|
||||
/* Somehow these are both 4 too far, so subtract 8. */
|
||||
ret_offset = s->output_offset
|
||||
+ my_offset
|
||||
+ s->output_section->vma
|
||||
@ -995,6 +989,7 @@ elf32_arm_to_thumb_stub (info, name, input_bfd, output_bfd, input_section,
|
||||
}
|
||||
|
||||
/* Perform a relocation as part of a final link. */
|
||||
|
||||
static bfd_reloc_status_type
|
||||
elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
input_section, contents, rel, value,
|
||||
@ -1066,8 +1061,7 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
case R_ARM_XPC25:
|
||||
#endif
|
||||
/* When generating a shared object, these relocations are copied
|
||||
into the output file to be resolved at run time. */
|
||||
|
||||
into the output file to be resolved at run time. */
|
||||
if (info->shared
|
||||
&& (r_type != R_ARM_PC24
|
||||
|| (h != NULL
|
||||
@ -1163,10 +1157,9 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
|
||||
/* If this reloc is against an external symbol, we do not want to
|
||||
fiddle with the addend. Otherwise, we need to include the symbol
|
||||
value so that it becomes an addend for the dynamic reloc. */
|
||||
value so that it becomes an addend for the dynamic reloc. */
|
||||
if (! relocate)
|
||||
return bfd_reloc_ok;
|
||||
|
||||
|
||||
return _bfd_final_link_relocate (howto, input_bfd, input_section,
|
||||
contents, rel->r_offset, value,
|
||||
@ -1208,7 +1201,6 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
{
|
||||
/* The old way of doing things. Trearing the addend as a
|
||||
byte sized field and adding in the pipeline offset. */
|
||||
|
||||
value -= (input_section->output_section->vma
|
||||
+ input_section->output_offset);
|
||||
value -= rel->r_offset;
|
||||
@ -1237,7 +1229,6 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
Note: None of these operations have knowledge of the pipeline
|
||||
size of the processor, thus it is up to the assembler to encode
|
||||
this information into the addend. */
|
||||
|
||||
value -= (input_section->output_section->vma
|
||||
+ input_section->output_offset);
|
||||
value -= rel->r_offset;
|
||||
@ -1259,7 +1250,6 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
}
|
||||
}
|
||||
|
||||
/* Perform a signed range check. */
|
||||
signed_addend = value;
|
||||
signed_addend >>= howto->rightshift;
|
||||
|
||||
@ -1269,6 +1259,7 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
about getting the destination exactly right. */
|
||||
if (! h || h->root.type != bfd_link_hash_undefweak)
|
||||
{
|
||||
/* Perform a signed range check. */
|
||||
if ( signed_addend > ((bfd_signed_vma) (howto->dst_mask >> 1))
|
||||
|| signed_addend < - ((bfd_signed_vma) ((howto->dst_mask + 1) >> 1)))
|
||||
return bfd_reloc_overflow;
|
||||
@ -1332,7 +1323,7 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
return bfd_reloc_ok;
|
||||
|
||||
case R_ARM_THM_ABS5:
|
||||
/* Support ldr and str instructions for the thumb. */
|
||||
/* Support ldr and str instructions for the thumb. */
|
||||
#ifdef USE_REL
|
||||
/* Need to refetch addend. */
|
||||
addend = bfd_get_16 (input_bfd, hit_data) & howto->src_mask;
|
||||
@ -1371,7 +1362,7 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
{
|
||||
bfd_vma upper = upper_insn & 0x7ff;
|
||||
bfd_vma lower = lower_insn & 0x7ff;
|
||||
upper = (upper ^ 0x400) - 0x400; /* sign extend */
|
||||
upper = (upper ^ 0x400) - 0x400; /* Sign extend. */
|
||||
addend = (upper << 12) | (lower << 1);
|
||||
signed_addend = addend;
|
||||
}
|
||||
@ -1413,7 +1404,7 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
|
||||
if (! globals->no_pipeline_knowledge)
|
||||
{
|
||||
Elf_Internal_Ehdr * i_ehdrp; /* Elf file header, internal form */
|
||||
Elf_Internal_Ehdr * i_ehdrp; /* Elf file header, internal form. */
|
||||
|
||||
i_ehdrp = elf_elfheader (input_bfd);
|
||||
|
||||
@ -1481,8 +1472,7 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
calculation. We always want the start of .got. If we
|
||||
define _GLOBAL_OFFSET_TABLE in a different way, as is
|
||||
permitted by the ABI, we might have to change this
|
||||
calculation. */
|
||||
|
||||
calculation. */
|
||||
value -= sgot->output_section->vma;
|
||||
return _bfd_final_link_relocate (howto, input_bfd, input_section,
|
||||
contents, rel->r_offset, value,
|
||||
@ -1490,7 +1480,6 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
|
||||
case R_ARM_GOTPC:
|
||||
/* Use global offset table as symbol value. */
|
||||
|
||||
BFD_ASSERT (sgot != NULL);
|
||||
|
||||
if (sgot == NULL)
|
||||
@ -1503,7 +1492,7 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
|
||||
case R_ARM_GOT32:
|
||||
/* Relocation is to the entry for this symbol in the
|
||||
global offset table. */
|
||||
global offset table. */
|
||||
if (sgot == NULL)
|
||||
return bfd_reloc_notsupported;
|
||||
|
||||
@ -1526,8 +1515,7 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
|
||||
When doing a dynamic link, we create a .rel.got relocation
|
||||
entry to initialize the value. This is done in the
|
||||
finish_dynamic_symbol routine. */
|
||||
|
||||
finish_dynamic_symbol routine. */
|
||||
if ((off & 1) != 0)
|
||||
off &= ~1;
|
||||
else
|
||||
@ -1550,7 +1538,7 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
|
||||
/* The offset must always be a multiple of 4. We use the
|
||||
least significant bit to record whether we have already
|
||||
generated the necessary reloc. */
|
||||
generated the necessary reloc. */
|
||||
if ((off & 1) != 0)
|
||||
off &= ~1;
|
||||
else
|
||||
@ -1591,7 +1579,7 @@ elf32_arm_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
procedure linkage table. */
|
||||
|
||||
/* Resolve a PLT32 reloc against a local symbol directly,
|
||||
without using the procedure linkage table. */
|
||||
without using the procedure linkage table. */
|
||||
if (h == NULL)
|
||||
return _bfd_final_link_relocate (howto, input_bfd, input_section,
|
||||
contents, rel->r_offset, value,
|
||||
@ -1770,6 +1758,7 @@ elf32_arm_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||
h = NULL;
|
||||
sym = NULL;
|
||||
sec = NULL;
|
||||
|
||||
if (r_symndx < symtab_hdr->sh_info)
|
||||
{
|
||||
sym = local_syms + r_symndx;
|
||||
@ -1781,10 +1770,12 @@ elf32_arm_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||
else
|
||||
{
|
||||
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
|
||||
while (h->root.type == bfd_link_hash_indirect
|
||||
|
||||
while ( h->root.type == bfd_link_hash_indirect
|
||||
|| h->root.type == bfd_link_hash_warning)
|
||||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||
if (h->root.type == bfd_link_hash_defined
|
||||
|
||||
if ( h->root.type == bfd_link_hash_defined
|
||||
|| h->root.type == bfd_link_hash_defweak)
|
||||
{
|
||||
int relocation_needed = 1;
|
||||
@ -1793,7 +1784,7 @@ elf32_arm_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||
|
||||
/* In these cases, we don't need the relocation value.
|
||||
We check specially because in some obscure cases
|
||||
sec->output_section will be NULL. */
|
||||
sec->output_section will be NULL. */
|
||||
switch (r_type)
|
||||
{
|
||||
case R_ARM_PC24:
|
||||
@ -1900,19 +1891,19 @@ elf32_arm_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||
break;
|
||||
|
||||
case bfd_reloc_outofrange:
|
||||
msg = _ ("internal error: out of range error");
|
||||
msg = _("internal error: out of range error");
|
||||
goto common_error;
|
||||
|
||||
case bfd_reloc_notsupported:
|
||||
msg = _ ("internal error: unsupported relocation error");
|
||||
msg = _("internal error: unsupported relocation error");
|
||||
goto common_error;
|
||||
|
||||
case bfd_reloc_dangerous:
|
||||
msg = _ ("internal error: dangerous error");
|
||||
msg = _("internal error: dangerous error");
|
||||
goto common_error;
|
||||
|
||||
default:
|
||||
msg = _ ("internal error: unknown error");
|
||||
msg = _("internal error: unknown error");
|
||||
/* fall through */
|
||||
|
||||
common_error:
|
||||
@ -1940,11 +1931,11 @@ elf32_arm_set_private_flags (abfd, flags)
|
||||
if (EF_ARM_EABI_VERSION (flags) == EF_ARM_EABI_UNKNOWN)
|
||||
{
|
||||
if (flags & EF_INTERWORK)
|
||||
_bfd_error_handler (_ ("\
|
||||
_bfd_error_handler (_("\
|
||||
Warning: Not setting interwork flag of %s since it has already been specified as non-interworking"),
|
||||
bfd_get_filename (abfd));
|
||||
else
|
||||
_bfd_error_handler (_ ("\
|
||||
_bfd_error_handler (_("\
|
||||
Warning: Clearing the interwork flag of %s due to outside request"),
|
||||
bfd_get_filename (abfd));
|
||||
}
|
||||
@ -1959,6 +1950,7 @@ Warning: Clearing the interwork flag of %s due to outside request"),
|
||||
}
|
||||
|
||||
/* Copy backend specific data from one object module to another. */
|
||||
|
||||
static boolean
|
||||
elf32_arm_copy_private_bfd_data (ibfd, obfd)
|
||||
bfd *ibfd;
|
||||
@ -1995,7 +1987,7 @@ elf32_arm_copy_private_bfd_data (ibfd, obfd)
|
||||
if ((in_flags & EF_INTERWORK) != (out_flags & EF_INTERWORK))
|
||||
{
|
||||
if (out_flags & EF_INTERWORK)
|
||||
_bfd_error_handler (_ ("\
|
||||
_bfd_error_handler (_("\
|
||||
Warning: Clearing the interwork flag in %s because non-interworking code in %s has been linked with it"),
|
||||
bfd_get_filename (obfd), bfd_get_filename (ibfd));
|
||||
|
||||
@ -2011,6 +2003,7 @@ Warning: Clearing the interwork flag in %s because non-interworking code in %s h
|
||||
|
||||
/* Merge backend specific data from an object file to the output
|
||||
object file when linking. */
|
||||
|
||||
static boolean
|
||||
elf32_arm_merge_private_bfd_data (ibfd, obfd)
|
||||
bfd * ibfd;
|
||||
@ -2019,7 +2012,7 @@ elf32_arm_merge_private_bfd_data (ibfd, obfd)
|
||||
flagword out_flags;
|
||||
flagword in_flags;
|
||||
|
||||
/* Check if we have the same endianess */
|
||||
/* Check if we have the same endianess. */
|
||||
if (_bfd_generic_verify_endian_match (ibfd, obfd) == false)
|
||||
return false;
|
||||
|
||||
@ -2030,7 +2023,7 @@ elf32_arm_merge_private_bfd_data (ibfd, obfd)
|
||||
/* The input BFD must have had its flags initialised. */
|
||||
/* The following seems bogus to me -- The flags are initialized in
|
||||
the assembler but I don't think an elf_flags_init field is
|
||||
written into the object */
|
||||
written into the object. */
|
||||
/* BFD_ASSERT (elf_flags_init (ibfd)); */
|
||||
|
||||
in_flags = elf_elfheader (ibfd)->e_flags;
|
||||
@ -2076,7 +2069,7 @@ Error: %s compiled for EABI version %d, whereas %s is compiled for version %d"),
|
||||
return true;
|
||||
|
||||
if ((in_flags & EF_APCS_26) != (out_flags & EF_APCS_26))
|
||||
_bfd_error_handler (_ ("\
|
||||
_bfd_error_handler (_("\
|
||||
Error: %s compiled for APCS-%d, whereas %s is compiled for APCS-%d"),
|
||||
bfd_get_filename (ibfd),
|
||||
in_flags & EF_APCS_26 ? 26 : 32,
|
||||
@ -2084,36 +2077,37 @@ Error: %s compiled for APCS-%d, whereas %s is compiled for APCS-%d"),
|
||||
out_flags & EF_APCS_26 ? 26 : 32);
|
||||
|
||||
if ((in_flags & EF_APCS_FLOAT) != (out_flags & EF_APCS_FLOAT))
|
||||
_bfd_error_handler (_ ("\
|
||||
_bfd_error_handler (_("\
|
||||
Error: %s passes floats in %s registers, whereas %s passes them in %s registers"),
|
||||
bfd_get_filename (ibfd),
|
||||
in_flags & EF_APCS_FLOAT ? _ ("float") : _ ("integer"),
|
||||
in_flags & EF_APCS_FLOAT ? _("float") : _("integer"),
|
||||
bfd_get_filename (obfd),
|
||||
out_flags & EF_APCS_26 ? _ ("float") : _ ("integer"));
|
||||
out_flags & EF_APCS_26 ? _("float") : _("integer"));
|
||||
|
||||
if ((in_flags & EF_PIC) != (out_flags & EF_PIC))
|
||||
_bfd_error_handler (_ ("\
|
||||
_bfd_error_handler (_("\
|
||||
Error: %s is compiled as position %s code, whereas %s is not"),
|
||||
bfd_get_filename (ibfd),
|
||||
in_flags & EF_PIC ? _ ("independent") : _ ("dependent"),
|
||||
in_flags & EF_PIC ? _("independent") : _("dependent"),
|
||||
bfd_get_filename (obfd));
|
||||
|
||||
/* Interworking mismatch is only a warning. */
|
||||
/* Interworking mismatch is only a warning. */
|
||||
if ((in_flags & EF_INTERWORK) != (out_flags & EF_INTERWORK))
|
||||
{
|
||||
_bfd_error_handler (_ ("\
|
||||
_bfd_error_handler (_("\
|
||||
Warning: %s %s interworking, whereas %s %s"),
|
||||
bfd_get_filename (ibfd),
|
||||
in_flags & EF_INTERWORK ? _ ("supports") : _ ("does not support"),
|
||||
in_flags & EF_INTERWORK ? _("supports") : _("does not support"),
|
||||
bfd_get_filename (obfd),
|
||||
out_flags & EF_INTERWORK ? _ ("does not") : _ ("does"));
|
||||
out_flags & EF_INTERWORK ? _("does not") : _("does"));
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Display the flags field */
|
||||
/* Display the flags field. */
|
||||
|
||||
static boolean
|
||||
elf32_arm_print_private_bfd_data (abfd, ptr)
|
||||
bfd *abfd;
|
||||
@ -2128,10 +2122,11 @@ elf32_arm_print_private_bfd_data (abfd, ptr)
|
||||
_bfd_elf_print_private_bfd_data (abfd, ptr);
|
||||
|
||||
flags = elf_elfheader (abfd)->e_flags;
|
||||
/* Ignore init flag - it may not be set, despite the flags field containing valid data. */
|
||||
/* Ignore init flag - it may not be set, despite the flags field
|
||||
containing valid data. */
|
||||
|
||||
/* xgettext:c-format */
|
||||
fprintf (file, _ ("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
|
||||
fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
|
||||
|
||||
switch (EF_ARM_EABI_VERSION (flags))
|
||||
{
|
||||
@ -2140,60 +2135,60 @@ elf32_arm_print_private_bfd_data (abfd, ptr)
|
||||
official ARM ELF extended ABI. Hence they are only decoded if
|
||||
the EABI version is not set. */
|
||||
if (flags & EF_INTERWORK)
|
||||
fprintf (file, _ (" [interworking enabled]"));
|
||||
fprintf (file, _(" [interworking enabled]"));
|
||||
|
||||
if (flags & EF_APCS_26)
|
||||
fprintf (file, _ (" [APCS-26]"));
|
||||
fprintf (file, _(" [APCS-26]"));
|
||||
else
|
||||
fprintf (file, _ (" [APCS-32]"));
|
||||
fprintf (file, _(" [APCS-32]"));
|
||||
|
||||
if (flags & EF_APCS_FLOAT)
|
||||
fprintf (file, _ (" [floats passed in float registers]"));
|
||||
fprintf (file, _(" [floats passed in float registers]"));
|
||||
|
||||
if (flags & EF_PIC)
|
||||
fprintf (file, _ (" [position independent]"));
|
||||
fprintf (file, _(" [position independent]"));
|
||||
|
||||
if (flags & EF_NEW_ABI)
|
||||
fprintf (file, _ (" [new ABI]"));
|
||||
fprintf (file, _(" [new ABI]"));
|
||||
|
||||
if (flags & EF_OLD_ABI)
|
||||
fprintf (file, _ (" [old ABI]"));
|
||||
fprintf (file, _(" [old ABI]"));
|
||||
|
||||
if (flags & EF_SOFT_FLOAT)
|
||||
fprintf (file, _ (" [software FP]"));
|
||||
fprintf (file, _(" [software FP]"));
|
||||
|
||||
flags &= ~(EF_INTERWORK | EF_APCS_26 | EF_APCS_FLOAT | EF_PIC
|
||||
| EF_NEW_ABI | EF_OLD_ABI | EF_SOFT_FLOAT);
|
||||
break;
|
||||
|
||||
case EF_ARM_EABI_VER1:
|
||||
fprintf (file, _ (" [Version1 EABI]"));
|
||||
fprintf (file, _(" [Version1 EABI]"));
|
||||
|
||||
if (flags & EF_ARM_SYMSARESORTED)
|
||||
fprintf (file, _ (" [sorted symbol table]"));
|
||||
fprintf (file, _(" [sorted symbol table]"));
|
||||
else
|
||||
fprintf (file, _ (" [unsorted symbol table]"));
|
||||
fprintf (file, _(" [unsorted symbol table]"));
|
||||
|
||||
flags &= ~ EF_ARM_SYMSARESORTED;
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf (file, _ (" <EABI version unrecognised>"));
|
||||
fprintf (file, _(" <EABI version unrecognised>"));
|
||||
break;
|
||||
}
|
||||
|
||||
flags &= ~ EF_ARM_EABIMASK;
|
||||
|
||||
if (flags & EF_ARM_RELEXEC)
|
||||
fprintf (file, _ (" [relocatable executable]"));
|
||||
fprintf (file, _(" [relocatable executable]"));
|
||||
|
||||
if (flags & EF_ARM_HASENTRY)
|
||||
fprintf (file, _ (" [has entry point]"));
|
||||
fprintf (file, _(" [has entry point]"));
|
||||
|
||||
flags &= ~ (EF_ARM_RELEXEC | EF_ARM_HASENTRY);
|
||||
|
||||
if (flags)
|
||||
fprintf (file, _ ("<Unrecognised flag bits set>"));
|
||||
fprintf (file, _("<Unrecognised flag bits set>"));
|
||||
|
||||
fputc ('\n', file);
|
||||
|
||||
@ -2311,10 +2306,12 @@ elf32_arm_check_relocs (abfd, info, sec, relocs)
|
||||
|
||||
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
||||
sym_hashes = elf_sym_hashes (abfd);
|
||||
sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof(Elf32_External_Sym);
|
||||
sym_hashes_end = sym_hashes
|
||||
+ symtab_hdr->sh_size / sizeof (Elf32_External_Sym);
|
||||
|
||||
if (!elf_bad_symtab (abfd))
|
||||
sym_hashes_end -= symtab_hdr->sh_info;
|
||||
|
||||
|
||||
rel_end = relocs + sec->reloc_count;
|
||||
for (rel = relocs; rel < rel_end; rel++)
|
||||
{
|
||||
@ -2561,7 +2558,7 @@ elf32_arm_check_relocs (abfd, info, sec, relocs)
|
||||
|
||||
/* Find the nearest line to a particular section and offset, for error
|
||||
reporting. This code is a duplicate of the code in elf.c, except
|
||||
that it also accepts STT_ARM_TFUNC as a symbol that names a function. */
|
||||
that it also accepts STT_ARM_TFUNC as a symbol that names a function. */
|
||||
|
||||
static boolean
|
||||
elf32_arm_find_nearest_line
|
||||
@ -2722,7 +2719,6 @@ elf32_arm_adjust_dynamic_symbol (info, h)
|
||||
|
||||
/* We also need to make an entry in the .got.plt section, which
|
||||
will be placed in the .got section by the linker script. */
|
||||
|
||||
s = bfd_get_section_by_name (dynobj, ".got.plt");
|
||||
BFD_ASSERT (s != NULL);
|
||||
s->_raw_size += 4;
|
||||
@ -2767,7 +2763,6 @@ elf32_arm_adjust_dynamic_symbol (info, h)
|
||||
determine the address it must put in the global offset table, so
|
||||
both the dynamic object and the regular object will refer to the
|
||||
same memory location for the variable. */
|
||||
|
||||
s = bfd_get_section_by_name (dynobj, ".dynbss");
|
||||
BFD_ASSERT (s != NULL);
|
||||
|
||||
@ -2980,7 +2975,7 @@ elf32_arm_size_dynamic_sections (output_bfd, info)
|
||||
|
||||
if (plt)
|
||||
{
|
||||
if (! bfd_elf32_add_dynamic_entry (info, DT_PLTGOT, 0)
|
||||
if ( ! bfd_elf32_add_dynamic_entry (info, DT_PLTGOT, 0)
|
||||
|| ! bfd_elf32_add_dynamic_entry (info, DT_PLTRELSZ, 0)
|
||||
|| ! bfd_elf32_add_dynamic_entry (info, DT_PLTREL, DT_REL)
|
||||
|| ! bfd_elf32_add_dynamic_entry (info, DT_JMPREL, 0))
|
||||
@ -2989,7 +2984,7 @@ elf32_arm_size_dynamic_sections (output_bfd, info)
|
||||
|
||||
if (relocs)
|
||||
{
|
||||
if (! bfd_elf32_add_dynamic_entry (info, DT_REL, 0)
|
||||
if ( ! bfd_elf32_add_dynamic_entry (info, DT_REL, 0)
|
||||
|| ! bfd_elf32_add_dynamic_entry (info, DT_RELSZ, 0)
|
||||
|| ! bfd_elf32_add_dynamic_entry (info, DT_RELENT,
|
||||
sizeof (Elf32_External_Rel)))
|
||||
@ -3119,7 +3114,6 @@ elf32_arm_finish_dynamic_symbol (output_bfd, info, h, sym)
|
||||
|
||||
/* This symbol has an entry in the global offset table. Set it
|
||||
up. */
|
||||
|
||||
sgot = bfd_get_section_by_name (dynobj, ".got");
|
||||
srel = bfd_get_section_by_name (dynobj, ".rel.got");
|
||||
BFD_ASSERT (sgot != NULL && srel != NULL);
|
||||
@ -3154,7 +3148,6 @@ elf32_arm_finish_dynamic_symbol (output_bfd, info, h, sym)
|
||||
Elf_Internal_Rel rel;
|
||||
|
||||
/* This symbol needs a copy reloc. Set it up. */
|
||||
|
||||
BFD_ASSERT (h->dynindx != -1
|
||||
&& (h->root.type == bfd_link_hash_defined
|
||||
|| h->root.type == bfd_link_hash_defweak));
|
||||
@ -3208,6 +3201,7 @@ elf32_arm_finish_dynamic_sections (output_bfd, info)
|
||||
|
||||
dyncon = (Elf32_External_Dyn *) sdyn->contents;
|
||||
dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->_raw_size);
|
||||
|
||||
for (; dyncon < dynconend; dyncon++)
|
||||
{
|
||||
Elf_Internal_Dyn dyn;
|
||||
@ -3298,7 +3292,7 @@ elf32_arm_post_process_headers (abfd, link_info)
|
||||
bfd * abfd;
|
||||
struct bfd_link_info * link_info ATTRIBUTE_UNUSED;
|
||||
{
|
||||
Elf_Internal_Ehdr * i_ehdrp; /* Elf file header, internal form */
|
||||
Elf_Internal_Ehdr * i_ehdrp; /* ELF file header, internal form. */
|
||||
|
||||
i_ehdrp = elf_elfheader (abfd);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user