From ef84219d211a354f5fa58ca307bb9999e406868f Mon Sep 17 00:00:00 2001 From: George Rimar Date: Fri, 2 Jun 2017 09:17:45 +0000 Subject: [PATCH] [ELF] - Assign SHF_INFO_LINK flag to REL[A] sections. Spec says: (http://www.sco.com/developers/gabi/latest/ch4.sheader.html) sh_info This member holds extra information, whose interpretation depends on the section type. If the sh_flags field for this section header includes the attribute SHF_INFO_LINK, then this member represents a section header table index. SHF_INFO_LINK The sh_info field of this section header holds a section header table index. Since sh_info for SHT_REL[A] sections should contain the section header index of the section to which the relocation applies, this is consistent with spec to put this flag. Behavior matches both bfd and gold as well. Differential revision: https://reviews.llvm.org/D33763 llvm-svn: 304531 --- lld/ELF/OutputSections.cpp | 1 + lld/test/ELF/emit-relocs.s | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index 4f8906a32081..8357d6b03bb1 100644 --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -128,6 +128,7 @@ template void OutputSection::finalize() { // the section to which the relocation applies. InputSectionBase *S = First->getRelocatedSection(); Info = S->getOutputSection()->SectionIndex; + Flags |= SHF_INFO_LINK; } static uint64_t updateOffset(uint64_t Off, InputSection *S) { diff --git a/lld/test/ELF/emit-relocs.s b/lld/test/ELF/emit-relocs.s index dfe20589e97b..81763bc0dfbd 100644 --- a/lld/test/ELF/emit-relocs.s +++ b/lld/test/ELF/emit-relocs.s @@ -1,7 +1,7 @@ # REQUIRES: x86 # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t1.o # RUN: ld.lld --emit-relocs %t1.o -o %t -# RUN: llvm-readobj -t -r %t | FileCheck %s +# RUN: llvm-readobj -t -r -s %t | FileCheck %s ## Check single dash form. # RUN: ld.lld -emit-relocs %t1.o -o %t1 @@ -11,6 +11,13 @@ # RUN: ld.lld -q %t1.o -o %t2 # RUN: llvm-readobj -t -r %t2 | FileCheck %s +# CHECK: Section { +# CHECK: Index: 2 +# CHECK-NEXT: Name: .rela.text +# CHECK-NEXT: Type: SHT_RELA +# CHECK-NEXT: Flags [ +# CHECK-NEXT: SHF_INFO_LINK +# CHECK-NEXT: ] # CHECK: Relocations [ # CHECK-NEXT: Section ({{.*}}) .rela.text { # CHECK-NEXT: 0x201002 R_X86_64_32 .text 0x1 -- GitLab