summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
diff options
context:
space:
mode:
authorSiva Chandra <sivachandra@google.com>2016-01-07 23:32:34 +0000
committerSiva Chandra <sivachandra@google.com>2016-01-07 23:32:34 +0000
commit9293fc4185bc737303f0114936ca9a7f467a7bcc (patch)
tree560f4169d2ce25809c88de274648421ee90282fe /lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
parentf94c149f7fc52e48a83a59282fbc63834d464ef0 (diff)
downloadbcm5719-llvm-9293fc4185bc737303f0114936ca9a7f467a7bcc.tar.gz
bcm5719-llvm-9293fc4185bc737303f0114936ca9a7f467a7bcc.zip
Better scheme to lookup alternate mangled name when looking up function address.
Summary: This change is relevant for inferiors compiled with GCC. GCC does not emit complete debug info for std::basic_string<...>, and consequently, Clang (the LLDB compiler) does not generate correct mangled names for certain functions. This change removes the hard-coded alternate names in ItaniumABILanguageRuntime.cpp. Before the hard-coded names were put in ItaniumABILanguageRuntime.cpp, one could not evaluate std::string methods (ex. std::string::length). After putting in the hard-coded names, one could evaluate them. However, it did not still enable one to call methods on, say for example, std::vector<string>. This change makes that possible. There is some amount of incompleteness in this change. Consider the following example: std::string hello("hello"), world("world"); std::map<std::string, std::string> m; m[hello] = world; One can still not evaluate the expression "m[hello]" in LLDB. Will address this issue in another pass. Reviewers: jingham, vharron, evgeny777, spyffe, dawn Subscribers: clayborg, dawn, lldb-commits Differential Revision: http://reviews.llvm.org/D12809 llvm-svn: 257113
Diffstat (limited to 'lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp')
-rw-r--r--lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp51
1 files changed, 0 insertions, 51 deletions
diff --git a/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
index a5fa004493a..8e2cfb5570d 100644
--- a/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.cpp
@@ -319,46 +319,6 @@ ItaniumABILanguageRuntime::IsVTableName (const char *name)
return false;
}
-static std::map<ConstString, std::vector<ConstString> >&
-GetAlternateManglingPrefixes()
-{
- static std::map<ConstString, std::vector<ConstString> > g_alternate_mangling_prefixes;
- return g_alternate_mangling_prefixes;
-}
-
-
-size_t
-ItaniumABILanguageRuntime::GetAlternateManglings(const ConstString &mangled, std::vector<ConstString> &alternates)
-{
- if (!mangled)
- return static_cast<size_t>(0);
-
- alternates.clear();
- const char *mangled_cstr = mangled.AsCString();
- std::map<ConstString, std::vector<ConstString> >& alternate_mangling_prefixes = GetAlternateManglingPrefixes();
- for (std::map<ConstString, std::vector<ConstString> >::iterator it = alternate_mangling_prefixes.begin();
- it != alternate_mangling_prefixes.end();
- ++it)
- {
- const char *prefix_cstr = it->first.AsCString();
- if (strncmp(mangled_cstr, prefix_cstr, strlen(prefix_cstr)) == 0)
- {
- const std::vector<ConstString> &alternate_prefixes = it->second;
- for (size_t i = 0; i < alternate_prefixes.size(); ++i)
- {
- std::string alternate_mangling(alternate_prefixes[i].AsCString());
- alternate_mangling.append(mangled_cstr + strlen(prefix_cstr));
-
- alternates.push_back(ConstString(alternate_mangling.c_str()));
- }
-
- return alternates.size();
- }
- }
-
- return static_cast<size_t>(0);
-}
-
//------------------------------------------------------------------
// Static Functions
//------------------------------------------------------------------
@@ -382,17 +342,6 @@ ItaniumABILanguageRuntime::Initialize()
PluginManager::RegisterPlugin (GetPluginNameStatic(),
"Itanium ABI for the C++ language",
CreateInstance);
-
- // Alternate manglings for std::basic_string<...>
- std::vector<ConstString> basic_string_alternates;
- basic_string_alternates.push_back(ConstString("_ZNSs"));
- basic_string_alternates.push_back(ConstString("_ZNKSs"));
- std::map<ConstString, std::vector<ConstString> >& alternate_mangling_prefixes = GetAlternateManglingPrefixes();
-
- alternate_mangling_prefixes[ConstString("_ZNSbIcSt17char_traits<char>St15allocator<char>E")] =
- basic_string_alternates;
- alternate_mangling_prefixes[ConstString("_ZNKSbIcSt17char_traits<char>St15allocator<char>E")] =
- basic_string_alternates;
}
void
OpenPOWER on IntegriCloud