summaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
Diffstat (limited to 'misc')
-rw-r--r--misc/.vscode/settings.json4
-rwxr-xr-xmisc/jit_perf.py (renamed from misc/yjit_perf.py)8
-rw-r--r--misc/lldb_rb/utils.py24
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"]