VirtualBox

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

VBoxDTrace: porting libdtrace... (r22)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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 ||
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