Mercurial > hg > CbC > CbC_gcc
annotate CbC-examples/code_segment_pointer_check/code_segment_pointer_check.cbc @ 27:f9b1a53df341
implemented indirect sibcall for ppc.
author | kent@teto.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Tue, 10 Nov 2009 16:34:29 +0900 |
parents | |
children |
rev | line source |
---|---|
27
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
1 #include<stdio.h> |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
2 #include<stdlib.h> |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
3 #define dprint(f, args...) \ |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
4 printf("in %s env=%p: "f, __FUNCTION__, __builtin_frame_address(0), ## args) |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
5 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
6 /* |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
7 * コードセグメント間の遷移で |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
8 * |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
9 * |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
10 * |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
11 */ |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
12 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
13 __code schedule (); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
14 __code cs0a (); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
15 __code cs1a (int a); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
16 __code cs2a (int a, double b); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
17 __code cs3a (int a, double b, int c); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
18 __code cs4a (int a, double b, int c, float d); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
19 __code cs0b (); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
20 __code cs1b (int a); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
21 __code cs2b (int a, double b); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
22 __code cs3b (int a, double b, int c); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
23 __code cs4b (int a, double b, int c, float d); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
24 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
25 /* defined in file code_segment_pointer_check.cbc at offset 1649 */ |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
26 int main (); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
27 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
28 __code end(int a) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
29 dprint("exit with code %d\n",a); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
30 exit(a); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
31 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
32 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
33 __code (*cs0) (); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
34 __code (*cs1) (int); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
35 __code (*cs2) (int, double); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
36 __code (*cs3) (int, double, int); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
37 __code (*cs4) (int, double, int, float); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
38 int i=0; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
39 __code schedule() { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
40 dprint("i=%d\n",i); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
41 if ( i>=100 ) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
42 goto end(0); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
43 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
44 switch (i++%5) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
45 case 0: |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
46 goto cs0(); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
47 case 1: |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
48 goto cs1(i); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
49 case 2: |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
50 goto cs2(i, i*1.3); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
51 case 3: |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
52 goto cs3(i, i*1.3, 20*i); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
53 case 4: |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
54 goto cs4(i, i*1.3, 20*i, i*0.8); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
55 default: |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
56 exit(0); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
57 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
58 dprint("code unreachable!\n"); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
59 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
60 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
61 __code cs0a() { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
62 dprint("no args\n"); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
63 cs0 = cs0b; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
64 goto schedule(); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
65 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
66 __code cs1a(int a) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
67 dprint("int a=%d\n", a); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
68 cs1 = cs1b; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
69 goto schedule(); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
70 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
71 __code cs2a(int a, double b) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
72 dprint("int a=%d, double b=%lf\n", a, b); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
73 cs2 = cs2b; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
74 goto schedule(); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
75 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
76 __code cs3a(int a, double b, int c) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
77 dprint("int a=%d, double b=%lf, int c=%d\n", a, b, c); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
78 cs3 = cs3b; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
79 goto schedule(); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
80 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
81 __code cs4a(int a, double b, int c, float d) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
82 dprint("int a=%d, double b=%lf, int c=%d, float d=%f\n", a, b, c, d); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
83 cs4 = cs4b; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
84 goto schedule(); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
85 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
86 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
87 __code cs0b() { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
88 dprint("no args\n"); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
89 cs0 = cs0a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
90 goto schedule(); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
91 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
92 __code cs1b(int a) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
93 dprint("int a=%d\n", a); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
94 cs1 = cs1a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
95 goto schedule(); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
96 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
97 __code cs2b(int a, double b) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
98 dprint("int a=%d, double b=%lf\n", a, b); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
99 cs2 = cs2a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
100 goto schedule(); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
101 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
102 __code cs3b(int a, double b, int c) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
103 dprint("int a=%d, double b=%lf, int c=%d\n", a, b, c); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
104 cs3 = cs3a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
105 goto schedule(); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
106 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
107 __code cs4b(int a, double b, int c, float d) { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
108 dprint("int a=%d, double b=%lf, int c=%d, float d=%f\n", a, b, c, d); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
109 cs4 = cs4a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
110 goto schedule(); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
111 } |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
112 |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
113 int main() { |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
114 cs0 = cs0a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
115 cs1 = cs1a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
116 cs2 = cs2a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
117 cs3 = cs3a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
118 cs4 = cs4a; |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
119 goto schedule(); |
f9b1a53df341
implemented indirect sibcall for ppc.
kent@teto.cr.ie.u-ryukyu.ac.jp
parents:
diff
changeset
|
120 } |