1*b725ae77Skettenis /* This testcase is part of GDB, the GNU debugger.
2*b725ae77Skettenis
3*b725ae77Skettenis Copyright 1992, 1993, 1994, 1995, 1999, 2002, 2003 Free Software
4*b725ae77Skettenis Foundation, Inc.
5*b725ae77Skettenis
6*b725ae77Skettenis This program is free software; you can redistribute it and/or modify
7*b725ae77Skettenis it under the terms of the GNU General Public License as published by
8*b725ae77Skettenis the Free Software Foundation; either version 2 of the License, or
9*b725ae77Skettenis (at your option) any later version.
10*b725ae77Skettenis
11*b725ae77Skettenis This program is distributed in the hope that it will be useful,
12*b725ae77Skettenis but WITHOUT ANY WARRANTY; without even the implied warranty of
13*b725ae77Skettenis MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14*b725ae77Skettenis GNU General Public License for more details.
15*b725ae77Skettenis
16*b725ae77Skettenis You should have received a copy of the GNU General Public License
17*b725ae77Skettenis along with this program; if not, write to the Free Software
18*b725ae77Skettenis Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19*b725ae77Skettenis
20*b725ae77Skettenis Please email any bugs, comments, and/or additions to this file to:
21*b725ae77Skettenis bug-gdb@prep.ai.mit.edu */
22*b725ae77Skettenis
23e93f7393Sniklas #ifdef vxworks
24e93f7393Sniklas
25e93f7393Sniklas # include <stdio.h>
26e93f7393Sniklas
27e93f7393Sniklas /* VxWorks does not supply atoi. */
28e93f7393Sniklas static int
atoi(z)29e93f7393Sniklas atoi (z)
30e93f7393Sniklas char *z;
31e93f7393Sniklas {
32e93f7393Sniklas int i = 0;
33e93f7393Sniklas
34e93f7393Sniklas while (*z >= '0' && *z <= '9')
35e93f7393Sniklas i = i * 10 + (*z++ - '0');
36e93f7393Sniklas return i;
37e93f7393Sniklas }
38e93f7393Sniklas
39e93f7393Sniklas /* I don't know of any way to pass an array to VxWorks. This function
40e93f7393Sniklas can be called directly from gdb. */
41e93f7393Sniklas
vxmain(arg)42e93f7393Sniklas vxmain (arg)
43e93f7393Sniklas char *arg;
44e93f7393Sniklas {
45e93f7393Sniklas char *argv[2];
46e93f7393Sniklas
47e93f7393Sniklas argv[0] = "";
48e93f7393Sniklas argv[1] = arg;
49e93f7393Sniklas main (2, argv, (char **) 0);
50e93f7393Sniklas }
51e93f7393Sniklas
52e93f7393Sniklas #else /* ! vxworks */
53e93f7393Sniklas # include <stdio.h>
54*b725ae77Skettenis # include <stdlib.h>
55e93f7393Sniklas #endif /* ! vxworks */
56e93f7393Sniklas
57*b725ae77Skettenis #ifdef PROTOTYPES
58*b725ae77Skettenis extern int marker1 (void);
59*b725ae77Skettenis extern int marker2 (int a);
60*b725ae77Skettenis extern void marker3 (char *a, char *b);
61*b725ae77Skettenis extern void marker4 (long d);
62*b725ae77Skettenis #else
63*b725ae77Skettenis extern int marker1 ();
64*b725ae77Skettenis extern int marker2 ();
65*b725ae77Skettenis extern void marker3 ();
66*b725ae77Skettenis extern void marker4 ();
67*b725ae77Skettenis #endif
68e93f7393Sniklas
69e93f7393Sniklas /*
70e93f7393Sniklas * This simple classical example of recursion is useful for
71e93f7393Sniklas * testing stack backtraces and such.
72e93f7393Sniklas */
73e93f7393Sniklas
74*b725ae77Skettenis #ifdef PROTOTYPES
75*b725ae77Skettenis int factorial(int);
76*b725ae77Skettenis
77*b725ae77Skettenis int
main(int argc,char ** argv,char ** envp)78*b725ae77Skettenis main (int argc, char **argv, char **envp)
79*b725ae77Skettenis #else
80e93f7393Sniklas int
81e93f7393Sniklas main (argc, argv, envp)
82e93f7393Sniklas int argc;
83e93f7393Sniklas char *argv[], **envp;
84*b725ae77Skettenis #endif
85e93f7393Sniklas {
86e93f7393Sniklas #ifdef usestubs
87*b725ae77Skettenis set_debug_traps(); /* set breakpoint 5 here */
88e93f7393Sniklas breakpoint();
89e93f7393Sniklas #endif
90*b725ae77Skettenis if (argc == 12345) { /* an unlikely value < 2^16, in case uninited */ /* set breakpoint 6 here */
91e93f7393Sniklas fprintf (stderr, "usage: factorial <number>\n");
92e93f7393Sniklas return 1;
93e93f7393Sniklas }
94*b725ae77Skettenis printf ("%d\n", factorial (atoi ("6"))); /* set breakpoint 1 here */
95*b725ae77Skettenis /* set breakpoint 12 here */
96*b725ae77Skettenis marker1 (); /* set breakpoint 11 here */
97*b725ae77Skettenis marker2 (43); /* set breakpoint 20 here */
98*b725ae77Skettenis marker3 ("stack", "trace"); /* set breakpoint 21 here */
99e93f7393Sniklas marker4 (177601976L);
100*b725ae77Skettenis argc = (argc == 12345); /* This is silly, but we can step off of it */ /* set breakpoint 2 here */
101*b725ae77Skettenis return argc; /* set breakpoint 10 here */
102e93f7393Sniklas }
103e93f7393Sniklas
104*b725ae77Skettenis #ifdef PROTOTYPES
factorial(int value)105*b725ae77Skettenis int factorial (int value)
106*b725ae77Skettenis #else
107e93f7393Sniklas int factorial (value)
108e93f7393Sniklas int value;
109*b725ae77Skettenis #endif
110e93f7393Sniklas {
111*b725ae77Skettenis if (value > 1) { /* set breakpoint 7 here */
112e93f7393Sniklas value *= factorial (value - 1);
113e93f7393Sniklas }
114*b725ae77Skettenis return (value); /* set breakpoint 19 here */
115e93f7393Sniklas }
116e93f7393Sniklas
117*b725ae77Skettenis #ifdef PROTOTYPES
multi_line_if_conditional(int a,int b,int c)118*b725ae77Skettenis int multi_line_if_conditional (int a, int b, int c)
119*b725ae77Skettenis #else
120*b725ae77Skettenis int multi_line_if_conditional (a, b, c)
121*b725ae77Skettenis int a, b, c;
122*b725ae77Skettenis #endif
123*b725ae77Skettenis {
124*b725ae77Skettenis if (a /* set breakpoint 3 here */
125*b725ae77Skettenis && b
126*b725ae77Skettenis && c)
127*b725ae77Skettenis return 0;
128*b725ae77Skettenis else
129*b725ae77Skettenis return 1;
130*b725ae77Skettenis }
131*b725ae77Skettenis
132*b725ae77Skettenis #ifdef PROTOTYPES
multi_line_while_conditional(int a,int b,int c)133*b725ae77Skettenis int multi_line_while_conditional (int a, int b, int c)
134*b725ae77Skettenis #else
135*b725ae77Skettenis int multi_line_while_conditional (a, b, c)
136*b725ae77Skettenis int a, b, c;
137*b725ae77Skettenis #endif
138*b725ae77Skettenis {
139*b725ae77Skettenis while (a /* set breakpoint 4 here */
140*b725ae77Skettenis && b
141*b725ae77Skettenis && c)
142*b725ae77Skettenis {
143*b725ae77Skettenis a--, b--, c--;
144*b725ae77Skettenis }
145*b725ae77Skettenis return 0;
146*b725ae77Skettenis }
147