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 51extern void abort (void); 52extern int memcmp (const void *s1, const void *s2, __SIZE_TYPE__ n); 53 54__attribute__((naked)) void dumpregs () __asm("myfunc"); 55__attribute__((naked)) void dumpregs () 56{ 57 asm( 58 "mov ip, sp\n\t" 59 "stmfd sp!, {r0-r3}\n\t" 60#ifdef VFP 61 "fstmdbs sp!, {s0-s15}\n\t" 62 "fstmdbd sp!, {d0-d7}\n\t" 63#endif 64 "mov r0, sp\n\t" 65 "stmfd sp!, {ip, r14}\n\t" 66 "bl testfunc\n\t" 67 "ldmfd sp!, {r0, r14}\n\t" 68 "mov sp, r0\n\t" 69 "bx lr"); 70} 71 72 73#define LAST_ARG(type,val,offset) { type __x = val; if (memcmp(&__x, stack+offset, sizeof(type)) != 0) abort(); } 74#define ARG(type,val,offset) LAST_ARG(type, val, offset) 75#define ANON(type,val,offset) LAST_ARG(type, val, offset) 76#define LAST_ANON(type,val,offset) LAST_ARG(type, val, offset) 77#define DOTS 78 79void testfunc(char* stack) 80{ 81#include TESTFILE 82 return; 83} 84 85#undef LAST_ARG 86#undef ARG 87#undef DOTS 88#undef ANON 89#undef LAST_ANON 90#define LAST_ARG(type,val,offset) type 91#define ARG(type,val,offset) LAST_ARG(type, val, offset), 92#define DOTS ... 93#define ANON(type,val, offset) 94#define LAST_ANON(type,val, offset) 95 96#ifndef MYFUNCTYPE 97#define MYFUNCTYPE void 98#endif 99 100#ifndef PCSATTR 101#define PCSATTR 102#endif 103 104MYFUNCTYPE myfunc( 105#include TESTFILE 106) PCSATTR; 107 108#undef LAST_ARG 109#undef ARG 110#undef DOTS 111#undef ANON 112#undef LAST_ANON 113#define LAST_ARG(type,val,offset) val 114#define ARG(type,val,offset) LAST_ARG(type, val, offset), 115#define DOTS 116#define LAST_ANON(type,val,offset) LAST_ARG(type, val, offset) 117#define ANON(type,val,offset) LAST_ARG(type, val, offset), 118 119 120int main() 121{ 122 myfunc( 123#include TESTFILE 124); 125 return 0; 126} 127