From dcf896651d37dc2f8e1fa0de352ef36c22a8e39e Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Fri, 20 Aug 2021 19:48:05 +0200 Subject: [PATCH] utils: gdb: add BigNum pretty printer --- utils/gdb/abacus_pretty_printers.py | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 utils/gdb/abacus_pretty_printers.py diff --git a/utils/gdb/abacus_pretty_printers.py b/utils/gdb/abacus_pretty_printers.py new file mode 100644 index 0000000..80ff710 --- /dev/null +++ b/utils/gdb/abacus_pretty_printers.py @@ -0,0 +1,30 @@ +import gdb.printing + +class BigNumPrinter(object): + "Print a abacus::bignum::BigNum" + + def __init__(self, val): + self.val = val + + def to_string(self): + digits = self.val['digits_'] + begin, end = digits['_M_impl']['_M_start'], digits['_M_impl']['_M_finish'] + val = 0 + while begin != end: + val *= 10 + val += begin.dereference() + begin += 1 + val *= self.val['sign_'] + return str(val) + + def display_hint(self): + return 'string' + +def build_pretty_printer(): + pp = gdb.printing.RegexpCollectionPrettyPrinter('abacus') + + pp.add_printer('BigNum', '^abacus::bignum::BigNum$', BigNumPrinter) + + return pp + +gdb.printing.register_pretty_printer(gdb.current_objfile(), build_pretty_printer(), True)