Add plugin.process.gdb-remote.use-libraries-svr4 option

Summary:
This option allow the toggling of the libraries-svr4 usage in ProcessGDBRemote. It's a follow up of https://reviews.llvm.org/D62503#1564296 and it's meant to test / tweak this new packet with, hopefully, minimum impact and in a faster way.

Enable it with `settings set plugin.process.gdb-remote.use-libraries-svr4 true`. For now, by default it's false.

I didn't put tests up for this but I did test it manually.

Reviewers: labath, jankratochvil

Reviewed By: labath

Subscribers: lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D64112

llvm-svn: 365059
This commit is contained in:
Antonio Afonso 2019-07-03 17:30:07 +00:00
parent 83bbe2f418
commit f8251f1ee6
1 changed files with 35 additions and 6 deletions

View File

@ -111,18 +111,40 @@ void DumpProcessGDBRemotePacketHistory(void *p, const char *path) {
namespace {
static constexpr PropertyDefinition g_properties[] = {
{"packet-timeout", OptionValue::eTypeUInt64, true, 5
{"packet-timeout",
OptionValue::eTypeUInt64,
true,
5
#if defined(__has_feature)
#if __has_feature(address_sanitizer)
* 2
#endif
#endif
, nullptr, {},
,
nullptr,
{},
"Specify the default packet timeout in seconds."},
{"target-definition-file", OptionValue::eTypeFileSpec, true, 0, nullptr, {},
"The file that provides the description for remote target registers."}};
{"target-definition-file",
OptionValue::eTypeFileSpec,
true,
0,
nullptr,
{},
"The file that provides the description for remote target registers."},
{"use-libraries-svr4",
OptionValue::eTypeBoolean,
true,
false,
nullptr,
{},
"If true, the libraries-svr4 feature will be used to get a hold of the "
"process's loaded modules."}};
enum { ePropertyPacketTimeout, ePropertyTargetDefinitionFile };
enum {
ePropertyPacketTimeout,
ePropertyTargetDefinitionFile,
ePropertyUseSVR4
};
class PluginProperties : public Properties {
public:
@ -152,6 +174,12 @@ public:
const uint32_t idx = ePropertyTargetDefinitionFile;
return m_collection_sp->GetPropertyAtIndexAsFileSpec(nullptr, idx);
}
bool GetUseSVR4() const {
const uint32_t idx = ePropertyUseSVR4;
return m_collection_sp->GetPropertyAtIndexAsBoolean(
nullptr, idx, g_properties[idx].default_uint_value != 0);
}
};
typedef std::shared_ptr<PluginProperties> ProcessKDPPropertiesSP;
@ -4681,9 +4709,10 @@ Status ProcessGDBRemote::GetLoadedModuleList(LoadedModuleInfoList &list) {
log->Printf("ProcessGDBRemote::%s", __FUNCTION__);
GDBRemoteCommunicationClient &comm = m_gdb_comm;
bool can_use_svr4 = GetGlobalPluginProperties()->GetUseSVR4();
// check that we have extended feature read support
if (comm.GetQXferLibrariesSVR4ReadSupported()) {
if (can_use_svr4 && comm.GetQXferLibrariesSVR4ReadSupported()) {
list.clear();
// request the loaded library list