summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--target-alpha/op_helper.c6
-rw-r--r--target-arm/op_helper.c6
-rw-r--r--target-cris/op_helper.c6
-rw-r--r--target-i386/helper.c6
-rw-r--r--target-m68k/op_helper.c6
-rw-r--r--target-mips/op_helper.c6
-rw-r--r--target-ppc/op_helper.c6
-rw-r--r--target-sh4/op_helper.c6
-rw-r--r--target-sparc/op_helper.c6
9 files changed, 45 insertions, 9 deletions
diff --git a/target-alpha/op_helper.c b/target-alpha/op_helper.c
index ae8470b595..fa1e6acc5a 100644
--- a/target-alpha/op_helper.c
+++ b/target-alpha/op_helper.c
@@ -1076,7 +1076,11 @@ void helper_mtpr (int iprn)
/* Softmmu support */
#if !defined (CONFIG_USER_ONLY)
-#define GETPC() (__builtin_return_address(0))
+#ifdef __s390__
+# define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL))
+#else
+# define GETPC() (__builtin_return_address(0))
+#endif
/* XXX: the two following helpers are pure hacks.
* Hopefully, we emulate the PALcode, then we should never see
diff --git a/target-arm/op_helper.c b/target-arm/op_helper.c
index c0e7c8d64a..6e14a4dff2 100644
--- a/target-arm/op_helper.c
+++ b/target-arm/op_helper.c
@@ -178,7 +178,11 @@ void do_vfp_get_fpscr(void)
#if !defined(CONFIG_USER_ONLY)
#define MMUSUFFIX _mmu
-#define GETPC() (__builtin_return_address(0))
+#ifdef __s390__
+# define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL))
+#else
+# define GETPC() (__builtin_return_address(0))
+#endif
#define SHIFT 0
#include "softmmu_template.h"
diff --git a/target-cris/op_helper.c b/target-cris/op_helper.c
index 4f0f07cd4d..d0ec519b19 100644
--- a/target-cris/op_helper.c
+++ b/target-cris/op_helper.c
@@ -23,7 +23,11 @@
#include "exec.h"
#define MMUSUFFIX _mmu
-#define GETPC() (__builtin_return_address(0))
+#ifdef __s390__
+# define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL))
+#else
+# define GETPC() (__builtin_return_address(0))
+#endif
#define SHIFT 0
#include "softmmu_template.h"
diff --git a/target-i386/helper.c b/target-i386/helper.c
index 88aa82e42a..bb927f673d 100644
--- a/target-i386/helper.c
+++ b/target-i386/helper.c
@@ -3865,7 +3865,11 @@ void update_fp_status(void)
#if !defined(CONFIG_USER_ONLY)
#define MMUSUFFIX _mmu
-#define GETPC() (__builtin_return_address(0))
+#ifdef __s390__
+# define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL))
+#else
+# define GETPC() (__builtin_return_address(0))
+#endif
#define SHIFT 0
#include "softmmu_template.h"
diff --git a/target-m68k/op_helper.c b/target-m68k/op_helper.c
index 917ef52880..80ec89040f 100644
--- a/target-m68k/op_helper.c
+++ b/target-m68k/op_helper.c
@@ -31,7 +31,11 @@ void do_interrupt(int is_hw)
extern int semihosting_enabled;
#define MMUSUFFIX _mmu
-#define GETPC() (__builtin_return_address(0))
+#ifdef __s390__
+# define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL))
+#else
+# define GETPC() (__builtin_return_address(0))
+#endif
#define SHIFT 0
#include "softmmu_template.h"
diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
index 3c04c55d83..50c76d1ca0 100644
--- a/target-mips/op_helper.c
+++ b/target-mips/op_helper.c
@@ -22,7 +22,11 @@
#include "host-utils.h"
-#define GETPC() (__builtin_return_address(0))
+#ifdef __s390__
+# define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL))
+#else
+# define GETPC() (__builtin_return_address(0))
+#endif
/*****************************************************************************/
/* Exceptions processing helpers */
diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c
index 751bd7212c..da5a6f5e37 100644
--- a/target-ppc/op_helper.c
+++ b/target-ppc/op_helper.c
@@ -2732,7 +2732,11 @@ DO_SPE_OP1(fsctuf);
#if !defined (CONFIG_USER_ONLY)
#define MMUSUFFIX _mmu
-#define GETPC() (__builtin_return_address(0))
+#ifdef __s390__
+# define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL))
+#else
+# define GETPC() (__builtin_return_address(0))
+#endif
#define SHIFT 0
#include "softmmu_template.h"
diff --git a/target-sh4/op_helper.c b/target-sh4/op_helper.c
index 2535b8d6aa..c1bc4e8942 100644
--- a/target-sh4/op_helper.c
+++ b/target-sh4/op_helper.c
@@ -28,7 +28,11 @@ void do_raise_exception(void)
#ifndef CONFIG_USER_ONLY
#define MMUSUFFIX _mmu
-#define GETPC() (__builtin_return_address(0))
+#ifdef __s390__
+# define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL))
+#else
+# define GETPC() (__builtin_return_address(0))
+#endif
#define SHIFT 0
#include "softmmu_template.h"
diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c
index ccadf85104..3746788796 100644
--- a/target-sparc/op_helper.c
+++ b/target-sparc/op_helper.c
@@ -1680,7 +1680,11 @@ static void do_unaligned_access(target_ulong addr, int is_write, int is_user,
#define MMUSUFFIX _mmu
#define ALIGNED_ONLY
-#define GETPC() (__builtin_return_address(0))
+#ifdef __s390__
+# define GETPC() ((void*)((unsigned long)__builtin_return_address(0) & 0x7fffffffUL))
+#else
+# define GETPC() (__builtin_return_address(0))
+#endif
#define SHIFT 0
#include "softmmu_template.h"