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. */ 28 static int 29 atoi (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 42 vxmain (arg) 43 char *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 58 extern int marker1 (void); 59 extern int marker2 (int a); 60 extern void marker3 (char *a, char *b); 61 extern void marker4 (long d); 62 #else 63 extern int marker1 (); 64 extern int marker2 (); 65 extern void marker3 (); 66 extern 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 75 int factorial(int); 76 77 int 78 main (int argc, char **argv, char **envp) 79 #else 80 int 81 main (argc, argv, envp) 82 int argc; 83 char *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 105 int factorial (int value) 106 #else 107 int factorial (value) 108 int 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 118 int multi_line_if_conditional (int a, int b, int c) 119 #else 120 int 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 133 int multi_line_while_conditional (int a, int b, int c) 134 #else 135 int 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