[Prec/RFA] fix build error of prec in cygwin
Hui Zhu
teawater@gmail.com
Sun May 10 17:31:00 GMT 2009
Hi guys,
This patch is to fix build error of prec in cgywin.
Pierre had help me tested it both in 32bit and 64bit CORE_ADDR length.
Please help me review it.
2009-05-11 Hui Zhu <teawater@gmail.com>
Add sys_fcntl argument interfaces to linux_record_tdep.
* linux-record.h (linux_record_tdep): Add fcntl_F_GETLK,
fcntl_F_GETLK64, fcntl_F_SETLK64 and fcntl_F_SETLKW64 to be
interfaces.
* i386-linux-tdep.c (I386_LINUX_RECORD_FCNTL_F_GETLK,
I386_LINUX_RECORD_FCNTL_F_GETLK64,
I386_LINUX_RECORD_FCNTL_F_SETLK64,
I386_LINUX_RECORD_FCNTL_F_SETLKW64): New macros. The values
of I386 Linux sys_fcntl arguments.
(i386_linux_init_abi): Set macros values to linux_record_tdep.
* linux-record.c (record_linux_system_call): Change to use
the interface in linux_record_tdep in sys_fcntl and
sys_fcntl64.
* linux-record.c (record_linux_system_call): Fix the process
record build error about type in CYGWIN.
Thanks,
Hui
On Fri, May 8, 2009 at 20:11, Pierre Muller <muller@ics.u-strasbg.fr> wrote:
> I tested this both in 32bit and 64bit CORE_ADDR length.
>
> I can confirm that cygwin compilation is fixed in both
> cases with that patch and hope it will be approved
> rapidly.
>
> Thanks, Hui.
>
>
> Pierre Muller
> Pascal language support maintainer for GDB
>
>
>
>
>> -----Message d'origine-----
>> De : gdb-patches-owner@sourceware.org [mailto:gdb-patches-
>> owner@sourceware.org] De la part de Hui Zhu
>> Envoyé : Friday, May 08, 2009 7:12 AM
>> À : Pierre Muller
>> Cc : gdb-patches@sourceware.org; Michael Snyder; Pedro Alves
>> Objet : Re: Process record and replay checked in to main trunk
>>
>> Hi Pierre,
>>
>> I make a patch to fix this bug, but I don't have cygwin.
>>
>> Could you please help me test this patch in cygwin?
>>
>> Thanks,
>> Hui
>>
>> On Fri, May 8, 2009 at 07:06, Pedro Alves <pedro@codesourcery.com>
>> wrote:
>> > On Thursday 07 May 2009 23:43:13, Michael Snyder wrote:
>> >> Guessing it isn't implemented for 64 bit.
>> >
>> > I don't think that's the problem here. Cygwin is 32-bit, and has
>> > 32-bit ints.
>> >
>> >> ../../purecvs/gdb/linux-record.c:397: warning: unsigned int format,
>> >> uint32_t arg
>> >
>> >> ../../purecvs/gdb/linux-record.c:629: warning: int format, uint32_t
>> >> arg (arg
>> >
>> > Better use casts, or use plongest/pulongest/hex_string where
>> appropriate?
>> >
>> >> Perhaps we should have a --disable-process-record config option?
>> >> If only for a back-up plan?
>> >
>> > I think that would be more work than fixing this properly. :-)
>> >
>> >> ../../purecvs/gdb/linux-record.c:1636: error: `F_GETLK64' undeclared
>> >> (first use in this function)
>> >
>> > There are a bunch of RECORD_* macros defined on top of linux-record.c
>> > to replace contants like these. E.g., RECORD_Q_GETFMT. Looks like
>> > this case was just missed.
>> >
>> > --
>> > Pedro Alves
>> >
>
>
-------------- next part --------------
---
i386-linux-tdep.c | 14 ++++++++++++++
linux-record.c | 28 +++++++++++++---------------
linux-record.h | 7 +++++++
3 files changed, 34 insertions(+), 15 deletions(-)
--- a/i386-linux-tdep.c
+++ b/i386-linux-tdep.c
@@ -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)
{
@@ -781,6 +789,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;
--- a/linux-record.c
+++ b/linux-record.c
@@ -394,7 +394,7 @@ record_linux_system_call (int num, struc
{
printf_unfiltered (_("Process record and replay target doesn't "
"support ioctl request 0x%08x.\n"),
- tmpu32);
+ (int)tmpu32);
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);
@@ -626,7 +626,7 @@ record_linux_system_call (int num, struc
"It will free the memory addr = 0x%s len = %d. "
"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;
@@ -935,7 +935,7 @@ record_linux_system_call (int num, struc
default:
printf_unfiltered (_("Process record and replay target "
"doesn't support socketcall call 0x%08x\n"),
- tmpu32);
+ (int)tmpu32);
return -1;
break;
}
@@ -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;
@@ -1786,7 +1783,8 @@ record_linux_system_call (int num, struc
fprintf_unfiltered (gdb_stdlog,
"Process record: error reading memory "
"at addr = 0x%s len = %d.\n",
- paddr_nz (tmpu32), nr * tdep->size_int);
+ paddr_nz (tmpu32),
+ (int)(nr * tdep->size_int));
return -1;
}
for (i = 0; i < nr; i++)
@@ -2196,7 +2194,7 @@ record_linux_system_call (int num, struc
default:
printf_unfiltered (_("Process record and replay target doesn't "
"support syscall number 0x%08x\n"),
- tmpu32);
+ (int)tmpu32);
return -1;
break;
}
--- a/linux-record.h
+++ b/linux-record.h
@@ -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