VirtualBox

Changeset 53652 in vbox for trunk


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

VBoxDTrace: porting libdtrace... (r22)

Location:
trunk/src/VBox/ExtPacks/VBoxDTrace
Files:
35 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ExtPacks/VBoxDTrace/Config.kmk

    r53646 r53652  
    3636VBOXDT_PATH_UTS  = $(VBOXDT_PATH_ONNV)/uts
    3737VBOXDT_PATH_CMD  = $(VBOXDT_PATH_ONNV)/cmd
     38VBOXDT_PATH_LIBCTF    = $(VBOXDT_PATH_ONNV)/lib/libctf
    3839VBOXDT_PATH_LIBDTRACE = $(VBOXDT_PATH_ONNV)/lib/libdtrace
  • trunk/src/VBox/ExtPacks/VBoxDTrace/VBoxDTrace/Makefile.kmk

    r53647 r53652  
    3737        ../include \
    3838        $(VBOXDT_PATH_UTS)/common \
     39        $(VBOXDT_PATH_LIBCTF)/common \
    3940        $(VBOXDT_PATH_LIBDTRACE)/common
    4041VBoxDTrace_SOURCES = \
    41         $(VBOXDT_PATH_CMD)/dtrace/dtrace.c
     42        $(VBOXDT_PATH_CMD)/dtrace/dtrace.c \
     43        \
     44        $(VBOXDT_PATH_LIBDTRACE)/common/dt_open.c \
     45        $(VBOXDT_PATH_LIBDTRACE)/common/dt_aggregate.c \
     46        $(VBOXDT_PATH_LIBDTRACE)/common/dt_error.c \
     47        $(VBOXDT_PATH_LIBDTRACE)/common/dt_work.c \
     48        $(VBOXDT_PATH_LIBDTRACE)/common/dt_proc.c \
    4249
    4350VBoxDTrace_VBOX_TODO = \
    44         $(VBOXDT_PATH_LIBDTRACE)/common/dt_aggregate.c \
    4551        $(VBOXDT_PATH_LIBDTRACE)/common/dt_as.c \
    4652        $(VBOXDT_PATH_LIBDTRACE)/common/dt_buf.c \
     
    5157        $(VBOXDT_PATH_LIBDTRACE)/common/dt_dis.c \
    5258        $(VBOXDT_PATH_LIBDTRACE)/common/dt_dof.c \
    53         $(VBOXDT_PATH_LIBDTRACE)/common/dt_error.c \
    5459        $(VBOXDT_PATH_LIBDTRACE)/common/dt_errtags.c \
    5560        $(VBOXDT_PATH_LIBDTRACE)/common/dt_handle.c \
     
    5863        $(VBOXDT_PATH_LIBDTRACE)/common/dt_link.c \
    5964        $(VBOXDT_PATH_LIBDTRACE)/common/dt_list.c \
    60         $(VBOXDT_PATH_LIBDTRACE)/common/dt_open.c \
    6165        $(VBOXDT_PATH_LIBDTRACE)/common/dt_options.c \
    6266        $(VBOXDT_PATH_LIBDTRACE)/common/dt_program.c \
     
    6973        $(VBOXDT_PATH_LIBDTRACE)/common/dt_pragma.c \
    7074        $(VBOXDT_PATH_LIBDTRACE)/common/dt_printf.c \
    71         $(VBOXDT_PATH_LIBDTRACE)/common/dt_proc.c \
    7275        $(VBOXDT_PATH_LIBDTRACE)/common/dt_provider.c \
    7376        $(VBOXDT_PATH_LIBDTRACE)/common/dt_regset.c \
     
    7578        $(VBOXDT_PATH_LIBDTRACE)/common/dt_strtab.c \
    7679        $(VBOXDT_PATH_LIBDTRACE)/common/dt_subr.c \
    77         $(VBOXDT_PATH_LIBDTRACE)/common/dt_work.c \
    7880        $(VBOXDT_PATH_LIBDTRACE)/common/dt_xlator.c
    7981
  • trunk/src/VBox/ExtPacks/VBoxDTrace/include/VBoxDTraceTypes.h

    r53648 r53652  
    3434#include <iprt/types.h>
    3535#include <iprt/stdarg.h>
     36#include <iprt/param.h>
     37#ifdef IN_RING3
     38# include <sys/types.h>
     39#endif
    3640
    3741RT_C_DECLS_BEGIN
     
    4044
    4145typedef unsigned char               uchar_t;
     46typedef unsigned short              ushort_t;
    4247typedef unsigned int                uint_t;
    4348typedef uintptr_t                   ulong_t;
     49typedef uint64_t                    hrtime_t;
     50typedef RTCCUINTREG                 greg_t;
    4451typedef uintptr_t                   pc_t;
     52typedef uintptr_t                   id_t;
    4553typedef unsigned int                model_t;
    4654typedef uint32_t                    zoneid_t;
     
    5462#define NANOSEC                     RT_NS_1SEC
    5563#define MILLISEC                    RT_MS_1SEC
     64#define MAXPATHLEN                  RTPATH_MAX
     65#define PATH_MAX                    RTPATH_MAX
     66#define NBBY                        8
     67#define NCPU                        RTCPUSET_MAX_CPUS
    5668
    5769#if defined(RT_ARCH_X86)
    5870# ifndef __i386
    59 #  define __i386            1
     71#  define __i386                1
     72# endif
     73# ifndef __x86
     74#  define __x86                 1
    6075# endif
    6176
    6277#elif defined(RT_ARCH_AMD64)
    6378# ifndef __x86_64
    64 #  define __x86_64          1
     79#  define __x86_64              1
     80# endif
     81# ifndef __x86
     82#  define __x86                 1
    6583# endif
    6684
     
    94112
    95113/*
    96  * CTF - probably needs to be ported wholesale or smth.
    97  */
    98 #define CTF_MODEL_NATIVE            1
    99 typedef struct VBoxDtCtfFile        ctf_file_t;
    100 typedef intptr_t                    ctf_id_t;
    101 
    102 
     114 * Errno defines compatible with the CRT of the given host...
     115 */
    103116#ifdef IN_RING0
     117# define EINVAL                 (22)
     118# define EBUSY                  (16)
     119# define EFBIG                  (27)
     120# define ENOMEM                 (12)
     121# define ENOSPC                 (28)
     122# define ENOENT                 (2)
     123# define EFAULT                 (14)
     124# define E2BIG                  (7)
     125# define EACCES                 (13)
     126# define ENXIO                  (6)
     127# define EAGAIN                 (11)
     128# define ENOTTY                 (25)
     129# define ESRCH                  (3)
     130#endif
     131#if defined(_MSC_VER) || defined(IN_RING0)
     132# define EALREADY               (114)
     133#endif
     134
     135
     136#ifdef IN_RING0
    104137
    105138/*
    106139 * Kernel stuff...
    107140 */
    108 typedef uint64_t                    hrtime_t;
    109 typedef RTCCUINTREG                 greg_t;
    110 
    111141#define P2ROUNDUP(uWhat, uAlign)    ( ((uWhat) + (uAlign) - 1) & ~(uAlign - 1) )
    112142#define IS_P2ALIGNED(uWhat, uAlign) ( !((uWhat) & ((uAlign) - 1)) )
     
    114144#define MIN(a1, a2)                 RT_MIN(a1, a2)
    115145
    116 #define NBBY                        8
    117 #define NCPU                        RTCPUSET_MAX_CPUS
    118146#define B_FALSE                     (0)
    119147#define B_TRUE                      (1)
     
    235263void VBoxDtUPrintfV(const char *pszFormat, va_list va);
    236264
    237 
    238 /*
    239  * Errno defines compatible with the CRT of the given host...
    240  */
    241 #define EINVAL                  (22)
    242 #define EBUSY                   (16)
    243 #define EFBIG                   (27)
    244 #define ENOMEM                  (12)
    245 #define ENOSPC                  (28)
    246 #define ENOENT                  (2)
    247 #define EFAULT                  (14)
    248 #define E2BIG                   (7)
    249 #define EACCES                  (13)
    250 #define EALREADY                (114)
    251 #define ENXIO                   (6)
    252 #define EAGAIN                  (11)
    253 #define ENOTTY                  (25)
    254 #define ESRCH                   (3)
    255 
    256265/*
    257266 * Memory allocation wrappers.
     
    344353#endif /* IN_RING0 */
    345354
     355
     356#ifdef IN_RING3
     357/*
     358 * Make life a little easier in ring-3.
     359 */
     360# include <iprt/alloca.h>
     361# include <iprt/mem.h>
     362# include <iprt/string.h>
     363# include <iprt/time.h>
     364# define gethrtime()                RTTimeNanoTS()
     365
     366/* This isn't necessarily making things easier at first, but allows EF and
     367   such later on when things doesn't work right. */
     368# include <stdlib.h>
     369# include <string.h>
     370# define malloc(a_cbMem)            RTMemAlloc(a_cbMem)
     371# define realloc(a_pvOld, a_cbMem)  RTMemRealloc(a_pvOld, a_cbMem)
     372# define calloc(a_cbItem, a_cItems) RTMemAllocZ((size_t)(a_cbItem) * (a_cItems))
     373# define free(a_pvMem)              RTMemFree(a_pvMem)
     374# define strdup(a_psz)              RTStrDup(a_psz)
     375
     376#endif
     377
    346378RT_C_DECLS_END
    347379#endif
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/cmd/dtrace/dtrace.c

    r53647 r53652  
    597597
    598598        for (i = 0; i < p->dtp_argc; i++) {
    599 #ifndef VBOX /* no ctf for now  */
    600599                if (ctf_type_name(p->dtp_argv[i].dtt_ctfp,
    601600                    p->dtp_argv[i].dtt_type, buf, sizeof (buf)) == NULL)
    602 #endif
    603601                        (void) strlcpy(buf, "(unknown)", sizeof (buf));
    604602                oprintf("\t\targs[%d]: %s\n", i, buf);
     
    12711269        if (RT_FAILURE(err))
    12721270                return RTMsgInitFailure(err);
     1271        dtrace_init();
    12731272
    12741273        g_ofp = stdout;
     
    13591358                                break;
    13601359
     1360#ifndef VBOX
    13611361                        case 'G':
    1362 #ifndef VBOX
    13631362                                g_mode = DMODE_LINK;
    13641363                                g_oflags |= DTRACE_O_NODEV;
     
    13671366                                mode++;
    13681367                                break;
    1369 #else
    1370                                 fprintf(stderr, "%s: -G is not supported\n", g_pname);
    1371                                 return (E_USAGE);
    13721368#endif
    13731369
     
    13881384                                        return (usage(stderr));
    13891385#else
     1386                        case 'c':
     1387                        case 'p':
     1388                        case 'G':
     1389                                fprintf(stderr, "%s: -%c is not supported\n", g_pname, c);
     1390                                return (E_USAGE);
     1391
    13901392                        case VINF_GETOPT_NOT_OPTION:
    13911393                                g_argv[g_argc++] = (char *)ValueUnion.psz;
     
    16871689        }
    16881690
     1691#ifndef VBOX
    16891692        /*
    16901693         * In our third pass we handle any command-line options related to
     
    17301733                }
    17311734        }
     1735#endif /* !VBOX */
    17321736
    17331737        /*
     
    19681972         * using the /proc control mechanism inside of libdtrace.
    19691973         */
     1974#ifndef VBOX
    19701975        for (i = 0; i < g_psc; i++)
    19711976                dtrace_proc_continue(g_dtp, g_psv[i]);
     1977#endif
    19721978
    19731979        g_pslive = g_psc; /* count for prochandler() */
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libctf/common/libctf.h

    r53650 r53652  
    4141#define _LIBCTF_H
    4242
    43 #pragma ident   "%Z%%M% %I%     %E% SMI"
     43#ifndef VBOX
     44# pragma ident  "%Z%%M% %I%     %E% SMI"
     45#endif
    4446
    4547#include <sys/ctf_api.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_aggregate.c

    r53634 r53652  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
    2829
     
    3536#include <alloca.h>
    3637#include <limits.h>
     38#else  /* VBOX */
     39# include "dt_impl.h"
     40# ifdef _MSC_VER
     41#  pragma warning(disable:4018) /* signed/unsigned comparsion mismatch warning */
     42# endif
     43# include <iprt/mp.h>
     44#endif /* VBOX */
    3745
    3846#define DTRACE_AHASHSIZE        32779           /* big 'ol prime */
     
    4351 * they are protected by a global static lock, dt_qsort_lock.
    4452 */
     53#ifndef VBOX
    4554static pthread_mutex_t dt_qsort_lock = PTHREAD_MUTEX_INITIALIZER;
     55#else
     56RTCRITSECT dt_qsort_lock;
     57#endif
    4658
    4759static int dt_revsort;
     
    247259dt_aggregate_usym(dtrace_hdl_t *dtp, uint64_t *data)
    248260{
     261#ifndef VBOX
    249262        uint64_t pid = data[0];
    250263        uint64_t *pc = &data[1];
     
    265278        dt_proc_unlock(dtp, P);
    266279        dt_proc_release(dtp, P);
     280#endif
    267281}
    268282
     
    270284dt_aggregate_umod(dtrace_hdl_t *dtp, uint64_t *data)
    271285{
     286#ifndef VBOX
    272287        uint64_t pid = data[0];
    273288        uint64_t *pc = &data[1];
     
    288303        dt_proc_unlock(dtp, P);
    289304        dt_proc_release(dtp, P);
     305#endif
    290306}
    291307
     
    293309dt_aggregate_sym(dtrace_hdl_t *dtp, uint64_t *data)
    294310{
     311#ifndef VBOX
    295312        GElf_Sym sym;
    296313        uint64_t *pc = data;
     
    298315        if (dtrace_lookup_by_addr(dtp, *pc, &sym, NULL) == 0)
    299316                *pc = sym.st_value;
     317#endif
    300318}
    301319
     
    303321dt_aggregate_mod(dtrace_hdl_t *dtp, uint64_t *data)
    304322{
     323#ifndef VBOX
    305324        uint64_t *pc = data;
    306325        dt_module_t *dmp;
     
    325344                }
    326345        }
     346#endif
    327347}
    328348
     
    10081028        assert(agp->dtat_cpus == NULL);
    10091029
     1030#ifndef VBOX
    10101031        agp->dtat_maxcpu = dt_sysconf(dtp, _SC_CPUID_MAX) + 1;
    10111032        agp->dtat_ncpu = dt_sysconf(dtp, _SC_NPROCESSORS_MAX);
     1033#else
     1034        agp->dtat_maxcpu = RTMpGetMaxCpuId() + 1;
     1035        agp->dtat_ncpu = RTMpGetCount();
     1036#endif
    10121037        agp->dtat_cpus = malloc(agp->dtat_ncpu * sizeof (processorid_t));
    10131038
     
    12431268                sorted[i++] = h;
    12441269
     1270#ifndef VBOX
    12451271        (void) pthread_mutex_lock(&dt_qsort_lock);
     1272#else
     1273        RTCritSectEnter(&dt_qsort_lock);
     1274#endif
    12461275
    12471276        if (sfunc == NULL) {
     
    12571286        }
    12581287
     1288#ifndef VBOX
    12591289        (void) pthread_mutex_unlock(&dt_qsort_lock);
     1290#else
     1291        RTCritSectLeave(&dt_qsort_lock);
     1292#endif
    12601293
    12611294        for (i = 0; i < nentries; i++) {
     
    16521685         * comparison and sorting.
    16531686         */
     1687#ifndef VBOX
    16541688        (void) pthread_mutex_lock(&dt_qsort_lock);
     1689#else
     1690        RTCritSectEnter(&dt_qsort_lock);
     1691#endif
    16551692
    16561693        qsort(sorted, nentries, sizeof (dt_ahashent_t *),
     
    16811718
    16821719                if ((nbundle = dt_zalloc(dtp, bundlesize)) == NULL) {
     1720#ifndef VBOX
    16831721                        (void) pthread_mutex_unlock(&dt_qsort_lock);
     1722#else
     1723                        RTCritSectLeave(&dt_qsort_lock);
     1724#endif
    16841725                        goto out;
    16851726                }
    16861727
    1687                 for (j = start; j < i; j++) {
     1728                for (j = VBDTCAST(int)start; j < i; j++) {
    16881729                        dtrace_aggvarid_t id = dt_aggregate_aggvarid(sorted[j]);
    16891730
     
    17311772            dt_aggregate_bundlecmp);
    17321773
     1774#ifndef VBOX
    17331775        (void) pthread_mutex_unlock(&dt_qsort_lock);
     1776#else
     1777        RTCritSectLeave(&dt_qsort_lock);
     1778#endif
    17341779
    17351780        /*
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_as.h

    r53634 r53652  
    2828#define _DT_AS_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
    3132
    3233#include <sys/types.h>
     34#endif
    3335#include <sys/dtrace.h>
    3436
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_buf.h

    r53634 r53652  
    2828#define _DT_BUF_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
     32#endif
    3133
    3234#ifdef  __cplusplus
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_decl.h

    r53634 r53652  
    2828#define _DT_DECL_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
    3132
    3233#include <sys/types.h>
     34#endif
    3335#include <libctf.h>
    3436#include <dtrace.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_dof.h

    r53634 r53652  
    2828#define _DT_DOF_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
     32#endif
    3133
    3234#include <dtrace.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_error.c

    r53634 r53652  
    2424 */
    2525
     26#ifndef VBOX
    2627#include <strings.h>
     28#endif
    2729#include <dt_impl.h>
    2830
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_errtags.h

    r53634 r53652  
    2828#define _DT_ERRTAGS_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
     32#endif
    3133
    3234#ifdef  __cplusplus
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_ident.h

    r53634 r53652  
    2828#define _DT_IDENT_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
     32#endif
    3133
    3234#include <libctf.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_impl.h

    r53634 r53652  
    2828#define _DT_IMPL_H
    2929
     30#ifndef VBOX
    3031#include <sys/param.h>
    3132#include <sys/objfs.h>
     
    3536#include <gelf.h>
    3637#include <synch.h>
     38#else  /* VBOX */
     39# include <setjmp.h>
     40# include <libctf.h>
     41# include <dtrace.h>
     42# include <errno.h>
     43# include <iprt/assert.h>
     44# define assert(expr)   Assert(expr)
     45#endif /* VBOX*/
     46
    3747
    3848#ifdef  __cplusplus
     
    7989        uint_t (*do_syminit)(struct dt_module *);
    8090        void (*do_symsort)(struct dt_module *);
     91#ifndef VBOX
    8192        GElf_Sym *(*do_symname)(struct dt_module *,
    8293            const char *, GElf_Sym *, uint_t *);
    8394        GElf_Sym *(*do_symaddr)(struct dt_module *,
    8495            GElf_Addr, GElf_Sym *, uint_t *);
     96#endif
    8597} dt_modops_t;
    8698
     
    105117        struct dt_module *dm_next; /* pointer to next module in hash chain */
    106118        const dt_modops_t *dm_ops; /* pointer to data model's ops vector */
     119#ifndef VBOX
    107120        Elf *dm_elf;            /* libelf handle for module object */
    108121        objfs_info_t dm_info;   /* object filesystem private info */
     122#endif
    109123        ctf_sect_t dm_symtab;   /* symbol table for module */
    110124        ctf_sect_t dm_strtab;   /* string table for module */
     
    121135        uint_t dm_flags;        /* module flags (see below) */
    122136        int dm_modid;           /* modinfo(1M) module identifier */
     137#ifndef VBOX
    123138        GElf_Addr dm_text_va;   /* virtual address of text section */
    124139        GElf_Xword dm_text_size; /* size in bytes of text section */
     
    127142        GElf_Addr dm_bss_va;    /* virtual address of BSS */
    128143        GElf_Xword dm_bss_size; /* size in bytes of BSS */
     144#endif
    129145        dt_idhash_t *dm_extern; /* external symbol definitions */
    130146} dt_module_t;
     
    296312        void *dt_bufarg;        /* buffered handler argument */
    297313        dt_dof_t dt_dof;        /* DOF generation buffers (see dt_dof.c) */
     314#ifndef VBOX
    298315        struct utsname dt_uts;  /* uname(2) information for system */
     316#endif
    299317        dt_list_t dt_lib_dep;   /* scratch linked-list of lib dependencies */
    300318        dt_list_t dt_lib_dep_sorted;    /* dependency sorted library list */
     
    651669
    652670#endif  /* _DT_IMPL_H */
     671
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_inttab.h

    r53634 r53652  
    2828#define _DT_INTTAB_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
     32#endif
    3133
    3234#include <dtrace.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_list.h

    r53634 r53652  
    2828#define _DT_LIST_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
     32#endif
    3133
    3234#ifdef  __cplusplus
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_module.h

    r53634 r53652  
    2828#define _DT_MODULE_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
     32#endif
    3133
    3234#include <dt_impl.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_open.c

    r53634 r53652  
    2424 */
    2525
     26#ifndef VBOX
    2627#include <sys/types.h>
    2728#include <sys/modctl.h>
    2829#include <sys/systeminfo.h>
    29 #include <sys/resource.h>
    3030
    3131#include <libelf.h>
     
    4040#include <assert.h>
    4141
    42 #define _POSIX_PTHREAD_SEMANTICS
    43 #include <dirent.h>
    44 #undef  _POSIX_PTHREAD_SEMANTICS
     42#ifndef _MSC_VER
     43# define        _POSIX_PTHREAD_SEMANTICS
     44# include <dirent.h>
     45# undef _POSIX_PTHREAD_SEMANTICS
     46#endif
     47
     48#else  /* VBOX */
     49# ifndef _MSC_VER
     50# include <sys/resource.h>
     51# include <unistd.h>
     52# else
     53# include <io.h>
     54# endif
     55#endif /* VBOX */
    4556
    4657#include <dt_impl.h>
     
    662673int _dtrace_debug = 0;          /* debug messages enabled (off) */
    663674const char *const _dtrace_version = DT_VERS_STRING; /* API version string */
     675#ifndef VBOX
    664676int _dtrace_rdvers = RD_VERSION; /* rtld_db feature version */
     677#endif
    665678
    666679typedef struct dt_fdlist {
     
    670683} dt_fdlist_t;
    671684
     685
     686#ifdef VBOX
     687# include <iprt/critsect.h>
     688extern RTCRITSECT dt_qsort_lock; /* dt_aggregate.c */
     689
     690void dtrace_init(void)
     691#else  /* !VBOX */
    672692#pragma init(_dtrace_init)
    673693void
    674694_dtrace_init(void)
     695#endif /* !VBOX */
    675696{
    676697        _dtrace_debug = getenv("DTRACE_DEBUG") != NULL;
    677698
     699#ifndef VBOX
    678700        for (; _dtrace_rdvers > 0; _dtrace_rdvers--) {
    679701                if (rd_init(_dtrace_rdvers) == RD_OK)
    680702                        break;
    681703        }
     704#else
     705        RTCritSectInit(&dt_qsort_lock);
     706#endif
    682707}
    683708
     
    692717}
    693718
     719#ifndef VBOX
    694720static void
    695721dt_provmod_open(dt_provmod_t **provmod, dt_fdlist_t *dfp)
     
    745771        (void) closedir(dirp);
    746772}
     773#endif /* !VBOX */
    747774
    748775static void
     
    763790dt_get_sysinfo(int cmd, char *buf, size_t len)
    764791{
     792#ifndef VBOX
    765793        ssize_t rv = sysinfo(cmd, buf, len);
    766794        char *p = buf;
     
    771799        while ((p = strchr(p, '.')) != NULL)
    772800                *p++ = '_';
    773 
     801#else
     802        snprintf(buf, len, "%s", "Unknown");
     803#endif
    774804        return (buf);
    775805}
     
    785815        dt_provmod_t *provmod = NULL;
    786816        int i, err;
     817#ifndef _MSC_VER
    787818        struct rlimit rl;
     819#endif
    788820
    789821        const dt_intrinsic_t *dinp;
     
    795827        ctf_arinfo_t ctr;
    796828
     829#ifndef VBOX
    797830        dt_fdlist_t df = { NULL, 0, 0 };
     831#endif
    798832
    799833        char isadef[32], utsdef[32];
     834#ifndef VBOX
    800835        char s1[64], s2[64];
     836#endif
    801837
    802838        if (version <= 0)
     
    830866                return (set_open_errno(dtp, errp, EINVAL));
    831867
     868#ifndef VBOX
    832869        if (elf_version(EV_CURRENT) == EV_NONE)
    833870                return (set_open_errno(dtp, errp, EDT_ELFVERSION));
     871#endif
    834872
    835873        if (vector != NULL || (flags & DTRACE_O_NODEV))
    836874                goto alloc; /* do not attempt to open dtrace device */
    837875
     876#ifndef _MSC_VER
    838877        /*
    839878         * Before we get going, crank our limit on file descriptors up to the
     
    848887                (void) setrlimit(RLIMIT_NOFILE, &rl);
    849888        }
    850 
     889#endif
     890
     891#ifndef VBOX
    851892        /*
    852893         * Get the device path of each of the providers.  We hold them open
     
    892933        (void) fcntl(dtfd, F_SETFD, FD_CLOEXEC);
    893934        (void) fcntl(ftfd, F_SETFD, FD_CLOEXEC);
     935#else  /* VBOX */
     936        /** @todo open ring-0 dtrace module. */
     937#endif /* VBOX */
    894938
    895939alloc:
     
    926970        dtp->dt_varg = arg;
    927971        dt_dof_init(dtp);
     972#ifndef VBOX
    928973        (void) uname(&dtp->dt_uts);
     974#endif
    929975
    930976        if (dtp->dt_mods == NULL || dtp->dt_provs == NULL ||
     
    941987            (uint_t)(sizeof (void *) * NBBY));
    942988
     989#ifndef VBOX
    943990        (void) snprintf(utsdef, sizeof (utsdef), "-D__%s_%s",
    944991            dt_get_sysinfo(SI_SYSNAME, s1, sizeof (s1)),
    945992            dt_get_sysinfo(SI_RELEASE, s2, sizeof (s2)));
     993#endif
    946994
    947995        if (dt_cpp_add_arg(dtp, "-D__sun") == NULL ||
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_parser.h

    r53634 r53652  
    2727#define _DT_PARSER_H
    2828
     29#ifndef VBOX
    2930#pragma ident   "%Z%%M% %I%     %E% SMI"
    3031
     
    3536#include <stdarg.h>
    3637#include <stdio.h>
     38#else  /* VBOX */
     39# include <sys/dtrace.h>
     40# include <stdio.h>
     41#endif /* VBOX */
    3742
    3843#ifdef  __cplusplus
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_pcb.h

    r53634 r53652  
    2828#define _DT_PCB_H
    2929
    30 #pragma ident   "%Z%%M% %I%     %E% SMI"
     30#ifndef VBOX
     31# pragma ident  "%Z%%M% %I%     %E% SMI"
     32#endif
    3133
    3234#include <dtrace.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_pid.h

    r53634 r53652  
    2828#ifndef _DT_PID_H
    2929#define _DT_PID_H
     30#ifndef VBOX
    3031
    3132#pragma ident   "%Z%%M% %I%     %E% SMI"
     
    5859    dtrace_hdl_t *, fasttrap_probe_spec_t *, const GElf_Sym *, const char *);
    5960
     61#endif /* !VBOX */
    6062#ifdef  __cplusplus
    6163}
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_printf.h

    r53634 r53652  
    2828#define _DT_PRINTF_H
    2929
    30 #pragma ident   "%Z%%M% %I%     %E% SMI"
     30#ifndef VBOX
     31# pragma ident  "%Z%%M% %I%     %E% SMI"
    3132
    3233#include <sys/types.h>
     34#endif
    3335#include <libctf.h>
    3436#include <dtrace.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_proc.c

    r53634 r53652  
    7777 */
    7878
     79#ifndef VBOX
    7980#include <sys/wait.h>
    8081#include <sys/lwp.h>
     
    8384#include <assert.h>
    8485#include <errno.h>
     86#endif
    8587
    8688#include <dt_proc.h>
    8789#include <dt_pid.h>
    8890#include <dt_impl.h>
     91
     92#ifndef VBOX
    8993
    9094#define IS_SYS_EXEC(w)  (w == SYS_execve)
     
    10331037        assert(err == 0); /* check for unheld lock */
    10341038}
     1039#endif /* !VBOX */
    10351040
    10361041void
     
    10401045            sizeof (dt_proc_t *) * _dtrace_pidbuckets - 1)) != NULL) {
    10411046
     1047#ifndef VBOX /** @todo This needs more work... */
    10421048                (void) pthread_mutex_init(&dtp->dt_procs->dph_lock, NULL);
    10431049                (void) pthread_cond_init(&dtp->dt_procs->dph_cv, NULL);
     1050#else
     1051
     1052#endif
    10441053
    10451054                dtp->dt_procs->dph_hashlen = _dtrace_pidbuckets;
     
    10521061{
    10531062        dt_proc_hash_t *dph = dtp->dt_procs;
     1063#ifndef VBOX
    10541064        dt_proc_t *dpr;
    10551065
    10561066        while ((dpr = dt_list_next(&dph->dph_lrulist)) != NULL)
    10571067                dt_proc_destroy(dtp, dpr->dpr_proc);
     1068#endif
    10581069
    10591070        dtp->dt_procs = NULL;
     
    10611072}
    10621073
     1074#ifndef VBOX
     1075
    10631076struct ps_prochandle *
    10641077dtrace_proc_create(dtrace_hdl_t *dtp, const char *file, char *const *argv)
     
    10961109        dt_proc_continue(dtp, P);
    10971110}
     1111#endif /* !VBOX */
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_proc.h

    r53634 r53652  
    2828#define _DT_PROC_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
    3132
     
    3435#include <pthread.h>
    3536#include <dt_list.h>
     37#else  /* VBOX */
     38# include <dtrace.h>
     39# include <dt_list.h>
     40# include <iprt/critsect.h>
     41#endif /* VBOX */
     42
    3643
    3744#ifdef  __cplusplus
     
    4552        struct ps_prochandle *dpr_proc; /* proc handle for libproc calls */
    4653        char dpr_errmsg[BUFSIZ];        /* error message */
     54#ifndef VBOX
    4755        rd_agent_t *dpr_rtld;           /* rtld handle for librtld_db calls */
    4856        pthread_mutex_t dpr_lock;       /* lock for manipulating dpr_hdl */
    4957        pthread_cond_t dpr_cv;          /* cond for dpr_stop/quit/done */
     58#else
     59        RTCRITSECT dpr_lock;
     60        RTSEMEVENT dpr_cv;
     61#endif
    5062        pid_t dpr_pid;                  /* pid of process */
    5163        uint_t dpr_refs;                /* reference count */
     
    5769        uint8_t dpr_stale;              /* proc flag: been deprecated */
    5870        uint8_t dpr_rdonly;             /* proc flag: opened read-only */
     71#ifndef VBOX
    5972        pthread_t dpr_tid;              /* control thread (or zero if none) */
     73#else
     74        RTTHREAD dpr_tid;
     75#endif
    6076        dt_list_t dpr_bps;              /* list of dt_bkpt_t structures */
    6177} dt_proc_t;
     
    87103
    88104typedef struct dt_proc_hash {
     105#ifndef VBOX
    89106        pthread_mutex_t dph_lock;       /* lock protecting dph_notify list */
    90107        pthread_cond_t dph_cv;          /* cond for waiting for dph_notify */
     108#else
     109        RTSEMEVENT dph_event;
     110#endif
    91111        dt_proc_notify_t *dph_notify;   /* list of pending proc notifications */
    92112        dt_list_t dph_lrulist;          /* list of dt_proc_t's in lru order */
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_program.h

    r53634 r53652  
    2828#define _DT_PROGRAM_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
     32#endif
    3133
    3234#ifdef  __cplusplus
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_provider.h

    r53634 r53652  
    2828#define _DT_PROVIDER_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
     32#endif
    3133
    3234#include <dt_impl.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_regset.h

    r53634 r53652  
    2828#define _DT_REGSET_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
    3132
    3233#include <sys/types.h>
     34#endif
    3335
    3436#ifdef  __cplusplus
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_string.h

    r53634 r53652  
    2727#define _DT_STRING_H
    2828
     29#ifndef VBOX
    2930#include <sys/types.h>
    3031#include <strings.h>
     32#else  /* VBOX */
     33# include <iprt/string.h>
     34#endif /* VBOX */
    3135
    3236#ifdef  __cplusplus
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_strtab.h

    r53634 r53652  
    2828#define _DT_STRTAB_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
    3132
    3233#include <sys/types.h>
     34#endif
    3335
    3436#ifdef  __cplusplus
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_work.c

    r53634 r53652  
    2626 */
    2727
     28#ifndef VBOX
    2829#pragma ident   "%Z%%M% %I%     %E% SMI"
    2930
     
    3334#include <assert.h>
    3435#include <time.h>
     36#else  /* VBOX */
     37# include <dt_impl.h>
     38//# include <stddef.h>
     39//# include <time.h>
     40# include <iprt/semaphore.h>
     41#endif /* VBOX */
    3542
    3643static const struct {
     
    5259
    5360        hrtime_t earliest = INT64_MAX;
     61#ifndef VBOX
    5462        struct timespec tv;
     63#endif
    5564        hrtime_t now;
    5665        int i;
     
    7483        }
    7584
     85#ifndef VBOX
    7686        (void) pthread_mutex_lock(&dph->dph_lock);
     87#endif
    7788
    7889        now = gethrtime();
    7990
    8091        if (earliest < now) {
     92#ifndef VBOX
    8193                (void) pthread_mutex_unlock(&dph->dph_lock);
     94#endif
    8295                return; /* sleep duration has already past */
    8396        }
    8497
     98#ifndef VBOX
    8599        tv.tv_sec = (earliest - now) / NANOSEC;
    86100        tv.tv_nsec = (earliest - now) % NANOSEC;
     101#endif
    87102
    88103        /*
     
    91106         * awaken, iterate over any pending notifications and process them.
    92107         */
     108#ifndef VBOX
    93109        (void) pthread_cond_reltimedwait_np(&dph->dph_cv, &dph->dph_lock, &tv);
     110#else
     111        RTSemEventWait(dph->dph_event, (earliest - now) / RT_NS_1MS);
     112#endif
    94113
    95114        while ((dprn = dph->dph_notify) != NULL) {
     
    107126        }
    108127
     128#ifndef VBOX
    109129        (void) pthread_mutex_unlock(&dph->dph_lock);
     130#endif
    110131}
    111132
     
    124145
    125146        if (dtp->dt_laststatus != 0) {
    126                 if (now - dtp->dt_laststatus < interval)
     147                if (now - dtp->dt_laststatus < VBDTCAST(hrtime_t)interval)
    127148                        return (DTRACE_STATUS_NONE);
    128149
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_xlator.h

    r53634 r53652  
    2828#define _DT_XLATOR_H
    2929
     30#ifndef VBOX
    3031#pragma ident   "%Z%%M% %I%     %E% SMI"
     32#endif
    3133
    3234#include <libctf.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dtrace.h

    r53646 r53652  
    3030#ifndef VBOX
    3131#pragma ident   "%Z%%M% %I%     %E% SMI"
    32 #endif
    3332
    3433#include <sys/dtrace.h>
    3534#include <stdarg.h>
    3635#include <stdio.h>
    37 #ifndef VBOX
    3836#include <gelf.h>
    39 #endif
     37#else  /* VBOX */
     38# include <sys/dtrace.h>
     39# include <stdio.h>
     40#endif /* VBOX */
    4041
    4142#ifdef  __cplusplus
     
    435436 * be flushed and not used subsequently by the client program.
    436437 */
    437 #ifndef VBOX
    438438
    439439#define DTRACE_OBJ_EXEC  ((const char *)0L)     /* primary executable file */
     
    451451        uint_t dto_flags;                       /* object flags (see below) */
    452452
     453#ifndef VBOX
    453454        GElf_Addr dto_text_va;                  /* address of text section */
    454455        GElf_Xword dto_text_size;               /* size of text section */
     
    457458        GElf_Addr dto_bss_va;                   /* address of BSS */
    458459        GElf_Xword dto_bss_size;                /* size of BSS */
     460#endif
    459461} dtrace_objinfo_t;
    460462
     
    473475} dtrace_syminfo_t;
    474476
     477#ifndef VBOX
    475478extern int dtrace_lookup_by_name(dtrace_hdl_t *, const char *, const char *,
    476479    GElf_Sym *, dtrace_syminfo_t *);
     
    576579extern int _dtrace_debug;
    577580
     581#ifdef VBOX
     582extern void dtrace_init(void);
     583#endif
     584
    578585#ifdef  __cplusplus
    579586}
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/uts/common/sys/ctf.h

    r53649 r53652  
    2828#define _CTF_H
    2929
    30 #pragma ident   "%Z%%M% %I%     %E% SMI"
    31 
    32 #include <sys/types.h>
     30#ifndef VBOX
     31# pragma ident  "%Z%%M% %I%     %E% SMI"
     32#endif
     33
     34#ifndef VBOX
     35# include <sys/types.h>
     36#else
     37# include "VBoxDTraceTypes.h"
     38#endif
    3339
    3440#ifdef  __cplusplus
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/uts/common/sys/ctf_api.h

    r53649 r53652  
    4141#define _CTF_API_H
    4242
    43 #pragma ident   "%Z%%M% %I%     %E% SMI"
    44 
    45 #include <sys/types.h>
    46 #include <sys/param.h>
    47 #include <sys/elf.h>
     43#ifndef VBOX
     44# pragma ident  "%Z%%M% %I%     %E% SMI"
     45#endif
     46
     47#ifndef VBOX
     48# include <sys/types.h>
     49# include <sys/param.h>
     50# include <sys/elf.h>
     51#else
     52# include "VBoxDTraceTypes.h"
     53#endif
    4854#include <sys/ctf.h>
    4955
     
    7278        size_t cts_size;        /* size of data in bytes */
    7379        size_t cts_entsize;     /* size of each section entry (symtab only) */
     80#ifndef VBOX
    7481        off64_t cts_offset;     /* file offset of this section (if any) */
     82#else
     83        RTFOFF cts_offset;      /* file offset of this section (if any) */
     84#endif
    7585} ctf_sect_t;
    7686
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/uts/common/sys/dtrace.h

    r53642 r53652  
    5050#include <sys/processor.h>
    5151#include <sys/systm.h>
    52 #include <sys/ctf_api.h>
    5352#include <sys/cyclic.h>
    5453#include <sys/int_limits.h>
    5554#else
    5655# include <VBoxDTraceTypes.h>
     56# include <sys/ctf_api.h>
    5757#endif
    5858
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