[lldb] Refactor the Symbolicator initializer

We found out that we have clients relying on the old signature of the
Symbolicator initializer. Make the signature compatible again and
provide a factory method to initialize the class correctly based on
whether you have a target or want the symbolicator to create one for
you.

Differential revision: D92601
This commit is contained in:
Jonas Devlieghere 2020-12-03 14:31:37 -08:00
parent 86fa896363
commit 99ea2c461d
1 changed files with 18 additions and 7 deletions

View File

@ -437,18 +437,22 @@ class Image:
class Symbolicator:
def __init__(self, debugger):
"""A class the represents the information needed to symbolicate addresses in a program"""
def __init__(self, debugger=None, target=None, images=list()):
"""A class the represents the information needed to symbolicate
addresses in a program.
Do not call this initializer directly, but rather use the factory
methods.
"""
self.debugger = debugger
self.target = None
self.images = list() # a list of images to be used when symbolicating
self.target = target
self.images = images # 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()
"""Initialize a new Symbolicator with an existing SBTarget."""
obj = cls(target=target)
triple = target.triple
if triple:
arch = triple.split('-')[0]
@ -460,6 +464,13 @@ class Symbolicator:
obj.images.append(image)
return obj
@classmethod
def InitWithSBDebugger(cls, debugger, images):
"""Initialize a new Symbolicator with an existing debugger and list of
images. The Symbolicator will create the target."""
obj = cls(debugger=debugger, images=images)
return obj
def __str__(self):
s = "Symbolicator:\n"
if self.target: