Page MenuHomeFreeBSD

D44483.id136124.diff
No OneTemporary

D44483.id136124.diff

diff --git a/sys/cddl/dev/dtrace/dtrace_test.c b/sys/cddl/dev/dtrace/dtrace_test.c
--- a/sys/cddl/dev/dtrace/dtrace_test.c
+++ b/sys/cddl/dev/dtrace/dtrace_test.c
@@ -68,7 +68,9 @@
else if (val == 0)
return (0);
+#if 0
SDT_PROBE7(test, , , sdttest, 1, 2, 3, 4, 5, 6, 7);
+#endif
return (error);
}
diff --git a/sys/kern/kern_sdt.c b/sys/kern/kern_sdt.c
--- a/sys/kern/kern_sdt.c
+++ b/sys/kern/kern_sdt.c
@@ -52,3 +52,15 @@
printf("sdt_probe_stub: unexpectedly called\n");
kdb_backtrace();
}
+
+void
+sdt_probe(uint32_t id, uintptr_t arg0, uintptr_t arg1,
+ uintptr_t arg2, uintptr_t arg3, uintptr_t arg4)
+{
+}
+
+void
+sdt_probe6(uint32_t id, uintptr_t arg0, uintptr_t arg1,
+ uintptr_t arg2, uintptr_t arg3, uintptr_t arg4, uintptr_t arg5)
+{
+}
diff --git a/sys/sys/sdt.h b/sys/sys/sdt.h
--- a/sys/sys/sdt.h
+++ b/sys/sys/sdt.h
@@ -141,6 +141,11 @@
#else
+void sdt_probe(uint32_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t,
+ uintptr_t);
+void sdt_probe6(uint32_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t,
+ uintptr_t, uintptr_t);
+
#define __sdt_used
SET_DECLARE(sdt_providers_set, struct sdt_provider);
@@ -169,14 +174,26 @@
#define SDT_PROBES_ENABLED() __predict_false(sdt_probes_enabled)
-#define SDT_PROBE(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4) do { \
- if (SDT_PROBES_ENABLED()) { \
- if (__predict_false(sdt_##prov##_##mod##_##func##_##name->id)) \
- (*sdt_probe_func)(sdt_##prov##_##mod##_##func##_##name->id, \
- (uintptr_t) arg0, (uintptr_t) arg1, (uintptr_t) arg2, \
- (uintptr_t) arg3, (uintptr_t) arg4); \
- } \
+#define __SDT_PROBE(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4, c) do {\
+ asm goto( \
+ "0: nop; nop; nop; nop; nop\n" \
+ ".pushsection __sdt_probes\n" \
+ ".quad 0b\n" \
+ ".quad %l0\n" \
+ ".popsection\n" \
+ : : : : __sdt_probe ## c); \
+ if (0) { \
+__sdt_probe ## c: \
+ sdt_probe(sdt_##prov##_##mod##_##func##_##name->id, \
+ (uintptr_t)arg0, (uintptr_t)arg1, (uintptr_t)arg2, \
+ (uintptr_t)arg3, (uintptr_t)arg4); \
+ } \
} while (0)
+#define _SDT_PROBE(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4, c) \
+ __SDT_PROBE(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4, c)
+#define SDT_PROBE(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4) \
+ _SDT_PROBE(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4, \
+ __COUNTER__)
#define SDT_PROBE_ARGTYPE(prov, mod, func, name, num, type, xtype) \
static struct sdt_argtype sdta_##prov##_##mod##_##func##_##name##num[1] \
@@ -310,15 +327,27 @@
SDT_PROBE(prov, mod, func, name, arg0, arg1, arg2, arg3, 0)
#define SDT_PROBE5(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4) \
SDT_PROBE(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4)
-#define SDT_PROBE6(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4, arg5) \
- do { \
- if (sdt_##prov##_##mod##_##func##_##name->id) \
- (*(void (*)(uint32_t, uintptr_t, uintptr_t, uintptr_t, \
- uintptr_t, uintptr_t, uintptr_t))sdt_probe_func)( \
- sdt_##prov##_##mod##_##func##_##name->id, \
- (uintptr_t)arg0, (uintptr_t)arg1, (uintptr_t)arg2, \
- (uintptr_t)arg3, (uintptr_t)arg4, (uintptr_t)arg5);\
- } while (0)
+#define __SDT_PROBE6(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4, arg5, c) do { \
+ asm goto( \
+ "0: nop; nop; nop; nop; nop\n" \
+ ".pushsection __sdt_probes\n" \
+ ".quad 0b\n" \
+ ".quad %l0\n" \
+ ".popsection\n" \
+ : : : : __sdt_probe ## c); \
+ if (0) { \
+__sdt_probe ## c: \
+ sdt_probe6(sdt_##prov##_##mod##_##func##_##name->id, \
+ (uintptr_t)arg0, (uintptr_t)arg1, (uintptr_t)arg2, \
+ (uintptr_t)arg3, (uintptr_t)arg4, (uintptr_t)arg5); \
+ } \
+} while (0)
+#define _SDT_PROBE6(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4, arg5, c) \
+ __SDT_PROBE6(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4, arg5, c)
+#define SDT_PROBE6(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4, arg5) \
+ _SDT_PROBE6(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4, arg5, \
+ __COUNTER__)
+#if 0
#define SDT_PROBE7(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4, arg5, \
arg6) \
do { \
@@ -331,6 +360,7 @@
(uintptr_t)arg3, (uintptr_t)arg4, (uintptr_t)arg5, \
(uintptr_t)arg6); \
} while (0)
+#endif
#define DTRACE_PROBE_IMPL_START(name, arg0, arg1, arg2, arg3, arg4) do { \
static SDT_PROBE_DEFINE(sdt, , , name); \

File Metadata

Mime Type
text/plain
Expires
Fri, Apr 24, 11:34 PM (4 h, 3 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32058133
Default Alt Text
D44483.id136124.diff (4 KB)

Event Timeline