xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/testsuite/gdb.trace/actions.c (revision cc576e1d8e4f4078fd4e81238abca9fca216f6ec)
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