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] gdb.trace: Fix write_inferior_data_ptr on 32-bit big-endian machines.


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

commit 99e8eb11cfcdde8cba6755ed4613c3cb079dfaa4
Author: Marcin KoÅ?cielnicki <koriakin@0x04.net>
Date:   Fri Jan 22 14:25:02 2016 +0100

    gdb.trace: Fix write_inferior_data_ptr on 32-bit big-endian machines.
    
    Noticed and tested on 31-bit s390.  This bug caused completely broken
    fast tracepoints.
    
    gdb/gdbserver/ChangeLog:
    
    	* tracepoint.c (write_inferior_data_ptr): Cast to uintptr_t, so that
    	it works properly on big-endian machines where sizeof (CORE_ADDR)
    	!= sizeof (void *).

Diff:
---
 gdb/gdbserver/ChangeLog    | 6 ++++++
 gdb/gdbserver/tracepoint.c | 7 ++++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 9c42fcf..6ddd9ce 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,9 @@
+2016-01-22  Marcin KoÅ?cielnicki  <koriakin@0x04.net>
+
+	* tracepoint.c (write_inferior_data_ptr): Cast to uintptr_t, so that
+	it works properly on big-endian machines where sizeof (CORE_ADDR)
+	!= sizeof (void *).
+
 2016-01-21  Pedro Alves  <palves@redhat.com>
 
 	* Makefile.in (COMPILER_CFLAGS, CXXFLAGS): New.
diff --git a/gdb/gdbserver/tracepoint.c b/gdb/gdbserver/tracepoint.c
index 40d0da9..0671999 100644
--- a/gdb/gdbserver/tracepoint.c
+++ b/gdb/gdbserver/tracepoint.c
@@ -5931,14 +5931,15 @@ compile_tracepoint_condition (struct tracepoint *tpoint,
   *jump_entry += 16;
 }
 
-/* We'll need to adjust these when we consider bi-arch setups, and big
-   endian machines.  */
+/* We'll need to adjust these when we consider bi-arch setups.  */
 
 static int
 write_inferior_data_ptr (CORE_ADDR where, CORE_ADDR ptr)
 {
+  uintptr_t pptr = ptr;
+
   return write_inferior_memory (where,
-				(unsigned char *) &ptr, sizeof (void *));
+				(unsigned char *) &pptr, sizeof pptr);
 }
 
 /* The base pointer of the IPA's heap.  This is the only memory the


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