File 3475-etp.py-Print-special-CPs-such-as-normal_exit-symboli.patch of Package erlang

From a508ba9beb5bb1a647dfd0efc3ac19792ecf6119 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org>
Date: Sun, 11 Apr 2021 08:29:49 +0200
Subject: [PATCH 4/7] etp.py: Print special CPs such as normal_exit
 symbolically

---
 erts/etc/unix/etp.py | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/erts/etc/unix/etp.py b/erts/etc/unix/etp.py
index 7917e5cc48..88afc26998 100644
--- a/erts/etc/unix/etp.py
+++ b/erts/etc/unix/etp.py
@@ -28,6 +28,7 @@ import lldb
 import shlex
 
 unquoted_atom_re = re.compile(u'^[a-zß-öø-ÿ][a-zA-Zß-öø-ÿ0-9@]*$')
+code_pointers = {}
 
 def __lldb_init_module(debugger, internal_dict):
     debugger.HandleCommand('type format add -f hex Eterm')
@@ -44,6 +45,7 @@ def __lldb_init_module(debugger, internal_dict):
 ####################################
 def processes_cmd(debugger, command, result, internal_dict):
     target = debugger.GetSelectedTarget()
+    init(target)
     proc = erts_proc(target)
     proc_r_o = proc.GetChildMemberWithName('r').GetChildMemberWithName('o')
     proc_max_ix = proc_r_o.GetChildMemberWithName('max')
@@ -65,6 +67,7 @@ def processes_cmd(debugger, command, result, internal_dict):
 ############################################
 def process_info_cmd(debugger, command, result, internal_dict):
     target = debugger.GetSelectedTarget()
+    init(target)
     proc = target.process.selected_thread.GetSelectedFrame().EvaluateExpression(command).Cast(ProcessPtr(target))
     process_info(proc)
 
@@ -235,6 +238,7 @@ def process_flags(proc):
 ############################################
 def stacktrace_cmd(debugger, command, result, internal_dict):
     target = debugger.GetSelectedTarget()
+    init(target)
     proc = target.process.selected_thread.GetSelectedFrame().EvaluateExpression(command).Cast(ProcessPtr(target))
     stackdump(proc, False)
 
@@ -243,6 +247,7 @@ def stacktrace_cmd(debugger, command, result, internal_dict):
 ############################################
 def stackdump_cmd(debugger, command, result, internal_dict):
     target = debugger.GetSelectedTarget()
+    init(target)
     proc = target.process.selected_thread.GetSelectedFrame().EvaluateExpression(command).Cast(ProcessPtr(target))
     stackdump(proc, True)
 
@@ -268,6 +273,7 @@ def stackdump(proc, dump):
 def eterm_cmd(debugger, command, result, internal_dict):
     args = shlex.split(command)
     target = debugger.GetSelectedTarget()
+    init(target)
     term = target.process.selected_thread.GetSelectedFrame().EvaluateExpression(args[0]).Cast(EtermPtr(target))
     if len(args) >= 2:
         print(eterm(term, int(args[1])))
@@ -431,7 +437,11 @@ def imm(valobj):
 def cp(valobj):
     mfaptr = erts_lookup_function_info(valobj)
     if mfaptr == None:
-        return '#Cp<%#x>' % valobj.unsigned
+        pointer = code_pointers.get(valobj.unsigned)
+        if pointer != None:
+            return '#Cp<%s>' % pointer
+        else:
+            return '#Cp<%#x>' % valobj.unsigned
     else:
         return '#Cp<%s>' % mfa(mfaptr)
 
@@ -649,6 +659,14 @@ def pixdata2data(valobj):
     data |= (pixdata & pix_cli_mask) << pix_cli_shift
     return data
 
+def init(target):
+    names = ['beam_apply', 'beam_normal_exit', 'beam_exit', 'beam_save_calls',
+             'beam_bif_export_trap', 'beam_export_trampoline', 'beam_continue_exit',
+             'beam_return_to_trace', 'beam_return_trace', 'beam_exception_trace',
+             'beam_return_time_trace']
+    for name in names:
+        code_pointers[global_var(name, target).unsigned] = name
+
 # LLDB utils
 
 def global_var(name, target):
-- 
2.26.2

openSUSE Build Service is sponsored by