* elf-bfd.h (MIPS_ELF_TDATA): New elf_object_id.
	* elf32-mips.c (bfd_elf32_mkobject): Define.
	* elf64-mips.c (bfd_elf64_mkobject): Likewise.
	* elfn32-mips.c (bfd_elf32_mkobject): Likewise.
	* elfxx-mips.h (_bfd_mips_elf_mkobject): Declare.
	* elfxx-mips.c (is_mips_elf): New macro.
	(_bfd_mips_elf_mkobject): New function.
	(_bfd_mips_elf_final_link): Use is_mips_elf.
	(_bfd_mips_elf_merge_private_bfd_data): Likewise.
This commit is contained in:
Richard Sandiford 2008-08-07 20:03:25 +00:00
parent aff469fa8d
commit d5eaccd71d
7 changed files with 34 additions and 5 deletions

View File

@ -1,3 +1,15 @@
2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
* elf-bfd.h (MIPS_ELF_TDATA): New elf_object_id.
* elf32-mips.c (bfd_elf32_mkobject): Define.
* elf64-mips.c (bfd_elf64_mkobject): Likewise.
* elfn32-mips.c (bfd_elf32_mkobject): Likewise.
* elfxx-mips.h (_bfd_mips_elf_mkobject): Declare.
* elfxx-mips.c (is_mips_elf): New macro.
(_bfd_mips_elf_mkobject): New function.
(_bfd_mips_elf_final_link): Use is_mips_elf.
(_bfd_mips_elf_merge_private_bfd_data): Likewise.
2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
* elfxx-mips.c (mips_elf_record_relocs): Defer allocation of a

View File

@ -1408,6 +1408,7 @@ enum elf_object_id
ARM_ELF_TDATA,
HPPA_ELF_TDATA,
I386_ELF_TDATA,
MIPS_ELF_TDATA,
PPC32_ELF_TDATA,
PPC64_ELF_TDATA,
S390_ELF_TDATA,

View File

@ -1630,6 +1630,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
#define bfd_elf32_set_section_contents _bfd_mips_elf_set_section_contents
#define bfd_elf32_bfd_get_relocated_section_contents \
_bfd_elf_mips_get_relocated_section_contents
#define bfd_elf32_mkobject _bfd_mips_elf_mkobject
#define bfd_elf32_bfd_link_hash_table_create \
_bfd_mips_elf_link_hash_table_create
#define bfd_elf32_bfd_final_link _bfd_mips_elf_final_link

View File

@ -3210,6 +3210,7 @@ const struct elf_size_info mips_elf64_size_info =
#define bfd_elf64_set_section_contents _bfd_mips_elf_set_section_contents
#define bfd_elf64_bfd_get_relocated_section_contents \
_bfd_elf_mips_get_relocated_section_contents
#define bfd_elf64_mkobject _bfd_mips_elf_mkobject
#define bfd_elf64_bfd_link_hash_table_create \
_bfd_mips_elf_link_hash_table_create
#define bfd_elf64_bfd_final_link _bfd_mips_elf_final_link

View File

@ -2458,6 +2458,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = {
#define bfd_elf32_set_section_contents _bfd_mips_elf_set_section_contents
#define bfd_elf32_bfd_get_relocated_section_contents \
_bfd_elf_mips_get_relocated_section_contents
#define bfd_elf32_mkobject _bfd_mips_elf_mkobject
#define bfd_elf32_bfd_link_hash_table_create \
_bfd_mips_elf_link_hash_table_create
#define bfd_elf32_bfd_final_link _bfd_mips_elf_final_link

View File

@ -243,6 +243,11 @@ struct _mips_elf_section_data
#define mips_elf_section_data(sec) \
((struct _mips_elf_section_data *) elf_section_data (sec))
#define is_mips_elf(bfd) \
(bfd_get_flavour (bfd) == bfd_target_elf_flavour \
&& elf_tdata (bfd) != NULL \
&& elf_object_id (bfd) == MIPS_ELF_TDATA)
/* The ABI says that every symbol used by dynamic relocations must have
a global GOT entry. Among other things, this provides the dynamic
linker with a free, directly-indexed cache. The GOT can therefore
@ -10640,6 +10645,15 @@ error_return:
return NULL;
}
/* Allocate ABFD's target-dependent data. */
bfd_boolean
_bfd_mips_elf_mkobject (bfd *abfd)
{
return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata),
MIPS_ELF_TDATA);
}
/* Create a MIPS ELF linker hash table. */
struct bfd_link_hash_table *
@ -10936,9 +10950,7 @@ _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
input_section = p->u.indirect.section;
input_bfd = input_section->owner;
if (bfd_get_flavour (input_bfd) != bfd_target_elf_flavour
|| (get_elf_backend_data (input_bfd)
->elf_backend_ecoff_debug_swap) == NULL)
if (!is_mips_elf (input_bfd))
{
/* I don't know what a non MIPS ELF bfd would be
doing with a .mdebug section, but I don't really
@ -11611,8 +11623,7 @@ _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
return FALSE;
}
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
return TRUE;
if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)

View File

@ -93,6 +93,8 @@ extern bfd_boolean _bfd_mips_elf_set_section_contents
extern bfd_byte *_bfd_elf_mips_get_relocated_section_contents
(bfd *, struct bfd_link_info *, struct bfd_link_order *,
bfd_byte *, bfd_boolean, asymbol **);
extern bfd_boolean _bfd_mips_elf_mkobject
(bfd *);
extern struct bfd_link_hash_table *_bfd_mips_elf_link_hash_table_create
(bfd *);
extern struct bfd_link_hash_table *_bfd_mips_vxworks_link_hash_table_create