diff --git a/gdb-port/parser-type-instrumentation-gdb.py b/gdb-port/parser-type-instrumentation-gdb.py index dbe981d7441d81e98f41f2ad77351d5277aa020f..5d3c7b7e9d76e9470a27f935f586687336da18e2 100644 --- a/gdb-port/parser-type-instrumentation-gdb.py +++ b/gdb-port/parser-type-instrumentation-gdb.py @@ -103,7 +103,7 @@ class AttrBoolEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() hattrbool_t = gdb.lookup_type("HAttrBool") hattrbool_p_t = hattrbool_t.pointer() p_env = parser_val['env'].cast(hattrbool_p_t).dereference() @@ -126,7 +126,7 @@ class BindEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() bindenv_t = gdb.lookup_type("BindEnv") # If performance becomes a problem, the type lookups could be factored out into a dict filled out ahead of time bindenv_p_t = bindenv_t.pointer() p_env = parser_val['env'].cast(bindenv_p_t).dereference() @@ -151,7 +151,7 @@ class BitsEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() bits_env_t = gdb.lookup_type("struct bits_env") bits_env_p_t = bits_env_t.pointer() p_env = parser_val['env'].cast(bits_env_p_t).dereference() @@ -168,7 +168,7 @@ class ButNotEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() htwoparsers_t = gdb.lookup_type("HTwoParsers") htwoparsers_p_t = htwoparsers_t.pointer() p_env = parser_val['env'].cast(htwoparsers_p_t).dereference() @@ -191,7 +191,7 @@ class ActionEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() hparseaction_t = gdb.lookup_type("HParseAction") hparseaction_p_t = hparseaction_t.pointer() p_env = parser_val['env'].cast(hparseaction_p_t).dereference() @@ -217,7 +217,7 @@ class AndEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() #member_parser_p = gdb.parse_and_eval("(HParser*) parser->env") member_parser_p = parser_val['env'].cast(self.hparser_p_t) @@ -233,7 +233,7 @@ class ChEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() uint8_t = gdb.lookup_type("uint8_t") #self.ch_arg = gdb.parse_and_eval("(uint8_t) parser->env") @@ -247,7 +247,7 @@ class CharsetEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() hcharset_t = gdb.lookup_type("HCharset") #self.charset_arg = gdb.parse_and_eval("(HCharset) parser->env") @@ -261,14 +261,14 @@ class ChoiceEnv(HParserEnv): super().__init__(parser, top_level_parse) self.parser = parser self.member_parsers = [] - parser_obj = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() #frame = gdb.selected_frame() h_sequence_t = gdb.lookup_type("HSequence") h_sequence_p_t = h_sequence_t.pointer() # Get parser_obj.env, cast it to HSequence *, then dereference - p_env = parser_obj['env'].cast(h_sequence_p_t).dereference() + p_env = parser_val['env'].cast(h_sequence_p_t).dereference() # Get length of HSequence num_parsers = p_env['len'] # Get the array of parsers in the sequence @@ -288,7 +288,7 @@ class DifferenceEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() htwoparsers_t = gdb.lookup_type("HTwoParsers") htwoparsers_p_t = htwoparsers_t.pointer() p_env = parser_val['env'].cast(htwoparsers_p_t).dereference() @@ -322,7 +322,7 @@ class EndiannessEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() hparseendianness_t = gdb.lookup_type("HParseEndianness") hparseendianness_p_t = hparseendianness_t.pointer() p_env = parser_val['env'].cast(hparseendianness_p_t).dereference() @@ -352,7 +352,7 @@ class IgnoreEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() #ignored_p = gdb.parse_and_eval("(HParser*) parser->env") ignored_p = parser_val['env'].cast(self.hparser_p_t) @@ -374,8 +374,9 @@ class IgnoreSeqEnv(HParserEnv): hignoreseq_t = gdb.lookup_type("HIgnoreSeq") hignoreseq_p_t = hignoreseq_t.pointer() - parser_obj = gdb.parse_and_eval("*parser") - p_env = parser_obj['env'].cast(hignoreseq_p_t).dereference() + #parser_obj = gdb.parse_and_eval("*parser") + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() + p_env = parser_val['env'].cast(hignoreseq_p_t).dereference() #ignoreseq_p = gdb.parse_and_eval("(HIgnoreSeq*) parser->env") #seq_len = gdb.parse_and_eval("((HIgnoreSeq*) parser->env)->len") seq_len = p_env['len'] @@ -400,7 +401,7 @@ class IndirectEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() hindirectenv_t = gdb.lookup_type("HIndirectEnv") hindirectenv_p_t = hindirectenv_t.pointer() parser_env = parser_val['env'].cast(hindirectenv_p_t).dereference() @@ -422,7 +423,7 @@ class IntRangeEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() hrange_t = gdb.lookup_type("HRange") hrange_p_t = hrange_t.pointer() parser_env = parser_val['env'].cast(hrange_p_t).dereference() @@ -448,7 +449,7 @@ class LengthValueEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() hlenval_t = gdb.lookup_type("HLenVal") hlenval_p_t = hlenval_t.pointer() parser_env = parser_val['env'].cast(hlenval_p_t).dereference() @@ -474,19 +475,14 @@ class ManyEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() hrepeat_t = gdb.lookup_type("HRepeat") hrepeat_p_t = hrepeat_t.pointer() parser_env = parser_val['env'].cast(hrepeat_p_t).dereference() #self.count = gdb.parse_and_eval("((HRepeat *) parser->env)->count") self.count = parser_env['count'] - #self.separator = gdb.parse_and_eval("((HRepeat *) parser->env)->sep") - separator_p = parser_env['separator'] - separator_p_obj = top_level_parse.add_or_get_parser(separator_p) - if separator_p_obj.name is None: - separator_p_obj.name_parser( self.name_from_vtable(separator_p_obj) ) - self.separator = separator_p_obj + #separator_p = parser_env['sep'] # With h_many(), this will be NULL #self.p = gdb.parse_and_eval("((HRepeat *) parser->env)->p") p_ptr = parser_env['p'] p_obj = top_level_parse.add_or_get_parser(p_ptr) @@ -501,7 +497,7 @@ class NotEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() #member_p = gdb.parse_and_eval("(HParser*) parser->env") member_p = parser_val['env'].cast(self_hparser_p_t) @@ -525,7 +521,7 @@ class OptionalEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() #member_p = gdb.parse_and_eval("(HParser*) parser->env") member_p = parser_val['env'].cast(self_hparser_p_t) @@ -570,7 +566,7 @@ class SeekEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() hseek_t = gdb.lookup_type("HSeek") hseek_p_t = hseek_t.pointer() parser_env = parser_val['env'].cast(hseek_p_t).dereference() @@ -589,7 +585,7 @@ class SkipEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() uintptr_t = gdb.lookup_type("uintptr_t") #skip_val = gdb.parse_and_eval("((uintptr_t) parser->env)") @@ -640,7 +636,7 @@ class TokenEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() htoken_t = gdb.lookup_type("HToken") htoken_p_t = htoken_t.pointer() parser_env = parser_val['env'].cast(htoken_p_t).dereference() @@ -669,7 +665,7 @@ class GetEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() hstoredvalue_t = gdb.lookup_type("HStoredValue") hstoredvalue_p_t = hstoredvalue_t.pointer() parser_env = parser_val['env'].cast(hstoredvalue_p_t).dereference() @@ -691,7 +687,7 @@ class PutEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() hstoredvalue_t = gdb.lookup_type("HStoredValue") hstoredvalue_p_t = hstoredvalue_t.pointer() parser_env = parser_val['env'].cast(hstoredvalue_p_t).dereference() @@ -713,7 +709,7 @@ class WhitespaceEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() #member_parser_p = gdb.parse_and_eval("(HParser *) parse->env") member_p = parser_val['env'].cast(self_hparser_p_t) @@ -729,7 +725,7 @@ class XorEnv(HParserEnv): def __init__(self, parser, top_level_parse): self.parser = parser super().__init__(parser, top_level_parse) - parser_val = gdb.Value(parser).cast(self.hparser_p_t).dereference() + parser_val = gdb.Value(parser.address).cast(self.hparser_p_t).dereference() htwoparsers_t = gdb.lookup_type("HTwoParsers") htwoparsers_p_t = htwoparsers_t.pointer() parser_env = parser_val['env'].cast(htwoparsers_p_t).dereference()