2007-10-19 Marek Habersack <mhabersack@novell.com>
[mono.git] / mono / mini / mini-amd64.h
index afebbecfc1b07907d6a0f6ea2ed0c18a4f338304..a328055b28268d801a064bcb219afea7dcfdcc72 100644 (file)
@@ -143,6 +143,7 @@ typedef struct MonoCompileArch {
        gint32 stack_alloc_size;
        gboolean omit_fp, omit_fp_computed;
        gpointer cinfo;
+       gint32 async_point_count;
 } MonoCompileArch;
 
 typedef struct {
@@ -182,11 +183,17 @@ typedef struct {
 
 #else
 
+/* 
+ * __builtin_frame_address () is broken on some older gcc versions in the presence of
+ * frame pointer elimination, see bug #82095.
+ */
 #define MONO_INIT_CONTEXT_FROM_FUNC(ctx,start_func) do {       \
+        int tmp; \
+        guint64 stackptr = (guint64)&tmp; \
                mono_arch_flush_register_windows ();    \
                MONO_CONTEXT_SET_IP ((ctx), (start_func));      \
-               MONO_CONTEXT_SET_BP ((ctx), __builtin_frame_address (0));       \
-               MONO_CONTEXT_SET_SP ((ctx), __builtin_frame_address (0));       \
+               MONO_CONTEXT_SET_BP ((ctx), stackptr);  \
+               MONO_CONTEXT_SET_SP ((ctx), stackptr);  \
        } while (0)
 
 #endif
@@ -257,11 +264,15 @@ typedef struct {
 #define MONO_ARCH_HAVE_CREATE_VARS 1
 #define MONO_ARCH_HAVE_IMT 1
 #define MONO_ARCH_IMT_REG AMD64_R11
+#define MONO_ARCH_COMMON_VTABLE_TRAMPOLINE 1
 
 #define MONO_ARCH_AOT_SUPPORTED 1
 
 gboolean
-mono_amd64_is_sse2 (void);
+mono_amd64_is_sse2 (void) MONO_INTERNAL;
+
+void 
+mono_amd64_patch (unsigned char* code, gpointer target) MONO_INTERNAL;
 
 #endif /* __MONO_MINI_AMD64_H__ */