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.
This commit is contained in:
parent
96b1619a75
commit
bf6a5fb2a8
3 changed files with 11 additions and 55 deletions
|
@ -1,5 +1,10 @@
|
||||||
2009-05-22 Pavel Roskin <proski@gnu.org>
|
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
|
* include/grub/i386/pc/kernel.h (grub_boot_drive): Change type
|
||||||
to grub_uint8_t.
|
to grub_uint8_t.
|
||||||
(grub_root_drive): Likewise.
|
(grub_root_drive): Likewise.
|
||||||
|
|
54
aclocal.m4
vendored
54
aclocal.m4
vendored
|
@ -301,60 +301,6 @@ else
|
||||||
fi
|
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()'.
|
dnl Check if the C compiler generates calls to `__enable_execute_stack()'.
|
||||||
AC_DEFUN(grub_CHECK_ENABLE_EXECUTE_STACK,[
|
AC_DEFUN(grub_CHECK_ENABLE_EXECUTE_STACK,[
|
||||||
AC_MSG_CHECKING([whether `$CC' generates calls to `__enable_execute_stack()'])
|
AC_MSG_CHECKING([whether `$CC' generates calls to `__enable_execute_stack()'])
|
||||||
|
|
|
@ -391,11 +391,16 @@ if test "x$target_cpu" = xi386; then
|
||||||
grub_I386_ASM_PREFIX_REQUIREMENT
|
grub_I386_ASM_PREFIX_REQUIREMENT
|
||||||
grub_I386_ASM_ADDR32
|
grub_I386_ASM_ADDR32
|
||||||
grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK
|
grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK
|
||||||
grub_I386_CHECK_REGPARM_BUG
|
|
||||||
else
|
else
|
||||||
AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug])
|
AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug])
|
||||||
fi
|
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.
|
# Restore the flags.
|
||||||
CC="$tmp_CC"
|
CC="$tmp_CC"
|
||||||
CFLAGS="$tmp_CFLAGS"
|
CFLAGS="$tmp_CFLAGS"
|
||||||
|
|
Loading…
Reference in a new issue