comparison test/stackframe.c @ 667:dbfbeb05210c before-ia32-function

*** empty log message ***
author kono
date Tue, 01 May 2007 13:26:42 +0900
parents
children 1530b1a636ac
comparison
equal deleted inserted replaced
666:7c42cf329666 667:dbfbeb05210c
1 extern int printf(const char *,...);
2 // extern void *alloca(int);
3
4 #define A0 0xa0a0a0a0
5 #define A1 0xa1a1a1a1
6 #define A2 0xa2a2a2a2
7 #define A3 0xa3a3a3a3
8 #define A4 0xa4a4a4a4
9
10 #define L0 0xb0b0b0b0
11 #define L1 0xb1b1b1b1
12 #define L2 0xb2b2b2b2
13 #define L3 0xb3b3b3b3
14 #define L4 0xb4b4b4b4
15
16 void *ret;
17
18 void
19 frame(int a0,int a1,int a2)
20 {
21 int l0 = L0;
22 int *top = (int *)__builtin_alloca(16);
23 int *p;
24 int i = 0;
25 int l1 = L1;
26
27 *top = L2;
28 for(p = top;p<top+0x100; ) {
29 if (*p==(int)ret) {
30 printf("%04x: ret address\n",i);
31 } else if (*p==A0) {
32 printf("%04x: caller arg 1\n",i);
33 } else if (*p==A2) {
34 printf("%04x: caller arg last\n",i);
35 } else if (*p==L0) {
36 printf("%04x: local var top\n",i);
37 } else if (*p==L1) {
38 printf("%04x: local var end\n",i);
39 } else if (*p==L2) {
40 printf("%04x: stack top (alloca)\n",i);
41 }
42 i+= sizeof(int);
43 p++;
44 }
45 }
46
47
48 int
49 main()
50 {
51 ret = &&label;
52 frame(A0,A1,A2);
53 label:
54 return 0;
55 }