]> git.proxmox.com Git - grub2.git/blobdiff - acinclude.m4
* grub-core/lib/disk.c: Fix potential overflow.
[grub2.git] / acinclude.m4
index faf90fb1842ab646410422e5062661c0c6f3fad2..32d5477d10057357477ba764238099c39f120fe2 100644 (file)
@@ -19,6 +19,8 @@ AC_DEFUN([grub_PROG_TARGET_CC],
 AC_CACHE_VAL(grub_cv_prog_target_cc,
 [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
 asm (".globl start; start:");
+void __main (void);
+void __main (void) {}
 int main (void);
 ]], [[]])],
                [grub_cv_prog_target_cc=yes],
@@ -74,7 +76,7 @@ AC_MSG_RESULT([$grub_cv_asm_uscore])
 dnl Some versions of `objcopy -O binary' vary their output depending
 dnl on the link address.
 AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE],
-[AC_MSG_CHECKING([whether ${OBJCOPY} works for absolute addresses])
+[AC_MSG_CHECKING([whether ${TARGET_OBJCOPY} works for absolute addresses])
 AC_CACHE_VAL(grub_cv_prog_objcopy_absolute,
 [cat > conftest.c <<\EOF
 void cmain (void);
@@ -95,9 +97,9 @@ for link_addr in 0x2000 0x8000 0x7C00; do
   else
     AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr])
   fi
-  if AC_TRY_COMMAND([${OBJCOPY-objcopy} --only-section=.text -O binary conftest.exec conftest]); then :
+  if AC_TRY_COMMAND([${TARGET_OBJCOPY-objcopy} --only-section=.text -O binary conftest.exec conftest]); then :
   else
-    AC_MSG_ERROR([${OBJCOPY-objcopy} cannot create binary files])
+    AC_MSG_ERROR([${TARGET_OBJCOPY-objcopy} cannot create binary files])
   fi
   if test ! -f conftest.old || AC_TRY_COMMAND([cmp -s conftest.old conftest]); then
     mv -f conftest conftest.old
@@ -134,6 +136,79 @@ if test "x$grub_cv_prog_ld_build_id_none" = xyes; then
 fi
 ])
 
+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"
+if $TARGET_NM "$nm_works_tmp_dir/ef" > /dev/null; then
+   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
+])
+
+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([[]], [[]])])
+$TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_minus_p_tmp_dir/ef"
+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"
+rmdir "$nm_minus_p_tmp_dir"
+])
+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([[]], [[]])])
+$TARGET_CC $TARGET_CFLAGS -c conftest.c -o "$nm_defined_only_tmp_dir/ef"
+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"
+rmdir "$nm_defined_only_tmp_dir"
+])
+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
+])
+
 
 dnl Mass confusion!
 dnl Older versions of GAS interpret `.code16' to mean ``generate 32-bit
@@ -164,7 +239,7 @@ else
   sed -e s/@ADDR32@/addr32\;/ < conftest.s.in > conftest.s
 fi
 
-if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
+if AC_TRY_COMMAND([${CC-cc} ${TARGET_CCASFLAGS} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
   grub_cv_i386_asm_addr32=yes
 else
   grub_cv_i386_asm_addr32=no
@@ -174,37 +249,6 @@ rm -f conftest*])
 
 AC_MSG_RESULT([$grub_cv_i386_asm_addr32])])
 
-dnl check if our compiler is apple cc
-dnl because it requires numerous workarounds
-AC_DEFUN([grub_apple_cc],
-[AC_REQUIRE([AC_PROG_CC])
-AC_MSG_CHECKING([whether our compiler is apple cc])
-AC_CACHE_VAL(grub_cv_apple_cc,
-[if $CC -v 2>&1 | grep "Apple Inc." > /dev/null; then
-  grub_cv_apple_cc=yes
-else
-  grub_cv_apple_cc=no
-fi
-])
-
-AC_MSG_RESULT([$grub_cv_apple_cc])])
-
-dnl check if our target compiler is apple cc
-dnl because it requires numerous workarounds
-AC_DEFUN([grub_apple_target_cc],
-[AC_REQUIRE([AC_PROG_CC])
-AC_MSG_CHECKING([whether our target compiler is apple cc])
-AC_CACHE_VAL(grub_cv_apple_target_cc,
-[if $CC -v 2>&1 | grep "Apple Inc." > /dev/null; then
-  grub_cv_apple_target_cc=yes
-else
-  grub_cv_apple_target_cc=no
-fi
-])
-
-AC_MSG_RESULT([$grub_cv_apple_target_cc])])
-
-
 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.
@@ -218,7 +262,7 @@ AC_CACHE_VAL(grub_cv_i386_asm_prefix_requirement,
 l1:    addr32  movb    %al, l1
 EOF
 
-if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
+if AC_TRY_COMMAND([${CC-cc} ${TARGET_CCASFLAGS} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
   grub_cv_i386_asm_prefix_requirement=yes
 else
   grub_cv_i386_asm_prefix_requirement=no
@@ -246,7 +290,12 @@ AC_DEFUN([grub_CHECK_BSS_START_SYMBOL],
 [AC_REQUIRE([AC_PROG_CC])
 AC_MSG_CHECKING([if __bss_start is defined by the compiler])
 AC_CACHE_VAL(grub_cv_check_uscore_uscore_bss_start_symbol,
-[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+asm (".globl start; start:");
+void __main (void);
+void __main (void) {}
+int main (void);
+]],
                [[asm ("incl __bss_start")]])],
                [grub_cv_check_uscore_uscore_bss_start_symbol=yes],
                [grub_cv_check_uscore_uscore_bss_start_symbol=no])])
@@ -255,7 +304,11 @@ AC_MSG_RESULT([$grub_cv_check_uscore_uscore_bss_start_symbol])
 
 AC_MSG_CHECKING([if edata is defined by the compiler])
 AC_CACHE_VAL(grub_cv_check_edata_symbol,
-[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+asm (".globl start; start:");
+void __main (void);
+void __main (void) {}
+int main (void);]],
                [[asm ("incl edata")]])],
                [grub_cv_check_edata_symbol=yes],
                [grub_cv_check_edata_symbol=no])])
@@ -264,7 +317,11 @@ AC_MSG_RESULT([$grub_cv_check_edata_symbol])
 
 AC_MSG_CHECKING([if _edata is defined by the compiler])
 AC_CACHE_VAL(grub_cv_check_uscore_edata_symbol,
-[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+asm (".globl start; start:");
+void __main (void);
+void __main (void) {}
+int main (void);]],
                [[asm ("incl _edata")]])],
                [grub_cv_check_uscore_edata_symbol=yes],
                [grub_cv_check_uscore_edata_symbol=no])])
@@ -288,7 +345,11 @@ AC_DEFUN([grub_CHECK_END_SYMBOL],
 [AC_REQUIRE([AC_PROG_CC])
 AC_MSG_CHECKING([if end is defined by the compiler])
 AC_CACHE_VAL(grub_cv_check_end_symbol,
-[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+asm (".globl start; start:");
+void __main (void);
+void __main (void) {}
+int main (void);]],
                [[asm ("incl end")]])],
                [grub_cv_check_end_symbol=yes],
                [grub_cv_check_end_symbol=no])])
@@ -297,7 +358,11 @@ AC_MSG_RESULT([$grub_cv_check_end_symbol])
 
 AC_MSG_CHECKING([if _end is defined by the compiler])
 AC_CACHE_VAL(grub_cv_check_uscore_end_symbol,
-[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+asm (".globl start; start:");
+void __main (void);
+void __main (void) {}
+int main (void);]],
                [[asm ("incl _end")]])],
                [grub_cv_check_uscore_end_symbol=yes],
                [grub_cv_check_uscore_end_symbol=no])])
@@ -313,32 +378,6 @@ else
 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()'])
-AC_LANG_CONFTEST([AC_LANG_SOURCE([[
-void f (int (*p) (void));
-void g (int i)
-{
-  int nestedfunc (void) { return i; }
-  f (nestedfunc);
-}
-]])])
-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
-if grep __enable_execute_stack conftest.s >/dev/null 2>&1; then
-  NEED_ENABLE_EXECUTE_STACK=1
-  AC_MSG_RESULT([yes])
-else
-  NEED_ENABLE_EXECUTE_STACK=0
-  AC_MSG_RESULT([no])
-fi
-rm -f conftest*
-])
-
 \f
 dnl Check if the C compiler supports `-fstack-protector'.
 AC_DEFUN([grub_CHECK_STACK_PROTECTOR],[
@@ -369,7 +408,7 @@ AC_MSG_CHECKING([whether `$CC' accepts `-mstack-arg-probe'])
 AC_LANG_CONFTEST([AC_LANG_SOURCE([[
 void foo (void) { volatile char a[8]; a[3]; }
 ]])])
-[if eval "$ac_compile -S -mstack-arg-probe -o conftest.s" 2> /dev/null; then]
+[if eval "$ac_compile -S -mstack-arg-probe -Werror -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
@@ -458,23 +497,3 @@ dnl program.
 AC_DEFUN([grub_TRANSFORM],[dnl
 AC_SUBST(AS_TR_SH([$1]), [`AS_ECHO([$1]) | sed "$program_transform_name"`])dnl
 ])
-
-dnl Check if the C compiler supports `-mno-unaligned-access'.
-AC_DEFUN([grub_CHECK_NO_UNALIGNED_ACCESS],[
-[# foobar
-nua_possible=yes]
-AC_MSG_CHECKING([whether `$CC' supports `-mno-unaligned-access'])
-AC_LANG_CONFTEST([AC_LANG_SOURCE([[
-int main() {
-       return 0;
-}
-]])])
-
-[if eval "$ac_compile -S -mno-unaligned-access -o conftest.s" 2> /dev/null; then]
-  AC_MSG_RESULT([yes])
-  [rm -f conftest.s
-else
-  nua_possible=no]
-  AC_MSG_RESULT([no])
-[fi]
-])