[Prec/RFA] fix build error of prec in cygwin

Hui Zhu teawater@gmail.com
Fri May 22 05:53:00 GMT 2009


On Fri, May 22, 2009 at 12:13, Christopher Faylor
<cgf-use-the-mailinglist-please@sourceware.org> wrote:
> On Fri, May 22, 2009 at 10:12:01AM +0800, Hui Zhu wrote:
>>On Fri, May 22, 2009 at 08:46, Christopher Faylor
>><cgf-use-the-mailinglist-please@sourceware.org> wrote:
>>> On Fri, May 22, 2009 at 07:14:48AM +0800, Hui Zhu wrote:
>>>>On Fri, May 22, 2009 at 01:38, Christopher Faylor ?wrote:
>>>>> On Fri, May 22, 2009 at 12:43:07AM +0800, Hui Zhu wrote:
>>>>>>Thanks for you help me review my patch. ?Could you give me some help
>>>>>>with it? ?Actually, try something with cygwin still a very hard thing
>>>>>>for me. ?I just can use it in a notebook of other guy. ?And I had
>>>>>>return it. ?Maybe you can make a patch for this bug. ?That will be very
>>>>>>great for me.
>>>>>
>>>>>I don't see why this has anything to do with Cygwin. ??We're talking
>>>>>about general principles here. ?If you know C, which you obviously do,
>>>>>then I don't really understand why this needs a lot of explanation.
>>>>>Look at the places where you're using coercion with a format string and
>>>>>just use the right format specifier instead.
>>>>
>>>>Because the patch must be work OK with cygwin. ?Even if for the format.
>>>>I think you must have a lot of good idea with it. ?We need your help.
>>>>That is very great for me. ?Thanks a lot.
>>>
>>> No need to thank me yet. ?I'll be happy to review your change when you
>>> make the simple changes that I requested. ?You can hold off thanking me
>>> until then.
>>
>>About %u and sizeof, if without (int). It's OK with cygwin.  But it
>>cannot work OK with amd64.
>>It will get:
>>../../src/gdb/linux-record.c: In function ?record_linux_system_call?:
>>../../src/gdb/linux-record.c:551: warning: format ?%u? expects type
>>?unsigned int?, but argument 4 has type ?long unsigned int?
>>Could you give me some help with it?
>
> "%zu"
>
Please help me review this patch.

Thanks,
Hui
-------------- next part --------------
Index: i386-linux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/i386-linux-tdep.c,v
retrieving revision 1.62
diff -p -u -r1.62 i386-linux-tdep.c
--- i386-linux-tdep.c	17 May 2009 12:26:44 -0000	1.62
+++ i386-linux-tdep.c	22 May 2009 05:51:41 -0000
@@ -586,6 +586,14 @@ static int i386_linux_sc_reg_offset[] =
 #define I386_LINUX_RECORD_IOCTL_TIOCSHAYESESP		0x545F
 #define I386_LINUX_RECORD_IOCTL_FIOQSIZE		0x5460
 
+/* The values of the second argument of system call "sys_fcntl"
+   and "sys_fcntl64".  The values of these macros were obtained from
+   Linux Kernel source.  */
+#define I386_LINUX_RECORD_FCNTL_F_GETLK			5
+#define I386_LINUX_RECORD_FCNTL_F_GETLK64		12
+#define I386_LINUX_RECORD_FCNTL_F_SETLK64		13
+#define I386_LINUX_RECORD_FCNTL_F_SETLKW64		14
+
 static void
 i386_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
@@ -783,6 +791,12 @@ i386_linux_init_abi (struct gdbarch_info
     I386_LINUX_RECORD_IOCTL_TIOCSHAYESESP;
   i386_linux_record_tdep.ioctl_FIOQSIZE = I386_LINUX_RECORD_IOCTL_FIOQSIZE;
 
+  i386_linux_record_tdep.fcntl_F_GETLK = I386_LINUX_RECORD_FCNTL_F_GETLK;
+  i386_linux_record_tdep.fcntl_F_GETLK64 = I386_LINUX_RECORD_FCNTL_F_GETLK64;
+  i386_linux_record_tdep.fcntl_F_SETLK64 = I386_LINUX_RECORD_FCNTL_F_SETLK64;
+  i386_linux_record_tdep.fcntl_F_SETLKW64 =
+    I386_LINUX_RECORD_FCNTL_F_SETLKW64;
+
   i386_linux_record_tdep.arg1 = I386_EBX_REGNUM;
   i386_linux_record_tdep.arg2 = I386_ECX_REGNUM;
   i386_linux_record_tdep.arg3 = I386_EDX_REGNUM;
Index: linux-record.c
===================================================================
RCS file: /cvs/src/src/gdb/linux-record.c,v
retrieving revision 1.2
diff -p -u -r1.2 linux-record.c
--- linux-record.c	30 Apr 2009 03:04:28 -0000	1.2
+++ linux-record.c	22 May 2009 05:51:42 -0000
@@ -393,8 +393,8 @@ record_linux_system_call (int num, struc
       else
 	{
 	  printf_unfiltered (_("Process record and replay target doesn't "
-			       "support ioctl request 0x%08x.\n"),
-			     tmpu32);
+			       "support ioctl request 0x%s.\n"),
+			     phex_nz (tmpu32, 4));
 	  return 1;
 	}
       break;
@@ -404,7 +404,7 @@ record_linux_system_call (int num, struc
       /* XXX */
       regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
     sys_fcntl:
-      if (tmpu32 == F_GETLK)
+      if (tmpu32 == tdep->fcntl_F_GETLK)
 	{
 	  regcache_raw_read (regcache, tdep->arg3,
 			     (gdb_byte *) & tmpu32);
@@ -546,9 +546,9 @@ record_linux_system_call (int num, struc
 		if (record_debug)
 		  fprintf_unfiltered (gdb_stdlog,
 				      "Process record: error reading memory "
-				      "at addr = 0x%s len = %d.\n",
+				      "at addr = 0x%s len = %zu.\n",
 				      paddr_nz (tmpu32),
-				      (int) sizeof (sel));
+				      sizeof (sel));
 		return -1;
 	      }
 	    if (record_arch_list_add_mem (sel.inp, tdep->size_fd_set))
@@ -623,10 +623,10 @@ record_linux_system_call (int num, struc
 	target_terminal_ours ();
 	q =
 	  yquery (_("The next instruction is syscall munmap.  "
-		    "It will free the memory addr = 0x%s len = %d.  "
+		    "It will free the memory addr = 0x%s len = %u.  "
 		    "It will make record target get error.  "
 		    "Do you want to stop the program?"),
-		  paddr_nz (tmpu32), len);
+		  paddr_nz (tmpu32), (int)len);
 	target_terminal_inferior ();
 	if (q)
 	  return 1;
@@ -686,9 +686,9 @@ record_linux_system_call (int num, struc
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %d.\n",
+					  "memory at addr = 0x%s len = %zu.\n",
 					  paddr_nz (tmpu32),
-					  (int) sizeof (a));
+					  sizeof (a));
 		    return -1;
 		  }
 		if (record_arch_list_add_mem (a[1], tdep->size_sockaddr))
@@ -711,9 +711,9 @@ record_linux_system_call (int num, struc
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %d.\n",
+					  "memory at addr = 0x%s len = %zu.\n",
 					  paddr_nz (tmpu32),
-				          (int) sizeof (a));
+				          sizeof (a));
 		    return -1;
 		  }
 		if (record_arch_list_add_mem (a[3], tdep->size_int))
@@ -736,9 +736,9 @@ record_linux_system_call (int num, struc
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %d.\n",
+					  "memory at addr = 0x%s len = %zu.\n",
 					  paddr_nz (tmpu32),
-					  (int) sizeof (a));
+					  sizeof (a));
 		    return -1;
 		  }
 		if (a[2])
@@ -750,9 +750,9 @@ record_linux_system_call (int num, struc
 			  fprintf_unfiltered (gdb_stdlog,
 					      "Process record: error reading "
 					      "memory at addr = 0x%s "
-					      "len = %d.\n",
+					      "len = %zu.\n",
 					      paddr_nz (a[2]),
-					      (int) sizeof (a[2]));
+					      sizeof (a[2]));
 			return -1;
 		      }
 		    if (record_arch_list_add_mem (a[1], a[2]))
@@ -773,9 +773,9 @@ record_linux_system_call (int num, struc
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %d.\n",
+					  "memory at addr = 0x%s len = %zu.\n",
 					  paddr_nz (tmpu32),
-					  (int) sizeof (a));
+					  sizeof (a));
 		    return -1;
 		  }
 		if (a[2])
@@ -787,9 +787,9 @@ record_linux_system_call (int num, struc
 			  fprintf_unfiltered (gdb_stdlog,
 					      "Process record: error reading "
 					      "memory at addr = 0x%s "
-					      "len = %d.\n",
+					      "len = %zu.\n",
 					      paddr_nz (a[2]),
-					      (int) sizeof (a[2]));
+					      sizeof (a[2]));
 			return -1;
 		      }
 		    if (record_arch_list_add_mem (a[1], a[2]))
@@ -819,9 +819,9 @@ record_linux_system_call (int num, struc
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %d.\n",
+					  "memory at addr = 0x%s len = %zu.\n",
 					  paddr_nz (tmpu32),
-					  (int) sizeof (a));
+					  sizeof (a));
 		    return -1;
 		  }
 		if (a[4])
@@ -833,9 +833,9 @@ record_linux_system_call (int num, struc
 			  fprintf_unfiltered (gdb_stdlog,
 					      "Process record: error reading "
 					      "memory at addr = 0x%s "
-					      "len = %d.\n",
+					      "len = %zu.\n",
 					      paddr_nz (a[4]),
-					      (int) sizeof (av));
+					      sizeof (av));
 			return -1;
 		      }
 		    if (record_arch_list_add_mem (a[3], av))
@@ -876,9 +876,9 @@ record_linux_system_call (int num, struc
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %d.\n",
+					  "memory at addr = 0x%s len = %zu.\n",
 					  paddr_nz (tmpu32),
-					  (int) sizeof (a));
+					  sizeof (a));
 		    return -1;
 		  }
 		if (record_arch_list_add_mem (a[1], tdep->size_msghdr))
@@ -892,9 +892,9 @@ record_linux_system_call (int num, struc
 			  fprintf_unfiltered (gdb_stdlog,
 					      "Process record: error reading "
 					      "memory at addr = 0x%s "
-					      "len = %d.\n",
+					      "len = %zu.\n",
 					      paddr_nz (a[1]),
-					      (int) sizeof (rec));
+					      sizeof (rec));
 			return -1;
 		      }
 		    if (record_arch_list_add_mem
@@ -916,10 +916,10 @@ record_linux_system_call (int num, struc
 						      "Process record: error "
 						      "reading memory at "
 						      "addr = 0x%s "
-						      "len = %d.\n",
+						      "len = %zu.\n",
 						      paddr_nz (rec.
 								msg_iov),
-						      (int) sizeof (iov));
+						      sizeof (iov));
 				return -1;
 			      }
 			    if (record_arch_list_add_mem
@@ -934,8 +934,8 @@ record_linux_system_call (int num, struc
 	  break;
 	default:
 	  printf_unfiltered (_("Process record and replay target "
-			       "doesn't support socketcall call 0x%08x\n"),
-			     tmpu32);
+			       "doesn't support socketcall call 0x%s\n"),
+			     phex_nz (tmpu32, 4));
 	  return -1;
 	  break;
 	}
@@ -1233,9 +1233,9 @@ record_linux_system_call (int num, struc
 		    if (record_debug)
 		      fprintf_unfiltered (gdb_stdlog,
 					  "Process record: error reading "
-					  "memory at addr = 0x%s len = %d.\n",
+					  "memory at addr = 0x%s len = %zu.\n",
 					  paddr_nz (vec),
-					  (int) sizeof (struct record_iovec));
+					  sizeof (struct record_iovec));
 		    return -1;
 		  }
 		if (record_arch_list_add_mem (iov.iov_base, iov.iov_len))
@@ -1631,20 +1631,17 @@ record_linux_system_call (int num, struc
       /* sys_fcntl64 */
     case 221:
       regcache_raw_read (regcache, tdep->arg2, (gdb_byte *) & tmpu32);
-      switch (tmpu32)
-	{
-	case F_GETLK64:
+      if (tmpu32 == tdep->fcntl_F_GETLK64)
+        {
 	  regcache_raw_read (regcache, tdep->arg3,
 			     (gdb_byte *) & tmpu32);
 	  if (record_arch_list_add_mem (tmpu32, tdep->size_flock64))
 	    return -1;
-	  break;
-	case F_SETLK64:
-	case F_SETLKW64:
-	  break;
-	default:
+	}
+      else if (tmpu32 != tdep->fcntl_F_SETLK64
+	       && tmpu32 != tdep->fcntl_F_SETLKW64)
+        {
 	  goto sys_fcntl;
-	  break;
 	}
       break;
 
@@ -1785,8 +1782,9 @@ record_linux_system_call (int num, struc
 	      if (record_debug)
 		fprintf_unfiltered (gdb_stdlog,
 				    "Process record: error reading memory "
-				    "at addr = 0x%s len = %d.\n",
-				    paddr_nz (tmpu32), nr * tdep->size_int);
+				    "at addr = 0x%s len = %u.\n",
+				    paddr_nz (tmpu32),
+				    (int)(nr * tdep->size_int));
 	      return -1;
 	    }
 	  for (i = 0; i < nr; i++)
@@ -2195,8 +2193,8 @@ record_linux_system_call (int num, struc
 
     default:
       printf_unfiltered (_("Process record and replay target doesn't "
-			   "support syscall number 0x%08x\n"),
-			 tmpu32);
+			   "support syscall number %u\n"),
+			 (int)tmpu32);
       return -1;
       break;
     }
Index: linux-record.h
===================================================================
RCS file: /cvs/src/src/gdb/linux-record.h,v
retrieving revision 1.2
diff -p -u -r1.2 linux-record.h
--- linux-record.h	30 Apr 2009 03:04:28 -0000	1.2
+++ linux-record.h	22 May 2009 05:51:42 -0000
@@ -158,6 +158,13 @@ struct linux_record_tdep
   int ioctl_TIOCSHAYESESP;
   int ioctl_FIOQSIZE;
 
+  /* The values of the second argument of system call "sys_fcntl"
+     and "sys_fcntl64".  */
+  int fcntl_F_GETLK;
+  int fcntl_F_GETLK64;
+  int fcntl_F_SETLK64;
+  int fcntl_F_SETLKW64;
+
   /* The number of the registers that are used as the arguments of
      a system call.  */
   int arg1;


More information about the Gdb-patches mailing list