glibc/sysdeps/unix/sysv/linux/arm
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
..
bits Move bits/atomic.h to atomic-machine.h (bug 14912). 2015-09-11 20:00:19 +00:00
sys Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
____longjmp_chk.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
aeabi_read_tp.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
alphasort64.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
arch-fork.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
arm-features.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
atomic-machine.h Move bits/atomic.h to atomic-machine.h (bug 14912). 2015-09-11 20:00:19 +00:00
brk.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
c++-types.data Verbatim NPTL file moves for ARM/Linux. 2014-05-13 10:04:20 -07:00
clone.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dl-cache.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dl-machine.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dl-procinfo.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
dl-procinfo.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fcntl.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
ftruncate64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fxstat.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
fxstatat.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
getcontext.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
getdents64.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
getrlimit64.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
glob64.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
Implies NPTL is no longer an add-on! 2014-07-07 09:29:06 -07:00
init-first.c ARM: VDSO support 2015-06-04 21:10:43 +00:00
ioperm.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
kernel-features.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ld.abilist Verbatim NPTL file moves for ARM/Linux. 2014-05-13 10:04:20 -07:00
ldconfig.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ldsodefs.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
libanl.abilist Verbatim NPTL file moves for ARM/Linux. 2014-05-13 10:04:20 -07:00
libBrokenLocale.abilist Verbatim NPTL file moves for ARM/Linux. 2014-05-13 10:04:20 -07:00
libc-do-syscall.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
libc-vdso.h ARM: VDSO support 2015-06-04 21:10:43 +00:00
libc.abilist libio: fmemopen rewrite to POSIX compliance 2015-07-08 12:07:21 -03:00
libcrypt.abilist Verbatim NPTL file moves for ARM/Linux. 2014-05-13 10:04:20 -07:00
libdl.abilist Verbatim NPTL file moves for ARM/Linux. 2014-05-13 10:04:20 -07:00
libm.abilist Verbatim NPTL file moves for ARM/Linux. 2014-05-13 10:04:20 -07:00
libnsl.abilist Verbatim NPTL file moves for ARM/Linux. 2014-05-13 10:04:20 -07:00
libpthread.abilist Verbatim NPTL file moves for ARM/Linux. 2014-05-13 10:04:20 -07:00
libresolv.abilist Verbatim NPTL file moves for ARM/Linux. 2014-05-13 10:04:20 -07:00
librt.abilist Verbatim NPTL file moves for ARM/Linux. 2014-05-13 10:04:20 -07:00
libthread_db.abilist Verbatim NPTL file moves for ARM/Linux. 2014-05-13 10:04:20 -07:00
libutil.abilist Verbatim NPTL file moves for ARM/Linux. 2014-05-13 10:04:20 -07:00
localplt.data Run check-localpltk/textrel/execstack over ld.so. 2014-11-06 15:48:44 -05:00
lockf64.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
lxstat.c Fix whitespace in ARM files to allow move. 2014-02-08 01:52:38 +00:00
makecontext.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
Makefile ARM: VDSO support 2015-06-04 21:10:43 +00:00
mmap.c arm: Assembly implementation cleanup 2015-08-05 10:41:03 -03:00
msgctl.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
oldgetrlimit64.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
oldgetrlimit.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
oldsetrlimit.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
posix_fadvise64.c Fix ARM posix_fadvise64 namespace (bug 17793). 2015-01-05 16:05:34 +00:00
posix_fadvise.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
pread64.c nptl: Rewrite cancellation macros 2015-06-04 18:58:36 -03:00
pread.c nptl: Rewrite cancellation macros 2015-06-04 18:58:36 -03:00
profil-counter.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
pwrite64.c nptl: Rewrite cancellation macros 2015-06-04 18:58:36 -03:00
pwrite.c nptl: Rewrite cancellation macros 2015-06-04 18:58:36 -03:00
readahead.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
readdir64_r.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
readdir64.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
readelflib.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
register-dump.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
scandir64.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
semctl.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
setcontext.S Bug 18125: Call exit after last linked context. 2015-05-08 11:29:38 -04:00
setegid.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
seteuid.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
setgid.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
setgroups.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
setregid.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
setresgid.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
setresuid.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
setreuid.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
setuid.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
shlib-versions Remove configuration name patterns from shlib-versions. 2014-09-12 12:28:47 +00:00
shmctl.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
sigaction.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
sigcontextinfo.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
sigrestorer.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
swapcontext.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
syscall.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
syscalls.list Move setfsgid/setfsuid definitions to syscalls.list (bug 14138). 2014-10-27 12:24:42 +00:00
sysdep-cancel.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
sysdep.h Add INLINE_SYSCALL_ERROR_RETURN_VALUE 2015-10-13 11:59:15 -07:00
sysdep.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
tls.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
truncate64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ucontext_i.sym Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
umount.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
Versions ARM: VDSO support 2015-06-04 21:10:43 +00:00
versionsort64.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00
vfork.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
xstat.c Move arm from ports to libc. 2014-02-08 01:49:39 +00:00