Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Ozkan Sezer <sezeroz@gmail.com>
To: gdb-patches@sourceware.org
Subject: [PATCH] fix build failure for win64, revise some format strings
Date: Mon, 12 Jul 2010 10:14:00 -0000	[thread overview]
Message-ID: <AANLkTikmIiWftrZjNCeAzF2h9s22-puuc9mzoYg1rHGV@mail.gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 2782 bytes --]

Hi:

The current gdb cvs fails building for win64:

cc1: warnings being treated as errors
../../gdb-cvs/gdb/target.c: In function
'debug_to_can_accel_watchpoint_condition':
../../gdb-cvs/gdb/target.c:3335: error: cast from pointer to integer
of different size
../../gdb-cvs/gdb/target.c: In function 'debug_to_insert_watchpoint':
../../gdb-cvs/gdb/target.c:3424: error: cast from pointer to integer
of different size
../../gdb-cvs/gdb/target.c: In function 'debug_to_remove_watchpoint':
../../gdb-cvs/gdb/target.c:3439: error: cast from pointer to integer
of different size

The warnings are due to the unsigned long casts in gdb/target.c
with assumption of LP64 behavior which isn't true for wih64 (LLP64).
There are even more unsigned long casts there which aren't
causing warnings but still truncating the value.

I thought that it would be best to solve this using inttypes.h macros.
An initial patch is attached. Since gdb already uses gnulib for stdint,
it can also use inttypes.

In the patch, I also touched gdbserver/server.c in order to fix
another format string issue with windows:

../../../gdb-cvs/gdb/gdbserver/server.c: In function 'handle_query':
../../../gdb-cvs/gdb/gdbserver/server.c:1542: warning: unknown
conversion type character 'l' in format
../../../gdb-cvs/gdb/gdbserver/server.c:1542: warning: too many
arguments for format
../../../gdb-cvs/gdb/gdbserver/server.c:1566: warning: unknown
conversion type character 'l' in format
../../../gdb-cvs/gdb/gdbserver/server.c:1566: warning: too many
arguments for format

These warnings are due to the fact that M$ doesn't support %ll.
Fixed by using %I64d with _WIN32 ifdefs.

Patch was test by compiling gdb for x86_64-linux and for x86_64-w64-mingw32
where both targets already provide inttypes.h.

	* target.c: Include inttypes.h.
	(debug_to_insert_breakpoint): Remove unnecessary unsigned long casts
	from int type variables. For pointers, cast to uintptr_t instead of
	unsigned long and use the PRIuPTR macro from inttypes.h instead of %ld.
	(debug_to_remove_breakpoint): Likewise.
	(debug_to_can_use_hw_breakpoint): Likewise.
	(debug_to_region_ok_for_hw_watchpoint): Likewise.
	(debug_to_can_accel_watchpoint_condition): Likewise.
	(debug_to_stopped_by_watchpoint): Likewise.
	(debug_to_stopped_data_address): Likewise.
	(debug_to_watchpoint_addr_within_range): Likewise.
	(debug_to_insert_hw_breakpoint): Likewise.
	(debug_to_remove_hw_breakpoint): Likewise.
	(debug_to_insert_watchpoint): Likewise.
	(debug_to_remove_watchpoint): Likewise.

	gdbserver/server.c (handle_query): For windows, Use %I64d instead of
	%lld in the sprintf format string.

Note: if this patch is OK'ed, someone with an experience with gnulib should
import inttypes into gdb (I don't feel at home with gnulib.)

Regards.

--
Ozkan

[-- Attachment #2: gdb_pformat.diff --]
[-- Type: application/octet-stream, Size: 6930 bytes --]

Index: gdb/target.c
===================================================================
RCS file: /cvs/src/src/gdb/target.c,v
retrieving revision 1.259
diff -u -p -r1.259 target.c
--- gdb/target.c	7 Jul 2010 16:15:17 -0000	1.259
+++ gdb/target.c	12 Jul 2010 07:20:37 -0000
@@ -22,6 +22,7 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
+#include <inttypes.h>
 #include <errno.h>
 #include "gdb_string.h"
 #include "target.h"
@@ -3270,9 +3271,8 @@ debug_to_insert_breakpoint (struct gdbar
   retval = debug_target.to_insert_breakpoint (gdbarch, bp_tgt);
 
   fprintf_unfiltered (gdb_stdlog,
-		      "target_insert_breakpoint (0x%lx, xxx) = %ld\n",
-		      (unsigned long) bp_tgt->placed_address,
-		      (unsigned long) retval);
+		      "target_insert_breakpoint (0x%" PRIuPTR ", xxx) = %d\n",
+		      (uintptr_t) bp_tgt->placed_address, retval);
   return retval;
 }
 
@@ -3285,9 +3285,8 @@ debug_to_remove_breakpoint (struct gdbar
   retval = debug_target.to_remove_breakpoint (gdbarch, bp_tgt);
 
   fprintf_unfiltered (gdb_stdlog,
-		      "target_remove_breakpoint (0x%lx, xxx) = %ld\n",
-		      (unsigned long) bp_tgt->placed_address,
-		      (unsigned long) retval);
+		      "target_remove_breakpoint (0x%" PRIuPTR ", xxx) = %d\n",
+		      (intptr_t) bp_tgt->placed_address, retval);
   return retval;
 }
 
@@ -3299,11 +3298,8 @@ debug_to_can_use_hw_breakpoint (int type
   retval = debug_target.to_can_use_hw_breakpoint (type, cnt, from_tty);
 
   fprintf_unfiltered (gdb_stdlog,
-		      "target_can_use_hw_breakpoint (%ld, %ld, %ld) = %ld\n",
-		      (unsigned long) type,
-		      (unsigned long) cnt,
-		      (unsigned long) from_tty,
-		      (unsigned long) retval);
+		      "target_can_use_hw_breakpoint (%d, %d, %d) = %d\n",
+		      type, cnt, from_tty, retval);
   return retval;
 }
 
@@ -3315,10 +3311,9 @@ debug_to_region_ok_for_hw_watchpoint (CO
   retval = debug_target.to_region_ok_for_hw_watchpoint (addr, len);
 
   fprintf_unfiltered (gdb_stdlog,
-		      "target_region_ok_for_hw_watchpoint (%ld, %ld) = 0x%lx\n",
-		      (unsigned long) addr,
-		      (unsigned long) len,
-		      (unsigned long) retval);
+		      "target_region_ok_for_hw_watchpoint (%" PRIuPTR \
+		      ", %d) = 0x%" PRIuPTR "\n",
+		      (uintptr_t) addr, len, (uintptr_t) retval);
   return retval;
 }
 
@@ -3331,9 +3326,9 @@ debug_to_can_accel_watchpoint_condition 
   retval = debug_target.to_can_accel_watchpoint_condition (addr, len, rw, cond);
 
   fprintf_unfiltered (gdb_stdlog,
-		      "target_can_accel_watchpoint_condition (0x%lx, %d, %d, 0x%lx) = %ld\n",
-		      (unsigned long) addr, len, rw, (unsigned long) cond,
-		      (unsigned long) retval);
+		      "target_can_accel_watchpoint_condition (0x%" PRIuPTR \
+		      ", %d, %d, 0x%" PRIuPTR ") = %d\n",
+		      addr, len, rw, (intptr_t) cond, retval);
   return retval;
 }
 
@@ -3345,8 +3340,7 @@ debug_to_stopped_by_watchpoint (void)
   retval = debug_target.to_stopped_by_watchpoint ();
 
   fprintf_unfiltered (gdb_stdlog,
-		      "target_stopped_by_watchpoint () = %ld\n",
-		      (unsigned long) retval);
+		      "target_stopped_by_watchpoint () = %d\n", retval);
   return retval;
 }
 
@@ -3358,9 +3352,8 @@ debug_to_stopped_data_address (struct ta
   retval = debug_target.to_stopped_data_address (target, addr);
 
   fprintf_unfiltered (gdb_stdlog,
-		      "target_stopped_data_address ([0x%lx]) = %ld\n",
-		      (unsigned long)*addr,
-		      (unsigned long)retval);
+		      "target_stopped_data_address ([0x%" PRIuPTR "]) = %d\n",
+		      (uintptr_t)*addr, retval);
   return retval;
 }
 
@@ -3375,9 +3368,9 @@ debug_to_watchpoint_addr_within_range (s
 							 start, length);
 
   fprintf_filtered (gdb_stdlog,
-		    "target_watchpoint_addr_within_range (0x%lx, 0x%lx, %d) = %d\n",
-		    (unsigned long) addr, (unsigned long) start, length,
-		    retval);
+		    "target_watchpoint_addr_within_range (0x%" PRIuPTR \
+		    ", 0x%" PRIuPTR ", %d) = %d\n",
+		    (uintptr_t) addr, (uintptr_t) start, length, retval);
   return retval;
 }
 
@@ -3390,9 +3383,9 @@ debug_to_insert_hw_breakpoint (struct gd
   retval = debug_target.to_insert_hw_breakpoint (gdbarch, bp_tgt);
 
   fprintf_unfiltered (gdb_stdlog,
-		      "target_insert_hw_breakpoint (0x%lx, xxx) = %ld\n",
-		      (unsigned long) bp_tgt->placed_address,
-		      (unsigned long) retval);
+		      "target_insert_hw_breakpoint (0x%" PRIuPTR \
+		      ", xxx) = %d\n",
+		      (intptr_t) bp_tgt->placed_address, retval);
   return retval;
 }
 
@@ -3405,9 +3398,9 @@ debug_to_remove_hw_breakpoint (struct gd
   retval = debug_target.to_remove_hw_breakpoint (gdbarch, bp_tgt);
 
   fprintf_unfiltered (gdb_stdlog,
-		      "target_remove_hw_breakpoint (0x%lx, xxx) = %ld\n",
-		      (unsigned long) bp_tgt->placed_address,
-		      (unsigned long) retval);
+		      "target_remove_hw_breakpoint (0x%" PRIuPTR \
+		      ", xxx) = %d\n",
+		      (intptr_t) bp_tgt->placed_address, retval);
   return retval;
 }
 
@@ -3420,9 +3413,10 @@ debug_to_insert_watchpoint (CORE_ADDR ad
   retval = debug_target.to_insert_watchpoint (addr, len, type, cond);
 
   fprintf_unfiltered (gdb_stdlog,
-		      "target_insert_watchpoint (0x%lx, %d, %d, 0x%ld) = %ld\n",
-		      (unsigned long) addr, len, type, (unsigned long) cond,
-		      (unsigned long) retval);
+		      "target_insert_watchpoint (0x%" PRIuPTR \
+		      ", %d, %d, 0x%" PRIuPTR ") = %d\n",
+		      (uintptr_t) addr, len, type, (uintptr_t) cond,
+		      retval);
   return retval;
 }
 
@@ -3435,9 +3429,9 @@ debug_to_remove_watchpoint (CORE_ADDR ad
   retval = debug_target.to_remove_watchpoint (addr, len, type, cond);
 
   fprintf_unfiltered (gdb_stdlog,
-		      "target_remove_watchpoint (0x%lx, %d, %d, 0x%ld) = %ld\n",
-		      (unsigned long) addr, len, type, (unsigned long) cond,
-		      (unsigned long) retval);
+		      "target_remove_watchpoint (0x%" PRIuPTR ", %d, %d, 0x%" PRIuPTR \
+		      ") = %d\n",
+		      (uintptr_t) addr, len, type, (uintptr_t) cond, retval);
   return retval;
 }
 
Index: gdb/gdbserver/server.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/server.c,v
retrieving revision 1.125
diff -u -p -r1.125 server.c
--- gdb/gdbserver/server.c	7 Jul 2010 16:14:04 -0000	1.125
+++ gdb/gdbserver/server.c	12 Jul 2010 09:50:13 -0000
@@ -1539,7 +1539,11 @@ handle_query (char *own_buf, int packet_
 
       if (err == 0)
 	{
+#ifdef _WIN32
+	  sprintf (own_buf, "%I64d", address);
+#else
 	  sprintf (own_buf, "%llx", address);
+#endif
 	  return;
 	}
       else if (err > 0)
@@ -1563,7 +1567,11 @@ handle_query (char *own_buf, int packet_
       n = (*the_target->get_tib_address) (ptid, &tlb);
       if (n == 1)
 	{
+#ifdef _WIN32
+	  sprintf (own_buf, "%I64d", tlb);
+#else
 	  sprintf (own_buf, "%llx", tlb);
+#endif
 	  return;
 	}
       else if (n == 0)

             reply	other threads:[~2010-07-12 10:14 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-12 10:14 Ozkan Sezer [this message]
2010-07-12 11:51 ` Ozkan Sezer
2010-07-15 18:55   ` Ozkan Sezer
2010-07-16 15:36     ` Tom Tromey
2010-07-16 17:18       ` Ozkan Sezer
2010-07-16 18:47         ` Tom Tromey
2010-07-16 18:50           ` Ozkan Sezer
2010-07-16 19:07             ` Tom Tromey
2010-07-16 19:30               ` Ozkan Sezer
2010-07-16 19:53                 ` Tom Tromey
2010-07-16 20:10                   ` Ozkan Sezer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=AANLkTikmIiWftrZjNCeAzF2h9s22-puuc9mzoYg1rHGV@mail.gmail.com \
    --to=sezeroz@gmail.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox