[PATCH] D59482: [ObjectYAML] Add basic minidump generation support

James Henderson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 18 03:47:46 PDT 2019


jhenderson added a comment.

I've not reviewed the unit test yet, but the bulk of the body looks fine, apart from some minor details.



================
Comment at: include/llvm/ObjectYAML/MinidumpYAML.h:27
+struct Stream {
+  enum StreamKind {
+    HexKind,
----------------
I think it is worth making this an `enum class`.


================
Comment at: lib/ObjectYAML/MinidumpYAML.cpp:55
+    Callback(OS);
+  assert(OS.tell() == BeginOffset + NextOffset);
+  (void)BeginOffset;
----------------
Perhaps worth a quick message:

`assert(OS.tell() == BeginOffset + NextOffset && "some message here");`


================
Comment at: lib/ObjectYAML/MinidumpYAML.cpp:70
+template <typename MapType, typename EndianType>
+static inline void mapAs(yaml::IO &IO, const char *Key, EndianType &Val) {
+  MapType Mapped = static_cast<typename EndianType::value_type>(Val);
----------------
Maybe worth calling this `mapRequiredAs`, to line up with the `mapRequired` name.


================
Comment at: lib/ObjectYAML/MinidumpYAML.cpp:96
+template <typename EndianType>
+static inline void mapHex(yaml::IO &IO, const char *Key, EndianType &Val) {
+  mapAs<typename HexType<EndianType>::type>(IO, Key, Val);
----------------
Similar to above, perhaps `mapRequiredHex`?


================
Comment at: lib/ObjectYAML/MinidumpYAML.cpp:100
+
+/// Perform an optionam yaml-mapping of an endian-aware type as an
+/// appropriately-sized hex value.
----------------
`optionam`?


================
Comment at: lib/ObjectYAML/MinidumpYAML.cpp:181
+  FeaturesRef.writeAsBinary(FeaturesStream);
+  std::fill(Features.begin(), Features.end(), 0);
+  std::memcpy(Features.begin(), FeaturesStorage.begin(),
----------------
Is this definitely necessary? What's the type of Info.ProcessorFeatures? Similar comments for Vendor ID below.


================
Comment at: lib/ObjectYAML/MinidumpYAML.cpp:183
+  std::memcpy(Features.begin(), FeaturesStorage.begin(),
+              std::min(FeaturesStorage.size(), Features.size()));
+}
----------------
If there is too much data to fit, should this emit an error, rather than silently truncate? Same below with Vendor ID.


================
Comment at: lib/ObjectYAML/MinidumpYAML.cpp:306
+Error MinidumpYAML::writeAsBinary(StringRef Yaml, raw_ostream &OS) {
+  yaml::Input yin(Yaml);
+  Object Obj;
----------------
I don't think `yin` matches our (current) variable naming guidelines. It should be `Yin` at least, though it wasn't immediately clear what was meant even then at first to me, so perhaps a different name might be better (simply `Input` would work for me).


================
Comment at: tools/yaml2obj/yaml2obj.cpp:61
+      if (Doc.Minidump) {
+        MinidumpYAML::writeAsBinary(*Doc.Minidump, Out);
+        return 0;
----------------
I feel like it would make more sense for this to match the other versions above, i.e. I think this should be at least `return yaml2minidump(...);`


Repository:
  rL LLVM

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

https://reviews.llvm.org/D59482





More information about the llvm-commits mailing list