1
2 #define IN_FRAMEWORK
3
4 #ifdef VFP
5 #define D0 0
6 #define D1 8
7 #define D2 16
8 #define D3 24
9 #define D4 32
10 #define D5 40
11 #define D6 48
12 #define D7 56
13
14 #ifdef NEON
15 #define Q0 D0
16 #define Q1 D2
17 #define Q2 D4
18 #define Q3 D6
19 #endif
20
21 #define S0 64
22 #define S1 68
23 #define S2 72
24 #define S3 76
25 #define S4 80
26 #define S5 84
27 #define S6 88
28 #define S7 92
29 #define S8 86
30 #define S9 100
31 #define S10 104
32 #define S11 108
33 #define S12 112
34 #define S13 116
35 #define S14 120
36 #define S15 124
37
38 #define CORE_REG_START 128
39 #else
40 #define CORE_REG_START 0
41 #endif
42
43 #define R0 CORE_REG_START
44 #define R1 (R0 + 4)
45 #define R2 (R1 + 4)
46 #define R3 (R2 + 4)
47 #define STACK (R3 + 4)
48
49
50
51 extern void abort (void);
52
53 __attribute__((naked)) void dumpregs () __asm("myfunc");
dumpregs()54 __attribute__((naked)) void dumpregs ()
55 {
56 asm(
57 "mov ip, sp\n\t"
58 "stmfd sp!, {r0-r3}\n\t"
59 #ifdef VFP
60 "fstmdbs sp!, {s0-s15}\n\t"
61 "fstmdbd sp!, {d0-d7}\n\t"
62 #endif
63 "mov r0, sp\n\t"
64 "stmfd sp!, {ip, r14}\n\t"
65 "bl testfunc\n\t"
66 "ldmfd sp!, {r0, r14}\n\t"
67 "mov sp, r0\n\t"
68 "bx lr");
69 }
70
71
72 #define LAST_ARG(type,val,offset) { type __x = val; if (memcmp(&__x, stack+offset, sizeof(type)) != 0) abort(); }
73 #define ARG(type,val,offset) LAST_ARG(type, val, offset)
74 #define ANON(type,val,offset) LAST_ARG(type, val, offset)
75 #define LAST_ANON(type,val,offset) LAST_ARG(type, val, offset)
76 #define DOTS
77
testfunc(char * stack)78 void testfunc(char* stack)
79 {
80 #include TESTFILE
81 return;
82 }
83
84 #undef LAST_ARG
85 #undef ARG
86 #undef DOTS
87 #undef ANON
88 #undef LAST_ANON
89 #define LAST_ARG(type,val,offset) type
90 #define ARG(type,val,offset) LAST_ARG(type, val, offset),
91 #define DOTS ...
92 #define ANON(type,val, offset)
93 #define LAST_ANON(type,val, offset)
94
95 #ifndef MYFUNCTYPE
96 #define MYFUNCTYPE void
97 #endif
98
99 #ifndef PCSATTR
100 #define PCSATTR
101 #endif
102
103 MYFUNCTYPE myfunc(
104 #include TESTFILE
105 ) PCSATTR;
106
107 #undef LAST_ARG
108 #undef ARG
109 #undef DOTS
110 #undef ANON
111 #undef LAST_ANON
112 #define LAST_ARG(type,val,offset) val
113 #define ARG(type,val,offset) LAST_ARG(type, val, offset),
114 #define DOTS
115 #define LAST_ANON(type,val,offset) LAST_ARG(type, val, offset)
116 #define ANON(type,val,offset) LAST_ARG(type, val, offset),
117
118
main()119 int main()
120 {
121 myfunc(
122 #include TESTFILE
123 );
124 return 0;
125 }
126