aboutsummaryrefslogtreecommitdiff
path: root/llvm
diff options
context:
space:
mode:
authorHiroshi Yamauchi <hjyamauchi@gmail.com>2023-08-03 15:57:28 -0700
committerHiroshi Yamauchi <hjyamauchi@gmail.com>2023-08-04 13:38:30 -0700
commite9040e875d9252f726c41579f70663154718c3c6 (patch)
tree61003ff32967d1ea97a7d8267957839577e6bd61 /llvm
parent2b1bdc9f0bc64af02204c746eead0dd304c128da (diff)
downloadllvm-e9040e875d9252f726c41579f70663154718c3c6.zip
llvm-e9040e875d9252f726c41579f70663154718c3c6.tar.gz
llvm-e9040e875d9252f726c41579f70663154718c3c6.tar.bz2
[lldb][PECOFF] Exclude alignment padding when reading section data
There can be zero padding bytes at a section end for file alignment in PECOFF. Exclude those padding bytes when reading the section data. Differential Revision: https://reviews.llvm.org/D157059
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/ObjectYAML/COFFYAML.cpp11
-rw-r--r--llvm/test/tools/yaml2obj/COFF/invalid-raw-data.yaml2
-rw-r--r--llvm/test/tools/yaml2obj/COFF/xrelocs.yaml1
3 files changed, 8 insertions, 6 deletions
diff --git a/llvm/lib/ObjectYAML/COFFYAML.cpp b/llvm/lib/ObjectYAML/COFFYAML.cpp
index 3fe2ea5..cd1db24 100644
--- a/llvm/lib/ObjectYAML/COFFYAML.cpp
+++ b/llvm/lib/ObjectYAML/COFFYAML.cpp
@@ -689,11 +689,12 @@ void MappingTraits<COFFYAML::Section>::mapping(IO &IO, COFFYAML::Section &Sec) {
return;
}
- // Uninitialized sections, such as .bss, typically have no data, but the size
- // is carried in SizeOfRawData, even though PointerToRawData is zero.
- if (Sec.SectionData.binary_size() == 0 && Sec.StructuredData.empty() &&
- NC->Characteristics & COFF::IMAGE_SCN_CNT_UNINITIALIZED_DATA)
- IO.mapOptional("SizeOfRawData", Sec.Header.SizeOfRawData);
+ IO.mapOptional("SizeOfRawData", Sec.Header.SizeOfRawData, 0U);
+
+ if (!Sec.StructuredData.empty() && Sec.Header.SizeOfRawData) {
+ IO.setError("StructuredData and SizeOfRawData can't be used together");
+ return;
+ }
IO.mapOptional("Relocations", Sec.Relocations);
}
diff --git a/llvm/test/tools/yaml2obj/COFF/invalid-raw-data.yaml b/llvm/test/tools/yaml2obj/COFF/invalid-raw-data.yaml
index 62445fa..1691d4a 100644
--- a/llvm/test/tools/yaml2obj/COFF/invalid-raw-data.yaml
+++ b/llvm/test/tools/yaml2obj/COFF/invalid-raw-data.yaml
@@ -1,5 +1,5 @@
# RUN: not yaml2obj %s -o %t 2>&1 | FileCheck %s
-# CHECK: YAML:18:5: error: unknown key 'SizeOfRawData'
+# CHECK: YAML:14:5: error: StructuredData and SizeOfRawData can't be used together
--- !COFF
OptionalHeader:
diff --git a/llvm/test/tools/yaml2obj/COFF/xrelocs.yaml b/llvm/test/tools/yaml2obj/COFF/xrelocs.yaml
index fbc22a1..cecef3b 100644
--- a/llvm/test/tools/yaml2obj/COFF/xrelocs.yaml
+++ b/llvm/test/tools/yaml2obj/COFF/xrelocs.yaml
@@ -30,6 +30,7 @@
# CHECK-YAML-NEXT: Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_LNK_NRELOC_OVFL, IMAGE_SCN_MEM_READ ]
# CHECK-YAML-NEXT: Alignment: 16
# CHECK-YAML-NEXT: SectionData: '00000000000000000000000000000000'
+# CHECK-YAML-NEXT: SizeOfRawData: 16
# CHECK-YAML-NEXT: Relocations:
# CHECK-YAML-NEXT: - VirtualAddress: 0
# CHECK-YAML-NEXT: SymbolName: foo