xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/testsuite/gdb.base/step-test.c (revision a5a4af3bd380a7b58b758d9b311cef9f7c34aeb4)
1*a5a4af3bSchristos #include <stdlib.h>
2*a5a4af3bSchristos #include <string.h>
3*a5a4af3bSchristos 
4*a5a4af3bSchristos /* Test various kinds of stepping.
5*a5a4af3bSchristos */
6*a5a4af3bSchristos int myglob = 0;
7*a5a4af3bSchristos 
callee()8*a5a4af3bSchristos int callee() {
9*a5a4af3bSchristos     myglob++; return 0;
10*a5a4af3bSchristos }
11*a5a4af3bSchristos 
12*a5a4af3bSchristos /* A structure which, we hope, will need to be passed using memcpy.  */
13*a5a4af3bSchristos struct rhomboidal {
14*a5a4af3bSchristos   int rather_large[100];
15*a5a4af3bSchristos };
16*a5a4af3bSchristos 
17*a5a4af3bSchristos void
large_struct_by_value(struct rhomboidal r)18*a5a4af3bSchristos large_struct_by_value (struct rhomboidal r)
19*a5a4af3bSchristos {
20*a5a4af3bSchristos   myglob += r.rather_large[42]; /* step-test.exp: arrive here 1 */
21*a5a4af3bSchristos }
22*a5a4af3bSchristos 
main()23*a5a4af3bSchristos int main () {
24*a5a4af3bSchristos    int w,x,y,z;
25*a5a4af3bSchristos    int a[10], b[10];
26*a5a4af3bSchristos 
27*a5a4af3bSchristos    /* Test "next" and "step" */
28*a5a4af3bSchristos    w = 0;
29*a5a4af3bSchristos    x = 1;
30*a5a4af3bSchristos    y = 2;
31*a5a4af3bSchristos    z = 3;
32*a5a4af3bSchristos    w = w + 2;
33*a5a4af3bSchristos    x = x + 3;
34*a5a4af3bSchristos    y = y + 4;
35*a5a4af3bSchristos    z = z + 5;
36*a5a4af3bSchristos 
37*a5a4af3bSchristos    /* Test that "next" goes over a call */
38*a5a4af3bSchristos    callee(); /* OVER */
39*a5a4af3bSchristos 
40*a5a4af3bSchristos    /* Test that "step" doesn't */
41*a5a4af3bSchristos    callee(); /* INTO */
42*a5a4af3bSchristos 
43*a5a4af3bSchristos    /* Test "stepi" */
44*a5a4af3bSchristos    a[5] = a[3] - a[4];
45*a5a4af3bSchristos    callee(); /* STEPI */
46*a5a4af3bSchristos 
47*a5a4af3bSchristos    /* Test "nexti" */
48*a5a4af3bSchristos    callee(); /* NEXTI */
49*a5a4af3bSchristos 
50*a5a4af3bSchristos    y = w + z;
51*a5a4af3bSchristos 
52*a5a4af3bSchristos    {
53*a5a4af3bSchristos      struct rhomboidal r;
54*a5a4af3bSchristos      memset (r.rather_large, 0, sizeof (r.rather_large));
55*a5a4af3bSchristos      r.rather_large[42] = 10;
56*a5a4af3bSchristos      large_struct_by_value (r);  /* step-test.exp: large struct by value */
57*a5a4af3bSchristos    }
58*a5a4af3bSchristos 
59*a5a4af3bSchristos    exit (0);
60*a5a4af3bSchristos }
61*a5a4af3bSchristos 
62