llvm-project/lldb/source/Core/AddressResolverFileLine.cpp
Zachary Turner 2f3df6137a iwyu fixes for lldbCore.
This adjusts header file includes for headers and source files
in Core.  In doing so, one dependency cycle is eliminated
because all the includes from Core to that project were dead
includes anyway.  In places where some files in other projects
were only compiling due to a transitive include from another
header, fixups have been made so that those files also include
the header they need.  Tested on Windows and Linux, and plan
to address failures on OSX and FreeBSD after watching the
bots.

llvm-svn: 299714
2017-04-06 21:28:29 +00:00

89 lines
3.4 KiB
C++

//===-- AddressResolverFileLine.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/AddressResolverFileLine.h"
#include "lldb/Core/Address.h" // for Address
#include "lldb/Core/AddressRange.h" // for AddressRange
#include "lldb/Symbol/CompileUnit.h"
#include "lldb/Symbol/LineEntry.h" // for LineEntry
#include "lldb/Symbol/SymbolContext.h"
#include "lldb/Utility/ConstString.h" // for ConstString
#include "lldb/Utility/Log.h"
#include "lldb/Utility/Logging.h" // for GetLogIfAllCategoriesSet, LIB...
#include "lldb/Utility/Stream.h" // for Stream
#include "lldb/Utility/StreamString.h"
#include "lldb/lldb-enumerations.h" // for SymbolContextItem::eSymbolCon...
#include "lldb/lldb-types.h" // for addr_t
#include <inttypes.h> // for PRIx64
#include <vector> // for vector
using namespace lldb;
using namespace lldb_private;
//----------------------------------------------------------------------
// AddressResolverFileLine:
//----------------------------------------------------------------------
AddressResolverFileLine::AddressResolverFileLine(const FileSpec &file_spec,
uint32_t line_no,
bool check_inlines)
: AddressResolver(), m_file_spec(file_spec), m_line_number(line_no),
m_inlines(check_inlines) {}
AddressResolverFileLine::~AddressResolverFileLine() {}
Searcher::CallbackReturn
AddressResolverFileLine::SearchCallback(SearchFilter &filter,
SymbolContext &context, Address *addr,
bool containing) {
SymbolContextList sc_list;
uint32_t sc_list_size;
CompileUnit *cu = context.comp_unit;
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_BREAKPOINTS));
sc_list_size =
cu->ResolveSymbolContext(m_file_spec, m_line_number, m_inlines, false,
eSymbolContextEverything, sc_list);
for (uint32_t i = 0; i < sc_list_size; i++) {
SymbolContext sc;
if (sc_list.GetContextAtIndex(i, sc)) {
Address line_start = sc.line_entry.range.GetBaseAddress();
addr_t byte_size = sc.line_entry.range.GetByteSize();
if (line_start.IsValid()) {
AddressRange new_range(line_start, byte_size);
m_address_ranges.push_back(new_range);
if (log) {
StreamString s;
// new_bp_loc->GetDescription (&s, lldb::eDescriptionLevelVerbose);
// log->Printf ("Added address: %s\n", s.GetData());
}
} else {
if (log)
log->Printf(
"error: Unable to resolve address at file address 0x%" PRIx64
" for %s:%d\n",
line_start.GetFileAddress(),
m_file_spec.GetFilename().AsCString("<Unknown>"), m_line_number);
}
}
}
return Searcher::eCallbackReturnContinue;
}
Searcher::Depth AddressResolverFileLine::GetDepth() {
return Searcher::eDepthCompUnit;
}
void AddressResolverFileLine::GetDescription(Stream *s) {
s->Printf("File and line address - file: \"%s\" line: %u",
m_file_spec.GetFilename().AsCString("<Unknown>"), m_line_number);
}