From 656c3266f46c755762e0fec1d68c89bf57e96fc3 Mon Sep 17 00:00:00 2001 From: Siddhesh Poyarekar Date: Wed, 22 Jul 2026 09:06:00 -0400 Subject: [PATCH] Regenerate GTS 15 libstdc++ pretty printer patches Regenerate against the current base revision to pick up xmethods.py changes that diverged after the previous system gcc rebase. Related: RHEL-169096 --- gcc14-libstdc++-prettyprinter-update-15.patch | 59 ++++++++++++++++--- 1 file changed, 50 insertions(+), 9 deletions(-) diff --git a/gcc14-libstdc++-prettyprinter-update-15.patch b/gcc14-libstdc++-prettyprinter-update-15.patch index c7f4ffc..9e8bb4a 100644 --- a/gcc14-libstdc++-prettyprinter-update-15.patch +++ b/gcc14-libstdc++-prettyprinter-update-15.patch @@ -1,7 +1,7 @@ libstdc++-v3/python/libstdcxx/v6/__init__.py | 2 +- - libstdc++-v3/python/libstdcxx/v6/printers.py | 14 +++++++++----- - libstdc++-v3/python/libstdcxx/v6/xmethods.py | 2 +- - 3 files changed, 11 insertions(+), 7 deletions(-) + libstdc++-v3/python/libstdcxx/v6/printers.py | 20 ++++++++++++++------ + libstdc++-v3/python/libstdcxx/v6/xmethods.py | 9 ++++++--- + 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/libstdc++-v3/python/libstdcxx/v6/__init__.py b/libstdc++-v3/python/libstdcxx/v6/__init__.py index f40acd922af..5a8f2de195d 100644 @@ -14,7 +14,7 @@ index f40acd922af..5a8f2de195d 100644 # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/libstdc++-v3/python/libstdcxx/v6/printers.py b/libstdc++-v3/python/libstdcxx/v6/printers.py -index 3026de35bbd..5f5963cb595 100644 +index 3026de35bbd..052a99a28ed 100644 --- a/libstdc++-v3/python/libstdcxx/v6/printers.py +++ b/libstdc++-v3/python/libstdcxx/v6/printers.py @@ -1,6 +1,6 @@ @@ -25,7 +25,20 @@ index 3026de35bbd..5f5963cb595 100644 # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -@@ -623,6 +623,9 @@ class StdBitReferencePrinter(printer_base): +@@ -133,7 +133,11 @@ def lookup_templ_spec(templ, *args): + """ + Lookup template specialization templ. + """ +- t = '{}<{}>'.format(templ, ', '.join([str(a) for a in args])) ++ # Similar to PR67440, str(a) might contain unexpected type qualifiers. ++ t = '{}<{}>'.format(templ, ', '.join([ \ ++ a.tag if isinstance(a, gdb.Type) and a.tag \ ++ else str(a) \ ++ for a in args])) + try: + return gdb.lookup_type(t) + except gdb.error as e: +@@ -623,6 +627,9 @@ class StdBitReferencePrinter(printer_base): def to_string(self): if not self._val['_M_p']: @@ -35,7 +48,7 @@ index 3026de35bbd..5f5963cb595 100644 return 'invalid std::vector::reference' return bool(self._val['_M_p'].dereference() & (self._val['_M_mask'])) -@@ -2827,10 +2830,6 @@ def build_libstdcxx_dictionary(): +@@ -2827,10 +2834,6 @@ def build_libstdcxx_dictionary(): # vector libstdcxx_printer.add_version('std::', 'locale', StdLocalePrinter) @@ -46,7 +59,7 @@ index 3026de35bbd..5f5963cb595 100644 if hasattr(gdb.Value, 'dynamic_type'): libstdcxx_printer.add_version('std::', 'error_code', -@@ -2893,6 +2892,8 @@ def build_libstdcxx_dictionary(): +@@ -2893,6 +2896,8 @@ def build_libstdcxx_dictionary(): StdChronoDurationPrinter) libstdcxx_printer.add_version('std::chrono::', 'time_point', StdChronoTimePointPrinter) @@ -55,7 +68,7 @@ index 3026de35bbd..5f5963cb595 100644 # std::regex components libstdcxx_printer.add_version('std::__detail::', '_State', -@@ -2968,6 +2969,9 @@ def build_libstdcxx_dictionary(): +@@ -2968,6 +2973,9 @@ def build_libstdcxx_dictionary(): # libstdcxx_printer.add_version('std::chrono::(anonymous namespace)', 'Rule', # StdChronoTimeZoneRulePrinter) @@ -66,7 +79,7 @@ index 3026de35bbd..5f5963cb595 100644 libstdcxx_printer.add_version('__gnu_cxx::', 'slist', StdSlistPrinter) diff --git a/libstdc++-v3/python/libstdcxx/v6/xmethods.py b/libstdc++-v3/python/libstdcxx/v6/xmethods.py -index 436c866e001..109ca10956a 100644 +index 692db5f58f6..109ca10956a 100644 --- a/libstdc++-v3/python/libstdcxx/v6/xmethods.py +++ b/libstdc++-v3/python/libstdcxx/v6/xmethods.py @@ -1,6 +1,6 @@ @@ -77,3 +90,31 @@ index 436c866e001..109ca10956a 100644 # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by +@@ -28,6 +28,8 @@ def get_bool_type(): + def get_std_size_type(): + return gdb.lookup_type('std::size_t') + ++_versioned_namespace = '__8::' ++ + def is_specialization_of(x, template_name): + """ + Test whether a type is a specialization of the named class template. +@@ -37,7 +39,8 @@ def is_specialization_of(x, template_name): + """ + if isinstance(x, gdb.Type): + x = x.tag +- return re.match(r'^std::(__\d::|__debug::)?%s<.*>$' % template_name, x) is not None ++ template_name = '(%s)?%s' % (_versioned_namespace, template_name) ++ return re.match(r'^std::(__\d::)?%s<.*>$' % template_name, x) is not None + + class LibStdCxxXMethod(gdb.xmethod.XMethod): + def __init__(self, name, worker_class): +@@ -442,7 +445,7 @@ class ListMethodsMatcher(gdb.xmethod.XMethodMatcher): + if method is None or not method.enabled: + return None + val_type = class_type.template_argument(0) +- node_type = gdb.lookup_type(str(class_type) + '::_Node_ptr') ++ node_type = gdb.lookup_type(str(class_type) + '::_Node').pointer() + return method.worker_class(val_type, node_type) + + # Xmethods for std::vector