xref: /openbsd-src/gnu/usr.bin/binutils/gdb/testsuite/gdb.base/break.c (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
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