cpu: Pass the address to check into the PCEventQueue service method.

This prevents having to access it from within the ThreadContext.

Change-Id: I34f5815a11201b8fc41871c18bdbbcd0f40305cf
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/22102
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
diff --git a/src/cpu/checker/cpu_impl.hh b/src/cpu/checker/cpu_impl.hh
index 86f022d..95ea3f7 100644
--- a/src/cpu/checker/cpu_impl.hh
+++ b/src/cpu/checker/cpu_impl.hh
@@ -412,7 +412,7 @@
             int count = 0;
             do {
                 oldpc = thread->instAddr();
-                system->pcEventQueue.service(tc);
+                system->pcEventQueue.service(oldpc, tc);
                 count++;
             } while (oldpc != thread->instAddr());
             if (count > 1) {
diff --git a/src/cpu/minor/execute.cc b/src/cpu/minor/execute.cc
index dc79866..a9d51b7 100644
--- a/src/cpu/minor/execute.cc
+++ b/src/cpu/minor/execute.cc
@@ -841,7 +841,7 @@
     Addr oldPC;
     do {
         oldPC = thread->instAddr();
-        cpu.system->pcEventQueue.service(thread);
+        cpu.system->pcEventQueue.service(oldPC, thread);
         num_pc_event_checks++;
     } while (oldPC != thread->instAddr());
 
diff --git a/src/cpu/o3/commit_impl.hh b/src/cpu/o3/commit_impl.hh
index 2aa9d78..df43945 100644
--- a/src/cpu/o3/commit_impl.hh
+++ b/src/cpu/o3/commit_impl.hh
@@ -1112,7 +1112,8 @@
                            !thread[tid]->trapPending);
                     do {
                         oldpc = pc[tid].instAddr();
-                        cpu->system->pcEventQueue.service(thread[tid]->getTC());
+                        cpu->system->pcEventQueue.service(
+                                oldpc, thread[tid]->getTC());
                         count++;
                     } while (oldpc != pc[tid].instAddr());
                     if (count > 1) {
diff --git a/src/cpu/pc_event.cc b/src/cpu/pc_event.cc
index 90c8733..725c051 100644
--- a/src/cpu/pc_event.cc
+++ b/src/cpu/pc_event.cc
@@ -84,11 +84,10 @@
 }
 
 bool
-PCEventQueue::doService(ThreadContext *tc)
+PCEventQueue::doService(Addr pc, ThreadContext *tc)
 {
-    // This will fail to break on Alpha PALcode addresses, but that is
-    // a rare use case.
-    Addr pc = tc->instAddr();
+    // Using the raw PC address will fail to break on Alpha PALcode addresses,
+    // but that is a rare use case.
     int serviced = 0;
     range_t range = equal_range(pc);
     for (iterator i = range.first; i != range.second; ++i) {
diff --git a/src/cpu/pc_event.hh b/src/cpu/pc_event.hh
index 0654ca5..d5fd4ea 100644
--- a/src/cpu/pc_event.hh
+++ b/src/cpu/pc_event.hh
@@ -105,7 +105,7 @@
   protected:
     Map pcMap;
 
-    bool doService(ThreadContext *tc);
+    bool doService(Addr pc, ThreadContext *tc);
 
   public:
     PCEventQueue();
@@ -113,12 +113,12 @@
 
     bool remove(PCEvent *event) override;
     bool schedule(PCEvent *event) override;
-    bool service(ThreadContext *tc)
+    bool service(Addr pc, ThreadContext *tc)
     {
         if (pcMap.empty())
             return false;
 
-        return doService(tc);
+        return doService(pc, tc);
     }
 
     range_t equal_range(Addr pc);
diff --git a/src/cpu/simple/base.cc b/src/cpu/simple/base.cc
index 461f00f..df3d981 100644
--- a/src/cpu/simple/base.cc
+++ b/src/cpu/simple/base.cc
@@ -144,7 +144,7 @@
     Addr oldpc, pc = threadInfo[curThread]->thread->instAddr();
     do {
         oldpc = pc;
-        system->pcEventQueue.service(threadContexts[curThread]);
+        system->pcEventQueue.service(oldpc, threadContexts[curThread]);
         pc = threadInfo[curThread]->thread->instAddr();
     } while (oldpc != pc);
 }