Mark internal dirent functions with attribute_hidden [BZ #18822]
Mark internal dirent functions with attribute_hidden to allow direct access within libc.so and libc.a without using GOT nor PLT. __readdir64 is hidden with libc_hidden_proto and libc_hidden_def since the exported readdir64 is an alias of __readdir64. [BZ #18822] * include/dirent.h (__opendir): Always add attribute_hidden. (__fdopendir): Likewise. (__closedir): Likewise. (__readdir): Likewise. (__readdir64): Add libc_hidden_proto. * sysdeps/mach/hurd/readdir64.c (__readdir64): Add libc_hidden_def. * sysdeps/unix/sysv/linux/i386/readdir64.c (__readdir64): Likewise. * sysdeps/unix/sysv/linux/readdir64.c (__readdir64): Likewise. * sysdeps/unix/sysv/linux/wordsize-64/readdir.c (__GI___readdir64): New alias.
This commit is contained in:
parent
9635ce6962
commit
4587a421c5
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
||||||
|
2017-10-01 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
[BZ #18822]
|
||||||
|
* include/dirent.h (__opendir): Always add attribute_hidden.
|
||||||
|
(__fdopendir): Likewise.
|
||||||
|
(__closedir): Likewise.
|
||||||
|
(__readdir): Likewise.
|
||||||
|
(__readdir64): Add libc_hidden_proto.
|
||||||
|
* sysdeps/mach/hurd/readdir64.c (__readdir64): Add libc_hidden_def.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/readdir64.c (__readdir64): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/readdir64.c (__readdir64): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/wordsize-64/readdir.c (__GI___readdir64):
|
||||||
|
New alias.
|
||||||
|
|
||||||
2017-10-01 H.J. Lu <hongjiu.lu@intel.com>
|
2017-10-01 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
[BZ #18822]
|
[BZ #18822]
|
||||||
|
|
|
@ -15,12 +15,13 @@ struct scandir_cancel_struct
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Now define the internal interfaces. */
|
/* Now define the internal interfaces. */
|
||||||
extern DIR *__opendir (const char *__name);
|
extern DIR *__opendir (const char *__name) attribute_hidden;
|
||||||
extern DIR *__opendirat (int dfd, const char *__name) attribute_hidden;
|
extern DIR *__opendirat (int dfd, const char *__name) attribute_hidden;
|
||||||
extern DIR *__fdopendir (int __fd);
|
extern DIR *__fdopendir (int __fd) attribute_hidden;
|
||||||
extern int __closedir (DIR *__dirp);
|
extern int __closedir (DIR *__dirp) attribute_hidden;
|
||||||
extern struct dirent *__readdir (DIR *__dirp);
|
extern struct dirent *__readdir (DIR *__dirp) attribute_hidden;
|
||||||
extern struct dirent64 *__readdir64 (DIR *__dirp);
|
extern struct dirent64 *__readdir64 (DIR *__dirp);
|
||||||
|
libc_hidden_proto (__readdir64)
|
||||||
extern int __readdir_r (DIR *__dirp, struct dirent *__entry,
|
extern int __readdir_r (DIR *__dirp, struct dirent *__entry,
|
||||||
struct dirent **__result);
|
struct dirent **__result);
|
||||||
extern int __readdir64_r (DIR *__dirp, struct dirent64 *__entry,
|
extern int __readdir64_r (DIR *__dirp, struct dirent64 *__entry,
|
||||||
|
@ -77,10 +78,6 @@ libc_hidden_proto (__scandirat)
|
||||||
libc_hidden_proto (scandirat64)
|
libc_hidden_proto (scandirat64)
|
||||||
|
|
||||||
# if IS_IN (rtld)
|
# if IS_IN (rtld)
|
||||||
extern __typeof (__closedir) __closedir attribute_hidden;
|
|
||||||
extern __typeof (__fdopendir) __fdopendir attribute_hidden;
|
|
||||||
extern __typeof (__readdir) __readdir attribute_hidden;
|
|
||||||
extern __typeof (__readdir64) __readdir64 attribute_hidden;
|
|
||||||
extern __typeof (__rewinddir) __rewinddir attribute_hidden;
|
extern __typeof (__rewinddir) __rewinddir attribute_hidden;
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
|
|
@ -98,4 +98,5 @@ __readdir64 (DIR *dirp)
|
||||||
return dp;
|
return dp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
libc_hidden_def (__readdir64)
|
||||||
weak_alias (__readdir64, readdir64)
|
weak_alias (__readdir64, readdir64)
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#undef __GETDENTS
|
#undef __GETDENTS
|
||||||
#undef DIRENT_TYPE
|
#undef DIRENT_TYPE
|
||||||
|
|
||||||
|
libc_hidden_def (__readdir64)
|
||||||
versioned_symbol (libc, __readdir64, readdir64, GLIBC_2_2);
|
versioned_symbol (libc, __readdir64, readdir64, GLIBC_2_2);
|
||||||
|
|
||||||
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
|
|
@ -4,4 +4,5 @@
|
||||||
|
|
||||||
#include <sysdeps/posix/readdir.c>
|
#include <sysdeps/posix/readdir.c>
|
||||||
|
|
||||||
|
libc_hidden_def (__readdir64)
|
||||||
weak_alias (__readdir64, readdir64)
|
weak_alias (__readdir64, readdir64)
|
||||||
|
|
|
@ -3,5 +3,6 @@
|
||||||
#include <sysdeps/posix/readdir.c>
|
#include <sysdeps/posix/readdir.c>
|
||||||
#undef __readdir64
|
#undef __readdir64
|
||||||
strong_alias (__readdir, __readdir64)
|
strong_alias (__readdir, __readdir64)
|
||||||
|
strong_alias (__readdir, __GI___readdir64)
|
||||||
#undef readdir64
|
#undef readdir64
|
||||||
weak_alias (__readdir, readdir64)
|
weak_alias (__readdir, readdir64)
|
||||||
|
|
Loading…
Reference in New Issue