[PATCH] D29929: [ELF] - Do not segfault when using -r and section groups.

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 14 08:54:10 PST 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL295067: [ELF] - Do not segfault when using -r and section groups. (authored by grimar).

Changed prior to commit:
  https://reviews.llvm.org/D29929?vs=88335&id=88386#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D29929

Files:
  lld/trunk/ELF/InputFiles.cpp
  lld/trunk/test/ELF/relocation-group.test


Index: lld/trunk/test/ELF/relocation-group.test
===================================================================
--- lld/trunk/test/ELF/relocation-group.test
+++ lld/trunk/test/ELF/relocation-group.test
@@ -0,0 +1,43 @@
+# RUN: yaml2obj %s -o %t.o
+# RUN: ld.lld %t.o %t.o -o %t -r
+# RUN: llvm-readobj -s %t.o | FileCheck %s
+
+# CHECK:     Name: .text.foo
+# CHECK:     Name: .rela.text.foo
+
+## YAML below corresponds to following asm code:
+## .section .text,"axG", at progbits,foo,comdat
+## .quad bar
+## gas 2.27 does not include .rela.text to group in that case:
+## COMDAT group section [    1] `.group' [foo] contains 1 sections:
+##   [Index]    Name
+##   [    5]   .text
+--- !ELF
+FileHeader:
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  Type:            ET_REL
+  Machine:         EM_X86_64
+Sections:
+  - Name:            .group
+    Type:            SHT_GROUP
+    Link:            .symtab
+    Info:            foo
+    Members:
+      - SectionOrType:    GRP_COMDAT
+      - SectionOrType:    .text.foo
+  - Name:            .text.foo
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
+  - Name:            .rela.text.foo
+    Type:            SHT_RELA
+    Flags:           [ SHF_INFO_LINK ]
+    Link:            .symtab
+    Info:            .text.foo
+    Relocations:
+      - Offset:          0x0000000000000000
+        Symbol:          foo
+        Type:            R_X86_64_64
+Symbols:
+  Global:
+    - Name:            foo
Index: lld/trunk/ELF/InputFiles.cpp
===================================================================
--- lld/trunk/ELF/InputFiles.cpp
+++ lld/trunk/ELF/InputFiles.cpp
@@ -367,17 +367,20 @@
     return &InputSection<ELFT>::Discarded;
   case SHT_RELA:
   case SHT_REL: {
+    // Find the relocation target section and associate this
+    // section with it. Target can be discarded, for example
+    // if it is a duplicated member of SHT_GROUP section, we
+    // do not create or proccess relocatable sections then.
+    InputSectionBase<ELFT> *Target = getRelocTarget(Sec);
+    if (!Target)
+      return nullptr;
+
     // This section contains relocation information.
     // If -r is given, we do not interpret or apply relocation
     // but just copy relocation sections to output.
     if (Config->Relocatable)
       return make<InputSection<ELFT>>(this, &Sec, Name);
 
-    // Find the relocation target section and associate this
-    // section with it.
-    InputSectionBase<ELFT> *Target = getRelocTarget(Sec);
-    if (!Target)
-      return nullptr;
     if (Target->FirstRelocation)
       fatal(toString(this) +
             ": multiple relocation sections to one section are not supported");


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29929.88386.patch
Type: text/x-patch
Size: 2739 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170214/3d15d5d4/attachment.bin>


More information about the llvm-commits mailing list