diff options
author | Todd Fiala <todd.fiala@gmail.com> | 2015-10-22 00:23:38 +0000 |
---|---|---|
committer | Todd Fiala <todd.fiala@gmail.com> | 2015-10-22 00:23:38 +0000 |
commit | 82ffb8e90495a580b8f2a9248001851a52301e56 (patch) | |
tree | 679fb46b0c476be4ac007f60052a26ef4c6f8e9c /lldb/examples/synthetic | |
parent | a8f17871e4ad8c6d49d258e4de9d4cc47900a976 (diff) | |
download | bcm5719-llvm-82ffb8e90495a580b8f2a9248001851a52301e56.tar.gz bcm5719-llvm-82ffb8e90495a580b8f2a9248001851a52301e56.zip |
Fix libstdc++ data formatters on Ubuntu 15.10 x86_64
See http://reviews.llvm.org/D13964 for details.
llvm-svn: 250965
Diffstat (limited to 'lldb/examples/synthetic')
-rw-r--r-- | lldb/examples/synthetic/gnu_libstdcpp.py | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/lldb/examples/synthetic/gnu_libstdcpp.py b/lldb/examples/synthetic/gnu_libstdcpp.py index 8c11770899f..0daa95f36d0 100644 --- a/lldb/examples/synthetic/gnu_libstdcpp.py +++ b/lldb/examples/synthetic/gnu_libstdcpp.py @@ -13,7 +13,7 @@ class StdListSynthProvider: logger = lldb.formatters.Logger.Logger() self.valobj = valobj self.count = None - logger >> "Providing synthetic children for a map named " + str(valobj.GetName()) + logger >> "Providing synthetic children for a list named " + str(valobj.GetName()) def next_node(self,node): logger = lldb.formatters.Logger.Logger() @@ -21,11 +21,20 @@ class StdListSynthProvider: def is_valid(self,node): logger = lldb.formatters.Logger.Logger() - return self.value(self.next_node(node)) != self.node_address + valid = self.value(self.next_node(node)) != self.node_address + if valid: + logger >> "%s is valid" % str(self.valobj.GetName()) + else: + logger >> "synthetic value is not valid" + return valid def value(self,node): logger = lldb.formatters.Logger.Logger() - return node.GetValueAsUnsigned() + value = node.GetValueAsUnsigned() + logger >> "synthetic value for {}: {}".format( + str(self.valobj.GetName()), + value) + return value # Floyd's cycle-finding algorithm # try to detect if this list has a loop @@ -49,7 +58,12 @@ class StdListSynthProvider: def num_children(self): logger = lldb.formatters.Logger.Logger() - if self.count == None: + if self.count is None: + # libstdc++ 6.0.21 added dedicated count field. + count_child = self.node.GetChildMemberWithName('_M_data') + if count_child and count_child.IsValid(): + self.count = count_child.GetValueAsUnsigned(0) + if self.count is None: self.count = self.num_children_impl() return self.count @@ -117,10 +131,10 @@ class StdListSynthProvider: self.count = None try: impl = self.valobj.GetChildMemberWithName('_M_impl') - node = impl.GetChildMemberWithName('_M_node') + self.node = impl.GetChildMemberWithName('_M_node') self.node_address = self.valobj.AddressOf().GetValueAsUnsigned(0) - self.next = node.GetChildMemberWithName('_M_next') - self.prev = node.GetChildMemberWithName('_M_prev') + self.next = self.node.GetChildMemberWithName('_M_next') + self.prev = self.node.GetChildMemberWithName('_M_prev') self.data_type = self.extract_type() self.data_size = self.data_type.GetByteSize() except: |