VirtualBox

儲存庫 vbox 的更動 53642


忽略:
時間撮記:
2015-1-2 下午12:16:22 (10 年 以前)
作者:
vboxsync
訊息:

VBoxDTrace: Made dtrace.c compile on linux. (r12)

位置:
trunk/src/VBox/ExtPacks/VBoxDTrace
檔案:
修改 4 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/ExtPacks/VBoxDTrace/include/VBoxDTraceTypes.h

    r53641 r53642  
    3737RT_C_DECLS_BEGIN
    3838
     39struct modctl;
     40
    3941typedef unsigned char           uchar_t;
    4042typedef unsigned int            uint_t;
     
    5860    zoneid_t                cr_zone;
    5961} cred_t;
    60 #define PRIV_POLICY_ONLY(a_pCred, a_uPriv, a_fAll) (true)
    61 #define crgetuid(a_pCred)       ((a_pCred)->cr_uid)
    62 #define crgetzoneid(a_pCred)    ((a_pCred)->cr_zone)
    63 
    64 
    65 typedef struct VBoxDtCyclicId  *cyclic_id_t;
     62#define PRIV_POLICY_ONLY(a_pCred, a_uPriv, a_fAll)  (true)
     63#define priv_isequalset(a, b)                       (true)
     64#define crgetuid(a_pCred)                           ((a_pCred)->cr_uid)
     65#define crgetzoneid(a_pCred)                        ((a_pCred)->cr_zone)
     66#define crhold(a_pCred)                             VBoxDtCredHold
     67#define crfree(a_pCred)                             VBoxDtCredFree
     68void VBoxDtCredHold(struct VBoxDtCred *pCred);
     69void VBoxDtCredFree(struct VBoxDtCred *pCred);
     70
     71
     72typedef struct RTTIMER  *cyclic_id_t;
     73#define CYCLIC_NONE                                 ((struct RTTIMER *)NULL)
     74#define cyclic_remove(a_hTimer)                     RTTimerDestroy(a_hTimer)
    6675
    6776typedef struct VBoxDtThread
     
    8190{
    8291    uint32_t                p_flag;
     92    RTPROCESS               p_pid;
    8393    struct dtrace_helpers  *p_dtrace_helpers;
    8494} proc_t;
     
    8999
    90100
    91 typedef struct VBoxDtDevInfo    dev_info_t;
    92101typedef struct VBoxDtTaskQueue  taskq_t;
    93 typedef struct VBoxDtMemCache   kmem_cache_t;
    94102
    95103typedef struct VBoxDtMutex
     
    100108#define mutex_exit              VBoxDtMutexExit
    101109#define MUTEX_HELD(a_pMtx)      VBoxDtMutexIsOwner(a_pMtx)
     110#define MUTEX_NOT_HELD(a_pMtx)  (!VBoxDtMutexIsOwner(a_pMtx))
    102111#define mod_lock                g_DummyMtx
    103112#define cpu_lock                g_DummyMtx
     
    157166typedef RTUID                   uid_t;
    158167typedef RTPROCESS               pid_t;
    159 typedef RTDEV                   dev_t;
    160168#endif
    161169
     170#define B_FALSE                 (0)
     171#define B_TRUE                  (1)
    162172#define NANOSEC                 RT_NS_1SEC
    163173#define MILLISEC                RT_MS_1SEC
     
    165175#define NCPU                    RTCPUSET_MAX_CPUS
    166176#define P2ROUNDUP(uWhat, uAlign)    ( ((uWhat) + (uAlign) - 1) & ~(uAlign - 1) )
     177#define IS_P2ALIGNED(uWhat, uAlign) ( !((uWhat) & ((uAlign) - 1)) )
    167178#define roundup(uWhat, uUnit)       ( ( (uWhat) + ((uUnit) - 1)) / (uUnit) * (uUnit) )
     179#define MIN(a1, a2)             RT_MIN(a1, a2)
    168180
    169181#define CPU_ON_INTR(a_pCpu)     (false)
     
    194206 * comparsion warnings. */
    195207#define VBDTTYPE(a_VBox, a_Org) a_VBox
     208/** Mark missing void in a parameter list. */
     209#define VBDTVOID                void
     210/** Mark missing static in a function definition. */
     211#define VBDTSTATIC              static
     212#define VBDTUNASS(a_Value)      = a_Value
    196213
    197214/*
     
    207224void  VBoxDtKMemFree(void *pvMem, size_t cbMem);
    208225
     226
     227typedef struct VBoxDtMemCache   kmem_cache_t;
     228#define kmem_cache_create       VBoxDtKMemCacheCreate
     229#define kmem_cache_destroy      VBoxDtKMemCacheDestroy
     230#define kmem_cache_alloc        VBoxDtKMemCacheAlloc
     231#define kmem_cache_free         VBoxDtKMemCacheFree
     232struct VBoxDtMemCache *VBoxDtKMemCacheCreate(const char *pszName, size_t cbBuf, size_t cbAlign,
     233                                             PFNRT pfnCtor, PFNRT pfnDtor, PFNRT pfnReclaim,
     234                                             void *pvUser, void *pvVM, uint32_t fFlags);
     235void  VBoxDtKMemCacheDestroy(struct VBoxDtMemCache *pCache);
     236void *VBoxDtKMemCacheAlloc(struct VBoxDtMemCache *pCache, uint32_t fFlags);
     237void  VBoxDtKMemCacheFree(struct VBoxDtMemCache *pCache, void *pvMem);
     238
     239
    209240typedef struct VBoxDtVMem
    210241{
     
    214245#define VM_SLEEP                RT_BIT(0)
    215246#define VM_BESTFIT              RT_BIT(1)
     247#define VMC_IDENTIFIER          RT_BIT(16)
     248#define vmem_create             VBoxDtVMemCreate
     249#define vmem_destroy            VBoxDtVMemDestroy
    216250#define vmem_alloc              VBoxDtVMemAlloc
    217251#define vmem_free               VBoxDtVMemFree
     252struct VBoxDtVMem *VBoxDtVMemCreate(const char *pszName, void *pvBase, size_t cb, size_t cbUnit,
     253                                    PFNRT pfnAlloc, PFNRT pfnFree, struct VBoxDtVMem *pSrc,
     254                                    size_t cbQCacheMax, uint32_t fFlags);
     255void  VBoxDtVMemDestroy(struct VBoxDtVMem *pVMemArena);
    218256void *VBoxDtVMemAlloc(struct VBoxDtVMem *pVMemArena, size_t cbMem, uint32_t fFlags);
    219257void  VBoxDtVMemFree(struct VBoxDtVMem *pVMemArena, void *pvMem, size_t cbMem);
     
    229267#define ENOSPC                  (28)
    230268#define ENOENT                  (2)
     269#define EFAULT                  (14)
     270#define E2BIG                   (7)
     271#define EACCES                  (13)
     272#define EALREADY                (114)
     273#define ENXIO                   (6)
     274#define EAGAIN                  (11)
     275#define ENOTTY                  (25)
     276#define ESRCH                   (3)
    231277
    232278/*
     
    235281#define bcopy(a_pSrc, a_pDst, a_cb) memmove(a_pDst, a_pSrc, a_cb)
    236282#define bzero(a_pDst, a_cb)         RT_BZERO(a_pDst, a_cb)
     283#define bcmp(a_p1, a_p2, a_cb)      memcmp(a_p1, a_p2, a_cb)
     284#define snprintf                    RTStrPrintf
     285
     286/*
     287 * Copy In/Out
     288 */
     289#define copyin                      VBoxDtCopyIn
     290#define copyout                     VBoxDtCopyOut
     291int  VBoxDtCopyIn(void const *pvUser, void *pvDst, size_t cb);
     292int  VBoxDtCopyOut(void const *pvSrc, void *pvUser, size_t cb);
     293
     294/*
     295 * Device numbers.
     296 */
     297typedef uint64_t                    dev_t;
     298typedef uint32_t                    major_t;
     299typedef uint32_t                    minor_t;
     300#define makedevice(a_Maj, a_Min)    RT_MAKE_U64(a_Min, a_Maj)
     301#define getemajor(a_Dev)            RT_HIDWORD(a_Dev)
     302#define geteminor(a_Dev)            RT_LODWORD(a_Dev)
     303#define getminor(a_Dev)             RT_LODWORD(a_Dev)
     304
     305/*
     306 * DDI
     307 */
     308#define DDI_SUCCESS                 (0)
     309#define DDI_FAILURE                 (-1)
     310#define ddi_soft_state_init         VBoxDtDdiSoftStateInit
     311#define ddi_soft_state_fini         VBoxDtDdiSoftStateTerm
     312#define ddi_soft_state_zalloc       VBoxDtDdiSoftStateAllocZ
     313#define ddi_get_soft_state          VBoxDtDdiSoftStateGet
     314#define ddi_soft_state_free         VBoxDtDdiSoftStateFree
     315int   VBoxDtDdiSoftStateInit(void **ppvSoftStates, size_t cbSoftState, uint32_t cMaxItems);
     316int   VBoxDtDdiSoftStateTerm(void **ppvSoftStates);
     317int   VBoxDtDdiSoftStateAllocZ(void *pvSoftStates, RTDEV uMinor);
     318int   VBoxDtDdiSoftStateFree(void *pvSoftStates, RTDEV uMinor);
     319void *VBoxDtDdiSoftStateGet(void *pvSoftStates, RTDEV uMinor);
     320
     321typedef struct VBoxDtDevInfo        dev_info_t;
     322typedef enum { DDI_ATT_CMD_DUMMY }  ddi_attach_cmd_t;
     323typedef enum { DDI_DETACH, DDI_SUSPEND }  ddi_detach_cmd_t;
     324#define ddi_driver_major            VBoxDtDdiDriverMajor
     325#define ddi_report_dev              VBoxDtDdiReportDev
     326major_t VBoxDtDdiDriverMajor(struct VBoxDtDevInfo *pDevInfo);
     327void    VBoxDtDdiReportDev(struct VBoxDtDevInfo *pDevInfo);
     328
     329/*
     330 * CTF - probably needs to be ported wholesale or smth.
     331 */
     332#define CTF_MODEL_NATIVE            1
    237333
    238334RT_C_DECLS_END
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/uts/common/dtrace/dtrace.c

    r53641 r53642  
    101101# include <iprt/process.h>
    102102# include <iprt/thread.h>
     103# include <iprt/timer.h>
    103104# include <limits.h>
    104105
     
    177178static vmem_t           *dtrace_arena;          /* probe ID arena */
    178179static vmem_t           *dtrace_minor;          /* minor number arena */
     180#ifndef VBOX
    179181static taskq_t          *dtrace_taskq;          /* task queue */
     182#endif
    180183static dtrace_probe_t   **dtrace_probes;        /* array of all probes */
    181184static VBDTTYPE(uint32_t,int) dtrace_nprobes;           /* number of probes */
     
    410413#define DTRACE_LOADFUNC(bits)                                           \
    411414/*CSTYLED*/                                                             \
    412 uint##bits##_t                                                          \
     415VBDTSTATIC uint##bits##_t                                               \
    413416dtrace_load##bits(uintptr_t addr)                                       \
    414417{                                                                       \
     
    11161119 */
    11171120static int
    1118 dtrace_priv_proc_common_nocd()
     1121dtrace_priv_proc_common_nocd(VBDTVOID)
    11191122{
    11201123        proc_t *proc;
     
    12071210 * cleaning is explained in detail in <sys/dtrace_impl.h>.
    12081211 */
    1209 void
     1212VBDTSTATIC void
    12101213dtrace_dynvar_clean(dtrace_dstate_t *dstate)
    12111214{
     
    13471350 * will be incremented.
    13481351 */
    1349 dtrace_dynvar_t *
     1352VBDTSTATIC dtrace_dynvar_t *
    13501353dtrace_dynvar(dtrace_dstate_t *dstate, uint_t nkeys,
    13511354    dtrace_key_t *key, size_t dsize, dtrace_dynvar_op_t op,
     
    18361839                }
    18371840        } else {
    1838                 for (i = zero + 1; i < DTRACE_QUANTIZE_NBUCKETS; i++) {
     1841                for (i = zero + 1; i < VBDTCAST(int)DTRACE_QUANTIZE_NBUCKETS; i++) {
    18391842                        if (val < DTRACE_QUANTIZE_BUCKETVAL(i)) {
    18401843                                quanta[i - 1] += incr;
     
    25252528
    25262529                rv = dtrace_cas32((uint32_t *)&spec->dtsp_state, current, new);
    2527                 ASSERT(rv == current);
     2530                ASSERT(VBDTCAST(dtrace_speculation_state_t)rv == current);
    25282531                spec->dtsp_cleaning = 0;
    25292532        }
     
    26092612 * builtin values such as 'execname' and 'probefunc.'
    26102613 */
    2611 uintptr_t
     2614VBDTSTATIC uintptr_t
    26122615dtrace_dif_varstr(uintptr_t addr, dtrace_state_t *state,
    26132616    dtrace_mstate_t *mstate)
     
    28102813                                mstate->dtms_caller = caller[1];
    28112814                        } else if ((mstate->dtms_caller =
    2812                             dtrace_caller(aframes)) == -1) {
     2815                            dtrace_caller(aframes)) == VBDTCAST(uintptr_t)-1) {
    28132816                                /*
    28142817                                 * We have failed to do this the quick way;
     
    36653668                uint8_t c, tokmap[32];   /* 256 / 8 */
    36663669                char *dest = (char *)mstate->dtms_scratch_ptr;
    3667                 int i;
     3670                VBDTTYPE(unsigned,int) i;
    36683671
    36693672                /*
     
    40494052                uintptr_t s1 = tupregs[0].dttk_value;
    40504053                uintptr_t s2 = tupregs[1].dttk_value;
    4051                 int i = 0;
     4054                VBDTTYPE(unsigned,int) i = 0;
    40524055
    40534056                if (!dtrace_strcanload(s1, size, mstate, vstate) ||
     
    42734276                }
    42744277
    4275                 for (i = start, j = 0; i <= end && j < size - 1; i++, j++)
     4278                for (i = start, j = 0; i <= end && VBDTCAST(unsigned)j < size - 1; i++, j++)
    42764279                        dest[j] = dtrace_load8(src + i);
    42774280
     
    43054308                        c = dtrace_load8(src + i++);
    43064309next:
    4307                         if (j + 5 >= size)      /* 5 = strlen("/..c\0") */
     4310                        if (j + 5 >= VBDTCAST(int64_t)size)     /* 5 = strlen("/..c\0") */
    43084311                                break;
    43094312
     
    46294632        uint8_t cc_n = 0, cc_z = 0, cc_v = 0, cc_c = 0;
    46304633        int64_t cc_r;
    4631         uint_t pc = 0, id, opc;
     4634        uint_t pc = 0, id, opc VBDTUNASS(0);
    46324635        uint8_t ttop = 0;
    46334636        dif_instr_t instr;
     
    55985601            (nframes * sizeof (uint64_t));
    55995602
    5600         if (!DTRACE_INSCRATCH(mstate, size)) {
     5603        if (!DTRACE_INSCRATCH(mstate, VBDTCAST(unsigned)size)) {
    56015604                /*
    56025605                 * Not enough room for our frame pointers -- need to indicate
     
    57815784                uint64_t val = 0;
    57825785#else
    5783                 uint64_t val;
     5786                uint64_t val VBDTUNASS(0);
    57845787#endif
    57855788
     
    93069309                int necbs = state->dts_necbs << 1;
    93079310
    9308                 ASSERT(epid == state->dts_necbs + 1);
     9311                ASSERT(epid == VBDTCAST(dtrace_epid_t)state->dts_necbs + 1);
    93099312
    93109313                if (necbs == 0) {
     
    94249427                        diff = offs + sizeof (dtrace_aggid_t);
    94259428
    9426                         if (diff = (diff & (sizeof (uint64_t) - 1)))
     9429                        if ((diff = (diff & (sizeof (uint64_t) - 1))))
    94279430                                offs += sizeof (uint64_t) - diff;
    94289431
     
    96399642                int onaggs = state->dts_naggregations;
    96409643
    9641                 ASSERT(aggid == state->dts_naggregations + 1);
     9644                ASSERT(aggid == VBDTCAST(dtrace_aggid_t)state->dts_naggregations + 1);
    96429645
    96439646                if (naggs == 0) {
     
    1012510128                 */
    1012610129                dtrace_ecb_t *cached = dtrace_ecb_create_cache;
    10127                 dtrace_action_t *act = cached->dte_action;
    10128 
    10129                 if (act != NULL) {
    10130                         ASSERT(act->dta_refcnt > 0);
    10131                         act->dta_refcnt++;
    10132                         ecb->dte_action = act;
     10130                dtrace_action_t *act2 = cached->dte_action;
     10131
     10132                if (act2 != NULL) {
     10133                        ASSERT(act2->dta_refcnt > 0);
     10134                        act2->dta_refcnt++;
     10135                        ecb->dte_action = act2;
    1013310136                        ecb->dte_action_last = cached->dte_action_last;
    1013410137                        ecb->dte_needed = cached->dte_needed;
     
    1031510318    for (iCpu = 0; iCpu < RTCPUSET_MAX_CPUS; iCpu++) {
    1031610319                if (   !RTCpuSetIsMember(&CpuSet, iCpu)
    10317                         || (cpu != DTRACE_CPUALL && cpu != iCpu))
     10320                        || (cpu != (processorid_t)DTRACE_CPUALL && cpu != iCpu))
    1031810321                        continue;
    1031910322
     
    1036610369                for (iCpu = 0; iCpu < RTCPUSET_MAX_CPUS; iCpu++) {
    1036710370                        if (   !RTCpuSetIsMember(&CpuSet, iCpu)
    10368                                 || (cpu != DTRACE_CPUALL && cpu != iCpu))
     10371                                || (cpu != (processorid_t)DTRACE_CPUALL && cpu != iCpu))
    1036910372                                continue;
    1037010373
     
    1128011283         * that the length isn't outrageous.
    1128111284         */
    11282         if (hdr.dofh_loadsz >= dtrace_dof_maxsize) {
     11285        if (hdr.dofh_loadsz >= VBDTCAST(uint64_t)dtrace_dof_maxsize) {
    1128311286                dtrace_dof_error(&hdr, "load size exceeds maximum");
    1128411287                *errp = E2BIG;
     
    1130711310dtrace_dof_property(const char *name)
    1130811311{
     11312#ifndef VBOX
    1130911313        uchar_t *buf;
    1131011314        uint64_t loadsz;
     
    1134711351
    1134811352        return (dof);
     11353#else  /* VBOX */
     11354        return (NULL);
     11355#endif /* VBOX */
    1134911356}
    1135011357
     
    1153111538
    1153211539                for (i = 0; difo[i].section != DOF_SECT_NONE; i++) {
    11533                         if (subsec->dofs_type != difo[i].section)
     11540                        if (subsec->dofs_type != VBDTCAST(uint32_t)difo[i].section)
    1153411541                                continue;
    1153511542
     
    1153911546                        }
    1154011547
    11541                         if (subsec->dofs_align != difo[i].align) {
     11548                        if (subsec->dofs_align != VBDTCAST(uint32_t)difo[i].align) {
    1154211549                                dtrace_dof_error(dof, "bad alignment");
    1154311550                                goto err;
     
    1155211559                        }
    1155311560
    11554                         if (difo[i].entsize != subsec->dofs_entsize) {
     11561                        if (VBDTCAST(uint32_t)difo[i].entsize != subsec->dofs_entsize) {
    1155511562                                dtrace_dof_error(dof, "entry size mismatch");
    1155611563                                goto err;
     
    1160111608         * setting of the option.
    1160211609         */
    11603         for (i = 0; i < dp->dtdo_varlen; i++) {
     11610        for (i = 0; VBDTCAST(unsigned)i < dp->dtdo_varlen; i++) {
    1160411611                dtrace_difv_t *v = &dp->dtdo_vartab[i];
    1160511612                dtrace_diftype_t *t = &v->dtdv_type;
     
    1211012117        dof_optdesc_t *desc;
    1211112118
    12112         for (i = 0; i < dof->dofh_secnum; i++) {
     12119        for (i = 0; VBDTCAST(unsigned)i < dof->dofh_secnum; i++) {
    1211312120                dof_sec_t *sec = (dof_sec_t *)((uintptr_t)dof +
    1211412121                    (uintptr_t)dof->dofh_secoff + i * dof->dofh_secsize);
     
    1214212149                        }
    1214312150
    12144                         if (desc->dofo_value == DTRACEOPT_UNSET) {
     12151                        if (desc->dofo_value == VBDTCAST(uint64_t)DTRACEOPT_UNSET) {
    1214512152                                dtrace_dof_error(dof, "unset option");
    1214612153                                return (EINVAL);
     
    1216112168 * DTrace Consumer State Functions
    1216212169 */
    12163 int
     12170VBDTSTATIC int
    1216412171dtrace_dstate_init(dtrace_dstate_t *dstate, size_t size)
    1216512172{
     
    1216812175        uintptr_t limit;
    1216912176        dtrace_dynvar_t *dvar, *next, *start;
    12170         int i;
     12177        VBDTTYPE(size_t,int) i;
    1217112178
    1217212179        ASSERT(MUTEX_HELD(&dtrace_lock));
     
    1225912266}
    1226012267
    12261 void
     12268VBDTSTATIC void
    1226212269dtrace_dstate_fini(dtrace_dstate_t *dstate)
    1226312270{
     
    1230612313        dtrace_speculation_clean(state);
    1230712314}
     12315#ifdef VBOX
     12316static DECLCALLBACK(void) dtrace_state_clean_timer(PRTTIMER pTimer, void *pvUser, uint64_t iTick)
     12317{
     12318    dtrace_state_clean((dtrace_state_t *)pvUser);
     12319    NOREF(pTimer); NOREF(iTick);
     12320}
     12321#endif
    1230812322
    1230912323static void
     
    1233412348}
    1233512349
    12336 dtrace_state_t *
     12350#ifdef VBOX
     12351static DECLCALLBACK(void) dtrace_state_deadman_timer(PRTTIMER pTimer, void *pvUser, uint64_t iTick)
     12352{
     12353    dtrace_state_deadman((dtrace_state_t *)pvUser);
     12354    NOREF(pTimer); NOREF(iTick);
     12355}
     12356#endif
     12357
     12358VBDTSTATIC dtrace_state_t *
    1233712359dtrace_state_create(dev_t *devp, cred_t *cr)
    1233812360{
     
    1257312595        }
    1257412596
    12575         for (size = opt[which]; size >= sizeof (uint64_t); size >>= 1) {
     12597        for (size = opt[which]; size >= VBDTCAST(dtrace_optval_t)sizeof (uint64_t); size >>= 1) {
    1257612598                /*
    1257712599                 * The size must be 8-byte aligned.  If the size is not 8-byte
     
    1266012682        dtrace_speculation_t *spec;
    1266112683        dtrace_buffer_t *buf;
     12684#ifndef VBOX
    1266212685        cyc_handler_t hdlr;
    1266312686        cyc_time_t when;
     12687#endif
    1266412688        int rval = 0, i, bufsize = NCPU * sizeof (dtrace_buffer_t);
    1266512689        dtrace_icookie_t cookie;
     
    1276812792                         */
    1276912793                        if (opt[DTRACEOPT_BUFSIZE] == DTRACEOPT_UNSET ||
    12770                             opt[DTRACEOPT_BUFSIZE] < state->dts_needed) {
     12794                            opt[DTRACEOPT_BUFSIZE] < VBDTCAST(dtrace_optval_t)state->dts_needed) {
    1277112795                                opt[DTRACEOPT_BUFSIZE] = state->dts_needed;
    1277212796                        }
     
    1283912863                opt[DTRACEOPT_CLEANRATE] = dtrace_cleanrate_max;
    1284012864
     12865#ifndef VBOX
    1284112866        hdlr.cyh_func = (cyc_func_t)dtrace_state_clean;
    1284212867        hdlr.cyh_arg = state;
     
    1285712882        state->dts_alive = state->dts_laststatus = dtrace_gethrtime();
    1285812883        state->dts_deadman = cyclic_add(&hdlr, &when);
     12884#else  /* VBOX */
     12885
     12886        rval = RTTimerCreateEx(&state->dts_cleaner, opt[DTRACEOPT_CLEANRATE],
     12887                               RTTIMER_FLAGS_CPU_ANY, dtrace_state_clean_timer, state);
     12888        if (RT_FAILURE(rval)) {
     12889            rval = RTErrConvertToErrno(rval);
     12890            goto err;
     12891        }
     12892
     12893        state->dts_alive = state->dts_laststatus = dtrace_gethrtime();
     12894        rval = RTTimerCreateEx(&state->dts_deadman, dtrace_deadman_interval,
     12895                               RTTIMER_FLAGS_CPU_ANY, dtrace_state_deadman_timer, state);
     12896        if (RT_FAILURE(rval)) {
     12897            RTTimerDestroy(state->dts_cleaner);
     12898            state->dts_cleaner = CYCLIC_NONE;
     12899            state->dts_deadman = CYCLIC_NONE;
     12900            rval = RTErrConvertToErrno(rval);
     12901            goto err;
     12902        }
     12903#endif /* VBOX */
    1285912904
    1286012905        state->dts_activity = DTRACE_ACTIVITY_WARMUP;
     
    1319613241                }
    1319713242
     13243#ifndef VBOX
    1319813244                /*
    1319913245                 * We want to create anonymous state, so we need to transition
     
    1320813254                        break;
    1320913255                }
     13256#endif
    1321013257
    1321113258                /*
     
    1328813335                return;
    1328913336
    13290         ASSERT(vstate->dtvs_nlocals <= dtrace_helptrace_nlocals);
     13337        ASSERT(vstate->dtvs_nlocals <= VBDTCAST(int32_t)dtrace_helptrace_nlocals);
    1329113338
    1329213339        /*
     
    1330313350                next = dtrace_helptrace_next;
    1330413351
    13305                 if (next + size < dtrace_helptrace_bufsize) {
     13352                if (next + size < VBDTCAST(unsigned)dtrace_helptrace_bufsize) {
    1330613353                        nnext = next + size;
    1330713354                } else {
     
    1332613373        ent->dtht_illval = cpu_core[VBDT_GET_CPUID()].cpuc_dtrace_illval;
    1332713374
    13328         for (i = 0; i < vstate->dtvs_nlocals; i++) {
     13375        for (i = 0; VBDTCAST(int32_t)i < vstate->dtvs_nlocals; i++) {
    1332913376                dtrace_statvar_t *svar;
    1333013377
     
    1334213389    dtrace_state_t *state, uint64_t arg0, uint64_t arg1)
    1334313390{
    13344         uint16_t *flags = &cpu_core[VBDT_GET_CPUID()].cpuc_dtrace_flags;
     13391        VBDTTYPE(uint16_t volatile *, uint16_t *)flags = &cpu_core[VBDT_GET_CPUID()].cpuc_dtrace_flags;
    1334513392        uint64_t sarg0 = mstate->dtms_arg[0];
    1334613393        uint64_t sarg1 = mstate->dtms_arg[1];
     
    1345413501        dtrace_helpers_t *help = p->p_dtrace_helpers;
    1345513502        dtrace_vstate_t *vstate;
    13456         int i;
     13503        VBDTTYPE(uint_t,int) i;
    1345713504
    1345813505        ASSERT(MUTEX_HELD(&dtrace_lock));
     
    1361813665        }
    1361913666
    13620         if (vstate->dtvs_nlocals > dtrace_helptrace_nlocals) {
     13667        if (vstate->dtvs_nlocals > VBDTCAST(int32_t)dtrace_helptrace_nlocals) {
    1362113668                dtrace_helptrace_nlocals = vstate->dtvs_nlocals;
    1362213669                dtrace_helptrace_next = 0;
     
    1367613723                 */
    1367713724
    13678                 int i;
     13725                VBDTTYPE(uint_t,int) i;
    1367913726                mutex_exit(&dtrace_lock);
    1368013727
     
    1400914056         */
    1401014057        if (dhp != NULL) {
    14011                 for (i = 0; i < dof->dofh_secnum; i++) {
     14058                for (i = 0; i < VBDTCAST(int)dof->dofh_secnum; i++) {
    1401214059                        dof_sec_t *sec = (dof_sec_t *)(uintptr_t)(daddr +
    1401314060                            dof->dofh_secoff + i * dof->dofh_secsize);
     
    1410414151        dtrace_vstate_t *vstate;
    1410514152        proc_t *p = curproc;
    14106         int i;
     14153        VBDTTYPE(uint_t, int) i;
    1410714154
    1410814155        mutex_enter(&dtrace_lock);
     
    1423214279
    1423314280                        for (j = 0; j < new->dtha_nactions; j++) {
    14234                                 dtrace_difo_t *dp = helper->dtha_actions[j];
    14235 
    14236                                 ASSERT(dp != NULL);
    14237                                 dp = dtrace_difo_duplicate(dp, vstate);
    14238                                 new->dtha_actions[j] = dp;
     14281                                dtrace_difo_t *dp2 = helper->dtha_actions[j];
     14282
     14283                                ASSERT(dp2 != NULL);
     14284                                dp2 = dtrace_difo_duplicate(dp2, vstate);
     14285                                new->dtha_actions[j] = dp2;
    1423914286                        }
    1424014287
     
    1425814305                newhelp->dthps_provs = kmem_alloc(newhelp->dthps_nprovs *
    1425914306                    sizeof (dtrace_helper_provider_t *), KM_SLEEP);
    14260                 for (i = 0; i < newhelp->dthps_nprovs; i++) {
     14307                for (i = 0; i < VBDTCAST(int)newhelp->dthps_nprovs; i++) {
    1426114308                        newhelp->dthps_provs[i] = help->dthps_provs[i];
    1426214309                        newhelp->dthps_provs[i]->dthp_ref++;
     
    1427114318                dtrace_helper_provider_register(to, newhelp, NULL);
    1427214319}
     14320
     14321#ifndef VBOX
    1427314322
    1427414323/*
     
    1442214471}
    1442314472
    14424 void
     14473#endif /* !VBOX */
     14474
     14475VBDTSTATIC void
    1442514476dtrace_suspend(void)
    1442614477{
     
    1442814479}
    1442914480
    14430 void
     14481VBDTSTATIC void
    1443114482dtrace_resume(void)
    1443214483{
    1443314484        dtrace_probe_foreach(offsetof(dtrace_pops_t, dtps_resume));
    1443414485}
     14486
     14487#ifdef VBOX
     14488typedef enum {
     14489    CPU_INVALID,
     14490    CPU_CONFIG,
     14491    CPU_UNCONFIG
     14492} cpu_setup_t;
     14493#endif
     14494
    1443514495
    1443614496static int
     
    1449314553}
    1449414554
     14555#ifndef VBOX
    1449514556static void
    1449614557dtrace_cpu_setup_initial(processorid_t cpu)
     
    1449814559        (void) dtrace_cpu_setup(CPU_CONFIG, cpu);
    1449914560}
     14561#endif /* !VBOX */
    1450014562
    1450114563static void
     
    1456014622        }
    1456114623
     14624#ifndef VBOX
    1456214625        if (ddi_create_minor_node(devi, DTRACEMNR_DTRACE, S_IFCHR,
    1456314626            DTRACEMNRN_DTRACE, DDI_PSEUDO, NULL) == DDI_FAILURE ||
     
    1457214635                return (DDI_FAILURE);
    1457314636        }
     14637#endif
    1457414638
    1457514639        ddi_report_dev(devi);
    1457614640        dtrace_devi = devi;
    1457714641
     14642#ifndef VBOX
    1457814643        dtrace_modload = dtrace_module_loaded;
    1457914644        dtrace_modunload = dtrace_module_unloaded;
     
    1458714652
    1458814653        register_cpu_setup_func((cpu_setup_func_t *)dtrace_cpu_setup, NULL);
     14654#else
     14655        /** @todo some of these hooks needs checking out! */
     14656#endif
    1458914657
    1459014658        ASSERT(MUTEX_HELD(&cpu_lock));
     
    1459514663            UINT32_MAX - DTRACEMNRN_CLONE, 1, NULL, NULL, NULL, 0,
    1459614664            VM_SLEEP | VMC_IDENTIFIER);
     14665#ifndef VBOX
    1459714666        dtrace_taskq = taskq_create("dtrace_taskq", 1, maxclsyspri,
    1459814667            1, INT_MAX, 0);
     14668#endif
    1459914669
    1460014670        dtrace_state_cache = kmem_cache_create("dtrace_state_cache",
     
    1474514815        dtrace_membar_producer();
    1474614816
     14817#ifndef VBOX
    1474714818        /*
    1474814819         * If the kernel debugger is active (that is, if the kernel debugger
     
    1475514826                return (EBUSY);
    1475614827        }
     14828#endif
    1475714829
    1475814830        state = dtrace_state_create(devp, cred_p);
     
    1476014832
    1476114833        if (state == NULL) {
     14834#ifndef VBOX
    1476214835                if (--dtrace_opens == 0 && dtrace_anon.dta_enabling == NULL)
    1476314836                        (void) kdi_dtrace_set(KDI_DTSET_DTRACE_DEACTIVATE);
     14837#endif
    1476414838                mutex_exit(&dtrace_lock);
    1476514839                return (EAGAIN);
     
    1479714871        ASSERT(dtrace_opens > 0);
    1479814872
     14873#ifndef VBOX
    1479914874        /*
    1480014875         * Only relinquish control of the kernel debugger interface when there
     
    1480314878        if (--dtrace_opens == 0 && dtrace_anon.dta_enabling == NULL)
    1480414879                (void) kdi_dtrace_set(KDI_DTSET_DTRACE_DEACTIVATE);
     14880#endif
    1480514881
    1480614882        mutex_exit(&dtrace_lock);
     
    1536615442                        return (EFAULT);
    1536715443
    15368                 if (desc.dtbd_cpu < 0 || desc.dtbd_cpu >= NCPU)
     15444                if (/*VBox value is is unsigned: desc.dtbd_cpu < 0 ||*/ desc.dtbd_cpu >= NCPU)
    1536915445                        return (EINVAL);
    1537015446
     
    1567115747                dtrace_state_destroy(state);
    1567215748
     15749#ifndef VBOX
    1567315750                /*
    1567415751                 * If we're being detached with anonymous state, we need to
     
    1567615753                 */
    1567715754                (void) kdi_dtrace_set(KDI_DTSET_DTRACE_DEACTIVATE);
     15755#endif
    1567815756        }
    1567915757
    1568015758        bzero(&dtrace_anon, sizeof (dtrace_anon_t));
     15759#ifndef VBOX /** @todo CPU hooks */
    1568115760        unregister_cpu_setup_func((cpu_setup_func_t *)dtrace_cpu_setup, NULL);
     15761#endif
    1568215762        dtrace_cpu_init = NULL;
    1568315763        dtrace_helpers_cleanup = NULL;
     
    1572015800        }
    1572115801
     15802#ifndef VBOX
    1572215803        ddi_remove_minor_node(dtrace_devi, NULL);
     15804#endif
    1572315805        dtrace_devi = NULL;
    1572415806
     
    1574015822         * performing any operation.
    1574115823         */
     15824#ifndef VBOX
    1574215825        taskq_destroy(dtrace_taskq);
    1574315826        dtrace_taskq = NULL;
     15827#endif
    1574415828
    1574515829        return (DDI_SUCCESS);
    1574615830}
    1574715831
     15832#ifndef VBOX
    1574815833/*ARGSUSED*/
    1574915834static int
     
    1582915914        return (mod_remove(&modlinkage));
    1583015915}
     15916
     15917#endif /* !VBOX */
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/uts/common/sys/dtrace.h

    r53641 r53642  
    467467        (((sizeof (uint64_t) * NBBY) - 1) * 2 + 1)
    468468
    469 #define DTRACE_QUANTIZE_ZEROBUCKET      ((sizeof (uint64_t) * NBBY) - 1)
     469#define DTRACE_QUANTIZE_ZEROBUCKET      (VBDTCAST(int)(sizeof (uint64_t) * NBBY) - 1)
    470470
    471471#define DTRACE_QUANTIZE_BUCKETVAL(buck)                                 \
     
    21962196extern void (*dtrace_modload)(struct modctl *);
    21972197extern void (*dtrace_modunload)(struct modctl *);
    2198 extern void (*dtrace_helpers_cleanup)();
     2198extern void (*dtrace_helpers_cleanup)(VBDTVOID);
    21992199extern void (*dtrace_helpers_fork)(proc_t *parent, proc_t *child);
    2200 extern void (*dtrace_cpustart_init)();
    2201 extern void (*dtrace_cpustart_fini)();
    2202 
    2203 extern void (*dtrace_debugger_init)();
    2204 extern void (*dtrace_debugger_fini)();
     2200extern void (*dtrace_cpustart_init)(VBDTVOID);
     2201extern void (*dtrace_cpustart_fini)(VBDTVOID);
     2202
     2203extern void (*dtrace_debugger_init)(VBDTVOID);
     2204extern void (*dtrace_debugger_fini)(VBDTVOID);
    22052205extern dtrace_cacheid_t dtrace_predcache_id;
    22062206
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/uts/common/sys/dtrace_impl.h

    r53636 r53642  
    12621262extern int dtrace_assfail(const char *, const char *, int);
    12631263extern int dtrace_attached(void);
    1264 extern hrtime_t dtrace_gethrestime();
     1264extern hrtime_t dtrace_gethrestime(void);
    12651265
    12661266#ifdef __sparc
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette