]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/dev/i386/fbt_x86.c
xnu-3789.51.2.tar.gz
[apple/xnu.git] / bsd / dev / i386 / fbt_x86.c
index 750a024cf02a2a48757020477787f1e56e1b31f3..54f00f290cb02fae8c028903b39a6852b24e1467 100644 (file)
@@ -174,8 +174,11 @@ static const char * probe_ctx_closure[] =
        "Debugger",
        "IS_64BIT_PROCESS",
        "OSCompareAndSwap",
+       "_disable_preemption",
+       "_enable_preemption",
        "absolutetime_to_microtime",
        "act_set_astbsd",
+       "ast_dtrace_on",
        "ast_pending",
        "clock_get_calendar_nanotime_nowait",
        "copyin",
@@ -235,16 +238,16 @@ static int _cmp(const void *a, const void *b)
 }
 
 static const void * bsearch(
-       register const void *key,
+       const void *key,
        const void *base0,
        size_t nmemb,
-       register size_t size,
-       register int (*compar)(const void *, const void *)) {
+       size_t size,
+       int (*compar)(const void *, const void *)) {
 
-       register const char *base = base0;
-       register size_t lim;
-       register int cmp;
-       register const void *p;
+       const char *base = base0;
+       size_t lim;
+       int cmp;
+       const void *p;
 
        for (lim = nmemb; lim != 0; lim >>= 1) {
                p = base + (lim >> 1) * size;
@@ -469,9 +472,6 @@ is_symbol_valid(const char* name)
         */
        if (LIT_STRNSTART(name, "kdp_") ||
            LIT_STRNSTART(name, "kdb_") ||
-           LIT_STRNSTART(name, "kdbg_") ||
-           LIT_STRNSTART(name, "kdebug_") ||
-           LIT_STRNSTART(name, "kernel_debug") ||
            LIT_STRNSTART(name, "debug_") ||
            LIT_STRNEQL(name, "Debugger") ||
            LIT_STRNEQL(name, "Call_DebuggerC") ||
@@ -650,6 +650,14 @@ __provide_probe_64(struct modctl *ctl, uintptr_t instrLow, uintptr_t instrHigh,
        machine_inst_t *instr, *limit, theInstr, i1, i2, i3;
        int size;
                
+       /*
+        * Guard against null symbols
+        */
+       if (!symbolStart || !instrLow || !instrHigh) {
+               kprintf("dtrace: %s has an invalid address\n", symbolName);
+               return;
+       }
+
        for (j = 0, instr = symbolStart, theInstr = 0;
             (j < 4) && ((uintptr_t)instr >= instrLow) && (instrHigh > (uintptr_t)(instr + 2)); 
             j++) {
@@ -1046,6 +1054,8 @@ fbt_provide_module(void *arg, struct modctl *ctl)
        if (MOD_HAS_USERSPACE_SYMBOLS(ctl)) {
                __user_syms_provide_module(arg, ctl);
                ctl->mod_flags |= MODCTL_FBT_PROBES_PROVIDED;
+               if (MOD_FBT_PROVIDE_PRIVATE_PROBES(ctl))
+                       ctl->mod_flags |= MODCTL_FBT_PRIVATE_PROBES_PROVIDED;
                return;
        }       
 }