]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Clean up after m_syscalls changes: fix more NPTL ish syscalls (x86)
authorJulian Seward <jseward@acm.org>
Wed, 8 Jun 2005 01:01:48 +0000 (01:01 +0000)
committerJulian Seward <jseward@acm.org>
Wed, 8 Jun 2005 01:01:48 +0000 (01:01 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3851

coregrind/m_syscalls/syscalls-generic.c
coregrind/m_syscalls/syscalls-linux.c
coregrind/m_syscalls/syscalls-x86-linux.c

index 910c4c2159c08a5f1061f4890b17664f2c6a6e06..eaff12276745784867d5d4e1c020f1df68093307 100644 (file)
@@ -2713,12 +2713,13 @@ PRE(sys_fork)
    }
 }
 
-//zz PRE(sys_ftruncate, SfMayBlock)
-//zz {
-//zz    PRINT("sys_ftruncate ( %d, %lld )", ARG1,(ULong)ARG2);
-//zz    PRE_REG_READ2(long, "ftruncate", unsigned int, fd, unsigned long, length);
-//zz }
-//zz 
+PRE(sys_ftruncate)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_ftruncate ( %d, %lld )", ARG1,(ULong)ARG2);
+   PRE_REG_READ2(long, "ftruncate", unsigned int, fd, unsigned long, length);
+}
+
 //zz PRE(sys_truncate, SfMayBlock)
 //zz {
 //zz    PRINT("sys_truncate ( %p(%s), %d )", ARG1,ARG1,ARG2);
@@ -5360,42 +5361,43 @@ POST(sys_rt_sigprocmask)
 //zz {
 //zz    POST_MEM_WRITE( ARG1, sizeof(vki_sigset_t) ) ;
 //zz }
-//zz 
-//zz PRE(sys_mq_open, 0)
-//zz {
-//zz    PRINT("sys_mq_open( %p(%s), %d, %lld, %p )",
-//zz          ARG1,ARG1,ARG2,(ULong)ARG3,ARG4);
-//zz    PRE_REG_READ4(long, "mq_open",
-//zz                  const char *, name, int, oflag, vki_mode_t, mode,
-//zz                  struct mq_attr *, attr);
-//zz    PRE_MEM_RASCIIZ( "mq_open(name)", ARG1 );
-//zz    if ((ARG2 & VKI_O_CREAT) != 0 && ARG4 != 0) {
-//zz       const struct vki_mq_attr *attr = (struct vki_mq_attr *)ARG4;
-//zz       PRE_MEM_READ( "mq_open(attr->mq_maxmsg)",
-//zz                      (Addr)&attr->mq_maxmsg, sizeof(attr->mq_maxmsg) );
-//zz       PRE_MEM_READ( "mq_open(attr->mq_msgsize)",
-//zz                      (Addr)&attr->mq_msgsize, sizeof(attr->mq_msgsize) );
-//zz    }
-//zz }
-//zz 
-//zz POST(sys_mq_open)
-//zz {
-//zz    if (!VG_(fd_allowed)(RES, "mq_open", tid, True)) {
-//zz       VG_(close)(RES);
-//zz       SET_STATUS_( -VKI_EMFILE );
-//zz    } else {
-//zz       if (VG_(clo_track_fds))
-//zz          VG_(record_fd_open)(tid, RES, VG_(arena_strdup)(VG_AR_CORE, (Char*)ARG1));
-//zz    }
-//zz }
-//zz 
-//zz PRE(sys_mq_unlink, 0)
-//zz {
-//zz    PRINT("sys_mq_unlink ( %p(%s) )", ARG1,ARG1);
-//zz    PRE_REG_READ1(long, "mq_unlink", const char *, name);
-//zz    PRE_MEM_RASCIIZ( "mq_unlink(name)", ARG1 );
-//zz }
-//zz 
+
+PRE(sys_mq_open)
+{
+   PRINT("sys_mq_open( %p(%s), %d, %lld, %p )",
+         ARG1,ARG1,ARG2,(ULong)ARG3,ARG4);
+   PRE_REG_READ4(long, "mq_open",
+                 const char *, name, int, oflag, vki_mode_t, mode,
+                 struct mq_attr *, attr);
+   PRE_MEM_RASCIIZ( "mq_open(name)", ARG1 );
+   if ((ARG2 & VKI_O_CREAT) != 0 && ARG4 != 0) {
+      const struct vki_mq_attr *attr = (struct vki_mq_attr *)ARG4;
+      PRE_MEM_READ( "mq_open(attr->mq_maxmsg)",
+                     (Addr)&attr->mq_maxmsg, sizeof(attr->mq_maxmsg) );
+      PRE_MEM_READ( "mq_open(attr->mq_msgsize)",
+                     (Addr)&attr->mq_msgsize, sizeof(attr->mq_msgsize) );
+   }
+}
+
+POST(sys_mq_open)
+{
+   vg_assert(SUCCESS);
+   if (!VG_(fd_allowed)(RES, "mq_open", tid, True)) {
+      VG_(close)(RES);
+      SET_STATUS_Failure( VKI_EMFILE );
+   } else {
+      if (VG_(clo_track_fds))
+         VG_(record_fd_open)(tid, RES, VG_(arena_strdup)(VG_AR_CORE, (Char*)ARG1));
+   }
+}
+
+PRE(sys_mq_unlink)
+{
+   PRINT("sys_mq_unlink ( %p(%s) )", ARG1,ARG1);
+   PRE_REG_READ1(long, "mq_unlink", const char *, name);
+   PRE_MEM_RASCIIZ( "mq_unlink(name)", ARG1 );
+}
+
 //zz PRE(sys_mq_timedsend, SfMayBlock)
 //zz {
 //zz    PRINT("sys_mq_timedsend ( %d, %p, %llu, %d, %p )",
index 5018d821005b262fcb3ade4f9284e1f421fe6fa4..62250759babed683762ad4146a645d62783025de 100644 (file)
@@ -528,13 +528,13 @@ POST(sys_futex)
 //zz    if (RES > 0)
 //zz       POST_MEM_WRITE( ARG2, sizeof(struct epoll_event)*RES ) ;
 //zz }
-//zz 
-//zz PRE(sys_gettid, 0)
-//zz {
-//zz    PRINT("sys_gettid ()");
-//zz    PRE_REG_READ0(long, "gettid");
-//zz }
-//zz 
+
+PRE(sys_gettid)
+{
+   PRINT("sys_gettid ()");
+   PRE_REG_READ0(long, "gettid");
+}
+
 //zz PRE(sys_tkill, Special)
 //zz {
 //zz    /* int tkill(pid_t tid, int sig); */
index fd7fd3b58519b39bc4b3f3364a176899fd4f9904..c808d00cbf57dc01e1b86356db1a63aa10f6a5c5 100644 (file)
@@ -950,6 +950,7 @@ DECL_TEMPLATE(x86_linux, sys_ipc);
 DECL_TEMPLATE(x86_linux, sys_rt_sigreturn);
 DECL_TEMPLATE(x86_linux, sys_modify_ldt);
 DECL_TEMPLATE(x86_linux, sys_set_thread_area);
+DECL_TEMPLATE(x86_linux, sys_ptrace);
 
 //zz PRE(old_select, MayBlock)
 //zz {
@@ -1216,71 +1217,71 @@ PRE(sys_set_thread_area)
 //zz       POST_MEM_WRITE( ARG1, sizeof(vki_modify_ldt_t) );
 //zz    }
 //zz }
-//zz 
-//zz // Parts of this are x86-specific, but the *PEEK* cases are generic.
-//zz // XXX: Why is the memory pointed to by ARG3 never checked?
-//zz PRE(sys_ptrace, 0)
-//zz {
-//zz    PRINT("sys_ptrace ( %d, %d, %p, %p )", ARG1,ARG2,ARG3,ARG4);
-//zz    PRE_REG_READ4(int, "ptrace", 
-//zz                  long, request, long, pid, long, addr, long, data);
-//zz    switch (ARG1) {
-//zz    case VKI_PTRACE_PEEKTEXT:
-//zz    case VKI_PTRACE_PEEKDATA:
-//zz    case VKI_PTRACE_PEEKUSR:
-//zz       PRE_MEM_WRITE( "ptrace(peek)", ARG4, 
-//zz                sizeof (long));
-//zz       break;
-//zz    case VKI_PTRACE_GETREGS:
-//zz       PRE_MEM_WRITE( "ptrace(getregs)", ARG4, 
-//zz                sizeof (struct vki_user_regs_struct));
-//zz       break;
-//zz    case VKI_PTRACE_GETFPREGS:
-//zz       PRE_MEM_WRITE( "ptrace(getfpregs)", ARG4, 
-//zz                sizeof (struct vki_user_i387_struct));
-//zz       break;
-//zz    case VKI_PTRACE_GETFPXREGS:
-//zz       PRE_MEM_WRITE( "ptrace(getfpxregs)", ARG4, 
-//zz                      sizeof(struct vki_user_fxsr_struct) );
-//zz       break;
-//zz    case VKI_PTRACE_SETREGS:
-//zz       PRE_MEM_READ( "ptrace(setregs)", ARG4, 
-//zz                sizeof (struct vki_user_regs_struct));
-//zz       break;
-//zz    case VKI_PTRACE_SETFPREGS:
-//zz       PRE_MEM_READ( "ptrace(setfpregs)", ARG4, 
-//zz                sizeof (struct vki_user_i387_struct));
-//zz       break;
-//zz    case VKI_PTRACE_SETFPXREGS:
-//zz       PRE_MEM_READ( "ptrace(setfpxregs)", ARG4, 
-//zz                      sizeof(struct vki_user_fxsr_struct) );
-//zz       break;
-//zz    default:
-//zz       break;
-//zz    }
-//zz }
-//zz 
-//zz POST(sys_ptrace)
-//zz {
-//zz    switch (ARG1) {
-//zz    case VKI_PTRACE_PEEKTEXT:
-//zz    case VKI_PTRACE_PEEKDATA:
-//zz    case VKI_PTRACE_PEEKUSR:
-//zz       POST_MEM_WRITE( ARG4, sizeof (long));
-//zz       break;
-//zz    case VKI_PTRACE_GETREGS:
-//zz       POST_MEM_WRITE( ARG4, sizeof (struct vki_user_regs_struct));
-//zz       break;
-//zz    case VKI_PTRACE_GETFPREGS:
-//zz       POST_MEM_WRITE( ARG4, sizeof (struct vki_user_i387_struct));
-//zz       break;
-//zz    case VKI_PTRACE_GETFPXREGS:
-//zz       POST_MEM_WRITE( ARG4, sizeof(struct vki_user_fxsr_struct) );
-//zz       break;
-//zz    default:
-//zz       break;
-//zz    }
-//zz }
+
+// Parts of this are x86-specific, but the *PEEK* cases are generic.
+// XXX: Why is the memory pointed to by ARG3 never checked?
+PRE(sys_ptrace)
+{
+   PRINT("sys_ptrace ( %d, %d, %p, %p )", ARG1,ARG2,ARG3,ARG4);
+   PRE_REG_READ4(int, "ptrace", 
+                 long, request, long, pid, long, addr, long, data);
+   switch (ARG1) {
+   case VKI_PTRACE_PEEKTEXT:
+   case VKI_PTRACE_PEEKDATA:
+   case VKI_PTRACE_PEEKUSR:
+      PRE_MEM_WRITE( "ptrace(peek)", ARG4, 
+                    sizeof (long));
+      break;
+   case VKI_PTRACE_GETREGS:
+      PRE_MEM_WRITE( "ptrace(getregs)", ARG4, 
+                    sizeof (struct vki_user_regs_struct));
+      break;
+   case VKI_PTRACE_GETFPREGS:
+      PRE_MEM_WRITE( "ptrace(getfpregs)", ARG4, 
+                    sizeof (struct vki_user_i387_struct));
+      break;
+   case VKI_PTRACE_GETFPXREGS:
+      PRE_MEM_WRITE( "ptrace(getfpxregs)", ARG4, 
+                     sizeof(struct vki_user_fxsr_struct) );
+      break;
+   case VKI_PTRACE_SETREGS:
+      PRE_MEM_READ( "ptrace(setregs)", ARG4, 
+                    sizeof (struct vki_user_regs_struct));
+      break;
+   case VKI_PTRACE_SETFPREGS:
+      PRE_MEM_READ( "ptrace(setfpregs)", ARG4, 
+                    sizeof (struct vki_user_i387_struct));
+      break;
+   case VKI_PTRACE_SETFPXREGS:
+      PRE_MEM_READ( "ptrace(setfpxregs)", ARG4, 
+                     sizeof(struct vki_user_fxsr_struct) );
+      break;
+   default:
+      break;
+   }
+}
+
+POST(sys_ptrace)
+{
+   switch (ARG1) {
+   case VKI_PTRACE_PEEKTEXT:
+   case VKI_PTRACE_PEEKDATA:
+   case VKI_PTRACE_PEEKUSR:
+      POST_MEM_WRITE( ARG4, sizeof (long));
+      break;
+   case VKI_PTRACE_GETREGS:
+      POST_MEM_WRITE( ARG4, sizeof (struct vki_user_regs_struct));
+      break;
+   case VKI_PTRACE_GETFPREGS:
+      POST_MEM_WRITE( ARG4, sizeof (struct vki_user_i387_struct));
+      break;
+   case VKI_PTRACE_GETFPXREGS:
+      POST_MEM_WRITE( ARG4, sizeof(struct vki_user_fxsr_struct) );
+      break;
+   default:
+      break;
+   }
+}
 
 // XXX: this duplicates a function in coregrind/vg_syscalls.c, yuk
 static Addr deref_Addr ( ThreadId tid, Addr a, Char* s )
@@ -1945,7 +1946,7 @@ const SyscallTableEntry VGP_(syscall_table)[] = {
    GENX_(__NR_getuid,            sys_getuid16),       // 24 ## P
 //zz 
 //zz    //   (__NR_stime,             sys_stime),          // 25 * (SVr4,SVID,X/OPEN)
-//zz    PLAXY(__NR_ptrace,            sys_ptrace),         // 26
+   PLAXY(__NR_ptrace,            sys_ptrace),         // 26
    GENX_(__NR_alarm,             sys_alarm),          // 27
 //zz    //   (__NR_oldfstat,          sys_fstat),          // 28 * L -- obsolete
    GENX_(__NR_pause,             sys_pause),          // 29
@@ -2025,7 +2026,7 @@ const SyscallTableEntry VGP_(syscall_table)[] = {
    PLAX_(__NR_mmap,              old_mmap),           // 90
    GENXY(__NR_munmap,            sys_munmap),         // 91
 //zz    GENX_(__NR_truncate,          sys_truncate),       // 92
-//zz    GENX_(__NR_ftruncate,         sys_ftruncate),      // 93
+   GENX_(__NR_ftruncate,         sys_ftruncate),      // 93
 //zz    GENX_(__NR_fchmod,            sys_fchmod),         // 94
 //zz 
 //zz    GENX_(__NR_fchown,            sys_fchown16),       // 95
@@ -2185,8 +2186,8 @@ const SyscallTableEntry VGP_(syscall_table)[] = {
    GENXY(__NR_fcntl64,           sys_fcntl64),        // 221
    GENX_(222,                    sys_ni_syscall),     // 222
    GENX_(223,                    sys_ni_syscall),     // 223
-//zz    LINX_(__NR_gettid,            sys_gettid),         // 224
-//zz 
+   LINX_(__NR_gettid,            sys_gettid),         // 224
+
 //zz    //   (__NR_readahead,         sys_readahead),      // 225 */(Linux?)
 //zz    GENX_(__NR_setxattr,          sys_setxattr),       // 226
 //zz    GENX_(__NR_lsetxattr,         sys_lsetxattr),      // 227
@@ -2249,8 +2250,8 @@ const SyscallTableEntry VGP_(syscall_table)[] = {
 //zz 
 //zz    //   (__NR_get_mempolicy,     sys_get_mempolicy),  // 275 ?/?
 //zz    //   (__NR_set_mempolicy,     sys_set_mempolicy),  // 276 ?/?
-//zz    GENXY(__NR_mq_open,           sys_mq_open),        // 277
-//zz    GENX_(__NR_mq_unlink,         sys_mq_unlink),      // (mq_open+1)
+   GENXY(__NR_mq_open,           sys_mq_open),        // 277
+   GENX_(__NR_mq_unlink,         sys_mq_unlink),      // (mq_open+1)
 //zz    GENX_(__NR_mq_timedsend,      sys_mq_timedsend),   // (mq_open+2)
 //zz 
 //zz    GENXY(__NR_mq_timedreceive,   sys_mq_timedreceive),// (mq_open+3)