diff options
Diffstat (limited to 'misc')
| -rw-r--r-- | misc/.vscode/settings.json | 4 | ||||
| -rwxr-xr-x | misc/jit_perf.py (renamed from misc/yjit_perf.py) | 8 | ||||
| -rw-r--r-- | misc/lldb_rb/utils.py | 24 |
3 files changed, 22 insertions, 14 deletions
diff --git a/misc/.vscode/settings.json b/misc/.vscode/settings.json index c11838155e..a2e4e1ec69 100644 --- a/misc/.vscode/settings.json +++ b/misc/.vscode/settings.json @@ -3,4 +3,8 @@ "disasm", ], "rust-analyzer.cfg.setTest": false, + // rust-analyzer bundled in the VSCode extension may only support Rust newer than 1.85.0. + // To avoid warnings, install rust-analyzer with `rustup component add rust-analyzer` and + // use `~/.cargo/bin/rust-analyzer` with the following config. + "rust-analyzer.server.path": "rust-analyzer", } diff --git a/misc/yjit_perf.py b/misc/jit_perf.py index 61434e5eb4..bc0f961b20 100755 --- a/misc/yjit_perf.py +++ b/misc/jit_perf.py @@ -22,10 +22,10 @@ def categorize_symbol(dso, symbol): return '[sha256]' elif symbol.startswith('[JIT] gen_send'): return '[JIT send]' - elif symbol.startswith('[JIT]'): + elif symbol.startswith('[JIT]') or symbol.startswith('ZJIT: ') or dso.startswith('perf-'): return '[JIT code]' - elif '::' in symbol or symbol.startswith('yjit::') or symbol.startswith('_ZN4yjit'): - return '[YJIT compile]' + elif '::' in symbol or symbol.startswith('_ZN4yjit') or symbol.startswith('_ZN4zjit'): + return '[JIT compile]' elif symbol.startswith('rb_vm_') or symbol.startswith('vm_') or symbol in { "rb_call0", "callable_method_entry_or_negative", "invoke_block_from_c_bh", "rb_funcallv_scope", "setup_parameters_complex", "rb_yield"}: @@ -108,7 +108,7 @@ if __name__ == "__main__" and len(sys.argv) == 2: row = line.split(maxsplit=6) period = row[3] # "1212775" - symbol, dso = row[6].split(" (") # "[JIT] getlocal_WC_0+0x0", "/tmp/perf-78207.map)\n" + symbol, dso = row[6].rsplit(" (", 1) # "[JIT] getlocal_WC_0+0x0", "/tmp/perf-78207.map)\n" symbol = symbol.split("+")[0] # "[JIT] getlocal_WC_0" dso = dso.split(")")[0] # "/tmp/perf-78207.map" diff --git a/misc/lldb_rb/utils.py b/misc/lldb_rb/utils.py index f4775bc4f9..a2bcedc328 100644 --- a/misc/lldb_rb/utils.py +++ b/misc/lldb_rb/utils.py @@ -236,16 +236,20 @@ class RbInspector(LLDBInterface): elif rval.is_type("RUBY_T_DATA"): tRTypedData = self.target.FindFirstType("struct RTypedData").GetPointerType() val = val.Cast(tRTypedData) - flag = val.GetValueForExpressionPath("->typed_flag") - if flag.GetValueAsUnsigned() == 1: - print("T_DATA: %s" % - val.GetValueForExpressionPath("->type->wrap_struct_name"), - file=self.result) - self._append_expression("*(struct RTypedData *) %0#x" % val.GetValueAsUnsigned()) - else: - print("T_DATA:", file=self.result) - self._append_expression("*(struct RData *) %0#x" % val.GetValueAsUnsigned()) + type = val.GetValueForExpressionPath("->type").GetValueAsUnsigned() + embed = (type & 1) + if embed: + flaginfo += "[EMBED] " + type = self.frame.EvaluateExpression("(rb_data_type_t *)%0#x" % (type & ~1)) + print("T_DATA: %s%s" % + (flaginfo, type.GetValueForExpressionPath("->wrap_struct_name")), + file=self.result) + print("%s", type.Dereference(), file=self.result) + ptr = val.GetValueForExpressionPath("->data") + if embed: + ptr = ptr.AddressOf() + self._append_expression("(void *)%0#x" % ptr.GetValueAsUnsigned()) elif rval.is_type("RUBY_T_IMEMO"): imemo_type = ((rval.flags >> self.ruby_globals["RUBY_FL_USHIFT"]) @@ -279,7 +283,7 @@ class RbInspector(LLDBInterface): # if val.GetType() != tRNode: does not work for unknown reason - if val.GetType().GetPointeeType().name != "NODE": + if val.GetType().GetPointeeType().GetCanonicalType().name != "RNode": return False rbNodeTypeMask = self.ruby_globals["RUBY_NODE_TYPEMASK"] |
