[PATCH] D81686: [yaml2obj][MachO] - Fix PubName/PubType handling.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 11 13:47:53 PDT 2020
grimar created this revision.
grimar added reviewers: jhenderson, MaskRay, Higuoxing, aprantl.
Herald added a subscriber: hiraditya.
Herald added a project: LLVM.
`PubName` and `PubType` are optional fields since D80722 <https://reviews.llvm.org/D80722>.
They are defined as:
Optional<PubSection> PubNames;
Optional<PubSection> PubTypes;
And initialized in the following way:
IO.mapOptional("debug_pubnames", DWARF.PubNames);
IO.mapOptional("debug_pubtypes", DWARF.PubTypes);
But problem is that because of the issue in `YAMLTraits.cpp`,
when there are no `debug_pubnames`/`debug_pubtypes` keys in a YAML description,
they are not initialized to `Optional::None` as the code expects, but they
are initialized to default `PubSection()` instances.
Because of this, the `if` condition in the following code is always true:
if (Obj.DWARF.PubNames)
Err = DWARFYAML::emitPubSection(OS, *Obj.DWARF.PubNames,
Obj.IsLittleEndian);
What means `emitPubSection` is always called and it writes few values.
This patch fixes the issue. I've reduced `sizeofcmds` by size of data
previously written because of this bug.
I need this fix (in YAMLTraits.cpp) for D81655 <https://reviews.llvm.org/D81655>.
https://reviews.llvm.org/D81686
Files:
llvm/lib/Support/YAMLTraits.cpp
llvm/test/ObjectYAML/MachO/DWARF-pubsections.yaml
Index: llvm/test/ObjectYAML/MachO/DWARF-pubsections.yaml
===================================================================
--- llvm/test/ObjectYAML/MachO/DWARF-pubsections.yaml
+++ llvm/test/ObjectYAML/MachO/DWARF-pubsections.yaml
@@ -356,7 +356,8 @@
## contents, if the "debug_pubnames"/"debug_pubtypes" entry doesn't exist in the
## "DWARF" entry.
-# RUN: yaml2obj --docnum=2 %s | obj2yaml | FileCheck %s --check-prefix=EMPTY
+# RUN: yaml2obj --docnum=2 %s -o %t2
+# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=EMPTY
# EMPTY: Sections:
# EMPTY-NEXT: - sectname: __debug_pubnames
@@ -394,7 +395,7 @@
cpusubtype: 0x00000003
filetype: 0x0000000A
ncmds: 1
- sizeofcmds: 1800
+ sizeofcmds: 1772
flags: 0x00000000
reserved: 0x00000000
LoadCommands:
Index: llvm/lib/Support/YAMLTraits.cpp
===================================================================
--- llvm/lib/Support/YAMLTraits.cpp
+++ llvm/lib/Support/YAMLTraits.cpp
@@ -166,6 +166,8 @@
if (!MN) {
if (Required || !isa<EmptyHNode>(CurrentNode))
setError(CurrentNode, "not a mapping");
+ else
+ UseDefault = true;
return false;
}
MN->ValidKeys.push_back(Key);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D81686.270221.patch
Type: text/x-patch
Size: 1210 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200611/5753efa8/attachment.bin>
More information about the llvm-commits
mailing list