diff options
author | Irina Yatsenko <irina.yatsenko@mongodb.com> | 2022-07-25 21:13:35 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-07-25 21:48:04 +0000 |
commit | 7b19ba19335afe792725c04f9bcc933aabe2c030 (patch) | |
tree | 874a34f4fe2ea4b4201e0e1b5e2e1afe5745904b /buildscripts | |
parent | 1aa4307b5ecd61413468cb190935f3746ddcf6ef (diff) | |
download | mongo-7b19ba19335afe792725c04f9bcc933aabe2c030.tar.gz |
SERVER-68264 Update GDB's pretty printer for CodeFragment
Diffstat (limited to 'buildscripts')
-rw-r--r-- | buildscripts/gdb/mongo_printers.py | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/buildscripts/gdb/mongo_printers.py b/buildscripts/gdb/mongo_printers.py index 4c394fbc32f..a0dcc6ad70c 100644 --- a/buildscripts/gdb/mongo_printers.py +++ b/buildscripts/gdb/mongo_printers.py @@ -761,6 +761,7 @@ class SbeCodeFragmentPrinter(object): ptr_size = gdb.lookup_type('void').pointer().sizeof tag_size = gdb.lookup_type('mongo::sbe::value::TypeTags').sizeof value_size = gdb.lookup_type('mongo::sbe::value::Value').sizeof + uint8_size = gdb.lookup_type('uint8_t').sizeof uint32_size = gdb.lookup_type('uint32_t').sizeof builtin_size = gdb.lookup_type('mongo::sbe::vm::Builtin').sizeof @@ -783,14 +784,14 @@ class SbeCodeFragmentPrinter(object): # Some instructions have extra arguments, embedded into the ops stream. args = '' - if op_name in ['pushLocalVal', 'pushMoveLocalVal', 'pushLocalLambda']: + if op_name in ['pushLocalVal', 'pushMoveLocalVal', 'pushLocalLambda', 'traversePConst']: args = 'arg: ' + str(read_as_integer(cur_op, int_size)) cur_op += int_size - if op_name in ['jmp', 'jmpTrue', 'jmpNothing']: + elif op_name in ['jmp', 'jmpTrue', 'jmpNothing']: offset = read_as_integer(cur_op, int_size) cur_op += int_size args = 'offset: ' + str(offset) + ', target: ' + hex(cur_op + offset) - elif op_name in ['pushConstVal']: + elif op_name in ['pushConstVal', 'getFieldConst']: tag = read_as_integer(cur_op, tag_size) args = 'tag: ' + self.valuetags_lookup.get(tag, "unknown") + \ ', value: ' + hex(read_as_integer(cur_op + tag_size, value_size)) @@ -814,6 +815,18 @@ class SbeCodeFragmentPrinter(object): args = 'builtin: ' + self.builtins_lookup.get(builtin_id, "unknown") args += ' arity: ' + str(read_as_integer(cur_op + builtin_size, arity_size)) cur_op += (builtin_size + arity_size) + elif op_name in ['fillEmptyConst']: + args = 'Instruction::Constants: ' + str(read_as_integer(cur_op, uint8_size)) + cur_op += uint8_size + elif op_name in ['traverseFConst']: + const_enum = read_as_integer(cur_op, uint8_size) + cur_op += uint8_size + args = \ + 'Instruction::Constants: ' + str(const_enum) + \ + ", offset: " + str(read_as_integer(cur_op, int_size)) + elif op_name in ['applyClassicMatcher']: + args = 'MatchExpression* ' + hex(read_as_integer(cur_op, ptr_size)) + cur_op += ptr_size yield hex(op_addr), '{} ({})'.format(op_name, args) |