Minidump: Add support for reading/writing strings
authorPavel Labath <pavel@labath.sk>
Fri, 5 Apr 2019 08:06:26 +0000 (08:06 +0000)
committerPavel Labath <pavel@labath.sk>
Fri, 5 Apr 2019 08:06:26 +0000 (08:06 +0000)
commit51d9fa0a22b1abff619613800fa14df80341d0d0
treef590ef32d2d4e92252c17d7785934eb47587a3b6
parent98edcd9b9c28adf36b085c1a33e10328552ae1d4
Minidump: Add support for reading/writing strings

Summary:
Strings in minidump files are stored as a 32-bit length field, giving
the length of the string in *bytes*, which is followed by the
appropriate number of UTF16 code units. The string is also supposed to
be null-terminated, and the null-terminator is not a part of the length
field. This patch:
- adds support for reading these strings out of the minidump file (this
  implementation does not depend on proper null-termination)
- adds support for writing them to a minidump file
- using the previous two pieces implements proper (de)serialization of
  the CSDVersion field of the SystemInfo stream. Previously, this was
  only read/written as hex, and no attempt was made to access the
  referenced string -- now this string is read and written correctly.

The changes are tested via yaml2obj|obj2yaml round-trip as well as a
unit test which checks the corner cases of the string deserialization
logic.

Reviewers: jhenderson, zturner, clayborg

Subscribers: llvm-commits, aprantl, markmentovai, amccarth, lldb-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D59775

llvm-svn: 357749
llvm/include/llvm/Object/Minidump.h
llvm/include/llvm/ObjectYAML/MinidumpYAML.h
llvm/lib/Object/Minidump.cpp
llvm/lib/ObjectYAML/MinidumpYAML.cpp
llvm/test/tools/obj2yaml/basic-minidump.yaml
llvm/unittests/Object/MinidumpTest.cpp
llvm/unittests/ObjectYAML/MinidumpYAMLTest.cpp