From 1e2fa62adb57e0dba799e65b134d94529c95487d Mon Sep 17 00:00:00 2001 From: Bilal Akhtar <bilal.akhtar@uwaterloo.ca> Date: Sun, 8 Jul 2018 18:14:16 -0400 Subject: [PATCH] Set Context::currStack when changing fibres in gdb debugging --- src/libfibre/libfibre.so-gdb.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/libfibre/libfibre.so-gdb.py b/src/libfibre/libfibre.so-gdb.py index 659f047..76bedc8 100644 --- a/src/libfibre/libfibre.so-gdb.py +++ b/src/libfibre/libfibre.so-gdb.py @@ -18,6 +18,7 @@ class FibreSupport(): FibreSupport.rsp = str(gdb.parse_and_eval("$rsp")).split(None, 1)[0] FibreSupport.rbp = str(gdb.parse_and_eval("$rbp")).split(None, 1)[0] FibreSupport.rip = str(gdb.parse_and_eval("$rip")).split(None, 1)[0] + FibreSupport.currStack = str(gdb.parse_and_eval("Context::currStack")) FibreSupport.saved = True # traverse runtime stack list to build internal list of fibres _globalStackList = gdb.parse_and_eval("_globalStackList") @@ -52,6 +53,7 @@ class FibreSupport(): gdb.execute("set $rsp = " + str(FibreSupport.rsp)) gdb.execute("set $rbp = " + str(FibreSupport.rbp)) gdb.execute("set $rip = " + str(FibreSupport.rip)) + gdb.execute("set Context::currStack = " + str(FibreSupport.currStack)) FibreSupport.saved = False def prep_frame(): @@ -93,6 +95,8 @@ class FibreSupport(): gdb.execute("set $rsp = " + str(rsp)) gdb.execute("set $rbp = " + str(rbp)) gdb.execute("set $rip = " + str(rip)) + # set Context::currStack to point to the correct stack + gdb.execute("set Context::currStack = " + argstr) return True def backtrace(arg): @@ -119,6 +123,7 @@ class FibreSupport(): tmprsp = str(gdb.parse_and_eval("$rsp")).split(None, 1)[0] tmprbp = str(gdb.parse_and_eval("$rbp")).split(None, 1)[0] tmprip = str(gdb.parse_and_eval("$rip")).split(None, 1)[0] + tmpcurrStack = str(gdb.parse_and_eval("Context::currStack")) result = None try: # execute backtrace, if possible @@ -133,6 +138,7 @@ class FibreSupport(): gdb.execute("set $rbp = " + str(tmprbp)) gdb.execute("set $rip = " + str(tmprip)) # restore stack frame + tmpcurrStack = gdb.execute("set Context::currStack = " + tmpcurrStack) currframe.select() return result -- GitLab