mirror of
git://sourceware.org/git/glibc.git
synced 2025-04-12 14:21:18 +08:00
Fix aio_* pread namespace (bug 18519).
aio_* bring in references to pread, which isn't in all the standards containing aio_* (as a reference from one library to another, this is a bug for dynamic as well as static linking). This patch fixes this by using __libc_pread instead, exporting that function from libc at symbol version GLIBC_PRIVATE; the code, with conditionals that may call either __pread64 or __libc_pread, becomes exactly analogous to that elsewhere in the same file that may call either __pwrite64 or __libc_pwrite. Tested for x86_64 and x86 (testsuite, and comparison of disassembly of installed shared libraries). libc changes because of the PLT entry for the newly exported __libc_pread; librt changes because of assertion line numbers and PLT rearrangement; other stripped installed shared libraries do not change. [BZ #18519] * posix/Versions (libc): Export __libc_pread at version GLIBC_PRIVATE. * sysdeps/pthread/aio_misc.c (handle_fildes_io): Call __libc_pread instead of pread. * conform/Makefile (test-xfail-POSIX/aio.h/linknamespace): Remove variable.
This commit is contained in:
parent
498c1f6a7c
commit
9714012ca0
@ -1,5 +1,13 @@
|
||||
2015-06-12 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
[BZ #18519]
|
||||
* posix/Versions (libc): Export __libc_pread at version
|
||||
GLIBC_PRIVATE.
|
||||
* sysdeps/pthread/aio_misc.c (handle_fildes_io): Call __libc_pread
|
||||
instead of pread.
|
||||
* conform/Makefile (test-xfail-POSIX/aio.h/linknamespace): Remove
|
||||
variable.
|
||||
|
||||
[BZ #18522]
|
||||
* misc/efgcvt_r.c
|
||||
[LONG_DOUBLE_COMPAT (libc, GLIBC_2_0) && !LONG_DOUBLE_CVT]
|
||||
|
2
NEWS
2
NEWS
@ -21,7 +21,7 @@ Version 2.22
|
||||
18211, 18217, 18220, 18221, 18234, 18244, 18247, 18287, 18319, 18324,
|
||||
18333, 18346, 18397, 18409, 18410, 18412, 18418, 18422, 18434, 18444,
|
||||
18468, 18469, 18470, 18479, 18483, 18495, 18496, 18497, 18498, 18507,
|
||||
18520, 18522.
|
||||
18519, 18520, 18522.
|
||||
|
||||
* Cache information can be queried via sysconf() function on s390 e.g. with
|
||||
_SC_LEVEL1_ICACHE_SIZE as argument.
|
||||
|
@ -354,7 +354,6 @@ test-xfail-XPG4/netdb.h/linknamespace = yes
|
||||
test-xfail-XPG4/syslog.h/linknamespace = yes
|
||||
test-xfail-XPG4/unistd.h/linknamespace = yes
|
||||
test-xfail-XPG4/wordexp.h/linknamespace = yes
|
||||
test-xfail-POSIX/aio.h/linknamespace = yes
|
||||
test-xfail-POSIX/mqueue.h/linknamespace = yes
|
||||
test-xfail-POSIX/semaphore.h/linknamespace = yes
|
||||
test-xfail-UNIX98/fmtmsg.h/linknamespace = yes
|
||||
|
@ -135,6 +135,6 @@ libc {
|
||||
execvpe;
|
||||
}
|
||||
GLIBC_PRIVATE {
|
||||
__libc_fork; __libc_pwrite;
|
||||
__libc_fork; __libc_pread; __libc_pwrite;
|
||||
}
|
||||
}
|
||||
|
@ -536,10 +536,11 @@ handle_fildes_io (void *arg)
|
||||
aiocbp->aiocb64.aio_offset));
|
||||
else
|
||||
aiocbp->aiocb.__return_value =
|
||||
TEMP_FAILURE_RETRY (pread (fildes,
|
||||
(void *) aiocbp->aiocb.aio_buf,
|
||||
aiocbp->aiocb.aio_nbytes,
|
||||
aiocbp->aiocb.aio_offset));
|
||||
TEMP_FAILURE_RETRY (__libc_pread (fildes,
|
||||
(void *)
|
||||
aiocbp->aiocb.aio_buf,
|
||||
aiocbp->aiocb.aio_nbytes,
|
||||
aiocbp->aiocb.aio_offset));
|
||||
|
||||
if (aiocbp->aiocb.__return_value == -1 && errno == ESPIPE)
|
||||
/* The Linux kernel is different from others. It returns
|
||||
|
Loading…
x
Reference in New Issue
Block a user