<div dir="ltr">Can you use .rept for this?</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 24, 2015 at 2:43 PM, Rafael Espindola via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rafael<br>
Date: Mon Aug 24 16:43:25 2015<br>
New Revision: 245880<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=245880&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=245880&view=rev</a><br>
Log:<br>
Add support for reading files with more than 0xff00 sections.<br>
<br>
Added:<br>
lld/trunk/test/elf2/many-sections.s<br>
Modified:<br>
lld/trunk/ELF/InputFiles.cpp<br>
lld/trunk/ELF/InputFiles.h<br>
<br>
Modified: lld/trunk/ELF/InputFiles.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.cpp?rev=245880&r1=245879&r2=245880&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.cpp?rev=245880&r1=245879&r2=245880&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/ELF/InputFiles.cpp (original)<br>
+++ lld/trunk/ELF/InputFiles.cpp Mon Aug 24 16:43:25 2015<br>
@@ -46,6 +46,12 @@ template <class ELFT> void elf2::ObjectF<br>
case SHT_SYMTAB:<br>
Symtab = &Sec;<br>
break;<br>
+ case SHT_SYMTAB_SHNDX: {<br>
+ ErrorOr<ArrayRef<Elf_Word>> ErrorOrTable = ELFObj->getSHNDXTable(Sec);<br>
+ error(ErrorOrTable);<br>
+ SymtabSHNDX = *ErrorOrTable;<br>
+ break;<br>
+ }<br>
case SHT_STRTAB:<br>
case SHT_NULL:<br>
case SHT_RELA:<br>
@@ -82,7 +88,11 @@ SymbolBody *elf2::ObjectFile<ELFT>::crea<br>
ErrorOr<StringRef> NameOrErr = Sym->getName(StringTable);<br>
error(NameOrErr.getError());<br>
StringRef Name = *NameOrErr;<br>
- uint16_t SecIndex = Sym->st_shndx;<br>
+<br>
+ uint32_t SecIndex = Sym->st_shndx;<br>
+ if (SecIndex == SHN_XINDEX)<br>
+ SecIndex = ELFObj->getExtendedSymbolTableIndex(Sym, Symtab, SymtabSHNDX);<br>
+<br>
switch (Sym->getBinding()) {<br>
default:<br>
error("unexpected binding");<br>
<br>
Modified: lld/trunk/ELF/InputFiles.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.h?rev=245880&r1=245879&r2=245880&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.h?rev=245880&r1=245879&r2=245880&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/ELF/InputFiles.h (original)<br>
+++ lld/trunk/ELF/InputFiles.h Mon Aug 24 16:43:25 2015<br>
@@ -65,6 +65,7 @@ template <class ELFT> class ObjectFile :<br>
typedef typename llvm::object::ELFFile<ELFT>::Elf_Sym Elf_Sym;<br>
typedef typename llvm::object::ELFFile<ELFT>::Elf_Shdr Elf_Shdr;<br>
typedef typename llvm::object::ELFFile<ELFT>::Elf_Sym_Range Elf_Sym_Range;<br>
+ typedef typename llvm::object::ELFFile<ELFT>::Elf_Word Elf_Word;<br>
<br>
public:<br>
bool isCompatibleWith(const ObjectFileBase &Other) const override;<br>
@@ -102,6 +103,7 @@ private:<br>
std::vector<SectionChunk<ELFT> *> Chunks;<br>
<br>
const Elf_Shdr *Symtab = nullptr;<br>
+ ArrayRef<Elf_Word> SymtabSHNDX;<br>
};<br>
<br>
} // namespace elf2<br>
<br>
Added: lld/trunk/test/elf2/many-sections.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/many-sections.s?rev=245880&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/many-sections.s?rev=245880&view=auto</a><br>
==============================================================================<br>
--- lld/trunk/test/elf2/many-sections.s (added)<br>
+++ lld/trunk/test/elf2/many-sections.s Mon Aug 24 16:43:25 2015<br>
@@ -0,0 +1,113 @@<br>
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o %t<br>
+// RUN: llvm-readobj -t %t | FileCheck --check-prefix=LINKED %s<br>
+<br>
+// Verify that the symbol _start is in a section with an index >= SHN_LORESERVE.<br>
+// CHECK: Name: _start<br>
+// CHECK-NEXT: Value: 0x0<br>
+// CHECK-NEXT: Size: 0<br>
+// CHECK-NEXT: Binding: Global<br>
+// CHECK-NEXT: Type: None<br>
+// CHECK-NEXT: Other: 0<br>
+// CHECK-NEXT: Section: dm (0xFF00)<br>
+<br>
+<br>
+// RUN: lld -flavor gnu2 %t -o %t2<br>
+// RUN: llvm-readobj -t %t2 | FileCheck --check-prefix=LINKED %s<br>
+<br>
+// Test that _start is in the correct section.<br>
+// LINKED: Name: _start<br>
+// LINKED-NEXT: Value: 0x0<br>
+// LINKED-NEXT: Size: 0<br>
+// LINKED-NEXT: Binding: Global<br>
+// LINKED-NEXT: Type: None<br>
+// LINKED-NEXT: Other: 0<br>
+// LINKED-NEXT: Section: dm<br>
+<br>
+.macro gen_sections4 x<br>
+ .section a\x<br>
+ .section b\x<br>
+ .section c\x<br>
+ .section d\x<br>
+.endm<br>
+<br>
+.macro gen_sections8 x<br>
+ gen_sections4 a\x<br>
+ gen_sections4 b\x<br>
+.endm<br>
+<br>
+.macro gen_sections16 x<br>
+ gen_sections8 a\x<br>
+ gen_sections8 b\x<br>
+.endm<br>
+<br>
+.macro gen_sections32 x<br>
+ gen_sections16 a\x<br>
+ gen_sections16 b\x<br>
+.endm<br>
+<br>
+.macro gen_sections64 x<br>
+ gen_sections32 a\x<br>
+ gen_sections32 b\x<br>
+.endm<br>
+<br>
+.macro gen_sections128 x<br>
+ gen_sections64 a\x<br>
+ gen_sections64 b\x<br>
+.endm<br>
+<br>
+.macro gen_sections256 x<br>
+ gen_sections128 a\x<br>
+ gen_sections128 b\x<br>
+.endm<br>
+<br>
+.macro gen_sections512 x<br>
+ gen_sections256 a\x<br>
+ gen_sections256 b\x<br>
+.endm<br>
+<br>
+.macro gen_sections1024 x<br>
+ gen_sections512 a\x<br>
+ gen_sections512 b\x<br>
+.endm<br>
+<br>
+.macro gen_sections2048 x<br>
+ gen_sections1024 a\x<br>
+ gen_sections1024 b\x<br>
+.endm<br>
+<br>
+.macro gen_sections4096 x<br>
+ gen_sections2048 a\x<br>
+ gen_sections2048 b\x<br>
+.endm<br>
+<br>
+.macro gen_sections8192 x<br>
+ gen_sections4096 a\x<br>
+ gen_sections4096 b\x<br>
+.endm<br>
+<br>
+.macro gen_sections16384 x<br>
+ gen_sections8192 a\x<br>
+ gen_sections8192 b\x<br>
+.endm<br>
+<br>
+.macro gen_sections32768 x<br>
+ gen_sections16384 a\x<br>
+ gen_sections16384 b\x<br>
+.endm<br>
+<br>
+gen_sections32768 a<br>
+gen_sections16384 b<br>
+gen_sections8192 c<br>
+gen_sections4096 d<br>
+gen_sections2048 e<br>
+gen_sections1024 f<br>
+gen_sections512 g<br>
+gen_sections128 h<br>
+gen_sections64 i<br>
+gen_sections32 j<br>
+gen_sections16 k<br>
+gen_sections8 l<br>
+gen_sections4 m<br>
+<br>
+.global _start<br>
+_start:<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>