Add sys_fcntl argument interfaces to linux_record_tdep.
authorHui Zhu <teawater@gmail.com>
Fri, 22 May 2009 14:07:27 +0000 (14:07 +0000)
committerHui Zhu <teawater@gmail.com>
Fri, 22 May 2009 14:07:27 +0000 (14:07 +0000)
* 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.

gdb/i386-linux-tdep.c
gdb/linux-record.c
gdb/linux-record.h

index 0f7820d9412ae7133a3bbdbc2bf53c8de1e48dc5..163b03607d21bfef64a97200de18147930d9e59e 100644 (file)
@@ -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 info, struct gdbarch *gdbarch)
     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 2453faefae24e5222e798d019139796ea4d07052..d0898ffe5e518e6cff6d96b8fc0d4dea024c4ade 100644 (file)
@@ -393,8 +393,8 @@ record_linux_system_call (int num, struct regcache *regcache,
       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, struct regcache *regcache,
       /* 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, struct regcache *regcache,
                if (record_debug)
                  fprintf_unfiltered (gdb_stdlog,
                                      "Process record: error reading memory "
-                                     "at addr = 0x%s len = %d.\n",
+                                     "at addr = 0x%s len = %lu.\n",
                                      paddr_nz (tmpu32),
-                                     (int) sizeof (sel));
+                                     (unsigned long)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, struct regcache *regcache,
        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, struct regcache *regcache,
                    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 = %lu.\n",
                                          paddr_nz (tmpu32),
-                                         (int) sizeof (a));
+                                         (unsigned long)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, struct regcache *regcache,
                    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 = %lu.\n",
                                          paddr_nz (tmpu32),
-                                         (int) sizeof (a));
+                                         (unsigned long)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, struct regcache *regcache,
                    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 = %lu.\n",
                                          paddr_nz (tmpu32),
-                                         (int) sizeof (a));
+                                         (unsigned long)sizeof (a));
                    return -1;
                  }
                if (a[2])
@@ -750,9 +750,9 @@ record_linux_system_call (int num, struct regcache *regcache,
                          fprintf_unfiltered (gdb_stdlog,
                                              "Process record: error reading "
                                              "memory at addr = 0x%s "
-                                             "len = %d.\n",
+                                             "len = %lu.\n",
                                              paddr_nz (a[2]),
-                                             (int) sizeof (a[2]));
+                                             (unsigned long)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, struct regcache *regcache,
                    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 = %lu.\n",
                                          paddr_nz (tmpu32),
-                                         (int) sizeof (a));
+                                         (unsigned long)sizeof (a));
                    return -1;
                  }
                if (a[2])
@@ -787,9 +787,9 @@ record_linux_system_call (int num, struct regcache *regcache,
                          fprintf_unfiltered (gdb_stdlog,
                                              "Process record: error reading "
                                              "memory at addr = 0x%s "
-                                             "len = %d.\n",
+                                             "len = %lu.\n",
                                              paddr_nz (a[2]),
-                                             (int) sizeof (a[2]));
+                                             (unsigned long)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, struct regcache *regcache,
                    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 = %lu.\n",
                                          paddr_nz (tmpu32),
-                                         (int) sizeof (a));
+                                         (unsigned long)sizeof (a));
                    return -1;
                  }
                if (a[4])
@@ -833,9 +833,9 @@ record_linux_system_call (int num, struct regcache *regcache,
                          fprintf_unfiltered (gdb_stdlog,
                                              "Process record: error reading "
                                              "memory at addr = 0x%s "
-                                             "len = %d.\n",
+                                             "len = %lu.\n",
                                              paddr_nz (a[4]),
-                                             (int) sizeof (av));
+                                             (unsigned long)sizeof (av));
                        return -1;
                      }
                    if (record_arch_list_add_mem (a[3], av))
@@ -876,9 +876,9 @@ record_linux_system_call (int num, struct regcache *regcache,
                    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 = %lu.\n",
                                          paddr_nz (tmpu32),
-                                         (int) sizeof (a));
+                                         (unsigned long)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, struct regcache *regcache,
                          fprintf_unfiltered (gdb_stdlog,
                                              "Process record: error reading "
                                              "memory at addr = 0x%s "
-                                             "len = %d.\n",
+                                             "len = %lu.\n",
                                              paddr_nz (a[1]),
-                                             (int) sizeof (rec));
+                                             (unsigned long)sizeof (rec));
                        return -1;
                      }
                    if (record_arch_list_add_mem
@@ -916,10 +916,10 @@ record_linux_system_call (int num, struct regcache *regcache,
                                                      "Process record: error "
                                                      "reading memory at "
                                                      "addr = 0x%s "
-                                                     "len = %d.\n",
+                                                     "len = %lu.\n",
                                                      paddr_nz (rec.
                                                                msg_iov),
-                                                     (int) sizeof (iov));
+                                                     (unsigned long)sizeof (iov));
                                return -1;
                              }
                            if (record_arch_list_add_mem
@@ -934,8 +934,8 @@ record_linux_system_call (int num, struct regcache *regcache,
          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, struct regcache *regcache,
                    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 = %lu.\n",
                                          paddr_nz (vec),
-                                         (int) sizeof (struct record_iovec));
+                                         (unsigned long)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, struct regcache *regcache,
       /* 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, struct regcache *regcache,
              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, struct regcache *regcache,
 
     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 648dcb5928fa3499d8dfd77fca7e6e49de95e2c5..52846a3b6420ac7d5f75c59edb733bc1edbee005 100644 (file)
@@ -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;