Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / openmp / libompd / gdb-plugin / ompd / ompd_callbacks.py
blobada09d75579f0c225c8abb2f9a994fe8b3fe37bf
1 import gdb
2 import os
3 import re
4 import traceback
5 import sys
7 """ This module evaluates function parameters of those OMPD callbacks that need GDB API calls.
8 """
10 """ Have the debugger print a string.
11 """
14 def _print(*args):
15 # args is a tuple with just one string element
16 print_string = args[0]
17 gdb.execute('printf "%s\n"' % args[0])
20 """ Look up the address of a global symbol in the target.
21 """
24 def _sym_addr(*args):
25 # args is a tuple consisting of thread_id and symbol_name
26 thread_id = args[0]
27 symbol_name = args[1]
28 if thread_id >= 0:
29 gdb.execute("thread %d\n" % thread_id, to_string=True)
30 return int(gdb.parse_and_eval("&" + symbol_name))
33 """ Read string from the target and copy it into the provided buffer.
34 """
37 def _read_string(*args):
38 # args is a tuple with just the source address
39 addr = args[0]
40 try:
41 buf = gdb.parse_and_eval("(unsigned char*)%li" % addr).string()
42 except:
43 traceback.print_exc()
44 return buf
47 """ Read memory from the target and copy it into the provided buffer.
48 """
51 def _read(*args):
52 # args is a tuple consisting of address and number of bytes to be read
53 addr = args[0]
54 nbytes = args[1]
55 # print("_read(%i,%i)"%(addr, nbytes))
56 ret_buf = bytearray()
57 # try:
58 buf = gdb.parse_and_eval("(unsigned char*)%li" % addr)
59 for i in range(nbytes):
60 ret_buf.append(int(buf[i]))
61 # except:
62 # traceback.print_exc()
63 return ret_buf
66 """ Get thread-specific context.
67 Return -1 if no match is found.
68 """
71 def _thread_context(*args):
72 # args is a tuple consisting of thread_id and the thread kind
73 thread_id = args[1]
74 pthread = False
75 lwp = False
76 if args[0] == 0:
77 pthread = True
78 else:
79 lwp = True
80 info = gdb.execute("info threads", to_string=True).splitlines()
82 for line in info:
83 if pthread:
84 m = re.search(r"(0x[a-fA-F0-9]+)", line)
85 elif lwp:
86 m = re.search(r"\([^)]*?(\d+)[^)]*?\)", line)
87 if m == None:
88 continue
89 pid = int(m.group(1), 0)
90 if pid == thread_id:
91 return int(line[2:6], 0)
92 return -1
95 """ Test info threads / list threads / how to split output to get thread id
96 and its size.
97 """
100 def _test_threads(*args):
101 info = gdb.execute("info threads", to_string=True).splitlines()
102 for line in info[1:]:
103 content = line.split()
104 thread_id = None
105 # fetch pointer to id
106 if content[0].startswith("*"):
107 thread_id = content[3]
108 else:
109 thread_id = content[2]
110 sizeof_tid = sys.getsizeof(thread_id)
111 print(sizeof_tid)
112 print(info)