#include <mach/arm/sdt_isa.h> not included by <mach/mach.h> — include it explicitly
mach/arm/sdt_isa.h
Only define when testing. This makes the calls into actual calls to
test functions.
macroDTRACE_STRINGIFY
#define DTRACE_STRINGIFY(s) #s
macroDTRACE_TOSTRING
#define DTRACE_TOSTRING(s) DTRACE_STRINGIFY(s)
macroDTRACE_LABEL
#define DTRACE_LABEL(p, n) "__dtrace_probe$" DTRACE_TOSTRING(%=__LINE__) DTRACE_STRINGIFY(_##p##___##n) ":" "\n\t"
macroDTRACE_NOPS
#define DTRACE_NOPS "nop" "\n\t"
macroDTRACE_CALL
#define DTRACE_CALL(p, n) DTRACE_LABEL(p,n) DTRACE_NOPS
macroDTRACE_PROBE
#define DTRACE_PROBE(provider, name) do {
asm volatile (
DTRACE_CALL(provider, name)
:
:
: "memory"
);
} while(0)macroDTRACE_PROBE1
#define DTRACE_PROBE1(provider, name, arg0) do {
register uintptr_t __dtrace_a0 asm("x0") = (uintptr_t) arg0;
asm volatile (
DTRACE_CALL(provider, name)
:
: "r" (__dtrace_a0)
: "memory"
);
} while(0)macroDTRACE_PROBE2
#define DTRACE_PROBE2(provider, name, arg0, arg1) do {
register uintptr_t __dtrace_a0 asm("x0") = (uintptr_t) arg0;
register uintptr_t __dtrace_a1 asm("x1") = (uintptr_t) arg1;
asm volatile (
DTRACE_CALL(provider, name)
:
: "r" (__dtrace_a0), "r" (__dtrace_a1)
: "memory"
);
} while(0)macroDTRACE_PROBE3
#define DTRACE_PROBE3(provider, name, arg0, arg1, arg2) do {
register uintptr_t __dtrace_a0 asm("x0") = (uintptr_t) arg0;
register uintptr_t __dtrace_a1 asm("x1") = (uintptr_t) arg1;
register uintptr_t __dtrace_a2 asm("x2") = (uintptr_t) arg2;
asm volatile (
DTRACE_CALL(provider, name)
:
: "r" (__dtrace_a0), "r" (__dtrace_a1), "r" (__dtrace_a2)
: "memory"
);
} while(0)macroDTRACE_PROBE4
#define DTRACE_PROBE4(provider, name, arg0, arg1, arg2, arg3) do {
register uintptr_t __dtrace_a0 asm("x0") = (uintptr_t) arg0;
register uintptr_t __dtrace_a1 asm("x1") = (uintptr_t) arg1;
register uintptr_t __dtrace_a2 asm("x2") = (uintptr_t) arg2;
register uintptr_t __dtrace_a3 asm("x3") = (uintptr_t) arg3;
asm volatile (
DTRACE_CALL(provider, name)
:
: "r" (__dtrace_a0), "r" (__dtrace_a1), "r" (__dtrace_a2),
"r" (__dtrace_a3)
: "memory"
);
} while(0)macroDTRACE_PROBE5
#define DTRACE_PROBE5(provider, name, arg0, arg1, arg2, arg3, arg4) do {
register uintptr_t __dtrace_a0 asm("x0") = (uintptr_t) arg0;
register uintptr_t __dtrace_a1 asm("x1") = (uintptr_t) arg1;
register uintptr_t __dtrace_a2 asm("x2") = (uintptr_t) arg2;
register uintptr_t __dtrace_a3 asm("x3") = (uintptr_t) arg3;
register uintptr_t __dtrace_a4 asm("x4") = (uintptr_t) arg4;
asm volatile (
DTRACE_CALL(provider, name)
:
: "r" (__dtrace_a0), "r" (__dtrace_a1), "r" (__dtrace_a2),
"r" (__dtrace_a3), "r" (__dtrace_a4)
: "memory"
);
} while(0)macroDTRACE_PROBE6
#define DTRACE_PROBE6(provider, name, arg0, arg1, arg2, arg3, arg4, arg5) do {
register uintptr_t __dtrace_a0 asm("x0") = (uintptr_t) arg0;
register uintptr_t __dtrace_a1 asm("x1") = (uintptr_t) arg1;
register uintptr_t __dtrace_a2 asm("x2") = (uintptr_t) arg2;
register uintptr_t __dtrace_a3 asm("x3") = (uintptr_t) arg3;
register uintptr_t __dtrace_a4 asm("x4") = (uintptr_t) arg4;
register uintptr_t __dtrace_a5 asm("x5") = (uintptr_t) arg5;
asm volatile (
DTRACE_CALL(provider, name)
:
: "r" (__dtrace_a0), "r" (__dtrace_a1), "r" (__dtrace_a2),
"r" (__dtrace_a3), "r" (__dtrace_a4), "r" (__dtrace_a5)
: "memory"
);
} while(0)macroDTRACE_PROBE7
#define DTRACE_PROBE7(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6) do {
register uintptr_t __dtrace_a0 asm("x0") = (uintptr_t) arg0;
register uintptr_t __dtrace_a1 asm("x1") = (uintptr_t) arg1;
register uintptr_t __dtrace_a2 asm("x2") = (uintptr_t) arg2;
register uintptr_t __dtrace_a3 asm("x3") = (uintptr_t) arg3;
register uintptr_t __dtrace_a4 asm("x4") = (uintptr_t) arg4;
register uintptr_t __dtrace_a5 asm("x5") = (uintptr_t) arg5;
register uintptr_t __dtrace_a6 asm("x6") = (uintptr_t) arg6;
asm volatile (
DTRACE_CALL(provider, name)
:
: "r" (__dtrace_a0), "r" (__dtrace_a1), "r" (__dtrace_a2),
"r" (__dtrace_a3), "r" (__dtrace_a4), "r" (__dtrace_a5),
"r" (__dtrace_a6)
: "memory"
);
} while(0)macroDTRACE_PROBE8
#define DTRACE_PROBE8(provider, name, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) do {
register uintptr_t __dtrace_a0 asm("x0") = (uintptr_t) arg0;
register uintptr_t __dtrace_a1 asm("x1") = (uintptr_t) arg1;
register uintptr_t __dtrace_a2 asm("x2") = (uintptr_t) arg2;
register uintptr_t __dtrace_a3 asm("x3") = (uintptr_t) arg3;
register uintptr_t __dtrace_a4 asm("x4") = (uintptr_t) arg4;
register uintptr_t __dtrace_a5 asm("x5") = (uintptr_t) arg5;
register uintptr_t __dtrace_a6 asm("x6") = (uintptr_t) arg6;
register uintptr_t __dtrace_a7 asm("x7") = (uintptr_t) arg7;
asm volatile (
DTRACE_CALL(provider, name)
:
: "r" (__dtrace_a0), "r" (__dtrace_a1), "r" (__dtrace_a2),
"r" (__dtrace_a3), "r" (__dtrace_a4), "r" (__dtrace_a5),
"r" (__dtrace_a6), "r" (__dtrace_a7)
: "memory"
);
} while(0)