VirtualBox

Ignore:
Timestamp:
Jan 2, 2015 12:14:42 PM (10 years ago)
Author:
vboxsync
Message:

VBoxDTrace: Made it to line 11272. (r11)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/uts/common/dtrace/dtrace.c

    r53640 r53641  
    9696# include <sys/dtrace_impl.h>
    9797# include <iprt/assert.h>
     98# include <iprt/cpuset.h>
    9899# include <iprt/mp.h>
     100# include <iprt/string.h>
    99101# include <iprt/process.h>
    100102# include <iprt/thread.h>
     103# include <limits.h>
    101104
    102105# undef NULL
     
    176179static taskq_t          *dtrace_taskq;          /* task queue */
    177180static dtrace_probe_t   **dtrace_probes;        /* array of all probes */
    178 static int              dtrace_nprobes;         /* number of probes */
     181static VBDTTYPE(uint32_t,int) dtrace_nprobes;           /* number of probes */
    179182static dtrace_provider_t *dtrace_provider;      /* provider list */
    180183static dtrace_meta_t    *dtrace_meta_pid;       /* user-land meta provider */
     
    57035706        hrtime_t now;
    57045707
     5708#ifndef VBOX
    57055709        /*
    57065710         * Kick out immediately if this CPU is still being born (in which case
     
    57105714        if (((uintptr_t)curthread & 1) || (curthread->t_flag & T_DONTDTRACE))
    57115715                return;
     5716#endif
    57125717
    57135718        cookie = dtrace_interrupt_disable();
     
    57265731        }
    57275732
     5733#ifndef VBOX
    57285734        if (panic_quiesce) {
    57295735                /*
     
    57335739                return;
    57345740        }
     5741#endif
    57355742
    57365743        now = dtrace_gethrtime();
     
    58565863                                    s_cr->cr_gid != cr->cr_rgid ||
    58575864                                    s_cr->cr_gid != cr->cr_sgid ||
    5858                                     (proc = ttoproc(curthread)) == NULL ||
     5865                                    (proc = VBDT_GET_PROC()) == NULL ||
    58595866                                    (proc->p_flag & SNOCD))
    58605867                                        continue;
    58615868                        }
    58625869
     5870#ifndef VBOX
    58635871                        if (ecb->dte_cond & DTRACE_COND_ZONEOWNER) {
    58645872                                cred_t *cr;
     
    58735881                                        continue;
    58745882                        }
     5883#endif
    58755884                }
    58765885
     
    60046013
    60056014                                dtrace_getpcstack((pc_t *)(tomax + valoffs),
    6006                                     size / sizeof (pc_t), probe->dtpr_aframes,
     6015                                    VBDTCAST(int)(size / sizeof (pc_t)), probe->dtpr_aframes,
    60076016                                    DTRACE_ANCHORED(probe) ? NULL :
    60086017                                    (uint32_t *)arg0);
     
    61446153                        case DTRACEACT_UMOD:
    61456154                        case DTRACEACT_UADDR: {
     6155#ifndef VBOX
    61466156                                struct pid *pid = curthread->t_procp->p_pidp;
    61476157
     
    61536163                                DTRACE_STORE(uint64_t, tomax,
    61546164                                    valoffs + sizeof (uint64_t), val);
    6155 
     6165#else
     6166                                DTRACE_CPUFLAG_SET(CPU_DTRACE_UPRIV);
     6167#endif
    61566168                                continue;
    61576169                        }
     
    69256937         */
    69266938        if (hash == NULL) {
    6927                 for (i = 0; i < dtrace_nprobes; i++) {
     6939                for (i = 0; i < VBDTCAST(dtrace_id_t)dtrace_nprobes; i++) {
    69286940                        if ((probe = dtrace_probes[i]) == NULL ||
    69296941                            dtrace_match_probe(probe, pkp, priv, uid,
     
    71777189        dtrace_provider_t *old = (dtrace_provider_t *)id;
    71787190        dtrace_provider_t *prev = NULL;
    7179         int i, self = 0;
     7191        VBDTTYPE(uint32_t,int) i, self = 0;
    71807192        dtrace_probe_t *probe, *first = NULL;
    71817193
     
    73617373{
    73627374        dtrace_provider_t *prov = (dtrace_provider_t *)id;
    7363         int i;
     7375        VBDTTYPE(uint32_t,int) i;
    73647376        dtrace_probe_t *probe;
    73657377
     
    76017613dtrace_probe_provide(dtrace_probedesc_t *desc, dtrace_provider_t *prv)
    76027614{
     7615#ifndef VBOX
    76037616        struct modctl *ctl;
     7617#endif
    76047618        int all = 0;
    76057619
     
    76177631                prv->dtpv_pops.dtps_provide(prv->dtpv_arg, desc);
    76187632
     7633#ifndef VBOX
    76197634                /*
    76207635                 * Now call the per-module provide operation.  We will grab
     
    76357650
    76367651                mutex_exit(&mod_lock);
     7652#endif
    76377653        } while (all && (prv = prv->dtpv_next) != NULL);
    76387654}
     
    76497665        dtrace_probe_t *probe;
    76507666        dtrace_icookie_t cookie;
    7651         int i;
     7667        VBDTTYPE(uint32_t,int) i;
    76527668
    76537669        /*
     
    78257841        uintptr_t daddr = (uintptr_t)dhp->dofhp_dof;
    78267842        dof_hdr_t *dof = (dof_hdr_t *)daddr;
    7827         int i;
     7843        VBDTTYPE(uint32_t,int) i;
    78287844
    78297845        ASSERT(MUTEX_HELD(&dtrace_meta_lock));
     
    78827898        uintptr_t daddr = (uintptr_t)dhp->dofhp_dof;
    78837899        dof_hdr_t *dof = (dof_hdr_t *)daddr;
    7884         int i;
     7900        VBDTTYPE(uint32_t,int) i;
    78857901
    78867902        ASSERT(MUTEX_HELD(&dtrace_meta_lock));
     
    79097925        dtrace_meta_t *meta;
    79107926        dtrace_helpers_t *help, *next;
    7911         int i;
     7927        VBDTTYPE(uint32_t,int) i;
    79127928
    79137929        *idp = DTRACE_METAPROVNONE;
     
    80518067    cred_t *cr)
    80528068{
     8069#ifndef VBOX
    80538070        int err = 0, i;
     8071#else
     8072        int err = 0;
     8073        uint_t i;
     8074#endif
    80548075        int (*efunc)(uint_t pc, const char *, ...) = dtrace_difo_err;
    80558076        int kcheckload;
     
    83708391                switch (v->dtdv_scope) {
    83718392                case DIFV_SCOPE_GLOBAL:
    8372                         if (ndx < vstate->dtvs_nglobals) {
     8393                        if (VBDTCAST(int64_t)ndx < vstate->dtvs_nglobals) {
    83738394                                dtrace_statvar_t *svar;
    83748395
     
    83808401
    83818402                case DIFV_SCOPE_THREAD:
    8382                         if (ndx < vstate->dtvs_ntlocals)
     8403                        if (VBDTCAST(int64_t)ndx < vstate->dtvs_ntlocals)
    83838404                                existing = &vstate->dtvs_tlocals[ndx];
    83848405                        break;
    83858406
    83868407                case DIFV_SCOPE_LOCAL:
    8387                         if (ndx < vstate->dtvs_nlocals) {
     8408                        if (VBDTCAST(int64_t)ndx < vstate->dtvs_nlocals) {
    83888409                                dtrace_statvar_t *svar;
    83898410
     
    85978618dtrace_difo_cacheable(dtrace_difo_t *dp)
    85988619{
    8599         int i;
     8620        VBDTTYPE(uint_t,int) i;
    86008621
    86018622        if (dp == NULL)
     
    86428663dtrace_difo_hold(dtrace_difo_t *dp)
    86438664{
    8644         int i;
     8665        VBDTTYPE(uint_t,int) i;
    86458666
    86468667        ASSERT(MUTEX_HELD(&dtrace_lock));
     
    88098830dtrace_difo_init(dtrace_difo_t *dp, dtrace_vstate_t *vstate)
    88108831{
     8832#ifndef VBOX
    88118833        int i, oldsvars, osz, nsz, otlocals, ntlocals;
     8834#else
     8835        int oldsvars, osz, nsz, otlocals, ntlocals;
     8836        uint_t i;
     8837#endif
    88128838        uint_t id;
    88138839
     
    88298855                switch (scope) {
    88308856                case DIFV_SCOPE_THREAD:
    8831                         while (id >= (otlocals = vstate->dtvs_ntlocals)) {
     8857                        while (VBDTCAST(int64_t)id >= (otlocals = vstate->dtvs_ntlocals)) {
    88328858                                dtrace_difv_t *tlocals;
    88338859
     
    88798905                }
    88808906
    8881                 while (id >= (oldsvars = *np)) {
     8907                while (VBDTCAST(int64_t)id >= (oldsvars = *np)) {
    88828908                        dtrace_statvar_t **statics;
    88838909                        int newsvars, oldsize, newsize;
     
    89668992dtrace_difo_destroy(dtrace_difo_t *dp, dtrace_vstate_t *vstate)
    89678993{
    8968         int i;
     8994        VBDTTYPE(uint_t,int) i;
    89698995
    89708996        ASSERT(dp->dtdo_refcnt == 0);
     
    89999025
    90009026                id -= DIF_VAR_OTHER_UBASE;
    9001                 ASSERT(id < *np);
     9027                ASSERT(VBDTCAST(int64_t)id < *np);
    90029028
    90039029                svar = svarp[id];
     
    90299055dtrace_difo_release(dtrace_difo_t *dp, dtrace_vstate_t *vstate)
    90309056{
    9031         int i;
     9057        VBDTTYPE(uint_t,int) i;
    90329058
    90339059        ASSERT(MUTEX_HELD(&dtrace_lock));
     
    90569082{
    90579083        char *fmt, **new;
    9058         uint16_t ndx, len = strlen(str) + 1;
     9084        uint16_t ndx, len = VBDTCAST(uint16_t)strlen(str) + 1;
    90599085
    90609086        fmt = kmem_zalloc(len, KM_SLEEP);
     
    92769302        epid = state->dts_epid++;
    92779303
    9278         if (epid - 1 >= state->dts_necbs) {
     9304        if (VBDTCAST(int64_t)epid - 1 >= state->dts_necbs) {
    92799305                dtrace_ecb_t **oecbs = state->dts_ecbs, **ecbs;
    92809306                int necbs = state->dts_necbs << 1;
     
    95579583        }
    95589584
    9559         agg->dtag_action.dta_rec.dtrd_size = size;
     9585        agg->dtag_action.dta_rec.dtrd_size = VBDTCAST(uint32_t)size;
    95609586
    95619587        if (ntuple == 0)
     
    96079633            VM_BESTFIT | VM_SLEEP);
    96089634
    9609         if (aggid - 1 >= state->dts_naggregations) {
     9635        if (VBDTCAST(int64_t)aggid - 1 >= state->dts_naggregations) {
    96109636                dtrace_aggregation_t **oaggs = state->dts_aggregations;
    96119637                dtrace_aggregation_t **aggs;
     
    97479773                        }
    97489774
    9749                         size = nframes * sizeof (pc_t);
     9775                        size = VBDTCAST(uint32_t)(nframes * sizeof (pc_t));
    97509776                        break;
    97519777
     
    97729798                         * Save a slot for the pid.
    97739799                         */
    9774                         size = (nframes + 1) * sizeof (uint64_t);
     9800                        size = VBDTCAST(uint32_t)((nframes + 1) * sizeof (uint64_t));
    97759801                        size += DTRACE_USTACK_STRSIZE(arg);
    97769802                        size = P2ROUNDUP(size, (uint32_t)(sizeof (uintptr_t)));
     
    1016010186        ASSERT(MUTEX_HELD(&dtrace_lock));
    1016110187
    10162         if (id == 0 || id > state->dts_necbs)
     10188        if (id == 0 || VBDTCAST(int64_t)id > state->dts_necbs)
    1016310189                return (NULL);
    1016410190
     
    1017610202        ASSERT(MUTEX_HELD(&dtrace_lock));
    1017710203
    10178         if (id == 0 || id > state->dts_naggregations)
     10204        if (id == 0 || VBDTCAST(int64_t)id > state->dts_naggregations)
    1017910205                return (NULL);
    1018010206
     
    1025610282    processorid_t cpu)
    1025710283{
     10284#ifndef VBOX
    1025810285        cpu_t *cp;
     10286#else
     10287        RTCPUSET CpuSet;
     10288        unsigned iCpu;
     10289#endif
    1025910290        dtrace_buffer_t *buf;
    1026010291
     
    1026210293        ASSERT(MUTEX_HELD(&dtrace_lock));
    1026310294
    10264         if (size > dtrace_nonroot_maxsize &&
    10265             !PRIV_POLICY_CHOICE(CRED(), PRIV_ALL, B_FALSE))
     10295        if (VBDTCAST(int64_t)size > dtrace_nonroot_maxsize
     10296#ifndef VBOX
     10297            && !PRIV_POLICY_CHOICE(CRED(), PRIV_ALL, B_FALSE)
     10298#endif
     10299            )
    1026610300                return (EFBIG);
    1026710301
     10302#ifndef VBOX
    1026810303        cp = cpu_list;
    10269 
     10304#else
     10305        RTMpGetSet(&CpuSet);
     10306#endif
     10307
     10308#ifndef VBOX
    1027010309        do {
    1027110310                if (cpu != DTRACE_CPUALL && cpu != cp->cpu_id)
     
    1027310312
    1027410313                buf = &bufs[cp->cpu_id];
     10314#else
     10315    for (iCpu = 0; iCpu < RTCPUSET_MAX_CPUS; iCpu++) {
     10316                if (   !RTCpuSetIsMember(&CpuSet, iCpu)
     10317                        || (cpu != DTRACE_CPUALL && cpu != iCpu))
     10318                        continue;
     10319
     10320                buf = &bufs[iCpu];
     10321#endif
    1027510322
    1027610323                /*
     
    1029910346                if ((buf->dtb_xamot = kmem_zalloc(size, KM_NOSLEEP)) == NULL)
    1030010347                        goto err;
     10348#ifndef VBOX
    1030110349        } while ((cp = cp->cpu_next) != cpu_list);
     10350#else
     10351        }
     10352#endif
    1030210353
    1030310354        return (0);
    1030410355
    1030510356err:
     10357#ifndef VBOX
    1030610358        cp = cpu_list;
    1030710359
     
    1031110363
    1031210364                buf = &bufs[cp->cpu_id];
     10365#else
     10366                for (iCpu = 0; iCpu < RTCPUSET_MAX_CPUS; iCpu++) {
     10367                        if (   !RTCpuSetIsMember(&CpuSet, iCpu)
     10368                                || (cpu != DTRACE_CPUALL && cpu != iCpu))
     10369                                continue;
     10370
     10371                        buf = &bufs[iCpu];
     10372#endif
    1031310373
    1031410374                if (buf->dtb_xamot != NULL) {
     
    1032610386                buf->dtb_xamot = NULL;
    1032710387                buf->dtb_size = 0;
     10388#ifndef VBOX
    1032810389        } while ((cp = cp->cpu_next) != cpu_list);
     10390#else
     10391        }
     10392#endif
    1032910393
    1033010394        return (ENOMEM);
     
    1037910443                }
    1038010444
    10381                 if ((soffs = offs + needed) > buf->dtb_size) {
     10445                if (VBDTCAST(uintptr_t)(soffs = offs + needed) > buf->dtb_size) {
    1038210446                        dtrace_buffer_drop(buf);
    1038310447                        return (-1);
     
    1045010514                         * offset to the end (there may be old gunk there).
    1045110515                         */
    10452                         while (offs < buf->dtb_size)
     10516                        while (VBDTCAST(uintptr_t)offs < buf->dtb_size)
    1045310517                                tomax[offs++] = 0;
    1045410518
     
    1048710551                }
    1048810552
    10489                 while (offs + total > woffs) {
     10553                while (VBDTCAST(uintptr_t)offs + total > VBDTCAST(uintptr_t)woffs) {
    1049010554                        dtrace_epid_t epid = *(uint32_t *)(tomax + woffs);
    1049110555                        size_t size;
     
    1049410558                                size = sizeof (uint32_t);
    1049510559                        } else {
    10496                                 ASSERT(epid <= state->dts_necbs);
     10560                                ASSERT(VBDTCAST(int64_t)epid <= state->dts_necbs);
    1049710561                                ASSERT(state->dts_ecbs[epid - 1] != NULL);
    1049810562
     
    1052910593                                        woffs = total;
    1053010594
    10531                                         while (woffs < buf->dtb_size)
     10595                                        while (VBDTCAST(uintptr_t)woffs < buf->dtb_size)
    1053210596                                                tomax[woffs++] = 0;
    1053310597                                }
     
    1101611080                cred_t *cr = enab->dten_vstate->dtvs_state->dts_cred.dcr_cred;
    1101711081
     11082#ifndef VBOX
    1101811083                if (INGLOBALZONE(curproc) ||
    1101911084                    cr != NULL && getzoneid() == crgetzoneid(cr))
     11085#endif
    1102011086                        (void) dtrace_enabling_match(enab, NULL);
    1102111087        }
Note: See TracChangeset for help on using the changeset viewer.

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