<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>