AddressResolverName.cpp revision 952e9dc874944fcdbbb224f3ec4fc2c859376f64
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===-- AddressResolverName.cpp ---------------------------------*- C++ -*-===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Core/AddressResolverName.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Project includes 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Core/Log.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Core/Module.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Core/StreamString.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Symbol/ClangNamespaceDecl.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Symbol/Function.h" 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "lldb/Symbol/SymbolContext.h" 195e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "lldb/Symbol/Symbol.h" 205e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "lldb/lldb-private-log.h" 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using namespace lldb; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using namespace lldb_private; 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AddressResolverName::AddressResolverName 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)( 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char *func_name, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddressResolver::MatchType type 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)) : 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddressResolver (), 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_func_name (func_name), 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_class_name (NULL), 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_regex (), 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_match_type (type) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (m_match_type == AddressResolver::Regexp) 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!m_regex.Compile (m_func_name.AsCString())) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS)); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (log) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) log->Warning ("function name regexp: \"%s\" did not compile.", m_func_name.AsCString()); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AddressResolverName::AddressResolverName 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)( 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegularExpression &func_regex 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)) : 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddressResolver (), 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_func_name (NULL), 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_class_name (NULL), 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_regex (func_regex), 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_match_type (AddressResolver::Regexp) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AddressResolverName::AddressResolverName 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)( 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *class_name, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *method, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddressResolver::MatchType type 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)) : 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddressResolver (), 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_func_name (method), 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_class_name (class_name), 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_regex (), 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m_match_type (type) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AddressResolverName::~AddressResolverName () 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FIXME: Right now we look at the module level, and call the module's "FindFunctions". 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Greg says he will add function tables, maybe at the CompileUnit level to accelerate function 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// lookup. At that point, we should switch the depth to CompileUnit, and look in these tables. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Searcher::CallbackReturn 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AddressResolverName::SearchCallback 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)( 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchFilter &filter, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SymbolContext &context, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Address *addr, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool containing 91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)) 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles){ 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SymbolContextList func_list; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SymbolContextList sym_list; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool skip_prologue = true; 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) uint32_t i; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SymbolContext sc; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Address func_addr; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_BREAKPOINTS)); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (m_class_name) 104e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (log) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log->Warning ("Class/method function specification not supported yet.\n"); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return Searcher::eCallbackReturnStop; 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool include_symbols = false; 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const bool include_inlines = true; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool append = false; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (m_match_type) 114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { 115a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case AddressResolver::Exact: 11690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (context.module_sp) 11790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) context.module_sp->FindSymbolsWithNameAndType (m_func_name, 11990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) eSymbolTypeCode, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sym_list); 121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) context.module_sp->FindFunctions (m_func_name, 122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) NULL, 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci eFunctionNameTypeBase | eFunctionNameTypeFull | eFunctionNameTypeMethod | eFunctionNameTypeSelector, 124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) include_symbols, 125a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) include_inlines, 126a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) append, 127a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) func_list); 128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 129a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) break; 130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 131a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) case AddressResolver::Regexp: 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (context.module_sp) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context.module_sp->FindSymbolsMatchingRegExAndType (m_regex, 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eSymbolTypeCode, 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sym_list); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context.module_sp->FindFunctions (m_regex, 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) include_symbols, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) include_inlines, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) append, 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) func_list); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case AddressResolver::Glob: 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (log) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) log->Warning ("glob is not supported yet."); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Remove any duplicates between the funcion list and the symbol list 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (func_list.GetSize()) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) for (i = 0; i < func_list.GetSize(); i++) 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (func_list.GetContextAtIndex(i, sc) == false) 157a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) continue; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 159a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (sc.function == NULL) 160a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) continue; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t j = 0; 162a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) while (j < sym_list.GetSize()) 163a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) { 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SymbolContext symbol_sc; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sym_list.GetContextAtIndex(j, symbol_sc)) 16690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (symbol_sc.symbol && symbol_sc.symbol->ValueIsAddress()) 16890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 16990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (sc.function->GetAddressRange().GetBaseAddress() == symbol_sc.symbol->GetAddress()) 170e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch { 17190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) sym_list.RemoveContextAtIndex(j); 17290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) continue; // Don't increment j 17390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 17490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 17590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 17690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) j++; 17890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 17990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 18190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) for (i = 0; i < func_list.GetSize(); i++) 182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch { 183868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (func_list.GetContextAtIndex(i, sc)) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sc.function) 18690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) func_addr = sc.function->GetAddressRange().GetBaseAddress(); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addr_t byte_size = sc.function->GetAddressRange().GetByteSize(); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (skip_prologue) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint32_t prologue_byte_size = sc.function->GetPrologueByteSize(); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (prologue_byte_size) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) func_addr.SetOffset (func_addr.GetOffset() + prologue_byte_size); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) byte_size -= prologue_byte_size; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 19890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (filter.AddressPasses (func_addr)) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddressRange new_range (func_addr, byte_size); 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) m_address_ranges.push_back (new_range); 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (i = 0; i < sym_list.GetSize(); i++) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 21190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (sym_list.GetContextAtIndex(i, sc)) 21290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (sc.symbol && sc.symbol->ValueIsAddress()) 21490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) { 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) func_addr = sc.symbol->GetAddress(); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) addr_t byte_size = sc.symbol->GetByteSize(); 2173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (skip_prologue) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const uint32_t prologue_byte_size = sc.symbol->GetPrologueByteSize(); 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (prologue_byte_size) 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 223868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) func_addr.SetOffset (func_addr.GetOffset() + prologue_byte_size); 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) byte_size -= prologue_byte_size; 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (filter.AddressPasses (func_addr)) 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddressRange new_range (func_addr, byte_size); 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) m_address_ranges.push_back (new_range); 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return Searcher::eCallbackReturnContinue; 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)Searcher::Depth 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AddressResolverName::GetDepth() 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles){ 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return Searcher::eDepthModule; 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AddressResolverName::GetDescription (Stream *s) 247868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles){ 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) s->PutCString("Address by function name: "); 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (m_match_type == AddressResolver::Regexp) 25190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) s->Printf("'%s' (regular expression)", m_regex.GetText()); 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) else 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) s->Printf("'%s'", m_func_name.AsCString()); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)