mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-28 04:56:06 +00:00
Reenable gdb pretty printers, and update them.
Libcxx gdb pretty printers were disabled due to an old version of gdb in the release testing. This reenables them, and fixes various bit rot issues from not running them.
This commit is contained in:
parent
2b2afb2529
commit
e4d5daaf91
@ -11,9 +11,6 @@
|
||||
// UNSUPPORTED: no-localization
|
||||
// UNSUPPORTED: c++03
|
||||
|
||||
// TODO: Investigate this failure, which happens only with the Bootstrapping build.
|
||||
// UNSUPPORTED: clang-14, clang-15, clang-16
|
||||
|
||||
// TODO: Investigate this failure on GCC 12 (in Ubuntu Jammy)
|
||||
// UNSUPPORTED: gcc-12
|
||||
|
||||
|
@ -64,6 +64,36 @@ def _remove_generics(typename):
|
||||
return match.group(1)
|
||||
|
||||
|
||||
def _cc_field(node):
|
||||
"""Previous versions of libcxx had inconsistent field naming naming. Handle
|
||||
both types.
|
||||
"""
|
||||
try:
|
||||
return node["__value_"]["__cc_"]
|
||||
except:
|
||||
return node["__value_"]["__cc"]
|
||||
|
||||
|
||||
def _data_field(node):
|
||||
"""Previous versions of libcxx had inconsistent field naming naming. Handle
|
||||
both types.
|
||||
"""
|
||||
try:
|
||||
return node["__data_"]
|
||||
except:
|
||||
return node["__data"]
|
||||
|
||||
|
||||
def _size_field(node):
|
||||
"""Previous versions of libcxx had inconsistent field naming naming. Handle
|
||||
both types.
|
||||
"""
|
||||
try:
|
||||
return node["__size_"]
|
||||
except:
|
||||
return node["__size"]
|
||||
|
||||
|
||||
# Some common substitutions on the types to reduce visual clutter (A user who
|
||||
# wants to see the actual details can always use print/r).
|
||||
_common_substitutions = [
|
||||
@ -197,12 +227,9 @@ class StdStringPrinter(object):
|
||||
|
||||
def to_string(self):
|
||||
"""Build a python string from the data whether stored inline or separately."""
|
||||
|
||||
value_field = _value_of_pair_first(self.val["__r_"])
|
||||
short_field = value_field["__s"]
|
||||
short_size = short_field["__size_"]
|
||||
if short_size == 0:
|
||||
return ""
|
||||
if short_field["__is_long_"]:
|
||||
long_field = value_field["__l"]
|
||||
data = long_field["__data_"]
|
||||
@ -228,9 +255,9 @@ class StdStringViewPrinter(object):
|
||||
def to_string(self): # pylint: disable=g-bad-name
|
||||
"""GDB calls this to compute the pretty-printed form."""
|
||||
|
||||
ptr = self.val["__data"]
|
||||
ptr = _data_field(self.val)
|
||||
ptr = ptr.cast(ptr.type.target().strip_typedefs().pointer())
|
||||
size = self.val["__size"]
|
||||
size = _size_field(self.val)
|
||||
return ptr.lazy_string(length=size)
|
||||
|
||||
|
||||
@ -667,8 +694,7 @@ class StdMapPrinter(AbstractRBTreePrinter):
|
||||
return "map"
|
||||
|
||||
def _get_key_value(self, node):
|
||||
key_value = node.cast(self.util.cast_type).dereference()[
|
||||
"__value_"]["__cc"]
|
||||
key_value = _cc_field(node.cast(self.util.cast_type).dereference())
|
||||
return [key_value["first"], key_value["second"]]
|
||||
|
||||
|
||||
@ -734,7 +760,7 @@ class MapIteratorPrinter(AbstractRBTreeIteratorPrinter):
|
||||
_remove_generics(_prettify_typename(val.type)))
|
||||
|
||||
def _get_node_value(self, node):
|
||||
return node["__value_"]["__cc"]
|
||||
return _cc_field(node)
|
||||
|
||||
|
||||
class SetIteratorPrinter(AbstractRBTreeIteratorPrinter):
|
||||
@ -821,7 +847,7 @@ class StdUnorderedMapPrinter(AbstractUnorderedCollectionPrinter):
|
||||
"""Print a std::unordered_(multi)map."""
|
||||
|
||||
def _get_key_value(self, node):
|
||||
key_value = node["__value_"]["__cc"]
|
||||
key_value = _cc_field(node)
|
||||
return [key_value["first"], key_value["second"]]
|
||||
|
||||
def display_hint(self):
|
||||
@ -877,7 +903,7 @@ class StdUnorderedMapIteratorPrinter(AbstractHashMapIteratorPrinter):
|
||||
self._initialize(val, val["__i_"]["__node_"])
|
||||
|
||||
def _get_key_value(self):
|
||||
key_value = self.node["__value_"]["__cc"]
|
||||
key_value = _cc_field(self.node)
|
||||
return [key_value["first"], key_value["second"]]
|
||||
|
||||
def display_hint(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user