Merge branch 'master' of https://github.com/mono/mono into issue4328
[mono.git] / mono / utils / mono-stack-unwinding.h
index b0a8da5c587ec27bd413b64afd0af4f46cb5960b..21331fa1bd83e7069e7923ddba41348be6e984b6 100644 (file)
@@ -1,3 +1,7 @@
+/*
+ * Copyright 2008-2010 Novell, Inc.
+ * Copyright 2011 Xamarin Inc.
+ */
 #ifndef __MONO_MONO_STACK_UNWINDING_H__
 #define __MONO_MONO_STACK_UNWINDING_H__
 
@@ -21,7 +25,14 @@ typedef enum {
 typedef enum {
        MONO_UNWIND_NONE = 0x0,
        MONO_UNWIND_LOOKUP_IL_OFFSET = 0x1,
+       /* NOT signal safe */
        MONO_UNWIND_LOOKUP_ACTUAL_METHOD = 0x2,
+       /*
+        * Store the locations where caller-saved registers are saved on the stack in
+        * frame->reg_locations. The pointer is only valid during the call to the unwind
+        * callback.
+        */
+       MONO_UNWIND_REG_LOCATIONS = 0x4,
        MONO_UNWIND_DEFAULT = MONO_UNWIND_LOOKUP_ACTUAL_METHOD,
        MONO_UNWIND_SIGNAL_SAFE = MONO_UNWIND_NONE,
        MONO_UNWIND_LOOKUP_ALL = MONO_UNWIND_LOOKUP_IL_OFFSET | MONO_UNWIND_LOOKUP_ACTUAL_METHOD,
@@ -58,6 +69,7 @@ typedef struct {
        guint32 unwind_info_len;
        guint8 *unwind_info;
 
+       mgreg_t **reg_locations;
 } MonoStackFrameInfo;
 
 /*Index into MonoThreadState::unwind_data. */
@@ -78,4 +90,4 @@ typedef struct {
 } MonoThreadUnwindState;
 
 
-#endif
\ No newline at end of file
+#endif