Message ID | 20170901180029.9527-25-hjl.tools@gmail.com |
---|---|
State | New |
Headers | show |
Series | Hide internal functions in libc.so | expand |
On 09/01/2017 07:59 PM, H.J. Lu wrote: > Hide internal __chmod and __mkdir functions to allow direct access > within libc.so and libc.a without using GOT nor PLT. > > [BZ #18822] > * include/sys/stat.h (__chmod): Add libc_hidden_proto. > (__mkdir): Likewise. > * io/chmod.c (__chmod): Add libc_hidden_def. > * io/mkdir.c (__mkdir): Likewise. > * sysdeps/mach/hurd/chmod.c (__chmod): Likewise. > * sysdeps/mach/hurd/mkdir.c (__mkdir): Likewise. > * sysdeps/unix/sysv/linux/generic/chmod.c (__chmod): Likewise. > * sysdeps/unix/sysv/linux/generic/mkdir.c (__mkdir): Likewise. Looks good to me. Thanks, Florian
diff --git a/include/sys/stat.h b/include/sys/stat.h index 4f31c00eca..eb44754185 100644 --- a/include/sys/stat.h +++ b/include/sys/stat.h @@ -7,9 +7,11 @@ extern int __stat (const char *__file, struct stat *__buf); extern int __fstat (int __fd, struct stat *__buf); extern int __lstat (const char *__file, struct stat *__buf); extern int __chmod (const char *__file, __mode_t __mode); +libc_hidden_proto (__chmod) extern int __fchmod (int __fd, __mode_t __mode); extern __mode_t __umask (__mode_t __mask); extern int __mkdir (const char *__path, __mode_t __mode); +libc_hidden_proto (__mkdir) extern int __mknod (const char *__path, __mode_t __mode, __dev_t __dev); #if IS_IN (libc) || IS_IN (rtld) diff --git a/io/chmod.c b/io/chmod.c index 0b85565ec2..3cacbf612f 100644 --- a/io/chmod.c +++ b/io/chmod.c @@ -35,4 +35,5 @@ __chmod (const char *file, mode_t mode) } stub_warning (chmod) +libc_hidden_def (__chmod) weak_alias (__chmod, chmod) diff --git a/io/mkdir.c b/io/mkdir.c index 0b8499a707..43a790de33 100644 --- a/io/mkdir.c +++ b/io/mkdir.c @@ -36,4 +36,5 @@ __mkdir (const char *path, mode_t mode) } stub_warning (mkdir) +libc_hidden_def (__mkdir) weak_alias (__mkdir, mkdir) diff --git a/sysdeps/mach/hurd/chmod.c b/sysdeps/mach/hurd/chmod.c index 943f9855d4..612e62d0b2 100644 --- a/sysdeps/mach/hurd/chmod.c +++ b/sysdeps/mach/hurd/chmod.c @@ -35,4 +35,5 @@ __chmod (const char *file, mode_t mode) return 0; } +libc_hidden_def (__chmod) weak_alias (__chmod, chmod) diff --git a/sysdeps/mach/hurd/mkdir.c b/sysdeps/mach/hurd/mkdir.c index 58c2ac4291..1efac949f6 100644 --- a/sysdeps/mach/hurd/mkdir.c +++ b/sysdeps/mach/hurd/mkdir.c @@ -40,4 +40,5 @@ __mkdir (const char *file_name, mode_t mode) return 0; } +libc_hidden_def (__mkdir) weak_alias (__mkdir, mkdir) diff --git a/sysdeps/unix/sysv/linux/generic/chmod.c b/sysdeps/unix/sysv/linux/generic/chmod.c index 41d6d9851f..551c67cd07 100644 --- a/sysdeps/unix/sysv/linux/generic/chmod.c +++ b/sysdeps/unix/sysv/linux/generic/chmod.c @@ -28,4 +28,6 @@ __chmod (const char *file, mode_t mode) { return INLINE_SYSCALL (fchmodat, 3, AT_FDCWD, file, mode); } + +libc_hidden_def (__chmod) weak_alias (__chmod, chmod) diff --git a/sysdeps/unix/sysv/linux/generic/mkdir.c b/sysdeps/unix/sysv/linux/generic/mkdir.c index 6571d29ca3..7eebe90ba7 100644 --- a/sysdeps/unix/sysv/linux/generic/mkdir.c +++ b/sysdeps/unix/sysv/linux/generic/mkdir.c @@ -30,4 +30,6 @@ __mkdir (const char *path, mode_t mode) { return INLINE_SYSCALL (mkdirat, 3, AT_FDCWD, path, mode); } + +libc_hidden_def (__mkdir) weak_alias (__mkdir, mkdir)