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