xref: /titanic_52/usr/src/grub/grub-0.97/acinclude.m4 (revision 1b8adde7ba7d5e04395c141c5400dc2cffd7d809)
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