summaryrefslogtreecommitdiffstats
path: root/lldb/examples/python
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2014-05-28 00:21:15 +0000
committerGreg Clayton <gclayton@apple.com>2014-05-28 00:21:15 +0000
commit641c23f33204feb4132f0f4a3a5298578084a96b (patch)
tree908c71bf2a95e9fc5278b30a5aa57b7e960bc8c8 /lldb/examples/python
parenta4a08d31cf041a889535e23b878cb7a50feaebbb (diff)
downloadbcm5719-llvm-641c23f33204feb4132f0f4a3a5298578084a96b.tar.gz
bcm5719-llvm-641c23f33204feb4132f0f4a3a5298578084a96b.zip
Allow classes to be intialized using current lldb::SB objects. This can help to import/export the current process state.
llvm-svn: 209702
Diffstat (limited to 'lldb/examples/python')
-rwxr-xr-xlldb/examples/python/symbolication.py59
1 files changed, 55 insertions, 4 deletions
diff --git a/lldb/examples/python/symbolication.py b/lldb/examples/python/symbolication.py
index 412a0de7c34..8fc1f2121bb 100755
--- a/lldb/examples/python/symbolication.py
+++ b/lldb/examples/python/symbolication.py
@@ -153,6 +153,15 @@ class Section:
self.end_addr = end_addr
self.name = name
+ @classmethod
+ def InitWithSBTargetAndSBSection(cls, target, section):
+ sect_load_addr = section.GetLoadAddress(target)
+ if sect_load_addr != lldb.LLDB_INVALID_ADDRESS:
+ obj = cls(sect_load_addr, sect_load_addr + section.size, section.name)
+ return obj
+ else:
+ return None
+
def contains(self, addr):
return self.start_addr <= addr and addr < self.end_addr;
@@ -212,7 +221,23 @@ class Image:
self.symfile = None
self.slide = None
-
+ @classmethod
+ def InitWithSBTargetAndSBModule(cls, target, module):
+ '''Initalize this Image object with a module from a target.'''
+ obj = cls(module.file.fullpath, module.uuid)
+ obj.resolved_path = module.platform_file.fullpath
+ obj.resolved = True
+ obj.arch = module.triple
+ for section in module.sections:
+ symb_section = Section.InitWithSBTargetAndSBSection(target, section)
+ if symb_section:
+ obj.section_infos.append (symb_section)
+ obj.arch = module.triple
+ obj.module = module
+ obj.symfile = None
+ obj.slide = None
+ return obj
+
def dump(self, prefix):
print "%s%s" % (prefix, self)
@@ -231,7 +256,16 @@ class Image:
print 'slide = %i (0x%x)' % (self.slide, self.slide)
def __str__(self):
- s = "%s %s %s" % (self.get_uuid(), self.version, self.get_resolved_path())
+ s = ''
+ if self.uuid:
+ s += "%s " % (self.get_uuid())
+ if self.arch:
+ s += "%s " % (self.arch)
+ if self.version:
+ s += "%s " % (self.version)
+ resolved_path = self.get_resolved_path()
+ if resolved_path:
+ s += "%s " % (resolved_path)
for section_info in self.section_infos:
s += ", %s" % (section_info)
if self.slide != None:
@@ -380,13 +414,29 @@ class Symbolicator:
self.images = list() # a list of images to be used when symbolicating
self.addr_mask = 0xffffffffffffffff
+ @classmethod
+ def InitWithSBTarget(cls, target):
+ obj = cls()
+ obj.target = target
+ obj.images = list();
+ triple = target.triple
+ if triple:
+ arch = triple.split('-')[0]
+ if "arm" in arch:
+ obj.addr_mask = 0xfffffffffffffffe
+
+ for module in target.modules:
+ image = Image.InitWithSBTargetAndSBModule(target, module)
+ obj.images.append(image)
+ return obj
+
def __str__(self):
s = "Symbolicator:\n"
if self.target:
s += "Target = '%s'\n" % (self.target)
- s += "Target modules:'\n"
+ s += "Target modules:\n"
for m in self.target.modules:
- print m
+ s += str(m) + "\n"
s += "Images:\n"
for image in self.images:
s += ' %s\n' % (image)
@@ -422,6 +472,7 @@ class Symbolicator:
return self.target
return None
+
def symbolicate(self, load_addr, verbose = False):
if not self.target:
self.create_target()
OpenPOWER on IntegriCloud