aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-06-17 20:22:39 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-06-17 20:22:39 +0000
commitc36213513490412941512daccf447513e442651b (patch)
treed5be56d7d716470d892ca65d847c73165866a28b
parentabccad04b4172d552dbdae948c0e567ba266ad76 (diff)
downloadglibc-c36213513490412941512daccf447513e442651b.tar
glibc-c36213513490412941512daccf447513e442651b.tar.gz
glibc-c36213513490412941512daccf447513e442651b.tar.bz2
glibc-c36213513490412941512daccf447513e442651b.zip
Fix nice getpriority, setpriority namespace (bug 18553).
nice (XPG3) calls getpriority and setpriority (in XPG4 but not XPG3, i.e. UX-shaded in XPG4). This patch fixes this by making those functions into weak aliases of __* functions and calling the __* versions as needed. Tested for x86_64 and x86 (testsuite, and that disassembly of installed shared libraries is unchanged by this patch). This completes cleaning up the unsorted linknamespace test XFAILs. [BZ #18553] * resource/getpriority.c (getpriority): Rename to __getpriority and define as weak alias of __getpriority. * resource/setpriority.c (setpriority): Rename to __setpriority and define as weak alias of __setpriority. * sysdeps/mach/hurd/getpriority.c (getpriority): Rename to __getpriority and define as weak alias of __getpriority. * sysdeps/mach/hurd/setpriority.c (setpriority): Rename to __setpriority and define as weak alias of __setpriority. * sysdeps/unix/syscalls.list (getpriority): Use __getpriority as strong name. (setpriority): Use __setpriority as strong name. * sysdeps/unix/sysv/linux/getpriority.c (getpriority): Rename to __getpriority and define as weak alias of __getpriority. * include/sys/resource.h (__getpriority): Declare. Use libc_hidden_proto. (__setpriority): Likewise. (getpriority): Don't use libc_hidden_proto. (setpriority): Likewise. * sysdeps/posix/nice.c (nice): Call __getpriority instead of getpriority. Call __setpriority instead of setpriority. * conform/Makefile (test-xfail-XPG3/unistd.h/linknamespace): Remove variable.
-rw-r--r--ChangeLog24
-rw-r--r--NEWS3
-rw-r--r--conform/Makefile3
-rw-r--r--include/sys/resource.h10
-rw-r--r--resource/getpriority.c5
-rw-r--r--resource/setpriority.c5
-rw-r--r--sysdeps/mach/hurd/getpriority.c5
-rw-r--r--sysdeps/mach/hurd/setpriority.c5
-rw-r--r--sysdeps/posix/nice.c6
-rw-r--r--sysdeps/unix/syscalls.list4
-rw-r--r--sysdeps/unix/sysv/linux/getpriority.c5
11 files changed, 54 insertions, 21 deletions
diff --git a/ChangeLog b/ChangeLog
index 4ce8eb9948..338bf8d76a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,29 @@
2015-06-17 Joseph Myers <joseph@codesourcery.com>
+ [BZ #18553]
+ * resource/getpriority.c (getpriority): Rename to __getpriority
+ and define as weak alias of __getpriority.
+ * resource/setpriority.c (setpriority): Rename to __setpriority
+ and define as weak alias of __setpriority.
+ * sysdeps/mach/hurd/getpriority.c (getpriority): Rename to
+ __getpriority and define as weak alias of __getpriority.
+ * sysdeps/mach/hurd/setpriority.c (setpriority): Rename to
+ __setpriority and define as weak alias of __setpriority.
+ * sysdeps/unix/syscalls.list (getpriority): Use __getpriority as
+ strong name.
+ (setpriority): Use __setpriority as strong name.
+ * sysdeps/unix/sysv/linux/getpriority.c (getpriority): Rename to
+ __getpriority and define as weak alias of __getpriority.
+ * include/sys/resource.h (__getpriority): Declare. Use
+ libc_hidden_proto.
+ (__setpriority): Likewise.
+ (getpriority): Don't use libc_hidden_proto.
+ (setpriority): Likewise.
+ * sysdeps/posix/nice.c (nice): Call __getpriority instead of
+ getpriority. Call __setpriority instead of setpriority.
+ * conform/Makefile (test-xfail-XPG3/unistd.h/linknamespace):
+ Remove variable.
+
[BZ #18547]
* misc/getttyent.c (getttynam): Rename to __getttynam and define
as weak alias of __getttynam. Use prototype function definition.
diff --git a/NEWS b/NEWS
index 3adec9b817..1f6b701b30 100644
--- a/NEWS
+++ b/NEWS
@@ -22,7 +22,8 @@ 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, 18545, 18546, 18547.
+ 18533, 18534, 18536, 18539, 18540, 18542, 18544, 18545, 18546, 18547,
+ 18553.
* Cache information can be queried via sysconf() function on s390 e.g. with
_SC_LEVEL1_ICACHE_SIZE as argument.
diff --git a/conform/Makefile b/conform/Makefile
index ad9cc697b4..4bc8121d49 100644
--- a/conform/Makefile
+++ b/conform/Makefile
@@ -342,6 +342,3 @@ test-xfail-XPG4/ndbm.h/linknamespace = yes
test-xfail-UNIX98/ndbm.h/linknamespace = yes
test-xfail-XOPEN2K/ndbm.h/linknamespace = yes
test-xfail-XOPEN2K8/ndbm.h/linknamespace = yes
-
-# Unsorted expected failures.
-test-xfail-XPG3/unistd.h/linknamespace = yes
diff --git a/include/sys/resource.h b/include/sys/resource.h
index 7622da969a..688c46c4ae 100644
--- a/include/sys/resource.h
+++ b/include/sys/resource.h
@@ -2,8 +2,14 @@
#include <resource/sys/resource.h>
#ifndef _ISOMAC
-libc_hidden_proto (getpriority)
-libc_hidden_proto (setpriority)
+/* Prototypes repeated instead of using __typeof because
+ sys/resource.h is included in C++ tests, and declaring functions
+ with __typeof and __THROW doesn't work for C++. */
+extern int __getpriority (__priority_which_t __which, id_t __who) __THROW;
+libc_hidden_proto (__getpriority)
+extern int __setpriority (__priority_which_t __which, id_t __who, int __prio)
+ __THROW;
+libc_hidden_proto (__setpriority)
libc_hidden_proto (getrlimit64)
extern __typeof (getrlimit64) __getrlimit64;
libc_hidden_proto (__getrlimit64);
diff --git a/resource/getpriority.c b/resource/getpriority.c
index 88ec4dba0c..6df7294578 100644
--- a/resource/getpriority.c
+++ b/resource/getpriority.c
@@ -23,13 +23,14 @@
or user (as specified by WHO) is used. A lower priority number means higher
priority. Priorities range from PRIO_MIN to PRIO_MAX. */
int
-getpriority (which, who)
+__getpriority (which, who)
enum __priority_which which;
id_t who;
{
__set_errno (ENOSYS);
return -1;
}
-libc_hidden_def (getpriority)
+libc_hidden_def (__getpriority)
+weak_alias (__getpriority, getpriority)
stub_warning (getpriority)
diff --git a/resource/setpriority.c b/resource/setpriority.c
index 08b0a95ea9..91521bdbb9 100644
--- a/resource/setpriority.c
+++ b/resource/setpriority.c
@@ -21,7 +21,7 @@
/* Set the priority of all processes specified by WHICH and WHO
to PRIO. Returns 0 on success, -1 on errors. */
int
-setpriority (which, who, prio)
+__setpriority (which, who, prio)
enum __priority_which which;
id_t who;
int prio;
@@ -29,6 +29,7 @@ setpriority (which, who, prio)
__set_errno (ENOSYS);
return -1;
}
-libc_hidden_def (setpriority)
+libc_hidden_def (__setpriority)
+weak_alias (__setpriority, setpriority)
stub_warning (setpriority)
diff --git a/sysdeps/mach/hurd/getpriority.c b/sysdeps/mach/hurd/getpriority.c
index bb81ee69ef..73c7ad38c8 100644
--- a/sysdeps/mach/hurd/getpriority.c
+++ b/sysdeps/mach/hurd/getpriority.c
@@ -24,7 +24,7 @@
or user (as specified by WHO) is used. A lower priority number means higher
priority. Priorities range from PRIO_MIN to PRIO_MAX. */
int
-getpriority (enum __priority_which which, id_t who)
+__getpriority (enum __priority_which which, id_t who)
{
error_t err, onerr;
int maxpri = INT_MIN;
@@ -81,4 +81,5 @@ getpriority (enum __priority_which which, id_t who)
return MACH_PRIORITY_TO_NICE (maxpri);
}
-libc_hidden_def (getpriority)
+libc_hidden_def (__getpriority)
+weak_alias (__getpriority, getpriority)
diff --git a/sysdeps/mach/hurd/setpriority.c b/sysdeps/mach/hurd/setpriority.c
index 43b8877fa0..41d7aa41fe 100644
--- a/sysdeps/mach/hurd/setpriority.c
+++ b/sysdeps/mach/hurd/setpriority.c
@@ -21,7 +21,7 @@
/* Set the priority of all processes specified by WHICH and WHO
to PRIO. Returns 0 on success, -1 on errors. */
int
-setpriority (enum __priority_which which, id_t who, int prio)
+__setpriority (enum __priority_which which, id_t who, int prio)
{
error_t err;
error_t pidloser, priloser;
@@ -94,4 +94,5 @@ setpriority (enum __priority_which which, id_t who, int prio)
return err ? __hurd_fail (err) : 0;
}
-libc_hidden_def (setpriority)
+libc_hidden_def (__setpriority)
+weak_alias (__setpriority, setpriority)
diff --git a/sysdeps/posix/nice.c b/sysdeps/posix/nice.c
index 67b127348f..42bb99b7e1 100644
--- a/sysdeps/posix/nice.c
+++ b/sysdeps/posix/nice.c
@@ -31,7 +31,7 @@ nice (int incr)
/* -1 is a valid priority, so we use errno to check for an error. */
save = errno;
__set_errno (0);
- prio = getpriority (PRIO_PROCESS, 0);
+ prio = __getpriority (PRIO_PROCESS, 0);
if (prio == -1)
{
if (errno != 0)
@@ -40,12 +40,12 @@ nice (int incr)
__set_errno (save);
}
- result = setpriority (PRIO_PROCESS, 0, prio + incr);
+ result = __setpriority (PRIO_PROCESS, 0, prio + incr);
if (result == -1)
{
if (errno == EACCES)
errno = EPERM;
return -1;
}
- return getpriority (PRIO_PROCESS, 0);
+ return __getpriority (PRIO_PROCESS, 0);
}
diff --git a/sysdeps/unix/syscalls.list b/sysdeps/unix/syscalls.list
index b3358bd933..2254c761b4 100644
--- a/sysdeps/unix/syscalls.list
+++ b/sysdeps/unix/syscalls.list
@@ -29,7 +29,7 @@ gethostname - gethostname i:bn __gethostname gethostname
getitimer - getitimer i:ip __getitimer getitimer
getpeername - getpeername i:ibN __getpeername getpeername
getpid - getpid Ei: __getpid getpid
-getpriority - getpriority i:ii getpriority
+getpriority - getpriority i:ii __getpriority getpriority
getrlimit - getrlimit i:ip __getrlimit getrlimit
getrusage - getrusage i:ip __getrusage getrusage
getsockname - getsockname i:ibN __getsockname getsockname
@@ -72,7 +72,7 @@ sethostid - sethostid i:i sethostid
sethostname - sethostname i:pi sethostname
setitimer - setitimer i:ipp __setitimer setitimer
setpgid - setpgrp i:ii __setpgid setpgid
-setpriority - setpriority i:iii setpriority
+setpriority - setpriority i:iii __setpriority setpriority
setregid - setregid i:ii __setregid setregid
setreuid - setreuid i:ii __setreuid setreuid
setrlimit - setrlimit i:ip __setrlimit setrlimit
diff --git a/sysdeps/unix/sysv/linux/getpriority.c b/sysdeps/unix/sysv/linux/getpriority.c
index 96d9de3162..9c691bb387 100644
--- a/sysdeps/unix/sysv/linux/getpriority.c
+++ b/sysdeps/unix/sysv/linux/getpriority.c
@@ -32,7 +32,7 @@
priority. Priorities range from PRIO_MIN to PRIO_MAX. */
int
-getpriority (enum __priority_which which, id_t who)
+__getpriority (enum __priority_which which, id_t who)
{
int res;
@@ -41,4 +41,5 @@ getpriority (enum __priority_which which, id_t who)
res = PZERO - res;
return res;
}
-libc_hidden_def (getpriority)
+libc_hidden_def (__getpriority)
+weak_alias (__getpriority, getpriority)