|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch consolidates all Linux setrlimit and getrlimit on the default
sysdeps/unix/sysv/linux/{set,get}rlimit{64}.c. It contains two exceptions:
1. mips32 and mips64n32 which requires a versioned symbol for GLIBC 2.19
and higher due a broken RLIM64_INFINITY constant.
2. sparc32 does not define a compat symbol for getrlimit64 for old 2GB
limit. I am not sure if it is required, but a RLIM_INFINITY fix [1]
change its definition without adding a compat symbol. This patch does
not aim to address this possible issue, it follow current symbol
export.
The default implementation uses prlimit64 for 64 bit rlim_t ({set,get}rlimit64)
and if it fails with ENOSYS it fall back to {get,set}rlimit syscall. This
code path is only used on kernel older than 2.6.36 (basically now only x86)
and I avoid to user __ASSUME_PRLIMTI64 to simplify the implementation. Once
x86 moves to be on par with other architectures regarding minimum kernel
supported we can get rid of using old syscalls and default path.
A new type size define is added, __RLIM_T_MATCHES_RLIM64_T, where is set as
default for 64 bits ports. This allows the default implementation to avoid
{get,set}rlimit building and alias {get,set}rlimit64 to {get,set}rlimit.
Checked on x86_64, i386, armhf, aarch64, and powerpc64le. I also did a
sanity build plus check-abi on all other supported architectures.
[1] Commit 9c96ff23858b0759e12ad69e3c4599931c90bee8
Adhemerval Zanella <adhemerval.zanella@linaro.org>
Yury Norov <ynorov@caviumnetworks.com>
* bits/typesizes.h (__RLIM_T_MATCHES_RLIM64_T): define.
* sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
(__RLIM_T_MATCHES_RLIM64_T): Likewise.
* sysdeps/unix/sysv/linux/generic/bits/typesizes.h
(__RLIM_T_MATCHES_RLIM64_T): Likewise.
* sysdeps/unix/sysv/linux/s390/bits/typesizes.h [__s390x__]
(__RLIM_T_MATCHES_RLIM64_T): Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/typesizes.h
[__arch64__ || __sparcv9] (__RLIM_T_MATCHES_RLIM64_T): Likewise.
* sysdeps/unix/sysv/linux/x86/bits/typesizes.h [__86_64__]
(__RLIM_T_MATCHES_RLIM64_T): Likewise.
* sysdeps/unix/sysv/linux/arm/Makefile [$(subdir) = resource]
(sysdep_routines): Remove oldgetrlimit64.
* sysdeps/unix/sysv/linux/i386/Makefile [$(subdir) = resource]
(sysdep_routines): Likewise.
* sysdeps/unix/sysv/linux/m68k/Makefile [$(subdir) = resource]
(sysdep_routines): Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/Makefile
[$(subdir) = resource] (sysdep_routines): Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/Makefile
[$(subdir) = resource] (sysdep_routines): Likewise.
* sysdeps/unix/sysv/linux/arm/getrlimit64.c: Remove file.
* sysdeps/unix/sysv/linux/arm/oldgetrlimit64.c: Likewise.
* sysdeps/unix/sysv/linux/hppa/getrlimit64.c: Likewise.
* sysdeps/unix/sysv/linux/i386/getrlimit64.c: Likewise.
* sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c: Likewise.
* sysdeps/unix/sysv/linux/m68k/getrlimit64.c: Likewise.
* sysdeps/unix/sysv/linux/m68k/oldgetrlimit64.c: Likewise.
* sysdeps/unix/sysv/linux/powerpc/getrlimit64.c: Likewise.
* sysdeps/unix/sysv/linux/powerpc/oldgetrlimit64.c: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c: Likewise.
* sysdeps/unix/sysv/linux/sh/getrlimit64.c: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/getrlimit64.c: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/setrlimit64.c: Likewise.
* sysdeps/sysv/linux/generic/wordsize-32/syscalls.list: Remove
setrlimit and getrlimit.
* sysdeps/unix/sysv/linux/hppa/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/i386/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/m68k/m680x0/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/syscalls.list: Likewise.
* sysdeps/unix/sysv/linux/getrlimit.c: New file.
* sysdeps/unix/sysv/linux/sparc/getrlimit64.c: Likewise.
* sysdeps/unix/sysv/linux/setrlimit.c: Likewise.
* sysdeps/unix/sysv/linux/getrlimit64.c (__getrlimit64): Handle
__RLIM_T_MATCHES_RLIM64_T and add alias if defined.
(__old_getrlimit64): Add compatibility symbol.
* sysdeps/unix/sysv/linux/setrlimit64.c (__setrlimit): Likewise.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For ia32 PIC, the first thing of many syscalls does is to call
__x86.get_pc_thunk.reg to load PC into reg in case there is an error,
which is required for setting errno. In most cases, there are no
errors. But we still call __x86.get_pc_thunk.reg. This patch adds
INLINE_SYSCALL_RETURN and INLINE_SYSCALL_ERROR_RETURN so that i386
can optimize setting errno by branching to the internal __syscall_error
without PLT.
INLINE_SYSCALL_ERROR_RETURN is designed to take the negative error
number returned from the majority of Linux kernels for which negating
is a no-op with INTERNAL_SYSCALL_ERRNO.
With i386 INLINE_SYSCALL_RETURN, INLINE_SYSCALL_ERROR_RETURN and
i386 syscall inlining optimization for GCC 5, for
sysdeps/unix/sysv/linux/fchmodat.c with -O2 -march=i686
-mtune=generic, GCC 5.2 now generates:
<fchmodat>:
0: push %ebx
1: mov 0x14(%esp),%eax
5: mov 0x8(%esp),%ebx
9: mov 0xc(%esp),%ecx
d: mov 0x10(%esp),%edx
11: test $0xfffffeff,%eax
16: jne 38 <fchmodat+0x38>
18: test $0x1,%ah
1b: jne 48 <fchmodat+0x48>
1d: mov $0x132,%eax
22: call *%gs:0x10
29: cmp $0xfffff000,%eax
2e: ja 58 <fchmodat+0x58>
30: pop %ebx
31: ret
32: lea 0x0(%esi),%esi
38: pop %ebx
39: mov $0xffffffea,%eax
3e: jmp 3f <fchmodat+0x3f> 3f: R_386_PC32 __syscall_error
43: nop
44: lea 0x0(%esi,%eiz,1),%esi
48: pop %ebx
49: mov $0xffffffa1,%eax
4e: jmp 4f <fchmodat+0x4f> 4f: R_386_PC32 __syscall_error
53: nop
54: lea 0x0(%esi,%eiz,1),%esi
58: pop %ebx
59: jmp 5a <fchmodat+0x5a> 5a: R_386_PC32 __syscall_error
instead of
<fchmodat>:
0: sub $0x8,%esp
3: mov 0x18(%esp),%eax
7: mov %ebx,(%esp)
a: call b <fchmodat+0xb> b: R_386_PC32 __x86.get_pc_thunk.bx
f: add $0x2,%ebx 11: R_386_GOTPC _GLOBAL_OFFSET_TABLE_
15: mov %edi,0x4(%esp)
19: test $0xfffffeff,%eax
1e: jne 70 <fchmodat+0x70>
20: test $0x1,%ah
23: jne 88 <fchmodat+0x88>
25: mov 0x14(%esp),%edx
29: mov 0x10(%esp),%ecx
2d: mov 0xc(%esp),%edi
31: xchg %ebx,%edi
33: mov $0x132,%eax
38: call *%gs:0x10
3f: xchg %edi,%ebx
41: cmp $0xfffff000,%eax
46: ja 58 <fchmodat+0x58>
48: mov (%esp),%ebx
4b: mov 0x4(%esp),%edi
4f: add $0x8,%esp
52: ret
53: nop
54: lea 0x0(%esi,%eiz,1),%esi
58: mov 0x0(%ebx),%edx 5a: R_386_TLS_GOTIE __libc_errno
5e: neg %eax
60: mov %eax,%gs:(%edx)
63: mov $0xffffffff,%eax
68: jmp 48 <fchmodat+0x48>
6a: lea 0x0(%esi),%esi
70: mov 0x0(%ebx),%eax 72: R_386_TLS_GOTIE __libc_errno
76: movl $0x16,%gs:(%eax)
7d: mov $0xffffffff,%eax
82: jmp 48 <fchmodat+0x48>
84: lea 0x0(%esi,%eiz,1),%esi
88: mov 0x0(%ebx),%eax 8a: R_386_TLS_GOTIE __libc_errno
8e: movl $0x5f,%gs:(%eax)
95: mov $0xffffffff,%eax
9a: jmp 48 <fchmodat+0x48>
* sysdeps/unix/sysdep.h (INLINE_SYSCALL_RETURN): New.
(INLINE_SYSCALL_ERROR_RETURN): Likewise.
* sysdeps/unix/sysv/linux/adjtime.c (ADJTIME): Use
INLINE_SYSCALL_RETURN and INLINE_SYSCALL_ERROR_RETURN.
* sysdeps/unix/sysv/linux/aio_sigqueue.c (__aio_sigqueue):
Likewise.
* sysdeps/unix/sysv/linux/dl-openat64.c (openat64): Likewise.
* sysdeps/unix/sysv/linux/eventfd.c (eventfd): Likewise.
* sysdeps/unix/sysv/linux/faccessat.c (faccessat): Likewise.
* sysdeps/unix/sysv/linux/fchmodat.c (fchmodat): Likewise.
* sysdeps/unix/sysv/linux/fcntl.c (do_fcntl): Likewise.
* sysdeps/unix/sysv/linux/fstatfs64.c (__fstatfs64): Likewise.
* sysdeps/unix/sysv/linux/ftruncate64.c (__ftruncate64): Likewise.
* sysdeps/unix/sysv/linux/futimens.c (futimens): Likewise.
* sysdeps/unix/sysv/linux/futimes.c (__futimes): Likewise.
* sysdeps/unix/sysv/linux/futimesat.c (futimesat): Likewise.
* sysdeps/unix/sysv/linux/fxstat.c (__fxstat): Likewise.
* sysdeps/unix/sysv/linux/fxstat64.c (___fxstat64): Likewise.
* sysdeps/unix/sysv/linux/fxstatat.c (__fxstatat): Likewise.
* sysdeps/unix/sysv/linux/fxstatat64.c (__fxstatat64): Likewise.
* sysdeps/unix/sysv/linux/gai_sigqueue.c (__gai_sigqueue):
Likewise.
* sysdeps/unix/sysv/linux/getpriority.c (__getpriority): Likewise.
* sysdeps/unix/sysv/linux/getrlimit64.c (__getrlimit64): Likewise.
* sysdeps/unix/sysv/linux/llseek.c (__llseek): Likewise.
* sysdeps/unix/sysv/linux/lutimes.c (lutimes): Likewise.
* sysdeps/unix/sysv/linux/lxstat.c (__lxstat): Likewise.
* sysdeps/unix/sysv/linux/lxstat64.c (___lxstat64): Likewise.
* sysdeps/unix/sysv/linux/mmap64.c (__mmap64): Likewise.
* sysdeps/unix/sysv/linux/mq_close.c (mq_close): Likewise.
* sysdeps/unix/sysv/linux/mq_open.c (__mq_open): Likewise.
* sysdeps/unix/sysv/linux/mq_unlink.c (mq_unlink): Likewise.
* sysdeps/unix/sysv/linux/msgget.c (msgget): Likewise.
* sysdeps/unix/sysv/linux/prlimit.c (prlimit): Likewise.
* sysdeps/unix/sysv/linux/pt-raise.c (raise): Likewise.
* sysdeps/unix/sysv/linux/raise.c (raise): Likewise.
* sysdeps/unix/sysv/linux/readahead.c (__readahead): Likewise.
* sysdeps/unix/sysv/linux/reboot.c (reboot): Likewise.
* sysdeps/unix/sysv/linux/semget.c (semget): Likewise.
* sysdeps/unix/sysv/linux/semop.c (semop): Likewise.
* sysdeps/unix/sysv/linux/semtimedop.c (semtimedop): Likewise.
* sysdeps/unix/sysv/linux/setrlimit64.c (setrlimit64): Likewise.
* sysdeps/unix/sysv/linux/shmat.c (shmat): Likewise.
* sysdeps/unix/sysv/linux/shmdt.c (shmdt): Likewise.
* sysdeps/unix/sysv/linux/shmget.c (shmget): Likewise.
* sysdeps/unix/sysv/linux/signalfd.c (signalfd): Likewise.
* sysdeps/unix/sysv/linux/sigpending.c (sigpending): Likewise.
* sysdeps/unix/sysv/linux/sigprocmask.c ( __sigprocmask): Likewise.
* sysdeps/unix/sysv/linux/sigqueue.c (__sigqueue): Likewise.
* sysdeps/unix/sysv/linux/speed.c (cfsetospeed): Likewise.
* sysdeps/unix/sysv/linux/statfs64.c (__statfs64): Likewise.
* sysdeps/unix/sysv/linux/sysctl.c (__sysctl): Likewise.
* sysdeps/unix/sysv/linux/tcsendbrk.c (tcsendbreak): Likewise.
* sysdeps/unix/sysv/linux/tcsetattr.c (tcsetattr): Likewise.
* sysdeps/unix/sysv/linux/timer_getoverr.c (timer_getoverrun):
Likewise.
* sysdeps/unix/sysv/linux/timer_gettime.c (timer_gettime):
Likewise.
* sysdeps/unix/sysv/linux/timer_settime.c (timer_settime):
Likewise.
* sysdeps/unix/sysv/linux/truncate64.c (truncate64): Likewise.
* sysdeps/unix/sysv/linux/ustat.c (ustat): Likewise.
* sysdeps/unix/sysv/linux/utimensat.c (utimensat): Likewise.
* sysdeps/unix/sysv/linux/utimes.c (__utimes): Likewise.
* sysdeps/unix/sysv/linux/xmknod.c (__xmknod): Likewise.
* sysdeps/unix/sysv/linux/xmknodat.c (__xmknodat): Likewise.
* sysdeps/unix/sysv/linux/xstat.c (__xstat): Likewise.
* sysdeps/unix/sysv/linux/xstat64.c (___xstat64): Likewise.
* sysdeps/unix/sysv/linux/xstatconv.c (__xstat_conv): Likewise.
(__xstat64_conv): Likewise.
(__xstat32_conv): Likewise.
* sysdeps/unix/sysv/linux/sched_getaffinity.c
(__sched_getaffinity_new): Add libc_hidden_proto and
libc_hidden_def. Use INLINE_SYSCALL_ERROR_RETURN.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1999-12-17 Ulrich Drepper <drepper@cygnus.com>
* string/bits/string2.h (__strtok_r_1c): Help gcc optimizing string
access.
* locale/programs/ld-collate.c: Implement handling of absolute
ellipsis. Parsing of file and constructing the internal data
structures should now be complete.
(collate_finish): Start adding support to generate the data
structures which are written out to the file.
* intl/dcgettext.c: Rewrite to handle caching of previous results here
instead of in the dcgettext macro.
* intl/libintl.h (dcgettext): Don't define for systems using this
glibc or systems with tsearch.
* sysdeps/generic/mathdef.h: Protect definitions for math.h
against double inclusion.
* sysdeps/alpha/fpu/bits/mathdef.h: Likewise.
* sysdeps/i386/fpu/bits/mathdef.h: Likewise.
* sysdeps/m68k/fpu/bits/mathdef.h: Likewise.
* sysdeps/powerpc/fpu/bits/mathdef.h: Likewise.
* sysdeps/i386/fpu/libm-test-ulps: Add more deltas (are mobile PIIs
that different?).
1999-12-17 Andreas Jaeger <aj@suse.de>
* rt/aio.h (struct aiocb64): Add member __next_prio to sync the
struct with aiocb.
* rt/Makefile (tests): Added tst-aio64.
Added dependency rules for tst-aio64.
* rt/tst-aio64.c: New file, copied from tst-aio.c and changed for
64bit tests.
1999-12-15 Thorsten Kukuk <kukuk@suse.de>
* sysdeps/unix/sysv/linux/alpha/oldgetrlimit64.c: Removed.
* sysdeps/unix/sysv/linux/alpha/oldsetrlimit64.c: Removed.
* sysdeps/unix/sysv/linux/bits/resource.h: Change RLIM_INFINITY back to
old value (signed long).
* sysdeps/unix/sysv/linux/i386/bits/resource.h: New, with unsigned
long RLIM_INFINITY.
* sysdeps/unix/sysv/linux/getrlimit.c: Moved from here to ...
* sysdeps/unix/sysv/linux/i386/getrlimit.c: ... here.
* sysdeps/unix/sysv/linux/getrlimit64.c: Moved from here to ...
* sysdeps/unix/sysv/linux/i386/getrlimit64.c: ... here.
* sysdeps/unix/sysv/linux/oldgetrlimit64.c: Moved from here to ...
* sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c: ... here.
* sysdeps/unix/sysv/linux/oldsetrlimit64.c: Moved from here to ...
* sysdeps/unix/sysv/linux/i386/oldsetrlimit64.c: ... here.
* sysdeps/unix/sysv/linux/setrlimit.c: Moved from here to ...
* sysdeps/unix/sysv/linux/i386/setrlimit.c: ... here.
* sysdeps/unix/sysv/linux/setrlimit64.c: Moved from here to ...
* sysdeps/unix/sysv/linux/i386/setrlimit64.c: ... here.
* sysdeps/unix/sysv/linux/sparc/bits/resource.h: New.
* sysdeps/unix/sysv/linux/sparc/sparc64/oldgetrlimit64.c: Removed.
* sysdeps/unix/sysv/linux/sparc/sparc64/oldsetrlimit64.c: Removed.
1999-12-17 Andreas Jaeger <aj@suse.de>
* elf/ldconfig.c: Add new option -l to manualy link shared
libraries.
(options): Added option.
(parse_opt): Set option.
(main): Handle option.
(manual_link): New function.
1999-12-17 Thorsten Kukuk <kukuk@suse.de>
* string/bits/string2.h: Fix patch from 1999-12-07.
1999-12-16 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/generic/strsep.c: If delim string has only one character
don't run over end of string.
* locale/programs/ld-collate.c (insert_weights): Also update next
pointer of last cursor element.
(insert_value): Return nonzero value if nothing got inserted.
(handle_ellipsis): Don't do anything if to-value cannot be inserted.
1999-12-10 Jakub Jelinek <jakub@redhat.com>
* stdlib/longlong.h (__sparc_v9__): Use %rDIGIT instead of %DIGIT
where appropriate.
1999-12-10 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/sparc/sparc64/sigaction.c (__sigaction):
Copy sa_flags into kernel sigaction structure.
1999-12-14 Andreas Jaeger <aj@suse.de>
* string/tester.c (test_strsep): More tests for access beyond
the final NUL. The first two tests come from PR libc/1486 by
martinea@iro.umontreal.ca.
1999-12-14 Thorsten Kukuk <kukuk@suse.de>
* nis/ypclnt.c: Correct handling of cached client handles.
(__xdr_ypresp_all): Call callback function for errors, too,
like Solaris does.
* nis/nss_compat/compat-grp.c: Make sure errno is always set correct.
* nis/nss_compat/compat-initgroups.c: Likewise.
* nis/nss_compat/compat-spwd.c: Likewise.
* nis/nss_nis/nis-alias.c: Likewise.
* nis/nss_nis/nis-ethers.c: Likewise.
* nis/nss_nis/nis-grp.c: Likewise.
* nis/nss_nis/nis-hosts.c: Likewise.
* nis/nss_nis/nis-netgrp.c: Likewise.
* nis/nss_nis/nis-publickey.c: Likewise.
* nis/nss_nis/nis-service.c: Likewise. Also use services.byservicename
Map if available, optimize query if name/port and protocol is known.
|