[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:
@@ -1313,10 +1313,6 @@ void RegisterMethods<SBProcess>(Registry &R) {
|
||||
(lldb::tid_t, lldb::addr_t));
|
||||
LLDB_REGISTER_METHOD_CONST(lldb::SBTarget, SBProcess, GetTarget, ());
|
||||
LLDB_REGISTER_METHOD(size_t, SBProcess, PutSTDIN, (const char *, size_t));
|
||||
LLDB_REGISTER_METHOD_CONST(size_t, SBProcess, GetSTDOUT, (char *, size_t));
|
||||
LLDB_REGISTER_METHOD_CONST(size_t, SBProcess, GetSTDERR, (char *, size_t));
|
||||
LLDB_REGISTER_METHOD_CONST(size_t, SBProcess, GetAsyncProfileData,
|
||||
(char *, size_t));
|
||||
LLDB_REGISTER_METHOD(lldb::SBTrace, SBProcess, StartTrace,
|
||||
(lldb::SBTraceOptions &, lldb::SBError &));
|
||||
LLDB_REGISTER_METHOD_CONST(void, SBProcess, ReportEventState,
|
||||
@@ -1416,6 +1412,10 @@ void RegisterMethods<SBProcess>(Registry &R) {
|
||||
LLDB_REGISTER_METHOD(lldb::SBMemoryRegionInfoList, SBProcess,
|
||||
GetMemoryRegions, ());
|
||||
LLDB_REGISTER_METHOD(lldb::SBProcessInfo, SBProcess, GetProcessInfo, ());
|
||||
|
||||
LLDB_REGISTER_CHAR_PTR_REDIRECT_CONST(size_t, SBProcess, GetSTDOUT);
|
||||
LLDB_REGISTER_CHAR_PTR_REDIRECT_CONST(size_t, SBProcess, GetSTDERR);
|
||||
LLDB_REGISTER_CHAR_PTR_REDIRECT_CONST(size_t, SBProcess, GetAsyncProfileData);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user