fjricci updated this revision to Diff 63816.
fjricci marked an inline comment as done.
fjricci added a comment.
Fix const SP and update unit test
Will now only run the unit test as a dwarf test (with -g0),
but since we don't want to test the debug data anyway,
this shouldn't be an issue, and avoids the use of strip.
http://reviews.llvm.org/D22294
Files:
include/lldb/Core/Module.h
include/lldb/Core/ModuleList.h
include/lldb/Symbol/SymbolRewriter.h
include/lldb/Symbol/Symtab.h
include/lldb/Target/Target.h
include/lldb/lldb-forward.h
lldb.xcodeproj/project.pbxproj
packages/Python/lldbsuite/test/lang/c/symbol_rewriter/Makefile
packages/Python/lldbsuite/test/lang/c/symbol_rewriter/TestSymbolRewriter.py
packages/Python/lldbsuite/test/lang/c/symbol_rewriter/main.c
packages/Python/lldbsuite/test/lang/c/symbol_rewriter/rewrite.map
source/API/SBModule.cpp
source/API/SBTarget.cpp
source/Breakpoint/BreakpointResolverName.cpp
source/Commands/CommandObjectSource.cpp
source/Commands/CommandObjectTarget.cpp
source/Core/AddressResolverName.cpp
source/Core/Disassembler.cpp
source/Core/Module.cpp
source/Core/ModuleList.cpp
source/Core/SourceManager.cpp
source/Expression/IRExecutionUnit.cpp
source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
source/Plugins/DynamicLoader/Hexagon-DYLD/DynamicLoaderHexagonDYLD.cpp
source/Plugins/DynamicLoader/Hexagon-DYLD/HexagonDYLDRendezvous.cpp
source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp
source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
source/Plugins/InstrumentationRuntime/AddressSanitizer/AddressSanitizerRuntime.cpp
source/Plugins/InstrumentationRuntime/ThreadSanitizer/ThreadSanitizerRuntime.cpp
source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp
source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp
source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp
source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp
source/Plugins/MemoryHistory/asan/MemoryHistoryASan.cpp
source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
source/Plugins/Process/Utility/InferiorCallPOSIX.cpp
source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
source/Symbol/CMakeLists.txt
source/Symbol/Symbol.cpp
source/Symbol/SymbolRewriter.cpp
source/Symbol/Symtab.cpp
source/Target/ObjCLanguageRuntime.cpp
source/Target/Target.cpp
Index: source/Target/Target.cpp
===================================================================
--- source/Target/Target.cpp
+++ source/Target/Target.cpp
@@ -78,6 +78,7 @@
m_mutex(),
m_arch(target_arch),
m_images(this),
+ m_symbol_rewriter(),
m_section_load_history(),
m_breakpoint_list(false),
m_internal_breakpoint_list(true),
Index: source/Target/ObjCLanguageRuntime.cpp
===================================================================
--- source/Target/ObjCLanguageRuntime.cpp
+++ source/Target/ObjCLanguageRuntime.cpp
@@ -105,6 +105,7 @@
SymbolContextList sc_list;
const size_t matching_symbols = modules.FindSymbolsWithNameAndType (name,
+ m_process->GetTarget().GetSymbolRewriter(),
eSymbolTypeObjCClass,
sc_list);
Index: source/Symbol/Symtab.cpp
===================================================================
--- source/Symbol/Symtab.cpp
+++ source/Symbol/Symtab.cpp
@@ -18,6 +18,7 @@
#include "lldb/Symbol/ObjectFile.h"
#include "lldb/Symbol/Symbol.h"
#include "lldb/Symbol/SymbolContext.h"
+#include "lldb/Symbol/SymbolRewriter.h"
#include "lldb/Symbol/Symtab.h"
#include "Plugins/Language/ObjC/ObjCLanguage.h"
#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
@@ -806,11 +807,14 @@
}
size_t
-Symtab::FindAllSymbolsWithNameAndType (const ConstString &name, SymbolType symbol_type, std::vector<uint32_t>& symbol_indexes)
+Symtab::FindAllSymbolsWithNameAndType (const ConstString &name, const SymbolRewriterSP &rewriter, SymbolType symbol_type, std::vector<uint32_t>& symbol_indexes)
{
std::lock_guard<std::recursive_mutex> guard(m_mutex);
Timer scoped_timer (__PRETTY_FUNCTION__, "%s", __PRETTY_FUNCTION__);
+
+ ConstString rewrittenName = RewriteName(rewriter, name);
+
// Initialize all of the lookup by name indexes before converting NAME
// to a uniqued string NAME_STR below.
if (!m_name_indexes_computed)
@@ -820,17 +824,20 @@
{
// The string table did have a string that matched, but we need
// to check the symbols and match the symbol_type if any was given.
- AppendSymbolIndexesWithNameAndType (name, symbol_type, symbol_indexes);
+ AppendSymbolIndexesWithNameAndType (rewrittenName, symbol_type, symbol_indexes);
}
return symbol_indexes.size();
}
size_t
-Symtab::FindAllSymbolsWithNameAndType (const ConstString &name, SymbolType symbol_type, Debug symbol_debug_type, Visibility symbol_visibility, std::vector<uint32_t>& symbol_indexes)
+Symtab::FindAllSymbolsWithNameAndType (const ConstString &name, const SymbolRewriterSP &rewriter, SymbolType symbol_type, Debug symbol_debug_type, Visibility symbol_visibility, std::vector<uint32_t>& symbol_indexes)
{
std::lock_guard<std::recursive_mutex> guard(m_mutex);
Timer scoped_timer (__PRETTY_FUNCTION__, "%s", __PRETTY_FUNCTION__);
+
+ ConstString rewrittenName = RewriteName(rewriter, name);
+
// Initialize all of the lookup by name indexes before converting NAME
// to a uniqued string NAME_STR below.
if (!m_name_indexes_computed)
@@ -840,7 +847,7 @@
{
// The string table did have a string that matched, but we need
// to check the symbols and match the symbol_type if any was given.
- AppendSymbolIndexesWithNameAndType (name, symbol_type, symbol_debug_type, symbol_visibility, symbol_indexes);
+ AppendSymbolIndexesWithNameAndType (rewrittenName, symbol_type, symbol_debug_type, symbol_visibility, symbol_indexes);
}
return symbol_indexes.size();
}
@@ -855,27 +862,30 @@
}
Symbol *
-Symtab::FindFirstSymbolWithNameAndType (const ConstString &name, SymbolType symbol_type, Debug symbol_debug_type, Visibility symbol_visibility)
+Symtab::FindFirstSymbolWithNameAndType (const ConstString &name, const SymbolRewriterSP &rewriter, SymbolType symbol_type, Debug symbol_debug_type, Visibility symbol_visibility)
{
std::lock_guard<std::recursive_mutex> guard(m_mutex);
Timer scoped_timer (__PRETTY_FUNCTION__, "%s", __PRETTY_FUNCTION__);
+
+ ConstString rewrittenName = RewriteName (rewriter, name);
+
if (!m_name_indexes_computed)
InitNameIndexes();
if (name)
{
std::vector<uint32_t> matching_indexes;
// The string table did have a string that matched, but we need
// to check the symbols and match the symbol_type if any was given.
- if (AppendSymbolIndexesWithNameAndType (name, symbol_type, symbol_debug_type, symbol_visibility, matching_indexes))
+ if (AppendSymbolIndexesWithNameAndType (rewrittenName, symbol_type, symbol_debug_type, symbol_visibility, matching_indexes))
{
std::vector<uint32_t>::const_iterator pos, end = matching_indexes.end();
for (pos = matching_indexes.begin(); pos != end; ++pos)
{
Symbol *symbol = SymbolAtIndex(*pos);
- if (symbol->Compare(name, symbol_type))
+ if (symbol->Compare(rewrittenName, symbol_type))
return symbol;
}
}
@@ -1138,6 +1148,7 @@
size_t
Symtab::FindFunctionSymbols (const ConstString &name,
+ const SymbolRewriterSP &rewriter,
uint32_t name_type_mask,
SymbolContextList& sc_list)
{
@@ -1152,7 +1163,7 @@
if (name_type_mask & (eFunctionNameTypeBase | eFunctionNameTypeFull))
{
std::vector<uint32_t> temp_symbol_indexes;
- FindAllSymbolsWithNameAndType (name, eSymbolTypeAny, temp_symbol_indexes);
+ FindAllSymbolsWithNameAndType (name, rewriter, eSymbolTypeAny, temp_symbol_indexes);
unsigned temp_symbol_indexes_size = temp_symbol_indexes.size();
if (temp_symbol_indexes_size > 0)
@@ -1260,3 +1271,14 @@
}
return NULL;
}
+
+ConstString
+Symtab::RewriteName (const SymbolRewriterSP &rewriter, ConstString name)
+{
+ if (rewriter)
+ {
+ return rewriter->Rewrite (name);
+ }
+
+ return name;
+}
Index: source/Symbol/SymbolRewriter.cpp
===================================================================
--- /dev/null
+++ source/Symbol/SymbolRewriter.cpp
@@ -0,0 +1,193 @@
+//===-- SymbolRewriter.cpp --------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Core/Log.h"
+#include "lldb/Symbol/SymbolRewriter.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/Support/Casting.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/Regex.h"
+#include "llvm/Support/SourceMgr.h"
+#include "llvm/Support/YAMLParser.h"
+
+using namespace llvm;
+using namespace lldb;
+using namespace lldb_private;
+
+SymbolRewriter::SymbolRewriter()
+{
+}
+
+static std::string
+getString(yaml::ScalarNode *n)
+{
+ SmallString<32> storage;
+ StringRef ref;
+
+ ref = n->getValue(storage);
+
+ return ref.str ();
+}
+
+void
+SymbolRewriter::LoadMap(const FileSpec &path)
+{
+ Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_SYMBOLS));
+ auto str_path = path.GetPath ();
+
+ if (log)
+ {
+ log->Printf("loading rewrite maps from %s", str_path.c_str ());
+ }
+
+ ErrorOr<std::unique_ptr<MemoryBuffer>> mem_buffer_or_err = MemoryBuffer::getFile (str_path);
+ if (std::error_code err = mem_buffer_or_err.getError())
+ {
+ report_fatal_error ("Unable to read rewrite map '" + str_path +
+ "': " + err.message());
+ return;
+ }
+ std::unique_ptr<MemoryBuffer> mem_buffer = std::move(mem_buffer_or_err.get());
+
+ SourceMgr source_mgr;
+ yaml::Stream yaml_stream(mem_buffer->getBuffer (), source_mgr);
+
+ for (auto &stream : yaml_stream)
+ {
+#define PARSE_CHECK(COND, MESSAGE) \
+ if (COND) \
+ { \
+ report_fatal_error ("Unable to parse rewrite map '" + str_path + \
+ "': " + MESSAGE); \
+ continue; \
+ }
+
+ auto root_map = dyn_cast<yaml::MappingNode>(stream.getRoot());
+ PARSE_CHECK (!root_map, "root element is not a map")
+
+ auto map = std::make_shared<RewriteMap> ();
+ m_rewrite_maps.push_back (map);
+
+ for (auto &entry : *root_map)
+ {
+ static const std::string rewrite_type_function = "function";
+ static const std::string rewrite_type_global_variable = "global variable";
+ static const std::string rewrite_type_global_alias = "global alias";
+
+ auto key = dyn_cast<yaml::ScalarNode>(entry.getKey ());
+ PARSE_CHECK(!key, "malformed rewrite entry")
+
+ auto value = dyn_cast<yaml::MappingNode>(entry.getValue ());
+ PARSE_CHECK(!value, "malformed rewrite entry")
+
+ auto rewrite_type = getString (key);
+
+ if (rewrite_type == rewrite_type_global_alias)
+ {
+ if (log)
+ log->Printf("ignoring rewrite type 'global alias' in '%s'", str_path.c_str());
+ continue;
+ }
+
+ PARSE_CHECK (rewrite_type != rewrite_type_function &&
+ rewrite_type != rewrite_type_global_variable,
+ "'" + rewrite_type + "' is not a valid rewrite type")
+
+ static const std::string descriptor_field_source = "source";
+ static const std::string descriptor_field_target = "target";
+ static const std::string descriptor_field_transform = "transform";
+ static const std::string descriptor_field_naked = "naked";
+ std::string source;
+ std::string target;
+ std::string transform;
+ std::string naked;
+
+ for (auto &field : *value)
+ {
+ auto field_key = dyn_cast<yaml::ScalarNode> (field.getKey ());
+ PARSE_CHECK(!field_key, "malformed rewrite entry")
+
+ auto field_value = dyn_cast<yaml::ScalarNode> (field.getValue ());
+ PARSE_CHECK(!field_value, "malformed rewrite entry")
+
+ auto str_key = getString (field_key);
+ auto str_value = getString (field_value);
+
+ if (str_key == descriptor_field_source)
+ source = str_value;
+ else if (str_key == descriptor_field_target)
+ target = str_value;
+ else if (str_key == descriptor_field_transform)
+ transform = str_value;
+ else if (str_key == descriptor_field_naked)
+ naked = str_value;
+ else
+ PARSE_CHECK (true, "'" + str_key + "' is not a valid key in a rewrite entry")
+ }
+
+ PARSE_CHECK (source.size () == 0, "missing source in rewrite entry")
+
+ if (!target.empty ())
+ map->m_direct_map[ConstString(source)] = ConstString(target);
+ else if (!transform.empty ())
+ map->m_transform_map[ConstString(source)] = ConstString(transform);
+ else
+ PARSE_CHECK (true, "target and transform are missing in rewrite entry for '" + source + "'")
+ }
+#undef PARSE_CHECK
+ }
+
+ if (log)
+ {
+ log->Printf("loaded rewrite maps from %s", str_path.c_str ());
+ }
+}
+
+ConstString
+SymbolRewriter::Rewrite(const ConstString& name)
+{
+ Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_SYMBOLS));
+ ConstString result = name;
+
+ for (auto &map : m_rewrite_maps)
+ {
+ auto entry_it = map->m_direct_map.find(result);
+ if (entry_it != map->m_direct_map.end ())
+ {
+ result = entry_it->second;
+ continue;
+ }
+
+ for (const auto &entry : map->m_transform_map)
+ {
+ std::string error;
+ std::string trans;
+
+ trans = Regex (entry.first.AsCString ()).sub (entry.second.AsCString(),
+ result.AsCString (),
+ &error);
+
+ if (strcmp (trans.c_str (), result.AsCString ()) != 0)
+ {
+ /* Cache entry in direct rewrite map for faster lookups. */
+ auto new_result = ConstString (trans.c_str ());
+ map->m_direct_map[result] = new_result;
+ result = new_result;
+ break;
+ }
+ }
+ }
+
+ if (log)
+ {
+ log->Printf("rewrote symbol %s to %s", name.AsCString (), result.AsCString ());
+ }
+
+ return result;
+}
Index: source/Symbol/Symbol.cpp
===================================================================
--- source/Symbol/Symbol.cpp
+++ source/Symbol/Symbol.cpp
@@ -575,7 +575,7 @@
return nullptr;
lldb_private::SymbolContextList sc_list;
- module_sp->FindSymbolsWithNameAndType(reexport_name, eSymbolTypeAny, sc_list);
+ module_sp->FindSymbolsWithNameAndType(reexport_name, target.GetSymbolRewriter(), eSymbolTypeAny, sc_list);
const size_t num_scs = sc_list.GetSize();
if (num_scs > 0)
{
Index: source/Symbol/CMakeLists.txt
===================================================================
--- source/Symbol/CMakeLists.txt
+++ source/Symbol/CMakeLists.txt
@@ -24,6 +24,7 @@
Symbol.cpp
SymbolContext.cpp
SymbolFile.cpp
+ SymbolRewriter.cpp
SymbolVendor.cpp
Symtab.cpp
Type.cpp
Index: source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
===================================================================
--- source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
+++ source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
@@ -301,22 +301,24 @@
static ConstString g_dispatch_queue_offsets_symbol_name ("dispatch_queue_offsets");
const Symbol *dispatch_queue_offsets_symbol = NULL;
+ Target &target = m_process->GetTarget();
+
// libdispatch symbols were in libSystem.B.dylib up through Mac OS X 10.6 ("Snow Leopard")
ModuleSpec libSystem_module_spec (FileSpec("libSystem.B.dylib", false));
- ModuleSP module_sp(m_process->GetTarget().GetImages().FindFirstModule (libSystem_module_spec));
+ ModuleSP module_sp(target.GetImages().FindFirstModule (libSystem_module_spec));
if (module_sp)
- dispatch_queue_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType (g_dispatch_queue_offsets_symbol_name, eSymbolTypeData);
+ dispatch_queue_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType (g_dispatch_queue_offsets_symbol_name, target.GetSymbolRewriter(), eSymbolTypeData);
// libdispatch symbols are in their own dylib as of Mac OS X 10.7 ("Lion") and later
if (dispatch_queue_offsets_symbol == NULL)
{
ModuleSpec libdispatch_module_spec (FileSpec("libdispatch.dylib", false));
- module_sp = m_process->GetTarget().GetImages().FindFirstModule (libdispatch_module_spec);
+ module_sp = target.GetImages().FindFirstModule (libdispatch_module_spec);
if (module_sp)
- dispatch_queue_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType (g_dispatch_queue_offsets_symbol_name, eSymbolTypeData);
+ dispatch_queue_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType (g_dispatch_queue_offsets_symbol_name, target.GetSymbolRewriter(), eSymbolTypeData);
}
if (dispatch_queue_offsets_symbol)
- m_dispatch_queue_offsets_addr = dispatch_queue_offsets_symbol->GetLoadAddress(&m_process->GetTarget());
+ m_dispatch_queue_offsets_addr = dispatch_queue_offsets_symbol->GetLoadAddress(&target);
}
void
@@ -353,15 +355,17 @@
static ConstString g_libpthread_layout_offsets_symbol_name ("pthread_layout_offsets");
const Symbol *libpthread_layout_offsets_symbol = NULL;
+ Target &target = m_process->GetTarget();
+
ModuleSpec libpthread_module_spec (FileSpec("libsystem_pthread.dylib", false));
- ModuleSP module_sp (m_process->GetTarget().GetImages().FindFirstModule (libpthread_module_spec));
+ ModuleSP module_sp (target.GetImages().FindFirstModule (libpthread_module_spec));
if (module_sp)
{
libpthread_layout_offsets_symbol = module_sp->FindFirstSymbolWithNameAndType
- (g_libpthread_layout_offsets_symbol_name, eSymbolTypeData);
+ (g_libpthread_layout_offsets_symbol_name, target.GetSymbolRewriter(), eSymbolTypeData);
if (libpthread_layout_offsets_symbol)
{
- m_libpthread_layout_offsets_addr = libpthread_layout_offsets_symbol->GetLoadAddress(&m_process->GetTarget());
+ m_libpthread_layout_offsets_addr = libpthread_layout_offsets_symbol->GetLoadAddress(&target);
}
}
}
@@ -402,15 +406,17 @@
static ConstString g_libdispatch_tsd_indexes_symbol_name ("dispatch_tsd_indexes");
const Symbol *libdispatch_tsd_indexes_symbol = NULL;
+ Target &target = m_process->GetTarget();
+
ModuleSpec libpthread_module_spec (FileSpec("libdispatch.dylib", false));
- ModuleSP module_sp (m_process->GetTarget().GetImages().FindFirstModule (libpthread_module_spec));
+ ModuleSP module_sp (target.GetImages().FindFirstModule (libpthread_module_spec));
if (module_sp)
{
libdispatch_tsd_indexes_symbol = module_sp->FindFirstSymbolWithNameAndType
- (g_libdispatch_tsd_indexes_symbol_name, eSymbolTypeData);
+ (g_libdispatch_tsd_indexes_symbol_name, target.GetSymbolRewriter(), eSymbolTypeData);
if (libdispatch_tsd_indexes_symbol)
{
- m_dispatch_tsd_indexes_addr = libdispatch_tsd_indexes_symbol->GetLoadAddress(&m_process->GetTarget());
+ m_dispatch_tsd_indexes_addr = libdispatch_tsd_indexes_symbol->GetLoadAddress(&target);
}
}
}
@@ -600,7 +606,7 @@
static ConstString introspection_dispatch_queue_info_version ("__introspection_dispatch_queue_info_version");
SymbolContextList sc_list;
- if (m_process->GetTarget().GetImages().FindSymbolsWithNameAndType (introspection_dispatch_queue_info_version, eSymbolTypeData, sc_list) > 0)
+ if (target.GetImages().FindSymbolsWithNameAndType (introspection_dispatch_queue_info_version, target.GetSymbolRewriter(), eSymbolTypeData, sc_list) > 0)
{
SymbolContext sc;
sc_list.GetContextAtIndex (0, sc);
@@ -611,7 +617,7 @@
sc_list.Clear();
static ConstString introspection_dispatch_queue_info_data_offset ("__introspection_dispatch_queue_info_data_offset");
- if (m_process->GetTarget().GetImages().FindSymbolsWithNameAndType (introspection_dispatch_queue_info_data_offset, eSymbolTypeData, sc_list) > 0)
+ if (target.GetImages().FindSymbolsWithNameAndType (introspection_dispatch_queue_info_data_offset, target.GetSymbolRewriter(), eSymbolTypeData, sc_list) > 0)
{
SymbolContext sc;
sc_list.GetContextAtIndex (0, sc);
@@ -622,7 +628,7 @@
sc_list.Clear();
static ConstString introspection_dispatch_item_info_version ("__introspection_dispatch_item_info_version");
- if (m_process->GetTarget().GetImages().FindSymbolsWithNameAndType (introspection_dispatch_item_info_version, eSymbolTypeData, sc_list) > 0)
+ if (target.GetImages().FindSymbolsWithNameAndType (introspection_dispatch_item_info_version, target.GetSymbolRewriter(), eSymbolTypeData, sc_list) > 0)
{
SymbolContext sc;
sc_list.GetContextAtIndex (0, sc);
@@ -633,7 +639,7 @@
sc_list.Clear();
static ConstString introspection_dispatch_item_info_data_offset ("__introspection_dispatch_item_info_data_offset");
- if (m_process->GetTarget().GetImages().FindSymbolsWithNameAndType (introspection_dispatch_item_info_data_offset, eSymbolTypeData, sc_list) > 0)
+ if (target.GetImages().FindSymbolsWithNameAndType (introspection_dispatch_item_info_data_offset, target.GetSymbolRewriter(), eSymbolTypeData, sc_list) > 0)
{
SymbolContext sc;
sc_list.GetContextAtIndex (0, sc);
Index: source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
===================================================================
--- source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
+++ source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp
@@ -115,6 +115,7 @@
// First we find the original symbol in the .o file's symbol table
Symbol *oso_fun_symbol = oso_symtab->FindFirstSymbolWithNameAndType (exe_symbol->GetMangled().GetName(lldb::eLanguageTypeUnknown, Mangled::ePreferMangled),
+ nullptr,
eSymbolTypeCode,
Symtab::eDebugNo,
Symtab::eVisibilityAny);
@@ -148,6 +149,7 @@
// Next we find the non-stab entry that corresponds to the N_GSYM in the .o file
Symbol *oso_gsym_symbol = oso_symtab->FindFirstSymbolWithNameAndType (exe_symbol->GetMangled().GetName(lldb::eLanguageTypeUnknown, Mangled::ePreferMangled),
+ nullptr,
eSymbolTypeData,
Symtab::eDebugNo,
Symtab::eVisibilityAny);
@@ -1228,7 +1230,7 @@
Symtab *symtab = module_objfile->GetSymtab();
if (symtab)
{
- Symbol *objc_class_symbol = symtab->FindFirstSymbolWithNameAndType(type_name, eSymbolTypeObjCClass, Symtab::eDebugAny, Symtab::eVisibilityAny);
+ Symbol *objc_class_symbol = symtab->FindFirstSymbolWithNameAndType(type_name, nullptr, eSymbolTypeObjCClass, Symtab::eDebugAny, Symtab::eVisibilityAny);
if (objc_class_symbol)
{
// Get the N_SO symbol that contains the objective C class symbol as this
Index: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
===================================================================
--- source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -3523,7 +3523,8 @@
Symtab *symtab = m_obj_file->GetSymtab ();
if (symtab)
{
- objc_class_symbol = symtab->FindFirstSymbolWithNameAndType (objc_class_name,
+ objc_class_symbol = symtab->FindFirstSymbolWithNameAndType (objc_class_name,
+ nullptr,
eSymbolTypeObjCClass,
Symtab::eDebugNo,
Symtab::eVisibilityAny);
@@ -4461,6 +4462,7 @@
if (debug_map_symtab)
{
Symbol *exe_symbol = debug_map_symtab->FindFirstSymbolWithNameAndType (const_name,
+ nullptr,
eSymbolTypeData,
Symtab::eDebugYes,
Symtab::eVisibilityExtern);
Index: source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
===================================================================
--- source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
+++ source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
@@ -4544,7 +4544,8 @@
addr_t symbol_load_addr = LLDB_INVALID_ADDRESS;
lldb_private::SymbolContextList sc_list;
- if (process->GetTarget().GetImages().FindSymbolsWithNameAndType(ConstString(symbol_name), eSymbolTypeAny, sc_list))
+ Target &target = process->GetTarget();
+ if (target.GetImages().FindSymbolsWithNameAndType(ConstString(symbol_name), target.GetSymbolRewriter(), eSymbolTypeAny, sc_list))
{
const size_t num_scs = sc_list.GetSize();
for (size_t sc_idx=0; sc_idx<num_scs && symbol_load_addr == LLDB_INVALID_ADDRESS; ++sc_idx)
@@ -4587,7 +4588,7 @@
case eSymbolTypeObjCMetaClass:
case eSymbolTypeObjCIVar:
case eSymbolTypeReExported:
- symbol_load_addr = sc.symbol->GetLoadAddress(&process->GetTarget());
+ symbol_load_addr = sc.symbol->GetLoadAddress(&target);
break;
}
}
Index: source/Plugins/Process/Utility/InferiorCallPOSIX.cpp
===================================================================
--- source/Plugins/Process/Utility/InferiorCallPOSIX.cpp
+++ source/Plugins/Process/Utility/InferiorCallPOSIX.cpp
@@ -48,17 +48,20 @@
if (thread == NULL)
return false;
+ Target &target = process->GetTarget();
+
const bool append = true;
const bool include_symbols = true;
const bool include_inlines = false;
SymbolContextList sc_list;
const uint32_t count
- = process->GetTarget().GetImages().FindFunctions (ConstString ("mmap"),
- eFunctionNameTypeFull,
- include_symbols,
- include_inlines,
- append,
- sc_list);
+ = target.GetImages().FindFunctions (ConstString ("mmap"),
+ target.GetSymbolRewriter(),
+ eFunctionNameTypeFull,
+ include_symbols,
+ include_inlines,
+ append,
+ sc_list);
if (count > 0)
{
SymbolContext sc;
@@ -88,13 +91,13 @@
prot_arg |= PROT_WRITE;
}
- const ArchSpec arch = process->GetTarget().GetArchitecture();
- flags_arg = process->GetTarget().GetPlatform()->ConvertMmapFlagsToPlatform(arch,flags);
+ const ArchSpec arch = target.GetArchitecture();
+ flags_arg = target.GetPlatform()->ConvertMmapFlagsToPlatform(arch,flags);
AddressRange mmap_range;
if (sc.GetAddressRange(range_scope, 0, use_inline_block_range, mmap_range))
{
- ClangASTContext *clang_ast_context = process->GetTarget().GetScratchClangASTContext();
+ ClangASTContext *clang_ast_context = target.GetScratchClangASTContext();
CompilerType clang_void_ptr_type = clang_ast_context->GetBasicType(eBasicTypeVoid).GetPointerType();
lldb::addr_t args[] = { addr, length, prot_arg, flags_arg, fd, offset };
lldb::ThreadPlanSP call_plan_sp(new ThreadPlanCallFunction(*thread, mmap_range.GetBaseAddress(),
@@ -142,18 +145,21 @@
Thread *thread = process->GetThreadList().GetExpressionExecutionThread().get();
if (thread == NULL)
return false;
-
+
+ Target &target = process->GetTarget();
+
const bool append = true;
const bool include_symbols = true;
const bool include_inlines = false;
SymbolContextList sc_list;
const uint32_t count
- = process->GetTarget().GetImages().FindFunctions (ConstString ("munmap"),
- eFunctionNameTypeFull,
- include_symbols,
- include_inlines,
- append,
- sc_list);
+ = target.GetImages().FindFunctions (ConstString ("munmap"),
+ target.GetSymbolRewriter(),
+ eFunctionNameTypeFull,
+ include_symbols,
+ include_inlines,
+ append,
+ sc_list);
if (count > 0)
{
SymbolContext sc;
Index: source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
===================================================================
--- source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -5179,7 +5179,7 @@
{
SymbolContextList contexts;
SymbolContext context;
- if (module_sp->FindSymbolsWithNameAndType(ConstString ("start"), eSymbolTypeCode, contexts))
+ if (module_sp->FindSymbolsWithNameAndType(ConstString ("start"), nullptr, eSymbolTypeCode, contexts))
{
if (contexts.GetContextAtIndex(0, context))
m_entry_point_address = context.symbol->GetAddress();
Index: source/Plugins/MemoryHistory/asan/MemoryHistoryASan.cpp
===================================================================
--- source/Plugins/MemoryHistory/asan/MemoryHistoryASan.cpp
+++ source/Plugins/MemoryHistory/asan/MemoryHistoryASan.cpp
@@ -46,6 +46,7 @@
const Symbol* symbol = module_pointer->FindFirstSymbolWithNameAndType(
ConstString("__asan_get_alloc_stack"),
+ target.GetSymbolRewriter(),
lldb::eSymbolTypeAny);
if (symbol != nullptr)
Index: source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp
===================================================================
--- source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp
+++ source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp
@@ -782,20 +782,22 @@
if (!module)
return Searcher::eCallbackReturnContinue;
+ const lldb::SymbolRewriterSP &rewriter = context.target_sp ? context.target_sp->GetSymbolRewriter() : nullptr;
+
// Is this a module containing renderscript kernels?
- if (nullptr == module->FindFirstSymbolWithNameAndType(ConstString(".rs.info"), eSymbolTypeData))
+ if (nullptr == module->FindFirstSymbolWithNameAndType(ConstString(".rs.info"), rewriter, eSymbolTypeData))
return Searcher::eCallbackReturnContinue;
// Attempt to set a breakpoint on the kernel name symbol within the module library.
// If it's not found, it's likely debug info is unavailable - try to set a
// breakpoint on <name>.expand.
- const Symbol *kernel_sym = module->FindFirstSymbolWithNameAndType(m_kernel_name, eSymbolTypeCode);
+ const Symbol *kernel_sym = module->FindFirstSymbolWithNameAndType(m_kernel_name, rewriter, eSymbolTypeCode);
if (!kernel_sym)
{
std::string kernel_name_expanded(m_kernel_name.AsCString());
kernel_name_expanded.append(".expand");
- kernel_sym = module->FindFirstSymbolWithNameAndType(ConstString(kernel_name_expanded.c_str()), eSymbolTypeCode);
+ kernel_sym = module->FindFirstSymbolWithNameAndType(ConstString(kernel_name_expanded.c_str()), rewriter, eSymbolTypeCode);
}
if (kernel_sym)
@@ -834,7 +836,7 @@
if (module_sp)
{
// Is this a module containing renderscript kernels?
- const Symbol *info_sym = module_sp->FindFirstSymbolWithNameAndType(ConstString(".rs.info"), eSymbolTypeData);
+ const Symbol *info_sym = module_sp->FindFirstSymbolWithNameAndType(ConstString(".rs.info"), nullptr, eSymbolTypeData);
if (info_sym)
{
return eModuleKindKernelObj;
@@ -1364,7 +1366,7 @@
const char *symbol_name = (archByteSize == 4) ? hook_defn->symbol_name_m32 : hook_defn->symbol_name_m64;
- const Symbol *sym = module->FindFirstSymbolWithNameAndType(ConstString(symbol_name), eSymbolTypeCode);
+ const Symbol *sym = module->FindFirstSymbolWithNameAndType(ConstString(symbol_name), target.GetSymbolRewriter(), eSymbolTypeCode);
if (!sym)
{
if (log)
@@ -2612,14 +2614,14 @@
if (!m_libRS)
{
m_libRS = module_sp;
+ Target &target = GetProcess()->GetTarget();
static ConstString gDbgPresentStr("gDebuggerPresent");
const Symbol *debug_present =
- m_libRS->FindFirstSymbolWithNameAndType(gDbgPresentStr, eSymbolTypeData);
+ m_libRS->FindFirstSymbolWithNameAndType(gDbgPresentStr, target.GetSymbolRewriter(), eSymbolTypeData);
if (debug_present)
{
Error error;
uint32_t flag = 0x00000001U;
- Target &target = GetProcess()->GetTarget();
addr_t addr = debug_present->GetLoadAddress(&target);
GetProcess()->WriteMemory(addr, &flag, sizeof(flag), error);
if (error.Success())
@@ -2676,7 +2678,7 @@
RSModuleDescriptor::ParseRSInfo()
{
assert(m_module);
- const Symbol *info_sym = m_module->FindFirstSymbolWithNameAndType(ConstString(".rs.info"), eSymbolTypeData);
+ const Symbol *info_sym = m_module->FindFirstSymbolWithNameAndType(ConstString(".rs.info"), nullptr, eSymbolTypeData);
if (!info_sym)
return false;
@@ -3551,7 +3553,7 @@
else
{
strm.Printf(" - variable identified, but not found in binary");
- const Symbol *s = m_module->m_module->FindFirstSymbolWithNameAndType(m_name, eSymbolTypeData);
+ const Symbol *s = m_module->m_module->FindFirstSymbolWithNameAndType(m_name, nullptr, eSymbolTypeData);
if (s)
{
strm.Printf(" (symbol exists) ");
Index: source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp
===================================================================
--- source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp
+++ source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp
@@ -479,6 +479,7 @@
{
ConstString trampoline_name ("gdb_objc_trampolines");
const Symbol *trampoline_symbol = m_objc_module_sp->FindFirstSymbolWithNameAndType (trampoline_name,
+ target.GetSymbolRewriter(),
eSymbolTypeData);
if (trampoline_symbol != NULL)
{
@@ -489,6 +490,7 @@
// Next look up the "changed" symbol and set a breakpoint on that...
ConstString changed_name ("gdb_objc_trampolines_changed");
const Symbol *changed_symbol = m_objc_module_sp->FindFirstSymbolWithNameAndType (changed_name,
+ target.GetSymbolRewriter(),
eSymbolTypeCode);
if (changed_symbol != NULL)
{
@@ -672,10 +674,11 @@
ConstString msg_forward_stret_name("_objc_msgForward_stret");
Target *target = process_sp ? &process_sp->GetTarget() : NULL;
- const Symbol *class_getMethodImplementation = m_objc_module_sp->FindFirstSymbolWithNameAndType (get_impl_name, eSymbolTypeCode);
- const Symbol *class_getMethodImplementation_stret = m_objc_module_sp->FindFirstSymbolWithNameAndType (get_impl_stret_name, eSymbolTypeCode);
- const Symbol *msg_forward = m_objc_module_sp->FindFirstSymbolWithNameAndType (msg_forward_name, eSymbolTypeCode);
- const Symbol *msg_forward_stret = m_objc_module_sp->FindFirstSymbolWithNameAndType (msg_forward_stret_name, eSymbolTypeCode);
+ const lldb::SymbolRewriterSP &rewriter = target ? target->GetSymbolRewriter() : nullptr;
+ const Symbol *class_getMethodImplementation = m_objc_module_sp->FindFirstSymbolWithNameAndType (get_impl_name, rewriter, eSymbolTypeCode);
+ const Symbol *class_getMethodImplementation_stret = m_objc_module_sp->FindFirstSymbolWithNameAndType (get_impl_stret_name, rewriter, eSymbolTypeCode);
+ const Symbol *msg_forward = m_objc_module_sp->FindFirstSymbolWithNameAndType (msg_forward_name, rewriter, eSymbolTypeCode);
+ const Symbol *msg_forward_stret = m_objc_module_sp->FindFirstSymbolWithNameAndType (msg_forward_stret_name, rewriter, eSymbolTypeCode);
if (class_getMethodImplementation)
m_impl_fn_addr = class_getMethodImplementation->GetAddress().GetOpcodeLoadAddress (target);
@@ -719,7 +722,7 @@
for (size_t i = 0; i != llvm::array_lengthof(g_dispatch_functions); i++)
{
ConstString name_const_str(g_dispatch_functions[i].name);
- const Symbol *msgSend_symbol = m_objc_module_sp->FindFirstSymbolWithNameAndType (name_const_str, eSymbolTypeCode);
+ const Symbol *msgSend_symbol = m_objc_module_sp->FindFirstSymbolWithNameAndType (name_const_str, rewriter, eSymbolTypeCode);
if (msgSend_symbol && msgSend_symbol->ValueIsAddress())
{
// FixMe: Make g_dispatch_functions static table of DispatchFunctions, and have the map be address->index.
Index: source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
===================================================================
--- source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
+++ source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
@@ -355,7 +355,7 @@
}
if (!byte_size)
byte_size = process->GetAddressByteSize();
- const Symbol *symbol = module_sp->FindFirstSymbolWithNameAndType(name, lldb::eSymbolTypeData);
+ const Symbol *symbol = module_sp->FindFirstSymbolWithNameAndType(name, process->GetTarget().GetSymbolRewriter(), lldb::eSymbolTypeData);
if (symbol && symbol->ValueIsAddress())
{
lldb::addr_t symbol_load_addr = symbol->GetAddressRef().GetLoadAddress(&process->GetTarget());
@@ -397,9 +397,11 @@
m_encoding_to_type_sp(),
m_noclasses_warning_emitted(false)
{
+ const lldb::SymbolRewriterSP &rewriter = process ? process->GetTarget().GetSymbolRewriter() : nullptr;
+
static const ConstString g_gdb_object_getClass("gdb_object_getClass");
m_has_object_getClass =
- (objc_module_sp->FindFirstSymbolWithNameAndType(g_gdb_object_getClass, eSymbolTypeCode) != NULL);
+ (objc_module_sp->FindFirstSymbolWithNameAndType(g_gdb_object_getClass, rewriter, eSymbolTypeCode) != NULL);
}
bool
@@ -962,7 +964,7 @@
//----------------------------------------------------------------------
SymbolContextList sc_list;
Target &target = m_process->GetTarget();
- target.GetImages().FindSymbolsWithNameAndType(ivar_const_str, eSymbolTypeObjCIVar, sc_list);
+ target.GetImages().FindSymbolsWithNameAndType(ivar_const_str, target.GetSymbolRewriter(), eSymbolTypeObjCIVar, sc_list);
addr_t ivar_offset_address = LLDB_INVALID_ADDRESS;
@@ -1333,18 +1335,19 @@
if (m_isa_hash_table_ptr == LLDB_INVALID_ADDRESS)
{
Process *process = GetProcess();
+ Target &target = process->GetTarget();
ModuleSP objc_module_sp(GetObjCModule());
if (!objc_module_sp)
return LLDB_INVALID_ADDRESS;
static ConstString g_gdb_objc_realized_classes("gdb_objc_realized_classes");
- const Symbol *symbol = objc_module_sp->FindFirstSymbolWithNameAndType(g_gdb_objc_realized_classes, lldb::eSymbolTypeAny);
+ const Symbol *symbol = objc_module_sp->FindFirstSymbolWithNameAndType(g_gdb_objc_realized_classes, target.GetSymbolRewriter(), lldb::eSymbolTypeAny);
if (symbol)
{
- lldb::addr_t gdb_objc_realized_classes_ptr = symbol->GetLoadAddress(&process->GetTarget());
+ lldb::addr_t gdb_objc_realized_classes_ptr = symbol->GetLoadAddress(&target);
if (gdb_objc_realized_classes_ptr != LLDB_INVALID_ADDRESS)
{
Index: source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp
===================================================================
--- source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp
+++ source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp
@@ -303,13 +303,12 @@
static ConstString g_objc_debug_class_hash("_objc_debug_class_hash");
- const Symbol *symbol = objc_module_sp->FindFirstSymbolWithNameAndType(g_objc_debug_class_hash, lldb::eSymbolTypeData);
- if (symbol && symbol->ValueIsAddress())
+ Process *process = GetProcess();
+ if (process)
{
- Process *process = GetProcess();
- if (process)
+ const Symbol *symbol = objc_module_sp->FindFirstSymbolWithNameAndType(g_objc_debug_class_hash, process->GetTarget().GetSymbolRewriter(), lldb::eSymbolTypeData);
+ if (symbol && symbol->ValueIsAddress())
{
-
lldb::addr_t objc_debug_class_hash_addr = symbol->GetAddressRef().GetLoadAddress(&process->GetTarget());
if (objc_debug_class_hash_addr != LLDB_INVALID_ADDRESS)
Index: source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp
===================================================================
--- source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp
+++ source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntime.cpp
@@ -240,13 +240,14 @@
{
if (!m_PrintForDebugger_addr.get())
{
- const ModuleList &modules = m_process->GetTarget().GetImages();
+ Target &target = m_process->GetTarget();
+ const ModuleList &modules = target.GetImages();
SymbolContextList contexts;
SymbolContext context;
- if ((!modules.FindSymbolsWithNameAndType(ConstString ("_NSPrintForDebugger"), eSymbolTypeCode, contexts)) &&
- (!modules.FindSymbolsWithNameAndType(ConstString ("_CFPrintForDebugger"), eSymbolTypeCode, contexts)))
+ if ((!modules.FindSymbolsWithNameAndType(ConstString ("_NSPrintForDebugger"), target.GetSymbolRewriter(), eSymbolTypeCode, contexts)) &&
+ (!modules.FindSymbolsWithNameAndType(ConstString ("_CFPrintForDebugger"), target.GetSymbolRewriter(), eSymbolTypeCode, contexts)))
return NULL;
contexts.GetContextAtIndex(0, context);
@@ -314,7 +315,7 @@
{
const FileSpec &module_file_spec = module_sp->GetFileSpec();
static ConstString ObjCName ("libobjc.A.dylib");
-
+
if (module_file_spec)
{
if (module_file_spec.GetFilename() == ObjCName)
@@ -495,8 +496,8 @@
SymbolContextList sc_list;
- if (target.GetImages().FindSymbolsWithNameAndType(s_method_signature, eSymbolTypeCode, sc_list) ||
- target.GetImages().FindSymbolsWithNameAndType(s_arclite_method_signature, eSymbolTypeCode, sc_list))
+ if (target.GetImages().FindSymbolsWithNameAndType(s_method_signature, target.GetSymbolRewriter(), eSymbolTypeCode, sc_list) ||
+ target.GetImages().FindSymbolsWithNameAndType(s_arclite_method_signature, target.GetSymbolRewriter(), eSymbolTypeCode, sc_list))
return true;
else
return false;
Index: source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
===================================================================
--- source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
+++ source/Plugins/JITLoader/GDB/JITLoaderGDB.cpp
@@ -525,8 +525,8 @@
SymbolContextList target_symbols;
Target &target = m_process->GetTarget();
- if (!module_list.FindSymbolsWithNameAndType(name, symbol_type,
- target_symbols))
+ if (!module_list.FindSymbolsWithNameAndType(name, target.GetSymbolRewriter(),
+ symbol_type, target_symbols))
return LLDB_INVALID_ADDRESS;
SymbolContext sym_ctx;
Index: source/Plugins/InstrumentationRuntime/ThreadSanitizer/ThreadSanitizerRuntime.cpp
===================================================================
--- source/Plugins/InstrumentationRuntime/ThreadSanitizer/ThreadSanitizerRuntime.cpp
+++ source/Plugins/InstrumentationRuntime/ThreadSanitizer/ThreadSanitizerRuntime.cpp
@@ -84,10 +84,10 @@
}
static bool
-ModuleContainsTSanRuntime(ModuleSP module_sp)
+ModuleContainsTSanRuntime(ModuleSP module_sp, const lldb::SymbolRewriterSP &rewriter)
{
static ConstString g_tsan_get_current_report("__tsan_get_current_report");
- const Symbol* symbol = module_sp->FindFirstSymbolWithNameAndType(g_tsan_get_current_report, lldb::eSymbolTypeAny);
+ const Symbol* symbol = module_sp->FindFirstSymbolWithNameAndType(g_tsan_get_current_report, rewriter, lldb::eSymbolTypeAny);
return symbol != nullptr;
}
@@ -111,7 +111,9 @@
llvm::StringRef module_basename(file_spec.GetFilename().GetStringRef());
if (module_sp->IsExecutable() || module_basename.startswith("libclang_rt.tsan_"))
{
- if (ModuleContainsTSanRuntime(module_sp))
+ ProcessSP process_sp = GetProcessSP();
+ const lldb::SymbolRewriterSP &rewriter = process_sp ? process_sp->GetTarget().GetSymbolRewriter() : nullptr;
+ if (ModuleContainsTSanRuntime(module_sp, rewriter))
{
m_runtime_module_wp = module_sp;
Activate();
@@ -739,7 +741,7 @@
return;
ConstString symbol_name ("__tsan_on_report");
- const Symbol *symbol = GetRuntimeModuleSP()->FindFirstSymbolWithNameAndType (symbol_name, eSymbolTypeCode);
+ const Symbol *symbol = GetRuntimeModuleSP()->FindFirstSymbolWithNameAndType (symbol_name, process_sp->GetTarget().GetSymbolRewriter(), eSymbolTypeCode);
if (symbol == NULL)
return;
Index: source/Plugins/InstrumentationRuntime/AddressSanitizer/AddressSanitizerRuntime.cpp
===================================================================
--- source/Plugins/InstrumentationRuntime/AddressSanitizer/AddressSanitizerRuntime.cpp
+++ source/Plugins/InstrumentationRuntime/AddressSanitizer/AddressSanitizerRuntime.cpp
@@ -79,10 +79,11 @@
Deactivate();
}
-bool ModuleContainsASanRuntime(Module * module)
+bool ModuleContainsASanRuntime(Module * module, const lldb::SymbolRewriterSP &rewriter)
{
const Symbol* symbol = module->FindFirstSymbolWithNameAndType(
ConstString("__asan_get_alloc_stack"),
+ rewriter,
lldb::eSymbolTypeAny);
return symbol != nullptr;
@@ -111,7 +112,9 @@
static RegularExpression g_asan_runtime_regex("libclang_rt.asan_(.*)_dynamic\\.dylib");
if (g_asan_runtime_regex.Execute (file_spec.GetFilename().GetCString()) || module_pointer->IsExecutable())
{
- if (ModuleContainsASanRuntime(module_pointer))
+ ProcessSP process_sp = GetProcessSP();
+ const lldb::SymbolRewriterSP &rewriter = process_sp ? process_sp->GetTarget().GetSymbolRewriter() : nullptr;
+ if (ModuleContainsASanRuntime(module_pointer, rewriter))
{
m_runtime_module = module_pointer->shared_from_this();
Activate();
@@ -314,7 +317,7 @@
return;
ConstString symbol_name ("__asan::AsanDie()");
- const Symbol *symbol = m_runtime_module->FindFirstSymbolWithNameAndType (symbol_name, eSymbolTypeCode);
+ const Symbol *symbol = m_runtime_module->FindFirstSymbolWithNameAndType (symbol_name, process_sp->GetTarget().GetSymbolRewriter(), eSymbolTypeCode);
if (symbol == NULL)
return;
Index: source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
===================================================================
--- source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
+++ source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp
@@ -525,9 +525,9 @@
SymbolContextList sc_list;
if (module)
- module->FindSymbolsWithNameAndType(name, symbol_type, sc_list);
+ module->FindSymbolsWithNameAndType(name, target.GetSymbolRewriter(), symbol_type, sc_list);
else
- target.GetImages().FindSymbolsWithNameAndType(name, symbol_type, sc_list);
+ target.GetImages().FindSymbolsWithNameAndType(name, target.GetSymbolRewriter(), symbol_type, sc_list);
const uint32_t num_matches = sc_list.GetSize();
addr_t symbol_load_addr = LLDB_INVALID_ADDRESS;
@@ -637,9 +637,9 @@
SymbolContextList sc_list;
if (module)
- module->FindSymbolsWithNameAndType(name, eSymbolTypeAny, sc_list);
+ module->FindSymbolsWithNameAndType(name, target.GetSymbolRewriter(), eSymbolTypeAny, sc_list);
else
- target.GetImages().FindSymbolsWithNameAndType(name, eSymbolTypeAny, sc_list);
+ target.GetImages().FindSymbolsWithNameAndType(name, target.GetSymbolRewriter(), eSymbolTypeAny, sc_list);
const uint32_t matches = sc_list.GetSize();
for (uint32_t i=0; i<matches; ++i)
@@ -1314,11 +1314,13 @@
const bool include_inlines = false;
const bool append = false;
+ const lldb::SymbolRewriterSP &rewriter = target ? target->GetSymbolRewriter() : nullptr;
if (namespace_decl && module_sp)
{
const bool include_symbols = false;
module_sp->FindFunctions(name,
+ rewriter,
&namespace_decl,
eFunctionNameTypeBase,
include_symbols,
@@ -1334,6 +1336,7 @@
// instance methods for eFunctionNameTypeBase.
target->GetImages().FindFunctions(name,
+ rewriter,
eFunctionNameTypeFull,
include_symbols,
include_inlines,
Index: source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp
===================================================================
--- source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp
+++ source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp
@@ -1140,7 +1140,9 @@
ms.Flush();
ConstString instance_method_name(ms.GetData());
- m_target->GetImages().FindFunctions(instance_method_name, lldb::eFunctionNameTypeFull, include_symbols, include_inlines, append, sc_list);
+ const lldb::SymbolRewriterSP &rewriter = m_target->GetSymbolRewriter();
+
+ m_target->GetImages().FindFunctions(instance_method_name, rewriter, lldb::eFunctionNameTypeFull, include_symbols, include_inlines, append, sc_list);
if (sc_list.GetSize())
break;
@@ -1150,7 +1152,7 @@
ms.Flush();
ConstString class_method_name(ms.GetData());
- m_target->GetImages().FindFunctions(class_method_name, lldb::eFunctionNameTypeFull, include_symbols, include_inlines, append, sc_list);
+ m_target->GetImages().FindFunctions(class_method_name, rewriter, lldb::eFunctionNameTypeFull, include_symbols, include_inlines, append, sc_list);
if (sc_list.GetSize())
break;
@@ -1160,7 +1162,7 @@
SymbolContextList candidate_sc_list;
- m_target->GetImages().FindFunctions(selector_name, lldb::eFunctionNameTypeSelector, include_symbols, include_inlines, append, candidate_sc_list);
+ m_target->GetImages().FindFunctions(selector_name, rewriter, lldb::eFunctionNameTypeSelector, include_symbols, include_inlines, append, candidate_sc_list);
for (uint32_t ci = 0, ce = candidate_sc_list.GetSize();
ci != ce;
Index: source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
===================================================================
--- source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
+++ source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
@@ -454,7 +454,7 @@
Target &target = thread.GetProcess()->GetTarget();
const ModuleList &images = target.GetImages();
- images.FindSymbolsWithNameAndType(sym_name, eSymbolTypeCode, target_symbols);
+ images.FindSymbolsWithNameAndType(sym_name, target.GetSymbolRewriter(), eSymbolTypeCode, target_symbols);
size_t num_targets = target_symbols.GetSize();
if (!num_targets)
return thread_plan_sp;
Index: source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
===================================================================
--- source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
+++ source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
@@ -585,7 +585,7 @@
Target& target = m_process->GetTarget();
SymbolContextList list;
- if (!target.GetImages().FindSymbolsWithNameAndType (ConstString(name), eSymbolTypeAny, list))
+ if (!target.GetImages().FindSymbolsWithNameAndType (ConstString(name), target.GetSymbolRewriter(), eSymbolTypeAny, list))
return false;
Address address = list[0].symbol->GetAddress();
Index: source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
===================================================================
--- source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
+++ source/Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.cpp
@@ -422,7 +422,7 @@
if (m_dyld_all_image_infos_addr == LLDB_INVALID_ADDRESS && dyld_module_sp.get())
{
static ConstString g_dyld_all_image_infos ("dyld_all_image_infos");
- const Symbol *symbol = dyld_module_sp->FindFirstSymbolWithNameAndType (g_dyld_all_image_infos, eSymbolTypeData);
+ const Symbol *symbol = dyld_module_sp->FindFirstSymbolWithNameAndType (g_dyld_all_image_infos, target.GetSymbolRewriter(), eSymbolTypeData);
if (symbol)
m_dyld_all_image_infos_addr = symbol->GetLoadAddress(&target);
}
@@ -1814,7 +1814,7 @@
const ModuleList &images = target_sp->GetImages();
SymbolContextList code_symbols;
- images.FindSymbolsWithNameAndType(trampoline_name, eSymbolTypeCode, code_symbols);
+ images.FindSymbolsWithNameAndType(trampoline_name, target_sp->GetSymbolRewriter(), eSymbolTypeCode, code_symbols);
size_t num_code_symbols = code_symbols.GetSize();
if (num_code_symbols > 0)
@@ -1838,7 +1838,7 @@
}
SymbolContextList reexported_symbols;
- images.FindSymbolsWithNameAndType(trampoline_name, eSymbolTypeReExported, reexported_symbols);
+ images.FindSymbolsWithNameAndType(trampoline_name, target_sp->GetSymbolRewriter(), eSymbolTypeReExported, reexported_symbols);
size_t num_reexported_symbols = reexported_symbols.GetSize();
if (num_reexported_symbols > 0)
{
@@ -1870,7 +1870,7 @@
}
SymbolContextList indirect_symbols;
- images.FindSymbolsWithNameAndType(trampoline_name, eSymbolTypeResolver, indirect_symbols);
+ images.FindSymbolsWithNameAndType(trampoline_name, target_sp->GetSymbolRewriter(), eSymbolTypeResolver, indirect_symbols);
size_t num_indirect_symbols = indirect_symbols.GetSize();
if (num_indirect_symbols > 0)
{
@@ -2027,7 +2027,7 @@
if (module_sp)
{
lldb_private::SymbolContextList sc_list;
- module_sp->FindSymbolsWithNameAndType(ConstString("pthread_getspecific"), eSymbolTypeCode, sc_list);
+ module_sp->FindSymbolsWithNameAndType(ConstString("pthread_getspecific"), m_process->GetTarget().GetSymbolRewriter(), eSymbolTypeCode, sc_list);
SymbolContext sc;
if (sc_list.GetContextAtIndex(0, sc))
{
Index: source/Plugins/DynamicLoader/Hexagon-DYLD/HexagonDYLDRendezvous.cpp
===================================================================
--- source/Plugins/DynamicLoader/Hexagon-DYLD/HexagonDYLDRendezvous.cpp
+++ source/Plugins/DynamicLoader/Hexagon-DYLD/HexagonDYLDRendezvous.cpp
@@ -329,7 +329,7 @@
Target& target = m_process->GetTarget();
SymbolContextList list;
- if (!target.GetImages().FindSymbolsWithNameAndType (ConstString(name), eSymbolTypeAny, list))
+ if (!target.GetImages().FindSymbolsWithNameAndType (ConstString(name), target.GetSymbolRewriter(), eSymbolTypeAny, list))
return false;
Address address = list[0].symbol->GetAddress();
Index: source/Plugins/DynamicLoader/Hexagon-DYLD/DynamicLoaderHexagonDYLD.cpp
===================================================================
--- source/Plugins/DynamicLoader/Hexagon-DYLD/DynamicLoaderHexagonDYLD.cpp
+++ source/Plugins/DynamicLoader/Hexagon-DYLD/DynamicLoaderHexagonDYLD.cpp
@@ -497,7 +497,7 @@
Target &target = thread.GetProcess()->GetTarget();
const ModuleList &images = target.GetImages();
- images.FindSymbolsWithNameAndType(sym_name, eSymbolTypeCode, target_symbols);
+ images.FindSymbolsWithNameAndType(sym_name, target.GetSymbolRewriter(), eSymbolTypeCode, target_symbols);
size_t num_targets = target_symbols.GetSize();
if (!num_targets)
return thread_plan_sp;
Index: source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
===================================================================
--- source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
+++ source/Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.cpp
@@ -1024,8 +1024,10 @@
{
if (!m_kext_summary_header_ptr_addr.IsValid())
{
+ Target &target = m_process->GetTarget();
+
m_kernel.Clear();
- m_kernel.SetModule (m_process->GetTarget().GetExecutableModule());
+ m_kernel.SetModule (target.GetExecutableModule());
m_kernel.SetIsKernel(true);
ConstString kernel_name("mach_kernel");
@@ -1048,7 +1050,7 @@
ObjectFile *kernel_object_file = m_kernel.GetModule()->GetObjectFile();
if (kernel_object_file)
{
- addr_t load_address = kernel_object_file->GetHeaderAddress().GetLoadAddress(&m_process->GetTarget());
+ addr_t load_address = kernel_object_file->GetHeaderAddress().GetLoadAddress(&target);
addr_t file_address = kernel_object_file->GetHeaderAddress().GetFileAddress();
if (load_address != LLDB_INVALID_ADDRESS && load_address != 0)
{
@@ -1080,7 +1082,7 @@
if (m_kernel.IsLoaded() && m_kernel.GetModule())
{
static ConstString kext_summary_symbol ("gLoadedKextSummaries");
- const Symbol *symbol = m_kernel.GetModule()->FindFirstSymbolWithNameAndType (kext_summary_symbol, eSymbolTypeData);
+ const Symbol *symbol = m_kernel.GetModule()->FindFirstSymbolWithNameAndType (kext_summary_symbol, target.GetSymbolRewriter(), eSymbolTypeData);
if (symbol)
{
m_kext_summary_header_ptr_addr = symbol->GetAddress();
Index: source/Expression/IRExecutionUnit.cpp
===================================================================
--- source/Expression/IRExecutionUnit.cpp
+++ source/Expression/IRExecutionUnit.cpp
@@ -918,6 +918,7 @@
if (sc.module_sp)
{
sc.module_sp->FindFunctions(spec.name,
+ target->GetSymbolRewriter(),
NULL,
spec.mask,
true, // include_symbols
@@ -940,6 +941,7 @@
if (sc_list.GetSize() == 0 && sc.target_sp)
{
sc.target_sp->GetImages().FindFunctions(spec.name,
+ target->GetSymbolRewriter(),
spec.mask,
true, // include_symbols
false, // include_inlines
@@ -958,7 +960,7 @@
if (sc_list.GetSize() == 0 && sc.target_sp)
{
- sc.target_sp->GetImages().FindSymbolsWithNameAndType(spec.name, lldb::eSymbolTypeAny, sc_list);
+ sc.target_sp->GetImages().FindSymbolsWithNameAndType(spec.name, sc.target_sp->GetSymbolRewriter(), lldb::eSymbolTypeAny, sc_list);
}
if (get_external_load_address(load_address, sc_list, sc))
Index: source/Core/SourceManager.cpp
===================================================================
--- source/Core/SourceManager.cpp
+++ source/Core/SourceManager.cpp
@@ -291,6 +291,7 @@
bool inlines_okay = true;
bool append = false;
size_t num_matches = executable_ptr->FindFunctions (main_name,
+ target_sp->GetSymbolRewriter(),
NULL,
lldb::eFunctionNameTypeBase,
inlines_okay,
Index: source/Core/ModuleList.cpp
===================================================================
--- source/Core/ModuleList.cpp
+++ source/Core/ModuleList.cpp
@@ -331,6 +331,7 @@
size_t
ModuleList::FindFunctions (const ConstString &name,
+ const lldb::SymbolRewriterSP &rewriter,
uint32_t name_type_mask,
bool include_symbols,
bool include_inlines,
@@ -358,6 +359,7 @@
for (pos = m_modules.begin(); pos != end; ++pos)
{
(*pos)->FindFunctions(lookup_name,
+ rewriter,
nullptr,
lookup_name_type_mask,
include_symbols,
@@ -393,14 +395,15 @@
collection::const_iterator pos, end = m_modules.end();
for (pos = m_modules.begin(); pos != end; ++pos)
{
- (*pos)->FindFunctions(name, nullptr, name_type_mask, include_symbols, include_inlines, true, sc_list);
+ (*pos)->FindFunctions(name, rewriter, nullptr, name_type_mask, include_symbols, include_inlines, true, sc_list);
}
}
return sc_list.GetSize() - old_size;
}
size_t
ModuleList::FindFunctionSymbols (const ConstString &name,
+ const lldb::SymbolRewriterSP &rewriter,
uint32_t name_type_mask,
SymbolContextList& sc_list)
{
@@ -422,8 +425,9 @@
for (pos = m_modules.begin(); pos != end; ++pos)
{
(*pos)->FindFunctionSymbols (lookup_name,
- lookup_name_type_mask,
- sc_list);
+ rewriter,
+ lookup_name_type_mask,
+ sc_list);
}
if (match_name_after_lookup)
@@ -453,7 +457,7 @@
collection::const_iterator pos, end = m_modules.end();
for (pos = m_modules.begin(); pos != end; ++pos)
{
- (*pos)->FindFunctionSymbols (name, name_type_mask, sc_list);
+ (*pos)->FindFunctionSymbols (name, rewriter, name_type_mask, sc_list);
}
}
@@ -531,6 +535,7 @@
size_t
ModuleList::FindSymbolsWithNameAndType (const ConstString &name,
+ const lldb::SymbolRewriterSP &rewriter,
SymbolType symbol_type,
SymbolContextList &sc_list,
bool append) const
@@ -542,7 +547,7 @@
collection::const_iterator pos, end = m_modules.end();
for (pos = m_modules.begin(); pos != end; ++pos)
- (*pos)->FindSymbolsWithNameAndType (name, symbol_type, sc_list);
+ (*pos)->FindSymbolsWithNameAndType (name, rewriter, symbol_type, sc_list);
return sc_list.GetSize() - initial_size;
}
Index: source/Core/Module.cpp
===================================================================
--- source/Core/Module.cpp
+++ source/Core/Module.cpp
@@ -736,6 +736,7 @@
size_t
Module::FindFunctions (const ConstString &name,
+ const lldb::SymbolRewriterSP &rewriter,
const CompilerDeclContext *parent_decl_ctx,
uint32_t name_type_mask,
bool include_symbols,
@@ -777,7 +778,7 @@
{
Symtab *symtab = symbols->GetSymtab();
if (symtab)
- symtab->FindFunctionSymbols(lookup_name, lookup_name_type_mask, sc_list);
+ symtab->FindFunctionSymbols(lookup_name, rewriter, lookup_name_type_mask, sc_list);
}
}
@@ -813,7 +814,7 @@
{
Symtab *symtab = symbols->GetSymtab();
if (symtab)
- symtab->FindFunctionSymbols(name, name_type_mask, sc_list);
+ symtab->FindFunctionSymbols(name, rewriter, name_type_mask, sc_list);
}
}
}
@@ -1351,7 +1352,7 @@
}
const Symbol *
-Module::FindFirstSymbolWithNameAndType (const ConstString &name, SymbolType symbol_type)
+Module::FindFirstSymbolWithNameAndType (const ConstString &name, const lldb::SymbolRewriterSP &rewriter, SymbolType symbol_type)
{
Timer scoped_timer(__PRETTY_FUNCTION__,
"Module::FindFirstSymbolWithNameAndType (name = %s, type = %i)",
@@ -1362,7 +1363,7 @@
{
Symtab *symtab = sym_vendor->GetSymtab();
if (symtab)
- return symtab->FindFirstSymbolWithNameAndType (name, symbol_type, Symtab::eDebugAny, Symtab::eVisibilityAny);
+ return symtab->FindFirstSymbolWithNameAndType (name, rewriter, symbol_type, Symtab::eDebugAny, Symtab::eVisibilityAny);
}
return nullptr;
}
@@ -1388,6 +1389,7 @@
size_t
Module::FindFunctionSymbols (const ConstString &name,
+ const lldb::SymbolRewriterSP &rewriter,
uint32_t name_type_mask,
SymbolContextList& sc_list)
{
@@ -1400,13 +1402,13 @@
{
Symtab *symtab = sym_vendor->GetSymtab();
if (symtab)
- return symtab->FindFunctionSymbols (name, name_type_mask, sc_list);
+ return symtab->FindFunctionSymbols (name, rewriter, name_type_mask, sc_list);
}
return 0;
}
size_t
-Module::FindSymbolsWithNameAndType (const ConstString &name, SymbolType symbol_type, SymbolContextList &sc_list)
+Module::FindSymbolsWithNameAndType (const ConstString &name, const lldb::SymbolRewriterSP &rewriter, SymbolType symbol_type, SymbolContextList &sc_list)
{
// No need to protect this call using m_mutex all other method calls are
// already thread safe.
@@ -1423,7 +1425,7 @@
if (symtab)
{
std::vector<uint32_t> symbol_indexes;
- symtab->FindAllSymbolsWithNameAndType (name, symbol_type, symbol_indexes);
+ symtab->FindAllSymbolsWithNameAndType (name, rewriter, symbol_type, symbol_indexes);
SymbolIndicesToSymbolContextList (symtab, symbol_indexes, sc_list);
}
}
Index: source/Core/Disassembler.cpp
===================================================================
--- source/Core/Disassembler.cpp
+++ source/Core/Disassembler.cpp
@@ -184,9 +184,12 @@
{
const bool include_symbols = true;
const bool include_inlines = true;
+ Target *target = exe_ctx.GetTargetPtr();
+ const lldb::SymbolRewriterSP &rewriter = target ? target->GetSymbolRewriter() : nullptr;
if (module)
{
module->FindFunctions(name,
+ rewriter,
nullptr,
eFunctionNameTypeAuto,
include_symbols,
@@ -197,6 +200,7 @@
else if (exe_ctx.GetTargetPtr())
{
exe_ctx.GetTargetPtr()->GetImages().FindFunctions (name,
+ rewriter,
eFunctionNameTypeAuto,
include_symbols,
include_inlines,
Index: source/Core/AddressResolverName.cpp
===================================================================
--- source/Core/AddressResolverName.cpp
+++ source/Core/AddressResolverName.cpp
@@ -19,6 +19,7 @@
#include "lldb/Symbol/Function.h"
#include "lldb/Symbol/SymbolContext.h"
#include "lldb/Symbol/Symbol.h"
+#include "lldb/Target/Target.h"
using namespace lldb;
using namespace lldb_private;
@@ -100,10 +101,13 @@
case AddressResolver::Exact:
if (context.module_sp)
{
+ const lldb::SymbolRewriterSP &rewriter = context.target_sp ? context.target_sp->GetSymbolRewriter() : nullptr;
context.module_sp->FindSymbolsWithNameAndType (m_func_name,
+ rewriter,
eSymbolTypeCode,
sym_list);
context.module_sp->FindFunctions(m_func_name,
+ rewriter,
nullptr,
eFunctionNameTypeAuto,
include_symbols,
Index: source/Commands/CommandObjectTarget.cpp
===================================================================
--- source/Commands/CommandObjectTarget.cpp
+++ source/Commands/CommandObjectTarget.cpp
@@ -45,6 +45,7 @@
#include "lldb/Symbol/LineTable.h"
#include "lldb/Symbol/ObjectFile.h"
#include "lldb/Symbol/SymbolFile.h"
+#include "lldb/Symbol/SymbolRewriter.h"
#include "lldb/Symbol/SymbolVendor.h"
#include "lldb/Symbol/UnwindPlan.h"
#include "lldb/Symbol/VariableList.h"
@@ -1811,7 +1812,10 @@
else
{
ConstString function_name (name);
+ Target *target = interpreter.GetExecutionContext().GetTargetPtr();
+ const lldb::SymbolRewriterSP &rewriter = target ? target->GetSymbolRewriter() : nullptr;
num_matches = module->FindFunctions(function_name,
+ rewriter,
nullptr,
eFunctionNameTypeAuto,
include_symbols,
@@ -3724,7 +3728,7 @@
if (m_options.m_type == eLookupTypeFunctionOrSymbol)
{
ConstString function_name (m_options.m_str.c_str());
- target->GetImages().FindFunctions (function_name, eFunctionNameTypeAuto, true, false, true, sc_list);
+ target->GetImages().FindFunctions (function_name, target->GetSymbolRewriter(), eFunctionNameTypeAuto, true, false, true, sc_list);
}
else if (m_options.m_type == eLookupTypeAddress && target)
{
@@ -4810,6 +4814,46 @@
OptionGroupBoolean m_current_frame_option;
};
+class CommandObjectTargetSymbolsRewrite : public CommandObjectParsed
+{
+public:
+ CommandObjectTargetSymbolsRewrite (CommandInterpreter &interpreter) :
+ CommandObjectParsed (interpreter,
+ "target symbols rewrite",
+ "Add a symbol rewrite file to the target by specifying a path to a rewrite map file.",
+ "target symbols rewrite [<rewrite_map>]", eCommandRequiresTarget) {}
+
+protected:
+ virtual bool
+ DoExecute (Args& args,
+ CommandReturnObject &result)
+ {
+ Target *target = m_exe_ctx.GetTargetPtr();
+ const char *path = args.GetArgumentAtIndex(0);
+
+ if (!path)
+ {
+ result.AppendMessageWithFormat ("A symbol file path must be provided\n");
+ result.SetStatus (eReturnStatusFailed);
+ return false;
+ }
+
+ FileSpec fspec;
+ fspec.SetFile (path, true);
+
+ if (!fspec.Exists())
+ {
+ result.AppendMessageWithFormat ("%s: File not found\n", path);
+ result.SetStatus (eReturnStatusFailed);
+ return false;
+ }
+ target->GetSymbolRewriter()->LoadMap (fspec);
+
+ result.SetStatus (eReturnStatusSuccessFinishResult);
+ return true;
+ }
+};
+
#pragma mark CommandObjectTargetSymbols
//-------------------------------------------------------------------------
@@ -4829,6 +4873,7 @@
"target symbols <sub-command> ...")
{
LoadSubCommand ("add", CommandObjectSP (new CommandObjectTargetSymbolsAdd (interpreter)));
+ LoadSubCommand ("rewrite", CommandObjectSP (new CommandObjectTargetSymbolsRewrite (interpreter)));
}
~CommandObjectTargetSymbols() override = default;
Index: source/Commands/CommandObjectSource.cpp
===================================================================
--- source/Commands/CommandObjectSource.cpp
+++ source/Commands/CommandObjectSource.cpp
@@ -426,6 +426,7 @@
ModuleList module_list = (m_module_list.GetSize() > 0) ?
m_module_list : target->GetImages();
size_t num_matches = module_list.FindFunctions(name,
+ target->GetSymbolRewriter(),
eFunctionNameTypeAuto,
/*include_symbols=*/false,
/*include_inlines=*/true,
@@ -437,6 +438,7 @@
// symbols that line up exactly with function addresses.
SymbolContextList sc_list_symbols;
size_t num_symbol_matches = module_list.FindFunctionSymbols(name,
+ target->GetSymbolRewriter(),
eFunctionNameTypeAuto,
sc_list_symbols);
for (size_t i = 0; i < num_symbol_matches; i++)
@@ -1042,13 +1044,13 @@
ModuleSpec module_spec (module_file_spec);
matching_modules.Clear();
target->GetImages().FindModules (module_spec, matching_modules);
- num_matches += matching_modules.FindFunctions (name, eFunctionNameTypeAuto, include_symbols, include_inlines, append, sc_list);
+ num_matches += matching_modules.FindFunctions (name, target->GetSymbolRewriter(), eFunctionNameTypeAuto, include_symbols, include_inlines, append, sc_list);
}
}
}
else
{
- num_matches = target->GetImages().FindFunctions (name, eFunctionNameTypeAuto, include_symbols, include_inlines, append, sc_list);
+ num_matches = target->GetImages().FindFunctions (name, target->GetSymbolRewriter(), eFunctionNameTypeAuto, include_symbols, include_inlines, append, sc_list);
}
return num_matches;
}
@@ -1068,13 +1070,13 @@
ModuleSpec module_spec (module_file_spec);
matching_modules.Clear();
target->GetImages().FindModules (module_spec, matching_modules);
- num_matches += matching_modules.FindFunctionSymbols (name, eFunctionNameTypeAuto, sc_list);
+ num_matches += matching_modules.FindFunctionSymbols (name, target->GetSymbolRewriter(), eFunctionNameTypeAuto, sc_list);
}
}
}
else
{
- num_matches = target->GetImages().FindFunctionSymbols (name, eFunctionNameTypeAuto, sc_list);
+ num_matches = target->GetImages().FindFunctionSymbols (name, target->GetSymbolRewriter(), eFunctionNameTypeAuto, sc_list);
}
return num_matches;
}
Index: source/Breakpoint/BreakpointResolverName.cpp
===================================================================
--- source/Breakpoint/BreakpointResolverName.cpp
+++ source/Breakpoint/BreakpointResolverName.cpp
@@ -21,6 +21,7 @@
#include "lldb/Symbol/Function.h"
#include "lldb/Symbol/Symbol.h"
#include "lldb/Symbol/SymbolContext.h"
+#include "lldb/Target/Target.h"
#include "Plugins/Language/ObjC/ObjCLanguage.h"
using namespace lldb;
@@ -233,7 +234,9 @@
for (const LookupInfo &lookup : m_lookups)
{
const size_t start_func_idx = func_list.GetSize();
+ const lldb::SymbolRewriterSP &rewriter = context.target_sp ? context.target_sp->GetSymbolRewriter() : nullptr;
context.module_sp->FindFunctions(lookup.lookup_name,
+ rewriter,
nullptr,
lookup.name_type_mask,
include_symbols,
Index: source/API/SBTarget.cpp
===================================================================
--- source/API/SBTarget.cpp
+++ source/API/SBTarget.cpp
@@ -1803,6 +1803,7 @@
const bool inlines_ok = true;
const bool append = true;
target_sp->GetImages().FindFunctions (ConstString(name),
+ target_sp->GetSymbolRewriter(),
name_type_mask,
symbols_ok,
inlines_ok,
@@ -1833,7 +1834,7 @@
target_sp->GetImages().FindFunctions(RegularExpression(regexstr.c_str()), true, true, true, *sb_sc_list);
break;
default:
- target_sp->GetImages().FindFunctions(ConstString(name), eFunctionNameTypeAny, true, true, true, *sb_sc_list);
+ target_sp->GetImages().FindFunctions(ConstString(name), target_sp->GetSymbolRewriter(), eFunctionNameTypeAny, true, true, true, *sb_sc_list);
break;
}
}
@@ -2387,6 +2388,7 @@
{
bool append = true;
target_sp->GetImages().FindSymbolsWithNameAndType (ConstString(name),
+ target_sp->GetSymbolRewriter(),
symbol_type,
*sb_sc_list,
append);
Index: source/API/SBModule.cpp
===================================================================
--- source/API/SBModule.cpp
+++ source/API/SBModule.cpp
@@ -376,7 +376,7 @@
ModuleSP module_sp (GetSP ());
Symtab *symtab = GetUnifiedSymbolTable (module_sp);
if (symtab)
- sb_symbol.SetSymbol(symtab->FindFirstSymbolWithNameAndType(ConstString(name), symbol_type, Symtab::eDebugAny, Symtab::eVisibilityAny));
+ sb_symbol.SetSymbol(symtab->FindFirstSymbolWithNameAndType(ConstString(name), nullptr, symbol_type, Symtab::eDebugAny, Symtab::eVisibilityAny));
}
return sb_symbol;
}
@@ -393,7 +393,7 @@
if (symtab)
{
std::vector<uint32_t> matching_symbol_indexes;
- const size_t num_matches = symtab->FindAllSymbolsWithNameAndType(ConstString(name), symbol_type, matching_symbol_indexes);
+ const size_t num_matches = symtab->FindAllSymbolsWithNameAndType(ConstString(name), nullptr, symbol_type, matching_symbol_indexes);
if (num_matches)
{
SymbolContext sc;
@@ -458,6 +458,7 @@
const bool symbols_ok = true;
const bool inlines_ok = true;
module_sp->FindFunctions (ConstString(name),
+ nullptr,
NULL,
name_type_mask,
symbols_ok,
Index: packages/Python/lldbsuite/test/lang/c/symbol_rewriter/rewrite.map
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/lang/c/symbol_rewriter/rewrite.map
@@ -0,0 +1 @@
+function: { source: putchar, target: __my_putchar,}
Index: packages/Python/lldbsuite/test/lang/c/symbol_rewriter/main.c
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/lang/c/symbol_rewriter/main.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+int putchar(int c)
+{
+ return 12345;
+}
+
+int main()
+{
+ return putchar('a');
+}
Index: packages/Python/lldbsuite/test/lang/c/symbol_rewriter/TestSymbolRewriter.py
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/lang/c/symbol_rewriter/TestSymbolRewriter.py
@@ -0,0 +1,48 @@
+"""Check that compiler-generated constant values work correctly"""
+
+from __future__ import print_function
+
+import os, time
+import subprocess
+
+import lldb
+
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+class SymbolRewriterTestCase(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ # We need the -frewrite-map-file clang flag to build
+ @skipIf(compiler="clang", compiler_version=["<", "3.7"])
+ @skipIf(compiler='gcc')
+ @skipIf(debug_info=no_match(["dwarf"]))
+ def test_and_run_command(self):
+ """Test the lldb symbol rewriter"""
+ self.build()
+ exe = os.path.join(os.getcwd(), "a.out")
+
+ self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
+
+ # Break inside the main.
+ lldbutil.run_break_set_by_symbol (self, "main")
+
+ self.runCmd("run", RUN_SUCCEEDED)
+
+ # The stop reason of the thread should be breakpoint.
+ self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
+ substrs = ['stopped',
+ 'stop reason = breakpoint'])
+
+ # Before adding the rewrite map, we will call the system putchar()
+ self.expect("expr (int)putchar('a')", substrs = ['(int) $0 = 97'])
+
+ rewrite_map = os.path.join(os.getcwd(), "rewrite.map")
+ self.runCmd("target symbols rewrite " + rewrite_map)
+
+ # After adding the rewrite map, we will call our re-written putchar()
+ self.expect("expr (int)putchar('a')", substrs = ['(int) $1 = 12345'])
+
+ self.runCmd("kill")
Index: packages/Python/lldbsuite/test/lang/c/symbol_rewriter/Makefile
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/lang/c/symbol_rewriter/Makefile
@@ -0,0 +1,7 @@
+LEVEL = ../../../make
+
+C_SOURCES := main.c
+
+CFLAGS_EXTRAS += -frewrite-map-file=rewrite.map -g0
+
+include $(LEVEL)/Makefile.rules
Index: lldb.xcodeproj/project.pbxproj
===================================================================
--- lldb.xcodeproj/project.pbxproj
+++ lldb.xcodeproj/project.pbxproj
@@ -744,6 +744,7 @@
6D9AB3DD1BB2B74E003F2289 /* TypeMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D9AB3DC1BB2B74E003F2289 /* TypeMap.cpp */; };
6DEC6F391BD66D750091ABA6 /* TaskPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6DEC6F381BD66D750091ABA6 /* TaskPool.cpp */; };
8C26C4261C3EA5F90031DF7C /* ThreadSanitizerRuntime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C26C4241C3EA4340031DF7C /* ThreadSanitizerRuntime.cpp */; };
+ 5AB29E881AD3510900C69791 /* SymbolRewriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5AB29E871AD3510900C69791 /* SymbolRewriter.cpp */; };
8C2D6A53197A1EAF006989C9 /* MemoryHistory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C2D6A52197A1EAF006989C9 /* MemoryHistory.cpp */; };
8C2D6A5E197A250F006989C9 /* MemoryHistoryASan.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C2D6A5A197A1FDC006989C9 /* MemoryHistoryASan.cpp */; };
8CCB017E19BA28A80009FD44 /* ThreadCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CCB017A19BA283D0009FD44 /* ThreadCollection.cpp */; };
@@ -2461,6 +2462,7 @@
4CEDAED311754F5E00E875A6 /* ThreadPlanStepUntil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ThreadPlanStepUntil.h; path = include/lldb/Target/ThreadPlanStepUntil.h; sourceTree = "<group>"; };
4CF52AF41428291E0051E832 /* SBFileSpecList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SBFileSpecList.h; path = include/lldb/API/SBFileSpecList.h; sourceTree = "<group>"; };
4CF52AF7142829390051E832 /* SBFileSpecList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SBFileSpecList.cpp; path = source/API/SBFileSpecList.cpp; sourceTree = "<group>"; };
+ 5AB29E871AD3510900C69791 /* SymbolRewriter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SymbolRewriter.cpp; path = source/Symbol/SymbolRewriter.cpp; sourceTree = "<group>"; };
69A01E1B1236C5D400C660B5 /* Condition.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Condition.cpp; sourceTree = "<group>"; };
69A01E1C1236C5D400C660B5 /* Host.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Host.cpp; sourceTree = "<group>"; };
69A01E1E1236C5D400C660B5 /* Mutex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mutex.cpp; sourceTree = "<group>"; };
@@ -4481,6 +4483,7 @@
6D9AB3DC1BB2B74E003F2289 /* TypeMap.cpp */,
6D99A3621BBC2F3200979793 /* ArmUnwindInfo.cpp */,
6D99A3611BBC2F1600979793 /* ArmUnwindInfo.h */,
+ 5AB29E871AD3510900C69791 /* SymbolRewriter.cpp */,
26BC7C5510F1B6E900F91463 /* Block.h */,
26BC7F1310F1B8EC00F91463 /* Block.cpp */,
26BC7C5610F1B6E900F91463 /* ClangASTContext.h */,
@@ -6618,6 +6621,7 @@
449ACC98197DEA0B008D175E /* FastDemangle.cpp in Sources */,
2689000513353DB600698AC0 /* BreakpointResolverName.cpp in Sources */,
6D762BEE1B1605D2006C929D /* LLDBServerUtilities.cpp in Sources */,
+ 5AB29E881AD3510900C69791 /* SymbolRewriter.cpp in Sources */,
2689000713353DB600698AC0 /* BreakpointSite.cpp in Sources */,
2689000913353DB600698AC0 /* BreakpointSiteList.cpp in Sources */,
26474CC918D0CB5B0073DEBA /* RegisterContextMemory.cpp in Sources */,
Index: include/lldb/lldb-forward.h
===================================================================
--- include/lldb/lldb-forward.h
+++ include/lldb/lldb-forward.h
@@ -225,6 +225,7 @@
class SymbolContextSpecifier;
class SymbolFile;
class SymbolFileType;
+class SymbolRewriter;
class SymbolVendor;
class Symtab;
class SyntheticChildren;
@@ -419,6 +420,7 @@
typedef std::shared_ptr<lldb_private::SymbolFileType> SymbolFileTypeSP;
typedef std::weak_ptr<lldb_private::SymbolFileType> SymbolFileTypeWP;
typedef std::shared_ptr<lldb_private::SymbolContextSpecifier> SymbolContextSpecifierSP;
+ typedef std::shared_ptr<lldb_private::SymbolRewriter> SymbolRewriterSP;
typedef std::unique_ptr<lldb_private::SymbolVendor> SymbolVendorUP;
typedef std::shared_ptr<lldb_private::SyntheticChildren> SyntheticChildrenSP;
typedef std::shared_ptr<lldb_private::SyntheticChildrenFrontEnd> SyntheticChildrenFrontEndSP;
Index: include/lldb/Target/Target.h
===================================================================
--- include/lldb/Target/Target.h
+++ include/lldb/Target/Target.h
@@ -29,6 +29,7 @@
#include "lldb/Core/ModuleList.h"
#include "lldb/Core/UserSettingsController.h"
#include "lldb/Expression/Expression.h"
+#include "lldb/Symbol/SymbolRewriter.h"
#include "lldb/Symbol/TypeSystem.h"
#include "lldb/Target/ExecutionContextScope.h"
#include "lldb/Target/PathMappingList.h"
@@ -1134,6 +1135,17 @@
{
return m_images;
}
+
+ lldb::SymbolRewriterSP
+ GetSymbolRewriter ()
+ {
+ if (!m_symbol_rewriter)
+ {
+ m_symbol_rewriter = std::make_shared<SymbolRewriter>();
+ }
+
+ return m_symbol_rewriter;
+ }
//------------------------------------------------------------------
/// Return whether this FileSpec corresponds to a module that should be considered for general searches.
@@ -1611,6 +1623,7 @@
m_mutex; ///< An API mutex that is used by the lldb::SB* classes make the SB interface thread safe
ArchSpec m_arch;
ModuleList m_images; ///< The list of images for this process (shared libraries and anything dynamically loaded).
+ lldb::SymbolRewriterSP m_symbol_rewriter; ///< Symbol rewriter for the target.
SectionLoadHistory m_section_load_history;
BreakpointList m_breakpoint_list;
BreakpointList m_internal_breakpoint_list;
Index: include/lldb/Symbol/Symtab.h
===================================================================
--- include/lldb/Symbol/Symtab.h
+++ include/lldb/Symbol/Symtab.h
@@ -76,14 +76,14 @@
uint32_t AppendSymbolIndexesWithNameAndType (const ConstString& symbol_name, lldb::SymbolType symbol_type, Debug symbol_debug_type, Visibility symbol_visibility, std::vector<uint32_t>& matches);
uint32_t AppendSymbolIndexesMatchingRegExAndType (const RegularExpression ®ex, lldb::SymbolType symbol_type, std::vector<uint32_t>& indexes);
uint32_t AppendSymbolIndexesMatchingRegExAndType (const RegularExpression ®ex, lldb::SymbolType symbol_type, Debug symbol_debug_type, Visibility symbol_visibility, std::vector<uint32_t>& indexes);
- size_t FindAllSymbolsWithNameAndType (const ConstString &name, lldb::SymbolType symbol_type, std::vector<uint32_t>& symbol_indexes);
- size_t FindAllSymbolsWithNameAndType (const ConstString &name, lldb::SymbolType symbol_type, Debug symbol_debug_type, Visibility symbol_visibility, std::vector<uint32_t>& symbol_indexes);
+ size_t FindAllSymbolsWithNameAndType (const ConstString &name, const lldb::SymbolRewriterSP &rewriter, lldb::SymbolType symbol_type, std::vector<uint32_t>& symbol_indexes);
+ size_t FindAllSymbolsWithNameAndType (const ConstString &name, const lldb::SymbolRewriterSP &rewriter, lldb::SymbolType symbol_type, Debug symbol_debug_type, Visibility symbol_visibility, std::vector<uint32_t>& symbol_indexes);
size_t FindAllSymbolsMatchingRexExAndType (const RegularExpression ®ex, lldb::SymbolType symbol_type, Debug symbol_debug_type, Visibility symbol_visibility, std::vector<uint32_t>& symbol_indexes);
- Symbol * FindFirstSymbolWithNameAndType (const ConstString &name, lldb::SymbolType symbol_type, Debug symbol_debug_type, Visibility symbol_visibility);
+ Symbol * FindFirstSymbolWithNameAndType (const ConstString &name, const lldb::SymbolRewriterSP &rewriter, lldb::SymbolType symbol_type, Debug symbol_debug_type, Visibility symbol_visibility);
Symbol * FindSymbolAtFileAddress (lldb::addr_t file_addr);
Symbol * FindSymbolContainingFileAddress (lldb::addr_t file_addr);
void ForEachSymbolContainingFileAddress(lldb::addr_t file_addr, std::function<bool(Symbol *)> const &callback);
- size_t FindFunctionSymbols (const ConstString &name, uint32_t name_type_mask, SymbolContextList& sc_list);
+ size_t FindFunctionSymbols (const ConstString &name, const lldb::SymbolRewriterSP &rewriter, uint32_t name_type_mask, SymbolContextList& sc_list);
void CalculateSymbolSizes ();
void SortSymbolIndexesByValue (std::vector<uint32_t>& indexes, bool remove_duplicates) const;
@@ -167,6 +167,9 @@
SymbolIndicesToSymbolContextList (std::vector<uint32_t> &symbol_indexes,
SymbolContextList &sc_list);
+ ConstString
+ RewriteName (const lldb::SymbolRewriterSP &rewriter, ConstString name);
+
DISALLOW_COPY_AND_ASSIGN (Symtab);
};
Index: include/lldb/Symbol/SymbolRewriter.h
===================================================================
--- /dev/null
+++ include/lldb/Symbol/SymbolRewriter.h
@@ -0,0 +1,65 @@
+//===-- SymbolRewriter.h ----------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_SymbolRewriter_h_
+#define liblldb_SymbolRewriter_h_
+
+#include "lldb/Core/ConstString.h"
+#include "lldb/Host/FileSpec.h"
+#include "lldb/lldb-defines.h"
+#include <list>
+#include <map>
+#include <memory>
+#include <string>
+
+namespace lldb_private {
+
+//-----------------------------------------------------------------------
+/// @class SymbolRewriter SymbolRewriter.h "lldb/Symbol/SymbolRewriter.h"
+/// @brief Implementation of the symbol rewrite mechanism.
+//-----------------------------------------------------------------------
+class SymbolRewriter
+{
+private:
+ struct RewriteMap
+ {
+ std::map<ConstString, ConstString> m_direct_map;
+ std::map<ConstString, ConstString> m_transform_map;
+ };
+
+ typedef std::shared_ptr<RewriteMap> RewriteMapSP;
+
+public:
+ SymbolRewriter ();
+
+ virtual
+ ~SymbolRewriter() {}
+
+ // Load a rewrite map and add its contents to the list of rewrites.
+ void
+ LoadMap (const FileSpec &path);
+
+ std::list<RewriteMapSP>::size_type
+ GetMapCount() const
+ {
+ return m_rewrite_maps.size ();
+ }
+
+ ConstString
+ Rewrite (const ConstString &name);
+
+private:
+ std::list<RewriteMapSP> m_rewrite_maps;
+
+ DISALLOW_COPY_AND_ASSIGN (SymbolRewriter);
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_SymbolRewriter_h_
Index: include/lldb/Core/ModuleList.h
===================================================================
--- include/lldb/Core/ModuleList.h
+++ include/lldb/Core/ModuleList.h
@@ -269,6 +269,7 @@
//------------------------------------------------------------------
size_t
FindFunctions (const ConstString &name,
+ const lldb::SymbolRewriterSP &rewriter,
uint32_t name_type_mask,
bool include_symbols,
bool include_inlines,
@@ -280,6 +281,7 @@
//------------------------------------------------------------------
size_t
FindFunctionSymbols (const ConstString &name,
+ const lldb::SymbolRewriterSP &rewriter,
uint32_t name_type_mask,
SymbolContextList& sc_list);
@@ -403,6 +405,7 @@
size_t
FindSymbolsWithNameAndType (const ConstString &name,
+ const lldb::SymbolRewriterSP &rewriter,
lldb::SymbolType symbol_type,
SymbolContextList &sc_list,
bool append = false) const;
Index: include/lldb/Core/Module.h
===================================================================
--- include/lldb/Core/Module.h
+++ include/lldb/Core/Module.h
@@ -237,10 +237,12 @@
//------------------------------------------------------------------
const Symbol *
FindFirstSymbolWithNameAndType (const ConstString &name,
+ const lldb::SymbolRewriterSP &rewriter,
lldb::SymbolType symbol_type = lldb::eSymbolTypeAny);
size_t
FindSymbolsWithNameAndType (const ConstString &name,
+ const lldb::SymbolRewriterSP &rewriter,
lldb::SymbolType symbol_type,
SymbolContextList &sc_list);
@@ -255,6 +257,9 @@
/// @param[in] name
/// The name of the symbol that we are looking for.
///
+ /// @param[in] rewriter
+ /// A symbol name rewriter.
+ ///
/// @param[in] name_type_mask
/// A mask that has one or more bitwise OR'ed values from the
/// lldb::FunctionNameType enumeration type that indicate what
@@ -268,6 +273,7 @@
//------------------------------------------------------------------
size_t
FindFunctionSymbols (const ConstString &name,
+ const lldb::SymbolRewriterSP &rewriter,
uint32_t name_type_mask,
SymbolContextList& sc_list);
@@ -330,6 +336,7 @@
//------------------------------------------------------------------
size_t
FindFunctions (const ConstString &name,
+ const lldb::SymbolRewriterSP &rewriter,
const CompilerDeclContext *parent_decl_ctx,
uint32_t name_type_mask,
bool symbols_ok,
@@ -1003,7 +1010,7 @@
{
return m_source_mappings;
}
-
+
//------------------------------------------------------------------
/// Finds a source file given a file spec using the module source
/// path remappings (if any).
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits