#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.
includes: stdint.h
14 macros

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)