Remove cleanups from check_fast_tracepoint_sals
authorTom Tromey <tom@tromey.com>
Wed, 21 Feb 2018 23:53:56 +0000 (16:53 -0700)
committerTom Tromey <tom@tromey.com>
Sat, 24 Feb 2018 17:01:11 +0000 (10:01 -0700)
This changes the gdbarch fast_tracepoint_valid_at method to use a
std::string as its out parameter, and then updates all the uses.  This
allows removing a cleanup from breakpoint.c.

Regression tested by the buildbot.

ChangeLog
2018-02-24  Tom Tromey  <tom@tromey.com>

* i386-tdep.c (i386_fast_tracepoint_valid_at): "msg" now a
std::string.
* gdbarch.sh (fast_tracepoint_valid_at): Change "msg" to a
std::string*.
* gdbarch.c: Rebuild.
* gdbarch.h: Rebuild.
* breakpoint.c (check_fast_tracepoint_sals): Use std::string.
* arch-utils.h (default_fast_tracepoint_valid_at): Update.
* arch-utils.c (default_fast_tracepoint_valid_at): "msg" now a
std::string*.

gdb/ChangeLog
gdb/arch-utils.c
gdb/arch-utils.h
gdb/breakpoint.c
gdb/gdbarch.c
gdb/gdbarch.h
gdb/gdbarch.sh
gdb/i386-tdep.c

index 5297dcbe5866257703fe5cad03555d2e3404c039..df920f8d60208f84a976b751d5d5e9d446f32ad4 100644 (file)
@@ -1,3 +1,16 @@
+2018-02-24  Tom Tromey  <tom@tromey.com>
+
+       * i386-tdep.c (i386_fast_tracepoint_valid_at): "msg" now a
+       std::string.
+       * gdbarch.sh (fast_tracepoint_valid_at): Change "msg" to a
+       std::string*.
+       * gdbarch.c: Rebuild.
+       * gdbarch.h: Rebuild.
+       * breakpoint.c (check_fast_tracepoint_sals): Use std::string.
+       * arch-utils.h (default_fast_tracepoint_valid_at): Update.
+       * arch-utils.c (default_fast_tracepoint_valid_at): "msg" now a
+       std::string*.
+
 2018-02-23  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * gdbtypes.h (sect_offset): Change type to uint64_t.
index 693d7e3dc813e82436f787f344c6304f0a43c91f..2ff0f4d623038ceaabbbcda3102ea52f8441fe7e 100644 (file)
@@ -813,12 +813,12 @@ default_has_shared_address_space (struct gdbarch *gdbarch)
 
 int
 default_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr,
-                                 char **msg)
+                                 std::string *msg)
 {
   /* We don't know if maybe the target has some way to do fast
      tracepoints that doesn't need gdbarch, so always say yes.  */
   if (msg)
-    *msg = NULL;
+    msg->clear ();
   return 1;
 }
 
index b51a4ec1ee81105478c2f2260a92483bbbec746b..3407a165e0d5233e50548eb1692e78765a4146df 100644 (file)
@@ -202,7 +202,7 @@ extern struct gdbarch *get_current_arch (void);
 extern int default_has_shared_address_space (struct gdbarch *);
 
 extern int default_fast_tracepoint_valid_at (struct gdbarch *gdbarch,
-                                            CORE_ADDR addr, char **msg);
+                                            CORE_ADDR addr, std::string *msg);
 
 extern const gdb_byte *default_breakpoint_from_pc (struct gdbarch *gdbarch,
                                                   CORE_ADDR *pcptr,
index 91ecca62fc67b235a13a75b643c1fb98ea5829d6..c56084cce384352f2ca30f6b5d7519976a073588 100644 (file)
@@ -9177,10 +9177,6 @@ static void
 check_fast_tracepoint_sals (struct gdbarch *gdbarch,
                            gdb::array_view<const symtab_and_line> sals)
 {
-  int rslt;
-  char *msg;
-  struct cleanup *old_chain;
-
   for (const auto &sal : sals)
     {
       struct gdbarch *sarch;
@@ -9190,14 +9186,10 @@ check_fast_tracepoint_sals (struct gdbarch *gdbarch,
         associated with SAL.  */
       if (sarch == NULL)
        sarch = gdbarch;
-      rslt = gdbarch_fast_tracepoint_valid_at (sarch, sal.pc, &msg);
-      old_chain = make_cleanup (xfree, msg);
-
-      if (!rslt)
+      std::string msg;
+      if (!gdbarch_fast_tracepoint_valid_at (sarch, sal.pc, &msg))
        error (_("May not have a fast tracepoint at %s%s"),
-              paddress (sarch, sal.pc), (msg ? msg : ""));
-
-      do_cleanups (old_chain);
+              paddress (sarch, sal.pc), msg.c_str ());
     }
 }
 
index 62cb9a5d88a5758420d8ab2a0142c2a69e41c3b1..b8703e5a556e310e023cadf57037918d1bdd2850 100644 (file)
@@ -4650,7 +4650,7 @@ set_gdbarch_has_shared_address_space (struct gdbarch *gdbarch,
 }
 
 int
-gdbarch_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr, char **msg)
+gdbarch_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr, std::string *msg)
 {
   gdb_assert (gdbarch != NULL);
   gdb_assert (gdbarch->fast_tracepoint_valid_at != NULL);
index 30c2bf3af3a3d9755802b66f394e51f4ca95dc8f..5cb131de1d27209107b5b83773ea7560ef0da6ac 100644 (file)
@@ -1366,8 +1366,8 @@ extern void set_gdbarch_has_shared_address_space (struct gdbarch *gdbarch, gdbar
 
 /* True if a fast tracepoint can be set at an address. */
 
-typedef int (gdbarch_fast_tracepoint_valid_at_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr, char **msg);
-extern int gdbarch_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr, char **msg);
+typedef int (gdbarch_fast_tracepoint_valid_at_ftype) (struct gdbarch *gdbarch, CORE_ADDR addr, std::string *msg);
+extern int gdbarch_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr, std::string *msg);
 extern void set_gdbarch_fast_tracepoint_valid_at (struct gdbarch *gdbarch, gdbarch_fast_tracepoint_valid_at_ftype *fast_tracepoint_valid_at);
 
 /* Guess register state based on tracepoint location.  Used for tracepoints
index 10a2aa9f6f294e70d245222ebda9cc2e37683e48..33dfa6b349dee778f1a82a511a6cf57960d48f89 100755 (executable)
@@ -1045,7 +1045,7 @@ v;int;has_global_breakpoints;;;0;0;;0
 m;int;has_shared_address_space;void;;;default_has_shared_address_space;;0
 
 # True if a fast tracepoint can be set at an address.
-m;int;fast_tracepoint_valid_at;CORE_ADDR addr, char **msg;addr, msg;;default_fast_tracepoint_valid_at;;0
+m;int;fast_tracepoint_valid_at;CORE_ADDR addr, std::string *msg;addr, msg;;default_fast_tracepoint_valid_at;;0
 
 # Guess register state based on tracepoint location.  Used for tracepoints
 # where no registers have been collected, but there's only one location,
index 6b59278e2267063e56138bc7990c1f3115286466..60dc8013a23b503190c86d5bed26bf19fad12473 100644 (file)
@@ -8111,7 +8111,7 @@ static const int i386_record_regmap[] =
 
 static int
 i386_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr,
-                              char **msg)
+                              std::string *msg)
 {
   int len, jumplen;
 
@@ -8144,15 +8144,15 @@ i386_fast_tracepoint_valid_at (struct gdbarch *gdbarch, CORE_ADDR addr,
       /* Return a bit of target-specific detail to add to the caller's
         generic failure message.  */
       if (msg)
-       *msg = xstrprintf (_("; instruction is only %d bytes long, "
-                            "need at least %d bytes for the jump"),
-                          len, jumplen);
+       *msg = string_printf (_("; instruction is only %d bytes long, "
+                               "need at least %d bytes for the jump"),
+                             len, jumplen);
       return 0;
     }
   else
     {
       if (msg)
-       *msg = NULL;
+       msg->clear ();
       return 1;
     }
 }