glibc/sysdeps/unix/sysv/linux/i386
H.J. Lu 83c01ab32b i386: Remove syscall assembly codes with 6 arguments
This patch removes i386 assembly implementation for mmap, mmap64,
semtimeop now that i386 have 6 argument syscall support from C code
and GCC 5 can inline syscalls with 6 arguments.  We also compile mmap.c,
mmap64.c and semtimedop.c with -fomit-frame-pointer since %ebp may be
used to pass the 6th argument to syscall.

Fo sysdeps/unix/sysv/linux/i386/mmap.c, with -O2 -march=i686
-mtune=generic, GCC 5.2 now generates:

<__mmap>:
   0:	sub    $0x10,%esp
   3:	mov    0x28(%esp),%eax
   7:	mov    %ebx,(%esp)
   a:	mov    0x18(%esp),%ecx
   e:	mov    %esi,0x4(%esp)
  12:	mov    0x14(%esp),%ebx
  16:	mov    %edi,0x8(%esp)
  1a:	mov    0x1c(%esp),%edx
  1e:	test   $0xfff,%eax
  23:	mov    0x20(%esp),%esi
  27:	mov    %ebp,0xc(%esp)
  2b:	mov    0x24(%esp),%edi
  2f:	jne    60 <__mmap+0x60>
  31:	shr    $0xc,%eax
  34:	mov    %eax,%ebp
  36:	mov    $0xc0,%eax
  3b:	call   *%gs:0x10
  42:	cmp    $0xfffff000,%eax
  47:	ja     65 <__mmap+0x65>
  49:	mov    (%esp),%ebx
  4c:	mov    0x4(%esp),%esi
  50:	mov    0x8(%esp),%edi
  54:	mov    0xc(%esp),%ebp
  58:	add    $0x10,%esp
  5b:	ret
  5c:	lea    0x0(%esi,%eiz,1),%esi
  60:	mov    $0xffffffea,%eax
  65:	mov    (%esp),%ebx
  68:	mov    0x4(%esp),%esi
  6c:	mov    0x8(%esp),%edi
  70:	mov    0xc(%esp),%ebp
  74:	add    $0x10,%esp
  77:	jmp    78 <__mmap+0x78>

vs sysdeps/unix/sysv/linux/i386/mmap.S:

<__mmap>:
   0:	push   %ebp
   1:	push   %ebx
   2:	push   %esi
   3:	push   %edi
   4:	mov    0x14(%esp),%ebx
   8:	mov    0x18(%esp),%ecx
   c:	mov    0x1c(%esp),%edx
  10:	mov    0x20(%esp),%esi
  14:	mov    0x24(%esp),%edi
  18:	mov    0x28(%esp),%ebp
  1c:	test   $0xfff,%ebp
  22:	mov    $0xffffffea,%eax
  27:	jne    38 <__mmap+0x38>
  29:	shr    $0xc,%ebp
  2c:	mov    $0xc0,%eax
  31:	call   *%gs:0x10
  38:	pop    %edi
  39:	pop    %esi
  3a:	pop    %ebx
  3b:	pop    %ebp
  3c:	cmp    $0xfffff000,%eax
  41:	ja     44 <__mmap+0x44>
  43:	ret
  44:	call   45 <__mmap+0x45>	45: R_386_PC32	__x86.get_pc_thunk.cx
  49:	add    $0x2,%ecx	4b: R_386_GOTPC	_GLOBAL_OFFSET_TABLE_
  4f:	mov    0x0(%ecx),%ecx	51: R_386_TLS_GOTIE	__libc_errno
  55:	neg    %eax
  57:	mov    %eax,%gs:(%ecx)
  5a:	or     $0xffffffff,%eax
  5d:	ret

The C version has:

   3:	mov    0x28(%esp),%eax
...
  1e:	test   $0xfff,%eax
...
  31:	sar    $0xc,%eax
  34:	mov    %eax,%ebp

is due to missing $ebx register constraint for inline asm.  We have
to use "r" constraint with

register unsigned int _a6 asm ("ebp") = (unsigned int) (arg6);

and compiler chose %eax for offset (arg6) in

  if (offset & (MMAP_PAGE_UNIT - 1))

	* sysdeps/unix/sysv/linux/i386/Makefile (CFLAGS-epoll_pwait.c):
	Add -fomit-frame-pointer.
	(CFLAGS-mmap.c): Likewise.
	(CFLAGS-mmap64.c): Likewise.
	(CFLAGS-semtimedop.c): Likewise.
	* sysdeps/unix/sysv/linux/i386/mmap.c: New file.
	* sysdeps/unix/sysv/linux/i386/mmap.S: Remove file.
	* sysdeps/unix/sysv/linux/i386/mmap64.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/semtimedop.S: Likewise.
2015-10-15 05:03:24 -07:00
..
i686 Move sysdeps/unix/sysv/linux/i386/i486/*.? to i386 2015-09-30 10:12:44 -07:00
i786
Implies NPTL is no longer an add-on! 2014-07-07 09:29:06 -07:00
Makefile i386: Remove syscall assembly codes with 6 arguments 2015-10-15 05:03:24 -07:00
Versions
____longjmp_chk.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
_exit.S PLT avoidance for _exit in rtld. 2015-07-09 15:25:47 -07:00
alphasort64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
arch-fork.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
brk.c Use INTERNAL_SYSCALL and INLINE_SYSCALL_ERROR_RETURN_VALUE 2015-10-14 03:45:46 -07:00
c++-types.data
clone.S Add INLINE_SYSCALL_ERROR_RETURN_VALUE 2015-10-13 11:59:15 -07:00
configure Move architecture cases out of sysdeps/unix/sysv/linux/configure.ac. 2014-06-24 20:53:03 +00:00
configure.ac Move architecture cases out of sysdeps/unix/sysv/linux/configure.ac. 2014-06-24 20:53:03 +00:00
dl-librecon.h 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
dl-sysdep.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
epoll_pwait.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
fcntl.c nptl: Rewrite cancellation macros 2015-06-04 18:58:36 -03:00
fxstat.c Use INTERNAL_SYSCALL and INLINE_SYSCALL_ERROR_RETURN_VALUE 2015-10-14 03:45:46 -07:00
fxstatat.c Use INTERNAL_SYSCALL and INLINE_SYSCALL_ERROR_RETURN_VALUE 2015-10-14 03:45:46 -07:00
get_clockfreq.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
getcontext.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
getdents64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
getmsg.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
getrlimit64.c Fix posix_spawn getrlimit64 namespace (bug 17991). 2015-02-18 00:26:35 +00:00
gettimeofday.c x86: Remove vsyscall usage 2015-06-09 18:10:19 -03:00
glob64.c
init-first.c Consolidate vDSO macros and usage 2015-05-26 10:10:36 -03:00
kernel-features.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
ld.abilist
ldconfig.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
libBrokenLocale.abilist
libanl.abilist
libc-do-syscall.S Support six-argument syscalls from C for 32-bit x86, use generic lowlevellock-futex.h (bug 18138). 2015-03-25 15:17:54 +00:00
libc-lowlevellock.S Move sysdeps/unix/sysv/linux/i386/i486/*.? to i386 2015-09-30 10:12:44 -07:00
libc.abilist libio: fmemopen rewrite to POSIX compliance 2015-07-08 12:07:21 -03:00
libcrypt.abilist
libdl.abilist
libm.abilist
libnsl.abilist
libpthread.abilist
libresolv.abilist
librt.abilist
libthread_db.abilist
libutil.abilist
lll_timedlock_wait.c Move sysdeps/unix/sysv/linux/i386/i486/*.? to i386 2015-09-30 10:12:44 -07:00
lll_timedwait_tid.c Move sysdeps/unix/sysv/linux/i386/i486/*.? to i386 2015-09-30 10:12:44 -07:00
localplt.data Support PLT and GOT references in local PIC check 2015-10-14 06:00:02 -07:00
lockf64.c Use INTERNAL_SYSCALL and INLINE_SYSCALL_ERROR_RETURN_VALUE 2015-10-14 03:45:46 -07:00
lowlevellock.S Move sysdeps/unix/sysv/linux/i386/i486/*.? to i386 2015-09-30 10:12:44 -07:00
lowlevellock.h Clean up BUSY_WAIT_NOP and atomic_delay. 2015-06-30 15:57:15 +02:00
lowlevelrobustlock.S Move sysdeps/unix/sysv/linux/i386/i486/*.? to i386 2015-09-30 10:12:44 -07:00
lxstat.c Use INTERNAL_SYSCALL and INLINE_SYSCALL_ERROR_RETURN_VALUE 2015-10-14 03:45:46 -07:00
makecontext.S Call __setcontext with HIDDEN_JUMPTARGET 2015-08-19 04:41:01 -07:00
mmap.c i386: Remove syscall assembly codes with 6 arguments 2015-10-15 05:03:24 -07:00
olddirent.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
oldgetrlimit64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
posix_fadvise64.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
profil-counter.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
pthread_barrier_wait.S Move sysdeps/unix/sysv/linux/i386/i486/*.? to i386 2015-09-30 10:12:44 -07:00
pthread_cond_broadcast.S Move sysdeps/unix/sysv/linux/i386/i486/*.? to i386 2015-09-30 10:12:44 -07:00
pthread_cond_signal.S Move sysdeps/unix/sysv/linux/i386/i486/*.? to i386 2015-09-30 10:12:44 -07:00
pthread_cond_timedwait.S Move sysdeps/unix/sysv/linux/i386/i486/*.? to i386 2015-09-30 10:12:44 -07:00
pthread_cond_wait.S Move sysdeps/unix/sysv/linux/i386/i486/*.? to i386 2015-09-30 10:12:44 -07:00
putmsg.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
readdir64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
readdir64_r.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +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 Refactor scandir/scandirat to use common tail. 2015-05-13 12:34:11 -07:00
setcontext.S Call __setcontext with HIDDEN_JUMPTARGET 2015-08-19 04:41:01 -07:00
setegid.c Use INTERNAL_SYSCALL and INLINE_SYSCALL_ERROR_RETURN_VALUE 2015-10-14 03:45:46 -07:00
seteuid.c Use INTERNAL_SYSCALL and INLINE_SYSCALL_ERROR_RETURN_VALUE 2015-10-14 03:45:46 -07:00
setgid.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
setgroups.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
setregid.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
setresgid.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
setresuid.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
setreuid.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
setuid.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
shlib-versions Clean up gnu/lib-names.h generation (bug 14171). 2014-09-26 17:33:04 +00:00
sigaction.c Use INTERNAL_SYSCALL and INLINE_SYSCALL_ERROR_RETURN_VALUE 2015-10-14 03:45:46 -07:00
sigcontextinfo.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
smp.h 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 Remove __libc_waitpid function name. 2014-11-07 01:27:16 +00:00
sysdep-cancel.h Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
sysdep.c Add INLINE_SYSCALL_ERROR_RETURN_VALUE 2015-10-13 11:59:15 -07:00
sysdep.h Add INLINE_SYSCALL_ERROR_RETURN_VALUE 2015-10-13 11:59:15 -07:00
time.c x86: Remove vsyscall usage 2015-06-09 18:10:19 -03:00
ucontext_i.sym
versionsort64.c Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
vfork.S Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
xstat.c Use INTERNAL_SYSCALL and INLINE_SYSCALL_ERROR_RETURN_VALUE 2015-10-14 03:45:46 -07:00