@@ -737,6 +737,12 @@ asm(
737
737
".ascii \"\\n\"\n"
738
738
".ascii \"pp_set.add_printer('zend_string', '^_zend_string$', ZendStringPrettyPrinter)\\n\"\n"
739
739
".ascii \"\\n\"\n"
740
+ ".ascii \"def zendStringPointerPrinter(ptr):\\n\"\n"
741
+ ".ascii \" \\\"Given a pointer to a zend_string, show the contents (if non-NULL)\\\"\\n\"\n"
742
+ ".ascii \" if int(ptr) == 0:\\n\"\n"
743
+ ".ascii \" return '0x0'\\n\"\n"
744
+ ".ascii \" return ZendStringPrettyPrinter(ptr.dereference()).to_string()\\n\"\n"
745
+ ".ascii \"\\n\"\n"
740
746
".ascii \"class ZendTypePrettyPrinter(gdb.printing.PrettyPrinter):\\n\"\n"
741
747
".ascii \" \\\"Print a zend_type\\\"\\n\"\n"
742
748
".ascii \"\\n\"\n"
@@ -959,6 +965,52 @@ asm(
959
965
".ascii \"\\n\"\n"
960
966
".ascii \"pp_set.add_printer('zval', '^_zval_struct$', ZvalPrettyPrinter)\\n\"\n"
961
967
".ascii \"\\n\"\n"
968
+ ".ascii \"class ZendClassEntryPrettyPrinter(gdb.printing.PrettyPrinter):\\n\"\n"
969
+ ".ascii \" \\\"Print a zend_class_entry\\\"\\n\"\n"
970
+ ".ascii \"\\n\"\n"
971
+ ".ascii \" # String pointers, show the string contents if possible\\n\"\n"
972
+ ".ascii \" STRING_FIELDS = [ 'name', 'doc_comment' ]\\n\"\n"
973
+ ".ascii \"\\n\"\n"
974
+ ".ascii \" def __init__(self, val):\\n\"\n"
975
+ ".ascii \" self.val = val\\n\"\n"
976
+ ".ascii \"\\n\"\n"
977
+ ".ascii \" def to_string(self):\\n\"\n"
978
+ ".ascii \" return zendStringPointerPrinter(self.val['name'])\\n\"\n"
979
+ ".ascii \"\\n\"\n"
980
+ ".ascii \" def children(self):\\n\"\n"
981
+ ".ascii \" for field in self.val.type.fields():\\n\"\n"
982
+ ".ascii \" if field.name is not None:\\n\"\n"
983
+ ".ascii \" if field.name in self.STRING_FIELDS:\\n\"\n"
984
+ ".ascii \" yield (field.name, zendStringPointerPrinter(self.val[field.name]))\\n\"\n"
985
+ ".ascii \" else:\\n\"\n"
986
+ ".ascii \" yield (field.name, self.val[field.name])\\n\"\n"
987
+ ".ascii \" else:\\n\"\n"
988
+ ".ascii \" # Don't break on the union fields. Unfortunately, pretty\\n\"\n"
989
+ ".ascii \" # printers done in python cannot match the default formatting of\\n\"\n"
990
+ ".ascii \" # C anonymous fields, which omit the name entirely, see\\n\"\n"
991
+ ".ascii \" # binutils-gdb/gdb/cp-valprint.c#248 (as of commit\\n\"\n"
992
+ ".ascii \" # b6532accdd8e24329cc69bb58bc2883796008776)\\n\"\n"
993
+ ".ascii \" yield ('<anonymous>', self.val[field])\\n\"\n"
994
+ ".ascii \"\\n\"\n"
995
+ ".ascii \"pp_set.add_printer('zend_class_entry', '^_zend_class_entry$', ZendClassEntryPrettyPrinter)\\n\"\n"
996
+ ".ascii \"\\n\"\n"
997
+ ".ascii \"class ZendClassConstantPrettyPrinter(gdb.printing.PrettyPrinter):\\n\"\n"
998
+ ".ascii \" \\\"Print a zend_class_constant\\\"\\n\"\n"
999
+ ".ascii \"\\n\"\n"
1000
+ ".ascii \" def __init__(self, val):\\n\"\n"
1001
+ ".ascii \" self.val = val\\n\"\n"
1002
+ ".ascii \"\\n\"\n"
1003
+ ".ascii \" def children(self):\\n\"\n"
1004
+ ".ascii \" for field in self.val.type.fields():\\n\"\n"
1005
+ ".ascii \" if field.name == 'doc_comment':\\n\"\n"
1006
+ ".ascii \" yield ('doc_comment', zendStringPointerPrinter(self.val['doc_comment']))\\n\"\n"
1007
+ ".ascii \" elif field.name == 'ce':\\n\"\n"
1008
+ ".ascii \" yield ('ce', zendStringPointerPrinter(self.val['ce']['name']))\\n\"\n"
1009
+ ".ascii \" else:\\n\"\n"
1010
+ ".ascii \" yield (field.name, self.val[field.name])\\n\"\n"
1011
+ ".ascii \"\\n\"\n"
1012
+ ".ascii \"pp_set.add_printer('zend_class_constant', '^_zend_class_constant$', ZendClassConstantPrettyPrinter)\\n\"\n"
1013
+ ".ascii \"\\n\"\n"
962
1014
".ascii \"type_bit_to_name = None\\n\"\n"
963
1015
".ascii \"type_name_to_bit = None\\n\"\n"
964
1016
".ascii \"\\n\"\n"
0 commit comments