X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=mono%2Fmini%2Fmini-arm.h;h=589419e8f83c40e98fcf0495bbe6fc084ff69c17;hb=cdf08abc9dca1fd248f242477601ffc66660327b;hp=f015f903008c6bd7b238ef9694ca78bbe4dc81e1;hpb=42399858d76da2ddcbc91d577df5bee3e729dce9;p=mono.git diff --git a/mono/mini/mini-arm.h b/mono/mini/mini-arm.h index f015f903008..589419e8f83 100644 --- a/mono/mini/mini-arm.h +++ b/mono/mini/mini-arm.h @@ -4,10 +4,32 @@ #include #include -#if defined(ARM_FPU_NONE) || defined(ARM_FPU_VFP) || defined(__ARM_EABI__) +#if defined(ARM_FPU_NONE) || (defined(__ARM_EABI__) && !defined(ARM_FPU_VFP)) #define MONO_ARCH_SOFT_FLOAT 1 #endif +#if defined(__ARM_EABI__) +#if G_BYTE_ORDER == G_LITTLE_ENDIAN +#define ARM_ARCHITECTURE "armel" +#else +#define ARM_ARCHITECTURE "armeb" +#endif +#else +#define ARM_ARCHITECTURE "arm" +#endif + +#if defined(ARM_FPU_FPA) +#define ARM_FP_MODEL "fpa" +#elif defined(ARM_FPU_VFP) +#define ARM_FP_MODEL "vfp" +#elif defined(ARM_FPU_NONE) +#define ARM_FP_MODEL "soft-float" +#else +#error "At least one of ARM_FPU_NONE or ARM_FPU_FPA or ARM_FPU_VFP must be defined." +#endif + +#define MONO_ARCH_ARCHITECTURE ARM_ARCHITECTURE "," ARM_FP_MODEL + #define MONO_ARCH_CPU_SPEC arm_cpu_desc #if G_BYTE_ORDER == G_LITTLE_ENDIAN @@ -32,7 +54,12 @@ #define MONO_ARCH_CALLEE_REGS ((1<eip = (int)ip; } while (0); #define MONO_CONTEXT_SET_BP(ctx,bp) do { (ctx)->ebp = (int)bp; } while (0); @@ -136,5 +174,21 @@ typedef struct MonoCompileArch { MONO_CONTEXT_SET_IP ((ctx), (func)); \ } while (0) +#if __APPLE__ + #define UCONTEXT_REG_PC(ctx) ((ctx)->uc_mcontext->__ss.__pc) + #define UCONTEXT_REG_SP(ctx) ((ctx)->uc_mcontext->__ss.__sp) + #define UCONTEXT_REG_R4(ctx) ((ctx)->uc_mcontext->__ss.__r[4]) +#else + #define UCONTEXT_REG_PC(ctx) ((ctx)->sig_ctx.arm_pc) + #define UCONTEXT_REG_SP(ctx) ((ctx)->sig_ctx.arm_sp) + #define UCONTEXT_REG_R4(ctx) ((ctx)->sig_ctx.arm_r4) +#endif + +void +mono_arm_throw_exception (MonoObject *exc, unsigned long eip, unsigned long esp, gulong *int_regs, gdouble *fp_regs); + +void +mono_arm_throw_exception_by_token (guint32 type_token, unsigned long eip, unsigned long esp, gulong *int_regs, gdouble *fp_regs); + #endif /* __MONO_MINI_ARM_H__ */