Skip to content

Commit

Permalink
Fix DW_AT_specification handling in DWO files
Browse files Browse the repository at this point in the history
Summary:
We were trying to get a DWARFDIE from a CompileUnit belonging to a DWO file. However, this
function does not understand the die encoding used by the DWO files. Instead use GetDIE on the
SymbolFileDWARF, which is overriden in DWO to do the right thing.

Reviewers: clayborg, tberghammer

Subscribers: lldb-commits, ovyalov

Differential Revision: http://reviews.llvm.org/D19927

llvm-svn: 268615
  • Loading branch information
labath committed May 5, 2016
1 parent 41fe4ba commit b9436bd
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 1 deletion.
@@ -0,0 +1,5 @@
LEVEL = ../../../make

CXX_SOURCES := file1.cpp file2.cpp

include $(LEVEL)/Makefile.rules
@@ -0,0 +1,35 @@
"""
Test SBSymbolContext APIs.
"""

from __future__ import print_function

import os

import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil

class SymbolContextTwoFilesTestCase(TestBase):

mydir = TestBase.compute_mydir(__file__)

@add_test_categories(['pyapi'])
def test_lookup_by_address(self):
"""Test lookup by address in a module with multiple compilation units"""
self.build()
exe = os.path.join(os.getcwd(), "a.out")

target = self.dbg.CreateTarget(exe)
self.assertTrue(target, VALID_TARGET)

module = target.GetModuleAtIndex(0)
self.assertTrue(module.IsValid())
for symbol_name in ["struct1::f()", "struct2::f()"]:
sc_list = module.FindFunctions(symbol_name, lldb.eSymbolTypeCode)
self.assertTrue(1, sc_list.GetSize())
symbol_address = sc_list.GetContextAtIndex(0).GetSymbol().GetStartAddress()
self.assertTrue(symbol_address.IsValid())
sc_by_address = module.ResolveSymbolContextForAddress(symbol_address, lldb.eSymbolContextFunction)
self.assertEqual(symbol_name, sc_by_address.GetFunction().GetName())
@@ -0,0 +1,11 @@
struct struct1
{
static void
f();
};

struct struct2
{
static void
f();
};
@@ -0,0 +1,13 @@
#include "decls.h"

void
struct1::f()
{
}

int main()
{
struct1::f();
struct2::f();
return 0;
}
@@ -0,0 +1,6 @@
#include "decls.h"

void
struct2::f()
{
}
Expand Up @@ -610,7 +610,7 @@ DWARFDebugInfoEntry::GetDIENamesAndRanges
{
if (die_ref.die_offset != DW_INVALID_OFFSET)
{
DWARFDIE die = dwarf2Data->DebugInfo()->GetDIE(die_ref);
DWARFDIE die = dwarf2Data->GetDIE(die_ref);
if (die)
die.GetDIE()->GetDIENamesAndRanges(die.GetDWARF(), die.GetCU(), name, mangled, ranges, decl_file, decl_line, decl_column, call_file, call_line, call_column);
}
Expand Down

0 comments on commit b9436bd

Please sign in to comment.