1*1b8adde7SWilliam Kucharskidnl grub_ASM_USCORE checks if C symbols get an underscore after 2*1b8adde7SWilliam Kucharskidnl compiling to assembler. 3*1b8adde7SWilliam Kucharskidnl Written by Pavel Roskin. Based on grub_ASM_EXT_C written by 4*1b8adde7SWilliam Kucharskidnl Erich Boleyn and modified by OKUJI Yoshinori 5*1b8adde7SWilliam KucharskiAC_DEFUN([grub_ASM_USCORE], 6*1b8adde7SWilliam Kucharski[AC_REQUIRE([AC_PROG_CC]) 7*1b8adde7SWilliam KucharskiAC_MSG_CHECKING([if C symbols get an underscore after compilation]) 8*1b8adde7SWilliam KucharskiAC_CACHE_VAL(grub_cv_asm_uscore, 9*1b8adde7SWilliam Kucharski[cat > conftest.c <<\EOF 10*1b8adde7SWilliam Kucharskiint 11*1b8adde7SWilliam Kucharskifunc (int *list) 12*1b8adde7SWilliam Kucharski{ 13*1b8adde7SWilliam Kucharski *list = 0; 14*1b8adde7SWilliam Kucharski return *list; 15*1b8adde7SWilliam Kucharski} 16*1b8adde7SWilliam KucharskiEOF 17*1b8adde7SWilliam Kucharski 18*1b8adde7SWilliam Kucharskiif AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -S conftest.c]) && test -s conftest.s; then 19*1b8adde7SWilliam Kucharski true 20*1b8adde7SWilliam Kucharskielse 21*1b8adde7SWilliam Kucharski AC_MSG_ERROR([${CC-cc} failed to produce assembly code]) 22*1b8adde7SWilliam Kucharskifi 23*1b8adde7SWilliam Kucharski 24*1b8adde7SWilliam Kucharskiif grep _func conftest.s >/dev/null 2>&1; then 25*1b8adde7SWilliam Kucharski grub_cv_asm_uscore=yes 26*1b8adde7SWilliam Kucharskielse 27*1b8adde7SWilliam Kucharski grub_cv_asm_uscore=no 28*1b8adde7SWilliam Kucharskifi 29*1b8adde7SWilliam Kucharski 30*1b8adde7SWilliam Kucharskirm -f conftest*]) 31*1b8adde7SWilliam Kucharski 32*1b8adde7SWilliam Kucharskiif test "x$grub_cv_asm_uscore" = xyes; then 33*1b8adde7SWilliam Kucharski AC_DEFINE_UNQUOTED([HAVE_ASM_USCORE], $grub_cv_asm_uscore, 34*1b8adde7SWilliam Kucharski [Define if C symbols get an underscore after compilation]) 35*1b8adde7SWilliam Kucharskifi 36*1b8adde7SWilliam Kucharski 37*1b8adde7SWilliam KucharskiAC_MSG_RESULT([$grub_cv_asm_uscore]) 38*1b8adde7SWilliam Kucharski]) 39*1b8adde7SWilliam Kucharski 40*1b8adde7SWilliam Kucharski 41*1b8adde7SWilliam Kucharskidnl Some versions of `objcopy -O binary' vary their output depending 42*1b8adde7SWilliam Kucharskidnl on the link address. 43*1b8adde7SWilliam KucharskiAC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE], 44*1b8adde7SWilliam Kucharski[AC_MSG_CHECKING([whether ${OBJCOPY} works for absolute addresses]) 45*1b8adde7SWilliam KucharskiAC_CACHE_VAL(grub_cv_prog_objcopy_absolute, 46*1b8adde7SWilliam Kucharski[cat > conftest.c <<\EOF 47*1b8adde7SWilliam Kucharskivoid 48*1b8adde7SWilliam Kucharskicmain (void) 49*1b8adde7SWilliam Kucharski{ 50*1b8adde7SWilliam Kucharski *((int *) 0x1000) = 2; 51*1b8adde7SWilliam Kucharski} 52*1b8adde7SWilliam KucharskiEOF 53*1b8adde7SWilliam Kucharski 54*1b8adde7SWilliam Kucharskiif AC_TRY_EVAL(ac_compile) && test -s conftest.o; then : 55*1b8adde7SWilliam Kucharskielse 56*1b8adde7SWilliam Kucharski AC_MSG_ERROR([${CC-cc} cannot compile C source code]) 57*1b8adde7SWilliam Kucharskifi 58*1b8adde7SWilliam Kucharskigrub_cv_prog_objcopy_absolute=yes 59*1b8adde7SWilliam Kucharskifor link_addr in 2000 8000 7C00; do 60*1b8adde7SWilliam Kucharski if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then : 61*1b8adde7SWilliam Kucharski else 62*1b8adde7SWilliam Kucharski AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr]) 63*1b8adde7SWilliam Kucharski fi 64*1b8adde7SWilliam Kucharski if AC_TRY_COMMAND([${OBJCOPY-objcopy} -O binary conftest.exec conftest]); then : 65*1b8adde7SWilliam Kucharski else 66*1b8adde7SWilliam Kucharski AC_MSG_ERROR([${OBJCOPY-objcopy} cannot create binary files]) 67*1b8adde7SWilliam Kucharski fi 68*1b8adde7SWilliam Kucharski if test ! -f conftest.old || AC_TRY_COMMAND([cmp -s conftest.old conftest]); then 69*1b8adde7SWilliam Kucharski mv -f conftest conftest.old 70*1b8adde7SWilliam Kucharski else 71*1b8adde7SWilliam Kucharski grub_cv_prog_objcopy_absolute=no 72*1b8adde7SWilliam Kucharski break 73*1b8adde7SWilliam Kucharski fi 74*1b8adde7SWilliam Kucharskidone 75*1b8adde7SWilliam Kucharskirm -f conftest*]) 76*1b8adde7SWilliam KucharskiAC_MSG_RESULT([$grub_cv_prog_objcopy_absolute])]) 77*1b8adde7SWilliam Kucharski 78*1b8adde7SWilliam Kucharskidnl Mass confusion! 79*1b8adde7SWilliam Kucharskidnl Older versions of GAS interpret `.code16' to mean ``generate 32-bit 80*1b8adde7SWilliam Kucharskidnl instructions, but implicitly insert addr32 and data32 bytes so 81*1b8adde7SWilliam Kucharskidnl that the code works in real mode''. 82*1b8adde7SWilliam Kucharskidnl 83*1b8adde7SWilliam Kucharskidnl Newer versions of GAS interpret `.code16' to mean ``generate 16-bit 84*1b8adde7SWilliam Kucharskidnl instructions,'' which seems right. This requires the programmer 85*1b8adde7SWilliam Kucharskidnl to explicitly insert addr32 and data32 instructions when they want 86*1b8adde7SWilliam Kucharskidnl them. 87*1b8adde7SWilliam Kucharskidnl 88*1b8adde7SWilliam Kucharskidnl We only support the newer versions, because the old versions cause 89*1b8adde7SWilliam Kucharskidnl major pain, by requiring manual assembly to get 16-bit instructions into 90*1b8adde7SWilliam Kucharskidnl stage1/stage1.S. 91*1b8adde7SWilliam KucharskiAC_DEFUN([grub_ASM_ADDR32], 92*1b8adde7SWilliam Kucharski[AC_REQUIRE([AC_PROG_CC]) 93*1b8adde7SWilliam KucharskiAC_REQUIRE([grub_ASM_PREFIX_REQUIREMENT]) 94*1b8adde7SWilliam KucharskiAC_MSG_CHECKING([for .code16 addr32 assembler support]) 95*1b8adde7SWilliam KucharskiAC_CACHE_VAL(grub_cv_asm_addr32, 96*1b8adde7SWilliam Kucharski[cat > conftest.s.in <<\EOF 97*1b8adde7SWilliam Kucharski .code16 98*1b8adde7SWilliam Kucharskil1: @ADDR32@ movb %al, l1 99*1b8adde7SWilliam KucharskiEOF 100*1b8adde7SWilliam Kucharski 101*1b8adde7SWilliam Kucharskiif test "x$grub_cv_asm_prefix_requirement" = xyes; then 102*1b8adde7SWilliam Kucharski sed -e s/@ADDR32@/addr32/ < conftest.s.in > conftest.s 103*1b8adde7SWilliam Kucharskielse 104*1b8adde7SWilliam Kucharski sed -e s/@ADDR32@/addr32\;/ < conftest.s.in > conftest.s 105*1b8adde7SWilliam Kucharskifi 106*1b8adde7SWilliam Kucharski 107*1b8adde7SWilliam Kucharskiif AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then 108*1b8adde7SWilliam Kucharski grub_cv_asm_addr32=yes 109*1b8adde7SWilliam Kucharskielse 110*1b8adde7SWilliam Kucharski grub_cv_asm_addr32=no 111*1b8adde7SWilliam Kucharskifi 112*1b8adde7SWilliam Kucharski 113*1b8adde7SWilliam Kucharskirm -f conftest*]) 114*1b8adde7SWilliam Kucharski 115*1b8adde7SWilliam KucharskiAC_MSG_RESULT([$grub_cv_asm_addr32])]) 116*1b8adde7SWilliam Kucharski 117*1b8adde7SWilliam Kucharskidnl 118*1b8adde7SWilliam Kucharskidnl Later versions of GAS requires that addr32 and data32 prefixes 119*1b8adde7SWilliam Kucharskidnl appear in the same lines as the instructions they modify, while 120*1b8adde7SWilliam Kucharskidnl earlier versions requires that they appear in separate lines. 121*1b8adde7SWilliam KucharskiAC_DEFUN([grub_ASM_PREFIX_REQUIREMENT], 122*1b8adde7SWilliam Kucharski[AC_REQUIRE([AC_PROG_CC]) 123*1b8adde7SWilliam KucharskiAC_MSG_CHECKING(dnl 124*1b8adde7SWilliam Kucharski[whether addr32 must be in the same line as the instruction]) 125*1b8adde7SWilliam KucharskiAC_CACHE_VAL(grub_cv_asm_prefix_requirement, 126*1b8adde7SWilliam Kucharski[cat > conftest.s <<\EOF 127*1b8adde7SWilliam Kucharski .code16 128*1b8adde7SWilliam Kucharskil1: addr32 movb %al, l1 129*1b8adde7SWilliam KucharskiEOF 130*1b8adde7SWilliam Kucharski 131*1b8adde7SWilliam Kucharskiif AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then 132*1b8adde7SWilliam Kucharski grub_cv_asm_prefix_requirement=yes 133*1b8adde7SWilliam Kucharskielse 134*1b8adde7SWilliam Kucharski grub_cv_asm_prefix_requirement=no 135*1b8adde7SWilliam Kucharskifi 136*1b8adde7SWilliam Kucharski 137*1b8adde7SWilliam Kucharskirm -f conftest*]) 138*1b8adde7SWilliam Kucharski 139*1b8adde7SWilliam Kucharskiif test "x$grub_cv_asm_prefix_requirement" = xyes; then 140*1b8adde7SWilliam Kucharski grub_tmp_addr32="addr32" 141*1b8adde7SWilliam Kucharski grub_tmp_data32="data32" 142*1b8adde7SWilliam Kucharskielse 143*1b8adde7SWilliam Kucharski grub_tmp_addr32="addr32;" 144*1b8adde7SWilliam Kucharski grub_tmp_data32="data32;" 145*1b8adde7SWilliam Kucharskifi 146*1b8adde7SWilliam Kucharski 147*1b8adde7SWilliam KucharskiAC_DEFINE_UNQUOTED([ADDR32], $grub_tmp_addr32, 148*1b8adde7SWilliam Kucharski [Define it to \"addr32\" or \"addr32;\" to make GAS happy]) 149*1b8adde7SWilliam KucharskiAC_DEFINE_UNQUOTED([DATA32], $grub_tmp_data32, 150*1b8adde7SWilliam Kucharski [Define it to \"data32\" or \"data32;\" to make GAS happy]) 151*1b8adde7SWilliam Kucharski 152*1b8adde7SWilliam KucharskiAC_MSG_RESULT([$grub_cv_asm_prefix_requirement])]) 153*1b8adde7SWilliam Kucharski 154*1b8adde7SWilliam Kucharskidnl 155*1b8adde7SWilliam Kucharskidnl Older versions of GAS require that absolute indirect calls/jumps are 156*1b8adde7SWilliam Kucharskidnl not prefixed with `*', while later versions warn if not prefixed. 157*1b8adde7SWilliam KucharskiAC_DEFUN([grub_ASM_ABSOLUTE_WITHOUT_ASTERISK], 158*1b8adde7SWilliam Kucharski[AC_REQUIRE([AC_PROG_CC]) 159*1b8adde7SWilliam KucharskiAC_MSG_CHECKING(dnl 160*1b8adde7SWilliam Kucharski[whether an absolute indirect call/jump must not be prefixed with an asterisk]) 161*1b8adde7SWilliam KucharskiAC_CACHE_VAL(grub_cv_asm_absolute_without_asterisk, 162*1b8adde7SWilliam Kucharski[cat > conftest.s <<\EOF 163*1b8adde7SWilliam Kucharski lcall *(offset) 164*1b8adde7SWilliam Kucharskioffset: 165*1b8adde7SWilliam Kucharski .long 0 166*1b8adde7SWilliam Kucharski .word 0 167*1b8adde7SWilliam KucharskiEOF 168*1b8adde7SWilliam Kucharski 169*1b8adde7SWilliam Kucharskiif AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then 170*1b8adde7SWilliam Kucharski grub_cv_asm_absolute_without_asterisk=no 171*1b8adde7SWilliam Kucharskielse 172*1b8adde7SWilliam Kucharski grub_cv_asm_absolute_without_asterisk=yes 173*1b8adde7SWilliam Kucharskifi 174*1b8adde7SWilliam Kucharski 175*1b8adde7SWilliam Kucharskirm -f conftest*]) 176*1b8adde7SWilliam Kucharski 177*1b8adde7SWilliam Kucharskiif test "x$grub_cv_asm_absolute_without_asterisk" = xyes; then 178*1b8adde7SWilliam Kucharski AC_DEFINE(ABSOLUTE_WITHOUT_ASTERISK, 1, [Define if an absolute indirect call/jump must NOT be prefixed with `*']) 179*1b8adde7SWilliam Kucharskifi 180*1b8adde7SWilliam Kucharski 181*1b8adde7SWilliam KucharskiAC_MSG_RESULT([$grub_cv_asm_absolute_without_asterisk])]) 182*1b8adde7SWilliam Kucharski 183*1b8adde7SWilliam Kucharskidnl 184*1b8adde7SWilliam Kucharskidnl grub_CHECK_START_SYMBOL checks if start is automatically defined by 185*1b8adde7SWilliam Kucharskidnl the compiler. 186*1b8adde7SWilliam Kucharskidnl Written by OKUJI Yoshinori 187*1b8adde7SWilliam KucharskiAC_DEFUN([grub_CHECK_START_SYMBOL], 188*1b8adde7SWilliam Kucharski[AC_REQUIRE([AC_PROG_CC]) 189*1b8adde7SWilliam KucharskiAC_MSG_CHECKING([if start is defined by the compiler]) 190*1b8adde7SWilliam KucharskiAC_CACHE_VAL(grub_cv_check_start_symbol, 191*1b8adde7SWilliam Kucharski[AC_TRY_LINK([], [asm ("incl start")], 192*1b8adde7SWilliam Kucharski grub_cv_check_start_symbol=yes, 193*1b8adde7SWilliam Kucharski grub_cv_check_start_symbol=no)]) 194*1b8adde7SWilliam Kucharski 195*1b8adde7SWilliam Kucharskiif test "x$grub_cv_check_start_symbol" = xyes; then 196*1b8adde7SWilliam Kucharski AC_DEFINE(HAVE_START_SYMBOL, 1, [Define if start is defined]) 197*1b8adde7SWilliam Kucharskifi 198*1b8adde7SWilliam Kucharski 199*1b8adde7SWilliam KucharskiAC_MSG_RESULT([$grub_cv_check_start_symbol]) 200*1b8adde7SWilliam Kucharski]) 201*1b8adde7SWilliam Kucharski 202*1b8adde7SWilliam Kucharskidnl 203*1b8adde7SWilliam Kucharskidnl grub_CHECK_USCORE_START_SYMBOL checks if _start is automatically 204*1b8adde7SWilliam Kucharskidnl defined by the compiler. 205*1b8adde7SWilliam Kucharskidnl Written by OKUJI Yoshinori 206*1b8adde7SWilliam KucharskiAC_DEFUN([grub_CHECK_USCORE_START_SYMBOL], 207*1b8adde7SWilliam Kucharski[AC_REQUIRE([AC_PROG_CC]) 208*1b8adde7SWilliam KucharskiAC_MSG_CHECKING([if _start is defined by the compiler]) 209*1b8adde7SWilliam KucharskiAC_CACHE_VAL(grub_cv_check_uscore_start_symbol, 210*1b8adde7SWilliam Kucharski[AC_TRY_LINK([], [asm ("incl _start")], 211*1b8adde7SWilliam Kucharski grub_cv_check_uscore_start_symbol=yes, 212*1b8adde7SWilliam Kucharski grub_cv_check_uscore_start_symbol=no)]) 213*1b8adde7SWilliam Kucharski 214*1b8adde7SWilliam Kucharskiif test "x$grub_cv_check_uscore_start_symbol" = xyes; then 215*1b8adde7SWilliam Kucharski AC_DEFINE(HAVE_USCORE_START_SYMBOL, 1, [Define if _start is defined]) 216*1b8adde7SWilliam Kucharskifi 217*1b8adde7SWilliam Kucharski 218*1b8adde7SWilliam KucharskiAC_MSG_RESULT([$grub_cv_check_uscore_start_symbol]) 219*1b8adde7SWilliam Kucharski]) 220*1b8adde7SWilliam Kucharski 221*1b8adde7SWilliam Kucharskidnl 222*1b8adde7SWilliam Kucharskidnl grub_CHECK_USCORE_USCORE_BSS_START_SYMBOL checks if __bss_start is 223*1b8adde7SWilliam Kucharskidnl automatically defined by the compiler. 224*1b8adde7SWilliam Kucharskidnl Written by Michael Hohmoth. 225*1b8adde7SWilliam KucharskiAC_DEFUN([grub_CHECK_USCORE_USCORE_BSS_START_SYMBOL], 226*1b8adde7SWilliam Kucharski[AC_REQUIRE([AC_PROG_CC]) 227*1b8adde7SWilliam KucharskiAC_MSG_CHECKING([if __bss_start is defined by the compiler]) 228*1b8adde7SWilliam KucharskiAC_CACHE_VAL(grub_cv_check_uscore_uscore_bss_start_symbol, 229*1b8adde7SWilliam Kucharski[AC_TRY_LINK([], [asm ("incl __bss_start")], 230*1b8adde7SWilliam Kucharski grub_cv_check_uscore_uscore_bss_start_symbol=yes, 231*1b8adde7SWilliam Kucharski grub_cv_check_uscore_uscore_bss_start_symbol=no)]) 232*1b8adde7SWilliam Kucharski 233*1b8adde7SWilliam Kucharskiif test "x$grub_cv_check_uscore_uscore_bss_start_symbol" = xyes; then 234*1b8adde7SWilliam Kucharski AC_DEFINE(HAVE_USCORE_USCORE_BSS_START_SYMBOL, 1, [Define if __bss_start is defined]) 235*1b8adde7SWilliam Kucharskifi 236*1b8adde7SWilliam Kucharski 237*1b8adde7SWilliam KucharskiAC_MSG_RESULT([$grub_cv_check_uscore_uscore_bss_start_symbol]) 238*1b8adde7SWilliam Kucharski]) 239*1b8adde7SWilliam Kucharski 240*1b8adde7SWilliam Kucharskidnl 241*1b8adde7SWilliam Kucharskidnl grub_CHECK_EDATA_SYMBOL checks if edata is automatically defined by the 242*1b8adde7SWilliam Kucharskidnl compiler. 243*1b8adde7SWilliam Kucharskidnl Written by Michael Hohmuth. 244*1b8adde7SWilliam KucharskiAC_DEFUN([grub_CHECK_EDATA_SYMBOL], 245*1b8adde7SWilliam Kucharski[AC_REQUIRE([AC_PROG_CC]) 246*1b8adde7SWilliam KucharskiAC_MSG_CHECKING([if edata is defined by the compiler]) 247*1b8adde7SWilliam KucharskiAC_CACHE_VAL(grub_cv_check_edata_symbol, 248*1b8adde7SWilliam Kucharski[AC_TRY_LINK([], [asm ("incl edata")], 249*1b8adde7SWilliam Kucharski grub_cv_check_edata_symbol=yes, 250*1b8adde7SWilliam Kucharski grub_cv_check_edata_symbol=no)]) 251*1b8adde7SWilliam Kucharski 252*1b8adde7SWilliam Kucharskiif test "x$grub_cv_check_edata_symbol" = xyes; then 253*1b8adde7SWilliam Kucharski AC_DEFINE(HAVE_EDATA_SYMBOL, 1, [Define if edata is defined]) 254*1b8adde7SWilliam Kucharskifi 255*1b8adde7SWilliam Kucharski 256*1b8adde7SWilliam KucharskiAC_MSG_RESULT([$grub_cv_check_edata_symbol]) 257*1b8adde7SWilliam Kucharski]) 258*1b8adde7SWilliam Kucharski 259*1b8adde7SWilliam Kucharskidnl 260*1b8adde7SWilliam Kucharskidnl grub_CHECK_USCORE_EDATA_SYMBOL checks if _edata is automatically 261*1b8adde7SWilliam Kucharskidnl defined by the compiler. 262*1b8adde7SWilliam Kucharskidnl Written by Michael Hohmuth. 263*1b8adde7SWilliam KucharskiAC_DEFUN([grub_CHECK_USCORE_EDATA_SYMBOL], 264*1b8adde7SWilliam Kucharski[AC_REQUIRE([AC_PROG_CC]) 265*1b8adde7SWilliam KucharskiAC_MSG_CHECKING([if _edata is defined by the compiler]) 266*1b8adde7SWilliam KucharskiAC_CACHE_VAL(grub_cv_check_uscore_edata_symbol, 267*1b8adde7SWilliam Kucharski[AC_TRY_LINK([], [asm ("incl _edata")], 268*1b8adde7SWilliam Kucharski grub_cv_check_uscore_edata_symbol=yes, 269*1b8adde7SWilliam Kucharski grub_cv_check_uscore_edata_symbol=no)]) 270*1b8adde7SWilliam Kucharski 271*1b8adde7SWilliam Kucharskiif test "x$grub_cv_check_uscore_edata_symbol" = xyes; then 272*1b8adde7SWilliam Kucharski AC_DEFINE(HAVE_USCORE_EDATA_SYMBOL, 1, [Define if _edata is defined]) 273*1b8adde7SWilliam Kucharskifi 274*1b8adde7SWilliam Kucharski 275*1b8adde7SWilliam KucharskiAC_MSG_RESULT([$grub_cv_check_uscore_edata_symbol]) 276*1b8adde7SWilliam Kucharski]) 277*1b8adde7SWilliam Kucharski 278*1b8adde7SWilliam Kucharskidnl 279*1b8adde7SWilliam Kucharskidnl grub_CHECK_END_SYMBOL checks if end is automatically defined by the 280*1b8adde7SWilliam Kucharskidnl compiler. 281*1b8adde7SWilliam Kucharskidnl Written by OKUJI Yoshinori 282*1b8adde7SWilliam KucharskiAC_DEFUN([grub_CHECK_END_SYMBOL], 283*1b8adde7SWilliam Kucharski[AC_REQUIRE([AC_PROG_CC]) 284*1b8adde7SWilliam KucharskiAC_MSG_CHECKING([if end is defined by the compiler]) 285*1b8adde7SWilliam KucharskiAC_CACHE_VAL(grub_cv_check_end_symbol, 286*1b8adde7SWilliam Kucharski[AC_TRY_LINK([], [asm ("incl end")], 287*1b8adde7SWilliam Kucharski grub_cv_check_end_symbol=yes, 288*1b8adde7SWilliam Kucharski grub_cv_check_end_symbol=no)]) 289*1b8adde7SWilliam Kucharski 290*1b8adde7SWilliam Kucharskiif test "x$grub_cv_check_end_symbol" = xyes; then 291*1b8adde7SWilliam Kucharski AC_DEFINE(HAVE_END_SYMBOL, 1, [Define if end is defined]) 292*1b8adde7SWilliam Kucharskifi 293*1b8adde7SWilliam Kucharski 294*1b8adde7SWilliam KucharskiAC_MSG_RESULT([$grub_cv_check_end_symbol]) 295*1b8adde7SWilliam Kucharski]) 296*1b8adde7SWilliam Kucharski 297*1b8adde7SWilliam Kucharskidnl 298*1b8adde7SWilliam Kucharskidnl grub_CHECK_USCORE_END_SYMBOL checks if _end is automatically defined 299*1b8adde7SWilliam Kucharskidnl by the compiler. 300*1b8adde7SWilliam Kucharskidnl Written by OKUJI Yoshinori 301*1b8adde7SWilliam KucharskiAC_DEFUN([grub_CHECK_USCORE_END_SYMBOL], 302*1b8adde7SWilliam Kucharski[AC_REQUIRE([AC_PROG_CC]) 303*1b8adde7SWilliam KucharskiAC_MSG_CHECKING([if _end is defined by the compiler]) 304*1b8adde7SWilliam KucharskiAC_CACHE_VAL(grub_cv_check_uscore_end_symbol, 305*1b8adde7SWilliam Kucharski[AC_TRY_LINK([], [asm ("incl _end")], 306*1b8adde7SWilliam Kucharski grub_cv_check_uscore_end_symbol=yes, 307*1b8adde7SWilliam Kucharski grub_cv_check_uscore_end_symbol=no)]) 308*1b8adde7SWilliam Kucharski 309*1b8adde7SWilliam Kucharskiif test "x$grub_cv_check_uscore_end_symbol" = xyes; then 310*1b8adde7SWilliam Kucharski AC_DEFINE(HAVE_USCORE_END_SYMBOL, 1, [Define if end is defined]) 311*1b8adde7SWilliam Kucharskifi 312*1b8adde7SWilliam Kucharski 313*1b8adde7SWilliam KucharskiAC_MSG_RESULT([$grub_cv_check_uscore_end_symbol]) 314*1b8adde7SWilliam Kucharski]) 315*1b8adde7SWilliam Kucharski 316*1b8adde7SWilliam Kucharskidnl grub_DEFINE_FILE(MACRO_NAME, FILE_NAME, DESCRIPTION) 317*1b8adde7SWilliam Kucharskidnl grub_DEFINE_FILE defines a macro as the contents of a file safely. 318*1b8adde7SWilliam Kucharskidnl Replace some escape sequences, because autoconf doesn't handle them 319*1b8adde7SWilliam Kucharskidnl gracefully. 320*1b8adde7SWilliam Kucharskidnl Written by OKUJI Yoshinori. 321*1b8adde7SWilliam KucharskiAC_DEFUN([grub_DEFINE_FILE], 322*1b8adde7SWilliam Kucharski[AC_REQUIRE([AC_PROG_CC]) 323*1b8adde7SWilliam Kucharski# Because early versions of GNU sed 3.x are too buggy, use a C program 324*1b8adde7SWilliam Kucharski# instead of shell commands. *sigh* 325*1b8adde7SWilliam Kucharskicat >conftest.c <<\EOF 326*1b8adde7SWilliam Kucharski#include <stdio.h> 327*1b8adde7SWilliam Kucharski 328*1b8adde7SWilliam Kucharskiint 329*1b8adde7SWilliam Kucharskimain (void) 330*1b8adde7SWilliam Kucharski{ 331*1b8adde7SWilliam Kucharski int c; 332*1b8adde7SWilliam Kucharski 333*1b8adde7SWilliam Kucharski while ((c = getchar ()) != EOF) 334*1b8adde7SWilliam Kucharski { 335*1b8adde7SWilliam Kucharski switch (c) 336*1b8adde7SWilliam Kucharski { 337*1b8adde7SWilliam Kucharski case '\n': 338*1b8adde7SWilliam Kucharski fputs ("\\n", stdout); 339*1b8adde7SWilliam Kucharski break; 340*1b8adde7SWilliam Kucharski case '\r': 341*1b8adde7SWilliam Kucharski fputs ("\\r", stdout); 342*1b8adde7SWilliam Kucharski break; 343*1b8adde7SWilliam Kucharski case '\\': 344*1b8adde7SWilliam Kucharski fputs ("\\\\", stdout); 345*1b8adde7SWilliam Kucharski break; 346*1b8adde7SWilliam Kucharski case '"': 347*1b8adde7SWilliam Kucharski fputs ("\\\"", stdout); 348*1b8adde7SWilliam Kucharski break; 349*1b8adde7SWilliam Kucharski default: 350*1b8adde7SWilliam Kucharski putchar (c); 351*1b8adde7SWilliam Kucharski } 352*1b8adde7SWilliam Kucharski } 353*1b8adde7SWilliam Kucharski 354*1b8adde7SWilliam Kucharski return 0; 355*1b8adde7SWilliam Kucharski} 356*1b8adde7SWilliam KucharskiEOF 357*1b8adde7SWilliam Kucharski 358*1b8adde7SWilliam Kucharskiif AC_TRY_COMMAND([${CC-cc} ${CFLAGS} conftest.c -o conftest]) && test -s conftest; then 359*1b8adde7SWilliam Kucharski grub_tmp_value=`./conftest < "[$2]"` 360*1b8adde7SWilliam Kucharskielse 361*1b8adde7SWilliam Kucharski AC_MSG_ERROR([${CC-cc} failed to produce an executable file]) 362*1b8adde7SWilliam Kucharskifi 363*1b8adde7SWilliam Kucharski 364*1b8adde7SWilliam KucharskiAC_DEFINE_UNQUOTED([$1], "$grub_tmp_value", [$3]) 365*1b8adde7SWilliam Kucharskirm -f conftest* 366*1b8adde7SWilliam Kucharski]) 367