]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2009-05-22 Pavel Roskin <proski@gnu.org>
authorproski <proski@localhost>
Fri, 22 May 2009 21:15:31 +0000 (21:15 +0000)
committerproski <proski@localhost>
Fri, 22 May 2009 21:15:31 +0000 (21:15 +0000)
* aclocal.m4 (grub_I386_CHECK_REGPARM_BUG): Remove.
* configure.ac: Don't call grub_I386_CHECK_REGPARM_BUG.  Define
NESTED_FUNC_ATTR using AH_BOTTOM.  Use regparm(1) only when
compiling for the i386 targets, but not for the utilities.

ChangeLog
aclocal.m4
configure.ac

index 9d1476cd24821064a0e7381040c2527202381600..bff419ef4b6634de8fe8d64ab7a6b59f2adb800b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2009-05-22  Pavel Roskin  <proski@gnu.org>
 
+       * aclocal.m4 (grub_I386_CHECK_REGPARM_BUG): Remove.
+       * configure.ac: Don't call grub_I386_CHECK_REGPARM_BUG.  Define
+       NESTED_FUNC_ATTR using AH_BOTTOM.  Use regparm(1) only when
+       compiling for the i386 targets, but not for the utilities.
+
        * include/grub/i386/pc/kernel.h (grub_boot_drive): Change type
        to grub_uint8_t.
        (grub_root_drive): Likewise.
index 779df3d39eff1d23bf32ccbc54912e907ab01a93..38a9a4a7a3bea31cf943c5c621d4d6f8b7128b0c 100644 (file)
@@ -301,60 +301,6 @@ else
 fi
 ])
 
-dnl Check if the C compiler has a bug while using nested functions when
-dnl mregparm is used on the i386.  Some gcc versions do not pass the third
-dnl parameter correctly to the nested function.
-dnl Written by Marco Gerards.
-AC_DEFUN(grub_I386_CHECK_REGPARM_BUG,
-[AC_REQUIRE([AC_PROG_CC])
-AC_MSG_CHECKING([if GCC has the regparm=3 bug])
-AC_CACHE_VAL(grub_cv_i386_check_nested_functions,
-[AC_RUN_IFELSE([AC_LANG_SOURCE(
-[[
-static int
-test (int *n)
-{
-  return *n == -1;
-}
-
-static int
-testfunc (int __attribute__ ((__regparm__ (3))) (*hook) (int a, int b, int *c))
-{
-  int a = 0;
-  int b = 0;
-  int c = -1;
-  return hook (a, b, &c);
-}
-
-int
-main (void)
-{
-  int __attribute__ ((__regparm__ (3))) nestedfunc (int a, int b, int *c)
-    {
-      return a == b && test (c);
-    }
-  return testfunc (nestedfunc) ? 0 : 1;
-}
-]])],
-       [grub_cv_i386_check_nested_functions=no],
-       [grub_cv_i386_check_nested_functions=yes],
-       [grub_cv_i386_check_nested_functions=yes])])
-
-AC_MSG_RESULT([$grub_cv_i386_check_nested_functions])
-
-if test "x$grub_cv_i386_check_nested_functions" = xyes; then
-  AC_DEFINE([NESTED_FUNC_ATTR], 
-       [__attribute__ ((__regparm__ (1)))],
-       [Catch gcc bug])
-else
-dnl Unfortunately, the above test does not detect a bug in gcc-4.0.
-dnl So use regparm 2 until a better test is found.
-  AC_DEFINE([NESTED_FUNC_ATTR], 
-       [__attribute__ ((__regparm__ (1)))],
-       [Catch gcc bug])
-fi
-])
-
 dnl Check if the C compiler generates calls to `__enable_execute_stack()'.
 AC_DEFUN(grub_CHECK_ENABLE_EXECUTE_STACK,[
 AC_MSG_CHECKING([whether `$CC' generates calls to `__enable_execute_stack()'])
index d84e2b68d8f05d240df4864bb9a9d1d783309b52..98cd841615959ea2af29003bd8983594ae6ea3c2 100644 (file)
@@ -391,11 +391,16 @@ if test "x$target_cpu" = xi386; then
   grub_I386_ASM_PREFIX_REQUIREMENT
   grub_I386_ASM_ADDR32
   grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK
-  grub_I386_CHECK_REGPARM_BUG
 else
   AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug])
 fi
 
+AH_BOTTOM([#if defined(__i386__) && !defined(GRUB_UTIL)
+#define NESTED_FUNC_ATTR __attribute__ ((__regparm__ (1)))
+#else
+#define NESTED_FUNC_ATTR
+#endif])
+
 # Restore the flags.
 CC="$tmp_CC"
 CFLAGS="$tmp_CFLAGS"