94084c
commit 2fe2af88abd13ae5636881da2e26f461ecb7dfb5
94084c
Author: Florian Weimer <fweimer@redhat.com>
94084c
Date:   Thu Jan 13 14:59:29 2022 +0100
94084c
94084c
    i386: Remove broken CAN_USE_REGISTER_ASM_EBP (bug 28771)
94084c
    
94084c
    The configure check for CAN_USE_REGISTER_ASM_EBP tried to compile a
94084c
    simple function that uses %ebp as an inline assembly operand.  If
94084c
    compilation failed, CAN_USE_REGISTER_ASM_EBP was set 0, which
94084c
    eventually had these consequences:
94084c
    
94084c
    (1) %ebx was avoided as an inline assembly operand, with an
94084c
        assembler macro hack to avoid unnecessary register moves.
94084c
    (2) %ebp was avoided as an inline assembly operand, using an
94084c
        out-of-line syscall function for 6-argument system calls.
94084c
    
94084c
    (1) is no longer needed for any GCC version that is supported for
94084c
    building glibc.  %ebx can be used directly as a register operand.
94084c
    Therefore, this commit removes the %ebx avoidance completely.  This
94084c
    avoids the assembler macro hack, which turns out to be incompatible
94084c
    with the current Systemtap probe macros (which switch to .altmacro
94084c
    unconditionally).
94084c
    
94084c
    (2) is still needed in many build configurations.  The existing
94084c
    configure check cannot really capture that because the simple function
94084c
    succeeds to compile, while the full glibc build still fails.
94084c
    Therefore, this commit removes the check, the CAN_USE_REGISTER_ASM_EBP
94084c
    macro, and uses the out-of-line syscall function for 6-argument system
94084c
    calls unconditionally.
94084c
    
94084c
    Reviewed-by: H.J. Lu <hjl.tools@gmail.com>
94084c
    (cherry picked from commit a78e6a10d0b50d0ca80309775980fc99944b1727)
94084c
94084c
diff --git a/config.h.in b/config.h.in
94084c
index 458342887e4e9380..790038fec60eb049 100644
94084c
--- a/config.h.in
94084c
+++ b/config.h.in
94084c
@@ -286,10 +286,6 @@
94084c
 /* Define if static PIE is enabled.  */
94084c
 #define ENABLE_STATIC_PIE 0
94084c
 
94084c
-/* Some compiler options may now allow to use ebp in __asm__ (used mainly
94084c
-   in i386 6 argument syscall issue).  */
94084c
-#define CAN_USE_REGISTER_ASM_EBP 0
94084c
-
94084c
 /* The default value of x86 CET control.  */
94084c
 #define DEFAULT_DL_X86_CET_CONTROL cet_elf_property
94084c
 
94084c
diff --git a/sysdeps/unix/sysv/linux/i386/configure b/sysdeps/unix/sysv/linux/i386/configure
94084c
index 0327590486c80777..f119e62fc31903b3 100644
94084c
--- a/sysdeps/unix/sysv/linux/i386/configure
94084c
+++ b/sysdeps/unix/sysv/linux/i386/configure
94084c
@@ -1,44 +1,5 @@
94084c
 # This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
94084c
  # Local configure fragment for sysdeps/unix/sysv/linux/i386.
94084c
 
94084c
-# Check if CFLAGS allows compiler to use ebp register in inline assembly.
94084c
-
94084c
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler flags allows ebp in inline assembly" >&5
94084c
-$as_echo_n "checking if compiler flags allows ebp in inline assembly... " >&6; }
94084c
-if ${libc_cv_can_use_register_asm_ebp+:} false; then :
94084c
-  $as_echo_n "(cached) " >&6
94084c
-else
94084c
-
94084c
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
94084c
-/* end confdefs.h.  */
94084c
-
94084c
-    void foo (int i)
94084c
-    {
94084c
-      register int reg asm ("ebp") = i;
94084c
-      asm ("# %0" : : "r" (reg));
94084c
-    }
94084c
-int
94084c
-main ()
94084c
-{
94084c
-
94084c
-  ;
94084c
-  return 0;
94084c
-}
94084c
-_ACEOF
94084c
-if ac_fn_c_try_compile "$LINENO"; then :
94084c
-  libc_cv_can_use_register_asm_ebp=yes
94084c
-else
94084c
-  libc_cv_can_use_register_asm_ebp=no
94084c
-fi
94084c
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
94084c
-
94084c
-fi
94084c
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_can_use_register_asm_ebp" >&5
94084c
-$as_echo "$libc_cv_can_use_register_asm_ebp" >&6; }
94084c
-if test $libc_cv_can_use_register_asm_ebp = yes; then
94084c
-  $as_echo "#define CAN_USE_REGISTER_ASM_EBP 1" >>confdefs.h
94084c
-
94084c
-fi
94084c
-
94084c
 libc_cv_gcc_unwind_find_fde=yes
94084c
 ldd_rewrite_script=sysdeps/unix/sysv/linux/ldd-rewrite.sed
94084c
diff --git a/sysdeps/unix/sysv/linux/i386/configure.ac b/sysdeps/unix/sysv/linux/i386/configure.ac
94084c
index 9e980784bb826463..64ab2cc2c8f9deec 100644
94084c
--- a/sysdeps/unix/sysv/linux/i386/configure.ac
94084c
+++ b/sysdeps/unix/sysv/linux/i386/configure.ac
94084c
@@ -1,22 +1,5 @@
94084c
 GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
94084c
 # Local configure fragment for sysdeps/unix/sysv/linux/i386.
94084c
 
94084c
-# Check if CFLAGS allows compiler to use ebp register in inline assembly.
94084c
-AC_CACHE_CHECK([if compiler flags allows ebp in inline assembly],
94084c
-                libc_cv_can_use_register_asm_ebp, [
94084c
-AC_COMPILE_IFELSE(
94084c
-  [AC_LANG_PROGRAM([
94084c
-    void foo (int i)
94084c
-    {
94084c
-      register int reg asm ("ebp") = i;
94084c
-      asm ("# %0" : : "r" (reg));
94084c
-    }])],
94084c
-  [libc_cv_can_use_register_asm_ebp=yes],
94084c
-  [libc_cv_can_use_register_asm_ebp=no])
94084c
-])
94084c
-if test $libc_cv_can_use_register_asm_ebp = yes; then
94084c
-  AC_DEFINE(CAN_USE_REGISTER_ASM_EBP)
94084c
-fi
94084c
-
94084c
 libc_cv_gcc_unwind_find_fde=yes
94084c
 ldd_rewrite_script=sysdeps/unix/sysv/linux/ldd-rewrite.sed
94084c
diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h
94084c
index 8a9911b7acd9e692..39d6a3c13427abb5 100644
94084c
--- a/sysdeps/unix/sysv/linux/i386/sysdep.h
94084c
+++ b/sysdeps/unix/sysv/linux/i386/sysdep.h
94084c
@@ -43,15 +43,6 @@
94084c
 # endif
94084c
 #endif
94084c
 
94084c
-/* Since GCC 5 and above can properly spill %ebx with PIC when needed,
94084c
-   we can inline syscalls with 6 arguments if GCC 5 or above is used
94084c
-   to compile glibc.  Disable GCC 5 optimization when compiling for
94084c
-   profiling or when -fno-omit-frame-pointer is used since asm ("ebp")
94084c
-   can't be used to put the 6th argument in %ebp for syscall.  */
94084c
-#if !defined PROF && CAN_USE_REGISTER_ASM_EBP
94084c
-# define OPTIMIZE_FOR_GCC_5
94084c
-#endif
94084c
-
94084c
 #ifdef __ASSEMBLER__
94084c
 
94084c
 /* Linux uses a negative return value to indicate syscall errors,
94084c
@@ -239,36 +230,6 @@
94084c
 extern int __syscall_error (int)
94084c
   attribute_hidden __attribute__ ((__regparm__ (1)));
94084c
 
94084c
-#ifndef OPTIMIZE_FOR_GCC_5
94084c
-/* We need some help from the assembler to generate optimal code.  We
94084c
-   define some macros here which later will be used.  */
94084c
-asm (".L__X'%ebx = 1\n\t"
94084c
-     ".L__X'%ecx = 2\n\t"
94084c
-     ".L__X'%edx = 2\n\t"
94084c
-     ".L__X'%eax = 3\n\t"
94084c
-     ".L__X'%esi = 3\n\t"
94084c
-     ".L__X'%edi = 3\n\t"
94084c
-     ".L__X'%ebp = 3\n\t"
94084c
-     ".L__X'%esp = 3\n\t"
94084c
-     ".macro bpushl name reg\n\t"
94084c
-     ".if 1 - \\name\n\t"
94084c
-     ".if 2 - \\name\n\t"
94084c
-     "error\n\t"
94084c
-     ".else\n\t"
94084c
-     "xchgl \\reg, %ebx\n\t"
94084c
-     ".endif\n\t"
94084c
-     ".endif\n\t"
94084c
-     ".endm\n\t"
94084c
-     ".macro bpopl name reg\n\t"
94084c
-     ".if 1 - \\name\n\t"
94084c
-     ".if 2 - \\name\n\t"
94084c
-     "error\n\t"
94084c
-     ".else\n\t"
94084c
-     "xchgl \\reg, %ebx\n\t"
94084c
-     ".endif\n\t"
94084c
-     ".endif\n\t"
94084c
-     ".endm\n\t");
94084c
-
94084c
 /* Six-argument syscalls use an out-of-line helper, because an inline
94084c
    asm using all registers apart from %esp cannot work reliably and
94084c
    the assembler does not support describing an asm that saves and
94084c
@@ -279,7 +240,6 @@ struct libc_do_syscall_args
94084c
 {
94084c
   int ebx, edi, ebp;
94084c
 };
94084c
-#endif
94084c
 
94084c
 # define VDSO_NAME  "LINUX_2.6"
94084c
 # define VDSO_HASH  61765110
94084c
@@ -332,14 +292,8 @@ struct libc_do_syscall_args
94084c
 
94084c
 /* Each object using 6-argument inline syscalls must include a
94084c
    definition of __libc_do_syscall.  */
94084c
-#ifdef OPTIMIZE_FOR_GCC_5
94084c
-# define INTERNAL_SYSCALL_MAIN_6(name, args...) \
94084c
-    INTERNAL_SYSCALL_MAIN_INLINE(name, 6, args)
94084c
-# define INTERNAL_SYSCALL_MAIN_NCS_6(name, args...) \
94084c
-    INTERNAL_SYSCALL_MAIN_NCS(name, 6, args)
94084c
-#else /* GCC 5  */
94084c
-# define INTERNAL_SYSCALL_MAIN_6(name, arg1, arg2, arg3,		\
94084c
-				 arg4, arg5, arg6)			\
94084c
+#define INTERNAL_SYSCALL_MAIN_6(name, arg1, arg2, arg3,			\
94084c
+				arg4, arg5, arg6)			\
94084c
   struct libc_do_syscall_args _xv =					\
94084c
     {									\
94084c
       (int) (arg1),							\
94084c
@@ -352,8 +306,8 @@ struct libc_do_syscall_args
94084c
     : "=a" (resultvar)							\
94084c
     : "i" (__NR_##name), "c" (arg2), "d" (arg3), "S" (arg4), "D" (&_xv) \
94084c
     : "memory", "cc")
94084c
-# define INTERNAL_SYSCALL_MAIN_NCS_6(name, arg1, arg2, arg3,		\
94084c
-				     arg4, arg5, arg6)			\
94084c
+#define INTERNAL_SYSCALL_MAIN_NCS_6(name, arg1, arg2, arg3,		\
94084c
+				    arg4, arg5, arg6)			\
94084c
   struct libc_do_syscall_args _xv =					\
94084c
     {									\
94084c
       (int) (arg1),							\
94084c
@@ -366,7 +320,6 @@ struct libc_do_syscall_args
94084c
     : "=a" (resultvar)							\
94084c
     : "a" (name), "c" (arg2), "d" (arg3), "S" (arg4), "D" (&_xv)	\
94084c
     : "memory", "cc")
94084c
-#endif /* GCC 5  */
94084c
 
94084c
 #define INTERNAL_SYSCALL(name, nr, args...) \
94084c
   ({									      \
94084c
@@ -380,193 +333,72 @@ struct libc_do_syscall_args
94084c
     (int) resultvar; })
94084c
 
94084c
 #if I386_USE_SYSENTER
94084c
-# ifdef OPTIMIZE_FOR_GCC_5
94084c
-#  ifdef PIC
94084c
-#   define INTERNAL_SYSCALL_MAIN_INLINE(name, nr, args...) \
94084c
+# ifdef PIC
94084c
+#  define INTERNAL_SYSCALL_MAIN_INLINE(name, nr, args...) \
94084c
     LOADREGS_##nr(args)							\
94084c
     asm volatile (							\
94084c
     "call *%%gs:%P2"							\
94084c
     : "=a" (resultvar)							\
94084c
     : "a" (__NR_##name), "i" (offsetof (tcbhead_t, sysinfo))		\
94084c
       ASMARGS_##nr(args) : "memory", "cc")
94084c
-#   define INTERNAL_SYSCALL_MAIN_NCS(name, nr, args...) \
94084c
+#  define INTERNAL_SYSCALL_MAIN_NCS(name, nr, args...) \
94084c
     LOADREGS_##nr(args)							\
94084c
     asm volatile (							\
94084c
     "call *%%gs:%P2"							\
94084c
     : "=a" (resultvar)							\
94084c
     : "a" (name), "i" (offsetof (tcbhead_t, sysinfo))			\
94084c
       ASMARGS_##nr(args) : "memory", "cc")
94084c
-#  else
94084c
-#   define INTERNAL_SYSCALL_MAIN_INLINE(name, nr, args...) \
94084c
+# else /* I386_USE_SYSENTER && !PIC */
94084c
+#  define INTERNAL_SYSCALL_MAIN_INLINE(name, nr, args...) \
94084c
     LOADREGS_##nr(args)							\
94084c
     asm volatile (							\
94084c
     "call *_dl_sysinfo"							\
94084c
     : "=a" (resultvar)							\
94084c
     : "a" (__NR_##name) ASMARGS_##nr(args) : "memory", "cc")
94084c
-#   define INTERNAL_SYSCALL_MAIN_NCS(name, nr, args...) \
94084c
+#  define INTERNAL_SYSCALL_MAIN_NCS(name, nr, args...) \
94084c
     LOADREGS_##nr(args)							\
94084c
     asm volatile (							\
94084c
     "call *_dl_sysinfo"							\
94084c
     : "=a" (resultvar)							\
94084c
     : "a" (name) ASMARGS_##nr(args) : "memory", "cc")
94084c
-#  endif
94084c
-# else /* GCC 5  */
94084c
-#  ifdef PIC
94084c
-#   define INTERNAL_SYSCALL_MAIN_INLINE(name, nr, args...) \
94084c
-    EXTRAVAR_##nr							      \
94084c
-    asm volatile (							      \
94084c
-    LOADARGS_##nr							      \
94084c
-    "movl %1, %%eax\n\t"						      \
94084c
-    "call *%%gs:%P2\n\t"						      \
94084c
-    RESTOREARGS_##nr							      \
94084c
-    : "=a" (resultvar)							      \
94084c
-    : "i" (__NR_##name), "i" (offsetof (tcbhead_t, sysinfo))		      \
94084c
-      ASMFMT_##nr(args) : "memory", "cc")
94084c
-#   define INTERNAL_SYSCALL_MAIN_NCS(name, nr, args...) \
94084c
-    EXTRAVAR_##nr							      \
94084c
-    asm volatile (							      \
94084c
-    LOADARGS_##nr							      \
94084c
-    "call *%%gs:%P2\n\t"						      \
94084c
-    RESTOREARGS_##nr							      \
94084c
-    : "=a" (resultvar)							      \
94084c
-    : "0" (name), "i" (offsetof (tcbhead_t, sysinfo))			      \
94084c
-      ASMFMT_##nr(args) : "memory", "cc")
94084c
-#  else
94084c
-#   define INTERNAL_SYSCALL_MAIN_INLINE(name, nr, args...) \
94084c
-    EXTRAVAR_##nr							      \
94084c
-    asm volatile (							      \
94084c
-    LOADARGS_##nr							      \
94084c
-    "movl %1, %%eax\n\t"						      \
94084c
-    "call *_dl_sysinfo\n\t"						      \
94084c
-    RESTOREARGS_##nr							      \
94084c
-    : "=a" (resultvar)							      \
94084c
-    : "i" (__NR_##name) ASMFMT_##nr(args) : "memory", "cc")
94084c
-#   define INTERNAL_SYSCALL_MAIN_NCS(name, nr, args...) \
94084c
-    EXTRAVAR_##nr							      \
94084c
-    asm volatile (							      \
94084c
-    LOADARGS_##nr							      \
94084c
-    "call *_dl_sysinfo\n\t"						      \
94084c
-    RESTOREARGS_##nr							      \
94084c
-    : "=a" (resultvar)							      \
94084c
-    : "0" (name) ASMFMT_##nr(args) : "memory", "cc")
94084c
-#  endif
94084c
-# endif /* GCC 5  */
94084c
-#else
94084c
-# ifdef OPTIMIZE_FOR_GCC_5
94084c
-#  define INTERNAL_SYSCALL_MAIN_INLINE(name, nr, args...) \
94084c
+# endif /* I386_USE_SYSENTER && !PIC */
94084c
+#else /* !I386_USE_SYSENTER */
94084c
+# define INTERNAL_SYSCALL_MAIN_INLINE(name, nr, args...) \
94084c
     LOADREGS_##nr(args)							\
94084c
     asm volatile (							\
94084c
     "int $0x80"								\
94084c
     : "=a" (resultvar)							\
94084c
     : "a" (__NR_##name) ASMARGS_##nr(args) : "memory", "cc")
94084c
-#  define INTERNAL_SYSCALL_MAIN_NCS(name, nr, args...) \
94084c
+# define INTERNAL_SYSCALL_MAIN_NCS(name, nr, args...) \
94084c
     LOADREGS_##nr(args)							\
94084c
     asm volatile (							\
94084c
     "int $0x80"								\
94084c
     : "=a" (resultvar)							\
94084c
     : "a" (name) ASMARGS_##nr(args) : "memory", "cc")
94084c
-# else /* GCC 5  */
94084c
-#  define INTERNAL_SYSCALL_MAIN_INLINE(name, nr, args...) \
94084c
-    EXTRAVAR_##nr							      \
94084c
-    asm volatile (							      \
94084c
-    LOADARGS_##nr							      \
94084c
-    "movl %1, %%eax\n\t"						      \
94084c
-    "int $0x80\n\t"							      \
94084c
-    RESTOREARGS_##nr							      \
94084c
-    : "=a" (resultvar)							      \
94084c
-    : "i" (__NR_##name) ASMFMT_##nr(args) : "memory", "cc")
94084c
-#  define INTERNAL_SYSCALL_MAIN_NCS(name, nr, args...) \
94084c
-    EXTRAVAR_##nr							      \
94084c
-    asm volatile (							      \
94084c
-    LOADARGS_##nr							      \
94084c
-    "int $0x80\n\t"							      \
94084c
-    RESTOREARGS_##nr							      \
94084c
-    : "=a" (resultvar)							      \
94084c
-    : "0" (name) ASMFMT_##nr(args) : "memory", "cc")
94084c
-# endif /* GCC 5  */
94084c
-#endif
94084c
-
94084c
-#define LOADARGS_0
94084c
-#ifdef __PIC__
94084c
-# if I386_USE_SYSENTER && defined PIC
94084c
-#  define LOADARGS_1 \
94084c
-    "bpushl .L__X'%k3, %k3\n\t"
94084c
-#  define LOADARGS_5 \
94084c
-    "movl %%ebx, %4\n\t"						      \
94084c
-    "movl %3, %%ebx\n\t"
94084c
-# else
94084c
-#  define LOADARGS_1 \
94084c
-    "bpushl .L__X'%k2, %k2\n\t"
94084c
-#  define LOADARGS_5 \
94084c
-    "movl %%ebx, %3\n\t"						      \
94084c
-    "movl %2, %%ebx\n\t"
94084c
-# endif
94084c
-# define LOADARGS_2	LOADARGS_1
94084c
-# define LOADARGS_3 \
94084c
-    "xchgl %%ebx, %%edi\n\t"
94084c
-# define LOADARGS_4	LOADARGS_3
94084c
-#else
94084c
-# define LOADARGS_1
94084c
-# define LOADARGS_2
94084c
-# define LOADARGS_3
94084c
-# define LOADARGS_4
94084c
-# define LOADARGS_5
94084c
-#endif
94084c
-
94084c
-#define RESTOREARGS_0
94084c
-#ifdef __PIC__
94084c
-# if I386_USE_SYSENTER && defined PIC
94084c
-#  define RESTOREARGS_1 \
94084c
-    "bpopl .L__X'%k3, %k3\n\t"
94084c
-#  define RESTOREARGS_5 \
94084c
-    "movl %4, %%ebx"
94084c
-# else
94084c
-#  define RESTOREARGS_1 \
94084c
-    "bpopl .L__X'%k2, %k2\n\t"
94084c
-#  define RESTOREARGS_5 \
94084c
-    "movl %3, %%ebx"
94084c
-# endif
94084c
-# define RESTOREARGS_2	RESTOREARGS_1
94084c
-# define RESTOREARGS_3 \
94084c
-    "xchgl %%edi, %%ebx\n\t"
94084c
-# define RESTOREARGS_4	RESTOREARGS_3
94084c
-#else
94084c
-# define RESTOREARGS_1
94084c
-# define RESTOREARGS_2
94084c
-# define RESTOREARGS_3
94084c
-# define RESTOREARGS_4
94084c
-# define RESTOREARGS_5
94084c
-#endif
94084c
+#endif /* !I386_USE_SYSENTER */
94084c
 
94084c
-#ifdef OPTIMIZE_FOR_GCC_5
94084c
-# define LOADREGS_0()
94084c
-# define ASMARGS_0()
94084c
-# define LOADREGS_1(arg1) \
94084c
+#define LOADREGS_0()
94084c
+#define ASMARGS_0()
94084c
+#define LOADREGS_1(arg1) \
94084c
 	LOADREGS_0 ()
94084c
-# define ASMARGS_1(arg1) \
94084c
+#define ASMARGS_1(arg1) \
94084c
 	ASMARGS_0 (), "b" ((unsigned int) (arg1))
94084c
-# define LOADREGS_2(arg1, arg2) \
94084c
+#define LOADREGS_2(arg1, arg2) \
94084c
 	LOADREGS_1 (arg1)
94084c
-# define ASMARGS_2(arg1, arg2) \
94084c
+#define ASMARGS_2(arg1, arg2) \
94084c
 	ASMARGS_1 (arg1), "c" ((unsigned int) (arg2))
94084c
-# define LOADREGS_3(arg1, arg2, arg3) \
94084c
+#define LOADREGS_3(arg1, arg2, arg3) \
94084c
 	LOADREGS_2 (arg1, arg2)
94084c
-# define ASMARGS_3(arg1, arg2, arg3) \
94084c
+#define ASMARGS_3(arg1, arg2, arg3) \
94084c
 	ASMARGS_2 (arg1, arg2), "d" ((unsigned int) (arg3))
94084c
-# define LOADREGS_4(arg1, arg2, arg3, arg4) \
94084c
+#define LOADREGS_4(arg1, arg2, arg3, arg4) \
94084c
 	LOADREGS_3 (arg1, arg2, arg3)
94084c
-# define ASMARGS_4(arg1, arg2, arg3, arg4) \
94084c
+#define ASMARGS_4(arg1, arg2, arg3, arg4) \
94084c
 	ASMARGS_3 (arg1, arg2, arg3), "S" ((unsigned int) (arg4))
94084c
-# define LOADREGS_5(arg1, arg2, arg3, arg4, arg5) \
94084c
+#define LOADREGS_5(arg1, arg2, arg3, arg4, arg5) \
94084c
 	LOADREGS_4 (arg1, arg2, arg3, arg4)
94084c
-# define ASMARGS_5(arg1, arg2, arg3, arg4, arg5) \
94084c
+#define ASMARGS_5(arg1, arg2, arg3, arg4, arg5) \
94084c
 	ASMARGS_4 (arg1, arg2, arg3, arg4), "D" ((unsigned int) (arg5))
94084c
-# define LOADREGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \
94084c
-	register unsigned int _a6 asm ("ebp") = (unsigned int) (arg6); \
94084c
-	LOADREGS_5 (arg1, arg2, arg3, arg4, arg5)
94084c
-# define ASMARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \
94084c
-	ASMARGS_5 (arg1, arg2, arg3, arg4, arg5), "r" (_a6)
94084c
-#endif /* GCC 5  */
94084c
 
94084c
 #define ASMFMT_0()
94084c
 #ifdef __PIC__