Message ID | 87blu6cl5k.fsf@oldenburg2.str.redhat.com |
---|---|
State | New |
Headers | show |
Series | hurd: Fix build after __pread64 usage in the dynamic loader | expand |
Florian Weimer, le jeu. 24 oct. 2019 15:45:11 +0200, a ecrit: > Commit 95c1056962a3f2297c94ce47f0eaf0c5b6563231 ("elf: Use nocancel > pread64() instead of lseek()+read()") added calls to __pread64 to > the dynamic loader. On Hurd, this needs an implementation in the > dynamic loader because the rtld-pread64 rebuild pulls in too many > symbols. > > Fixes: 95c1056962a3f2297c94ce47f0eaf0c5b6563231 Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Thanks! > ----- > sysdeps/mach/hurd/dl-sysdep.c | 14 +++++++++++--- > 1 file changed, 11 insertions(+), 3 deletions(-) > > diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c > index 219475aa7d..719d603f44 100644 > --- a/sysdeps/mach/hurd/dl-sysdep.c > +++ b/sysdeps/mach/hurd/dl-sysdep.c > @@ -357,9 +357,9 @@ __close (int fd) > return 0; > } > > -check_no_hidden(__read); > +check_no_hidden(__pread64); > __ssize_t weak_function > -__read (int fd, void *buf, size_t nbytes) > +__pread64 (int fd, void *buf, size_t nbytes, off64_t offset) > { > error_t err; > char *data; > @@ -367,7 +367,7 @@ __read (int fd, void *buf, size_t nbytes) > > data = buf; > nread = nbytes; > - err = __io_read ((mach_port_t) fd, &data, &nread, -1, nbytes); > + err = __io_read ((mach_port_t) fd, &data, &nread, offset, nbytes); > if (err) > return __hurd_fail (err); > > @@ -379,6 +379,14 @@ __read (int fd, void *buf, size_t nbytes) > > return nread; > } > +libc_hidden_weak (__pread64) > + > +check_no_hidden(__read); > +__ssize_t weak_function > +__read (int fd, void *buf, size_t nbytes) > +{ > + return __pread64 (fd, buf, nbytes, -1); > +} > libc_hidden_weak (__read) > > check_no_hidden(__write); >
diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c index 219475aa7d..719d603f44 100644 --- a/sysdeps/mach/hurd/dl-sysdep.c +++ b/sysdeps/mach/hurd/dl-sysdep.c @@ -357,9 +357,9 @@ __close (int fd) return 0; } -check_no_hidden(__read); +check_no_hidden(__pread64); __ssize_t weak_function -__read (int fd, void *buf, size_t nbytes) +__pread64 (int fd, void *buf, size_t nbytes, off64_t offset) { error_t err; char *data; @@ -367,7 +367,7 @@ __read (int fd, void *buf, size_t nbytes) data = buf; nread = nbytes; - err = __io_read ((mach_port_t) fd, &data, &nread, -1, nbytes); + err = __io_read ((mach_port_t) fd, &data, &nread, offset, nbytes); if (err) return __hurd_fail (err); @@ -379,6 +379,14 @@ __read (int fd, void *buf, size_t nbytes) return nread; } +libc_hidden_weak (__pread64) + +check_no_hidden(__read); +__ssize_t weak_function +__read (int fd, void *buf, size_t nbytes) +{ + return __pread64 (fd, buf, nbytes, -1); +} libc_hidden_weak (__read) check_no_hidden(__write);