[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:
@@ -205,11 +205,9 @@ size_t SBStructuredData::GetStringValue(char *dst, size_t dst_len) const {
|
||||
namespace lldb_private {
|
||||
namespace repro {
|
||||
|
||||
template <>
|
||||
void RegisterMethods<SBStructuredData>(Registry &R) {
|
||||
template <> void RegisterMethods<SBStructuredData>(Registry &R) {
|
||||
LLDB_REGISTER_CONSTRUCTOR(SBStructuredData, ());
|
||||
LLDB_REGISTER_CONSTRUCTOR(SBStructuredData,
|
||||
(const lldb::SBStructuredData &));
|
||||
LLDB_REGISTER_CONSTRUCTOR(SBStructuredData, (const lldb::SBStructuredData &));
|
||||
LLDB_REGISTER_CONSTRUCTOR(SBStructuredData, (const lldb::EventSP &));
|
||||
LLDB_REGISTER_CONSTRUCTOR(SBStructuredData,
|
||||
(lldb_private::StructuredDataImpl *));
|
||||
@@ -236,12 +234,11 @@ void RegisterMethods<SBStructuredData>(Registry &R) {
|
||||
GetItemAtIndex, (size_t));
|
||||
LLDB_REGISTER_METHOD_CONST(uint64_t, SBStructuredData, GetIntegerValue,
|
||||
(uint64_t));
|
||||
LLDB_REGISTER_METHOD_CONST(double, SBStructuredData, GetFloatValue,
|
||||
(double));
|
||||
LLDB_REGISTER_METHOD_CONST(double, SBStructuredData, GetFloatValue, (double));
|
||||
LLDB_REGISTER_METHOD_CONST(bool, SBStructuredData, GetBooleanValue, (bool));
|
||||
LLDB_REGISTER_METHOD_CONST(size_t, SBStructuredData, GetStringValue,
|
||||
(char *, size_t));
|
||||
LLDB_REGISTER_CHAR_PTR_REDIRECT_CONST(size_t, SBStructuredData,
|
||||
GetStringValue);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
} // namespace repro
|
||||
} // namespace lldb_private
|
||||
|
||||
Reference in New Issue
Block a user