[PATCH] D90224: [yaml2obj] - Support the "Offset" key for the .dynstr section.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 27 04:52:16 PDT 2020
grimar created this revision.
grimar added reviewers: jhenderson, MaskRay.
Herald added subscribers: hiraditya, emaste.
Herald added a reviewer: espindola.
Herald added a project: LLVM.
grimar requested review of this revision.
Out "implicit" sections are handled separate from regular ones.
It turns out that the "Offset" key is not handled properly for them.
Perhaps we can generalize handling in one place, but before doing that I'd like
to add support and test cases for each implicit section.
(I need this particular single change to unblock another patch that is already on review,
and I guess doing it independently for each section will be cleaner, see below).
In this patch I've removed `explicit-dynsym-no-dynstr.yaml` to `dynsym-section.yaml`
and added the new test into. In a follow-up we probably might want
to merge 2 another existent `dynsymtab-*.yaml` tests into it too.
https://reviews.llvm.org/D90224
Files:
llvm/lib/ObjectYAML/ELFEmitter.cpp
llvm/test/tools/yaml2obj/ELF/dynsym-section.yaml
llvm/test/tools/yaml2obj/ELF/explicit-dynsym-no-dynstr.yaml
Index: llvm/test/tools/yaml2obj/ELF/explicit-dynsym-no-dynstr.yaml
===================================================================
--- llvm/test/tools/yaml2obj/ELF/explicit-dynsym-no-dynstr.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-## Check we do not crash/assert when .dynsym is specified
-## explicitly, but .dynstr is not present.
-
-# RUN: yaml2obj %s -o %t
-# RUN: llvm-readelf --section-headers %t | FileCheck %s
-
-## Check that .dynsym has Link field set to 0.
-
-# CHECK: Section Headers:
-# CHECK-NEXT: [Nr] Name Type Address Off Size ES Flg Lk
-# CHECK-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0
-# CHECK-NEXT: [ 1] .dynsym DYNSYM 0000000000000000 000040 000018 18 A 0
-
---- !ELF
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_DYN
-Sections:
- - Name: .dynsym
- Type: SHT_DYNSYM
Index: llvm/test/tools/yaml2obj/ELF/dynsym-section.yaml
===================================================================
--- /dev/null
+++ llvm/test/tools/yaml2obj/ELF/dynsym-section.yaml
@@ -0,0 +1,33 @@
+## Check how we produce SHT_DYNSYM sections.
+
+## Check we do not crash/assert when .dynsym is specified
+## explicitly, but .dynstr is not present.
+## Check we set the sh_link field to 0 for the .dynsym section in this case.
+
+# RUN: yaml2obj %s -o %t1
+# RUN: llvm-readelf --section-headers %t1 | FileCheck %s
+
+# CHECK: Section Headers:
+# CHECK-NEXT: [Nr] Name Type Address Off Size ES Flg Lk
+# CHECK-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0
+# CHECK-NEXT: [ 1] .dynsym DYNSYM 0000000000000000 000040 000018 18 A 0
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_DYN
+Sections:
+ - Name: .dynsym
+ Type: SHT_DYNSYM
+ Offset: [[OFFSET=<none>]]
+
+## Check we can use the "Offset" key to to set an arbitrary offset for the SHT_DYNSYM section.
+
+# RUN: yaml2obj %s -DOFFSET=0x100 -o %t2
+# RUN: llvm-readelf --section-headers %t2 | FileCheck %s --check-prefix=OFFSET
+
+# OFFSET: Section Headers:
+# OFFSET-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al
+# OFFSET-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0 0
+# OFFSET-NEXT: [ 1] .dynsym DYNSYM 0000000000000000 000100 000018 18 A 0 1 0
Index: llvm/lib/ObjectYAML/ELFEmitter.cpp
===================================================================
--- llvm/lib/ObjectYAML/ELFEmitter.cpp
+++ llvm/lib/ObjectYAML/ELFEmitter.cpp
@@ -903,7 +903,8 @@
assignSectionAddress(SHeader, YAMLSec);
- SHeader.sh_offset = alignToOffset(CBA, SHeader.sh_addralign, /*Offset=*/None);
+ SHeader.sh_offset =
+ alignToOffset(CBA, SHeader.sh_addralign, RawSec ? RawSec->Offset : None);
if (RawSec && (RawSec->Content || RawSec->Size)) {
assert(Symbols.empty());
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90224.300952.patch
Type: text/x-patch
Size: 2867 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201027/b81d338e/attachment.bin>
More information about the llvm-commits
mailing list