Move mq_* syscalls from "generic" to "linux".
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@4517 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_syswrap/priv_syswrap-generic.h b/coregrind/m_syswrap/priv_syswrap-generic.h
index b91f59a..f529bcd 100644
--- a/coregrind/m_syswrap/priv_syswrap-generic.h
+++ b/coregrind/m_syswrap/priv_syswrap-generic.h
@@ -47,8 +47,9 @@
extern
Bool ML_(fd_allowed)(Int fd, const Char *syscallname, ThreadId tid, Bool soft);
-extern
-void ML_(record_fd_open_nameless)(ThreadId tid, Int fd);
+extern void ML_(record_fd_open_nameless) (ThreadId tid, Int fd);
+extern void ML_(record_fd_open_with_given_name)(ThreadId tid, Int fd,
+ char *pathname);
// Used when killing threads -- we must not kill a thread if it's the thread
// that would do Valgrind's final cleanup and output.
@@ -252,12 +253,6 @@
DECL_TEMPLATE(generic, sys_lookup_dcookie); // (*/32/64) L
DECL_TEMPLATE(generic, sys_statfs64); // * (?)
DECL_TEMPLATE(generic, sys_fstatfs64); // * (?)
-DECL_TEMPLATE(generic, sys_mq_open); // * P?
-DECL_TEMPLATE(generic, sys_mq_unlink); // * P?
-DECL_TEMPLATE(generic, sys_mq_timedsend); // * P?
-DECL_TEMPLATE(generic, sys_mq_timedreceive); // * P?
-DECL_TEMPLATE(generic, sys_mq_notify); // * P?
-DECL_TEMPLATE(generic, sys_mq_getsetattr); // * P?
/* ---------------------------------------------------------------------
diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h
index 522dfe9..5189f17 100644
--- a/coregrind/m_syswrap/priv_syswrap-linux.h
+++ b/coregrind/m_syswrap/priv_syswrap-linux.h
@@ -96,6 +96,13 @@
DECL_TEMPLATE(linux, sys_inotify_add_watch);
DECL_TEMPLATE(linux, sys_inotify_rm_watch);
+DECL_TEMPLATE(linux, sys_mq_open);
+DECL_TEMPLATE(linux, sys_mq_unlink);
+DECL_TEMPLATE(linux, sys_mq_timedsend);
+DECL_TEMPLATE(linux, sys_mq_timedreceive);
+DECL_TEMPLATE(linux, sys_mq_notify);
+DECL_TEMPLATE(linux, sys_mq_getsetattr);
+
#endif // __PRIV_SYSWRAP_LINUX_H
/*--------------------------------------------------------------------*/
diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c
index df14951..89fb943 100644
--- a/coregrind/m_syswrap/syswrap-amd64-linux.c
+++ b/coregrind/m_syswrap/syswrap-amd64-linux.c
@@ -1464,13 +1464,13 @@
LINX_(__NR_set_mempolicy, sys_set_mempolicy), // 238
LINXY(__NR_get_mempolicy, sys_get_mempolicy), // 239
- GENXY(__NR_mq_open, sys_mq_open), // 240
- GENX_(__NR_mq_unlink, sys_mq_unlink), // 241
- GENX_(__NR_mq_timedsend, sys_mq_timedsend), // 242
- GENX_(__NR_mq_timedreceive, sys_mq_timedreceive),// 243
- GENX_(__NR_mq_notify, sys_mq_notify), // 244
+ LINXY(__NR_mq_open, sys_mq_open), // 240
+ LINX_(__NR_mq_unlink, sys_mq_unlink), // 241
+ LINX_(__NR_mq_timedsend, sys_mq_timedsend), // 242
+ LINX_(__NR_mq_timedreceive, sys_mq_timedreceive),// 243
+ LINX_(__NR_mq_notify, sys_mq_notify), // 244
- GENXY(__NR_mq_getsetattr, sys_mq_getsetattr), // 245
+ LINXY(__NR_mq_getsetattr, sys_mq_getsetattr), // 245
// (__NR_kexec_load, sys_ni_syscall), // 246
GENXY(__NR_waitid, sys_waitid), // 247
// LINX_(__NR_add_key, sys_add_key), // 248
diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c
index 9885e77..7bae72e 100644
--- a/coregrind/m_syswrap/syswrap-generic.c
+++ b/coregrind/m_syswrap/syswrap-generic.c
@@ -344,7 +344,7 @@
some such thing) or that we don't know the filename. If the fd is
already open, then we're probably doing a dup2() to an existing fd,
so just overwrite the existing one. */
-static void record_fd_open_with_given_name(ThreadId tid, Int fd, char *pathname)
+void ML_(record_fd_open_with_given_name)(ThreadId tid, Int fd, char *pathname)
{
OpenFd *i;
@@ -387,13 +387,13 @@
else
name = NULL;
- record_fd_open_with_given_name(tid, fd, name);
+ ML_(record_fd_open_with_given_name)(tid, fd, name);
}
// Record opening of a nameless fd.
void ML_(record_fd_open_nameless)(ThreadId tid, Int fd)
{
- record_fd_open_with_given_name(tid, fd, NULL);
+ ML_(record_fd_open_with_given_name)(tid, fd, NULL);
}
static
@@ -4679,7 +4679,7 @@
SET_STATUS_Failure( VKI_EMFILE );
} else {
if (VG_(clo_track_fds))
- record_fd_open_with_given_name(tid, RES, (Char*)ARG1);
+ ML_(record_fd_open_with_given_name)(tid, RES, (Char*)ARG1);
}
}
@@ -4730,7 +4730,7 @@
SET_STATUS_Failure( VKI_EMFILE );
} else {
if (VG_(clo_track_fds))
- record_fd_open_with_given_name(tid, RES, (Char*)ARG1);
+ ML_(record_fd_open_with_given_name)(tid, RES, (Char*)ARG1);
}
}
@@ -5513,127 +5513,6 @@
POST_MEM_WRITE( ARG1, sizeof(vki_sigset_t) ) ;
}
-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 (!ML_(fd_allowed)(RES, "mq_open", tid, True)) {
- VG_(close)(RES);
- SET_STATUS_Failure( VKI_EMFILE );
- } else {
- if (VG_(clo_track_fds))
- record_fd_open_with_given_name(tid, RES, (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 );
-}
-
-PRE(sys_mq_timedsend)
-{
- *flags |= SfMayBlock;
- PRINT("sys_mq_timedsend ( %d, %p, %llu, %d, %p )",
- ARG1,ARG2,(ULong)ARG3,ARG4,ARG5);
- PRE_REG_READ5(long, "mq_timedsend",
- vki_mqd_t, mqdes, const char *, msg_ptr, vki_size_t, msg_len,
- unsigned int, msg_prio, const struct timespec *, abs_timeout);
- if (!ML_(fd_allowed)(ARG1, "mq_timedsend", tid, False)) {
- SET_STATUS_Failure( VKI_EBADF );
- } else {
- PRE_MEM_READ( "mq_timedsend(msg_ptr)", ARG2, ARG3 );
- if (ARG5 != 0)
- PRE_MEM_READ( "mq_timedsend(abs_timeout)", ARG5,
- sizeof(struct vki_timespec) );
- }
-}
-
-PRE(sys_mq_timedreceive)
-{
- *flags |= SfMayBlock;
- PRINT("sys_mq_timedreceive( %d, %p, %llu, %p, %p )",
- ARG1,ARG2,(ULong)ARG3,ARG4,ARG5);
- PRE_REG_READ5(ssize_t, "mq_timedreceive",
- vki_mqd_t, mqdes, char *, msg_ptr, vki_size_t, msg_len,
- unsigned int *, msg_prio,
- const struct timespec *, abs_timeout);
- if (!ML_(fd_allowed)(ARG1, "mq_timedreceive", tid, False)) {
- SET_STATUS_Failure( VKI_EBADF );
- } else {
- PRE_MEM_WRITE( "mq_timedreceive(msg_ptr)", ARG2, ARG3 );
- if (ARG4 != 0)
- PRE_MEM_WRITE( "mq_timedreceive(msg_prio)",
- ARG4, sizeof(unsigned int) );
- if (ARG5 != 0)
- PRE_MEM_READ( "mq_timedreceive(abs_timeout)",
- ARG5, sizeof(struct vki_timespec) );
- }
-}
-
-POST(sys_mq_timedreceive)
-{
- POST_MEM_WRITE( ARG2, ARG3 );
- if (ARG4 != 0)
- POST_MEM_WRITE( ARG4, sizeof(unsigned int) );
-}
-
-PRE(sys_mq_notify)
-{
- PRINT("sys_mq_notify( %d, %p )", ARG1,ARG2 );
- PRE_REG_READ2(long, "mq_notify",
- vki_mqd_t, mqdes, const struct sigevent *, notification);
- if (!ML_(fd_allowed)(ARG1, "mq_notify", tid, False))
- SET_STATUS_Failure( VKI_EBADF );
- else if (ARG2 != 0)
- PRE_MEM_READ( "mq_notify(notification)",
- ARG2, sizeof(struct vki_sigevent) );
-}
-
-PRE(sys_mq_getsetattr)
-{
- PRINT("sys_mq_getsetattr( %d, %p, %p )", ARG1,ARG2,ARG3 );
- PRE_REG_READ3(long, "mq_getsetattr",
- vki_mqd_t, mqdes, const struct mq_attr *, mqstat,
- struct mq_attr *, omqstat);
- if (!ML_(fd_allowed)(ARG1, "mq_getsetattr", tid, False)) {
- SET_STATUS_Failure( VKI_EBADF );
- } else {
- if (ARG2 != 0) {
- const struct vki_mq_attr *attr = (struct vki_mq_attr *)ARG2;
- PRE_MEM_READ( "mq_getsetattr(mqstat->mq_flags)",
- (Addr)&attr->mq_flags, sizeof(attr->mq_flags) );
- }
- if (ARG3 != 0)
- PRE_MEM_WRITE( "mq_getsetattr(omqstat)", ARG3,
- sizeof(struct vki_mq_attr) );
- }
-}
-
-POST(sys_mq_getsetattr)
-{
- if (ARG3 != 0)
- POST_MEM_WRITE( ARG3, sizeof(struct vki_mq_attr) );
-}
-
PRE(sys_timer_create)
{
PRINT("sys_timer_create( %d, %p, %p )", ARG1,ARG2,ARG3);
diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c
index 089425c..e4e26ff 100644
--- a/coregrind/m_syswrap/syswrap-linux.c
+++ b/coregrind/m_syswrap/syswrap-linux.c
@@ -897,6 +897,127 @@
PRE_REG_READ2(long, "inotify_rm_watch", int, fd, int, wd);
}
+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 (!ML_(fd_allowed)(RES, "mq_open", tid, True)) {
+ VG_(close)(RES);
+ SET_STATUS_Failure( VKI_EMFILE );
+ } else {
+ if (VG_(clo_track_fds))
+ ML_(record_fd_open_with_given_name)(tid, RES, (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 );
+}
+
+PRE(sys_mq_timedsend)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_mq_timedsend ( %d, %p, %llu, %d, %p )",
+ ARG1,ARG2,(ULong)ARG3,ARG4,ARG5);
+ PRE_REG_READ5(long, "mq_timedsend",
+ vki_mqd_t, mqdes, const char *, msg_ptr, vki_size_t, msg_len,
+ unsigned int, msg_prio, const struct timespec *, abs_timeout);
+ if (!ML_(fd_allowed)(ARG1, "mq_timedsend", tid, False)) {
+ SET_STATUS_Failure( VKI_EBADF );
+ } else {
+ PRE_MEM_READ( "mq_timedsend(msg_ptr)", ARG2, ARG3 );
+ if (ARG5 != 0)
+ PRE_MEM_READ( "mq_timedsend(abs_timeout)", ARG5,
+ sizeof(struct vki_timespec) );
+ }
+}
+
+PRE(sys_mq_timedreceive)
+{
+ *flags |= SfMayBlock;
+ PRINT("sys_mq_timedreceive( %d, %p, %llu, %p, %p )",
+ ARG1,ARG2,(ULong)ARG3,ARG4,ARG5);
+ PRE_REG_READ5(ssize_t, "mq_timedreceive",
+ vki_mqd_t, mqdes, char *, msg_ptr, vki_size_t, msg_len,
+ unsigned int *, msg_prio,
+ const struct timespec *, abs_timeout);
+ if (!ML_(fd_allowed)(ARG1, "mq_timedreceive", tid, False)) {
+ SET_STATUS_Failure( VKI_EBADF );
+ } else {
+ PRE_MEM_WRITE( "mq_timedreceive(msg_ptr)", ARG2, ARG3 );
+ if (ARG4 != 0)
+ PRE_MEM_WRITE( "mq_timedreceive(msg_prio)",
+ ARG4, sizeof(unsigned int) );
+ if (ARG5 != 0)
+ PRE_MEM_READ( "mq_timedreceive(abs_timeout)",
+ ARG5, sizeof(struct vki_timespec) );
+ }
+}
+
+POST(sys_mq_timedreceive)
+{
+ POST_MEM_WRITE( ARG2, ARG3 );
+ if (ARG4 != 0)
+ POST_MEM_WRITE( ARG4, sizeof(unsigned int) );
+}
+
+PRE(sys_mq_notify)
+{
+ PRINT("sys_mq_notify( %d, %p )", ARG1,ARG2 );
+ PRE_REG_READ2(long, "mq_notify",
+ vki_mqd_t, mqdes, const struct sigevent *, notification);
+ if (!ML_(fd_allowed)(ARG1, "mq_notify", tid, False))
+ SET_STATUS_Failure( VKI_EBADF );
+ else if (ARG2 != 0)
+ PRE_MEM_READ( "mq_notify(notification)",
+ ARG2, sizeof(struct vki_sigevent) );
+}
+
+PRE(sys_mq_getsetattr)
+{
+ PRINT("sys_mq_getsetattr( %d, %p, %p )", ARG1,ARG2,ARG3 );
+ PRE_REG_READ3(long, "mq_getsetattr",
+ vki_mqd_t, mqdes, const struct mq_attr *, mqstat,
+ struct mq_attr *, omqstat);
+ if (!ML_(fd_allowed)(ARG1, "mq_getsetattr", tid, False)) {
+ SET_STATUS_Failure( VKI_EBADF );
+ } else {
+ if (ARG2 != 0) {
+ const struct vki_mq_attr *attr = (struct vki_mq_attr *)ARG2;
+ PRE_MEM_READ( "mq_getsetattr(mqstat->mq_flags)",
+ (Addr)&attr->mq_flags, sizeof(attr->mq_flags) );
+ }
+ if (ARG3 != 0)
+ PRE_MEM_WRITE( "mq_getsetattr(omqstat)", ARG3,
+ sizeof(struct vki_mq_attr) );
+ }
+}
+
+POST(sys_mq_getsetattr)
+{
+ if (ARG3 != 0)
+ POST_MEM_WRITE( ARG3, sizeof(struct vki_mq_attr) );
+}
+
#undef PRE
#undef POST
diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c
index 4e5a07c..84797d5 100644
--- a/coregrind/m_syswrap/syswrap-ppc32-linux.c
+++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c
@@ -2278,12 +2278,12 @@
/* Number 260 is reserved for new sys_get_mempolicy */
/* Number 261 is reserved for new sys_set_mempolicy */
-//.. GENXY(__NR_mq_open, sys_mq_open), // 262
-//.. GENX_(__NR_mq_unlink, sys_mq_unlink), // 263
-//.. GENX_(__NR_mq_timedsend, sys_mq_timedsend), // 264
-//.. GENXY(__NR_mq_timedreceive, sys_mq_timedreceive), // 265
-//.. GENX_(__NR_mq_notify, sys_mq_notify), // 266
-//.. GENXY(__NR_mq_getsetattr, sys_mq_getsetattr), // 267
+//.. LINXY(__NR_mq_open, sys_mq_open), // 262
+//.. LINX_(__NR_mq_unlink, sys_mq_unlink), // 263
+//.. LINX_(__NR_mq_timedsend, sys_mq_timedsend), // 264
+//.. LINXY(__NR_mq_timedreceive, sys_mq_timedreceive), // 265
+//.. LINX_(__NR_mq_notify, sys_mq_notify), // 266
+//.. LINXY(__NR_mq_getsetattr, sys_mq_getsetattr), // 267
// __NR_kexec_load // 268
};
diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c
index 345e0e5..06a1664 100644
--- a/coregrind/m_syswrap/syswrap-x86-linux.c
+++ b/coregrind/m_syswrap/syswrap-x86-linux.c
@@ -2275,13 +2275,13 @@
//zz
LINXY(__NR_get_mempolicy, sys_get_mempolicy), // 275 ?/?
LINX_(__NR_set_mempolicy, sys_set_mempolicy), // 276 ?/?
- GENXY(__NR_mq_open, sys_mq_open), // 277
- GENX_(__NR_mq_unlink, sys_mq_unlink), // (mq_open+1)
- GENX_(__NR_mq_timedsend, sys_mq_timedsend), // (mq_open+2)
+ LINXY(__NR_mq_open, sys_mq_open), // 277
+ LINX_(__NR_mq_unlink, sys_mq_unlink), // (mq_open+1)
+ LINX_(__NR_mq_timedsend, sys_mq_timedsend), // (mq_open+2)
- GENXY(__NR_mq_timedreceive, sys_mq_timedreceive),// (mq_open+3)
- GENX_(__NR_mq_notify, sys_mq_notify), // (mq_open+4)
- GENXY(__NR_mq_getsetattr, sys_mq_getsetattr), // (mq_open+5)
+ LINXY(__NR_mq_timedreceive, sys_mq_timedreceive),// (mq_open+3)
+ LINX_(__NR_mq_notify, sys_mq_notify), // (mq_open+4)
+ LINXY(__NR_mq_getsetattr, sys_mq_getsetattr), // (mq_open+5)
GENX_(__NR_sys_kexec_load, sys_ni_syscall), // 283
GENXY(__NR_waitid, sys_waitid), // 284