[PATCH] D84008: [DWARFYAML] Refactor emitDebugInfo() to make the length be inferred.

Pavel Labath via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 23 02:18:11 PDT 2020


labath accepted this revision.
labath added a comment.

Yeah, looks good. Some small suggestions inline, though some of them may be better off as separate patches...



================
Comment at: llvm/lib/ObjectYAML/DWARFEmitter.cpp:207-215
+static unsigned getOffsetSize(const DWARFYAML::Unit &Unit) {
+  return Unit.Format == dwarf::DWARF64 ? 8 : 4;
+}
 
-  void onValue(const uint16_t U) override {
-    writeInteger(U, OS, DebugInfo.IsLittleEndian);
-  }
+static unsigned getRefSize(const DWARFYAML::Unit &Unit) {
+  if (Unit.Version == 2)
+    return Unit.AddrSize;
----------------
Maybe this is for a separate patch, since you're just moving these, but this code already exists in BinaryFormat/Dwarf.h. It would be nice if DWARFYaml::Unit had a dwarf::FormParams field or a getter, and then these things could be retrieved by querying that object...


================
Comment at: llvm/lib/ObjectYAML/DWARFEmitter.cpp:349-353
+    // sizeof(version) 2 + sizeof(address_size) 1 = 3
+    // sizeof(unit_type) = 1 (DWARFv5) or 0
+    // sizeof(debug_abbrev_offset) = 4 (DWARF32) or 8 (DWARF64)
+    uint64_t Length = 3 + (Unit.Version >= 5 ? 1 : 0) +
+                      (Unit.Format == dwarf::DWARF64 ? 8 : 4);
----------------
Since the comments repeat the entire expression, it would be less repetitive to just structure the code in a way that comments can be attached to the actual expressions. Maybe something like:
```
Lenght = 3; // version + address_size
Length += (Unit.Version >= 5 ? 1 : 0); // unit_type
Length += Unit.getFormParams().getDwarfOffsetByteSize(); // abbrev_offset
```


================
Comment at: llvm/lib/ObjectYAML/DWARFEmitter.cpp:380-382
+      cantFail(writeVariableSizedInteger(Unit.AbbrOffset,
+                                         Unit.Format == dwarf::DWARF64 ? 8 : 4,
+                                         OS, DI.IsLittleEndian));
----------------
a writeDwarfOffset function might be handy.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D84008/new/

https://reviews.llvm.org/D84008





More information about the llvm-commits mailing list