1/*
2 * Test program for trace action commands
3 */
4
5static char   gdb_char_test;
6static short  gdb_short_test;
7static long   gdb_long_test;
8static char   gdb_arr_test[25];
9static struct GDB_STRUCT_TEST
10{
11  char   c;
12  short  s;
13  long   l;
14  int    bfield : 11;	/* collect bitfield */
15  char   arr[25];
16  struct GDB_STRUCT_TEST *next;
17} gdb_struct1_test, gdb_struct2_test, *gdb_structp_test, **gdb_structpp_test;
18
19static union GDB_UNION_TEST
20{
21  char   c;
22  short  s;
23  long   l;
24  int    bfield : 11;	/* collect bitfield */
25  char   arr[4];
26  union GDB_UNION_TEST *next;
27} gdb_union1_test;
28
29void gdb_recursion_test (int, int, int, int,  int,  int,  int);
30
31void gdb_recursion_test (int depth,
32			 int q1,
33			 int q2,
34			 int q3,
35			 int q4,
36			 int q5,
37			 int q6)
38{	/* gdb_recursion_test line 0 */
39  int q = q1;						/* gdbtestline 1 */
40
41  q1 = q2;						/* gdbtestline 2 */
42  q2 = q3;						/* gdbtestline 3 */
43  q3 = q4;						/* gdbtestline 4 */
44  q4 = q5;						/* gdbtestline 5 */
45  q5 = q6;						/* gdbtestline 6 */
46  q6 = q;						/* gdbtestline 7 */
47  if (depth--)						/* gdbtestline 8 */
48    gdb_recursion_test (depth, q1, q2, q3, q4, q5, q6);	/* gdbtestline 9 */
49}
50
51
52unsigned long   gdb_c_test( unsigned long *parm )
53
54{
55   char *p = "gdb_c_test";
56   char *ridiculously_long_variable_name_with_equally_long_string_assignment;
57   register long local_reg = 7;
58   static unsigned long local_static, local_static_sizeof;
59   long local_long;
60   unsigned long *stack_ptr;
61   unsigned long end_of_stack;
62
63   ridiculously_long_variable_name_with_equally_long_string_assignment =
64     "ridiculously long variable name with equally long string assignment";
65   local_static = 9;
66   local_static_sizeof = sizeof (struct GDB_STRUCT_TEST);
67   local_long = local_reg + 1;
68   stack_ptr  = (unsigned long *) &local_long;
69   end_of_stack =
70     (unsigned long) &stack_ptr + sizeof(stack_ptr) + sizeof(end_of_stack) - 1;
71
72   gdb_char_test   = gdb_struct1_test.c = (char)   ((long) parm[1] & 0xff);
73   gdb_short_test  = gdb_struct1_test.s = (short)  ((long) parm[2] & 0xffff);
74   gdb_long_test   = gdb_struct1_test.l = (long)   ((long) parm[3] & 0xffffffff);
75   gdb_union1_test.l = (long) parm[4];
76   gdb_arr_test[0] = gdb_struct1_test.arr[0] = (char) ((long) parm[1] & 0xff);
77   gdb_arr_test[1] = gdb_struct1_test.arr[1] = (char) ((long) parm[2] & 0xff);
78   gdb_arr_test[2] = gdb_struct1_test.arr[2] = (char) ((long) parm[3] & 0xff);
79   gdb_arr_test[3] = gdb_struct1_test.arr[3] = (char) ((long) parm[4] & 0xff);
80   gdb_arr_test[4] = gdb_struct1_test.arr[4] = (char) ((long) parm[5] & 0xff);
81   gdb_arr_test[5] = gdb_struct1_test.arr[5] = (char) ((long) parm[6] & 0xff);
82   gdb_struct1_test.bfield = 144;
83   gdb_struct1_test.next = &gdb_struct2_test;
84   gdb_structp_test      = &gdb_struct1_test;
85   gdb_structpp_test     = &gdb_structp_test;
86
87   gdb_recursion_test (3, (long) parm[1], (long) parm[2], (long) parm[3],
88		       (long) parm[4], (long) parm[5], (long) parm[6]);
89
90   gdb_char_test = gdb_short_test = gdb_long_test = 0;
91   gdb_structp_test  = (void *) 0;
92   gdb_structpp_test = (void *) 0;
93   memset ((char *) &gdb_struct1_test, 0, sizeof (gdb_struct1_test));
94   memset ((char *) &gdb_struct2_test, 0, sizeof (gdb_struct2_test));
95   local_static_sizeof = 0;
96   local_static = 0;
97   return ( (unsigned long) 0 );
98}
99
100static void gdb_asm_test (void)
101{
102}
103
104static void begin ()	/* called before anything else */
105{
106}
107
108static void end ()	/* called after everything else */
109{
110}
111
112int
113main (argc, argv, envp)
114     int argc;
115     char *argv[], **envp;
116{
117  int i;
118  unsigned long myparms[10];
119
120#ifdef usestubs
121  set_debug_traps ();
122  breakpoint ();
123#endif
124
125  begin ();
126  for (i = 0; i < sizeof (myparms) / sizeof (myparms[0]); i++)
127    myparms[i] = i;
128
129  gdb_c_test (&myparms[0]);
130
131  end ();
132  return 0;
133}
134
135