xref: /openbsd-src/gnu/usr.bin/binutils/gdb/testsuite/gdb.base/run.c (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
1e93f7393Sniklas /*
2e93f7393Sniklas  *	This simple classical example of recursion is useful for
3e93f7393Sniklas  *	testing stack backtraces and such.
4e93f7393Sniklas  */
5e93f7393Sniklas 
6e93f7393Sniklas #ifdef vxworks
7e93f7393Sniklas 
8e93f7393Sniklas #  include <stdio.h>
9e93f7393Sniklas 
10e93f7393Sniklas /* VxWorks does not supply atoi.  */
11e93f7393Sniklas static int
atoi(z)12e93f7393Sniklas atoi (z)
13e93f7393Sniklas      char *z;
14e93f7393Sniklas {
15e93f7393Sniklas   int i = 0;
16e93f7393Sniklas 
17e93f7393Sniklas   while (*z >= '0' && *z <= '9')
18e93f7393Sniklas     i = i * 10 + (*z++ - '0');
19e93f7393Sniklas   return i;
20e93f7393Sniklas }
21e93f7393Sniklas 
22e93f7393Sniklas /* I don't know of any way to pass an array to VxWorks.  This function
23e93f7393Sniklas    can be called directly from gdb.  */
24e93f7393Sniklas 
vxmain(arg)25e93f7393Sniklas vxmain (arg)
26e93f7393Sniklas char *arg;
27e93f7393Sniklas {
28e93f7393Sniklas   char *argv[2];
29e93f7393Sniklas 
30e93f7393Sniklas   argv[0] = "";
31e93f7393Sniklas   argv[1] = arg;
32e93f7393Sniklas   main (2, argv, (char **) 0);
33e93f7393Sniklas }
34e93f7393Sniklas 
35e93f7393Sniklas #else /* ! vxworks */
36e93f7393Sniklas #  include <stdio.h>
37*b725ae77Skettenis #  include <stdlib.h>
38e93f7393Sniklas #endif /* ! vxworks */
39e93f7393Sniklas 
40*b725ae77Skettenis #ifdef PROTOTYPES
41*b725ae77Skettenis int factorial (int);
42*b725ae77Skettenis 
43*b725ae77Skettenis int
main(int argc,char ** argv,char ** envp)44*b725ae77Skettenis main (int argc, char **argv, char **envp)
45*b725ae77Skettenis #else
46*b725ae77Skettenis int
47e93f7393Sniklas main (argc, argv, envp)
48e93f7393Sniklas int argc;
49e93f7393Sniklas char *argv[], **envp;
50*b725ae77Skettenis #endif
51e93f7393Sniklas {
52e93f7393Sniklas #ifdef usestubs
53e93f7393Sniklas     set_debug_traps();
54e93f7393Sniklas     breakpoint();
55e93f7393Sniklas #endif
56*b725ae77Skettenis #ifdef FAKEARGV
57*b725ae77Skettenis     printf ("%d\n", factorial (1));
58*b725ae77Skettenis #else
59e93f7393Sniklas     if (argc != 2) {
60e93f7393Sniklas 	printf ("usage:  factorial <number>\n");
61e93f7393Sniklas 	return 1;
62e93f7393Sniklas     } else {
63e93f7393Sniklas 	printf ("%d\n", factorial (atoi (argv[1])));
64e93f7393Sniklas     }
65*b725ae77Skettenis #endif
66e93f7393Sniklas     return 0;
67e93f7393Sniklas }
68e93f7393Sniklas 
69*b725ae77Skettenis #ifdef PROTOTYPES
factorial(int value)70*b725ae77Skettenis int factorial (int value)
71*b725ae77Skettenis #else
72*b725ae77Skettenis int factorial (value) int value;
73*b725ae77Skettenis #endif
74e93f7393Sniklas {
75*b725ae77Skettenis     int  local_var;
76*b725ae77Skettenis 
77e93f7393Sniklas     if (value > 1) {
78e93f7393Sniklas 	value *= factorial (value - 1);
79e93f7393Sniklas     }
80*b725ae77Skettenis     local_var = value;
81e93f7393Sniklas     return (value);
82e93f7393Sniklas }
83