[wasm] Move RETURN_ADDRESS macros to mini.h, use them in mini-exceptions.h and add...
authorRodrigo Kumpera <kumpera@gmail.com>
Thu, 31 Aug 2017 18:17:19 +0000 (11:17 -0700)
committerRodrigo Kumpera <kumpera@gmail.com>
Fri, 1 Sep 2017 21:52:52 +0000 (14:52 -0700)
mono/mini/mini-exceptions.c
mono/mini/mini-wasm.c
mono/mini/mini.h
mono/mini/trace.c

index 9f5c87b6a13194aaf1afee42f1c0ecef32cbf445..ae4a87ccae0ef6293e1400c9018455242024bbaf 100644 (file)
@@ -3285,7 +3285,7 @@ mono_llvm_load_exception (void)
 
        if (mono_ex->trace_ips) {
                GList *trace_ips = NULL;
-               gpointer ip = __builtin_return_address (0);
+               gpointer ip = RETURN_ADDRESS ();
 
                size_t upper = mono_array_length (mono_ex->trace_ips);
 
index acf71e897733ffee6208c4eea2132906f2692145..0104909e4d03b15474216d17f7dded04d50feb78 100644 (file)
@@ -177,18 +177,6 @@ mono_w32file_get_volume_information (const gunichar2 *path, gunichar2 *volumenam
 
 
 //llvm builtin's that we should not have used in the first place
-gpointer
-llvm_returnaddress (void)
-{
-       g_error ("llvm_returnaddress");
-       return NULL;
-}
-
-void
-llvm_eh_unwind_init (void)
-{
-       g_error ("llvm_eh_unwind_init");
-}
 
 
 //libc / libpthread missing bits from musl or shit we didn't detect :facepalm:
index 9645a0de7b99d1b9ac7e8caedbb37a3bf0cabded..0edfea186b4e5adfaacc6013a6d1e6f82e83613e 100644 (file)
@@ -3266,4 +3266,31 @@ gboolean MONO_SIG_HANDLER_SIGNATURE (mono_chain_signal);
  */
 void mono_interruption_checkpoint_from_trampoline (void);
 
+
+#if defined (HOST_WASM)
+
+#define RETURN_ADDRESS_N(N) NULL
+#define RETURN_ADDRESS() RETURN_ADDRESS_N(0)
+
+
+#elif defined (__GNUC__)
+
+#define RETURN_ADDRESS_N(N) (__builtin_extract_return_addr (__builtin_return_address (N)))
+#define RETURN_ADDRESS() RETURN_ADDRESS_N(0)
+
+#elif defined(_MSC_VER)
+
+#include <intrin.h>
+#pragma intrinsic(_ReturnAddress)
+
+#define RETURN_ADDRESS() _ReturnAddress()
+#define RETURN_ADDRESS_N(N) NULL
+
+#else
+
+#error "Missing return address intrinsics implementation"
+
+#endif
+
+
 #endif /* __MONO_MINI_H__ */
index 0e50ae550707597de0aee029b8dc9cdda3829405..b81fe604ed3aef345b7eef2ca52c01e4630172d7 100644 (file)
 #  define fprintf(__ignore, ...) g_log ("mono-gc", G_LOG_LEVEL_MESSAGE, __VA_ARGS__)
 #endif
 
-#ifdef __GNUC__
-
-#define RETURN_ADDRESS_N(N) (__builtin_extract_return_addr (__builtin_return_address (N)))
-#define RETURN_ADDRESS() RETURN_ADDRESS_N(0)
-
-#elif defined(_MSC_VER)
-
-#include <intrin.h>
-#pragma intrinsic(_ReturnAddress)
-
-#define RETURN_ADDRESS() _ReturnAddress()
-#define RETURN_ADDRESS_N(N) NULL
-
-#else
-
-#error "Missing return address intrinsics implementation"
-
-#endif
-
 static MonoTraceSpec trace_spec;
 
 static volatile gint32 output_lock = 0;