[lldb/Reproducers] Implement custom replayers for (char *, size_t)

Some SB API methods returns strings through a char* and a length. This
is a problem for the deserializer, which considers a single type at a
time, and therefore cannot know how many bytes to allocate for the
character buffer.

We can solve this problem by implementing a custom replayer, which
ignores the passed-in char* and allocates a buffer of the correct size
itself, before invoking the original API method or function.

This patch adds three new macros to register a custom replayer for
methods that take a char* and a size_t. It supports arbitrary return
values (some functions return a bool while others return a size_t).
This commit is contained in:
Jonas Devlieghere
2020-02-05 19:41:09 -08:00
parent 25aa2eef99
commit 2f025bb87c
6 changed files with 70 additions and 31 deletions

View File

@@ -213,10 +213,10 @@ void RegisterMethods<SBFileSpec>(Registry &R) {
LLDB_REGISTER_METHOD_CONST(const char *, SBFileSpec, GetDirectory, ());
LLDB_REGISTER_METHOD(void, SBFileSpec, SetFilename, (const char *));
LLDB_REGISTER_METHOD(void, SBFileSpec, SetDirectory, (const char *));
LLDB_REGISTER_METHOD_CONST(uint32_t, SBFileSpec, GetPath, (char *, size_t));
LLDB_REGISTER_METHOD_CONST(bool, SBFileSpec, GetDescription,
(lldb::SBStream &));
LLDB_REGISTER_METHOD(void, SBFileSpec, AppendPathComponent, (const char *));
LLDB_REGISTER_CHAR_PTR_REDIRECT_CONST(uint32_t, SBFileSpec, GetPath);
}
}