1 /* This testcase is part of GDB, the GNU debugger. 2 3 Copyright 1998-2015 Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 18 /* 19 * Test program for trace action commands 20 */ 21 22 #include <string.h> 23 24 static char gdb_char_test; 25 static short gdb_short_test; 26 static long gdb_long_test; 27 static char gdb_arr_test[25]; 28 static struct GDB_STRUCT_TEST 29 { 30 char c; 31 short s; 32 long l; 33 int bfield : 11; /* collect bitfield */ 34 char arr[25]; 35 struct GDB_STRUCT_TEST *next; 36 } gdb_struct1_test, gdb_struct2_test, *gdb_structp_test, **gdb_structpp_test; 37 38 static union GDB_UNION_TEST 39 { 40 char c; 41 short s; 42 long l; 43 int bfield : 11; /* collect bitfield */ 44 char arr[4]; 45 union GDB_UNION_TEST *next; 46 } gdb_union1_test; 47 48 void gdb_recursion_test (int, int, int, int, int, int, int); 49 50 void gdb_recursion_test (int depth, 51 int q1, 52 int q2, 53 int q3, 54 int q4, 55 int q5, 56 int q6) 57 { /* gdb_recursion_test line 0 */ 58 int q = q1; /* gdbtestline 1 */ 59 60 q1 = q2; /* gdbtestline 2 */ 61 q2 = q3; /* gdbtestline 3 */ 62 q3 = q4; /* gdbtestline 4 */ 63 q4 = q5; /* gdbtestline 5 */ 64 q5 = q6; /* gdbtestline 6 */ 65 q6 = q; /* gdbtestline 7 */ 66 if (depth--) /* gdbtestline 8 */ 67 gdb_recursion_test (depth, q1, q2, q3, q4, q5, q6); /* gdbtestline 9 */ 68 } 69 70 71 unsigned long gdb_c_test( unsigned long *parm ) 72 73 { 74 char *p = "gdb_c_test"; 75 char *ridiculously_long_variable_name_with_equally_long_string_assignment; 76 register long local_reg = 7; 77 static unsigned long local_static, local_static_sizeof; 78 long local_long; 79 unsigned long *stack_ptr; 80 unsigned long end_of_stack; 81 82 ridiculously_long_variable_name_with_equally_long_string_assignment = 83 "ridiculously long variable name with equally long string assignment"; 84 local_static = 9; 85 local_static_sizeof = sizeof (struct GDB_STRUCT_TEST); 86 local_long = local_reg + 1; 87 stack_ptr = (unsigned long *) &local_long; 88 end_of_stack = 89 (unsigned long) &stack_ptr + sizeof(stack_ptr) + sizeof(end_of_stack) - 1; 90 91 gdb_char_test = gdb_struct1_test.c = (char) ((long) parm[1] & 0xff); 92 gdb_short_test = gdb_struct1_test.s = (short) ((long) parm[2] & 0xffff); 93 gdb_long_test = gdb_struct1_test.l = (long) ((long) parm[3] & 0xffffffff); 94 gdb_union1_test.l = (long) parm[4]; 95 gdb_arr_test[0] = gdb_struct1_test.arr[0] = (char) ((long) parm[1] & 0xff); 96 gdb_arr_test[1] = gdb_struct1_test.arr[1] = (char) ((long) parm[2] & 0xff); 97 gdb_arr_test[2] = gdb_struct1_test.arr[2] = (char) ((long) parm[3] & 0xff); 98 gdb_arr_test[3] = gdb_struct1_test.arr[3] = (char) ((long) parm[4] & 0xff); 99 gdb_arr_test[4] = gdb_struct1_test.arr[4] = (char) ((long) parm[5] & 0xff); 100 gdb_arr_test[5] = gdb_struct1_test.arr[5] = (char) ((long) parm[6] & 0xff); 101 gdb_struct1_test.bfield = 144; 102 gdb_struct1_test.next = &gdb_struct2_test; 103 gdb_structp_test = &gdb_struct1_test; 104 gdb_structpp_test = &gdb_structp_test; 105 106 gdb_recursion_test (3, (long) parm[1], (long) parm[2], (long) parm[3], 107 (long) parm[4], (long) parm[5], (long) parm[6]); 108 109 gdb_char_test = gdb_short_test = gdb_long_test = 0; 110 gdb_structp_test = (void *) 0; 111 gdb_structpp_test = (void *) 0; 112 memset ((char *) &gdb_struct1_test, 0, sizeof (gdb_struct1_test)); 113 memset ((char *) &gdb_struct2_test, 0, sizeof (gdb_struct2_test)); 114 local_static_sizeof = 0; 115 local_static = 0; 116 return ( (unsigned long) 0 ); 117 } 118 119 void gdb_asm_test (void) 120 { 121 } 122 123 static void begin () /* called before anything else */ 124 { 125 } 126 127 static void end () /* called after everything else */ 128 { 129 } 130 131 int 132 main (argc, argv, envp) 133 int argc; 134 char *argv[], **envp; 135 { 136 int i; 137 unsigned long myparms[10]; 138 139 begin (); 140 for (i = 0; i < sizeof (myparms) / sizeof (myparms[0]); i++) 141 myparms[i] = i; 142 143 gdb_c_test (&myparms[0]); 144 145 end (); 146 return 0; 147 } 148 149