forked from pool/systemtap
102 lines
2.5 KiB
Diff
102 lines
2.5 KiB
Diff
--- runtime/loc2c-runtime.h.orig 2007-02-27 11:45:26.000000000 -0800
|
|
+++ runtime/loc2c-runtime.h 2007-02-27 11:50:17.000000000 -0800
|
|
@@ -296,52 +296,24 @@
|
|
|
|
#elif defined (__s390__) || defined (__s390x__)
|
|
|
|
-#if defined __s390__
|
|
-#define __stp_get_asm(x, addr, err, size) \
|
|
-({ \
|
|
- asm volatile( \
|
|
- "0: mvc 0(%2,%4),0(%3)\n" \
|
|
- "1:\n" \
|
|
- ".section .fixup,\"ax\"\n" \
|
|
- "2: lhi %0,%5\n" \
|
|
- " bras 1,3f\n" \
|
|
- " .long 1b\n" \
|
|
- "3: l 1,0(1)\n" \
|
|
- " br 1\n" \
|
|
- ".previous\n" \
|
|
+#ifndef EX_TABLE
|
|
+/*
|
|
+ * Helper macro for exception table entries
|
|
+ */
|
|
+#ifndef __s390x__
|
|
+#define EX_TABLE(_fault,_target) \
|
|
".section __ex_table,\"a\"\n" \
|
|
- " .align 4\n" \
|
|
- " .long 0b,2b\n" \
|
|
- ".previous" \
|
|
- : "+&d" (err), "=m" (x) \
|
|
- : "i" (size),"a"(addr), \
|
|
- "a" (&(x)),"K" (-EFAULT) \
|
|
- : "cc", "1" ); \
|
|
-})
|
|
-
|
|
-#define __stp_put_asm(x, addr, err, size) \
|
|
-({ \
|
|
- asm volatile( \
|
|
- "0: mvc 0(%1,%2),0(%3)\n" \
|
|
- "1:\n" \
|
|
- ".section .fixup,\"ax\"\n" \
|
|
- "2: lhi %0,%5\n" \
|
|
- " bras 1,3f\n" \
|
|
- " .long 1b\n" \
|
|
- "3: l 1,0(1)\n" \
|
|
- " br 1\n" \
|
|
- ".previous\n" \
|
|
+ " .align 4\n" \
|
|
+ " .long " #_fault "," #_target "\n" \
|
|
+ ".previous\n"
|
|
+#else
|
|
+#define EX_TABLE(_fault,_target) \
|
|
".section __ex_table,\"a\"\n" \
|
|
- " .align 4\n" \
|
|
- " .long 0b,2b\n" \
|
|
- ".previous" \
|
|
- : "+&d" (err) \
|
|
- : "i" (size), "a" (addr), \
|
|
- "a" (&(x)),"K" (-EFAULT) \
|
|
- : "cc", "1"); \
|
|
-})
|
|
-
|
|
-#else /* s390x */
|
|
+ " .align 8\n" \
|
|
+ " .quad " #_fault "," #_target "\n" \
|
|
+ ".previous\n"
|
|
+#endif
|
|
+#endif
|
|
|
|
#define __stp_get_asm(x, addr, err, size) \
|
|
({ \
|
|
@@ -352,10 +324,7 @@
|
|
"2: lghi %0,%5\n" \
|
|
" jg 1b\n" \
|
|
".previous\n" \
|
|
- ".section __ex_table,\"a\"\n" \
|
|
- " .align 8\n" \
|
|
- " .quad 0b,2b\n" \
|
|
- ".previous" \
|
|
+ EX_TABLE(0b,2b) \
|
|
: "+&d" (err), "=m" (x) \
|
|
: "i" (size),"a"(addr), \
|
|
"a" (&(x)),"K" (-EFAULT) \
|
|
@@ -371,16 +340,12 @@
|
|
"2: lghi %0,%4\n" \
|
|
" jg 1b\n" \
|
|
".previous\n" \
|
|
- ".section __ex_table,\"a\"\n" \
|
|
- " .align 8\n" \
|
|
- " .quad 0b,2b\n" \
|
|
- ".previous" \
|
|
+ EX_TABLE(0b,2b) \
|
|
: "+&d" (err) \
|
|
: "i" (size),"a"(addr), \
|
|
"a"(&(x)),"K"(-EFAULT) \
|
|
: "cc"); \
|
|
})
|
|
-#endif
|
|
|
|
#define deref(size, addr) \
|
|
({ \
|