summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStan Cox <scox@redhat.com>2009-04-23 16:43:44 -0400
committerStan Cox <scox@redhat.com>2009-04-23 16:43:44 -0400
commit1ce4311fbb8e3191449f919b784cea355a0cfe00 (patch)
tree017578c47745271412be8bdab78ae8933c7ea81e
parent5171b04f699dd8a2d08c0f1d6307094f2e3c273b (diff)
downloadsystemtap-steved-1ce4311fbb8e3191449f919b784cea355a0cfe00.tar.gz
systemtap-steved-1ce4311fbb8e3191449f919b784cea355a0cfe00.tar.xz
systemtap-steved-1ce4311fbb8e3191449f919b784cea355a0cfe00.zip
Avoid a uprobe break setting problem by avoiding 'nop 0' on x86.
* sdt.h (STAP_NOP): New. (STAP_PROBE): Use it.
-rw-r--r--includes/sys/sdt.h28
1 files changed, 17 insertions, 11 deletions
diff --git a/includes/sys/sdt.h b/includes/sys/sdt.h
index c2242303..f89b736a 100644
--- a/includes/sys/sdt.h
+++ b/includes/sys/sdt.h
@@ -58,11 +58,17 @@
#define STAP_UNINLINE_LABEL(label) \
__extension__ static volatile long labelval __attribute__ ((unused)) = (long) &&label
+#if defined(__x86_64__) || defined(__i386__)
+#define STAP_NOP "\tnop "
+#else
+#define STAP_NOP "\tnop 0 "
+#endif
+
#define STAP_PROBE_(probe) \
do { \
STAP_PROBE_DATA(probe); \
__asm__ volatile ("2:\n" \
- "\tnop 0"); \
+ STAP_NOP); \
} while (0)
#define STAP_PROBE1_(probe,label,parm1) \
@@ -73,7 +79,7 @@ do { \
STAP_PROBE_DATA(probe); \
label: \
__asm__ volatile ("2:\n" \
- "\tnop 0 /* %0 */" :: "g"(arg1)); \
+ STAP_NOP "/* %0 */" :: "g"(arg1)); \
} while (0)
#define STAP_PROBE2_(probe,label,parm1,parm2) \
@@ -85,7 +91,7 @@ do { \
STAP_PROBE_DATA(probe); \
label: \
__asm__ volatile ("2:\n" \
- "\tnop 0 /* %0 %1 */" :: "g"(arg1), "g"(arg2)); \
+ STAP_NOP "/* %0 %1 */" :: "g"(arg1), "g"(arg2)); \
} while (0)
#define STAP_PROBE3_(probe,label,parm1,parm2,parm3) \
@@ -98,7 +104,7 @@ do { \
STAP_PROBE_DATA(probe); \
label: \
__asm__ volatile ("2:\n" \
- "\tnop 0 /* %0 %1 %2 */" :: "g"(arg1), "g"(arg2), "g"(arg3)); \
+ STAP_NOP "/* %0 %1 %2 */" :: "g"(arg1), "g"(arg2), "g"(arg3)); \
} while (0)
#define STAP_PROBE4_(probe,label,parm1,parm2,parm3,parm4) \
@@ -112,7 +118,7 @@ do { \
STAP_PROBE_DATA(probe); \
label: \
__asm__ volatile ("2:\n" \
- "\tnop 0 /* %0 %1 %2 %3 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4)); \
+ STAP_NOP "/* %0 %1 %2 %3 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4)); \
} while (0)
#define STAP_PROBE5_(probe,label,parm1,parm2,parm3,parm4,parm5) \
@@ -127,7 +133,7 @@ do { \
STAP_PROBE_DATA(probe); \
label: \
__asm__ volatile ("2:\n" \
- "\tnop 0 /* %0 %1 %2 %3 %4 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4), "g"(arg5)); \
+ STAP_NOP "/* %0 %1 %2 %3 %4 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4), "g"(arg5)); \
} while (0)
#define STAP_PROBE6_(probe,label,parm1,parm2,parm3,parm4,parm5,parm6) \
@@ -143,7 +149,7 @@ do { \
STAP_PROBE_DATA(probe); \
label: \
__asm__ volatile ("2:\n" \
- "\tnop 0 /* %0 %1 %2 %3 %4 %5 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4), "g"(arg5), "g"(arg6)); \
+ STAP_NOP "/* %0 %1 %2 %3 %4 %5 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4), "g"(arg5), "g"(arg6)); \
} while (0)
#define STAP_PROBE7_(probe,label,parm1,parm2,parm3,parm4,parm5,parm6,parm7) \
@@ -160,7 +166,7 @@ do { \
STAP_PROBE_DATA(probe); \
label: \
__asm__ volatile ("2:\n" \
- "\tnop 0 /* %0 %1 %2 %3 %4 %5 %6 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4), "g"(arg5), "g"(arg6), "g"(arg7)); \
+ STAP_NOP "/* %0 %1 %2 %3 %4 %5 %6 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4), "g"(arg5), "g"(arg6), "g"(arg7)); \
} while (0)
#define STAP_PROBE8_(probe,label,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8) \
@@ -178,7 +184,7 @@ do { \
STAP_PROBE_DATA(probe); \
label: \
__asm__ volatile ("2:\n" \
- "\tnop 0 /* %0 %1 %2 %3 %4 %5 %6 %7 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4), "g"(arg5), "g"(arg6), "g"(arg7), "g"(arg8)); \
+ STAP_NOP "/* %0 %1 %2 %3 %4 %5 %6 %7 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4), "g"(arg5), "g"(arg6), "g"(arg7), "g"(arg8)); \
} while (0)
#define STAP_PROBE9_(probe,label,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9) \
@@ -197,7 +203,7 @@ do { \
STAP_PROBE_DATA(probe); \
label: \
__asm__ volatile ("2:\n" \
- "\tnop 0 /* %0 %1 %2 %3 %4 %5 %6 %7 %8 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4), "g"(arg5), "g"(arg6), "g"(arg7), "g"(arg8), "g"(arg9)); \
+ STAP_NOP "/* %0 %1 %2 %3 %4 %5 %6 %7 %8 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4), "g"(arg5), "g"(arg6), "g"(arg7), "g"(arg8), "g"(arg9)); \
} while (0)
#define STAP_PROBE10_(probe,label,parm1,parm2,parm3,parm4,parm5,parm6,parm7,parm8,parm9,parm10) \
@@ -217,7 +223,7 @@ do { \
STAP_PROBE_DATA(probe); \
label: \
__asm__ volatile ("2:\n" \
- "\tnop 0 /* %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4), "g"(arg5), "g"(arg6), "g"(arg7), "g"(arg8), "g"(arg9), "g"(arg10)); \
+ STAP_NOP "/* %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 */" :: "g"(arg1), "g"(arg2), "g"(arg3), "g"(arg4), "g"(arg5), "g"(arg6), "g"(arg7), "g"(arg8), "g"(arg9), "g"(arg10)); \
} while (0)
#define STAP_PROBE(provider,probe) \