diff options
Diffstat (limited to 'openmp/libompd/gdb-plugin/ompd/ompd_callbacks.py')
-rw-r--r-- | openmp/libompd/gdb-plugin/ompd/ompd_callbacks.py | 138 |
1 files changed, 77 insertions, 61 deletions
diff --git a/openmp/libompd/gdb-plugin/ompd/ompd_callbacks.py b/openmp/libompd/gdb-plugin/ompd/ompd_callbacks.py index bb520e5..ada09d7 100644 --- a/openmp/libompd/gdb-plugin/ompd/ompd_callbacks.py +++ b/openmp/libompd/gdb-plugin/ompd/ompd_callbacks.py @@ -9,88 +9,104 @@ import sys """ Have the debugger print a string. """ + + def _print(*args): - # args is a tuple with just one string element - print_string = args[0] - gdb.execute('printf "%s\n"' % args[0]) + # args is a tuple with just one string element + print_string = args[0] + gdb.execute('printf "%s\n"' % args[0]) + """ Look up the address of a global symbol in the target. """ + + def _sym_addr(*args): - # args is a tuple consisting of thread_id and symbol_name - thread_id = args[0] - symbol_name = args[1] - if(thread_id >= 0): - gdb.execute('thread %d\n' % thread_id, to_string=True) - return int(gdb.parse_and_eval("&"+symbol_name)) + # args is a tuple consisting of thread_id and symbol_name + thread_id = args[0] + symbol_name = args[1] + if thread_id >= 0: + gdb.execute("thread %d\n" % thread_id, to_string=True) + return int(gdb.parse_and_eval("&" + symbol_name)) + """ Read string from the target and copy it into the provided buffer. """ + + def _read_string(*args): - # args is a tuple with just the source address - addr = args[0] - try: - buf = gdb.parse_and_eval('(unsigned char*)%li' % addr).string() - except: - traceback.print_exc() - return buf + # args is a tuple with just the source address + addr = args[0] + try: + buf = gdb.parse_and_eval("(unsigned char*)%li" % addr).string() + except: + traceback.print_exc() + return buf + """ Read memory from the target and copy it into the provided buffer. """ + + def _read(*args): - # args is a tuple consisting of address and number of bytes to be read - addr = args[0] - nbytes = args[1] -# print("_read(%i,%i)"%(addr, nbytes)) - ret_buf = bytearray() -# try: - buf = gdb.parse_and_eval('(unsigned char*)%li' % addr) - for i in range(nbytes): - ret_buf.append(int(buf[i])) -# except: -# traceback.print_exc() - return ret_buf + # args is a tuple consisting of address and number of bytes to be read + addr = args[0] + nbytes = args[1] + # print("_read(%i,%i)"%(addr, nbytes)) + ret_buf = bytearray() + # try: + buf = gdb.parse_and_eval("(unsigned char*)%li" % addr) + for i in range(nbytes): + ret_buf.append(int(buf[i])) + # except: + # traceback.print_exc() + return ret_buf """ Get thread-specific context. Return -1 if no match is found. """ + + def _thread_context(*args): - # args is a tuple consisting of thread_id and the thread kind - thread_id = args[1] - pthread = False - lwp = False - if args[0] == 0: - pthread = True - else: - lwp = True - info = gdb.execute('info threads', to_string=True).splitlines() - - for line in info: - if pthread: - m = re.search(r'(0x[a-fA-F0-9]+)', line) - elif lwp: - m = re.search(r'\([^)]*?(\d+)[^)]*?\)', line) - if m == None: - continue - pid = int(m.group(1),0) - if pid == thread_id: - return int(line[2:6],0) - return -1 + # args is a tuple consisting of thread_id and the thread kind + thread_id = args[1] + pthread = False + lwp = False + if args[0] == 0: + pthread = True + else: + lwp = True + info = gdb.execute("info threads", to_string=True).splitlines() + + for line in info: + if pthread: + m = re.search(r"(0x[a-fA-F0-9]+)", line) + elif lwp: + m = re.search(r"\([^)]*?(\d+)[^)]*?\)", line) + if m == None: + continue + pid = int(m.group(1), 0) + if pid == thread_id: + return int(line[2:6], 0) + return -1 + """ Test info threads / list threads / how to split output to get thread id and its size. """ + + def _test_threads(*args): - info = gdb.execute('info threads', to_string=True).splitlines() - for line in info[1:]: - content = line.split() - thread_id = None - # fetch pointer to id - if(content[0].startswith('*')): - thread_id = (content[3]) - else: - thread_id = (content[2]) - sizeof_tid = sys.getsizeof(thread_id) - print(sizeof_tid) - print(info) + info = gdb.execute("info threads", to_string=True).splitlines() + for line in info[1:]: + content = line.split() + thread_id = None + # fetch pointer to id + if content[0].startswith("*"): + thread_id = content[3] + else: + thread_id = content[2] + sizeof_tid = sys.getsizeof(thread_id) + print(sizeof_tid) + print(info) |