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