Support build-ids of other sizes than 16 in UUID::SetFromStringRef
authorJaroslav Sevcik <jarin@google.com>
Mon, 1 Jun 2020 20:43:18 +0000 (20:43 +0000)
committerJaroslav Sevcik <jarin@google.com>
Sun, 7 Jun 2020 10:03:41 +0000 (10:03 +0000)
commit1beffc18886ae4cd72dfe1f9b6b79204cac51e5e
treefd4e32963c0152c7aa628426f15697158f18c61a
parentbd67d68ca1ddb0f857f39761a061eed45072718a
Support build-ids of other sizes than 16 in UUID::SetFromStringRef

SBTarget::AddModule currently handles the UUID parameter in a very
weird way: UUIDs with more than 16 bytes are trimmed to 16 bytes. On
the other hand, shorter-than-16-bytes UUIDs are completely ignored. In
this patch, we change the parsing code to handle UUIDs of arbitrary
size.

To support arbitrary size UUIDs in SBTarget::AddModule, this patch
changes UUID::SetFromStringRef to parse UUIDs of arbitrary length. We
subtly change the semantics of SetFromStringRef - SetFromStringRef now
only succeeds if the entire input is consumed to prevent some
prefix-parsing confusion. This is up for discussion, but I believe
this is more consistent - we always return false for invalid UUIDs
rather than sometimes truncating to a valid prefix. Also, all the
call-sites except the API and interpreter seem to expect to consume
the entire input.

This also adds tests for adding existing modules 4-, 16-, and 20-byte
build-ids. Finally, we took the liberty of testing the minidump
scenario we care about - removing placeholder module from minidump and
replacing it with the real module.

Reviewed By: labath, friss

Differential Revision: https://reviews.llvm.org/D80755
12 files changed:
lldb/include/lldb/Utility/UUID.h
lldb/source/Interpreter/OptionValueUUID.cpp
lldb/source/Plugins/ObjectFile/Breakpad/BreakpadRecords.cpp
lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
lldb/source/Utility/UUID.cpp
lldb/test/API/functionalities/postmortem/minidump-new/TestMiniDumpUUID.py
lldb/test/API/functionalities/postmortem/minidump-new/linux-arm-uuids-elf-build-id-4.yaml [new file with mode: 0644]
lldb/test/API/functionalities/postmortem/minidump-new/linux-arm-uuids-match.yaml [new file with mode: 0644]
lldb/unittests/ObjectFile/ELF/TestObjectFileELF.cpp
lldb/unittests/Target/ModuleCacheTest.cpp
lldb/unittests/Utility/UUIDTest.cpp