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
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"
#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]! */
/* 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] */
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
/* 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. */
};
/* Arm ELF linker hash entry. */
-
struct elf32_arm_link_hash_entry
{
struct elf_link_hash_entry root;
};
/* 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, \
#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. */
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)
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;
/* 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));
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);
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;
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);
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
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;
s = bfd_get_section_by_name
(globals->bfd_of_glue_owner, ARM2THUMB_GLUE_SECTION_NAME);
-
BFD_ASSERT (s != NULL);
tmp_name = ((char *)
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,
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,
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);
/* 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;
/* 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);
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));
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;
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,
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))
}
/* 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];
/* 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;
/* 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;
unsigned int low_bits;
unsigned int high_bits;
-
BFD_ASSERT ((rel_off & 1) != 1);
rel_off >>= 1; /* Half word aligned address. */
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)
&& !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;
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),
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)
&& !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;
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
}
/* 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,
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
/* 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,
{
/* 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;
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;
}
}
- /* Perform a signed range check. */
signed_addend = value;
signed_addend >>= howto->rightshift;
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;
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;
{
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;
}
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);
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,
case R_ARM_GOTPC:
/* Use global offset table as symbol value. */
-
BFD_ASSERT (sgot != NULL);
if (sgot == NULL)
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;
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
/* 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
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,
h = NULL;
sym = NULL;
sec = NULL;
+
if (r_symndx < symtab_hdr->sh_info)
{
sym = local_syms + r_symndx;
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;
/* 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:
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:
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));
}
}
/* Copy backend specific data from one object module to another. */
+
static boolean
elf32_arm_copy_private_bfd_data (ibfd, obfd)
bfd *ibfd;
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));
/* 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;
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;
/* 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;
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,
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;
_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))
{
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);
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++)
{
/* 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
/* 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;
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);
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))
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)))
/* 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);
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));
dyncon = (Elf32_External_Dyn *) sdyn->contents;
dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->_raw_size);
+
for (; dyncon < dynconend; dyncon++)
{
Elf_Internal_Dyn dyn;
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);