This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Use the target architecture when encoding tracepoint actions


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=82e9becd8afe1d7c9971096592bf312637d9437f

commit 82e9becd8afe1d7c9971096592bf312637d9437f
Author: Antoine Tremblay <antoine.tremblay@ericsson.com>
Date:   Thu Feb 11 08:14:12 2016 -0500

    Use the target architecture when encoding tracepoint actions
    
    This patch uses the target architecture rather then the objfile
    architecture when encoding tracepoint actions.
    
    The target architecture may contain additional registers. E.g. ARM VFP
    registers. This information is needed to allow their collection. Since we
    can never know whether the registers numbers in the target match the
    binary's we have to use tdesc here.
    
    One note about combined debuggers / multi-inferior from Pedro Alves:
    
    In the combined debugger case taking Cell as the practical example that
    gdb supports currently:
    
    In that case, the main target_gdbarch() will be powerpc, but you may have set a
    tracepoint on _spu_ code, which has a different gdbarch.  so for that case,
    target_gdbarch would be wrong.  I think that in that case, we'd need to
    find __the_ target/tdesc gdbarch that is (bfd) compatible with the
    objfile's gdbarch.
    
    I think cell/spu gdbserver doesn't support tracepoints, so we can ignore
    this for now.
    
    The multi-inferior/process case is somewhat related, but its simpler.
    each inferior has its own gdbarch.
    
    That is, target_gdbarch depends on the current inferior selected.
    In fact, that just returns inferior->gdbarch nowaways.
    
    No regressions, tested on ubuntu 14.04 ARMv7 and x86.
    With gdbserver-{native,extended} / { -marm -mthumb }
    
    gdb/ChangeLog:
    
    	* tracepoint.c (encode_actions_1): Use target_gdbarch () rather
    	than loc->gdbarch.

Diff:
---
 gdb/ChangeLog    |  5 +++++
 gdb/tracepoint.c | 12 ++++++------
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0ed35fa..31d01cb 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2016-02-11  Antoine Tremblay  <antoine.tremblay@ericsson.com>
+
+	* tracepoint.c (encode_actions_1): Use target_gdbarch () rather
+	than loc->gdbarch.
+
 2016-02-10  Marcin KoÅ?cielnicki  <koriakin@0x04.net>
 
 	* tracefile-tfile.c (trace_tdesc): New static variable.
diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c
index bc45470..8b393db 100644
--- a/gdb/tracepoint.c
+++ b/gdb/tracepoint.c
@@ -1428,14 +1428,14 @@ encode_actions_1 (struct command_line *action,
 
 	      if (0 == strncasecmp ("$reg", action_exp, 4))
 		{
-		  for (i = 0; i < gdbarch_num_regs (tloc->gdbarch); i++)
+		  for (i = 0; i < gdbarch_num_regs (target_gdbarch ()); i++)
 		    add_register (collect, i);
 		  action_exp = strchr (action_exp, ',');	/* more? */
 		}
 	      else if (0 == strncasecmp ("$arg", action_exp, 4))
 		{
 		  add_local_symbols (collect,
-				     tloc->gdbarch,
+				     target_gdbarch (),
 				     tloc->address,
 				     frame_reg,
 				     frame_offset,
@@ -1446,7 +1446,7 @@ encode_actions_1 (struct command_line *action,
 	      else if (0 == strncasecmp ("$loc", action_exp, 4))
 		{
 		  add_local_symbols (collect,
-				     tloc->gdbarch,
+				     target_gdbarch (),
 				     tloc->address,
 				     frame_reg,
 				     frame_offset,
@@ -1459,7 +1459,7 @@ encode_actions_1 (struct command_line *action,
 		  struct cleanup *old_chain1 = NULL;
 
 		  aexpr = gen_trace_for_return_address (tloc->address,
-							tloc->gdbarch,
+							target_gdbarch (),
 							trace_string);
 
 		  old_chain1 = make_cleanup_free_agent_expr (aexpr);
@@ -1513,7 +1513,7 @@ encode_actions_1 (struct command_line *action,
 		      {
 			const char *name = &exp->elts[2].string;
 
-			i = user_reg_map_name_to_regnum (tloc->gdbarch,
+			i = user_reg_map_name_to_regnum (target_gdbarch (),
 							 name, strlen (name));
 			if (i == -1)
 			  internal_error (__FILE__, __LINE__,
@@ -1543,7 +1543,7 @@ encode_actions_1 (struct command_line *action,
 
 			collect_symbol (collect,
 					exp->elts[2].symbol,
-					tloc->gdbarch,
+					target_gdbarch (),
 					frame_reg,
 					frame_offset,
 					tloc->address,


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]