Make a few functions work with base_breakpoint instead of breakpoint
authorPedro Alves <pedro@palves.net>
Fri, 6 May 2022 22:11:34 +0000 (23:11 +0100)
committerPedro Alves <pedro@palves.net>
Fri, 20 May 2022 19:41:00 +0000 (20:41 +0100)
This makes tracepoints inherit from base_breakpoint, since their
locations are code locations.  If we do that, then we can eliminate
tracepoint::re_set and tracepoint::decode_location, as they are doing
the same as the base_breakpoint implementations.

With this, all breakpoint types created by new_breakpoint_from_type
are code breakpoints, i.e., base_breakpoint subclasses, and thus we
can make it return a base_breakpoint pointer.

Finally, init_breakpoint_sal can take a base_breakpoint pointer as
"self" pointer too.  This will let us convert this function to a
base_breakpoint ctor in a following patch.

Change-Id: I3a4073ff1a4c865f525588095c18dc42b744cb54

gdb/breakpoint.c
gdb/breakpoint.h

index 1c1dbfb3ad71939be8ed8685095702476cfba1ae..d13e803dee50d94b583a27dd656d148940c04ff9 100644 (file)
@@ -1258,10 +1258,10 @@ is_tracepoint (const struct breakpoint *b)
 /* Factory function to create an appropriate instance of breakpoint given
    TYPE.  */
 
-static std::unique_ptr<breakpoint>
+static std::unique_ptr<base_breakpoint>
 new_breakpoint_from_type (struct gdbarch *gdbarch, bptype type)
 {
-  breakpoint *b;
+  base_breakpoint *b;
 
   switch (type)
     {
@@ -1317,7 +1317,7 @@ new_breakpoint_from_type (struct gdbarch *gdbarch, bptype type)
       gdb_assert_not_reached ("invalid type");
     }
 
-  return std::unique_ptr<breakpoint> (b);
+  return std::unique_ptr<base_breakpoint> (b);
 }
 
 /* A helper function that validates that COMMANDS are valid for a
@@ -8297,7 +8297,7 @@ update_dprintf_commands (const char *args, int from_tty,
    "address location" from the address in the SAL.  */
 
 static void
-init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
+init_breakpoint_sal (base_breakpoint *b, struct gdbarch *gdbarch,
                     gdb::array_view<const symtab_and_line> sals,
                     event_location_up &&location,
                     gdb::unique_xmalloc_ptr<char> filter,
@@ -8359,7 +8359,7 @@ init_breakpoint_sal (struct breakpoint *b, struct gdbarch *gdbarch,
          if (type == bp_static_tracepoint
              || type == bp_static_marker_tracepoint)
            {
-             struct tracepoint *t = (struct tracepoint *) b;
+             auto *t = static_cast<struct tracepoint *> (b);
              struct static_tracepoint_marker marker;
 
              if (strace_marker_p (b))
@@ -8453,7 +8453,7 @@ create_breakpoint_sal (struct gdbarch *gdbarch,
                       int enabled, int internal, unsigned flags,
                       int display_canonical)
 {
-  std::unique_ptr<breakpoint> b = new_breakpoint_from_type (gdbarch, type);
+  std::unique_ptr<base_breakpoint> b = new_breakpoint_from_type (gdbarch, type);
 
   init_breakpoint_sal (b.get (), gdbarch,
                       sals, std::move (location),
@@ -11952,14 +11952,6 @@ bkpt_probe_decode_location (struct breakpoint *b,
   return sals;
 }
 
-/* The breakpoint_ops structure to be used in tracepoints.  */
-
-void
-tracepoint::re_set ()
-{
-  breakpoint_re_set_default (this);
-}
-
 int
 tracepoint::breakpoint_hit (const struct bp_location *bl,
                            const address_space *aspace, CORE_ADDR bp_addr,
@@ -12034,16 +12026,6 @@ tracepoint::print_recreate (struct ui_file *fp) const
     gdb_printf (fp, "  passcount %d\n", pass_count);
 }
 
-std::vector<symtab_and_line>
-tracepoint::decode_location (struct event_location *location,
-                            struct program_space *search_pspace)
-{
-  if (event_location_type (location) == PROBE_LOCATION)
-    return bkpt_probe_decode_location (this, location, search_pspace);
-
-  return decode_location_default (this, location, search_pspace);
-}
-
 /* Virtual table for tracepoints on static probes.  */
 
 static void
index b7e3b4dc6a1ccf371be8c6085daf3fedb28ca3e5..48ceceabb3d22abf9df00397a9e842eb144b77ef 100644 (file)
@@ -974,21 +974,16 @@ extern bool is_exception_catchpoint (breakpoint *bp);
 /* An instance of this type is used to represent all kinds of
    tracepoints.  */
 
-struct tracepoint : public breakpoint
+struct tracepoint : public base_breakpoint
 {
-  using breakpoint::breakpoint;
+  using base_breakpoint::base_breakpoint;
 
-  void re_set () override;
   int breakpoint_hit (const struct bp_location *bl,
                      const address_space *aspace, CORE_ADDR bp_addr,
                      const target_waitstatus &ws) override;
   void print_one_detail (struct ui_out *uiout) const override;
   void print_mention () const override;
   void print_recreate (struct ui_file *fp) const override;
-  std::vector<symtab_and_line> decode_location
-       (struct event_location *location,
-       struct program_space *search_pspace) override;
-
 
   /* Number of times this tracepoint should single-step and collect
      additional data.  */