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