Make pdb2mdb work with files in other directories.
[mono.git] / mono / mini / mini-ia64.h
index 203db54de44f0e144134ef84de3ee2fd253e5582..f2c1cda714e8db7d6e65a7835c011b5a8f8bdddd 100644 (file)
 
 /* Parameters used by the register allocator */
 
-#define MONO_ARCH_HAS_XP_LOCAL_REGALLOC
-
 /* r8..r11, r14..r29 */
-#define MONO_ARCH_CALLEE_REGS ((regmask_t)(0x700UL) | (regmask_t)(0x3fffc000UL))
+#define MONO_ARCH_CALLEE_REGS ((regmask_t)(0xf00UL) | (regmask_t)(0x3fffc000UL))
 
 /* f6..f15, f34..f127 */
 /* FIXME: Use the upper 64 bits as well */
 #define MONO_ARCH_SIGNAL_STACK_SIZE SIGSTKSZ
 
 struct MonoLMF {
-       guint64    ebp;
 };
 
 typedef struct MonoContext {
        unw_cursor_t cursor;
+       /* Whenever the ip in 'cursor' points to the ip where the exception happened */
+       /* This is true for the initial context for exceptions thrown from signal handlers */
+       gboolean precise_ip;
 } MonoContext;
 
 typedef struct MonoCompileArch {
@@ -86,8 +86,12 @@ mono_ia64_context_get_ip (MonoContext *ctx)
        err = unw_get_reg (&ctx->cursor, UNW_IA64_IP, &ip);
        g_assert (err == 0);
 
-       /* Subtrack 1 so ip points into the actual instruction */
-       return ip - 1;
+       if (ctx->precise_ip) {
+               return ip;
+       } else {
+               /* Subtrack 1 so ip points into the actual instruction */
+               return ip - 1;
+       }
 }
 
 static inline unw_word_t
@@ -132,7 +136,6 @@ mono_ia64_context_get_fp (MonoContext *ctx)
 }
 
 #define MONO_CONTEXT_SET_IP(ctx,eip) do { int err = unw_set_reg (&(ctx)->cursor, UNW_IA64_IP, (unw_word_t)(eip)); g_assert (err == 0); } while (0)
-#define MONO_CONTEXT_SET_BP(ctx,ebp) do { } while (0)
 #define MONO_CONTEXT_SET_SP(ctx,esp) do { int err = unw_set_reg (&(ctx)->cursor, UNW_IA64_SP, (unw_word_t)(esp)); g_assert (err == 0); } while (0)
 
 #define MONO_CONTEXT_GET_IP(ctx) ((gpointer)(mono_ia64_context_get_ip ((ctx))))
@@ -154,12 +157,14 @@ mono_ia64_context_get_fp (MonoContext *ctx)
 /* This is ia64 only */
 #define MONO_CONTEXT_SET_FUNC(ctx, func) MONO_CONTEXT_SET_IP ((ctx), ((gpointer*)(func))[0])
 
+#define MONO_ARCH_INIT_TOP_LMF_ENTRY(lmf)
+
 #define MONO_ARCH_CONTEXT_DEF unw_context_t unw_ctx;
 
 #define MONO_ARCH_USE_SIGACTION 1
 
 #ifdef HAVE_WORKING_SIGALTSTACK
-#define MONO_ARCH_SIGSEGV_ON_ALTSTACK
+/*#define MONO_ARCH_SIGSEGV_ON_ALTSTACK*/
 #endif
 
 unw_dyn_region_info_t* mono_ia64_create_unwind_region (Ia64CodegenState *code);
@@ -177,14 +182,12 @@ unw_dyn_region_info_t* mono_ia64_create_unwind_region (Ia64CodegenState *code);
 
 #define MONO_ARCH_HAVE_IS_INT_OVERFLOW 1
 
-#define MONO_ARCH_ENABLE_EMIT_STATE_OPT 1
 #define MONO_ARCH_HAVE_INVALIDATE_METHOD 1
-#define MONO_ARCH_HAVE_THROW_CORLIB_EXCEPTION 1
-#define MONO_ARCH_HAVE_PIC_AOT 1
-#define MONO_ARCH_HAVE_CREATE_TRAMPOLINE_FROM_TOKEN 1
-#define MONO_ARCH_HAVE_CREATE_SPECIFIC_TRAMPOLINE 1
 #define MONO_ARCH_HAVE_CREATE_DELEGATE_TRAMPOLINE 1
 #define MONO_ARCH_HAVE_SAVE_UNWIND_INFO 1
-#define MONO_ARCH_HAVE_CREATE_VARS 1
+#define MONO_ARCH_HAVE_ATOMIC_EXCHANGE 1
+#define MONO_ARCH_HAVE_IMT 1
+#define MONO_ARCH_HAVE_GENERALIZED_IMT_THUNK 1
+#define MONO_ARCH_THIS_AS_FIRST_ARG 1
 
 #endif /* __MONO_MINI_IA64_H__ */