gdb, gdbserver: update thread identifier in enable_btrace target method
authorMarkus Metzger <markus.t.metzger@intel.com>
Thu, 25 Nov 2021 14:15:52 +0000 (15:15 +0100)
committerMarkus Metzger <markus.t.metzger@intel.com>
Thu, 27 Jan 2022 12:31:20 +0000 (13:31 +0100)
The enable_btrace target method takes a ptid_t to identify the thread on
which tracing shall be enabled.

Change this to thread_info * to avoid translating back and forth between
the two.  This will be used in a subsequent patch.

13 files changed:
gdb/btrace.c
gdb/ravenscar-thread.c
gdb/remote.c
gdb/target-delegates.c
gdb/target.c
gdb/target.h
gdb/x86-linux-nat.c
gdb/x86-linux-nat.h
gdbserver/linux-low.cc
gdbserver/linux-low.h
gdbserver/server.cc
gdbserver/target.cc
gdbserver/target.h

index dc4d686ac4bc8c01a5803f2a663a59fb5fb02c0d..ea733fe36b902cecbf4fb8cfc8729b111ed43da4 100644 (file)
@@ -1618,7 +1618,7 @@ btrace_enable (struct thread_info *tp, const struct btrace_config *conf)
   DEBUG ("enable thread %s (%s)", print_thread_id (tp),
         tp->ptid.to_string ().c_str ());
 
-  tp->btrace.target = target_enable_btrace (tp->ptid, conf);
+  tp->btrace.target = target_enable_btrace (tp, conf);
 
   if (tp->btrace.target == NULL)
     error (_("Failed to enable recording on thread %s (%s)."),
index 5f040cece071e6e6c3bcfccbf85fac158e65caa6..60fc3530ce2236fa4fa17dbc6dd4e874d4e9f7db 100644 (file)
@@ -120,12 +120,16 @@ struct ravenscar_thread_target final : public target_ops
 
   ptid_t get_ada_task_ptid (long lwp, ULONGEST thread) override;
 
-  struct btrace_target_info *enable_btrace (ptid_t ptid,
+  struct btrace_target_info *enable_btrace (thread_info *tp,
                                            const struct btrace_config *conf)
     override
   {
-    ptid = get_base_thread_from_ravenscar_task (ptid);
-    return beneath ()->enable_btrace (ptid, conf);
+    process_stratum_target *proc_target
+      = as_process_stratum_target (this->beneath ());
+    ptid_t underlying = get_base_thread_from_ravenscar_task (tp->ptid);
+    tp = find_thread_ptid (proc_target, underlying);
+
+    return beneath ()->enable_btrace (tp, conf);
   }
 
   void mourn_inferior () override;
index f19a2f7c1f9e47fc696ed1243afb0b65896eee0b..9f2c63b21411fa762e04664a167eaaafb6ae6044 100644 (file)
@@ -658,8 +658,8 @@ public:
   bool use_agent (bool use) override;
   bool can_use_agent () override;
 
-  struct btrace_target_info *enable_btrace (ptid_t ptid,
-                                           const struct btrace_config *conf) override;
+  struct btrace_target_info *
+    enable_btrace (thread_info *tp, const struct btrace_config *conf) override;
 
   void disable_btrace (struct btrace_target_info *tinfo) override;
 
@@ -14178,7 +14178,8 @@ remote_target::remote_btrace_maybe_reopen ()
 /* Enable branch tracing.  */
 
 struct btrace_target_info *
-remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf)
+remote_target::enable_btrace (thread_info *tp,
+                             const struct btrace_config *conf)
 {
   struct btrace_target_info *tinfo = NULL;
   struct packet_config *packet = NULL;
@@ -14202,6 +14203,7 @@ remote_target::enable_btrace (ptid_t ptid, const struct btrace_config *conf)
 
   btrace_sync_conf (conf);
 
+  ptid_t ptid = tp->ptid;
   set_general_thread (ptid);
 
   buf += xsnprintf (buf, endbuf - buf, "%s", packet->name);
index 9636e3212bc8aa4aab1fc12d14cdf8b9ebc1c3ea..ca1734f86ba8bd1c20dd48afb82aaedfef30a094 100644 (file)
@@ -145,7 +145,7 @@ struct dummy_target : public target_ops
   traceframe_info_up traceframe_info () override;
   bool use_agent (bool arg0) override;
   bool can_use_agent () override;
-  struct btrace_target_info *enable_btrace (ptid_t arg0, const struct btrace_config *arg1) override;
+  struct btrace_target_info *enable_btrace (thread_info *arg0, const struct btrace_config *arg1) override;
   void disable_btrace (struct btrace_target_info *arg0) override;
   void teardown_btrace (struct btrace_target_info *arg0) override;
   enum btrace_error read_btrace (struct btrace_data *arg0, struct btrace_target_info *arg1, enum btrace_read_type arg2) override;
@@ -319,7 +319,7 @@ struct debug_target : public target_ops
   traceframe_info_up traceframe_info () override;
   bool use_agent (bool arg0) override;
   bool can_use_agent () override;
-  struct btrace_target_info *enable_btrace (ptid_t arg0, const struct btrace_config *arg1) override;
+  struct btrace_target_info *enable_btrace (thread_info *arg0, const struct btrace_config *arg1) override;
   void disable_btrace (struct btrace_target_info *arg0) override;
   void teardown_btrace (struct btrace_target_info *arg0) override;
   enum btrace_error read_btrace (struct btrace_data *arg0, struct btrace_target_info *arg1, enum btrace_read_type arg2) override;
@@ -3761,25 +3761,25 @@ debug_target::can_use_agent ()
 }
 
 struct btrace_target_info *
-target_ops::enable_btrace (ptid_t arg0, const struct btrace_config *arg1)
+target_ops::enable_btrace (thread_info *arg0, const struct btrace_config *arg1)
 {
   return this->beneath ()->enable_btrace (arg0, arg1);
 }
 
 struct btrace_target_info *
-dummy_target::enable_btrace (ptid_t arg0, const struct btrace_config *arg1)
+dummy_target::enable_btrace (thread_info *arg0, const struct btrace_config *arg1)
 {
   tcomplain ();
 }
 
 struct btrace_target_info *
-debug_target::enable_btrace (ptid_t arg0, const struct btrace_config *arg1)
+debug_target::enable_btrace (thread_info *arg0, const struct btrace_config *arg1)
 {
   struct btrace_target_info * result;
   fprintf_unfiltered (gdb_stdlog, "-> %s->enable_btrace (...)\n", this->beneath ()->shortname ());
   result = this->beneath ()->enable_btrace (arg0, arg1);
   fprintf_unfiltered (gdb_stdlog, "<- %s->enable_btrace (", this->beneath ()->shortname ());
-  target_debug_print_ptid_t (arg0);
+  target_debug_print_thread_info_p (arg0);
   fputs_unfiltered (", ", gdb_stdlog);
   target_debug_print_const_struct_btrace_config_p (arg1);
   fputs_unfiltered (") = ", gdb_stdlog);
index f3f1c80391fae7df5e17959f5b6793dc9b13ecd8..548cfad06b25af6f7adad8141b76a1e6c701895a 100644 (file)
@@ -4060,9 +4060,9 @@ target_ranged_break_num_registers (void)
 /* See target.h.  */
 
 struct btrace_target_info *
-target_enable_btrace (ptid_t ptid, const struct btrace_config *conf)
+target_enable_btrace (thread_info *tp, const struct btrace_config *conf)
 {
-  return current_inferior ()->top_target ()->enable_btrace (ptid, conf);
+  return current_inferior ()->top_target ()->enable_btrace (tp, conf);
 }
 
 /* See target.h.  */
index 1ac7a4554dc56ac024723e5331e1433d744fb9cb..4cc79df05b41e40713586b4b897bedcc9324a341 100644 (file)
@@ -1151,10 +1151,10 @@ struct target_ops
     virtual bool can_use_agent ()
       TARGET_DEFAULT_RETURN (false);
 
-    /* Enable branch tracing for PTID using CONF configuration.
+    /* Enable branch tracing for TP using CONF configuration.
        Return a branch trace target information struct for reading and for
        disabling branch trace.  */
-    virtual struct btrace_target_info *enable_btrace (ptid_t ptid,
+    virtual struct btrace_target_info *enable_btrace (thread_info *tp,
                                                      const struct btrace_config *conf)
       TARGET_DEFAULT_NORETURN (tcomplain ());
 
@@ -2502,7 +2502,7 @@ extern void update_target_permissions (void);
 
 /* See to_enable_btrace in struct target_ops.  */
 extern struct btrace_target_info *
-  target_enable_btrace (ptid_t ptid, const struct btrace_config *);
+  target_enable_btrace (thread_info *tp, const struct btrace_config *);
 
 /* See to_disable_btrace in struct target_ops.  */
 extern void target_disable_btrace (struct btrace_target_info *btinfo);
index 55d2a1d9ab0569c3140f5f54e883d38bf8f9b9f3..80be97333107d985b2c7bac6ed178d8cf1af5afa 100644 (file)
@@ -212,10 +212,11 @@ x86_linux_nat_target::read_description ()
 /* Enable branch tracing.  */
 
 struct btrace_target_info *
-x86_linux_nat_target::enable_btrace (ptid_t ptid,
+x86_linux_nat_target::enable_btrace (thread_info *tp,
                                     const struct btrace_config *conf)
 {
   struct btrace_target_info *tinfo = nullptr;
+  ptid_t ptid = tp->ptid;
   try
     {
       tinfo = linux_enable_btrace (ptid, conf);
index e0a78bf9f000e99feabc862114ca41c6bc12b0f1..1a562349691bb67492646680d8f49be4663981f3 100644 (file)
@@ -32,7 +32,7 @@ struct x86_linux_nat_target : public x86_nat_target<linux_nat_target>
   /* Add the description reader.  */
   const struct target_desc *read_description () override;
 
-  struct btrace_target_info *enable_btrace (ptid_t ptid,
+  struct btrace_target_info *enable_btrace (thread_info *tp,
                                            const struct btrace_config *conf) override;
   void disable_btrace (struct btrace_target_info *tinfo) override;
   void teardown_btrace (struct btrace_target_info *tinfo) override;
index 9e571a4d771f7cac2a8aa041d54852756206d09f..cf73bbc70ee63e03b4878b4bd714228fddf3c127 100644 (file)
@@ -6669,10 +6669,10 @@ linux_process_target::qxfer_libraries_svr4 (const char *annex,
 #ifdef HAVE_LINUX_BTRACE
 
 btrace_target_info *
-linux_process_target::enable_btrace (ptid_t ptid,
+linux_process_target::enable_btrace (thread_info *tp,
                                     const btrace_config *conf)
 {
-  return linux_enable_btrace (ptid, conf);
+  return linux_enable_btrace (tp->id, conf);
 }
 
 /* See to_disable_btrace target method.  */
index 6ee72d7bd39c974ed867ec10622e1e0e2fc6e6c0..27cc9641f124a871c3290fd0426230fa706cd2e1 100644 (file)
@@ -276,7 +276,7 @@ public:
   bool supports_agent () override;
 
 #ifdef HAVE_LINUX_BTRACE
-  btrace_target_info *enable_btrace (ptid_t ptid,
+  btrace_target_info *enable_btrace (thread_info *tp,
                                     const btrace_config *conf) override;
 
   int disable_btrace (btrace_target_info *tinfo) override;
index 4177239f4a62d7ff8956c430df41be7f5cdbd67f..8e53f226d3c06230070096a90683aaf0d29562b9 100644 (file)
@@ -409,7 +409,7 @@ handle_btrace_enable_bts (struct thread_info *thread)
     error (_("Btrace already enabled."));
 
   current_btrace_conf.format = BTRACE_FORMAT_BTS;
-  thread->btrace = target_enable_btrace (thread->id, &current_btrace_conf);
+  thread->btrace = target_enable_btrace (thread, &current_btrace_conf);
 }
 
 /* Handle btrace enabling in Intel Processor Trace format.  */
@@ -421,7 +421,7 @@ handle_btrace_enable_pt (struct thread_info *thread)
     error (_("Btrace already enabled."));
 
   current_btrace_conf.format = BTRACE_FORMAT_PT;
-  thread->btrace = target_enable_btrace (thread->id, &current_btrace_conf);
+  thread->btrace = target_enable_btrace (thread, &current_btrace_conf);
 }
 
 /* Handle btrace disabling.  */
index 5165957aed752cf144c8b33c5a396930d6fb7530..5009146d66373665ea74c92ffc42a5cd0a377e9e 100644 (file)
@@ -736,7 +736,8 @@ process_stratum_target::supports_agent ()
 }
 
 btrace_target_info *
-process_stratum_target::enable_btrace (ptid_t ptid, const btrace_config *conf)
+process_stratum_target::enable_btrace (thread_info *tp,
+                                      const btrace_config *conf)
 {
   error (_("Target does not support branch tracing."));
 }
index f58ed9d08ff283dfdde95d6e4768ecf90bf396a4..aaa9dab742c2bfcc0997589f9b643e98b5b00e0e 100644 (file)
@@ -403,9 +403,9 @@ public:
   /* Return true if target supports debugging agent.  */
   virtual bool supports_agent ();
 
-  /* Enable branch tracing for PTID based on CONF and allocate a branch trace
+  /* Enable branch tracing for TP based on CONF and allocate a branch trace
      target information struct for reading and for disabling branch trace.  */
-  virtual btrace_target_info *enable_btrace (ptid_t ptid,
+  virtual btrace_target_info *enable_btrace (thread_info *tp,
                                             const btrace_config *conf);
 
   /* Disable branch tracing.
@@ -635,9 +635,9 @@ int kill_inferior (process_info *proc);
   the_target->supports_agent ()
 
 static inline struct btrace_target_info *
-target_enable_btrace (ptid_t ptid, const struct btrace_config *conf)
+target_enable_btrace (thread_info *tp, const struct btrace_config *conf)
 {
-  return the_target->enable_btrace (ptid, conf);
+  return the_target->enable_btrace (tp, conf);
 }
 
 static inline int