From: Pavel Roskin <proski@gnu.org>
To: grub-devel@gnu.org
Subject: [PATCH 2/2] Eliminate incorrect check for grub_I386_CHECK_REGPARM_BUG
Date: Fri, 22 May 2009 00:36:38 -0400 [thread overview]
Message-ID: <20090522043638.10755.42855.stgit@ct.roinet.com> (raw)
In-Reply-To: <20090522043632.10755.77091.stgit@ct.roinet.com>
NESTED_FUNC_ATTR is defined to "__attribute__ ((__regparm__ (1))" for
i386 targets regardless of the outcome of the test. Since
NESTED_FUNC_ATTR is on the way out, a better test won't be written.
To be safe, define NESTED_FUNC_ATTR whenever we are compiling the
specific file for i386 architecture, even the target platform is not
i386 (i.e. compiling utilities when the host is i386 and the target is
not).
ChangeLog:
* aclocal.m4 (grub_I386_CHECK_REGPARM_BUG): Remove.
* configure.ac: Don't call grub_I386_CHECK_REGPARM_BUG. Define
NESTED_FUNC_ATTR by AH_BOTTOM. Base NESTED_FUNC_ATTR value
solely on the compile time architecture.
---
aclocal.m4 | 54 ------------------------------------------------------
configure.ac | 7 ++++++-
2 files changed, 6 insertions(+), 55 deletions(-)
diff --git a/aclocal.m4 b/aclocal.m4
index 779df3d..38a9a4a 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -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()'])
diff --git a/configure.ac b/configure.ac
index d84e2b6..0ba197e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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([#ifdef __i386__
+#define NESTED_FUNC_ATTR __attribute__ ((__regparm__ (1)))
+#else
+#define NESTED_FUNC_ATTR
+#endif])
+
# Restore the flags.
CC="$tmp_CC"
CFLAGS="$tmp_CFLAGS"
next prev parent reply other threads:[~2009-05-22 4:36 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-22 4:36 [PATCH 1/2] Reduce the special variables area in kern/i386/pc/startup.S Pavel Roskin
2009-05-22 4:36 ` Pavel Roskin [this message]
2009-05-22 21:18 ` [PATCH 2/2] Eliminate incorrect check for grub_I386_CHECK_REGPARM_BUG Pavel Roskin
2009-05-22 20:50 ` [PATCH 1/2] Reduce the special variables area in kern/i386/pc/startup.S Pavel Roskin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090522043638.10755.42855.stgit@ct.roinet.com \
--to=proski@gnu.org \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.