H.J. Lu
fb1cf10811
Add INLINE_SYSCALL_ERROR_RETURN_VALUE
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_ERROR_RETURN_VALUE so that i386 can optimize setting
errno by branching to the internal __syscall_error without PLT.
With i386 INLINE_SYSCALL_ERROR_RETURN_VALUE 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/sysv/linux/sysdep.h: New file.
* sysdeps/unix/sysv/linux/i386/sysdep.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/sysdep.h: Include
<sysdeps/unix/sysv/linux/sysdep.h>.
* sysdeps/unix/sysv/linux/arm/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/generic/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/hppa/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/m68k/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/microblaze/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/mips/mips32/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/sh/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/i386/Makefile [$(subdir) == csu]
(sysdep-dl-routines): Add sysdep.
[$(subdir) == nptl] (libpthread-routines): Likewise.
[$(subdir) == rt] (librt-routines): Likewise.
* sysdeps/unix/sysv/linux/i386/clone.S (__clone): Don't check
PIC when branching to SYSCALL_ERROR_LABEL.
* sysdeps/unix/sysv/linux/i386/sysdep.S: Removed.
* sysdeps/unix/sysv/linux/i386/sysdep.h: Include
<sysdeps/unix/sysv/linux/sysdep.h>.
(SYSCALL_ERROR_LABEL): Changed to __syscall_error.
(SYSCALL_ERROR_ERRNO): Removed.
(SYSCALL_ERROR_HANDLER): Changed to empty.
(SYSCALL_ERROR_HANDLER_TLS_STORE): Likewise.
(__syscall_error): New prototype.
[IS_IN (libc)] (INLINE_SYSCALL): New macro.
(INLINE_SYSCALL_ERROR_RETURN_VALUE): Likewise.
2015-10-13 11:59:15 -07:00
..
2015-07-09 09:53:30 +01:00
2015-10-13 11:59:15 -07:00
2015-10-13 11:59:15 -07:00
2015-09-01 13:47:25 +00:00
2015-10-13 11:59:15 -07:00
2015-10-13 11:59:15 -07:00
2015-10-13 11:59:15 -07:00
2015-10-13 11:59:15 -07:00
2015-09-12 21:09:59 -04:00
2015-10-13 11:59:15 -07:00
2015-10-13 11:59:15 -07:00
2015-10-13 11:59:15 -07:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-09-11 20:00:19 +00:00
2015-10-13 11:59:15 -07:00
2015-10-13 11:59:15 -07:00
2015-01-02 16:29:47 +00:00
2015-10-13 11:59:15 -07:00
2015-10-13 11:59:15 -07:00
2015-06-29 14:38:46 +00:00
2015-07-21 12:11:55 -04:00
2015-10-09 14:26:08 -03:00
2015-08-20 04:29:23 -07:00
2015-10-13 11:59:15 -07:00
2015-07-09 15:25:47 -07:00
2015-06-04 18:58:36 -03:00
2015-08-25 13:45:56 -03:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-08-25 13:45:56 -03:00
2015-01-02 16:29:47 +00:00
2015-09-08 21:11:03 +00:00
2015-01-08 10:49:40 -08:00
2015-01-02 16:29:47 +00:00
2015-05-26 10:10:36 -03:00
2015-05-26 10:10:36 -03:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-06 04:59:13 -08:00
2015-01-02 16:29:47 +00:00
2014-09-16 17:45:03 +00:00
2014-09-16 17:45:03 +00:00
2015-08-25 13:45:56 -03:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2014-06-20 15:41:35 +00:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2014-06-25 20:29:45 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-06-04 18:58:36 -03:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-06-04 18:58:36 -03:00
2015-06-04 18:58:36 -03:00
2015-09-17 16:38:54 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-06-09 19:52:01 +00:00
2015-08-21 09:57:15 -07:00
2015-07-10 13:47:09 +02:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-06-12 20:02:30 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-08-25 13:45:56 -03:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-08-25 13:45:56 -03:00
2015-08-25 13:45:56 -03:00
2015-01-02 16:29:47 +00:00
2015-09-12 21:09:59 -04:00
2015-05-26 17:03:35 -03:00
2015-09-08 21:11:03 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2014-06-12 13:48:47 -07:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-08-24 10:53:49 +02:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:54:45 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-08-25 13:45:56 -03:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-08-25 11:37:44 -07:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-06-17 20:20:08 +00:00
2015-08-21 09:57:15 -07:00
2015-06-17 20:19:04 +00:00
2015-06-17 20:19:04 +00:00
2015-08-21 09:57:15 -07:00
2015-08-24 10:53:49 +02:00
2015-08-21 09:57:15 -07:00
2015-06-04 18:58:36 -03:00
2015-06-04 18:58:36 -03:00
2015-01-02 16:29:47 +00:00
2015-06-04 14:52:34 -03:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-06-04 18:58:36 -03:00
2015-08-11 09:37:38 +02:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-05-22 17:09:36 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-05-05 08:28:35 +02:00
2015-05-05 08:28:35 +02:00
2015-01-02 16:29:47 +00:00
2015-06-04 18:58:36 -03:00
2015-06-04 18:58:36 -03:00
2015-06-04 18:58:36 -03:00
2015-06-04 18:58:36 -03:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-06-04 18:58:36 -03:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-06 08:23:58 -08:00
2015-03-23 16:34:48 +01:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-05-20 14:52:05 -07:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-06-04 18:58:36 -03:00
2015-06-04 18:58:36 -03:00
2015-06-04 18:58:36 -03:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-08-25 13:45:56 -03:00
2015-08-25 13:45:56 -03:00
2015-06-04 18:58:36 -03:00
2015-08-25 13:45:56 -03:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-06-09 14:56:21 -03:00
2015-01-02 16:29:47 +00:00
2015-09-16 14:51:28 +02:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-25 13:45:56 -03:00
2015-06-04 18:58:36 -03:00
2015-08-25 13:45:56 -03:00
2015-08-25 13:45:56 -03:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-08-25 13:45:56 -03:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2014-09-12 12:28:47 +00:00
2015-09-08 21:11:03 +00:00
2015-08-21 09:57:15 -07:00
2015-08-24 10:53:49 +02:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-25 13:45:56 -03:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-06-04 18:58:36 -03:00
2015-06-04 18:58:36 -03:00
2015-01-06 08:23:58 -08:00
2015-06-04 18:58:36 -03:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-08-25 13:45:56 -03:00
2015-05-22 17:38:06 -03:00
2015-09-04 15:19:30 -03:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-06-09 19:52:01 +00:00
2015-06-04 18:58:36 -03:00
2015-09-12 21:09:59 -04:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-05-26 10:10:36 -03:00
2015-10-13 11:59:15 -07:00
2014-06-25 18:09:01 +00:00
2015-09-08 21:11:03 +00:00
2015-06-04 18:58:36 -03:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-06-04 18:58:36 -03:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-06-01 22:25:02 -03:00
2015-08-21 09:57:15 -07:00
2015-02-06 12:30:23 -08:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-06-24 13:56:46 -07:00
2015-02-06 12:30:23 -08:00
2015-02-06 12:30:23 -08:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-01-02 16:29:47 +00:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-01-02 16:29:47 +00:00
2015-06-04 18:58:36 -03:00
2015-06-04 18:58:36 -03:00
2015-06-04 18:58:36 -03:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-21 09:57:15 -07:00
2015-08-19 04:41:06 -07:00