2009-09-16 19:32:44 +00:00
|
|
|
|
dnl Redefine AC_LANG_PROGRAM with a "-Wstrict-prototypes -Werror"-friendly
|
|
|
|
|
dnl version. Patch submitted to bug-autoconf in 2009-09-16.
|
|
|
|
|
m4_define([AC_LANG_PROGRAM(C)],
|
|
|
|
|
[$1
|
|
|
|
|
int
|
|
|
|
|
main (void)
|
|
|
|
|
{
|
|
|
|
|
dnl Do *not* indent the following line: there may be CPP directives.
|
|
|
|
|
dnl Don't move the `;' right after for the same reason.
|
|
|
|
|
$2
|
|
|
|
|
;
|
|
|
|
|
return 0;
|
|
|
|
|
}])
|
|
|
|
|
|
|
|
|
|
|
2008-07-17 20:19:55 +00:00
|
|
|
|
dnl Check whether target compiler is working
|
2010-01-23 17:08:10 +00:00
|
|
|
|
AC_DEFUN([grub_PROG_TARGET_CC],
|
2008-07-17 20:19:55 +00:00
|
|
|
|
[AC_MSG_CHECKING([whether target compiler is working])
|
|
|
|
|
AC_CACHE_VAL(grub_cv_prog_target_cc,
|
2009-06-18 14:25:51 +00:00
|
|
|
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
2010-01-18 16:22:03 +00:00
|
|
|
|
asm (".globl start; start:");
|
2013-12-16 12:07:28 +00:00
|
|
|
|
void __main (void);
|
|
|
|
|
void __main (void) {}
|
2009-06-18 14:25:51 +00:00
|
|
|
|
int main (void);
|
|
|
|
|
]], [[]])],
|
2008-09-21 17:38:33 +00:00
|
|
|
|
[grub_cv_prog_target_cc=yes],
|
|
|
|
|
[grub_cv_prog_target_cc=no])
|
2008-07-17 20:19:55 +00:00
|
|
|
|
])
|
|
|
|
|
AC_MSG_RESULT([$grub_cv_prog_target_cc])
|
|
|
|
|
|
|
|
|
|
if test "x$grub_cv_prog_target_cc" = xno; then
|
|
|
|
|
AC_MSG_ERROR([cannot compile for the target])
|
|
|
|
|
fi
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
dnl grub_ASM_USCORE checks if C symbols get an underscore after
|
2002-12-27 08:53:07 +00:00
|
|
|
|
dnl compiling to assembler.
|
|
|
|
|
dnl Written by Pavel Roskin. Based on grub_ASM_EXT_C written by
|
|
|
|
|
dnl Erich Boleyn and modified by Yoshinori K. Okuji.
|
2010-01-23 17:08:10 +00:00
|
|
|
|
AC_DEFUN([grub_ASM_USCORE],
|
2002-12-27 08:53:07 +00:00
|
|
|
|
[AC_REQUIRE([AC_PROG_CC])
|
2010-08-18 10:08:00 +00:00
|
|
|
|
AC_REQUIRE([AC_PROG_EGREP])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
AC_MSG_CHECKING([if C symbols get an underscore after compilation])
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_CACHE_VAL(grub_cv_asm_uscore,
|
2002-12-27 08:53:07 +00:00
|
|
|
|
[cat > conftest.c <<\EOF
|
2009-09-16 19:32:44 +00:00
|
|
|
|
int func (int *);
|
2002-12-27 08:53:07 +00:00
|
|
|
|
int
|
|
|
|
|
func (int *list)
|
|
|
|
|
{
|
|
|
|
|
*list = 0;
|
|
|
|
|
return *list;
|
|
|
|
|
}
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -S conftest.c]) && test -s conftest.s; then
|
|
|
|
|
true
|
|
|
|
|
else
|
|
|
|
|
AC_MSG_ERROR([${CC-cc} failed to produce assembly code])
|
|
|
|
|
fi
|
|
|
|
|
|
2010-08-18 10:08:00 +00:00
|
|
|
|
if $EGREP '(^|[^_[:alnum]])_func' conftest.s >/dev/null 2>&1; then
|
2010-09-19 20:22:43 +00:00
|
|
|
|
HAVE_ASM_USCORE=1
|
2004-04-04 13:46:03 +00:00
|
|
|
|
grub_cv_asm_uscore=yes
|
2002-12-27 08:53:07 +00:00
|
|
|
|
else
|
2010-09-19 20:22:43 +00:00
|
|
|
|
HAVE_ASM_USCORE=0
|
2004-04-04 13:46:03 +00:00
|
|
|
|
grub_cv_asm_uscore=no
|
2002-12-27 08:53:07 +00:00
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
rm -f conftest*])
|
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_MSG_RESULT([$grub_cv_asm_uscore])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dnl Some versions of `objcopy -O binary' vary their output depending
|
|
|
|
|
dnl on the link address.
|
2010-01-23 17:08:10 +00:00
|
|
|
|
AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE],
|
2013-08-21 23:56:28 +00:00
|
|
|
|
[AC_MSG_CHECKING([whether ${TARGET_OBJCOPY} works for absolute addresses])
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_CACHE_VAL(grub_cv_prog_objcopy_absolute,
|
2002-12-27 08:53:07 +00:00
|
|
|
|
[cat > conftest.c <<\EOF
|
2009-09-16 19:32:44 +00:00
|
|
|
|
void cmain (void);
|
2002-12-27 08:53:07 +00:00
|
|
|
|
void
|
|
|
|
|
cmain (void)
|
|
|
|
|
{
|
|
|
|
|
*((int *) 0x1000) = 2;
|
|
|
|
|
}
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
if AC_TRY_EVAL(ac_compile) && test -s conftest.o; then :
|
|
|
|
|
else
|
|
|
|
|
AC_MSG_ERROR([${CC-cc} cannot compile C source code])
|
|
|
|
|
fi
|
2004-04-04 13:46:03 +00:00
|
|
|
|
grub_cv_prog_objcopy_absolute=yes
|
2009-11-07 21:06:30 +00:00
|
|
|
|
for link_addr in 0x2000 0x8000 0x7C00; do
|
2010-06-07 11:53:54 +00:00
|
|
|
|
if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},$link_addr conftest.o -o conftest.exec]); then :
|
2002-12-27 08:53:07 +00:00
|
|
|
|
else
|
|
|
|
|
AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr])
|
|
|
|
|
fi
|
2013-08-21 23:56:28 +00:00
|
|
|
|
if AC_TRY_COMMAND([${TARGET_OBJCOPY-objcopy} --only-section=.text -O binary conftest.exec conftest]); then :
|
2002-12-27 08:53:07 +00:00
|
|
|
|
else
|
2013-08-21 23:56:28 +00:00
|
|
|
|
AC_MSG_ERROR([${TARGET_OBJCOPY-objcopy} cannot create binary files])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
fi
|
|
|
|
|
if test ! -f conftest.old || AC_TRY_COMMAND([cmp -s conftest.old conftest]); then
|
|
|
|
|
mv -f conftest conftest.old
|
|
|
|
|
else
|
2004-04-04 13:46:03 +00:00
|
|
|
|
grub_cv_prog_objcopy_absolute=no
|
2002-12-27 08:53:07 +00:00
|
|
|
|
break
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
rm -f conftest*])
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_MSG_RESULT([$grub_cv_prog_objcopy_absolute])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
if test "x$grub_cv_prog_objcopy_absolute" = xno; then
|
|
|
|
|
AC_MSG_ERROR([GRUB requires a working absolute objcopy; upgrade your binutils])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
fi
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
|
2008-07-02 19:03:23 +00:00
|
|
|
|
dnl Supply --build-id=none to ld if building modules.
|
|
|
|
|
dnl This suppresses warnings from ld on some systems
|
2010-01-23 17:08:10 +00:00
|
|
|
|
AC_DEFUN([grub_PROG_LD_BUILD_ID_NONE],
|
2008-07-02 19:03:23 +00:00
|
|
|
|
[AC_MSG_CHECKING([whether linker accepts --build-id=none])
|
|
|
|
|
AC_CACHE_VAL(grub_cv_prog_ld_build_id_none,
|
|
|
|
|
[save_LDFLAGS="$LDFLAGS"
|
|
|
|
|
LDFLAGS="$LDFLAGS -Wl,--build-id=none"
|
2008-09-21 17:38:33 +00:00
|
|
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
|
|
|
|
[grub_cv_prog_ld_build_id_none=yes],
|
|
|
|
|
[grub_cv_prog_ld_build_id_none=no])
|
2008-07-02 19:03:23 +00:00
|
|
|
|
LDFLAGS="$save_LDFLAGS"
|
|
|
|
|
])
|
|
|
|
|
AC_MSG_RESULT([$grub_cv_prog_ld_build_id_none])
|
|
|
|
|
|
|
|
|
|
if test "x$grub_cv_prog_ld_build_id_none" = xyes; then
|
2009-04-01 16:08:42 +00:00
|
|
|
|
TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,--build-id=none"
|
2008-07-02 19:03:23 +00:00
|
|
|
|
fi
|
|
|
|
|
])
|
|
|
|
|
|
2013-11-14 16:39:01 +00:00
|
|
|
|
dnl Check nm
|
|
|
|
|
AC_DEFUN([grub_PROG_NM_WORKS],
|
|
|
|
|
[AC_MSG_CHECKING([whether nm works])
|
|
|
|
|
AC_CACHE_VAL(grub_cv_prog_nm_works,
|
|
|
|
|
[
|
|
|
|
|
nm_works_tmp_dir="$(mktemp -d "./confXXXXXX")"
|
|
|
|
|
AC_LANG_CONFTEST([AC_LANG_PROGRAM([[]], [[]])])
|
|
|
|
|
$TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_works_tmp_dir/ef"
|
2013-11-14 21:37:20 +00:00
|
|
|
|
if $TARGET_NM "$nm_works_tmp_dir/ef" > /dev/null; then
|
2013-11-14 16:39:01 +00:00
|
|
|
|
grub_cv_prog_nm_works=yes
|
|
|
|
|
else
|
|
|
|
|
grub_cv_prog_nm_minus_p=no
|
|
|
|
|
fi
|
|
|
|
|
rm "$nm_works_tmp_dir/ef"
|
|
|
|
|
rmdir "$nm_works_tmp_dir"
|
|
|
|
|
])
|
|
|
|
|
AC_MSG_RESULT([$grub_cv_prog_nm_works])
|
|
|
|
|
|
|
|
|
|
if test "x$grub_cv_prog_nm_works" != xyes; then
|
|
|
|
|
AC_MSG_ERROR([nm does not work])
|
|
|
|
|
fi
|
|
|
|
|
])
|
|
|
|
|
|
2013-08-21 23:56:28 +00:00
|
|
|
|
dnl Supply -P to nm
|
|
|
|
|
AC_DEFUN([grub_PROG_NM_MINUS_P],
|
|
|
|
|
[AC_MSG_CHECKING([whether nm accepts -P])
|
|
|
|
|
AC_CACHE_VAL(grub_cv_prog_nm_minus_p,
|
|
|
|
|
[
|
|
|
|
|
nm_minus_p_tmp_dir="$(mktemp -d "./confXXXXXX")"
|
|
|
|
|
AC_LANG_CONFTEST([AC_LANG_PROGRAM([[]], [[]])])
|
2013-11-14 16:39:01 +00:00
|
|
|
|
$TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_minus_p_tmp_dir/ef"
|
2013-08-21 23:56:28 +00:00
|
|
|
|
if $TARGET_NM -P "$nm_minus_p_tmp_dir/ef" 2>&1 > /dev/null; then
|
|
|
|
|
grub_cv_prog_nm_minus_p=yes
|
|
|
|
|
else
|
|
|
|
|
grub_cv_prog_nm_minus_p=no
|
|
|
|
|
fi
|
|
|
|
|
rm "$nm_minus_p_tmp_dir/ef"
|
2013-11-14 16:39:01 +00:00
|
|
|
|
rmdir "$nm_minus_p_tmp_dir"
|
2013-08-21 23:56:28 +00:00
|
|
|
|
])
|
|
|
|
|
AC_MSG_RESULT([$grub_cv_prog_nm_minus_p])
|
|
|
|
|
|
|
|
|
|
if test "x$grub_cv_prog_nm_minus_p" = xyes; then
|
|
|
|
|
TARGET_NMFLAGS_MINUS_P="-P"
|
|
|
|
|
else
|
|
|
|
|
TARGET_NMFLAGS_MINUS_P=
|
|
|
|
|
fi
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
dnl Supply --defined-only to nm
|
|
|
|
|
AC_DEFUN([grub_PROG_NM_DEFINED_ONLY],
|
|
|
|
|
[AC_MSG_CHECKING([whether nm accepts --defined-only])
|
|
|
|
|
AC_CACHE_VAL(grub_cv_prog_nm_defined_only,
|
|
|
|
|
[
|
|
|
|
|
nm_defined_only_tmp_dir="$(mktemp -d "./confXXXXXX")"
|
|
|
|
|
AC_LANG_CONFTEST([AC_LANG_PROGRAM([[]], [[]])])
|
2013-11-14 16:39:01 +00:00
|
|
|
|
$TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_defined_only_tmp_dir/ef"
|
2013-08-21 23:56:28 +00:00
|
|
|
|
if $TARGET_NM --defined-only "$nm_defined_only_tmp_dir/ef" 2>&1 > /dev/null; then
|
|
|
|
|
grub_cv_prog_nm_defined_only=yes
|
|
|
|
|
else
|
|
|
|
|
grub_cv_prog_nm_defined_only=no
|
|
|
|
|
fi
|
|
|
|
|
rm "$nm_defined_only_tmp_dir/ef"
|
2013-11-14 16:39:01 +00:00
|
|
|
|
rmdir "$nm_defined_only_tmp_dir"
|
2013-08-21 23:56:28 +00:00
|
|
|
|
])
|
|
|
|
|
AC_MSG_RESULT([$grub_cv_prog_nm_defined_only])
|
|
|
|
|
|
|
|
|
|
if test "x$grub_cv_prog_nm_defined_only" = xyes; then
|
|
|
|
|
TARGET_NMFLAGS_DEFINED_ONLY=--defined-only
|
|
|
|
|
else
|
|
|
|
|
TARGET_NMFLAGS_DEFINED_ONLY=
|
|
|
|
|
fi
|
|
|
|
|
])
|
|
|
|
|
|
2008-07-02 19:03:23 +00:00
|
|
|
|
|
2002-12-27 08:53:07 +00:00
|
|
|
|
dnl Mass confusion!
|
|
|
|
|
dnl Older versions of GAS interpret `.code16' to mean ``generate 32-bit
|
|
|
|
|
dnl instructions, but implicitly insert addr32 and data32 bytes so
|
|
|
|
|
dnl that the code works in real mode''.
|
|
|
|
|
dnl
|
|
|
|
|
dnl Newer versions of GAS interpret `.code16' to mean ``generate 16-bit
|
|
|
|
|
dnl instructions,'' which seems right. This requires the programmer
|
|
|
|
|
dnl to explicitly insert addr32 and data32 instructions when they want
|
|
|
|
|
dnl them.
|
|
|
|
|
dnl
|
|
|
|
|
dnl We only support the newer versions, because the old versions cause
|
|
|
|
|
dnl major pain, by requiring manual assembly to get 16-bit instructions into
|
|
|
|
|
dnl asm files.
|
2010-01-23 17:08:10 +00:00
|
|
|
|
AC_DEFUN([grub_I386_ASM_ADDR32],
|
2002-12-27 08:53:07 +00:00
|
|
|
|
[AC_REQUIRE([AC_PROG_CC])
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_REQUIRE([grub_I386_ASM_PREFIX_REQUIREMENT])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
AC_MSG_CHECKING([for .code16 addr32 assembler support])
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_CACHE_VAL(grub_cv_i386_asm_addr32,
|
2002-12-27 08:53:07 +00:00
|
|
|
|
[cat > conftest.s.in <<\EOF
|
|
|
|
|
.code16
|
|
|
|
|
l1: @ADDR32@ movb %al, l1
|
|
|
|
|
EOF
|
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
if test "x$grub_cv_i386_asm_prefix_requirement" = xyes; then
|
2002-12-27 08:53:07 +00:00
|
|
|
|
sed -e s/@ADDR32@/addr32/ < conftest.s.in > conftest.s
|
|
|
|
|
else
|
|
|
|
|
sed -e s/@ADDR32@/addr32\;/ < conftest.s.in > conftest.s
|
|
|
|
|
fi
|
|
|
|
|
|
2013-11-07 02:29:07 +00:00
|
|
|
|
if AC_TRY_COMMAND([${CC-cc} ${TARGET_CCASFLAGS} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
|
2004-04-04 13:46:03 +00:00
|
|
|
|
grub_cv_i386_asm_addr32=yes
|
2002-12-27 08:53:07 +00:00
|
|
|
|
else
|
2004-04-04 13:46:03 +00:00
|
|
|
|
grub_cv_i386_asm_addr32=no
|
2002-12-27 08:53:07 +00:00
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
rm -f conftest*])
|
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_MSG_RESULT([$grub_cv_i386_asm_addr32])])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
|
|
|
|
dnl Later versions of GAS requires that addr32 and data32 prefixes
|
|
|
|
|
dnl appear in the same lines as the instructions they modify, while
|
|
|
|
|
dnl earlier versions requires that they appear in separate lines.
|
2010-01-23 17:08:10 +00:00
|
|
|
|
AC_DEFUN([grub_I386_ASM_PREFIX_REQUIREMENT],
|
2002-12-27 08:53:07 +00:00
|
|
|
|
[AC_REQUIRE([AC_PROG_CC])
|
|
|
|
|
AC_MSG_CHECKING(dnl
|
|
|
|
|
[whether addr32 must be in the same line as the instruction])
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_CACHE_VAL(grub_cv_i386_asm_prefix_requirement,
|
2002-12-27 08:53:07 +00:00
|
|
|
|
[cat > conftest.s <<\EOF
|
|
|
|
|
.code16
|
|
|
|
|
l1: addr32 movb %al, l1
|
|
|
|
|
EOF
|
|
|
|
|
|
2013-11-07 02:29:07 +00:00
|
|
|
|
if AC_TRY_COMMAND([${CC-cc} ${TARGET_CCASFLAGS} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
|
2004-04-04 13:46:03 +00:00
|
|
|
|
grub_cv_i386_asm_prefix_requirement=yes
|
2002-12-27 08:53:07 +00:00
|
|
|
|
else
|
2004-04-04 13:46:03 +00:00
|
|
|
|
grub_cv_i386_asm_prefix_requirement=no
|
2002-12-27 08:53:07 +00:00
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
rm -f conftest*])
|
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
if test "x$grub_cv_i386_asm_prefix_requirement" = xyes; then
|
|
|
|
|
grub_tmp_addr32="addr32"
|
|
|
|
|
grub_tmp_data32="data32"
|
2002-12-27 08:53:07 +00:00
|
|
|
|
else
|
2004-04-04 13:46:03 +00:00
|
|
|
|
grub_tmp_addr32="addr32;"
|
|
|
|
|
grub_tmp_data32="data32;"
|
2002-12-27 08:53:07 +00:00
|
|
|
|
fi
|
|
|
|
|
|
2010-09-19 20:22:43 +00:00
|
|
|
|
ADDR32=$grub_tmp_addr32
|
|
|
|
|
DATA32=$grub_tmp_data32
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_MSG_RESULT([$grub_cv_i386_asm_prefix_requirement])])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dnl Check what symbol is defined as a bss start symbol.
|
|
|
|
|
dnl Written by Michael Hohmoth and Yoshinori K. Okuji.
|
2010-01-23 17:08:10 +00:00
|
|
|
|
AC_DEFUN([grub_CHECK_BSS_START_SYMBOL],
|
2002-12-27 08:53:07 +00:00
|
|
|
|
[AC_REQUIRE([AC_PROG_CC])
|
|
|
|
|
AC_MSG_CHECKING([if __bss_start is defined by the compiler])
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_CACHE_VAL(grub_cv_check_uscore_uscore_bss_start_symbol,
|
2013-12-16 12:07:28 +00:00
|
|
|
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
|
|
|
asm (".globl start; start:");
|
|
|
|
|
void __main (void);
|
|
|
|
|
void __main (void) {}
|
|
|
|
|
int main (void);
|
|
|
|
|
]],
|
2008-09-21 17:38:33 +00:00
|
|
|
|
[[asm ("incl __bss_start")]])],
|
|
|
|
|
[grub_cv_check_uscore_uscore_bss_start_symbol=yes],
|
|
|
|
|
[grub_cv_check_uscore_uscore_bss_start_symbol=no])])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_MSG_RESULT([$grub_cv_check_uscore_uscore_bss_start_symbol])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
|
|
|
|
AC_MSG_CHECKING([if edata is defined by the compiler])
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_CACHE_VAL(grub_cv_check_edata_symbol,
|
2013-12-16 12:07:28 +00:00
|
|
|
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
|
|
|
asm (".globl start; start:");
|
|
|
|
|
void __main (void);
|
|
|
|
|
void __main (void) {}
|
|
|
|
|
int main (void);]],
|
2008-09-21 17:38:33 +00:00
|
|
|
|
[[asm ("incl edata")]])],
|
|
|
|
|
[grub_cv_check_edata_symbol=yes],
|
|
|
|
|
[grub_cv_check_edata_symbol=no])])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_MSG_RESULT([$grub_cv_check_edata_symbol])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
|
|
|
|
AC_MSG_CHECKING([if _edata is defined by the compiler])
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_CACHE_VAL(grub_cv_check_uscore_edata_symbol,
|
2013-12-16 12:07:28 +00:00
|
|
|
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
|
|
|
asm (".globl start; start:");
|
|
|
|
|
void __main (void);
|
|
|
|
|
void __main (void) {}
|
|
|
|
|
int main (void);]],
|
2008-09-21 17:38:33 +00:00
|
|
|
|
[[asm ("incl _edata")]])],
|
|
|
|
|
[grub_cv_check_uscore_edata_symbol=yes],
|
|
|
|
|
[grub_cv_check_uscore_edata_symbol=no])])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_MSG_RESULT([$grub_cv_check_uscore_edata_symbol])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" = xyes; then
|
2010-09-19 20:22:43 +00:00
|
|
|
|
BSS_START_SYMBOL=__bss_start
|
2004-04-04 13:46:03 +00:00
|
|
|
|
elif test "x$grub_cv_check_edata_symbol" = xyes; then
|
2010-09-19 20:22:43 +00:00
|
|
|
|
BSS_START_SYMBOL=edata
|
2004-04-04 13:46:03 +00:00
|
|
|
|
elif test "x$grub_cv_check_uscore_edata_symbol" = xyes; then
|
2010-09-19 20:22:43 +00:00
|
|
|
|
BSS_START_SYMBOL=_edata
|
2002-12-27 08:53:07 +00:00
|
|
|
|
else
|
|
|
|
|
AC_MSG_ERROR([none of __bss_start, edata or _edata is defined])
|
|
|
|
|
fi
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
dnl Check what symbol is defined as an end symbol.
|
|
|
|
|
dnl Written by Yoshinori K. Okuji.
|
2010-01-23 17:08:10 +00:00
|
|
|
|
AC_DEFUN([grub_CHECK_END_SYMBOL],
|
2002-12-27 08:53:07 +00:00
|
|
|
|
[AC_REQUIRE([AC_PROG_CC])
|
|
|
|
|
AC_MSG_CHECKING([if end is defined by the compiler])
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_CACHE_VAL(grub_cv_check_end_symbol,
|
2013-12-16 12:07:28 +00:00
|
|
|
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
|
|
|
asm (".globl start; start:");
|
|
|
|
|
void __main (void);
|
|
|
|
|
void __main (void) {}
|
|
|
|
|
int main (void);]],
|
2008-09-21 17:38:33 +00:00
|
|
|
|
[[asm ("incl end")]])],
|
|
|
|
|
[grub_cv_check_end_symbol=yes],
|
|
|
|
|
[grub_cv_check_end_symbol=no])])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_MSG_RESULT([$grub_cv_check_end_symbol])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
|
|
|
|
AC_MSG_CHECKING([if _end is defined by the compiler])
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_CACHE_VAL(grub_cv_check_uscore_end_symbol,
|
2013-12-16 12:07:28 +00:00
|
|
|
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
|
|
|
asm (".globl start; start:");
|
|
|
|
|
void __main (void);
|
|
|
|
|
void __main (void) {}
|
|
|
|
|
int main (void);]],
|
2008-09-21 17:38:33 +00:00
|
|
|
|
[[asm ("incl _end")]])],
|
|
|
|
|
[grub_cv_check_uscore_end_symbol=yes],
|
|
|
|
|
[grub_cv_check_uscore_end_symbol=no])])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
AC_MSG_RESULT([$grub_cv_check_uscore_end_symbol])
|
2002-12-27 08:53:07 +00:00
|
|
|
|
|
2004-04-04 13:46:03 +00:00
|
|
|
|
if test "x$grub_cv_check_end_symbol" = xyes; then
|
2010-09-19 20:22:43 +00:00
|
|
|
|
END_SYMBOL=end
|
2004-04-04 13:46:03 +00:00
|
|
|
|
elif test "x$grub_cv_check_uscore_end_symbol" = xyes; then
|
2010-09-19 20:22:43 +00:00
|
|
|
|
END_SYMBOL=_end
|
2002-12-27 08:53:07 +00:00
|
|
|
|
else
|
|
|
|
|
AC_MSG_ERROR([neither end nor _end is defined])
|
|
|
|
|
fi
|
|
|
|
|
])
|
2003-12-03 19:17:27 +00:00
|
|
|
|
|
2007-02-03 11:36:13 +00:00
|
|
|
|
|
|
|
|
|
dnl Check if the C compiler supports `-fstack-protector'.
|
2010-01-23 17:08:10 +00:00
|
|
|
|
AC_DEFUN([grub_CHECK_STACK_PROTECTOR],[
|
2007-02-03 11:36:13 +00:00
|
|
|
|
[# Smashing stack protector.
|
|
|
|
|
ssp_possible=yes]
|
|
|
|
|
AC_MSG_CHECKING([whether `$CC' accepts `-fstack-protector'])
|
|
|
|
|
# Is this a reliable test case?
|
2011-08-20 19:10:00 +00:00
|
|
|
|
AC_LANG_CONFTEST([AC_LANG_SOURCE([[
|
|
|
|
|
void foo (void) { volatile char a[8]; a[3]; }
|
|
|
|
|
]])])
|
2007-02-03 11:36:13 +00:00
|
|
|
|
[# `$CC -c -o ...' might not be portable. But, oh, well... Is calling
|
|
|
|
|
# `ac_compile' like this correct, after all?
|
|
|
|
|
if eval "$ac_compile -S -fstack-protector -o conftest.s" 2> /dev/null; then]
|
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
|
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
|
|
|
|
|
rm -f conftest.s
|
|
|
|
|
else
|
|
|
|
|
ssp_possible=no]
|
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
|
[fi]
|
|
|
|
|
])
|
2008-07-24 14:56:30 +00:00
|
|
|
|
|
|
|
|
|
dnl Check if the C compiler supports `-mstack-arg-probe' (Cygwin).
|
2010-01-23 17:08:10 +00:00
|
|
|
|
AC_DEFUN([grub_CHECK_STACK_ARG_PROBE],[
|
2008-07-24 14:56:30 +00:00
|
|
|
|
[# Smashing stack arg probe.
|
|
|
|
|
sap_possible=yes]
|
|
|
|
|
AC_MSG_CHECKING([whether `$CC' accepts `-mstack-arg-probe'])
|
2011-08-20 19:10:00 +00:00
|
|
|
|
AC_LANG_CONFTEST([AC_LANG_SOURCE([[
|
|
|
|
|
void foo (void) { volatile char a[8]; a[3]; }
|
|
|
|
|
]])])
|
2013-11-07 02:31:24 +00:00
|
|
|
|
[if eval "$ac_compile -S -mstack-arg-probe -Werror -o conftest.s" 2> /dev/null; then]
|
2008-07-24 14:56:30 +00:00
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
|
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
|
|
|
|
|
rm -f conftest.s
|
|
|
|
|
else
|
|
|
|
|
sap_possible=no]
|
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
|
[fi]
|
|
|
|
|
])
|
2009-03-21 07:48:28 +00:00
|
|
|
|
|
|
|
|
|
dnl Check if ln can handle directories properly (mingw).
|
2010-01-23 17:08:10 +00:00
|
|
|
|
AC_DEFUN([grub_CHECK_LINK_DIR],[
|
2009-03-21 07:48:28 +00:00
|
|
|
|
AC_MSG_CHECKING([whether ln can handle directories properly])
|
|
|
|
|
[mkdir testdir 2>/dev/null
|
|
|
|
|
case $srcdir in
|
|
|
|
|
[\\/$]* | ?:[\\/]* ) reldir=$srcdir/include/grub/util ;;
|
|
|
|
|
*) reldir=../$srcdir/include/grub/util ;;
|
|
|
|
|
esac
|
|
|
|
|
if ln -s $reldir testdir/util 2>/dev/null ; then]
|
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
|
[link_dir=yes
|
|
|
|
|
else
|
|
|
|
|
link_dir=no]
|
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
|
[fi
|
|
|
|
|
rm -rf testdir]
|
|
|
|
|
])
|
2009-09-03 16:32:14 +00:00
|
|
|
|
|
|
|
|
|
dnl Check if the C compiler supports `-fPIE'.
|
2010-01-23 17:08:10 +00:00
|
|
|
|
AC_DEFUN([grub_CHECK_PIE],[
|
2009-09-03 16:32:14 +00:00
|
|
|
|
[# Position independent executable.
|
|
|
|
|
pie_possible=yes]
|
|
|
|
|
AC_MSG_CHECKING([whether `$CC' has `-fPIE' as default])
|
|
|
|
|
# Is this a reliable test case?
|
2011-08-20 19:10:00 +00:00
|
|
|
|
AC_LANG_CONFTEST([AC_LANG_SOURCE([[
|
2009-09-03 16:32:14 +00:00
|
|
|
|
#ifdef __PIE__
|
|
|
|
|
int main() {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
#error NO __PIE__ DEFINED
|
|
|
|
|
#endif
|
2011-08-20 19:10:00 +00:00
|
|
|
|
]])])
|
2009-09-03 16:32:14 +00:00
|
|
|
|
|
|
|
|
|
[# `$CC -c -o ...' might not be portable. But, oh, well... Is calling
|
|
|
|
|
# `ac_compile' like this correct, after all?
|
|
|
|
|
if eval "$ac_compile -S -o conftest.s" 2> /dev/null; then]
|
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
|
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
|
|
|
|
|
rm -f conftest.s
|
|
|
|
|
else
|
|
|
|
|
pie_possible=no]
|
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
|
[fi]
|
|
|
|
|
])
|
2012-02-29 14:30:11 +00:00
|
|
|
|
|
|
|
|
|
dnl Check if the C compiler supports `-fPIC'.
|
|
|
|
|
AC_DEFUN([grub_CHECK_PIC],[
|
|
|
|
|
[# Position independent executable.
|
|
|
|
|
pic_possible=yes]
|
|
|
|
|
AC_MSG_CHECKING([whether `$CC' has `-fPIC' as default])
|
|
|
|
|
# Is this a reliable test case?
|
|
|
|
|
AC_LANG_CONFTEST([AC_LANG_SOURCE([[
|
|
|
|
|
#ifdef __PIC__
|
|
|
|
|
int main() {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
#error NO __PIC__ DEFINED
|
|
|
|
|
#endif
|
|
|
|
|
]])])
|
|
|
|
|
|
|
|
|
|
[# `$CC -c -o ...' might not be portable. But, oh, well... Is calling
|
|
|
|
|
# `ac_compile' like this correct, after all?
|
|
|
|
|
if eval "$ac_compile -S -o conftest.s" 2> /dev/null; then]
|
|
|
|
|
AC_MSG_RESULT([yes])
|
|
|
|
|
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
|
|
|
|
|
rm -f conftest.s
|
|
|
|
|
else
|
|
|
|
|
pic_possible=no]
|
|
|
|
|
AC_MSG_RESULT([no])
|
|
|
|
|
[fi]
|
|
|
|
|
])
|
2012-12-28 06:57:17 +00:00
|
|
|
|
|
|
|
|
|
dnl Create an output variable with the transformed name of a GRUB utility
|
|
|
|
|
dnl program.
|
|
|
|
|
AC_DEFUN([grub_TRANSFORM],[dnl
|
|
|
|
|
AC_SUBST(AS_TR_SH([$1]), [`AS_ECHO([$1]) | sed "$program_transform_name"`])dnl
|
|
|
|
|
])
|