gdb/csky rm csky_memory_insert/remove_breakpoint
authorJiangshuai Li <jiangshuai_li@linux.alibaba.com>
Tue, 13 Sep 2022 06:21:55 +0000 (14:21 +0800)
committerJiangshuai Li <jiangshuai_li@linux.alibaba.com>
Tue, 13 Sep 2022 06:21:55 +0000 (14:21 +0800)
Software breakpoints are inserted or removed by the gdb stub via
remote protocol, these two functions are no longer needed.

gdb/csky-tdep.c

index 3cd7a775f8dcfe539425489421e6edec775f318c..aeb2fab4309273de2f0d22f4089eeb08a7def9fb 100644 (file)
@@ -2016,201 +2016,6 @@ csky_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
     }
 }
 
-/* Implement the memory_insert_breakpoint gdbarch method.  */
-
-static int
-csky_memory_insert_breakpoint (struct gdbarch *gdbarch,
-                              struct bp_target_info *bp_tgt)
-{
-  int val;
-  const unsigned char *bp;
-  gdb_byte bp_write_record1[] = { 0, 0, 0, 0 };
-  gdb_byte bp_write_record2[] = { 0, 0, 0, 0 };
-  gdb_byte bp_record[] = { 0, 0, 0, 0 };
-
-  /* Sanity-check bp_address.  */
-  if (bp_tgt->reqstd_address % 2)
-    warning (_("Invalid breakpoint address 0x%x is an odd number."),
-            (unsigned int) bp_tgt->reqstd_address);
-  scoped_restore restore_memory
-    = make_scoped_restore_show_memory_breakpoints (1);
-
-  /* Determine appropriate breakpoint_kind for this address.  */
-  bp_tgt->kind = csky_breakpoint_kind_from_pc (gdbarch,
-                                              &bp_tgt->reqstd_address);
-
-  /* Save the memory contents.  */
-  bp_tgt->shadow_len = bp_tgt->kind;
-
-  /* Fill bp_tgt->placed_address.  */
-  bp_tgt->placed_address = bp_tgt->reqstd_address;
-
-  if (bp_tgt->kind == CSKY_INSN_SIZE16)
-    {
-      if ((bp_tgt->reqstd_address % 4) == 0)
-       {
-         /* Read two bytes.  */
-         val = target_read_memory (bp_tgt->reqstd_address,
-                                   bp_tgt->shadow_contents, 2);
-         if (val)
-           return val;
-
-         /* Read two bytes.  */
-         val = target_read_memory (bp_tgt->reqstd_address + 2,
-                                   bp_record, 2);
-         if (val)
-           return val;
-
-         /* Write the breakpoint.  */
-         bp_write_record1[2] = bp_record[0];
-         bp_write_record1[3] = bp_record[1];
-         bp = bp_write_record1;
-         val = target_write_raw_memory (bp_tgt->reqstd_address, bp,
-                                        CSKY_WR_BKPT_MODE);
-       }
-      else
-       {
-         val = target_read_memory (bp_tgt->reqstd_address,
-                                   bp_tgt->shadow_contents, 2);
-         if (val)
-           return val;
-
-         val = target_read_memory (bp_tgt->reqstd_address - 2,
-                                   bp_record, 2);
-         if (val)
-           return val;
-
-         /* Write the breakpoint.  */
-         bp_write_record1[0] = bp_record[0];
-         bp_write_record1[1] = bp_record[1];
-         bp = bp_write_record1;
-         val = target_write_raw_memory (bp_tgt->reqstd_address - 2,
-                                        bp, CSKY_WR_BKPT_MODE);
-       }
-    }
-  else
-    {
-      if (bp_tgt->placed_address % 4 == 0)
-       {
-         val = target_read_memory (bp_tgt->reqstd_address,
-                                   bp_tgt->shadow_contents,
-                                   CSKY_WR_BKPT_MODE);
-         if (val)
-           return val;
-
-         /* Write the breakpoint.  */
-         bp = bp_write_record1;
-         val = target_write_raw_memory (bp_tgt->reqstd_address,
-                                        bp, CSKY_WR_BKPT_MODE);
-       }
-      else
-       {
-         val = target_read_memory (bp_tgt->reqstd_address,
-                                   bp_tgt->shadow_contents,
-                                   CSKY_WR_BKPT_MODE);
-         if (val)
-           return val;
-
-         val = target_read_memory (bp_tgt->reqstd_address - 2,
-                                   bp_record, 2);
-         if (val)
-           return val;
-
-         val = target_read_memory (bp_tgt->reqstd_address + 4,
-                                   bp_record + 2, 2);
-         if (val)
-           return val;
-
-         bp_write_record1[0] = bp_record[0];
-         bp_write_record1[1] = bp_record[1];
-         bp_write_record2[2] = bp_record[2];
-         bp_write_record2[3] = bp_record[3];
-
-         /* Write the breakpoint.  */
-         bp = bp_write_record1;
-         val = target_write_raw_memory (bp_tgt->reqstd_address - 2, bp,
-                                        CSKY_WR_BKPT_MODE);
-         if (val)
-           return val;
-
-         /* Write the breakpoint.  */
-         bp = bp_write_record2;
-         val = target_write_raw_memory (bp_tgt->reqstd_address + 2, bp,
-                                        CSKY_WR_BKPT_MODE);
-       }
-    }
-  return val;
-}
-
-/* Restore the breakpoint shadow_contents to the target.  */
-
-static int
-csky_memory_remove_breakpoint (struct gdbarch *gdbarch,
-                              struct bp_target_info *bp_tgt)
-{
-  int val;
-  gdb_byte bp_record[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
-  /* Different for shadow_len 2 or 4.  */
-  if (bp_tgt->shadow_len == 2)
-    {
-      /* Do word-sized writes on word-aligned boundaries and read
-        padding bytes as necessary.  */
-      if (bp_tgt->reqstd_address % 4 == 0)
-       {
-         val = target_read_memory (bp_tgt->reqstd_address + 2,
-                                   bp_record + 2, 2);
-         if (val)
-           return val;
-         bp_record[0] = bp_tgt->shadow_contents[0];
-         bp_record[1] = bp_tgt->shadow_contents[1];
-         return target_write_raw_memory (bp_tgt->reqstd_address,
-                                         bp_record, CSKY_WR_BKPT_MODE);
-       }
-      else
-       {
-         val = target_read_memory (bp_tgt->reqstd_address - 2,
-                                   bp_record, 2);
-         if (val)
-           return val;
-         bp_record[2] = bp_tgt->shadow_contents[0];
-         bp_record[3] = bp_tgt->shadow_contents[1];
-         return target_write_raw_memory (bp_tgt->reqstd_address - 2,
-                                         bp_record, CSKY_WR_BKPT_MODE);
-       }
-    }
-  else
-    {
-      /* Do word-sized writes on word-aligned boundaries and read
-        padding bytes as necessary.  */
-      if (bp_tgt->placed_address % 4 == 0)
-       {
-         return target_write_raw_memory (bp_tgt->reqstd_address,
-                                         bp_tgt->shadow_contents,
-                                         CSKY_WR_BKPT_MODE);
-       }
-      else
-       {
-         val = target_read_memory (bp_tgt->reqstd_address - 2,
-                                   bp_record, 2);
-         if (val)
-           return val;
-         val = target_read_memory (bp_tgt->reqstd_address + 4,
-                                   bp_record+6, 2);
-         if (val)
-           return val;
-
-         bp_record[2] = bp_tgt->shadow_contents[0];
-         bp_record[3] = bp_tgt->shadow_contents[1];
-         bp_record[4] = bp_tgt->shadow_contents[2];
-         bp_record[5] = bp_tgt->shadow_contents[3];
-
-         return target_write_raw_memory (bp_tgt->reqstd_address - 2,
-                                         bp_record,
-                                         CSKY_WR_BKPT_MODE * 2);
-       }
-    }
-}
-
 /* Determine link register type.  */
 
 static lr_type_t
@@ -3062,12 +2867,6 @@ csky_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   frame_unwind_append_unwinder (gdbarch, &csky_stub_unwind);
   frame_unwind_append_unwinder (gdbarch, &csky_unwind_cache);
 
-  /* Breakpoints.  */
-  set_gdbarch_memory_insert_breakpoint (gdbarch,
-                                       csky_memory_insert_breakpoint);
-  set_gdbarch_memory_remove_breakpoint (gdbarch,
-                                       csky_memory_remove_breakpoint);
-
   /* Hook in ABI-specific overrides, if they have been registered.  */
   gdbarch_init_osabi (info, gdbarch);