Merge rev 1.8 (only define "ELF_DYNAMIC_INTERPRETER" if it isn't defined

elsewhere.) into Binutils 2.11.2.
This commit is contained in:
David E. O'Brien 2001-06-26 17:15:34 +00:00
parent fdcfb587ca
commit dd752cf395
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=78832

View file

@ -1,5 +1,5 @@
/* Intel 80386/80486-specific support for 32-bit ELF
Copyright 1993, 94, 95, 96, 97, 98, 99, 2000
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
@ -507,6 +507,20 @@ elf_i386_check_relocs (abfd, info, sec, relocs)
r_symndx = ELF32_R_SYM (rel->r_info);
if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr))
{
if (abfd->my_archive)
(*_bfd_error_handler) (_("%s(%s): bad symbol index: %d"),
bfd_get_filename (abfd->my_archive),
bfd_get_filename (abfd),
r_symndx);
else
(*_bfd_error_handler) (_("%s: bad symbol index: %d"),
bfd_get_filename (abfd),
r_symndx);
return false;
}
if (r_symndx < symtab_hdr->sh_info)
h = NULL;
else
@ -692,7 +706,7 @@ elf_i386_check_relocs (abfd, info, sec, relocs)
(*_bfd_error_handler) (_("%s: bad relocation section name `%s\'"),
bfd_get_filename (abfd),
name);
}
}
sreloc = bfd_get_section_by_name (dynobj, name);
if (sreloc == NULL)
@ -824,7 +838,7 @@ elf_i386_gc_mark_hook (abfd, info, rel, h, sym)
static boolean
elf_i386_gc_sweep_hook (abfd, info, sec, relocs)
bfd *abfd;
struct bfd_link_info *info ATTRIBUTE_UNUSED;
struct bfd_link_info *info;
asection *sec;
const Elf_Internal_Rela *relocs;
{
@ -2072,6 +2086,44 @@ elf_i386_finish_dynamic_sections (output_bfd, info)
return true;
}
/* Set the correct type for an x86 ELF section. We do this by the
section name, which is a hack, but ought to work. */
static boolean
elf_i386_fake_sections (abfd, hdr, sec)
bfd *abfd ATTRIBUTE_UNUSED;
Elf32_Internal_Shdr *hdr;
asection *sec;
{
register const char *name;
name = bfd_get_section_name (abfd, sec);
if (strcmp (name, ".reloc") == 0)
/*
* This is an ugly, but unfortunately necessary hack that is
* needed when producing EFI binaries on x86. It tells
* elf.c:elf_fake_sections() not to consider ".reloc" as a section
* containing ELF relocation info. We need this hack in order to
* be able to generate ELF binaries that can be translated into
* EFI applications (which are essentially COFF objects). Those
* files contain a COFF ".reloc" section inside an ELFNN object,
* which would normally cause BFD to segfault because it would
* attempt to interpret this section as containing relocation
* entries for section "oc". With this hack enabled, ".reloc"
* will be treated as a normal data section, which will avoid the
* segfault. However, you won't be able to create an ELFNN binary
* with a section named "oc" that needs relocations, but that's
* the kind of ugly side-effects you get when detecting section
* types based on their names... In practice, this limitation is
* unlikely to bite.
*/
hdr->sh_type = SHT_PROGBITS;
return true;
}
#define TARGET_LITTLE_SYM bfd_elf32_i386_vec
#define TARGET_LITTLE_NAME "elf32-i386"
#define ELF_ARCH bfd_arch_i386
@ -2102,5 +2154,6 @@ elf_i386_finish_dynamic_sections (output_bfd, info)
#define elf_backend_gc_sweep_hook elf_i386_gc_sweep_hook
#define elf_backend_relocate_section elf_i386_relocate_section
#define elf_backend_size_dynamic_sections elf_i386_size_dynamic_sections
#define elf_backend_fake_sections elf_i386_fake_sections
#include "elf32-target.h"