Add support for reading files with more than 0xff00 sections.
llvm-svn: 245880
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp
index 7db8a25..a58093f 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -46,6 +46,12 @@
case SHT_SYMTAB:
Symtab = &Sec;
break;
+ case SHT_SYMTAB_SHNDX: {
+ ErrorOr<ArrayRef<Elf_Word>> ErrorOrTable = ELFObj->getSHNDXTable(Sec);
+ error(ErrorOrTable);
+ SymtabSHNDX = *ErrorOrTable;
+ break;
+ }
case SHT_STRTAB:
case SHT_NULL:
case SHT_RELA:
@@ -82,7 +88,11 @@
ErrorOr<StringRef> NameOrErr = Sym->getName(StringTable);
error(NameOrErr.getError());
StringRef Name = *NameOrErr;
- uint16_t SecIndex = Sym->st_shndx;
+
+ uint32_t SecIndex = Sym->st_shndx;
+ if (SecIndex == SHN_XINDEX)
+ SecIndex = ELFObj->getExtendedSymbolTableIndex(Sym, Symtab, SymtabSHNDX);
+
switch (Sym->getBinding()) {
default:
error("unexpected binding");