glibc/sysdeps
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
..
aarch64 Regenerate aarch64 libm-test-ulps 2015-09-24 14:22:31 +01:00
alpha Move bits/atomic.h to atomic-machine.h (bug 14912). 2015-09-11 20:00:19 +00:00
arm [BZ #19129][ARM] Fix _dl_tlsdesc_resolve_hold to save r0 2015-10-14 17:01:12 +01:00
generic Always enable pointer guard [BZ #18928] 2015-10-15 09:23:32 +02:00
gnu Add more TCP_* values to netinet/tcp.h. 2015-09-01 13:45:49 +00:00
hppa Rename bits/linkmap.h to linkmap.h (bug 14912). 2015-09-04 19:44:27 +00:00
i386 Remove configure tests for -mno-vzeroupper support. 2015-10-09 16:03:48 +00:00
ia64 Move bits/atomic.h to atomic-machine.h (bug 14912). 2015-09-11 20:00:19 +00:00
ieee754 Fix lrint, llrint, lround, llround missing exceptions for MIPS (bug 16399). 2015-10-09 21:02:19 +00:00
init_array NPTL: Initializer for .init_array-only configurations. 2015-02-13 13:19:11 -08:00
m68k Use soft-fp fma for no-FPU ColdFire (bug 13304). 2015-09-25 17:30:56 +00:00
mach Add task_notify to mach_interface_list 2015-10-08 02:14:43 +02:00
microblaze Use soft-fp fma for MicroBlaze (bug 13304). 2015-09-25 17:29:19 +00:00
mips Regenerate MIPS libm-test-ulps. 2015-10-09 22:39:11 +00:00
nacl NaCl: Do not install <sys/mtio.h>. 2015-09-11 14:16:18 -07:00
nios2 Fixes extern protected data handling testcases elf/tst-protected1a 2015-07-26 05:27:18 -07:00
nptl Use __libc_ptf_call in _longjmp_unwind 2015-09-18 12:22:47 -07:00
posix To fix BZ #18675, use __fstatvfs64 in __fpathconf. 2015-09-09 18:41:25 -07:00
powerpc Fix powerpc32 lround, lroundf spurious exceptions (bug 19134). 2015-10-14 21:13:42 +00:00
pthread Move bits/libc-lock.h and bits/libc-lockP.h out of bits/ (bug 14912). 2015-09-08 21:11:03 +00:00
s390 Move bits/atomic.h to atomic-machine.h (bug 14912). 2015-09-11 20:00:19 +00:00
sh Rename bits/linkmap.h to linkmap.h (bug 14912). 2015-09-04 19:44:27 +00:00
sparc Make scalbn set errno (bug 6803). 2015-09-16 21:11:00 +00:00
tile Don't use dbl-64/wordsize-64 lround based on llround for ILP32 (bug 19079). 2015-10-07 00:40:12 +00:00
unix i386: Remove syscall assembly codes with 6 arguments 2015-10-15 05:03:24 -07:00
wordsize-32 Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
wordsize-64 Update copyright dates with scripts/update-copyrights. 2015-01-02 16:29:47 +00:00
x86 Fix pow missing underflows (bug 18825). 2015-09-25 22:29:10 +00:00
x86_64 Support PLT and GOT references in local PIC check 2015-10-14 06:00:02 -07:00