Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix mq_receive, mq_send mq_timed* namespace (bug 18545).
mq_receive calls mq_timedreceive, and mq_send calls mq_timedsend.  But
mq_receive and mq_send were in POSIX by 1996, while mq_timed* were
added in the 2001 edition of POSIX.  This patch fixes this by making
mq_timed* into weak aliases for __mq_timed* and calling the
__mq_timed* names.

Tested for x86_64 and x86 (testsuite, and that disassembly of
installed shared libraries is unchanged by the patch).

	[BZ #18545]
	* rt/mq_timedreceive.c (mq_timedreceive): Rename to
	__mq_timedreceive and define as alias of __mq_timedreceive.  Use
	hidden_weak.
	* rt/mq_timedsend.c (mq_timedsend): Rename to __mq_timedsend and
	define as alias of __mq_timedsend.  Use hidden_weak.
	* sysdeps/unix/sysv/linux/syscalls.list (mq_timedsend): Use
	__mq_timedsend as strong name.
	(mq_timedreceive): Use __mq_timedreceive as strong name.
	* include/mqueue.h (__mq_timedsend): Declare.  Use hidden_proto.
	(__mq_timedreceive): Likewise.
	* sysdeps/unix/sysv/linux/mq_receive.c (mq_receive): Call
	__mq_timedreceive instead of mq_timedreceive.
	* sysdeps/unix/sysv/linux/mq_send.c (mq_send): Call __mq_timedsend
	instead of mq_timedsend.
	* conform/Makefile (test-xfail-UNIX98/mqueue.h/linknamespace):
	Remove variable.
  • Loading branch information
Joseph Myers committed Jun 17, 2015
1 parent c21d37d commit dfa2d21
Show file tree
Hide file tree
Showing 9 changed files with 35 additions and 10 deletions.
18 changes: 18 additions & 0 deletions ChangeLog
@@ -1,5 +1,23 @@
2015-06-17 Joseph Myers <joseph@codesourcery.com>

[BZ #18545]
* rt/mq_timedreceive.c (mq_timedreceive): Rename to
__mq_timedreceive and define as alias of __mq_timedreceive. Use
hidden_weak.
* rt/mq_timedsend.c (mq_timedsend): Rename to __mq_timedsend and
define as alias of __mq_timedsend. Use hidden_weak.
* sysdeps/unix/sysv/linux/syscalls.list (mq_timedsend): Use
__mq_timedsend as strong name.
(mq_timedreceive): Use __mq_timedreceive as strong name.
* include/mqueue.h (__mq_timedsend): Declare. Use hidden_proto.
(__mq_timedreceive): Likewise.
* sysdeps/unix/sysv/linux/mq_receive.c (mq_receive): Call
__mq_timedreceive instead of mq_timedreceive.
* sysdeps/unix/sysv/linux/mq_send.c (mq_send): Call __mq_timedsend
instead of mq_timedsend.
* conform/Makefile (test-xfail-UNIX98/mqueue.h/linknamespace):
Remove variable.

* sysdeps/unix/make-syscalls.sh (emit_weak_aliases): Use
hidden_def and hidden_weak instead of libc_hidden_def and
libc_hidden_weak.
Expand Down
2 changes: 1 addition & 1 deletion NEWS
Expand Up @@ -22,7 +22,7 @@ Version 2.22
18324, 18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434,
18444, 18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498,
18507, 18512, 18519, 18520, 18522, 18527, 18528, 18529, 18530, 18532,
18533, 18534, 18536, 18539, 18540, 18542, 18544.
18533, 18534, 18536, 18539, 18540, 18542, 18544, 18545.

* Cache information can be queried via sysconf() function on s390 e.g. with
_SC_LEVEL1_ICACHE_SIZE as argument.
Expand Down
1 change: 0 additions & 1 deletion conform/Makefile
Expand Up @@ -347,4 +347,3 @@ test-xfail-XOPEN2K8/ndbm.h/linknamespace = yes
test-xfail-XPG3/unistd.h/linknamespace = yes
test-xfail-XPG4/unistd.h/linknamespace = yes
test-xfail-POSIX/mqueue.h/linknamespace = yes
test-xfail-UNIX98/mqueue.h/linknamespace = yes
4 changes: 4 additions & 0 deletions include/mqueue.h
Expand Up @@ -3,7 +3,11 @@
#ifndef _ISOMAC
# if IS_IN (librt)
hidden_proto (mq_timedsend)
extern __typeof (mq_timedsend) __mq_timedsend __nonnull ((2, 5));
hidden_proto (__mq_timedsend)
hidden_proto (mq_timedreceive)
extern __typeof (mq_timedreceive) __mq_timedreceive __nonnull ((2, 5));
hidden_proto (__mq_timedreceive)
hidden_proto (mq_setattr)
# endif
#endif
6 changes: 4 additions & 2 deletions rt/mq_timedreceive.c
Expand Up @@ -21,12 +21,14 @@
/* Receive the oldest from highest priority messages in message queue
MQDES, stop waiting if ABS_TIMEOUT expires. */
ssize_t
mq_timedreceive (mqd_t mqdes, char *__restrict msg_ptr, size_t msg_len,
__mq_timedreceive (mqd_t mqdes, char *__restrict msg_ptr, size_t msg_len,
unsigned int *__restrict msg_prio,
const struct timespec *__restrict abs_timeout)
{
__set_errno (ENOSYS);
return -1;
}
hidden_def (mq_timedreceive)
hidden_def (__mq_timedreceive)
weak_alias (__mq_timedreceive, mq_timedreceive)
hidden_weak (mq_timedreceive)
stub_warning (mq_timedreceive)
6 changes: 4 additions & 2 deletions rt/mq_timedsend.c
Expand Up @@ -21,11 +21,13 @@
/* Add message pointed by MSG_PTR to message queue MQDES, stop blocking
on full message queue if ABS_TIMEOUT expires. */
int
mq_timedsend (mqd_t mqdes, const char *msg_ptr, size_t msg_len,
__mq_timedsend (mqd_t mqdes, const char *msg_ptr, size_t msg_len,
unsigned int msg_prio, const struct timespec *abs_timeout)
{
__set_errno (ENOSYS);
return -1;
}
hidden_def (mq_timedsend)
hidden_def (__mq_timedsend)
weak_alias (__mq_timedsend, mq_timedsend)
hidden_weak (mq_timedsend)
stub_warning (mq_timedsend)
2 changes: 1 addition & 1 deletion sysdeps/unix/sysv/linux/mq_receive.c
Expand Up @@ -28,7 +28,7 @@ ssize_t
mq_receive (mqd_t mqdes, char *msg_ptr, size_t msg_len,
unsigned int *msg_prio)
{
return mq_timedreceive (mqdes, msg_ptr, msg_len, msg_prio, NULL);
return __mq_timedreceive (mqdes, msg_ptr, msg_len, msg_prio, NULL);
}

#else
Expand Down
2 changes: 1 addition & 1 deletion sysdeps/unix/sysv/linux/mq_send.c
Expand Up @@ -27,7 +27,7 @@ int
mq_send (mqd_t mqdes, const char *msg_ptr, size_t msg_len,
unsigned int msg_prio)
{
return mq_timedsend (mqdes, msg_ptr, msg_len, msg_prio, NULL);
return __mq_timedsend (mqdes, msg_ptr, msg_len, msg_prio, NULL);
}

#else
Expand Down
4 changes: 2 additions & 2 deletions sysdeps/unix/sysv/linux/syscalls.list
Expand Up @@ -106,8 +106,8 @@ removexattr - removexattr i:ss removexattr
lremovexattr - lremovexattr i:ss lremovexattr
fremovexattr - fremovexattr i:is fremovexattr

mq_timedsend - mq_timedsend Ci:ipiip mq_timedsend
mq_timedreceive - mq_timedreceive Ci:ipipp mq_timedreceive
mq_timedsend - mq_timedsend Ci:ipiip __mq_timedsend mq_timedsend
mq_timedreceive - mq_timedreceive Ci:ipipp __mq_timedreceive mq_timedreceive
mq_setattr - mq_getsetattr i:ipp mq_setattr

timerfd_create EXTRA timerfd_create i:ii timerfd_create
Expand Down

0 comments on commit dfa2d21

Please sign in to comment.