Update soruces to make alpha, arc and arm targets compile cleanly
with -Wc++-compat: * config/tc-alpha.c: Add casts. (extended_bfd_reloc_code_real_type): New type. Used to avoid enumeration conversion warnings. (struct alpha_fixup, void assemble_insn, assemble_insn) (assemble_tokens): Use new type. * ecoff.c: Add casts. (mark_stabs): Use enumeration names. * config/obj-elf.c: Add cast * config/tc-arc.c: Add casts. * config/obj-aout.h (text_section,data_section,bss_section): Make extern. * config/obj-elf.c: Add cast. * config/tc-arm.c: Add casts. (X, TxCE, TxCE, TxC3, TxC3w, TxCM_, TxCM, TUE, TUF, CE, CL, cCE) (cCL, C3E, xCM_, nUF, nCE_tag): Change input format to avoid the need for keywords as arguments. * ecoff.c: Add casts. * ecofflink.c: Add casts. * elf64-alpha.c: Add casts. (struct alpha_elf_got_entry, struct alpha_elf_reloc_entry): Move to top level. (SKIP_HOWTO): Use enum name. * elf32-arm.c: Add casts. (elf32_arm_vxworks_bed): Update code to avoid multiple declarations. (struct map_stub): Move to top level. * arc-dis.c Fix casts. * arc-ext.c: Add casts. * arm-dis.c (enum opcode_sentinel_enum): Gave name to anonymous enum. * emultempl/armelf.em: Add casts.
This commit is contained in:
parent
fa9efd0fbc
commit
21d799b5c4
18 changed files with 1841 additions and 1733 deletions
|
@ -1,3 +1,18 @@
|
||||||
|
2009-09-25 Martin Thuresson <martint@google.com>
|
||||||
|
|
||||||
|
Update soruces to make alpha and arm targets compile cleanly with
|
||||||
|
-Wc++-compat:
|
||||||
|
* ecoff.c: Add casts.
|
||||||
|
* ecofflink.c: Add casts.
|
||||||
|
* elf64-alpha.c: Add casts.
|
||||||
|
(struct alpha_elf_got_entry, struct alpha_elf_reloc_entry): Move
|
||||||
|
to top level.
|
||||||
|
(SKIP_HOWTO): Use enum name.
|
||||||
|
* elf32-arm.c: Add casts.
|
||||||
|
(elf32_arm_vxworks_bed): Update code to avoid multiple
|
||||||
|
declarations.
|
||||||
|
(struct map_stub): Move to top level.
|
||||||
|
|
||||||
2009-09-24 H.J. Lu <hongjiu.lu@intel.com>
|
2009-09-24 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR ld/10630
|
PR ld/10630
|
||||||
|
|
39
bfd/ecoff.c
39
bfd/ecoff.c
|
@ -89,7 +89,7 @@ _bfd_ecoff_mkobject (bfd *abfd)
|
||||||
{
|
{
|
||||||
bfd_size_type amt = sizeof (ecoff_data_type);
|
bfd_size_type amt = sizeof (ecoff_data_type);
|
||||||
|
|
||||||
abfd->tdata.ecoff_obj_data = bfd_zalloc (abfd, amt);
|
abfd->tdata.ecoff_obj_data = (struct ecoff_tdata *) bfd_zalloc (abfd, amt);
|
||||||
if (abfd->tdata.ecoff_obj_data == NULL)
|
if (abfd->tdata.ecoff_obj_data == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -193,7 +193,7 @@ _bfd_ecoff_new_section_hook (bfd *abfd, asection *section)
|
||||||
bfd_boolean
|
bfd_boolean
|
||||||
_bfd_ecoff_set_arch_mach_hook (bfd *abfd, void * filehdr)
|
_bfd_ecoff_set_arch_mach_hook (bfd *abfd, void * filehdr)
|
||||||
{
|
{
|
||||||
struct internal_filehdr *internal_f = filehdr;
|
struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
|
||||||
enum bfd_architecture arch;
|
enum bfd_architecture arch;
|
||||||
unsigned long mach;
|
unsigned long mach;
|
||||||
|
|
||||||
|
@ -366,7 +366,7 @@ _bfd_ecoff_styp_to_sec_flags (bfd *abfd ATTRIBUTE_UNUSED,
|
||||||
asection *section ATTRIBUTE_UNUSED,
|
asection *section ATTRIBUTE_UNUSED,
|
||||||
flagword * flags_ptr)
|
flagword * flags_ptr)
|
||||||
{
|
{
|
||||||
struct internal_scnhdr *internal_s = hdr;
|
struct internal_scnhdr *internal_s = (struct internal_scnhdr *) hdr;
|
||||||
long styp_flags = internal_s->s_flags;
|
long styp_flags = internal_s->s_flags;
|
||||||
flagword sec_flags = 0;
|
flagword sec_flags = 0;
|
||||||
|
|
||||||
|
@ -614,7 +614,7 @@ _bfd_ecoff_slurp_symbolic_info (bfd *abfd,
|
||||||
the symbols, so we swap them here. */
|
the symbols, so we swap them here. */
|
||||||
amt = internal_symhdr->ifdMax;
|
amt = internal_symhdr->ifdMax;
|
||||||
amt *= sizeof (struct fdr);
|
amt *= sizeof (struct fdr);
|
||||||
debug->fdr = bfd_alloc (abfd, amt);
|
debug->fdr = (FDR *) bfd_alloc (abfd, amt);
|
||||||
if (debug->fdr == NULL)
|
if (debug->fdr == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
external_fdr_size = backend->debug_swap.external_fdr_size;
|
external_fdr_size = backend->debug_swap.external_fdr_size;
|
||||||
|
@ -882,7 +882,7 @@ _bfd_ecoff_slurp_symbol_table (bfd *abfd)
|
||||||
|
|
||||||
internal_size = bfd_get_symcount (abfd);
|
internal_size = bfd_get_symcount (abfd);
|
||||||
internal_size *= sizeof (ecoff_symbol_type);
|
internal_size *= sizeof (ecoff_symbol_type);
|
||||||
internal = bfd_alloc (abfd, internal_size);
|
internal = (ecoff_symbol_type *) bfd_alloc (abfd, internal_size);
|
||||||
if (internal == NULL)
|
if (internal == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -1580,11 +1580,11 @@ ecoff_slurp_reloc_table (bfd *abfd,
|
||||||
|
|
||||||
amt = section->reloc_count;
|
amt = section->reloc_count;
|
||||||
amt *= sizeof (arelent);
|
amt *= sizeof (arelent);
|
||||||
internal_relocs = bfd_alloc (abfd, amt);
|
internal_relocs = (arelent *) bfd_alloc (abfd, amt);
|
||||||
|
|
||||||
external_reloc_size = backend->external_reloc_size;
|
external_reloc_size = backend->external_reloc_size;
|
||||||
amt = external_reloc_size * section->reloc_count;
|
amt = external_reloc_size * section->reloc_count;
|
||||||
external_relocs = bfd_alloc (abfd, amt);
|
external_relocs = (char *) bfd_alloc (abfd, amt);
|
||||||
if (internal_relocs == NULL || external_relocs == NULL)
|
if (internal_relocs == NULL || external_relocs == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (bfd_seek (abfd, section->rel_filepos, SEEK_SET) != 0)
|
if (bfd_seek (abfd, section->rel_filepos, SEEK_SET) != 0)
|
||||||
|
@ -1730,7 +1730,8 @@ _bfd_ecoff_find_nearest_line (bfd *abfd,
|
||||||
{
|
{
|
||||||
bfd_size_type amt = sizeof (struct ecoff_find_line);
|
bfd_size_type amt = sizeof (struct ecoff_find_line);
|
||||||
|
|
||||||
ecoff_data (abfd)->find_line_info = bfd_zalloc (abfd, amt);
|
ecoff_data (abfd)->find_line_info =
|
||||||
|
(struct ecoff_find_line *) bfd_zalloc (abfd, amt);
|
||||||
if (ecoff_data (abfd)->find_line_info == NULL)
|
if (ecoff_data (abfd)->find_line_info == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1955,7 +1956,7 @@ ecoff_compute_section_file_positions (bfd *abfd)
|
||||||
/* Sort the sections by VMA. */
|
/* Sort the sections by VMA. */
|
||||||
amt = abfd->section_count;
|
amt = abfd->section_count;
|
||||||
amt *= sizeof (asection *);
|
amt *= sizeof (asection *);
|
||||||
sorted_hdrs = bfd_malloc (amt);
|
sorted_hdrs = (asection **) bfd_malloc (amt);
|
||||||
if (sorted_hdrs == NULL)
|
if (sorted_hdrs == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
for (current = abfd->sections, i = 0;
|
for (current = abfd->sections, i = 0;
|
||||||
|
@ -2908,7 +2909,7 @@ _bfd_ecoff_slurp_armap (bfd *abfd)
|
||||||
parsed_size = mapdata->parsed_size;
|
parsed_size = mapdata->parsed_size;
|
||||||
bfd_release (abfd, (void *) mapdata);
|
bfd_release (abfd, (void *) mapdata);
|
||||||
|
|
||||||
raw_armap = bfd_alloc (abfd, parsed_size);
|
raw_armap = (char *) bfd_alloc (abfd, parsed_size);
|
||||||
if (raw_armap == NULL)
|
if (raw_armap == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -2975,7 +2976,7 @@ _bfd_ecoff_slurp_armap (bfd *abfd)
|
||||||
|
|
||||||
amt = ardata->symdef_count;
|
amt = ardata->symdef_count;
|
||||||
amt *= sizeof (struct symdef);
|
amt *= sizeof (struct symdef);
|
||||||
symdef_ptr = bfd_alloc (abfd, amt);
|
symdef_ptr = (struct symdef *) bfd_alloc (abfd, amt);
|
||||||
if (!symdef_ptr)
|
if (!symdef_ptr)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -3091,7 +3092,7 @@ _bfd_ecoff_write_armap (bfd *abfd,
|
||||||
if (bfd_bwrite ((void *) temp, (bfd_size_type) 4, abfd) != 4)
|
if (bfd_bwrite ((void *) temp, (bfd_size_type) 4, abfd) != 4)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
hashtable = bfd_zalloc (abfd, symdefsize);
|
hashtable = (bfd_byte *) bfd_zalloc (abfd, symdefsize);
|
||||||
if (!hashtable)
|
if (!hashtable)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -3211,7 +3212,7 @@ _bfd_ecoff_bfd_link_hash_table_create (bfd *abfd)
|
||||||
struct ecoff_link_hash_table *ret;
|
struct ecoff_link_hash_table *ret;
|
||||||
bfd_size_type amt = sizeof (struct ecoff_link_hash_table);
|
bfd_size_type amt = sizeof (struct ecoff_link_hash_table);
|
||||||
|
|
||||||
ret = bfd_malloc (amt);
|
ret = (struct ecoff_link_hash_table *) bfd_malloc (amt);
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
if (!_bfd_link_hash_table_init (&ret->root, abfd,
|
if (!_bfd_link_hash_table_init (&ret->root, abfd,
|
||||||
|
@ -3269,7 +3270,7 @@ ecoff_link_add_externals (bfd *abfd,
|
||||||
|
|
||||||
amt = ext_count;
|
amt = ext_count;
|
||||||
amt *= sizeof (struct bfd_link_hash_entry *);
|
amt *= sizeof (struct bfd_link_hash_entry *);
|
||||||
sym_hash = bfd_alloc (abfd, amt);
|
sym_hash = (struct bfd_link_hash_entry **) bfd_alloc (abfd, amt);
|
||||||
if (!sym_hash)
|
if (!sym_hash)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
ecoff_data (abfd)->sym_hashes = (struct ecoff_link_hash_entry **) sym_hash;
|
ecoff_data (abfd)->sym_hashes = (struct ecoff_link_hash_entry **) sym_hash;
|
||||||
|
@ -3483,7 +3484,7 @@ ecoff_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
|
||||||
|| bfd_bread (external_ext, esize, abfd) != esize)
|
|| bfd_bread (external_ext, esize, abfd) != esize)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
|
|
||||||
ssext = bfd_malloc ((bfd_size_type) symhdr->issExtMax);
|
ssext = (char *) bfd_malloc ((bfd_size_type) symhdr->issExtMax);
|
||||||
if (ssext == NULL && symhdr->issExtMax != 0)
|
if (ssext == NULL && symhdr->issExtMax != 0)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
|
|
||||||
|
@ -3549,7 +3550,7 @@ ecoff_link_check_archive_element (bfd *abfd,
|
||||||
|| bfd_bread (external_ext, esize, abfd) != esize)
|
|| bfd_bread (external_ext, esize, abfd) != esize)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
|
|
||||||
ssext = bfd_malloc ((bfd_size_type) symhdr->issExtMax);
|
ssext = (char *) bfd_malloc ((bfd_size_type) symhdr->issExtMax);
|
||||||
if (ssext == NULL && symhdr->issExtMax != 0)
|
if (ssext == NULL && symhdr->issExtMax != 0)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
|
|
||||||
|
@ -3838,7 +3839,7 @@ ecoff_final_link_debug_accumulate (bfd *output_bfd,
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
bfd_size_type amt = (bfd_size_type) size * symhdr->count; \
|
bfd_size_type amt = (bfd_size_type) size * symhdr->count; \
|
||||||
debug->ptr = bfd_malloc (amt); \
|
debug->ptr = (type) bfd_malloc (amt); \
|
||||||
if (debug->ptr == NULL) \
|
if (debug->ptr == NULL) \
|
||||||
{ \
|
{ \
|
||||||
ret = FALSE; \
|
ret = FALSE; \
|
||||||
|
@ -4083,7 +4084,7 @@ ecoff_reloc_link_order (bfd *output_bfd,
|
||||||
bfd_byte *buf;
|
bfd_byte *buf;
|
||||||
|
|
||||||
size = bfd_get_reloc_size (rel.howto);
|
size = bfd_get_reloc_size (rel.howto);
|
||||||
buf = bfd_zmalloc (size);
|
buf = (bfd_byte *) bfd_zmalloc (size);
|
||||||
if (buf == NULL)
|
if (buf == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
rstat = _bfd_relocate_contents (rel.howto, output_bfd,
|
rstat = _bfd_relocate_contents (rel.howto, output_bfd,
|
||||||
|
@ -4192,7 +4193,7 @@ ecoff_reloc_link_order (bfd *output_bfd,
|
||||||
|
|
||||||
/* Get some memory and swap out the reloc. */
|
/* Get some memory and swap out the reloc. */
|
||||||
external_reloc_size = ecoff_backend (output_bfd)->external_reloc_size;
|
external_reloc_size = ecoff_backend (output_bfd)->external_reloc_size;
|
||||||
rbuf = bfd_malloc (external_reloc_size);
|
rbuf = (bfd_byte *) bfd_malloc (external_reloc_size);
|
||||||
if (rbuf == NULL)
|
if (rbuf == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Routines to link ECOFF debugging information.
|
/* Routines to link ECOFF debugging information.
|
||||||
Copyright 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003,
|
Copyright 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003,
|
||||||
2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||||
Written by Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>.
|
Written by Ian Lance Taylor, Cygnus Support, <ian@cygnus.com>.
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
This file is part of BFD, the Binary File Descriptor library.
|
||||||
|
@ -1084,8 +1084,8 @@ ecoff_add_string (ainfo, info, debug, fdr, string)
|
||||||
len = strlen (string);
|
len = strlen (string);
|
||||||
if (info->relocatable)
|
if (info->relocatable)
|
||||||
{
|
{
|
||||||
if (!add_memory_shuffle (ainfo, &ainfo->ss, &ainfo->ss_end, (PTR) string,
|
if (!add_memory_shuffle (ainfo, &ainfo->ss, &ainfo->ss_end,
|
||||||
len + 1))
|
(bfd_byte *) string, len + 1))
|
||||||
return -1;
|
return -1;
|
||||||
ret = symhdr->issMax;
|
ret = symhdr->issMax;
|
||||||
symhdr->issMax += len + 1;
|
symhdr->issMax += len + 1;
|
||||||
|
@ -1207,7 +1207,7 @@ bfd_ecoff_debug_accumulate_other (handle, output_bfd, output_debug,
|
||||||
}
|
}
|
||||||
(*swap_sym_out) (output_bfd, &internal_sym, external_sym);
|
(*swap_sym_out) (output_bfd, &internal_sym, external_sym);
|
||||||
add_memory_shuffle (ainfo, &ainfo->sym, &ainfo->sym_end,
|
add_memory_shuffle (ainfo, &ainfo->sym, &ainfo->sym_end,
|
||||||
external_sym,
|
(bfd_byte *) external_sym,
|
||||||
(unsigned long) output_swap->external_sym_size);
|
(unsigned long) output_swap->external_sym_size);
|
||||||
++fdr.csym;
|
++fdr.csym;
|
||||||
++output_symhdr->isymMax;
|
++output_symhdr->isymMax;
|
||||||
|
@ -1228,7 +1228,7 @@ bfd_ecoff_debug_accumulate_other (handle, output_bfd, output_debug,
|
||||||
}
|
}
|
||||||
(*output_swap->swap_fdr_out) (output_bfd, &fdr, external_fdr);
|
(*output_swap->swap_fdr_out) (output_bfd, &fdr, external_fdr);
|
||||||
add_memory_shuffle (ainfo, &ainfo->fdr, &ainfo->fdr_end,
|
add_memory_shuffle (ainfo, &ainfo->fdr, &ainfo->fdr_end,
|
||||||
external_fdr,
|
(bfd_byte *) external_fdr,
|
||||||
(unsigned long) output_swap->external_fdr_size);
|
(unsigned long) output_swap->external_fdr_size);
|
||||||
|
|
||||||
++output_symhdr->ifdMax;
|
++output_symhdr->ifdMax;
|
||||||
|
@ -1338,8 +1338,8 @@ bfd_ecoff_debug_one_external (abfd, debug, swap, name, esym)
|
||||||
- (char *) debug->external_ext)
|
- (char *) debug->external_ext)
|
||||||
< (symhdr->iextMax + 1) * external_ext_size)
|
< (symhdr->iextMax + 1) * external_ext_size)
|
||||||
{
|
{
|
||||||
char *external_ext = debug->external_ext;
|
char *external_ext = (char *) debug->external_ext;
|
||||||
char *external_ext_end = debug->external_ext_end;
|
char *external_ext_end = (char *) debug->external_ext_end;
|
||||||
if (! ecoff_add_bytes ((char **) &external_ext,
|
if (! ecoff_add_bytes ((char **) &external_ext,
|
||||||
(char **) &external_ext_end,
|
(char **) &external_ext_end,
|
||||||
(symhdr->iextMax + 1) * (size_t) external_ext_size))
|
(symhdr->iextMax + 1) * (size_t) external_ext_size))
|
||||||
|
@ -1503,7 +1503,7 @@ ecoff_write_symhdr (abfd, debug, swap, where)
|
||||||
SET (cbExtOffset, iextMax, swap->external_ext_size);
|
SET (cbExtOffset, iextMax, swap->external_ext_size);
|
||||||
#undef SET
|
#undef SET
|
||||||
|
|
||||||
buff = (PTR) bfd_malloc (swap->external_hdr_size);
|
buff = (char *) bfd_malloc (swap->external_hdr_size);
|
||||||
if (buff == NULL && swap->external_hdr_size != 0)
|
if (buff == NULL && swap->external_hdr_size != 0)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
|
|
||||||
|
|
570
bfd/elf32-arm.c
570
bfd/elf32-arm.c
|
@ -61,8 +61,6 @@
|
||||||
#define ARM_ELF_ABI_VERSION 0
|
#define ARM_ELF_ABI_VERSION 0
|
||||||
#define ARM_ELF_OS_ABI_VERSION ELFOSABI_ARM
|
#define ARM_ELF_OS_ABI_VERSION ELFOSABI_ARM
|
||||||
|
|
||||||
static struct elf_backend_data elf32_arm_vxworks_bed;
|
|
||||||
|
|
||||||
static bfd_boolean elf32_arm_write_section (bfd *output_bfd,
|
static bfd_boolean elf32_arm_write_section (bfd *output_bfd,
|
||||||
struct bfd_link_info *link_info,
|
struct bfd_link_info *link_info,
|
||||||
asection *sec,
|
asection *sec,
|
||||||
|
@ -2523,6 +2521,17 @@ struct elf32_arm_link_hash_entry
|
||||||
((struct elf32_arm_stub_hash_entry *) \
|
((struct elf32_arm_stub_hash_entry *) \
|
||||||
bfd_hash_lookup ((table), (string), (create), (copy)))
|
bfd_hash_lookup ((table), (string), (create), (copy)))
|
||||||
|
|
||||||
|
/* Array to keep track of which stub sections have been created, and
|
||||||
|
information on stub grouping. */
|
||||||
|
struct map_stub
|
||||||
|
{
|
||||||
|
/* This is the section to which stubs in the group will be
|
||||||
|
attached. */
|
||||||
|
asection *link_sec;
|
||||||
|
/* The stub section. */
|
||||||
|
asection *stub_sec;
|
||||||
|
};
|
||||||
|
|
||||||
/* ARM ELF linker hash table. */
|
/* ARM ELF linker hash table. */
|
||||||
struct elf32_arm_link_hash_table
|
struct elf32_arm_link_hash_table
|
||||||
{
|
{
|
||||||
|
@ -2638,14 +2647,7 @@ struct elf32_arm_link_hash_table
|
||||||
|
|
||||||
/* Array to keep track of which stub sections have been created, and
|
/* Array to keep track of which stub sections have been created, and
|
||||||
information on stub grouping. */
|
information on stub grouping. */
|
||||||
struct map_stub
|
struct map_stub *stub_group;
|
||||||
{
|
|
||||||
/* This is the section to which stubs in the group will be
|
|
||||||
attached. */
|
|
||||||
asection *link_sec;
|
|
||||||
/* The stub section. */
|
|
||||||
asection *stub_sec;
|
|
||||||
} *stub_group;
|
|
||||||
|
|
||||||
/* Assorted information used by elf32_arm_size_stubs. */
|
/* Assorted information used by elf32_arm_size_stubs. */
|
||||||
unsigned int bfd_count;
|
unsigned int bfd_count;
|
||||||
|
@ -2666,7 +2668,8 @@ elf32_arm_link_hash_newfunc (struct bfd_hash_entry * entry,
|
||||||
/* Allocate the structure if it has not already been allocated by a
|
/* Allocate the structure if it has not already been allocated by a
|
||||||
subclass. */
|
subclass. */
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
ret = bfd_hash_allocate (table, sizeof (struct elf32_arm_link_hash_entry));
|
ret = (struct elf32_arm_link_hash_entry *)
|
||||||
|
bfd_hash_allocate (table, sizeof (struct elf32_arm_link_hash_entry));
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
return (struct bfd_hash_entry *) ret;
|
return (struct bfd_hash_entry *) ret;
|
||||||
|
|
||||||
|
@ -2700,8 +2703,8 @@ stub_hash_newfunc (struct bfd_hash_entry *entry,
|
||||||
subclass. */
|
subclass. */
|
||||||
if (entry == NULL)
|
if (entry == NULL)
|
||||||
{
|
{
|
||||||
entry = bfd_hash_allocate (table,
|
entry = (struct bfd_hash_entry *)
|
||||||
sizeof (struct elf32_arm_stub_hash_entry));
|
bfd_hash_allocate (table, sizeof (struct elf32_arm_stub_hash_entry));
|
||||||
if (entry == NULL)
|
if (entry == NULL)
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
@ -2882,7 +2885,7 @@ elf32_arm_link_hash_table_create (bfd *abfd)
|
||||||
struct elf32_arm_link_hash_table *ret;
|
struct elf32_arm_link_hash_table *ret;
|
||||||
bfd_size_type amt = sizeof (struct elf32_arm_link_hash_table);
|
bfd_size_type amt = sizeof (struct elf32_arm_link_hash_table);
|
||||||
|
|
||||||
ret = bfd_malloc (amt);
|
ret = (struct elf32_arm_link_hash_table *) bfd_malloc (amt);
|
||||||
if (ret == NULL)
|
if (ret == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -3248,7 +3251,7 @@ elf32_arm_stub_name (const asection *input_section,
|
||||||
if (hash)
|
if (hash)
|
||||||
{
|
{
|
||||||
len = 8 + 1 + strlen (hash->root.root.root.string) + 1 + 8 + 1;
|
len = 8 + 1 + strlen (hash->root.root.root.string) + 1 + 8 + 1;
|
||||||
stub_name = bfd_malloc (len);
|
stub_name = (char *) bfd_malloc (len);
|
||||||
if (stub_name != NULL)
|
if (stub_name != NULL)
|
||||||
sprintf (stub_name, "%08x_%s+%x",
|
sprintf (stub_name, "%08x_%s+%x",
|
||||||
input_section->id & 0xffffffff,
|
input_section->id & 0xffffffff,
|
||||||
|
@ -3258,7 +3261,7 @@ elf32_arm_stub_name (const asection *input_section,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
|
len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
|
||||||
stub_name = bfd_malloc (len);
|
stub_name = (char *) bfd_malloc (len);
|
||||||
if (stub_name != NULL)
|
if (stub_name != NULL)
|
||||||
sprintf (stub_name, "%08x_%x:%x+%x",
|
sprintf (stub_name, "%08x_%x:%x+%x",
|
||||||
input_section->id & 0xffffffff,
|
input_section->id & 0xffffffff,
|
||||||
|
@ -3343,7 +3346,7 @@ elf32_arm_create_or_find_stub_sec (asection **link_sec_p, asection *section,
|
||||||
|
|
||||||
namelen = strlen (link_sec->name);
|
namelen = strlen (link_sec->name);
|
||||||
len = namelen + sizeof (STUB_SUFFIX);
|
len = namelen + sizeof (STUB_SUFFIX);
|
||||||
s_name = bfd_alloc (htab->stub_bfd, len);
|
s_name = (char *) bfd_alloc (htab->stub_bfd, len);
|
||||||
if (s_name == NULL)
|
if (s_name == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -3725,7 +3728,7 @@ elf32_arm_setup_section_lists (bfd *output_bfd,
|
||||||
htab->bfd_count = bfd_count;
|
htab->bfd_count = bfd_count;
|
||||||
|
|
||||||
amt = sizeof (struct map_stub) * (top_id + 1);
|
amt = sizeof (struct map_stub) * (top_id + 1);
|
||||||
htab->stub_group = bfd_zmalloc (amt);
|
htab->stub_group = (struct map_stub *) bfd_zmalloc (amt);
|
||||||
if (htab->stub_group == NULL)
|
if (htab->stub_group == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -3742,7 +3745,7 @@ elf32_arm_setup_section_lists (bfd *output_bfd,
|
||||||
|
|
||||||
htab->top_index = top_index;
|
htab->top_index = top_index;
|
||||||
amt = sizeof (asection *) * (top_index + 1);
|
amt = sizeof (asection *) * (top_index + 1);
|
||||||
input_list = bfd_malloc (amt);
|
input_list = (asection **) bfd_malloc (amt);
|
||||||
htab->input_list = input_list;
|
htab->input_list = input_list;
|
||||||
if (input_list == NULL)
|
if (input_list == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -3899,7 +3902,8 @@ group_sections (struct elf32_arm_link_hash_table *htab,
|
||||||
static int
|
static int
|
||||||
a8_reloc_compare (const void *a, const void *b)
|
a8_reloc_compare (const void *a, const void *b)
|
||||||
{
|
{
|
||||||
const struct a8_erratum_reloc *ra = a, *rb = b;
|
const struct a8_erratum_reloc *ra = (const struct a8_erratum_reloc *) a;
|
||||||
|
const struct a8_erratum_reloc *rb = (const struct a8_erratum_reloc *) b;
|
||||||
|
|
||||||
if (ra->from < rb->from)
|
if (ra->from < rb->from)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -4024,7 +4028,8 @@ cortex_a8_erratum_scan (bfd *input_bfd,
|
||||||
struct a8_erratum_reloc key, *found;
|
struct a8_erratum_reloc key, *found;
|
||||||
|
|
||||||
key.from = base_vma + i;
|
key.from = base_vma + i;
|
||||||
found = bsearch (&key, a8_relocs, num_a8_relocs,
|
found = (struct a8_erratum_reloc *)
|
||||||
|
bsearch (&key, a8_relocs, num_a8_relocs,
|
||||||
sizeof (struct a8_erratum_reloc),
|
sizeof (struct a8_erratum_reloc),
|
||||||
&a8_reloc_compare);
|
&a8_reloc_compare);
|
||||||
|
|
||||||
|
@ -4143,7 +4148,8 @@ cortex_a8_erratum_scan (bfd *input_bfd,
|
||||||
if (num_a8_fixes == a8_fix_table_size)
|
if (num_a8_fixes == a8_fix_table_size)
|
||||||
{
|
{
|
||||||
a8_fix_table_size *= 2;
|
a8_fix_table_size *= 2;
|
||||||
a8_fixes = bfd_realloc (a8_fixes,
|
a8_fixes = (struct a8_erratum_fix *)
|
||||||
|
bfd_realloc (a8_fixes,
|
||||||
sizeof (struct a8_erratum_fix)
|
sizeof (struct a8_erratum_fix)
|
||||||
* a8_fix_table_size);
|
* a8_fix_table_size);
|
||||||
}
|
}
|
||||||
|
@ -4166,7 +4172,7 @@ cortex_a8_erratum_scan (bfd *input_bfd,
|
||||||
|
|
||||||
if (!stub_name)
|
if (!stub_name)
|
||||||
{
|
{
|
||||||
stub_name = bfd_malloc (8 + 1 + 8 + 1);
|
stub_name = (char *) bfd_malloc (8 + 1 + 8 + 1);
|
||||||
if (stub_name != NULL)
|
if (stub_name != NULL)
|
||||||
sprintf (stub_name, "%x:%x", section->id, i);
|
sprintf (stub_name, "%x:%x", section->id, i);
|
||||||
}
|
}
|
||||||
|
@ -4225,10 +4231,10 @@ elf32_arm_size_stubs (bfd *output_bfd,
|
||||||
|
|
||||||
if (htab->fix_cortex_a8)
|
if (htab->fix_cortex_a8)
|
||||||
{
|
{
|
||||||
a8_fixes = bfd_zmalloc (sizeof (struct a8_erratum_fix)
|
a8_fixes = (struct a8_erratum_fix *)
|
||||||
* a8_fix_table_size);
|
bfd_zmalloc (sizeof (struct a8_erratum_fix) * a8_fix_table_size);
|
||||||
a8_relocs = bfd_zmalloc (sizeof (struct a8_erratum_reloc)
|
a8_relocs = (struct a8_erratum_reloc *)
|
||||||
* a8_reloc_table_size);
|
bfd_zmalloc (sizeof (struct a8_erratum_reloc) * a8_reloc_table_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Propagate mach to stub bfd, because it may not have been
|
/* Propagate mach to stub bfd, because it may not have been
|
||||||
|
@ -4539,8 +4545,8 @@ elf32_arm_size_stubs (bfd *output_bfd,
|
||||||
|
|
||||||
if (sym_name == NULL)
|
if (sym_name == NULL)
|
||||||
sym_name = "unnamed";
|
sym_name = "unnamed";
|
||||||
stub_entry->output_name
|
stub_entry->output_name = (char *)
|
||||||
= bfd_alloc (htab->stub_bfd,
|
bfd_alloc (htab->stub_bfd,
|
||||||
sizeof (THUMB2ARM_GLUE_ENTRY_NAME)
|
sizeof (THUMB2ARM_GLUE_ENTRY_NAME)
|
||||||
+ strlen (sym_name));
|
+ strlen (sym_name));
|
||||||
if (stub_entry->output_name == NULL)
|
if (stub_entry->output_name == NULL)
|
||||||
|
@ -4591,7 +4597,8 @@ elf32_arm_size_stubs (bfd *output_bfd,
|
||||||
if (num_a8_relocs == a8_reloc_table_size)
|
if (num_a8_relocs == a8_reloc_table_size)
|
||||||
{
|
{
|
||||||
a8_reloc_table_size *= 2;
|
a8_reloc_table_size *= 2;
|
||||||
a8_relocs = bfd_realloc (a8_relocs,
|
a8_relocs = (struct a8_erratum_reloc *)
|
||||||
|
bfd_realloc (a8_relocs,
|
||||||
sizeof (struct a8_erratum_reloc)
|
sizeof (struct a8_erratum_reloc)
|
||||||
* a8_reloc_table_size);
|
* a8_reloc_table_size);
|
||||||
}
|
}
|
||||||
|
@ -4757,7 +4764,7 @@ elf32_arm_build_stubs (struct bfd_link_info *info)
|
||||||
|
|
||||||
/* Allocate memory to hold the linker stubs. */
|
/* Allocate memory to hold the linker stubs. */
|
||||||
size = stub_sec->size;
|
size = stub_sec->size;
|
||||||
stub_sec->contents = bfd_zalloc (htab->stub_bfd, size);
|
stub_sec->contents = (unsigned char *) bfd_zalloc (htab->stub_bfd, size);
|
||||||
if (stub_sec->contents == NULL && size != 0)
|
if (stub_sec->contents == NULL && size != 0)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
stub_sec->size = 0;
|
stub_sec->size = 0;
|
||||||
|
@ -4790,7 +4797,7 @@ find_thumb_glue (struct bfd_link_info *link_info,
|
||||||
/* We need a pointer to the armelf specific hash table. */
|
/* We need a pointer to the armelf specific hash table. */
|
||||||
hash_table = elf32_arm_hash_table (link_info);
|
hash_table = elf32_arm_hash_table (link_info);
|
||||||
|
|
||||||
tmp_name = bfd_malloc ((bfd_size_type) strlen (name)
|
tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen (name)
|
||||||
+ strlen (THUMB2ARM_GLUE_ENTRY_NAME) + 1);
|
+ strlen (THUMB2ARM_GLUE_ENTRY_NAME) + 1);
|
||||||
|
|
||||||
BFD_ASSERT (tmp_name);
|
BFD_ASSERT (tmp_name);
|
||||||
|
@ -4824,7 +4831,7 @@ find_arm_glue (struct bfd_link_info *link_info,
|
||||||
/* We need a pointer to the elfarm specific hash table. */
|
/* We need a pointer to the elfarm specific hash table. */
|
||||||
hash_table = elf32_arm_hash_table (link_info);
|
hash_table = elf32_arm_hash_table (link_info);
|
||||||
|
|
||||||
tmp_name = bfd_malloc ((bfd_size_type) strlen (name)
|
tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen (name)
|
||||||
+ strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1);
|
+ strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1);
|
||||||
|
|
||||||
BFD_ASSERT (tmp_name);
|
BFD_ASSERT (tmp_name);
|
||||||
|
@ -4935,7 +4942,7 @@ arm_allocate_glue_section_space (bfd * abfd, bfd_size_type size, const char * na
|
||||||
s = bfd_get_section_by_name (abfd, name);
|
s = bfd_get_section_by_name (abfd, name);
|
||||||
BFD_ASSERT (s != NULL);
|
BFD_ASSERT (s != NULL);
|
||||||
|
|
||||||
contents = bfd_alloc (abfd, size);
|
contents = (bfd_byte *) bfd_alloc (abfd, size);
|
||||||
|
|
||||||
BFD_ASSERT (s->size == size);
|
BFD_ASSERT (s->size == size);
|
||||||
s->contents = contents;
|
s->contents = contents;
|
||||||
|
@ -4994,7 +5001,8 @@ record_arm_to_thumb_glue (struct bfd_link_info * link_info,
|
||||||
|
|
||||||
BFD_ASSERT (s != NULL);
|
BFD_ASSERT (s != NULL);
|
||||||
|
|
||||||
tmp_name = bfd_malloc ((bfd_size_type) strlen (name) + strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1);
|
tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen (name)
|
||||||
|
+ strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1);
|
||||||
|
|
||||||
BFD_ASSERT (tmp_name);
|
BFD_ASSERT (tmp_name);
|
||||||
|
|
||||||
|
@ -5071,7 +5079,8 @@ record_arm_bx_glue (struct bfd_link_info * link_info, int reg)
|
||||||
BFD_ASSERT (s != NULL);
|
BFD_ASSERT (s != NULL);
|
||||||
|
|
||||||
/* Add symbol for veneer. */
|
/* Add symbol for veneer. */
|
||||||
tmp_name = bfd_malloc ((bfd_size_type) strlen (ARM_BX_GLUE_ENTRY_NAME) + 1);
|
tmp_name = (char *)
|
||||||
|
bfd_malloc ((bfd_size_type) strlen (ARM_BX_GLUE_ENTRY_NAME) + 1);
|
||||||
|
|
||||||
BFD_ASSERT (tmp_name);
|
BFD_ASSERT (tmp_name);
|
||||||
|
|
||||||
|
@ -5108,7 +5117,8 @@ elf32_arm_section_map_add (asection *sec, char type, bfd_vma vma)
|
||||||
|
|
||||||
if (sec_data->map == NULL)
|
if (sec_data->map == NULL)
|
||||||
{
|
{
|
||||||
sec_data->map = bfd_malloc (sizeof (elf32_arm_section_map));
|
sec_data->map = (elf32_arm_section_map *)
|
||||||
|
bfd_malloc (sizeof (elf32_arm_section_map));
|
||||||
sec_data->mapcount = 0;
|
sec_data->mapcount = 0;
|
||||||
sec_data->mapsize = 1;
|
sec_data->mapsize = 1;
|
||||||
}
|
}
|
||||||
|
@ -5118,7 +5128,8 @@ elf32_arm_section_map_add (asection *sec, char type, bfd_vma vma)
|
||||||
if (sec_data->mapcount > sec_data->mapsize)
|
if (sec_data->mapcount > sec_data->mapsize)
|
||||||
{
|
{
|
||||||
sec_data->mapsize *= 2;
|
sec_data->mapsize *= 2;
|
||||||
sec_data->map = bfd_realloc_or_free (sec_data->map, sec_data->mapsize
|
sec_data->map = (elf32_arm_section_map *)
|
||||||
|
bfd_realloc_or_free (sec_data->map, sec_data->mapsize
|
||||||
* sizeof (elf32_arm_section_map));
|
* sizeof (elf32_arm_section_map));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5162,7 +5173,7 @@ record_vfp11_erratum_veneer (struct bfd_link_info *link_info,
|
||||||
|
|
||||||
BFD_ASSERT (s != NULL);
|
BFD_ASSERT (s != NULL);
|
||||||
|
|
||||||
tmp_name = bfd_malloc ((bfd_size_type) strlen
|
tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen
|
||||||
(VFP11_ERRATUM_VENEER_ENTRY_NAME) + 10);
|
(VFP11_ERRATUM_VENEER_ENTRY_NAME) + 10);
|
||||||
|
|
||||||
BFD_ASSERT (tmp_name);
|
BFD_ASSERT (tmp_name);
|
||||||
|
@ -5187,7 +5198,8 @@ record_vfp11_erratum_veneer (struct bfd_link_info *link_info,
|
||||||
|
|
||||||
/* Link veneer back to calling location. */
|
/* Link veneer back to calling location. */
|
||||||
errcount = ++(sec_data->erratumcount);
|
errcount = ++(sec_data->erratumcount);
|
||||||
newerr = bfd_zmalloc (sizeof (elf32_vfp11_erratum_list));
|
newerr = (elf32_vfp11_erratum_list *)
|
||||||
|
bfd_zmalloc (sizeof (elf32_vfp11_erratum_list));
|
||||||
|
|
||||||
newerr->type = VFP11_ERRATUM_ARM_VENEER;
|
newerr->type = VFP11_ERRATUM_ARM_VENEER;
|
||||||
newerr->vma = -1;
|
newerr->vma = -1;
|
||||||
|
@ -6033,8 +6045,8 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *abfd, struct bfd_link_info *link_info)
|
||||||
|
|
||||||
if (state == 3)
|
if (state == 3)
|
||||||
{
|
{
|
||||||
elf32_vfp11_erratum_list *newerr
|
elf32_vfp11_erratum_list *newerr =(elf32_vfp11_erratum_list *)
|
||||||
= bfd_zmalloc (sizeof (elf32_vfp11_erratum_list));
|
bfd_zmalloc (sizeof (elf32_vfp11_erratum_list));
|
||||||
int errcount;
|
int errcount;
|
||||||
|
|
||||||
errcount = ++(elf32_arm_section_data (sec)->erratumcount);
|
errcount = ++(elf32_arm_section_data (sec)->erratumcount);
|
||||||
|
@ -6102,7 +6114,7 @@ bfd_elf32_arm_vfp11_fix_veneer_locations (bfd *abfd,
|
||||||
|
|
||||||
globals = elf32_arm_hash_table (link_info);
|
globals = elf32_arm_hash_table (link_info);
|
||||||
|
|
||||||
tmp_name = bfd_malloc ((bfd_size_type) strlen
|
tmp_name = (char *) bfd_malloc ((bfd_size_type) strlen
|
||||||
(VFP11_ERRATUM_VENEER_ENTRY_NAME) + 10);
|
(VFP11_ERRATUM_VENEER_ENTRY_NAME) + 10);
|
||||||
|
|
||||||
for (sec = abfd->sections; sec != NULL; sec = sec->next)
|
for (sec = abfd->sections; sec != NULL; sec = sec->next)
|
||||||
|
@ -8092,7 +8104,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
|
||||||
(_("%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object"),
|
(_("%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object"),
|
||||||
input_bfd, input_section,
|
input_bfd, input_section,
|
||||||
(long) rel->r_offset, howto->name);
|
(long) rel->r_offset, howto->name);
|
||||||
return FALSE;
|
return (bfd_reloc_status_type) FALSE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
value = tpoff (info, value);
|
value = tpoff (info, value);
|
||||||
|
@ -9042,7 +9054,8 @@ add_unwind_table_edit (arm_unwind_table_edit **head,
|
||||||
asection *linked_section,
|
asection *linked_section,
|
||||||
unsigned int index)
|
unsigned int index)
|
||||||
{
|
{
|
||||||
arm_unwind_table_edit *new_edit = xmalloc (sizeof (arm_unwind_table_edit));
|
arm_unwind_table_edit *new_edit = (arm_unwind_table_edit *)
|
||||||
|
xmalloc (sizeof (arm_unwind_table_edit));
|
||||||
|
|
||||||
new_edit->type = type;
|
new_edit->type = type;
|
||||||
new_edit->linked_section = linked_section;
|
new_edit->linked_section = linked_section;
|
||||||
|
@ -9539,7 +9552,7 @@ set_secondary_compatible_arch (bfd *abfd, int arch)
|
||||||
/* Note: the tag and its argument below are uleb128 values, though
|
/* Note: the tag and its argument below are uleb128 values, though
|
||||||
currently-defined values fit in one byte for each. */
|
currently-defined values fit in one byte for each. */
|
||||||
if (!attr->s)
|
if (!attr->s)
|
||||||
attr->s = bfd_alloc (abfd, 3);
|
attr->s = (char *) bfd_alloc (abfd, 3);
|
||||||
attr->s[0] = Tag_CPU_arch;
|
attr->s[0] = Tag_CPU_arch;
|
||||||
attr->s[1] = arch;
|
attr->s[1] = arch;
|
||||||
attr->s[2] = '\0';
|
attr->s[2] = '\0';
|
||||||
|
@ -10195,225 +10208,7 @@ elf32_arm_versions_compatible (unsigned iver, unsigned over)
|
||||||
object file when linking. */
|
object file when linking. */
|
||||||
|
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
elf32_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd)
|
elf32_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd);
|
||||||
{
|
|
||||||
flagword out_flags;
|
|
||||||
flagword in_flags;
|
|
||||||
bfd_boolean flags_compatible = TRUE;
|
|
||||||
asection *sec;
|
|
||||||
|
|
||||||
/* Check if we have the same endianess. */
|
|
||||||
if (! _bfd_generic_verify_endian_match (ibfd, obfd))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (! is_arm_elf (ibfd) || ! is_arm_elf (obfd))
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
if (!elf32_arm_merge_eabi_attributes (ibfd, obfd))
|
|
||||||
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. */
|
|
||||||
/* BFD_ASSERT (elf_flags_init (ibfd)); */
|
|
||||||
|
|
||||||
in_flags = elf_elfheader (ibfd)->e_flags;
|
|
||||||
out_flags = elf_elfheader (obfd)->e_flags;
|
|
||||||
|
|
||||||
/* In theory there is no reason why we couldn't handle this. However
|
|
||||||
in practice it isn't even close to working and there is no real
|
|
||||||
reason to want it. */
|
|
||||||
if (EF_ARM_EABI_VERSION (in_flags) >= EF_ARM_EABI_VER4
|
|
||||||
&& !(ibfd->flags & DYNAMIC)
|
|
||||||
&& (in_flags & EF_ARM_BE8))
|
|
||||||
{
|
|
||||||
_bfd_error_handler (_("error: %B is already in final BE8 format"),
|
|
||||||
ibfd);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!elf_flags_init (obfd))
|
|
||||||
{
|
|
||||||
/* If the input is the default architecture and had the default
|
|
||||||
flags then do not bother setting the flags for the output
|
|
||||||
architecture, instead allow future merges to do this. If no
|
|
||||||
future merges ever set these flags then they will retain their
|
|
||||||
uninitialised values, which surprise surprise, correspond
|
|
||||||
to the default values. */
|
|
||||||
if (bfd_get_arch_info (ibfd)->the_default
|
|
||||||
&& elf_elfheader (ibfd)->e_flags == 0)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
elf_flags_init (obfd) = TRUE;
|
|
||||||
elf_elfheader (obfd)->e_flags = in_flags;
|
|
||||||
|
|
||||||
if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
|
|
||||||
&& bfd_get_arch_info (obfd)->the_default)
|
|
||||||
return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd), bfd_get_mach (ibfd));
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Determine what should happen if the input ARM architecture
|
|
||||||
does not match the output ARM architecture. */
|
|
||||||
if (! bfd_arm_merge_machines (ibfd, obfd))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
/* Identical flags must be compatible. */
|
|
||||||
if (in_flags == out_flags)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
/* Check to see if the input BFD actually contains any sections. If
|
|
||||||
not, its flags may not have been initialised either, but it
|
|
||||||
cannot actually cause any incompatiblity. Do not short-circuit
|
|
||||||
dynamic objects; their section list may be emptied by
|
|
||||||
elf_link_add_object_symbols.
|
|
||||||
|
|
||||||
Also check to see if there are no code sections in the input.
|
|
||||||
In this case there is no need to check for code specific flags.
|
|
||||||
XXX - do we need to worry about floating-point format compatability
|
|
||||||
in data sections ? */
|
|
||||||
if (!(ibfd->flags & DYNAMIC))
|
|
||||||
{
|
|
||||||
bfd_boolean null_input_bfd = TRUE;
|
|
||||||
bfd_boolean only_data_sections = TRUE;
|
|
||||||
|
|
||||||
for (sec = ibfd->sections; sec != NULL; sec = sec->next)
|
|
||||||
{
|
|
||||||
/* Ignore synthetic glue sections. */
|
|
||||||
if (strcmp (sec->name, ".glue_7")
|
|
||||||
&& strcmp (sec->name, ".glue_7t"))
|
|
||||||
{
|
|
||||||
if ((bfd_get_section_flags (ibfd, sec)
|
|
||||||
& (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
|
|
||||||
== (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
|
|
||||||
only_data_sections = FALSE;
|
|
||||||
|
|
||||||
null_input_bfd = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null_input_bfd || only_data_sections)
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Complain about various flag mismatches. */
|
|
||||||
if (!elf32_arm_versions_compatible (EF_ARM_EABI_VERSION (in_flags),
|
|
||||||
EF_ARM_EABI_VERSION (out_flags)))
|
|
||||||
{
|
|
||||||
_bfd_error_handler
|
|
||||||
(_("error: Source object %B has EABI version %d, but target %B has EABI version %d"),
|
|
||||||
ibfd, obfd,
|
|
||||||
(in_flags & EF_ARM_EABIMASK) >> 24,
|
|
||||||
(out_flags & EF_ARM_EABIMASK) >> 24);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Not sure what needs to be checked for EABI versions >= 1. */
|
|
||||||
/* VxWorks libraries do not use these flags. */
|
|
||||||
if (get_elf_backend_data (obfd) != &elf32_arm_vxworks_bed
|
|
||||||
&& get_elf_backend_data (ibfd) != &elf32_arm_vxworks_bed
|
|
||||||
&& EF_ARM_EABI_VERSION (in_flags) == EF_ARM_EABI_UNKNOWN)
|
|
||||||
{
|
|
||||||
if ((in_flags & EF_ARM_APCS_26) != (out_flags & EF_ARM_APCS_26))
|
|
||||||
{
|
|
||||||
_bfd_error_handler
|
|
||||||
(_("error: %B is compiled for APCS-%d, whereas target %B uses APCS-%d"),
|
|
||||||
ibfd, obfd,
|
|
||||||
in_flags & EF_ARM_APCS_26 ? 26 : 32,
|
|
||||||
out_flags & EF_ARM_APCS_26 ? 26 : 32);
|
|
||||||
flags_compatible = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((in_flags & EF_ARM_APCS_FLOAT) != (out_flags & EF_ARM_APCS_FLOAT))
|
|
||||||
{
|
|
||||||
if (in_flags & EF_ARM_APCS_FLOAT)
|
|
||||||
_bfd_error_handler
|
|
||||||
(_("error: %B passes floats in float registers, whereas %B passes them in integer registers"),
|
|
||||||
ibfd, obfd);
|
|
||||||
else
|
|
||||||
_bfd_error_handler
|
|
||||||
(_("error: %B passes floats in integer registers, whereas %B passes them in float registers"),
|
|
||||||
ibfd, obfd);
|
|
||||||
|
|
||||||
flags_compatible = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((in_flags & EF_ARM_VFP_FLOAT) != (out_flags & EF_ARM_VFP_FLOAT))
|
|
||||||
{
|
|
||||||
if (in_flags & EF_ARM_VFP_FLOAT)
|
|
||||||
_bfd_error_handler
|
|
||||||
(_("error: %B uses VFP instructions, whereas %B does not"),
|
|
||||||
ibfd, obfd);
|
|
||||||
else
|
|
||||||
_bfd_error_handler
|
|
||||||
(_("error: %B uses FPA instructions, whereas %B does not"),
|
|
||||||
ibfd, obfd);
|
|
||||||
|
|
||||||
flags_compatible = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((in_flags & EF_ARM_MAVERICK_FLOAT) != (out_flags & EF_ARM_MAVERICK_FLOAT))
|
|
||||||
{
|
|
||||||
if (in_flags & EF_ARM_MAVERICK_FLOAT)
|
|
||||||
_bfd_error_handler
|
|
||||||
(_("error: %B uses Maverick instructions, whereas %B does not"),
|
|
||||||
ibfd, obfd);
|
|
||||||
else
|
|
||||||
_bfd_error_handler
|
|
||||||
(_("error: %B does not use Maverick instructions, whereas %B does"),
|
|
||||||
ibfd, obfd);
|
|
||||||
|
|
||||||
flags_compatible = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef EF_ARM_SOFT_FLOAT
|
|
||||||
if ((in_flags & EF_ARM_SOFT_FLOAT) != (out_flags & EF_ARM_SOFT_FLOAT))
|
|
||||||
{
|
|
||||||
/* We can allow interworking between code that is VFP format
|
|
||||||
layout, and uses either soft float or integer regs for
|
|
||||||
passing floating point arguments and results. We already
|
|
||||||
know that the APCS_FLOAT flags match; similarly for VFP
|
|
||||||
flags. */
|
|
||||||
if ((in_flags & EF_ARM_APCS_FLOAT) != 0
|
|
||||||
|| (in_flags & EF_ARM_VFP_FLOAT) == 0)
|
|
||||||
{
|
|
||||||
if (in_flags & EF_ARM_SOFT_FLOAT)
|
|
||||||
_bfd_error_handler
|
|
||||||
(_("error: %B uses software FP, whereas %B uses hardware FP"),
|
|
||||||
ibfd, obfd);
|
|
||||||
else
|
|
||||||
_bfd_error_handler
|
|
||||||
(_("error: %B uses hardware FP, whereas %B uses software FP"),
|
|
||||||
ibfd, obfd);
|
|
||||||
|
|
||||||
flags_compatible = FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Interworking mismatch is only a warning. */
|
|
||||||
if ((in_flags & EF_ARM_INTERWORK) != (out_flags & EF_ARM_INTERWORK))
|
|
||||||
{
|
|
||||||
if (in_flags & EF_ARM_INTERWORK)
|
|
||||||
{
|
|
||||||
_bfd_error_handler
|
|
||||||
(_("Warning: %B supports interworking, whereas %B does not"),
|
|
||||||
ibfd, obfd);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_bfd_error_handler
|
|
||||||
(_("Warning: %B does not support interworking, whereas %B does"),
|
|
||||||
ibfd, obfd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return flags_compatible;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Display the flags field. */
|
/* Display the flags field. */
|
||||||
|
|
||||||
|
@ -10838,7 +10633,8 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||||
|
|
||||||
size = symtab_hdr->sh_info;
|
size = symtab_hdr->sh_info;
|
||||||
size *= (sizeof (bfd_signed_vma) + sizeof (char));
|
size *= (sizeof (bfd_signed_vma) + sizeof (char));
|
||||||
local_got_refcounts = bfd_zalloc (abfd, size);
|
local_got_refcounts = (bfd_signed_vma *)
|
||||||
|
bfd_zalloc (abfd, size);
|
||||||
if (local_got_refcounts == NULL)
|
if (local_got_refcounts == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
elf_local_got_refcounts (abfd) = local_got_refcounts;
|
elf_local_got_refcounts (abfd) = local_got_refcounts;
|
||||||
|
@ -11037,7 +10833,8 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
|
||||||
{
|
{
|
||||||
bfd_size_type amt = sizeof *p;
|
bfd_size_type amt = sizeof *p;
|
||||||
|
|
||||||
p = bfd_alloc (htab->root.dynobj, amt);
|
p = (struct elf32_arm_relocs_copied *)
|
||||||
|
bfd_alloc (htab->root.dynobj, amt);
|
||||||
if (p == NULL)
|
if (p == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
p->next = *head;
|
p->next = *head;
|
||||||
|
@ -11811,7 +11608,8 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
|
||||||
{
|
{
|
||||||
struct elf32_arm_relocs_copied *p;
|
struct elf32_arm_relocs_copied *p;
|
||||||
|
|
||||||
for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
|
for (p = (struct elf32_arm_relocs_copied *)
|
||||||
|
elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
|
||||||
{
|
{
|
||||||
if (!bfd_is_abs_section (p->section)
|
if (!bfd_is_abs_section (p->section)
|
||||||
&& bfd_is_abs_section (p->section->output_section))
|
&& bfd_is_abs_section (p->section->output_section))
|
||||||
|
@ -11965,7 +11763,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED,
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Allocate memory for the section contents. */
|
/* Allocate memory for the section contents. */
|
||||||
s->contents = bfd_zalloc (dynobj, s->size);
|
s->contents = (unsigned char *) bfd_zalloc (dynobj, s->size);
|
||||||
if (s->contents == NULL)
|
if (s->contents == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -12760,7 +12558,7 @@ record_section_with_arm_elf_section_data (asection * sec)
|
||||||
{
|
{
|
||||||
struct section_list * entry;
|
struct section_list * entry;
|
||||||
|
|
||||||
entry = bfd_malloc (sizeof (* entry));
|
entry = (struct section_list *) bfd_malloc (sizeof (* entry));
|
||||||
if (entry == NULL)
|
if (entry == NULL)
|
||||||
return;
|
return;
|
||||||
entry->sec = sec;
|
entry->sec = sec;
|
||||||
|
@ -13224,7 +13022,7 @@ elf32_arm_new_section_hook (bfd *abfd, asection *sec)
|
||||||
_arm_elf_section_data *sdata;
|
_arm_elf_section_data *sdata;
|
||||||
bfd_size_type amt = sizeof (*sdata);
|
bfd_size_type amt = sizeof (*sdata);
|
||||||
|
|
||||||
sdata = bfd_zalloc (abfd, amt);
|
sdata = (_arm_elf_section_data *) bfd_zalloc (abfd, amt);
|
||||||
if (sdata == NULL)
|
if (sdata == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
sec->used_by_bfd = sdata;
|
sec->used_by_bfd = sdata;
|
||||||
|
@ -13516,7 +13314,7 @@ elf32_arm_write_section (bfd *output_bfd,
|
||||||
size (before we merged duplicate entries and inserted EXIDX_CANTUNWIND
|
size (before we merged duplicate entries and inserted EXIDX_CANTUNWIND
|
||||||
markers) was sec->rawsize. (This isn't the case if we perform no
|
markers) was sec->rawsize. (This isn't the case if we perform no
|
||||||
edits, then rawsize will be zero and we should use size). */
|
edits, then rawsize will be zero and we should use size). */
|
||||||
bfd_byte *edited_contents = bfd_malloc (sec->size);
|
bfd_byte *edited_contents = (bfd_byte *) bfd_malloc (sec->size);
|
||||||
unsigned int input_size = sec->rawsize ? sec->rawsize : sec->size;
|
unsigned int input_size = sec->rawsize ? sec->rawsize : sec->size;
|
||||||
unsigned int in_index, out_index;
|
unsigned int in_index, out_index;
|
||||||
bfd_vma add_to_offsets = 0;
|
bfd_vma add_to_offsets = 0;
|
||||||
|
@ -13789,7 +13587,8 @@ elf32_arm_modify_segment_map (bfd *abfd,
|
||||||
m = m->next;
|
m = m->next;
|
||||||
if (!m)
|
if (!m)
|
||||||
{
|
{
|
||||||
m = bfd_zalloc (abfd, sizeof (struct elf_segment_map));
|
m = (struct elf_segment_map *)
|
||||||
|
bfd_zalloc (abfd, sizeof (struct elf_segment_map));
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
m->p_type = PT_ARM_EXIDX;
|
m->p_type = PT_ARM_EXIDX;
|
||||||
|
@ -14001,6 +13800,231 @@ elf32_arm_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker)
|
||||||
#include "elf32-target.h"
|
#include "elf32-target.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* Merge backend specific data from an object file to the output
|
||||||
|
object file when linking. */
|
||||||
|
|
||||||
|
static bfd_boolean
|
||||||
|
elf32_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd)
|
||||||
|
{
|
||||||
|
flagword out_flags;
|
||||||
|
flagword in_flags;
|
||||||
|
bfd_boolean flags_compatible = TRUE;
|
||||||
|
asection *sec;
|
||||||
|
|
||||||
|
/* Check if we have the same endianess. */
|
||||||
|
if (! _bfd_generic_verify_endian_match (ibfd, obfd))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (! is_arm_elf (ibfd) || ! is_arm_elf (obfd))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
if (!elf32_arm_merge_eabi_attributes (ibfd, obfd))
|
||||||
|
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. */
|
||||||
|
/* BFD_ASSERT (elf_flags_init (ibfd)); */
|
||||||
|
|
||||||
|
in_flags = elf_elfheader (ibfd)->e_flags;
|
||||||
|
out_flags = elf_elfheader (obfd)->e_flags;
|
||||||
|
|
||||||
|
/* In theory there is no reason why we couldn't handle this. However
|
||||||
|
in practice it isn't even close to working and there is no real
|
||||||
|
reason to want it. */
|
||||||
|
if (EF_ARM_EABI_VERSION (in_flags) >= EF_ARM_EABI_VER4
|
||||||
|
&& !(ibfd->flags & DYNAMIC)
|
||||||
|
&& (in_flags & EF_ARM_BE8))
|
||||||
|
{
|
||||||
|
_bfd_error_handler (_("error: %B is already in final BE8 format"),
|
||||||
|
ibfd);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!elf_flags_init (obfd))
|
||||||
|
{
|
||||||
|
/* If the input is the default architecture and had the default
|
||||||
|
flags then do not bother setting the flags for the output
|
||||||
|
architecture, instead allow future merges to do this. If no
|
||||||
|
future merges ever set these flags then they will retain their
|
||||||
|
uninitialised values, which surprise surprise, correspond
|
||||||
|
to the default values. */
|
||||||
|
if (bfd_get_arch_info (ibfd)->the_default
|
||||||
|
&& elf_elfheader (ibfd)->e_flags == 0)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
elf_flags_init (obfd) = TRUE;
|
||||||
|
elf_elfheader (obfd)->e_flags = in_flags;
|
||||||
|
|
||||||
|
if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
|
||||||
|
&& bfd_get_arch_info (obfd)->the_default)
|
||||||
|
return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd), bfd_get_mach (ibfd));
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Determine what should happen if the input ARM architecture
|
||||||
|
does not match the output ARM architecture. */
|
||||||
|
if (! bfd_arm_merge_machines (ibfd, obfd))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
/* Identical flags must be compatible. */
|
||||||
|
if (in_flags == out_flags)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
/* Check to see if the input BFD actually contains any sections. If
|
||||||
|
not, its flags may not have been initialised either, but it
|
||||||
|
cannot actually cause any incompatiblity. Do not short-circuit
|
||||||
|
dynamic objects; their section list may be emptied by
|
||||||
|
elf_link_add_object_symbols.
|
||||||
|
|
||||||
|
Also check to see if there are no code sections in the input.
|
||||||
|
In this case there is no need to check for code specific flags.
|
||||||
|
XXX - do we need to worry about floating-point format compatability
|
||||||
|
in data sections ? */
|
||||||
|
if (!(ibfd->flags & DYNAMIC))
|
||||||
|
{
|
||||||
|
bfd_boolean null_input_bfd = TRUE;
|
||||||
|
bfd_boolean only_data_sections = TRUE;
|
||||||
|
|
||||||
|
for (sec = ibfd->sections; sec != NULL; sec = sec->next)
|
||||||
|
{
|
||||||
|
/* Ignore synthetic glue sections. */
|
||||||
|
if (strcmp (sec->name, ".glue_7")
|
||||||
|
&& strcmp (sec->name, ".glue_7t"))
|
||||||
|
{
|
||||||
|
if ((bfd_get_section_flags (ibfd, sec)
|
||||||
|
& (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
|
||||||
|
== (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
|
||||||
|
only_data_sections = FALSE;
|
||||||
|
|
||||||
|
null_input_bfd = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (null_input_bfd || only_data_sections)
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Complain about various flag mismatches. */
|
||||||
|
if (!elf32_arm_versions_compatible (EF_ARM_EABI_VERSION (in_flags),
|
||||||
|
EF_ARM_EABI_VERSION (out_flags)))
|
||||||
|
{
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("error: Source object %B has EABI version %d, but target %B has EABI version %d"),
|
||||||
|
ibfd, obfd,
|
||||||
|
(in_flags & EF_ARM_EABIMASK) >> 24,
|
||||||
|
(out_flags & EF_ARM_EABIMASK) >> 24);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Not sure what needs to be checked for EABI versions >= 1. */
|
||||||
|
/* VxWorks libraries do not use these flags. */
|
||||||
|
if (get_elf_backend_data (obfd) != &elf32_arm_vxworks_bed
|
||||||
|
&& get_elf_backend_data (ibfd) != &elf32_arm_vxworks_bed
|
||||||
|
&& EF_ARM_EABI_VERSION (in_flags) == EF_ARM_EABI_UNKNOWN)
|
||||||
|
{
|
||||||
|
if ((in_flags & EF_ARM_APCS_26) != (out_flags & EF_ARM_APCS_26))
|
||||||
|
{
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("error: %B is compiled for APCS-%d, whereas target %B uses APCS-%d"),
|
||||||
|
ibfd, obfd,
|
||||||
|
in_flags & EF_ARM_APCS_26 ? 26 : 32,
|
||||||
|
out_flags & EF_ARM_APCS_26 ? 26 : 32);
|
||||||
|
flags_compatible = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((in_flags & EF_ARM_APCS_FLOAT) != (out_flags & EF_ARM_APCS_FLOAT))
|
||||||
|
{
|
||||||
|
if (in_flags & EF_ARM_APCS_FLOAT)
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("error: %B passes floats in float registers, whereas %B passes them in integer registers"),
|
||||||
|
ibfd, obfd);
|
||||||
|
else
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("error: %B passes floats in integer registers, whereas %B passes them in float registers"),
|
||||||
|
ibfd, obfd);
|
||||||
|
|
||||||
|
flags_compatible = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((in_flags & EF_ARM_VFP_FLOAT) != (out_flags & EF_ARM_VFP_FLOAT))
|
||||||
|
{
|
||||||
|
if (in_flags & EF_ARM_VFP_FLOAT)
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("error: %B uses VFP instructions, whereas %B does not"),
|
||||||
|
ibfd, obfd);
|
||||||
|
else
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("error: %B uses FPA instructions, whereas %B does not"),
|
||||||
|
ibfd, obfd);
|
||||||
|
|
||||||
|
flags_compatible = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((in_flags & EF_ARM_MAVERICK_FLOAT) != (out_flags & EF_ARM_MAVERICK_FLOAT))
|
||||||
|
{
|
||||||
|
if (in_flags & EF_ARM_MAVERICK_FLOAT)
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("error: %B uses Maverick instructions, whereas %B does not"),
|
||||||
|
ibfd, obfd);
|
||||||
|
else
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("error: %B does not use Maverick instructions, whereas %B does"),
|
||||||
|
ibfd, obfd);
|
||||||
|
|
||||||
|
flags_compatible = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef EF_ARM_SOFT_FLOAT
|
||||||
|
if ((in_flags & EF_ARM_SOFT_FLOAT) != (out_flags & EF_ARM_SOFT_FLOAT))
|
||||||
|
{
|
||||||
|
/* We can allow interworking between code that is VFP format
|
||||||
|
layout, and uses either soft float or integer regs for
|
||||||
|
passing floating point arguments and results. We already
|
||||||
|
know that the APCS_FLOAT flags match; similarly for VFP
|
||||||
|
flags. */
|
||||||
|
if ((in_flags & EF_ARM_APCS_FLOAT) != 0
|
||||||
|
|| (in_flags & EF_ARM_VFP_FLOAT) == 0)
|
||||||
|
{
|
||||||
|
if (in_flags & EF_ARM_SOFT_FLOAT)
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("error: %B uses software FP, whereas %B uses hardware FP"),
|
||||||
|
ibfd, obfd);
|
||||||
|
else
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("error: %B uses hardware FP, whereas %B uses software FP"),
|
||||||
|
ibfd, obfd);
|
||||||
|
|
||||||
|
flags_compatible = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Interworking mismatch is only a warning. */
|
||||||
|
if ((in_flags & EF_ARM_INTERWORK) != (out_flags & EF_ARM_INTERWORK))
|
||||||
|
{
|
||||||
|
if (in_flags & EF_ARM_INTERWORK)
|
||||||
|
{
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("Warning: %B supports interworking, whereas %B does not"),
|
||||||
|
ibfd, obfd);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_bfd_error_handler
|
||||||
|
(_("Warning: %B does not support interworking, whereas %B does"),
|
||||||
|
ibfd, obfd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return flags_compatible;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Symbian OS Targets. */
|
/* Symbian OS Targets. */
|
||||||
|
|
||||||
#undef TARGET_LITTLE_SYM
|
#undef TARGET_LITTLE_SYM
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* Alpha specific support for 64-bit ELF
|
/* Alpha specific support for 64-bit ELF
|
||||||
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||||
2006, 2007, 2008 Free Software Foundation, Inc.
|
2006, 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||||
Contributed by Richard Henderson <rth@tamu.edu>.
|
Contributed by Richard Henderson <rth@tamu.edu>.
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
This file is part of BFD, the Binary File Descriptor library.
|
||||||
|
@ -103,26 +103,6 @@ bfd_boolean elf64_alpha_use_secureplt = FALSE;
|
||||||
|
|
||||||
#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so"
|
#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so"
|
||||||
|
|
||||||
struct alpha_elf_link_hash_entry
|
|
||||||
{
|
|
||||||
struct elf_link_hash_entry root;
|
|
||||||
|
|
||||||
/* External symbol information. */
|
|
||||||
EXTR esym;
|
|
||||||
|
|
||||||
/* Cumulative flags for all the .got entries. */
|
|
||||||
int flags;
|
|
||||||
|
|
||||||
/* Contexts in which a literal was referenced. */
|
|
||||||
#define ALPHA_ELF_LINK_HASH_LU_ADDR 0x01
|
|
||||||
#define ALPHA_ELF_LINK_HASH_LU_MEM 0x02
|
|
||||||
#define ALPHA_ELF_LINK_HASH_LU_BYTE 0x04
|
|
||||||
#define ALPHA_ELF_LINK_HASH_LU_JSR 0x08
|
|
||||||
#define ALPHA_ELF_LINK_HASH_LU_TLSGD 0x10
|
|
||||||
#define ALPHA_ELF_LINK_HASH_LU_TLSLDM 0x20
|
|
||||||
#define ALPHA_ELF_LINK_HASH_LU_JSRDIRECT 0x40
|
|
||||||
#define ALPHA_ELF_LINK_HASH_LU_PLT 0x38
|
|
||||||
#define ALPHA_ELF_LINK_HASH_TLS_IE 0x80
|
|
||||||
|
|
||||||
/* Used to implement multiple .got subsections. */
|
/* Used to implement multiple .got subsections. */
|
||||||
struct alpha_elf_got_entry
|
struct alpha_elf_got_entry
|
||||||
|
@ -155,10 +135,8 @@ struct alpha_elf_link_hash_entry
|
||||||
|
|
||||||
/* Have we adjusted this entry for SEC_MERGE? */
|
/* Have we adjusted this entry for SEC_MERGE? */
|
||||||
unsigned char reloc_xlated;
|
unsigned char reloc_xlated;
|
||||||
} *got_entries;
|
};
|
||||||
|
|
||||||
/* Used to count non-got, non-plt relocations for delayed sizing
|
|
||||||
of relocation sections. */
|
|
||||||
struct alpha_elf_reloc_entry
|
struct alpha_elf_reloc_entry
|
||||||
{
|
{
|
||||||
struct alpha_elf_reloc_entry *next;
|
struct alpha_elf_reloc_entry *next;
|
||||||
|
@ -174,7 +152,35 @@ struct alpha_elf_link_hash_entry
|
||||||
|
|
||||||
/* How many did we find? */
|
/* How many did we find? */
|
||||||
unsigned long count;
|
unsigned long count;
|
||||||
} *reloc_entries;
|
};
|
||||||
|
|
||||||
|
struct alpha_elf_link_hash_entry
|
||||||
|
{
|
||||||
|
struct elf_link_hash_entry root;
|
||||||
|
|
||||||
|
/* External symbol information. */
|
||||||
|
EXTR esym;
|
||||||
|
|
||||||
|
/* Cumulative flags for all the .got entries. */
|
||||||
|
int flags;
|
||||||
|
|
||||||
|
/* Contexts in which a literal was referenced. */
|
||||||
|
#define ALPHA_ELF_LINK_HASH_LU_ADDR 0x01
|
||||||
|
#define ALPHA_ELF_LINK_HASH_LU_MEM 0x02
|
||||||
|
#define ALPHA_ELF_LINK_HASH_LU_BYTE 0x04
|
||||||
|
#define ALPHA_ELF_LINK_HASH_LU_JSR 0x08
|
||||||
|
#define ALPHA_ELF_LINK_HASH_LU_TLSGD 0x10
|
||||||
|
#define ALPHA_ELF_LINK_HASH_LU_TLSLDM 0x20
|
||||||
|
#define ALPHA_ELF_LINK_HASH_LU_JSRDIRECT 0x40
|
||||||
|
#define ALPHA_ELF_LINK_HASH_LU_PLT 0x38
|
||||||
|
#define ALPHA_ELF_LINK_HASH_TLS_IE 0x80
|
||||||
|
|
||||||
|
/* Used to implement multiple .got subsections. */
|
||||||
|
struct alpha_elf_got_entry *got_entries;
|
||||||
|
|
||||||
|
/* Used to count non-got, non-plt relocations for delayed sizing
|
||||||
|
of relocation sections. */
|
||||||
|
struct alpha_elf_reloc_entry *reloc_entries;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Alpha ELF linker hash table. */
|
/* Alpha ELF linker hash table. */
|
||||||
|
@ -458,8 +464,9 @@ elf64_alpha_reloc_gpdisp (bfd *abfd, arelent *reloc_entry,
|
||||||
from smaller values. Start with zero, widen, *then* decrement. */
|
from smaller values. Start with zero, widen, *then* decrement. */
|
||||||
#define MINUS_ONE (((bfd_vma)0) - 1)
|
#define MINUS_ONE (((bfd_vma)0) - 1)
|
||||||
|
|
||||||
|
|
||||||
#define SKIP_HOWTO(N) \
|
#define SKIP_HOWTO(N) \
|
||||||
HOWTO(N, 0, 0, 0, 0, 0, 0, elf64_alpha_reloc_bad, 0, 0, 0, 0, 0)
|
HOWTO(N, 0, 0, 0, 0, 0, complain_overflow_dont, elf64_alpha_reloc_bad, 0, 0, 0, 0, 0)
|
||||||
|
|
||||||
static reloc_howto_type elf64_alpha_howto_table[] =
|
static reloc_howto_type elf64_alpha_howto_table[] =
|
||||||
{
|
{
|
||||||
|
@ -5062,7 +5069,7 @@ elf64_alpha_final_link (bfd *abfd, struct bfd_link_info *info)
|
||||||
interesting information, try to find the symbol in
|
interesting information, try to find the symbol in
|
||||||
the linker global hash table and save the information
|
the linker global hash table and save the information
|
||||||
for the output external symbols. */
|
for the output external symbols. */
|
||||||
eraw_src = input_debug.external_ext;
|
eraw_src = (char *) input_debug.external_ext;
|
||||||
eraw_end = (eraw_src
|
eraw_end = (eraw_src
|
||||||
+ (input_debug.symbolic_header.iextMax
|
+ (input_debug.symbolic_header.iextMax
|
||||||
* input_swap->external_ext_size));
|
* input_swap->external_ext_size));
|
||||||
|
|
|
@ -1,9 +1,27 @@
|
||||||
|
2009-09-25 Martin Thuresson <martint@google.com>
|
||||||
|
|
||||||
|
Update soruces to make alpha, arc and arm targets compile cleanly
|
||||||
|
with -Wc++-compat:
|
||||||
|
* config/tc-alpha.c: Add casts.
|
||||||
|
(extended_bfd_reloc_code_real_type): New type. Used to avoid
|
||||||
|
enumeration conversion warnings.
|
||||||
|
(struct alpha_fixup, void assemble_insn, assemble_insn)
|
||||||
|
(assemble_tokens): Use new type.
|
||||||
|
* ecoff.c: Add casts. (mark_stabs): Use enumeration names.
|
||||||
|
* config/obj-elf.c: Add cast
|
||||||
|
* config/tc-arc.c: Add casts.
|
||||||
|
* config/obj-aout.h (text_section,data_section,bss_section):
|
||||||
|
Make extern.
|
||||||
|
* config/obj-elf.c: Add cast.
|
||||||
|
* config/tc-arm.c: Add casts.
|
||||||
|
(X, TxCE, TxCE, TxC3, TxC3w, TxCM_, TxCM, TUE, TUF, CE, CL, cCE)
|
||||||
|
(cCL, C3E, xCM_, nUF, nCE_tag): Change input format to avoid the
|
||||||
|
need for keywords as arguments.
|
||||||
|
|
||||||
2009-09-25 Nick Hudson <nick.hudson@gmx.co.uk>
|
2009-09-25 Nick Hudson <nick.hudson@gmx.co.uk>
|
||||||
|
|
||||||
* doc/c-mips.texi: Fix the singlefloat and doublefloat kindex
|
* doc/c-mips.texi: Fix the singlefloat and doublefloat kindex
|
||||||
entries.
|
entries2009-09-24 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
2009-09-24 H.J. Lu <hongjiu.lu@intel.com>
|
|
||||||
|
|
||||||
* config/tc-i386.c (build_vex_prefix): Check vex == 2 instead
|
* config/tc-i386.c (build_vex_prefix): Check vex == 2 instead
|
||||||
of vex256.
|
of vex256.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* obj-aout.h, a.out object file format for gas, the assembler.
|
/* obj-aout.h, a.out object file format for gas, the assembler.
|
||||||
Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000,
|
Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000,
|
||||||
2002, 2003, 2005, 2007 Free Software Foundation, Inc.
|
2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GAS, the GNU Assembler.
|
This file is part of GAS, the GNU Assembler.
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ typedef struct nlist obj_symbol_type; /* Symbol table entry. */
|
||||||
#define S_GET_DESC(S) \
|
#define S_GET_DESC(S) \
|
||||||
(aout_symbol (symbol_get_bfdsym (S))->desc)
|
(aout_symbol (symbol_get_bfdsym (S))->desc)
|
||||||
|
|
||||||
asection *text_section, *data_section, *bss_section;
|
extern asection *text_section, *data_section, *bss_section;
|
||||||
|
|
||||||
#define obj_frob_symbol(S,PUNT) obj_aout_frob_symbol (S, &PUNT)
|
#define obj_frob_symbol(S,PUNT) obj_aout_frob_symbol (S, &PUNT)
|
||||||
#define obj_frob_file_before_fix() obj_aout_frob_file_before_fix ()
|
#define obj_frob_file_before_fix() obj_aout_frob_file_before_fix ()
|
||||||
|
|
|
@ -2054,7 +2054,7 @@ build_group_lists (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *inf)
|
||||||
list->num_group += 1;
|
list->num_group += 1;
|
||||||
|
|
||||||
/* Add index to hash. */
|
/* Add index to hash. */
|
||||||
idx_ptr = xmalloc (sizeof (unsigned int));
|
idx_ptr = (unsigned int *) xmalloc (sizeof (unsigned int));
|
||||||
*idx_ptr = i;
|
*idx_ptr = i;
|
||||||
hash_insert (list->indexes, group_name, idx_ptr);
|
hash_insert (list->indexes, group_name, idx_ptr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,10 +75,15 @@
|
||||||
#define MAX_INSN_FIXUPS 2
|
#define MAX_INSN_FIXUPS 2
|
||||||
#define MAX_INSN_ARGS 5
|
#define MAX_INSN_ARGS 5
|
||||||
|
|
||||||
|
/* Used since new relocation types are introduced in this
|
||||||
|
file (DUMMY_RELOC_LITUSE_*) */
|
||||||
|
typedef int extended_bfd_reloc_code_real_type;
|
||||||
|
|
||||||
struct alpha_fixup
|
struct alpha_fixup
|
||||||
{
|
{
|
||||||
expressionS exp;
|
expressionS exp;
|
||||||
bfd_reloc_code_real_type reloc;
|
/* bfd_reloc_code_real_type reloc; */
|
||||||
|
extended_bfd_reloc_code_real_type reloc;
|
||||||
#ifdef OBJ_EVAX
|
#ifdef OBJ_EVAX
|
||||||
symbolS *xtrasym, *procsym;
|
symbolS *xtrasym, *procsym;
|
||||||
#endif
|
#endif
|
||||||
|
@ -444,7 +449,7 @@ static const struct alpha_reloc_op_tag
|
||||||
const char *name; /* String to lookup. */
|
const char *name; /* String to lookup. */
|
||||||
size_t length; /* Size of the string. */
|
size_t length; /* Size of the string. */
|
||||||
operatorT op; /* Which operator to use. */
|
operatorT op; /* Which operator to use. */
|
||||||
bfd_reloc_code_real_type reloc; /* Relocation before frob. */
|
extended_bfd_reloc_code_real_type reloc;
|
||||||
unsigned int require_seq : 1; /* Require a sequence number. */
|
unsigned int require_seq : 1; /* Require a sequence number. */
|
||||||
unsigned int allow_seq : 1; /* Allow a sequence number. */
|
unsigned int allow_seq : 1; /* Allow a sequence number. */
|
||||||
}
|
}
|
||||||
|
@ -565,7 +570,7 @@ static const char * const mskXh_op[] = { NULL, "mskwh", "msklh", "mskqh" };
|
||||||
static const char * const stX_op[] = { "stb", "stw", "stl", "stq" };
|
static const char * const stX_op[] = { "stb", "stw", "stl", "stq" };
|
||||||
static const char * const ldXu_op[] = { "ldbu", "ldwu", NULL, NULL };
|
static const char * const ldXu_op[] = { "ldbu", "ldwu", NULL, NULL };
|
||||||
|
|
||||||
static void assemble_insn (const struct alpha_opcode *, const expressionS *, int, struct alpha_insn *, bfd_reloc_code_real_type);
|
static void assemble_insn (const struct alpha_opcode *, const expressionS *, int, struct alpha_insn *, extended_bfd_reloc_code_real_type);
|
||||||
static void emit_insn (struct alpha_insn *);
|
static void emit_insn (struct alpha_insn *);
|
||||||
static void assemble_tokens (const char *, const expressionS *, int, int);
|
static void assemble_tokens (const char *, const expressionS *, int, int);
|
||||||
#ifdef OBJ_EVAX
|
#ifdef OBJ_EVAX
|
||||||
|
@ -587,7 +592,8 @@ get_alpha_reloc_tag (long sequence)
|
||||||
size_t len = strlen (buffer);
|
size_t len = strlen (buffer);
|
||||||
const char *errmsg;
|
const char *errmsg;
|
||||||
|
|
||||||
info = xcalloc (sizeof (struct alpha_reloc_tag) + len, 1);
|
info = (struct alpha_reloc_tag *)
|
||||||
|
xcalloc (sizeof (struct alpha_reloc_tag) + len, 1);
|
||||||
|
|
||||||
info->segment = now_seg;
|
info->segment = now_seg;
|
||||||
info->sequence = sequence;
|
info->sequence = sequence;
|
||||||
|
@ -1764,8 +1770,9 @@ emit_insn (struct alpha_insn *insn)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
reloc_howto_type *reloc_howto
|
reloc_howto_type *reloc_howto =
|
||||||
= bfd_reloc_type_lookup (stdoutput, fixup->reloc);
|
bfd_reloc_type_lookup (stdoutput,
|
||||||
|
(bfd_reloc_code_real_type) fixup->reloc);
|
||||||
gas_assert (reloc_howto);
|
gas_assert (reloc_howto);
|
||||||
|
|
||||||
size = bfd_get_reloc_size (reloc_howto);
|
size = bfd_get_reloc_size (reloc_howto);
|
||||||
|
@ -1787,7 +1794,7 @@ emit_insn (struct alpha_insn *insn)
|
||||||
}
|
}
|
||||||
|
|
||||||
fixP = fix_new_exp (frag_now, f - frag_now->fr_literal, size,
|
fixP = fix_new_exp (frag_now, f - frag_now->fr_literal, size,
|
||||||
&fixup->exp, pcrel, fixup->reloc);
|
&fixup->exp, pcrel, (bfd_reloc_code_real_type) fixup->reloc);
|
||||||
|
|
||||||
/* Turn off complaints that the addend is too large for some fixups,
|
/* Turn off complaints that the addend is too large for some fixups,
|
||||||
and copy in the sequence number for the explicit relocations. */
|
and copy in the sequence number for the explicit relocations. */
|
||||||
|
@ -2002,7 +2009,7 @@ assemble_insn (const struct alpha_opcode *opcode,
|
||||||
const expressionS *tok,
|
const expressionS *tok,
|
||||||
int ntok,
|
int ntok,
|
||||||
struct alpha_insn *insn,
|
struct alpha_insn *insn,
|
||||||
bfd_reloc_code_real_type reloc)
|
extended_bfd_reloc_code_real_type reloc)
|
||||||
{
|
{
|
||||||
const struct alpha_operand *reloc_operand = NULL;
|
const struct alpha_operand *reloc_operand = NULL;
|
||||||
const expressionS *reloc_exp = NULL;
|
const expressionS *reloc_exp = NULL;
|
||||||
|
@ -2125,7 +2132,8 @@ assemble_insn (const struct alpha_opcode *opcode,
|
||||||
else if (reloc < BFD_RELOC_UNUSED && reloc > 0)
|
else if (reloc < BFD_RELOC_UNUSED && reloc > 0)
|
||||||
{
|
{
|
||||||
reloc_howto_type *reloc_howto
|
reloc_howto_type *reloc_howto
|
||||||
= bfd_reloc_type_lookup (stdoutput, reloc);
|
= bfd_reloc_type_lookup (stdoutput,
|
||||||
|
(bfd_reloc_code_real_type) reloc);
|
||||||
if (reloc_operand == NULL
|
if (reloc_operand == NULL
|
||||||
|| reloc_howto->bitsize != reloc_operand->bits)
|
|| reloc_howto->bitsize != reloc_operand->bits)
|
||||||
{
|
{
|
||||||
|
@ -2168,7 +2176,7 @@ emit_ir_load (const expressionS *tok,
|
||||||
basereg = tok[2].X_add_number;
|
basereg = tok[2].X_add_number;
|
||||||
|
|
||||||
lituse = load_expression (tok[0].X_add_number, &tok[1],
|
lituse = load_expression (tok[0].X_add_number, &tok[1],
|
||||||
&basereg, &newtok[1], opname);
|
&basereg, &newtok[1], (const char *) opname);
|
||||||
|
|
||||||
if (basereg == alpha_gp_register &&
|
if (basereg == alpha_gp_register &&
|
||||||
(symlen > 4 && strcmp (&symname [symlen - 4], "..lk") == 0))
|
(symlen > 4 && strcmp (&symname [symlen - 4], "..lk") == 0))
|
||||||
|
@ -2215,7 +2223,7 @@ emit_loadstore (const expressionS *tok,
|
||||||
as_bad (_("macro requires $at register while noat in effect"));
|
as_bad (_("macro requires $at register while noat in effect"));
|
||||||
|
|
||||||
lituse = load_expression (AXP_REG_AT, &tok[1],
|
lituse = load_expression (AXP_REG_AT, &tok[1],
|
||||||
&basereg, &newtok[1], opname);
|
&basereg, &newtok[1], (const char *) opname);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -3290,7 +3298,7 @@ assemble_tokens (const char *opname,
|
||||||
const struct alpha_opcode *opcode;
|
const struct alpha_opcode *opcode;
|
||||||
const struct alpha_macro *macro;
|
const struct alpha_macro *macro;
|
||||||
int cpumatch = 1;
|
int cpumatch = 1;
|
||||||
bfd_reloc_code_real_type reloc = BFD_RELOC_UNUSED;
|
extended_bfd_reloc_code_real_type reloc = BFD_RELOC_UNUSED;
|
||||||
|
|
||||||
#ifdef RELOC_OP_P
|
#ifdef RELOC_OP_P
|
||||||
/* If a user-specified relocation is present, this is not a macro. */
|
/* If a user-specified relocation is present, this is not a macro. */
|
||||||
|
@ -3723,7 +3731,8 @@ s_alpha_ent (int dummy ATTRIBUTE_UNUSED)
|
||||||
sym = symbol_find_or_make (name);
|
sym = symbol_find_or_make (name);
|
||||||
symbol_get_bfdsym (sym)->flags |= BSF_FUNCTION;
|
symbol_get_bfdsym (sym)->flags |= BSF_FUNCTION;
|
||||||
|
|
||||||
cur_frame_data = calloc (1, sizeof (*cur_frame_data));
|
cur_frame_data = (struct alpha_elf_frame_data *)
|
||||||
|
calloc (1, sizeof (*cur_frame_data));
|
||||||
cur_frame_data->func_sym = sym;
|
cur_frame_data->func_sym = sym;
|
||||||
|
|
||||||
/* Provide sensible defaults. */
|
/* Provide sensible defaults. */
|
||||||
|
@ -3779,7 +3788,7 @@ s_alpha_end (int dummy ATTRIBUTE_UNUSED)
|
||||||
if (sym && cur_frame_data)
|
if (sym && cur_frame_data)
|
||||||
{
|
{
|
||||||
OBJ_SYMFIELD_TYPE *obj = symbol_get_obj (sym);
|
OBJ_SYMFIELD_TYPE *obj = symbol_get_obj (sym);
|
||||||
expressionS *exp = xmalloc (sizeof (expressionS));
|
expressionS *exp = (expressionS *) xmalloc (sizeof (expressionS));
|
||||||
|
|
||||||
obj->size = exp;
|
obj->size = exp;
|
||||||
exp->X_op = O_subtract;
|
exp->X_op = O_subtract;
|
||||||
|
@ -3947,7 +3956,7 @@ s_alpha_file (int ignore ATTRIBUTE_UNUSED)
|
||||||
discard_rest_of_line ();
|
discard_rest_of_line ();
|
||||||
|
|
||||||
len = input_line_pointer - start;
|
len = input_line_pointer - start;
|
||||||
first_file_directive = xmalloc (len + 1);
|
first_file_directive = (char *) xmalloc (len + 1);
|
||||||
memcpy (first_file_directive, start, len);
|
memcpy (first_file_directive, start, len);
|
||||||
first_file_directive[len] = '\0';
|
first_file_directive[len] = '\0';
|
||||||
|
|
||||||
|
@ -5425,7 +5434,7 @@ md_begin (void)
|
||||||
|
|
||||||
if ((slash = strchr (name, '/')) != NULL)
|
if ((slash = strchr (name, '/')) != NULL)
|
||||||
{
|
{
|
||||||
char *p = xmalloc (strlen (name));
|
char *p = (char *) xmalloc (strlen (name));
|
||||||
|
|
||||||
memcpy (p, name, slash - name);
|
memcpy (p, name, slash - name);
|
||||||
strcpy (p + (slash - name), slash + 1);
|
strcpy (p + (slash - name), slash + 1);
|
||||||
|
@ -6207,8 +6216,8 @@ tc_gen_reloc (asection *sec ATTRIBUTE_UNUSED,
|
||||||
{
|
{
|
||||||
arelent *reloc;
|
arelent *reloc;
|
||||||
|
|
||||||
reloc = xmalloc (sizeof (* reloc));
|
reloc = (arelent *) xmalloc (sizeof (* reloc));
|
||||||
reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
|
reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
|
||||||
*reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
|
*reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
|
||||||
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
|
reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
|
||||||
|
|
||||||
|
|
|
@ -540,7 +540,8 @@ arc_extoper (int opertype)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ext_oper = xmalloc (sizeof (struct arc_ext_operand_value));
|
ext_oper = (struct arc_ext_operand_value *)
|
||||||
|
xmalloc (sizeof (struct arc_ext_operand_value));
|
||||||
|
|
||||||
if (opertype)
|
if (opertype)
|
||||||
{
|
{
|
||||||
|
@ -802,7 +803,7 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED)
|
||||||
strcat (syntax, "%F");
|
strcat (syntax, "%F");
|
||||||
strcat (syntax, "%S%L");
|
strcat (syntax, "%S%L");
|
||||||
|
|
||||||
ext_op = xmalloc (sizeof (struct arc_opcode));
|
ext_op = (struct arc_opcode *) xmalloc (sizeof (struct arc_opcode));
|
||||||
ext_op->syntax = xstrdup (syntax);
|
ext_op->syntax = xstrdup (syntax);
|
||||||
|
|
||||||
ext_op->mask = I (-1) | ((0x3 == opcode) ? C (-1) : 0);
|
ext_op->mask = I (-1) | ((0x3 == opcode) ? C (-1) : 0);
|
||||||
|
@ -1196,7 +1197,8 @@ arc_cons_fix_new (fragS *frag,
|
||||||
|
|
||||||
/* This may be a special ARC reloc (eg: %st()). */
|
/* This may be a special ARC reloc (eg: %st()). */
|
||||||
reloc_type = get_arc_exp_reloc_type (1, BFD_RELOC_32, exp, &exptmp);
|
reloc_type = get_arc_exp_reloc_type (1, BFD_RELOC_32, exp, &exptmp);
|
||||||
fix_new_exp (frag, where, nbytes, &exptmp, 0, reloc_type);
|
fix_new_exp (frag, where, nbytes, &exptmp, 0,
|
||||||
|
(enum bfd_reloc_code_real) reloc_type);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1350,8 +1352,8 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED,
|
||||||
{
|
{
|
||||||
arelent *reloc;
|
arelent *reloc;
|
||||||
|
|
||||||
reloc = xmalloc (sizeof (arelent));
|
reloc = (arelent *) xmalloc (sizeof (arelent));
|
||||||
reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *));
|
reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
|
||||||
|
|
||||||
*reloc->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy);
|
*reloc->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy);
|
||||||
reloc->address = fixP->fx_frag->fr_address + fixP->fx_where;
|
reloc->address = fixP->fx_frag->fr_address + fixP->fx_where;
|
||||||
|
@ -1568,7 +1570,8 @@ md_assemble (char *str)
|
||||||
if ((suf = get_ext_suffix (s)))
|
if ((suf = get_ext_suffix (s)))
|
||||||
ext_suffix_p = 1;
|
ext_suffix_p = 1;
|
||||||
else
|
else
|
||||||
suf = hash_find (arc_suffix_hash, s);
|
suf = (const struct arc_operand_value *)
|
||||||
|
hash_find (arc_suffix_hash, s);
|
||||||
if (!suf)
|
if (!suf)
|
||||||
{
|
{
|
||||||
/* This can happen in "blle foo" and we're currently using
|
/* This can happen in "blle foo" and we're currently using
|
||||||
|
|
2669
gas/config/tc-arm.c
2669
gas/config/tc-arm.c
File diff suppressed because it is too large
Load diff
|
@ -3323,7 +3323,7 @@ mark_stabs (int ignore ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
/* Add a dummy @stabs dymbol. */
|
/* Add a dummy @stabs dymbol. */
|
||||||
stabs_seen = 1;
|
stabs_seen = 1;
|
||||||
(void) add_ecoff_symbol (stabs_symbol, stNil, scInfo,
|
(void) add_ecoff_symbol (stabs_symbol, st_Nil, sc_Info,
|
||||||
(symbolS *) NULL,
|
(symbolS *) NULL,
|
||||||
(bfd_vma) 0, (symint_t) -1,
|
(bfd_vma) 0, (symint_t) -1,
|
||||||
ECOFF_MARK_STAB (0));
|
ECOFF_MARK_STAB (0));
|
||||||
|
@ -3616,7 +3616,7 @@ ecoff_add_bytes (char **buf,
|
||||||
if (need < PAGE_SIZE)
|
if (need < PAGE_SIZE)
|
||||||
need = PAGE_SIZE;
|
need = PAGE_SIZE;
|
||||||
want = (*bufend - *buf) + need;
|
want = (*bufend - *buf) + need;
|
||||||
*buf = xrealloc (*buf, want);
|
*buf = (char *) xrealloc (*buf, want);
|
||||||
*bufend = *buf + want;
|
*bufend = *buf + want;
|
||||||
return *buf + at;
|
return *buf + at;
|
||||||
}
|
}
|
||||||
|
@ -4129,7 +4129,7 @@ ecoff_build_symbols (const struct ecoff_debug_swap *backend,
|
||||||
sym_ptr->ecoff_sym.asym.iss =
|
sym_ptr->ecoff_sym.asym.iss =
|
||||||
begin_ptr->ecoff_sym.asym.iss;
|
begin_ptr->ecoff_sym.asym.iss;
|
||||||
|
|
||||||
begin_type = begin_ptr->ecoff_sym.asym.st;
|
begin_type = (st_t) begin_ptr->ecoff_sym.asym.st;
|
||||||
if (begin_type == st_File
|
if (begin_type == st_File
|
||||||
|| begin_type == st_Block)
|
|| begin_type == st_Block)
|
||||||
{
|
{
|
||||||
|
@ -4697,7 +4697,7 @@ ecoff_build_debug (HDRR *hdr,
|
||||||
|
|
||||||
/* Build the symbolic information. */
|
/* Build the symbolic information. */
|
||||||
offset = 0;
|
offset = 0;
|
||||||
buf = xmalloc (PAGE_SIZE);
|
buf = (char *) xmalloc (PAGE_SIZE);
|
||||||
bufend = buf + PAGE_SIZE;
|
bufend = buf + PAGE_SIZE;
|
||||||
|
|
||||||
/* Build the line number information. */
|
/* Build the line number information. */
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2009-09-25 Martin Thuresson <martint@google.com>
|
||||||
|
|
||||||
|
Update soruces to make arm targets compile cleanly with
|
||||||
|
-Wc++-compat:
|
||||||
|
* emultempl/armelf.em: Add casts.
|
||||||
|
|
||||||
2009-09-23 Matt Rice <ratmice@gmail.com>
|
2009-09-23 Matt Rice <ratmice@gmail.com>
|
||||||
|
|
||||||
* emultempl/elf32.em (gld${EMULATION_NAME}_add_options): Add --audit,
|
* emultempl/elf32.em (gld${EMULATION_NAME}_add_options): Add --audit,
|
||||||
|
|
|
@ -276,7 +276,8 @@ gld${EMULATION_NAME}_after_allocation (void)
|
||||||
/* Build a sorted list of input text sections, then use that to process
|
/* Build a sorted list of input text sections, then use that to process
|
||||||
the unwind table index. */
|
the unwind table index. */
|
||||||
unsigned int list_size = 10;
|
unsigned int list_size = 10;
|
||||||
asection **sec_list = xmalloc (list_size * sizeof (asection *));
|
asection **sec_list = (asection **)
|
||||||
|
xmalloc (list_size * sizeof (asection *));
|
||||||
unsigned int sec_count = 0;
|
unsigned int sec_count = 0;
|
||||||
|
|
||||||
LANG_FOR_EACH_INPUT_STATEMENT (is)
|
LANG_FOR_EACH_INPUT_STATEMENT (is)
|
||||||
|
@ -302,8 +303,8 @@ gld${EMULATION_NAME}_after_allocation (void)
|
||||||
if (sec_count == list_size)
|
if (sec_count == list_size)
|
||||||
{
|
{
|
||||||
list_size *= 2;
|
list_size *= 2;
|
||||||
sec_list = xrealloc (sec_list,
|
sec_list = (asection **)
|
||||||
list_size * sizeof (asection *));
|
xrealloc (sec_list, list_size * sizeof (asection *));
|
||||||
}
|
}
|
||||||
|
|
||||||
sec_list[sec_count++] = sec;
|
sec_list[sec_count++] = sec;
|
||||||
|
|
|
@ -1,3 +1,12 @@
|
||||||
|
2009-09-25 Martin Thuresson <martint@google.com>
|
||||||
|
|
||||||
|
Update soruces to make arc and arm targets compile cleanly with
|
||||||
|
-Wc++-compat:
|
||||||
|
* arc-dis.c Fix casts.
|
||||||
|
* arc-ext.c: Add casts.
|
||||||
|
* arm-dis.c (enum opcode_sentinel_enum): Gave name to anonymous
|
||||||
|
enum.
|
||||||
|
|
||||||
2009-09-24 H.J. Lu <hongjiu.lu@intel.com>
|
2009-09-24 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* i386-gen.c (opcode_modifiers): Remove Vex256.
|
* i386-gen.c (opcode_modifiers): Remove Vex256.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* Instruction printing code for the ARC.
|
/* Instruction printing code for the ARC.
|
||||||
Copyright 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2005, 2007
|
Copyright 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2005, 2007, 2009
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
Contributed by Doug Evans (dje@cygnus.com).
|
Contributed by Doug Evans (dje@cygnus.com).
|
||||||
|
|
||||||
|
@ -1201,7 +1201,7 @@ decodeInstr (bfd_vma address, /* Address of this instruction. */
|
||||||
s.instName = _instName;
|
s.instName = _instName;
|
||||||
|
|
||||||
/* Disassemble. */
|
/* Disassemble. */
|
||||||
bytes = dsmOneArcInst (address, (void *)& s);
|
bytes = dsmOneArcInst (address, & s);
|
||||||
|
|
||||||
/* Display the disassembly instruction. */
|
/* Display the disassembly instruction. */
|
||||||
(*func) (stream, "%08lx ", s.words[0]);
|
(*func) (stream, "%08lx ", s.words[0]);
|
||||||
|
@ -1228,6 +1228,6 @@ disassembler_ftype
|
||||||
arc_get_disassembler (void *ptr)
|
arc_get_disassembler (void *ptr)
|
||||||
{
|
{
|
||||||
if (ptr)
|
if (ptr)
|
||||||
build_ARC_extmap (ptr);
|
build_ARC_extmap ((struct bfd *) ptr);
|
||||||
return decodeInstr;
|
return decodeInstr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* ARC target-dependent stuff. Extension structure access functions
|
/* ARC target-dependent stuff. Extension structure access functions
|
||||||
Copyright 1995, 1997, 2000, 2001, 2004, 2005, 2007
|
Copyright 1995, 1997, 2000, 2001, 2004, 2005, 2007, 2009
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of libopcodes.
|
This file is part of libopcodes.
|
||||||
|
@ -148,8 +148,8 @@ cleanup_ext_map(void)
|
||||||
int
|
int
|
||||||
arcExtMap_add(void *base, unsigned long length)
|
arcExtMap_add(void *base, unsigned long length)
|
||||||
{
|
{
|
||||||
unsigned char *block = base;
|
unsigned char *block = (unsigned char *) base;
|
||||||
unsigned char *p = block;
|
unsigned char *p = (unsigned char *) block;
|
||||||
|
|
||||||
/* Clean up and reset everything if needed. */
|
/* Clean up and reset everything if needed. */
|
||||||
cleanup_ext_map();
|
cleanup_ext_map();
|
||||||
|
|
|
@ -106,7 +106,7 @@ struct opcode16
|
||||||
(print "32" when 0)
|
(print "32" when 0)
|
||||||
%r print register offset address for wldt/wstr instruction. */
|
%r print register offset address for wldt/wstr instruction. */
|
||||||
|
|
||||||
enum
|
enum opcode_sentinel_enum
|
||||||
{
|
{
|
||||||
SENTINEL_IWMMXT_START = 1,
|
SENTINEL_IWMMXT_START = 1,
|
||||||
SENTINEL_IWMMXT_END,
|
SENTINEL_IWMMXT_END,
|
||||||
|
|
Loading…
Reference in a new issue