summary refs log tree commit diff
path: root/sysdeps/mach/hurd/dl-sysdep.c
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2019-10-24 15:51:29 +0200
committerFlorian Weimer <fweimer@redhat.com>2019-10-24 15:51:29 +0200
commit3007ad2140256e83918ce531435385fa003e9fce (patch)
treede432a9537de959a8079e90b92d6f28147ab91f9 /sysdeps/mach/hurd/dl-sysdep.c
parentc82005921ed25cf22959d952c2aded4752f67d99 (diff)
downloadglibc-3007ad2140256e83918ce531435385fa003e9fce.tar.gz
glibc-3007ad2140256e83918ce531435385fa003e9fce.tar.xz
glibc-3007ad2140256e83918ce531435385fa003e9fce.zip
hurd: Fix build after __pread64 usage in the dynamic loader
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>
Diffstat (limited to 'sysdeps/mach/hurd/dl-sysdep.c')
-rw-r--r--sysdeps/mach/hurd/dl-sysdep.c14
1 files 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);