From 0210a1a530f3b824d1429abf5cd7f24a869908bd Mon Sep 17 00:00:00 2001 From: George Rimar Date: Tue, 1 Oct 2019 09:54:40 +0000 Subject: [PATCH] [yaml2obj] - Allow specifying custom Link values for SHT_HASH section. This allows setting any sh_link values for SHT_HASH sections. Differential revision: https://reviews.llvm.org/D68214 llvm-svn: 373316 --- llvm/lib/ObjectYAML/ELFEmitter.cpp | 2 +- llvm/test/tools/yaml2obj/elf-hash-section.yaml | 32 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/llvm/lib/ObjectYAML/ELFEmitter.cpp b/llvm/lib/ObjectYAML/ELFEmitter.cpp index 5acb02a..1651d60 100644 --- a/llvm/lib/ObjectYAML/ELFEmitter.cpp +++ b/llvm/lib/ObjectYAML/ELFEmitter.cpp @@ -821,7 +821,7 @@ void ELFState::writeSectionContent(Elf_Shdr &SHeader, CBA.getOSAndAlignedOffset(SHeader.sh_offset, SHeader.sh_addralign); unsigned Link = 0; - if (SN2I.lookup(".dynsym", Link)) + if (Section.Link.empty() && SN2I.lookup(".dynsym", Link)) SHeader.sh_link = Link; if (Section.Content) { diff --git a/llvm/test/tools/yaml2obj/elf-hash-section.yaml b/llvm/test/tools/yaml2obj/elf-hash-section.yaml index 9995574..995c8714 100644 --- a/llvm/test/tools/yaml2obj/elf-hash-section.yaml +++ b/llvm/test/tools/yaml2obj/elf-hash-section.yaml @@ -145,3 +145,35 @@ FileHeader: Sections: - Name: .hash Type: SHT_HASH + +## Check we can set any sh_link value with use of the "Link" tag. + +# RUN: yaml2obj --docnum=8 %s -o %t8 +# RUN: llvm-readobj --sections %t8 | FileCheck %s --check-prefix=LINK + +# LINK: Name: .hash1 +# LINK: Link: +# LINK-SAME: 123 + +# LINK: Name: .hash2 +# LINK: Link: +# LINK-SAME: 1 + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_386 +Sections: + - Name: .hash1 + Type: SHT_HASH + Content: "" + Link: 123 + - Name: .hash2 + Type: SHT_HASH + Content: "" + Link: .hash1 +## SHT_HASH is linked to dynamic symbol table by default if it exists. + - Name: .dynsym + Type: SHT_DYNSYM -- 2.7.4