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
This commit is contained in:
@@ -41,7 +41,6 @@ static const char dummy_remote_dir[] = "bin";
|
||||
static const char module_name[] = "TestModule.so";
|
||||
static const char module_uuid[] =
|
||||
"F4E7E991-9B61-6AD4-0073-561AC3D9FA10-C043A476";
|
||||
static const uint32_t uuid_bytes = 20;
|
||||
static const size_t module_size = 5602;
|
||||
|
||||
static FileSpec GetDummyRemotePath() {
|
||||
@@ -87,7 +86,7 @@ void ModuleCacheTest::TryGetAndPut(const FileSpec &cache_dir,
|
||||
ModuleCache mc;
|
||||
ModuleSpec module_spec;
|
||||
module_spec.GetFileSpec() = GetDummyRemotePath();
|
||||
module_spec.GetUUID().SetFromStringRef(module_uuid, uuid_bytes);
|
||||
module_spec.GetUUID().SetFromStringRef(module_uuid);
|
||||
module_spec.SetObjectSize(module_size);
|
||||
ModuleSP module_sp;
|
||||
bool did_create;
|
||||
|
||||
Reference in New Issue
Block a user