Place .shstrtab section after .symtab and .strtab, thus restoring monotonically increasing section offsets.
bfd * elf.c (assign_section_numbers): Assign number for the .shstrtab section after the symbol table and string table sections. binutils * testsuite/binutils-all/readelf.s: Adjust expected ordering of sections. * testsuite/binutils-all/readelf.s-64: Likewise. gas * testsuite/gas/i386/ilp32/x86-64-unwind.d: Adjust expected ordering of sections. * testsuite/gas/i386/x86-64-unwind.d: Likewise. * testsuite/gas/ia64/alias-ilp32.d: Likewise. * testsuite/gas/ia64/alias.d: Likewise. * testsuite/gas/ia64/group-1.d: Likewise. * testsuite/gas/ia64/group-2.d: Likewise. * testsuite/gas/ia64/secname-ilp32.d: Likewise. * testsuite/gas/ia64/secname.d: Likewise. * testsuite/gas/ia64/unwind-ilp32.d: Likewise. * testsuite/gas/ia64/unwind.d: Likewise. * testsuite/gas/ia64/xdata-ilp32.d: Likewise. * testsuite/gas/ia64/xdata.d: Likewise. * testsuite/gas/mmix/bspec-1.d: Likewise. * testsuite/gas/mmix/bspec-2.d: Likewise. * testsuite/gas/mmix/byte-1.d: Likewise. * testsuite/gas/mmix/loc-1.d: Likewise. * testsuite/gas/mmix/loc-2.d: Likewise. * testsuite/gas/mmix/loc-3.d: Likewise. * testsuite/gas/mmix/loc-4.d: Likewise. * testsuite/gas/mmix/loc-5.d: Likewise. * testsuite/gas/tic6x/scomm-directive-4.d: Likewise. ld * testsuite/ld-alpha/tlsbin.rd: Adjust expected ordering of sections. * testsuite/ld-alpha/tlsbinr.rd: Likewise. * testsuite/ld-alpha/tlspic.rd: Likewise. * testsuite/ld-cris/libdso-2.d: Likewise. * testsuite/ld-i386/nogot1.d: Likewise. * testsuite/ld-i386/pr12718.d: Likewise. * testsuite/ld-i386/pr12921.d: Likewise. * testsuite/ld-i386/tlsbin-nacl.rd: Likewise. * testsuite/ld-i386/tlsbin.rd: Likewise. * testsuite/ld-i386/tlsbin2-nacl.rd: Likewise. * testsuite/ld-i386/tlsbin2.rd: Likewise. * testsuite/ld-i386/tlsbindesc-nacl.rd: Likewise. * testsuite/ld-i386/tlsbindesc.rd: Likewise. * testsuite/ld-i386/tlsdesc-nacl.rd: Likewise. * testsuite/ld-i386/tlsdesc.rd: Likewise. * testsuite/ld-i386/tlsgdesc-nacl.rd: Likewise. * testsuite/ld-i386/tlsgdesc.rd: Likewise. * testsuite/ld-i386/tlsnopic-nacl.rd: Likewise. * testsuite/ld-i386/tlsnopic.rd: Likewise. * testsuite/ld-i386/tlspic-nacl.rd: Likewise. * testsuite/ld-i386/tlspic.rd: Likewise. * testsuite/ld-i386/tlspic2-nacl.rd: Likewise. * testsuite/ld-i386/tlspic2.rd: Likewise. * testsuite/ld-ia64/tlsbin.rd: Likewise. * testsuite/ld-ia64/tlspic.rd: Likewise. * testsuite/ld-mips-elf/attr-gnu-4-10.d: Likewise. * testsuite/ld-mips-elf/attr-gnu-4-50.d: Likewise. * testsuite/ld-mips-elf/attr-gnu-4-60.d: Likewise. * testsuite/ld-mips-elf/attr-gnu-4-70.d: Likewise. * testsuite/ld-mmix/bspec1.d: Likewise. * testsuite/ld-mmix/bspec2.d: Likewise. * testsuite/ld-mmix/local1.d: Likewise. * testsuite/ld-mmix/local3.d: Likewise. * testsuite/ld-mmix/local5.d: Likewise. * testsuite/ld-mmix/local7.d: Likewise. * testsuite/ld-mmix/undef-3.d: Likewise. * testsuite/ld-powerpc/tlsexe.r: Likewise. * testsuite/ld-powerpc/tlsexe32.r: Likewise. * testsuite/ld-powerpc/tlsexetoc.r: Likewise. * testsuite/ld-powerpc/tlsso.r: Likewise. * testsuite/ld-powerpc/tlsso32.r: Likewise. * testsuite/ld-powerpc/tlstocso.r: Likewise. * testsuite/ld-s390/tlsbin.rd: Likewise. * testsuite/ld-s390/tlsbin_64.rd: Likewise. * testsuite/ld-s390/tlspic.rd: Likewise. * testsuite/ld-s390/tlspic_64.rd: Likewise. * testsuite/ld-sh/sh64/crange1.rd: Likewise. * testsuite/ld-sh/sh64/crange2.rd: Likewise. * testsuite/ld-sh/sh64/crange3-cmpct.rd: Likewise. * testsuite/ld-sh/sh64/crange3-media.rd: Likewise. * testsuite/ld-sh/sh64/crange3.rd: Likewise. * testsuite/ld-sh/sh64/crangerel1.rd: Likewise. * testsuite/ld-sh/sh64/crangerel2.rd: Likewise. * testsuite/ld-sh/tlsbin-2.d: Likewise. * testsuite/ld-sh/tlspic-2.d: Likewise. * testsuite/ld-sparc/gotop32.rd: Likewise. * testsuite/ld-sparc/gotop64.rd: Likewise. * testsuite/ld-sparc/tlssunbin32.rd: Likewise. * testsuite/ld-sparc/tlssunbin64.rd: Likewise. * testsuite/ld-sparc/tlssunnopic32.rd: Likewise. * testsuite/ld-sparc/tlssunnopic64.rd: Likewise. * testsuite/ld-sparc/tlssunpic32.rd: Likewise. * testsuite/ld-sparc/tlssunpic64.rd: Likewise. * testsuite/ld-tic6x/common.d: Likewise. * testsuite/ld-tic6x/shlib-1.rd: Likewise. * testsuite/ld-tic6x/shlib-1b.rd: Likewise. * testsuite/ld-tic6x/shlib-1r.rd: Likewise. * testsuite/ld-tic6x/shlib-1rb.rd: Likewise. * testsuite/ld-tic6x/shlib-app-1.rd: Likewise. * testsuite/ld-tic6x/shlib-app-1b.rd: Likewise. * testsuite/ld-tic6x/shlib-app-1r.rd: Likewise. * testsuite/ld-tic6x/shlib-app-1rb.rd: Likewise. * testsuite/ld-tic6x/shlib-noindex.rd: Likewise. * testsuite/ld-tic6x/static-app-1.rd: Likewise. * testsuite/ld-tic6x/static-app-1b.rd: Likewise. * testsuite/ld-tic6x/static-app-1r.rd: Likewise. * testsuite/ld-tic6x/static-app-1rb.rd: Likewise. * testsuite/ld-x86-64/ilp32-4-nacl.d: Likewise. * testsuite/ld-x86-64/ilp32-4.d: Likewise. * testsuite/ld-x86-64/nogot1.d: Likewise. * testsuite/ld-x86-64/pr12718.d: Likewise. * testsuite/ld-x86-64/pr12921.d: Likewise. * testsuite/ld-x86-64/split-by-file-nacl.rd: Likewise. * testsuite/ld-x86-64/split-by-file.rd: Likewise. * testsuite/ld-x86-64/tlsbin-nacl.rd: Likewise. * testsuite/ld-x86-64/tlsbin.rd: Likewise. * testsuite/ld-x86-64/tlsbin2-nacl.rd: Likewise. * testsuite/ld-x86-64/tlsbin2.rd: Likewise. * testsuite/ld-x86-64/tlsbindesc-nacl.rd: Likewise. * testsuite/ld-x86-64/tlsbindesc.rd: Likewise. * testsuite/ld-x86-64/tlsdesc-nacl.rd: Likewise. * testsuite/ld-x86-64/tlsdesc.rd: Likewise. * testsuite/ld-x86-64/tlsgdesc-nacl.rd: Likewise. * testsuite/ld-x86-64/tlsgdesc.rd: Likewise. * testsuite/ld-x86-64/tlspic-nacl.rd: Likewise. * testsuite/ld-x86-64/tlspic.rd: Likewise. * testsuite/ld-x86-64/tlspic2-nacl.rd: Likewise. * testsuite/ld-x86-64/tlspic2.rd: Likewise. * testsuite/ld-xtensa/tlsbin.rd: Likewise. * testsuite/ld-xtensa/tlspic.rd: Likewise.
This commit is contained in:
parent
d311bc8bf8
commit
dd90581873
129 changed files with 548 additions and 286 deletions
|
@ -5922,6 +5922,122 @@ process_section_headers (FILE * file)
|
|||
i < elf_header.e_shnum;
|
||||
i++, section++)
|
||||
{
|
||||
/* Run some sanity checks on the section header. */
|
||||
|
||||
/* Check the sh_link field. */
|
||||
switch (section->sh_type)
|
||||
{
|
||||
case SHT_SYMTAB_SHNDX:
|
||||
case SHT_GROUP:
|
||||
case SHT_HASH:
|
||||
case SHT_GNU_HASH:
|
||||
case SHT_GNU_versym:
|
||||
case SHT_REL:
|
||||
case SHT_RELA:
|
||||
if (section->sh_link < 1
|
||||
|| section->sh_link > elf_header.e_shnum
|
||||
|| (section_headers[section->sh_link].sh_type != SHT_SYMTAB
|
||||
&& section_headers[section->sh_link].sh_type != SHT_DYNSYM))
|
||||
warn (_("[%2u]: Link field (%u) should index a symtab section.\n"),
|
||||
i, section->sh_link);
|
||||
break;
|
||||
|
||||
case SHT_DYNAMIC:
|
||||
case SHT_SYMTAB:
|
||||
case SHT_DYNSYM:
|
||||
case SHT_GNU_verneed:
|
||||
case SHT_GNU_verdef:
|
||||
case SHT_GNU_LIBLIST:
|
||||
if (section->sh_link < 1
|
||||
|| section->sh_link > elf_header.e_shnum
|
||||
|| section_headers[section->sh_link].sh_type != SHT_STRTAB)
|
||||
warn (_("[%2u]: Link field (%u) should index a string section.\n"),
|
||||
i, section->sh_link);
|
||||
break;
|
||||
|
||||
case SHT_INIT_ARRAY:
|
||||
case SHT_FINI_ARRAY:
|
||||
case SHT_PREINIT_ARRAY:
|
||||
if (section->sh_type < SHT_LOOS && section->sh_link != 0)
|
||||
warn (_("[%2u]: Unexpected value (%u) in link field.\n"),
|
||||
i, section->sh_link);
|
||||
break;
|
||||
|
||||
default:
|
||||
/* FIXME: Add support for target specific section types. */
|
||||
#if 0 /* Currently we do not check other section types as there are too
|
||||
many special cases. Stab sections for example have a type
|
||||
of SHT_PROGBITS but an sh_link field that links to the .stabstr
|
||||
section. */
|
||||
if (section->sh_type < SHT_LOOS && section->sh_link != 0)
|
||||
warn (_("[%2u]: Unexpected value (%u) in link field.\n"),
|
||||
i, section->sh_link);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
/* Check the sh_info field. */
|
||||
switch (section->sh_type)
|
||||
{
|
||||
case SHT_REL:
|
||||
case SHT_RELA:
|
||||
if (section->sh_info < 1
|
||||
|| section->sh_info > elf_header.e_shnum
|
||||
|| (section_headers[section->sh_info].sh_type != SHT_PROGBITS
|
||||
&& section_headers[section->sh_info].sh_type != SHT_NOBITS
|
||||
&& section_headers[section->sh_info].sh_type != SHT_NOTE
|
||||
&& section_headers[section->sh_info].sh_type != SHT_INIT_ARRAY
|
||||
/* FIXME: Are other section types valid ? */
|
||||
&& section_headers[section->sh_info].sh_type < SHT_LOOS))
|
||||
{
|
||||
if (section->sh_info == 0
|
||||
&& (streq (SECTION_NAME (section), ".rel.dyn")
|
||||
|| streq (SECTION_NAME (section), ".rela.dyn")))
|
||||
/* The .rel.dyn and .rela.dyn sections have an sh_info field
|
||||
of zero. No idea why. I would have expected the index
|
||||
of the .plt section. */
|
||||
;
|
||||
else
|
||||
warn (_("[%2u]: Info field (%u) should index a relocatable section.\n"),
|
||||
i, section->sh_info);
|
||||
}
|
||||
break;
|
||||
|
||||
case SHT_DYNAMIC:
|
||||
case SHT_HASH:
|
||||
case SHT_SYMTAB_SHNDX:
|
||||
case SHT_INIT_ARRAY:
|
||||
case SHT_FINI_ARRAY:
|
||||
case SHT_PREINIT_ARRAY:
|
||||
if (section->sh_info != 0)
|
||||
warn (_("[%2u]: Unexpected value (%u) in info field.\n"),
|
||||
i, section->sh_info);
|
||||
break;
|
||||
|
||||
case SHT_GROUP:
|
||||
case SHT_SYMTAB:
|
||||
case SHT_DYNSYM:
|
||||
/* A symbol index - we assume that it is valid. */
|
||||
break;
|
||||
|
||||
default:
|
||||
/* FIXME: Add support for target specific section types. */
|
||||
if (section->sh_type == SHT_NOBITS)
|
||||
/* NOBITS section headers with non-zero sh_info fields can be
|
||||
created when a binary is stripped of everything but its debug
|
||||
information. The stripped sections have their headers preserved but their types set to SHT_NOBITS. so do not check this type of section. */
|
||||
;
|
||||
else if (section->sh_flags & SHF_INFO_LINK)
|
||||
{
|
||||
if (section->sh_info < 1 || section->sh_info > elf_header.e_shnum)
|
||||
warn (_("[%2u]: Expected link to another section in info field"), i);
|
||||
}
|
||||
else if (section->sh_type < SHT_LOOS && section->sh_info != 0)
|
||||
warn (_("[%2u]: Unexpected value (%u) in info field.\n"),
|
||||
i, section->sh_info);
|
||||
break;
|
||||
}
|
||||
|
||||
printf (" [%2u] ", i);
|
||||
if (do_section_details)
|
||||
printf ("%s\n ", printable_section_name (section));
|
||||
|
@ -11116,7 +11232,12 @@ process_symbol_table (FILE * file)
|
|||
putchar ('\n');
|
||||
|
||||
if (ELF_ST_BIND (psym->st_info) == STB_LOCAL
|
||||
&& si >= section->sh_info)
|
||||
&& si >= section->sh_info
|
||||
/* Irix 5 and 6 MIPS binaries are known to ignore this requirement. */
|
||||
&& elf_header.e_machine != EM_MIPS
|
||||
/* Solaris binaries have been found to violate this requirement as
|
||||
well. Not sure if this is a bug or an ABI requirement. */
|
||||
&& elf_header.e_ident[EI_OSABI] != ELFOSABI_SOLARIS)
|
||||
warn (_("local symbol %u found at index >= %s's sh_info value of %u\n"),
|
||||
si, printable_section_name (section), section->sh_info);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue