[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