mirror of
git://sourceware.org/git/glibc.git
synced 2025-02-23 13:09:58 +08:00
Building with -Os produces linknamespace and localplt failures for, among other functions, gnu_dev_major, gnu_dev_minor and gnu_dev_makedev. The issue is that those functions are not inlined when building with -Os. While one could force them to be inlined in that case, it seems more natural to fix this issue similarly to other namespace issues. Thus, this patch makes gnu_dev_* into weak aliases for hidden symbols __gnu_dev_*; __gnu_dev_* are then defined as inlines in the internal include/sys/sysmacros.h, and uses of gnu_dev_* (often via the macros major, minor and makedev) for which there are namespace issues are changed to use __gnu_dev_*; where there are no namespace issues, use of libc_hidden_proto serves to avoid unnecessary local PLT entry use. Tested for x86_64, (a) without -Os, to verify the testsuite continues to pass without problems and that the functions called under their new names continue to be inlined as expected in that case; (b) with -Os, to verify that the linknamespace and localplt failures in question go away (but because of other such failures present, neither of the relevant bugs can yet be closed). [BZ #15105] [BZ #19463] * include/sys/sysmacros.h [!_ISOMAC] (__SYSMACROS_NEED_IMPLEMENTATION): Define macro. [!_SYS_SYSMACROS_H_WRAPPER && !_ISOMAC] (_SYS_SYSMACROS_H_WRAPPER): Likewise. [!_SYS_SYSMACROS_H_WRAPPER && !_ISOMAC] (gnu_dev_major): Use libc_hidden_proto. [!_SYS_SYSMACROS_H_WRAPPER && !_ISOMAC] (gnu_dev_minor): Likewise. [!_SYS_SYSMACROS_H_WRAPPER && !_ISOMAC] (gnu_dev_makedev): Likewise. [!_SYS_SYSMACROS_H_WRAPPER && !_ISOMAC] (__SYSMACROS_DECL_TEMPL): Undefine and redefine to add use __gnu_dev_ prefix. [!_SYS_SYSMACROS_H_WRAPPER && !_ISOMAC] (__SYSMACROS_IMPL_TEMPL): Likewise. [!_SYS_SYSMACROS_H_WRAPPER && !_ISOMAC] (__gnu_dev_major): Declare and define as hidden inline function. [!_SYS_SYSMACROS_H_WRAPPER && !_ISOMAC] (__gnu_dev_minor): Likewise. [!_SYS_SYSMACROS_H_WRAPPER && !_ISOMAC] (__gnu_dev_makedev): Likewise. * misc/makedev.c (OUT_OF_LINE_IMPL_TEMPL): Use __gnu_dev_ prefix. (gnu_dev_major): Use weak_alias and libc_hidden_weak. (gnu_dev_minor): Likewise. (gnu_dev_makedev): Likewise. * csu/check_fds.c (check_one_fd): Use __gnu_dev_makedev instead of makedev. * posix/wordexp.c (exec_comm_child): Likewise. * sysdeps/mach/hurd/xmknodat.c (__xmknodat): Use __gnu_dev_minor instead of minor and __gnu_dev_major instead of major. * sysdeps/unix/sysv/linux/device-nrs.h (DEV_TTY_P): Use __gnu_dev_major instead of major. * sysdeps/unix/sysv/linux/pathconf.c (distinguish_extX): Use __gnu_dev_major instead of gnu_dev_major and __gnu_dev_minor instead of gnu_dev_minor. * sysdeps/unix/sysv/linux/ptsname.c (MASTER_P): Likewise. (SLAVE_P): Likewise. (__ptsname_internal): Use __gnu_dev_minor instead of minor. * sysdeps/unix/sysv/linux/ttyname.h (is_pty): Use __gnu_dev_major instead of major. |
||
---|---|---|
.. | ||
bits | ||
sys | ||
acct.c | ||
ar.h | ||
brk.c | ||
bug18240.c | ||
bug-hsearch1.c | ||
chflags.c | ||
chroot.c | ||
daemon.c | ||
dirname.c | ||
efgcvt_r.c | ||
efgcvt.c | ||
err.c | ||
err.h | ||
error.c | ||
error.h | ||
fchflags.c | ||
fdatasync.c | ||
fgetxattr.c | ||
flistxattr.c | ||
fremovexattr.c | ||
fsetxattr.c | ||
fstab.c | ||
fstab.h | ||
fsync.c | ||
ftruncate64.c | ||
ftruncate.c | ||
futimes.c | ||
futimesat.c | ||
getauxval.c | ||
getclktck.c | ||
getdomain.c | ||
getdtsz.c | ||
gethostid.c | ||
gethostname.c | ||
getloadavg.c | ||
getpagesize.c | ||
getpass.c | ||
getsysstats.c | ||
getttyent.c | ||
getusershell.c | ||
getxattr.c | ||
gtty.c | ||
hsearch_r.c | ||
hsearch.c | ||
ifunc-impl-list.c | ||
init-misc.c | ||
insremque.c | ||
ioctl.c | ||
lgetxattr.c | ||
libgen.h | ||
listxattr.c | ||
llistxattr.c | ||
lremovexattr.c | ||
lsearch.c | ||
lsetxattr.c | ||
lutimes.c | ||
madvise.c | ||
makedev.c | ||
Makefile | ||
mincore.c | ||
mkdtemp.c | ||
mkostemp64.c | ||
mkostemp.c | ||
mkostemps64.c | ||
mkostemps.c | ||
mkstemp64.c | ||
mkstemp.c | ||
mkstemps64.c | ||
mkstemps.c | ||
mktemp.c | ||
mlock.c | ||
mlockall.c | ||
mmap64.c | ||
mmap.c | ||
mntent_r.c | ||
mntent.c | ||
mntent.h | ||
mprotect.c | ||
msync.c | ||
munlock.c | ||
munlockall.c | ||
munmap.c | ||
preadv2.c | ||
preadv64.c | ||
preadv64v2.c | ||
preadv.c | ||
pselect.c | ||
ptrace.c | ||
pwritev2.c | ||
pwritev64.c | ||
pwritev64v2.c | ||
pwritev.c | ||
qefgcvt_r.c | ||
qefgcvt.c | ||
readv.c | ||
reboot.c | ||
regexp.c | ||
regexp.h | ||
remap_file_pages.c | ||
removexattr.c | ||
revoke.c | ||
sbrk.c | ||
search.h | ||
select.c | ||
setdomain.c | ||
setegid.c | ||
seteuid.c | ||
sethostid.c | ||
sethostname.c | ||
setregid.c | ||
setreuid.c | ||
setxattr.c | ||
sgtty.h | ||
sstk.c | ||
stab.h | ||
stty.c | ||
swapoff.c | ||
swapon.c | ||
sync.c | ||
syncfs.c | ||
syscall.c | ||
syscall.h | ||
sysexits.h | ||
syslog.c | ||
syslog.h | ||
truncate64.c | ||
truncate.c | ||
tsearch.c | ||
tst-atomic-long.c | ||
tst-atomic.c | ||
tst-dirname.c | ||
tst-efgcvt.c | ||
tst-empty.c | ||
tst-error1.c | ||
tst-fdset.c | ||
tst-hsearch.c | ||
tst-insremque.c | ||
tst-makedev.c | ||
tst-mntent2.c | ||
tst-mntent-blank-corrupt.c | ||
tst-mntent-blank-passno.c | ||
tst-mntent.c | ||
tst-preadvwritev2-common.c | ||
tst-preadvwritev2.c | ||
tst-preadvwritev64.c | ||
tst-preadvwritev64v2.c | ||
tst-preadvwritev-common.c | ||
tst-preadvwritev.c | ||
tst-pselect.c | ||
tst-tsearch.c | ||
ttyent.h | ||
ttyslot.c | ||
ualarm.c | ||
usleep.c | ||
ustat.c | ||
ustat.h | ||
utimes.c | ||
Versions | ||
vhangup.c | ||
writev.c |