lto-elf.c (ELFOSABI_NONE, [...]): Define if not defined.

* lto-elf.c (ELFOSABI_NONE, ELFOSABI_LINUX): Define if not defined.
	(validate_file): Allow merging of ELFOSABI_NONE with ELFOSABI_LINUX
	objects.

From-SVN: r161935
This commit is contained in:
Jakub Jelinek 2010-07-07 23:16:28 +02:00 committed by Jakub Jelinek
parent fc0f0c8bd3
commit 1b13783702
2 changed files with 34 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2010-07-07 Jakub Jelinek <jakub@redhat.com>
* lto-elf.c (ELFOSABI_NONE, ELFOSABI_LINUX): Define if not defined.
(validate_file): Allow merging of ELFOSABI_NONE with ELFOSABI_LINUX
objects.
2010-07-05 Jan Hubicka <jh@suse.cz>
* lto.c (add_cgraph_node_to_partition): Forward declare; walk also

View File

@ -38,6 +38,13 @@ along with GCC; see the file COPYING3. If not see
# define EM_SPARC32PLUS 18
#endif
#ifndef ELFOSABI_NONE
# define ELFOSABI_NONE 0
#endif
#ifndef ELFOSABI_LINUX
# define ELFOSABI_LINUX 3
#endif
/* Handle opening elf files on hosts, such as Windows, that may use
text file handling that will break binary access. */
@ -519,10 +526,28 @@ validate_file (lto_elf_file *elf_file)
memcpy (cached_file_attrs.elf_ident, elf_ident,
sizeof cached_file_attrs.elf_ident);
}
else
{
char elf_ident_buf[EI_NIDENT];
if (memcmp (elf_ident, cached_file_attrs.elf_ident,
sizeof cached_file_attrs.elf_ident))
return false;
memcpy (elf_ident_buf, elf_ident, sizeof elf_ident_buf);
if (elf_ident_buf[EI_OSABI] != cached_file_attrs.elf_ident[EI_OSABI])
{
/* Allow mixing ELFOSABI_NONE with ELFOSABI_LINUX, with the result
ELFOSABI_LINUX. */
if (elf_ident_buf[EI_OSABI] == ELFOSABI_NONE
&& cached_file_attrs.elf_ident[EI_OSABI] == ELFOSABI_LINUX)
elf_ident_buf[EI_OSABI] = cached_file_attrs.elf_ident[EI_OSABI];
else if (elf_ident_buf[EI_OSABI] == ELFOSABI_LINUX
&& cached_file_attrs.elf_ident[EI_OSABI] == ELFOSABI_NONE)
cached_file_attrs.elf_ident[EI_OSABI] = elf_ident_buf[EI_OSABI];
}
if (memcmp (elf_ident_buf, cached_file_attrs.elf_ident,
sizeof cached_file_attrs.elf_ident))
return false;
}
/* Check that the input file is a relocatable object file with the correct
architecture. */