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