aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2019-12-01 20:48:46 +0000
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2019-12-01 21:05:51 +0000
commitdb25266c9202a1235ce2e2f8a4f84cfb86254196 (patch)
treeb23f1944793f1c15c8cda8b659034454c34fea4e
parent892badc9bbcd4a6f8c2eb6c8a99be3aa22517532 (diff)
downloadglibc-db25266c9202a1235ce2e2f8a4f84cfb86254196.zip
glibc-db25266c9202a1235ce2e2f8a4f84cfb86254196.tar.gz
glibc-db25266c9202a1235ce2e2f8a4f84cfb86254196.tar.bz2
hurd: Fix ld.so __getcwd override from libc
ld.so symbols to be overriden by libc need to be extern to really get overriden. __getcwd happens to have never been exposed, putting it to GLIBC_PRIVATE.
-rw-r--r--include/unistd.h3
-rw-r--r--io/getcwd.c1
-rw-r--r--sysdeps/mach/hurd/Versions8
-rw-r--r--sysdeps/mach/hurd/getcwd.c1
-rw-r--r--sysdeps/mach/hurd/i386/localplt.data2
-rw-r--r--sysdeps/posix/getcwd.c1
-rw-r--r--sysdeps/unix/sysv/linux/getcwd.c1
7 files changed, 11 insertions, 6 deletions
diff --git a/include/unistd.h b/include/unistd.h
index a043431..dbfa53d 100644
--- a/include/unistd.h
+++ b/include/unistd.h
@@ -75,7 +75,8 @@ extern int __lchown (const char *__file, __uid_t __owner,
__gid_t __group);
extern int __chdir (const char *__path) attribute_hidden;
extern int __fchdir (int __fd) attribute_hidden;
-extern char *__getcwd (char *__buf, size_t __size) attribute_hidden;
+extern char *__getcwd (char *__buf, size_t __size);
+libc_hidden_proto (__getcwd)
extern int __rmdir (const char *__path) attribute_hidden;
extern int __execvpe (const char *file, char *const argv[],
char *const envp[]) attribute_hidden;
diff --git a/io/getcwd.c b/io/getcwd.c
index 9744a5f..98e8cc1 100644
--- a/io/getcwd.c
+++ b/io/getcwd.c
@@ -32,6 +32,7 @@ __getcwd (char *buf, size_t size)
__set_errno (ENOSYS);
return NULL;
}
+libc_hidden_def (__getcwd)
weak_alias (__getcwd, getcwd)
stub_warning (__getcwd)
diff --git a/sysdeps/mach/hurd/Versions b/sysdeps/mach/hurd/Versions
index c0b73cf..dc199bf 100644
--- a/sysdeps/mach/hurd/Versions
+++ b/sysdeps/mach/hurd/Versions
@@ -1,7 +1,7 @@
libc {
GLIBC_2.0 {
# functions with a weak definition in the dynamic linker
- __access; __getcwd; __mmap;
+ __access; __mmap;
}
GLIBC_2.2.6 {
# functions with a weak definition in the dynamic linker
@@ -10,7 +10,7 @@ libc {
GLIBC_PRIVATE {
# Functions shared with the dynamic linker
__access_noerrno; __libc_read; __libc_write; __libc_lseek64;
- __libc_lock_self0; __sigprocmask;
+ __libc_lock_self0; __sigprocmask; __getcwd;
_dl_init_first;
}
@@ -22,7 +22,7 @@ ld {
__hurd_threadvar_stack_mask; __hurd_threadvar_stack_offset;
# functions that must be shared with libc
- __access; __close; __getcwd; __getpid;
+ __access; __close; __getpid;
__mmap; __open; __read; __sbrk; __strtoul_internal;
__write; __writev; __xstat64; __fxstat64;
_exit; _hurd_intr_rpc_mach_msg;
@@ -41,6 +41,6 @@ ld {
# functions that must be shared with libc
__access_noerrno; __libc_read; __libc_write; __libc_lseek64;
- __libc_lock_self0; __sigprocmask;
+ __libc_lock_self0; __sigprocmask; __getcwd;
}
}
diff --git a/sysdeps/mach/hurd/getcwd.c b/sysdeps/mach/hurd/getcwd.c
index 2757ac7..4114991 100644
--- a/sysdeps/mach/hurd/getcwd.c
+++ b/sysdeps/mach/hurd/getcwd.c
@@ -306,4 +306,5 @@ __getcwd (char *buf, size_t size)
buf, size));
return cwd;
}
+libc_hidden_def (__getcwd)
weak_alias (__getcwd, getcwd)
diff --git a/sysdeps/mach/hurd/i386/localplt.data b/sysdeps/mach/hurd/i386/localplt.data
index 1aef944..0c1cf0f 100644
--- a/sysdeps/mach/hurd/i386/localplt.data
+++ b/sysdeps/mach/hurd/i386/localplt.data
@@ -35,7 +35,7 @@ ld.so: __xstat64
#ld.so: __access
ld.so: __access_noerrno
ld.so: __getpid
-#ld.so: __getcwd
+ld.so: __getcwd
ld.so: __sbrk
ld.so: __strtoul_internal
#ld.so: _exit
diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c
index 86fb366..4a721c4 100644
--- a/sysdeps/posix/getcwd.c
+++ b/sysdeps/posix/getcwd.c
@@ -531,5 +531,6 @@ __getcwd (char *buf, size_t size)
}
#if defined _LIBC && !defined __getcwd
+libc_hidden_def (__getcwd)
weak_alias (__getcwd, getcwd)
#endif
diff --git a/sysdeps/unix/sysv/linux/getcwd.c b/sysdeps/unix/sysv/linux/getcwd.c
index eec986e..c031e1f 100644
--- a/sysdeps/unix/sysv/linux/getcwd.c
+++ b/sysdeps/unix/sysv/linux/getcwd.c
@@ -127,6 +127,7 @@ __getcwd (char *buf, size_t size)
return NULL;
}
+libc_hidden_def (__getcwd)
weak_alias (__getcwd, getcwd)
/* Get the code for the generic version. */