⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acinclude.m4

📁 i386的bootloader源码grub
💻 M4
字号:
dnl grub_ASM_USCORE checks if C symbols get an underscore afterdnl compiling to assembler.dnl Written by Pavel Roskin. Based on grub_ASM_EXT_C written bydnl Erich Boleyn and modified by OKUJI YoshinoriAC_DEFUN([grub_ASM_USCORE],[AC_REQUIRE([AC_PROG_CC])AC_MSG_CHECKING([if C symbols get an underscore after compilation])AC_CACHE_VAL(grub_cv_asm_uscore,[cat > conftest.c <<\EOFintfunc (int *list){  *list = 0;  return *list;}EOFif AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -S conftest.c]) && test -s conftest.s; then  trueelse  AC_MSG_ERROR([${CC-cc} failed to produce assembly code])fiif grep _func conftest.s >/dev/null 2>&1; then  grub_cv_asm_uscore=yeselse  grub_cv_asm_uscore=nofirm -f conftest*])if test "x$grub_cv_asm_uscore" = xyes; then  AC_DEFINE_UNQUOTED([HAVE_ASM_USCORE], $grub_cv_asm_uscore,    [Define if C symbols get an underscore after compilation])fiAC_MSG_RESULT([$grub_cv_asm_uscore])])dnl Some versions of `objcopy -O binary' vary their output dependingdnl on the link address.AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE],[AC_MSG_CHECKING([whether ${OBJCOPY} works for absolute addresses])AC_CACHE_VAL(grub_cv_prog_objcopy_absolute,[cat > conftest.c <<\EOFvoidcmain (void){   *((int *) 0x1000) = 2;}EOFif AC_TRY_EVAL(ac_compile) && test -s conftest.o; then :else  AC_MSG_ERROR([${CC-cc} cannot compile C source code])figrub_cv_prog_objcopy_absolute=yesfor link_addr in 2000 8000 7C00; do  if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then :  else    AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr])  fi  if AC_TRY_COMMAND([${OBJCOPY-objcopy} -O binary conftest.exec conftest]); then :  else    AC_MSG_ERROR([${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  else    grub_cv_prog_objcopy_absolute=no    break  fidonerm -f conftest*])AC_MSG_RESULT([$grub_cv_prog_objcopy_absolute])])dnl Mass confusion!dnl Older versions of GAS interpret `.code16' to mean ``generate 32-bitdnl instructions, but implicitly insert addr32 and data32 bytes sodnl that the code works in real mode''.dnldnl Newer versions of GAS interpret `.code16' to mean ``generate 16-bitdnl instructions,'' which seems right.  This requires the programmerdnl to explicitly insert addr32 and data32 instructions when they wantdnl them.dnldnl We only support the newer versions, because the old versions causednl major pain, by requiring manual assembly to get 16-bit instructions intodnl stage1/stage1.S.AC_DEFUN([grub_ASM_ADDR32],[AC_REQUIRE([AC_PROG_CC])AC_REQUIRE([grub_ASM_PREFIX_REQUIREMENT])AC_MSG_CHECKING([for .code16 addr32 assembler support])AC_CACHE_VAL(grub_cv_asm_addr32,[cat > conftest.s.in <<\EOF	.code16l1:	@ADDR32@	movb	%al, l1EOFif test "x$grub_cv_asm_prefix_requirement" = xyes; then  sed -e s/@ADDR32@/addr32/ < conftest.s.in > conftest.selse  sed -e s/@ADDR32@/addr32\;/ < conftest.s.in > conftest.sfiif AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then  grub_cv_asm_addr32=yeselse  grub_cv_asm_addr32=nofirm -f conftest*])AC_MSG_RESULT([$grub_cv_asm_addr32])])dnldnl Later versions of GAS requires that addr32 and data32 prefixesdnl appear in the same lines as the instructions they modify, whilednl earlier versions requires that they appear in separate lines.AC_DEFUN([grub_ASM_PREFIX_REQUIREMENT],[AC_REQUIRE([AC_PROG_CC])AC_MSG_CHECKING(dnl[whether addr32 must be in the same line as the instruction])AC_CACHE_VAL(grub_cv_asm_prefix_requirement,[cat > conftest.s <<\EOF	.code16l1:	addr32	movb	%al, l1EOFif AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then  grub_cv_asm_prefix_requirement=yeselse  grub_cv_asm_prefix_requirement=nofirm -f conftest*])if test "x$grub_cv_asm_prefix_requirement" = xyes; then  grub_tmp_addr32="addr32"  grub_tmp_data32="data32"else  grub_tmp_addr32="addr32;"  grub_tmp_data32="data32;"fiAC_DEFINE_UNQUOTED([ADDR32], $grub_tmp_addr32,  [Define it to \"addr32\" or \"addr32;\" to make GAS happy])AC_DEFINE_UNQUOTED([DATA32], $grub_tmp_data32,  [Define it to \"data32\" or \"data32;\" to make GAS happy])AC_MSG_RESULT([$grub_cv_asm_prefix_requirement])])dnldnl Older versions of GAS require that absolute indirect calls/jumps arednl not prefixed with `*', while later versions warn if not prefixed.AC_DEFUN([grub_ASM_ABSOLUTE_WITHOUT_ASTERISK],[AC_REQUIRE([AC_PROG_CC])AC_MSG_CHECKING(dnl[whether an absolute indirect call/jump must not be prefixed with an asterisk])AC_CACHE_VAL(grub_cv_asm_absolute_without_asterisk,[cat > conftest.s <<\EOF	lcall	*(offset)	offset:	.long	0	.word	0EOFif AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then  grub_cv_asm_absolute_without_asterisk=noelse  grub_cv_asm_absolute_without_asterisk=yesfirm -f conftest*])if test "x$grub_cv_asm_absolute_without_asterisk" = xyes; then  AC_DEFINE(ABSOLUTE_WITHOUT_ASTERISK, 1, [Define if an absolute indirect call/jump must NOT be prefixed with `*'])fiAC_MSG_RESULT([$grub_cv_asm_absolute_without_asterisk])])dnldnl grub_CHECK_START_SYMBOL checks if start is automatically defined bydnl the compiler.dnl Written by OKUJI YoshinoriAC_DEFUN([grub_CHECK_START_SYMBOL],[AC_REQUIRE([AC_PROG_CC])AC_MSG_CHECKING([if start is defined by the compiler])AC_CACHE_VAL(grub_cv_check_start_symbol,[AC_TRY_LINK([], [asm ("incl start")],   grub_cv_check_start_symbol=yes,   grub_cv_check_start_symbol=no)])if test "x$grub_cv_check_start_symbol" = xyes; then  AC_DEFINE(HAVE_START_SYMBOL, 1, [Define if start is defined])fiAC_MSG_RESULT([$grub_cv_check_start_symbol])])dnldnl grub_CHECK_USCORE_START_SYMBOL checks if _start is automaticallydnl defined by the compiler.dnl Written by OKUJI YoshinoriAC_DEFUN([grub_CHECK_USCORE_START_SYMBOL],[AC_REQUIRE([AC_PROG_CC])AC_MSG_CHECKING([if _start is defined by the compiler])AC_CACHE_VAL(grub_cv_check_uscore_start_symbol,[AC_TRY_LINK([], [asm ("incl _start")],   grub_cv_check_uscore_start_symbol=yes,   grub_cv_check_uscore_start_symbol=no)])if test "x$grub_cv_check_uscore_start_symbol" = xyes; then  AC_DEFINE(HAVE_USCORE_START_SYMBOL, 1, [Define if _start is defined])fiAC_MSG_RESULT([$grub_cv_check_uscore_start_symbol])])dnldnl grub_CHECK_USCORE_USCORE_BSS_START_SYMBOL checks if __bss_start isdnl automatically defined by the compiler.dnl Written by Michael Hohmoth.AC_DEFUN([grub_CHECK_USCORE_USCORE_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_TRY_LINK([], [asm ("incl __bss_start")],   grub_cv_check_uscore_uscore_bss_start_symbol=yes,   grub_cv_check_uscore_uscore_bss_start_symbol=no)])if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" = xyes; then  AC_DEFINE(HAVE_USCORE_USCORE_BSS_START_SYMBOL, 1, [Define if __bss_start is defined])fiAC_MSG_RESULT([$grub_cv_check_uscore_uscore_bss_start_symbol])])dnldnl grub_CHECK_EDATA_SYMBOL checks if edata is automatically defined by thednl compiler.dnl Written by Michael Hohmuth.AC_DEFUN([grub_CHECK_EDATA_SYMBOL],[AC_REQUIRE([AC_PROG_CC])AC_MSG_CHECKING([if edata is defined by the compiler])AC_CACHE_VAL(grub_cv_check_edata_symbol,[AC_TRY_LINK([], [asm ("incl edata")],   grub_cv_check_edata_symbol=yes,   grub_cv_check_edata_symbol=no)])if test "x$grub_cv_check_edata_symbol" = xyes; then  AC_DEFINE(HAVE_EDATA_SYMBOL, 1, [Define if edata is defined])fiAC_MSG_RESULT([$grub_cv_check_edata_symbol])])dnldnl grub_CHECK_USCORE_EDATA_SYMBOL checks if _edata is automaticallydnl defined by the compiler.dnl Written by Michael Hohmuth.AC_DEFUN([grub_CHECK_USCORE_EDATA_SYMBOL],[AC_REQUIRE([AC_PROG_CC])AC_MSG_CHECKING([if _edata is defined by the compiler])AC_CACHE_VAL(grub_cv_check_uscore_edata_symbol,[AC_TRY_LINK([], [asm ("incl _edata")],   grub_cv_check_uscore_edata_symbol=yes,   grub_cv_check_uscore_edata_symbol=no)])if test "x$grub_cv_check_uscore_edata_symbol" = xyes; then  AC_DEFINE(HAVE_USCORE_EDATA_SYMBOL, 1, [Define if _edata is defined])fiAC_MSG_RESULT([$grub_cv_check_uscore_edata_symbol])])dnldnl grub_CHECK_END_SYMBOL checks if end is automatically defined by thednl compiler.dnl Written by OKUJI YoshinoriAC_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_TRY_LINK([], [asm ("incl end")],   grub_cv_check_end_symbol=yes,   grub_cv_check_end_symbol=no)])if test "x$grub_cv_check_end_symbol" = xyes; then  AC_DEFINE(HAVE_END_SYMBOL, 1, [Define if end is defined])fiAC_MSG_RESULT([$grub_cv_check_end_symbol])])dnldnl grub_CHECK_USCORE_END_SYMBOL checks if _end is automatically defineddnl by the compiler.dnl Written by OKUJI YoshinoriAC_DEFUN([grub_CHECK_USCORE_END_SYMBOL],[AC_REQUIRE([AC_PROG_CC])AC_MSG_CHECKING([if _end is defined by the compiler])AC_CACHE_VAL(grub_cv_check_uscore_end_symbol,[AC_TRY_LINK([], [asm ("incl _end")],   grub_cv_check_uscore_end_symbol=yes,   grub_cv_check_uscore_end_symbol=no)])if test "x$grub_cv_check_uscore_end_symbol" = xyes; then  AC_DEFINE(HAVE_USCORE_END_SYMBOL, 1, [Define if end is defined])fiAC_MSG_RESULT([$grub_cv_check_uscore_end_symbol])])dnl grub_DEFINE_FILE(MACRO_NAME, FILE_NAME, DESCRIPTION)dnl grub_DEFINE_FILE defines a macro as the contents of a file safely.dnl Replace some escape sequences, because autoconf doesn't handle themdnl gracefully.dnl Written by OKUJI Yoshinori.AC_DEFUN([grub_DEFINE_FILE],[AC_REQUIRE([AC_PROG_CC])# Because early versions of GNU sed 3.x are too buggy, use a C program# instead of shell commands. *sigh*cat >conftest.c <<\EOF#include <stdio.h>intmain (void){  int c;  while ((c = getchar ()) != EOF)    {      switch (c)        {	case '\n':	  fputs ("\\n", stdout);	  break;	case '\r':	  fputs ("\\r", stdout);	  break;	case '\\':	  fputs ("\\\\", stdout);	  break;	case '"':	  fputs ("\\\"", stdout);	  break;	default:	  putchar (c);	}    }  return 0;}EOFif AC_TRY_COMMAND([${CC-cc} ${CFLAGS} conftest.c -o conftest]) && test -s conftest; then  grub_tmp_value=`./conftest < "[$2]"`else  AC_MSG_ERROR([${CC-cc} failed to produce an executable file])fiAC_DEFINE_UNQUOTED([$1], "$grub_tmp_value", [$3])rm -f conftest*])

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -