X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/2d21ac55c334faf3a56e5634905ed6987fc787d4..15129b1c8dbb3650c63b70adb1cad9af601c6c17:/osfmk/mach/i386/sdt_isa.h diff --git a/osfmk/mach/i386/sdt_isa.h b/osfmk/mach/i386/sdt_isa.h index 03947431e..14549e810 100644 --- a/osfmk/mach/i386/sdt_isa.h +++ b/osfmk/mach/i386/sdt_isa.h @@ -37,10 +37,21 @@ #define DTRACE_TOSTRING(s) DTRACE_STRINGIFY(s) #if defined(KERNEL) /* - * For the kernel, set an explicit global label do the symbol can be located + * For the kernel, set an explicit global label so the symbol can be located */ +#ifdef __x86_64__ +#define DTRACE_LAB(p, n) \ + "__dtrace_probe$" DTRACE_TOSTRING(%=__LINE__) DTRACE_STRINGIFY(_##p##___##n) + +#define DTRACE_LABEL(p, n) \ + ".section __DATA, __data\n\t" \ + ".globl " DTRACE_LAB(p, n) "\n\t" \ + DTRACE_LAB(p, n) ":" ".quad 1f""\n\t" \ + ".text" "\n\t" \ + "1:" +#else #define DTRACE_LAB(p, n) \ - "__dtrace_probe$" DTRACE_TOSTRING(__LINE__) DTRACE_STRINGIFY(_##p##___##n) + "__dtrace_probe$" DTRACE_TOSTRING(%=__LINE__) DTRACE_STRINGIFY(_##p##___##n) #define DTRACE_LABEL(p, n) \ ".section __DATA, __data\n\t" \ @@ -48,9 +59,10 @@ DTRACE_LAB(p, n) ":" ".long 1f""\n\t" \ ".text" "\n\t" \ "1:" +#endif #else /* !KERNEL */ #define DTRACE_LABEL(p, n) \ - "__dtrace_probe$" DTRACE_TOSTRING(__LINE__) DTRACE_STRINGIFY(_##p##___##n) ":" "\n\t" + "__dtrace_probe$" DTRACE_TOSTRING(%=__LINE__) DTRACE_STRINGIFY(_##p##___##n) ":" "\n\t" #endif /* !KERNEL */ #ifdef DTRACE_CALL_TEST @@ -71,7 +83,8 @@ #define DTRACE_NOPS \ "nop" "\n\t" \ - "leal 0(%%esi), %%esi" "\n\t" + "nop" "\n\t" \ + "nop" "\n\t" #define DTRACE_CALL_INSN(p,n) \ "call _dtracetest" DTRACE_STRINGIFY(_##p##_##n) "\n\t" @@ -90,6 +103,8 @@ #define DTRACE_CALL0ARGS(provider, name) \ asm volatile ( \ DTRACE_CALL(provider, name) \ + : \ + : \ ); #define DTRACE_CALL1ARG(provider, name) \ @@ -97,7 +112,7 @@ DTRACE_CALL(provider, name) \ : \ : "r" (__dtrace_args) \ - : "memory", "rdi" \ + : "memory", "rdi" \ ); #define DTRACE_CALL2ARGS(provider, name) \ @@ -106,7 +121,7 @@ DTRACE_CALL(provider, name) \ : \ : "r" (__dtrace_args) \ - : "memory", "rdi", "rsi" \ + : "memory", "rdi", "rsi" \ ); #define DTRACE_CALL3ARGS(provider, name) \ @@ -116,7 +131,7 @@ DTRACE_CALL(provider, name) \ : \ : "r" (__dtrace_args) \ - : "memory", "rdi", "rsi", "rdx" \ + : "memory", "rdi", "rsi", "rdx" \ ); #define DTRACE_CALL4ARGS(provider, name) \ @@ -127,7 +142,7 @@ DTRACE_CALL(provider, name) \ : \ : "r" (__dtrace_args) \ - : "memory", "rdi", "rsi", "rdx", "rcx" \ + : "memory", "rdi", "rsi", "rdx", "rcx" \ ); #define DTRACE_CALL5ARGS(provider, name) \ @@ -139,7 +154,7 @@ DTRACE_CALL(provider, name) \ : \ : "r" (__dtrace_args) \ - : "memory", "rdi", "rsi", "rdx", "rcx", "r8" \ + : "memory", "rdi", "rsi", "rdx", "rcx", "r8" \ ); #define DTRACE_CALL6ARGS(provider, name) \ @@ -152,7 +167,7 @@ DTRACE_CALL(provider, name) \ : \ : "r" (__dtrace_args) \ - : "memory", "rdi", "rsi", "rdx", "rcx", "r8", "r9" \ + : "memory", "rdi", "rsi", "rdx", "rcx", "r8", "r9" \ ); #define DTRACE_CALL7ARGS(provider, name) \ @@ -169,46 +184,7 @@ "addq\t$0x8,%%rsp" "\n\t" \ : \ : "r" (__dtrace_args) \ - : "memory", "rdi", "rsi", "rdx", "rcx", "r8", "r9", "rax" \ - ); - -#define DTRACE_CALL8ARGS(provider, name) \ - asm volatile ("subq\t$0x10,%%rsp" "\n\t" \ - "movq\t0x0(%0),%%rdi" "\n\t" \ - "movq\t0x8(%0),%%rsi" "\n\t" \ - "movq\t0x10(%0),%%rdx" "\n\t" \ - "movq\t0x18(%0),%%rcx" "\n\t" \ - "movq\t0x20(%0),%%r8" "\n\t" \ - "movq\t0x28(%0),%%r9" "\n\t" \ - "movdqa\t0x30(%0),%%xmm1" "\n\t" \ - "movdqa\t%%xmm1,0x0(%%rsp)" "\n\t" \ - DTRACE_CALL(provider, name) \ - "addq\t$0x10,%%rsp" "\n\t" \ - : \ - : "r" (__dtrace_args) \ - : "memory", "rdi", "rsi", "rdx", "rcx", "r8", "r9", "xmm1" \ - ); - -#define DTRACE_CALL9ARGS(provider, name) \ - DTRACE_CALL10ARGS(provider, name) - -#define DTRACE_CALL10ARGS(provider, name) \ - asm volatile ("subq\t$0x20,%%rsp" "\n\t" \ - "movq\t0x0(%0),%%rdi" "\n\t" \ - "movq\t0x8(%0),%%rsi" "\n\t" \ - "movq\t0x10(%0),%%rdx" "\n\t" \ - "movq\t0x18(%0),%%rcx" "\n\t" \ - "movq\t0x20(%0),%%r8" "\n\t" \ - "movq\t0x28(%0),%%r9" "\n\t" \ - "movdqa\t0x30(%0),%%xmm1" "\n\t" \ - "movdqa\t0x40(%0),%%xmm2" "\n\t" \ - "movdqa\t%%xmm1,0x0(%%rsp)" "\n\t" \ - "movdqa\t%%xmm2,0x10(%%rsp)" "\n\t" \ - DTRACE_CALL(provider, name) \ - "addq\t$0x20,%%rsp" "\n\t" \ - : \ - : "r" (__dtrace_args) \ - : "memory", "rdi", "rsi", "rdx", "rcx", "r8", "r9", "xmm1", "xmm2" \ + : "memory", "rdi", "rsi", "rdx", "rcx", "r8", "r9", "rax" \ ); #endif // __x86_64__ @@ -268,7 +244,7 @@ "addl\t$0x10,%%esp" \ : \ : "r" (__dtrace_args) \ - : "memory", "eax" \ + : "memory", "eax" \ ); #define DTRACE_CALL2ARGS(provider, name) \ @@ -281,7 +257,7 @@ "addl\t$0x10,%%esp" \ : \ : "r" (__dtrace_args) \ - : "memory", "eax", "edx" \ + : "memory", "eax", "edx" \ ); #define DTRACE_CALL3ARGS(provider, name) \ @@ -296,7 +272,7 @@ "addl\t$0x10,%%esp" \ : \ : "r" (__dtrace_args) \ - : "memory", "eax", "edx" \ + : "memory", "eax", "edx" \ ); #define DTRACE_CALL4ARGS(provider, name) \ @@ -313,7 +289,7 @@ "addl\t$0x10,%%esp" \ : \ : "r" (__dtrace_args) \ - : "memory", "eax", "edx" \ + : "memory", "eax", "edx" \ ); #define DTRACE_CALL5ARGS(provider, name) \ @@ -332,7 +308,7 @@ "addl\t$0x20,%%esp" \ : \ : "r" (__dtrace_args) \ - : "memory", "eax", "edx" \ + : "memory", "eax", "edx" \ ); #define DTRACE_CALL6ARGS(provider, name) \ @@ -353,7 +329,7 @@ "addl\t$0x20,%%esp" \ : \ : "r" (__dtrace_args) \ - : "memory", "eax", "edx" \ + : "memory", "eax", "edx" \ ); #define DTRACE_CALL7ARGS(provider, name) \ @@ -376,7 +352,7 @@ "addl\t$0x20,%%esp" \ : \ : "r" (__dtrace_args) \ - : "memory", "eax", "edx" \ + : "memory", "eax", "edx" \ ); #define DTRACE_CALL8ARGS(provider, name) \ @@ -401,7 +377,7 @@ "addl\t$0x20,%%esp" \ : \ : "r" (__dtrace_args) \ - : "memory", "eax", "edx" \ + : "memory", "eax", "edx" \ ); #define DTRACE_CALL9ARGS(provider, name) \ @@ -428,7 +404,7 @@ "addl\t$0x30,%%esp" \ : \ : "r" (__dtrace_args) \ - : "memory", "eax", "edx" \ + : "memory", "eax", "edx" \ ); #define DTRACE_CALL10ARGS(provider, name) \ @@ -457,7 +433,7 @@ "addl\t$0x30,%%esp" \ : \ : "r" (__dtrace_args) \ - : "memory", "eax", "edx" \ + : "memory", "eax", "edx" \ ); #endif // __i386__