129 lines
3.2 KiB
Plaintext
129 lines
3.2 KiB
Plaintext
# stack-direction.m4
|
|
# serial 12
|
|
dnl Copyright (C) 2002-2026 Free Software Foundation, Inc.
|
|
dnl This file is free software, distributed under the terms of the GNU
|
|
dnl General Public License as published by the Free Software Foundation;
|
|
dnl either version 2 of the License, or (at your option) any later version.
|
|
dnl As a special exception to the GNU General Public License, this file
|
|
dnl may be distributed as part of a program that contains a configuration
|
|
dnl script generated by Autoconf, under the same distribution terms as
|
|
dnl the rest of that program.
|
|
|
|
dnl Written by Bruno Haible.
|
|
|
|
# Determine the stack direction. Define the C macro STACK_DIRECTION.
|
|
AC_DEFUN([SV_STACK_DIRECTION],
|
|
[
|
|
AC_REQUIRE([AC_CANONICAL_HOST])
|
|
AC_CACHE_CHECK([for stack direction], [sv_cv_stack_direction_msg], [
|
|
case "$host_cpu" in
|
|
dnl See the #define STACK_GROWS_DOWNWARD in gcc-3.1/gcc/config/*/*.h.
|
|
a29k | \
|
|
aarch64* | \
|
|
alpha* | \
|
|
arc | arceb | arc32 | arc64 | \
|
|
arm* | strongarm* | xscale* | \
|
|
avr | avr32 | \
|
|
bfin | \
|
|
c1 | c2 | c32 | c34 | c38 | \
|
|
clipper | \
|
|
cr16 | \
|
|
cris | \
|
|
csky | \
|
|
d30v | \
|
|
epiphany | \
|
|
elxsi | \
|
|
fr30 | \
|
|
frv | \
|
|
ft32 | \
|
|
h8300 | \
|
|
i?86 | x86_64 | \
|
|
i860 | \
|
|
ia64 | \
|
|
iq2000 | \
|
|
lm32 | \
|
|
loongarch* | \
|
|
m32c | \
|
|
m32r | \
|
|
m68* | \
|
|
m88k | \
|
|
mcore | \
|
|
microblaze* | \
|
|
mips* | \
|
|
mmix | \
|
|
mn10200 | \
|
|
mn10300 | \
|
|
moxie | \
|
|
msp430 | \
|
|
nds32* | \
|
|
nios2 | nios2eb | nios2el | \
|
|
ns32k | \
|
|
nvptx | \
|
|
or1k | \
|
|
pdp11 | \
|
|
pj* | \
|
|
powerpc* | rs6000 | \
|
|
pru | \
|
|
riscv* | \
|
|
rl78 | \
|
|
romp | \
|
|
rx | \
|
|
s390* | \
|
|
sh* | \
|
|
sparc* | \
|
|
tic6x | \
|
|
tilegx | \
|
|
tilepro | \
|
|
v850 | \
|
|
vax | \
|
|
visium | \
|
|
xtensa)
|
|
sv_cv_stack_direction=-1 ;;
|
|
c4x | \
|
|
dsp16xx | \
|
|
i960 | \
|
|
hppa* | parisc* | \
|
|
stormy16 | \
|
|
we32k)
|
|
sv_cv_stack_direction=1 ;;
|
|
*)
|
|
if test $cross_compiling = no; then
|
|
cat > conftest.c <<EOF
|
|
#include <stdio.h>
|
|
int
|
|
find_stack_direction (int *addr, int depth)
|
|
{
|
|
int dir, dummy = 0;
|
|
if (! addr)
|
|
addr = &dummy;
|
|
*addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
|
|
dir = depth ? find_stack_direction (addr, depth - 1) : 0;
|
|
return dir + dummy;
|
|
}
|
|
int
|
|
main (int argc, char *argv[[]])
|
|
{
|
|
printf ("%d\n", find_stack_direction (NULL, argc + 20));
|
|
return 0;
|
|
}
|
|
EOF
|
|
AC_TRY_EVAL([ac_link])
|
|
sv_cv_stack_direction=`./conftest`
|
|
else
|
|
sv_cv_stack_direction=0
|
|
fi
|
|
;;
|
|
esac
|
|
case $sv_cv_stack_direction in
|
|
1) sv_cv_stack_direction_msg="grows up";;
|
|
-1) sv_cv_stack_direction_msg="grows down";;
|
|
*) sv_cv_stack_direction_msg="unknown";;
|
|
esac
|
|
])
|
|
AC_DEFINE_UNQUOTED([STACK_DIRECTION], [$sv_cv_stack_direction],
|
|
[Define as the direction of stack growth for your system.
|
|
STACK_DIRECTION > 0 => grows toward higher addresses
|
|
STACK_DIRECTION < 0 => grows toward lower addresses
|
|
STACK_DIRECTION = 0 => spaghetti stack.])
|
|
])
|