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