Mercurial > hg > CbC > old > device
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 } |