+ else
+ {
+ char elf_ident_buf[EI_NIDENT];
+
+ 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];
+ }