diff options
Diffstat (limited to 'gdb/testsuite/gdb.hp/gdb.aCC/run.c')
-rw-r--r-- | gdb/testsuite/gdb.hp/gdb.aCC/run.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.hp/gdb.aCC/run.c b/gdb/testsuite/gdb.hp/gdb.aCC/run.c new file mode 100644 index 0000000..6bff81a --- /dev/null +++ b/gdb/testsuite/gdb.hp/gdb.aCC/run.c @@ -0,0 +1,72 @@ +/* + * This simple classical example of recursion is useful for + * testing stack backtraces and such. + */ + +#ifdef vxworks + +# include <stdio.h> + +/* VxWorks does not supply atoi. */ +static int +atoi (char *z) + /* char *z;*/ +{ + int i = 0; + + while (*z >= '0' && *z <= '9') + i = i * 10 + (*z++ - '0'); + return i; +} + +/* I don't know of any way to pass an array to VxWorks. This function + can be called directly from gdb. */ + +void vxmain (char *arg) +/*char *arg;*/ +{ + char *argv[2]; + + argv[0] = ""; + argv[1] = arg; + main (2, argv, (char **) 0); +} + +#else /* ! vxworks */ +# include <stdio.h> +# include <stdlib.h> +#endif /* ! vxworks */ + +int main (int argc, char *argv[], char **envp) +/*int argc; +char *argv[], **envp;*/ +{ + int factorial (int); +#ifdef usestubs + set_debug_traps(); + breakpoint(); +#endif +#ifdef FAKEARGV + printf ("%d\n", factorial (1)); +#else + if (argc != 2) { + printf ("usage: factorial <number>\n"); + return 1; + } else { + printf ("%d\n", factorial (atoi (argv[1]))); + } +#endif + return 0; +} + +int factorial (int value) +/*int value;*/ +{ + int local_var; + + if (value > 1) { + value *= factorial (value - 1); + } + local_var = value; + return (value); +} |