diff --git a/src/libfibre/libfibre.so-gdb.py b/src/libfibre/libfibre.so-gdb.py index 659f04753c8d66b373ea1e4c580762c54313e412..76bedc8953a888a780f9ddaec47d4d6528fc19f5 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