[gdb] Fix assert in remote_async_get_pending_events_handler
[deliverable/binutils-gdb.git] / gdb / score-tdep.c
index 373ac05a77f504ba9c4ed55ff34c6a89f7d62429..531b308749cd47ee220f52c7d824e083acfd460c 100644 (file)
@@ -1,7 +1,7 @@
 /* Target-dependent code for the S+core architecture, for GDB,
    the GNU Debugger.
 
-   Copyright (C) 2006-2020 Free Software Foundation, Inc.
+   Copyright (C) 2006-2021 Free Software Foundation, Inc.
 
    Contributed by Qinwei (qinwei@sunnorth.com.cn)
    Contributed by Ching-Peng Lin (cplin@sunplus.com)
@@ -50,7 +50,7 @@ struct score_frame_cache
 {
   CORE_ADDR base;
   CORE_ADDR fp;
-  struct trad_frame_saved_reg *saved_regs;
+  trad_frame_saved_reg *saved_regs;
 };
 
 static int target_mach = bfd_mach_score7;
@@ -1019,9 +1019,11 @@ score7_analyze_prologue (CORE_ADDR startaddr, CORE_ADDR pc,
   /* Save RA.  */
   if (ra_offset_p == 1)
     {
-      if (this_cache->saved_regs[SCORE_PC_REGNUM].addr == -1)
-       this_cache->saved_regs[SCORE_PC_REGNUM].addr =
-         sp + sp_offset - ra_offset;
+      if (this_cache->saved_regs[SCORE_PC_REGNUM].is_realreg ()
+         && this_cache->saved_regs[SCORE_PC_REGNUM].realreg ()
+            == SCORE_PC_REGNUM)
+       this_cache->saved_regs[SCORE_PC_REGNUM].set_addr (sp + sp_offset
+                                                         - ra_offset);
     }
   else
     {
@@ -1032,9 +1034,11 @@ score7_analyze_prologue (CORE_ADDR startaddr, CORE_ADDR pc,
   /* Save FP.  */
   if (fp_offset_p == 1)
     {
-      if (this_cache->saved_regs[SCORE_FP_REGNUM].addr == -1)
-       this_cache->saved_regs[SCORE_FP_REGNUM].addr =
-         sp + sp_offset - fp_offset;
+      if (this_cache->saved_regs[SCORE_FP_REGNUM].is_realreg ()
+         && this_cache->saved_regs[SCORE_FP_REGNUM].realreg ()
+            == SCORE_FP_REGNUM)
+       this_cache->saved_regs[SCORE_FP_REGNUM].set_addr (sp + sp_offset
+                                                         - fp_offset);
     }
 
   /* Save SP and FP.  */
@@ -1265,9 +1269,11 @@ score3_analyze_prologue (CORE_ADDR startaddr, CORE_ADDR pc,
   /* Save RA.  */
   if (ra_offset_p == 1)
     {
-      if (this_cache->saved_regs[SCORE_PC_REGNUM].addr == -1)
-       this_cache->saved_regs[SCORE_PC_REGNUM].addr =
-         sp + sp_offset - ra_offset;
+      if (this_cache->saved_regs[SCORE_PC_REGNUM].is_realreg ()
+         && this_cache->saved_regs[SCORE_PC_REGNUM].realreg ()
+            == SCORE_PC_REGNUM)
+       this_cache->saved_regs[SCORE_PC_REGNUM].set_addr (sp + sp_offset
+                                                         - ra_offset);
     }
   else
     {
@@ -1278,9 +1284,11 @@ score3_analyze_prologue (CORE_ADDR startaddr, CORE_ADDR pc,
   /* Save FP.  */
   if (fp_offset_p == 1)
     {
-      if (this_cache->saved_regs[SCORE_FP_REGNUM].addr == -1)
-       this_cache->saved_regs[SCORE_FP_REGNUM].addr =
-         sp + sp_offset - fp_offset;
+      if (this_cache->saved_regs[SCORE_FP_REGNUM].is_realreg ()
+         && this_cache->saved_regs[SCORE_FP_REGNUM].realreg ()
+            == SCORE_FP_REGNUM)
+       this_cache->saved_regs[SCORE_FP_REGNUM].set_addr (sp + sp_offset
+                                                         - fp_offset);
     }
 
   /* Save SP and FP.  */
@@ -1318,7 +1326,7 @@ score_make_prologue_cache (struct frame_info *this_frame, void **this_cache)
   }
 
   /* Save SP.  */
-  trad_frame_set_value (cache->saved_regs, SCORE_SP_REGNUM, cache->base);
+  cache->saved_regs[SCORE_SP_REGNUM].set_value (cache->base);
 
   return (struct score_frame_cache *) (*this_cache);
 }
This page took 0.025446 seconds and 4 git commands to generate.