VirtualBox

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

VBoxDTrace: libdtrace porting in progres... (r23)

Location:
trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_as.c

    r53634 r53653  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
    2829
     
    3132#include <stdlib.h>
    3233#include <assert.h>
     34#else  /* VBOX */
     35# include <iprt/asm.h>
     36#endif /* VBOX */
    3337
    3438#include <dt_impl.h>
     
    237241        case DT_LINK_KERNEL:
    238242                kmask = 0;
    239                 kbits = -1u;
     243                kbits = ~0u;
    240244                umask = DT_IDFLG_USER;
    241245                ubits = DT_IDFLG_USER;
     
    255259        case DT_LINK_STATIC:
    256260                kmask = umask = 0;
    257                 kbits = ubits = -1u;
     261                kbits = ubits = ~0u;
    258262                break;
    259263        default:
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_buf.c

    r53634 r53653  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
     29#endif
    2830
    2931/*
     
    4042 */
    4143
     44#ifndef VBOX
    4245#include <sys/sysmacros.h>
    4346#include <strings.h>
     47#endif
    4448
    4549#include <dt_impl.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_cg.c

    r53634 r53653  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
    2829
     
    3637#include <assert.h>
    3738#include <errno.h>
     39#else  /* VBOX */
     40#endif /* VBOX */
    3841
    3942#include <dt_impl.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_impl.h

    r53652 r53653  
    4141# include <dtrace.h>
    4242# include <errno.h>
    43 # include <iprt/assert.h>
    44 # define assert(expr)   Assert(expr)
    4543#endif /* VBOX*/
    4644
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_list.c

    r53634 r53653  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
     29#endif
    2830
    2931/*
     
    3638 */
    3739
     40#ifndef VBOX
    3841#include <unistd.h>
    3942#include <assert.h>
     43#endif
    4044#include <dt_list.h>
    4145
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_list.h

    r53652 r53653  
    3030#ifndef VBOX
    3131#pragma ident   "%Z%%M% %I%     %E% SMI"
     32#else
     33# include "VBoxDTraceTypes.h"
    3234#endif
    3335
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_options.c

    r53634 r53653  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
    2829
     
    4041#include <fcntl.h>
    4142
     43#else  /* VBOX */
     44# ifndef _MSC_VER
     45#  include <sys/resource.h>
     46#  include <unistd.h>
     47#  include <signal.h>
     48# else
     49#  include <io.h>
     50#  define STDERR_FILENO 2
     51#  define open64 open
     52# endif
     53# include <fcntl.h>
     54# include <stdlib.h>
     55
     56#endif /* VBOX */
     57
    4258#include <dt_impl.h>
    4359#include <dt_string.h>
     
    84100        const char msg[] = "libdtrace DEBUG: [ forcing coredump ]\n";
    85101
     102#ifndef _MSC_VER
    86103        struct sigaction act;
    87104        struct rlimit lim;
     105#endif
    88106
    89107        (void) write(STDERR_FILENO, msg, sizeof (msg) - 1);
    90108
     109#ifndef _MSC_VER
    91110        act.sa_handler = SIG_DFL;
    92111        act.sa_flags = 0;
     
    99118
    100119        (void) setrlimit(RLIMIT_CORE, &lim);
     120#endif /* !_MSC_VER */
    101121        abort();
    102122}
     
    514534dt_opt_runtime(dtrace_hdl_t *dtp, const char *arg, uintptr_t option)
    515535{
     536#ifndef VBOX
    516537        char *end;
     538#endif
    517539        dtrace_optval_t val = 0;
    518540        int i;
     
    549571                }
    550572
     573#ifndef VBOX
    551574                errno = 0;
    552575                val = strtoull(arg, &end, 0);
     
    554577                if (*end != '\0' || errno != 0 || val < 0)
    555578                        return (dt_set_errno(dtp, EDT_BADOPTVAL));
     579#else
     580                i = RTStrToInt64Full(arg, 0, &val);
     581                if (i != VINF_SUCCESS)
     582                        return (dt_set_errno(dtp, EDT_BADOPTVAL));
     583#endif
    556584        }
    557585
     
    567595        size_t len;
    568596        char *end;
     597#ifdef VBOX
     598        int rc;
     599#endif
    569600
    570601        len = strlen(arg);
     602#ifndef VBOX
    571603        errno = 0;
     604#endif
    572605
    573606        switch (arg[len - 1]) {
     
    592625        }
    593626
     627#ifndef VBOX
    594628        errno = 0;
    595629        *rval = strtoull(arg, &end, 0) * mul;
     
    598632            *rval < 0 || errno != 0)
    599633                return (-1);
     634#else
     635        *rval = -1;
     636        if (mul == 1) {
     637                rc = RTStrToInt64Full(arg, 0, rval);
     638                if (rc != VINF_SUCCESS || *rval < 0)
     639                        return (-1);
     640        } else {
     641                rc = RTStrToInt64Ex(arg, &end, 0, rval);
     642                if (   rc != VWRN_TRAILING_CHARS
     643                        || end != &arg[len - 1]
     644                        || *rval < 0)
     645                        return (-1);
     646                *rval *= mul;
     647                if (*rval < 0)
     648                        return (-1);
     649        }
     650#endif
    600651
    601652        return (0);
     
    644695
    645696        if (arg != NULL) {
     697#ifndef VBOX
    646698                errno = 0;
    647699                val = strtoull(arg, &end, 0);
     700#else
     701                int rc = RTStrToInt64Ex(arg, &end, 0, &val);
     702                if (rc != VWRN_TRAILING_CHARS)
     703                        return (dt_set_errno(dtp, EDT_BADOPTVAL));
     704#endif
    648705
    649706                for (i = 0; suffix[i].name != NULL; i++) {
     
    787844        dof_sec_t *sec;
    788845        size_t offs;
    789         int i;
     846        VBDTTYPE(uint32_t,int) i;
    790847
    791848        /*
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_printf.c

    r53634 r53653  
    2424 */
    2525
     26#ifndef VBOX
    2627#include <sys/sysmacros.h>
    2728#include <strings.h>
     
    3738#include <arpa/inet.h>
    3839#include <arpa/nameser.h>
     40#else  /* VBOX */
     41# include <iprt/asm.h>
     42# include <ctype.h>
     43#endif /* VBOX */
    3944
    4045#include <dt_printf.h>
    4146#include <dt_string.h>
    4247#include <dt_impl.h>
     48
     49#ifdef VBOX
     50static const char g_aszMonth[12][4] =
     51{ "Jan", "Feb", "Mar", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
     52static const char g_aszDay[7][4] =
     53{ "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" };
     54#endif
    4355
    4456/*ARGSUSED*/
     
    302314                return (dt_printf(dtp, fp, format,
    303315                    *((double *)addr) / n));
     316#ifndef _MSC_VER
    304317        case sizeof (long double):
    305318                return (dt_printf(dtp, fp, format,
    306319                    *((long double *)addr) / ldn));
     320#endif
    307321        default:
    308322                return (dt_set_errno(dtp, EDT_DMISMATCH));
     
    447461    const dt_pfargd_t *pfd, const void *addr, size_t size, uint64_t normal)
    448462{
     463#ifndef VBOX
    449464        char src[32], buf[32], *dst = buf;
    450465        hrtime_t time = *((uint64_t *)addr);
     
    472487
    473488        *dst = '\0';
     489#else
     490        RTTIMESPEC      TimeSpec;
     491        RTTIME          Time;
     492        char            buf[32];
     493
     494        RTTimeLocalExplode(&Time, RTTimeSpecSetNano(&TimeSpec, *(uint64_t *)addr));
     495        RTStrPrintf(buf, sizeof(buf), "%u %s %2u %02u:%02u:%02u",
     496                                Time.i32Year, g_aszMonth[Time.u8Month - 1],
     497                                Time.u8MonthDay, Time.u8Hour, Time.u8Minute, Time.u8Second);
     498#endif
    474499        return (dt_printf(dtp, fp, format, buf));
    475500}
     
    485510    const dt_pfargd_t *pfd, const void *addr, size_t size, uint64_t normal)
    486511{
     512#ifndef VBOX
    487513        hrtime_t time = *((uint64_t *)addr);
    488514        time_t sec = (time_t)(time / NANOSEC);
     
    492518        (void) localtime_r(&sec, &tm);
    493519        (void) strftime(buf, sizeof (buf), "%a, %d %b %G %T %Z", &tm);
     520#else
     521        RTTIMESPEC      TimeSpec;
     522        RTTIME          Time;
     523        char            buf[64];
     524
     525        RTTimeLocalExplode(&Time, RTTimeSpecSetNano(&TimeSpec, *(uint64_t *)addr));
     526        RTStrPrintf(buf, sizeof(buf), "%s, %u %s %u %02u:%02u:%02u %s%u%s",
     527                                g_aszDay[Time.u8WeekDay], Time.u8MonthDay, g_aszMonth[Time.u8Month - 1],
     528                                Time.u8Hour, Time.u8Minute, Time.u8Second,
     529                                Time.offUTC >= 0 ? "UTC+" : "UTC", Time.offUTC / 60,
     530                                Time.offUTC % 60 == 30 ? ".5" : "");
     531#endif
    494532        return (dt_printf(dtp, fp, format, buf));
    495533}
     
    500538    const dt_pfargd_t *pfd, const void *addr, size_t size, uint64_t normal)
    501539{
     540#ifndef VBOX
    502541        uint16_t port = htons(*((uint16_t *)addr));
    503542        char buf[256];
     
    508547
    509548        (void) snprintf(buf, sizeof (buf), "%d", *((uint16_t *)addr));
     549#else
     550        uint16_t uPortNet = *(uint16_t *)addr;
     551        char buf[32];
     552
     553        RTStrPrintf(buf, sizeof(buf), "%d", RT_N2H_U16(uPortNet));
     554#endif
    510555        return (dt_printf(dtp, fp, format, buf));
    511556}
     
    517562{
    518563        char *s = alloca(size + 1);
     564#ifndef VBOX
    519565        struct hostent *host, res;
    520566        char inetaddr[NS_IN6ADDRSZ];
    521567        char buf[1024];
    522568        int e;
     569#endif
    523570
    524571        bcopy(addr, s, size);
    525572        s[size] = '\0';
    526573
     574#ifndef VBOX
    527575        if (strchr(s, ':') == NULL && inet_pton(AF_INET, s, inetaddr) != -1) {
    528576                if ((host = gethostbyaddr_r(inetaddr, NS_INADDRSZ,
     
    534582                        return (dt_printf(dtp, fp, format, host->h_name));
    535583        }
     584#endif
    536585
    537586        return (dt_printf(dtp, fp, format, s));
     
    10241073        const char *aggtype;
    10251074        dt_node_t aggnode;
    1026         int i, j;
     1075        VBDTTYPE(uint_t,int) i, j;
    10271076
    10281077        if (pfv->pfv_format[0] == '\0') {
     
    13371386        }
    13381387
    1339         for (i = 0; i < pfv->pfv_argc; i++, pfd = pfd->pfd_next) {
     1388        for (i = 0; VBDTCAST(uint_t)i < pfv->pfv_argc; i++, pfd = pfd->pfd_next) {
    13401389                const dt_pfconv_t *pfc = pfd->pfd_conv;
    13411390                int width = pfd->pfd_width;
     
    16071656    uint_t nrecs, const void *buf, size_t len)
    16081657{
     1658#ifndef VBOX
    16091659        char selfbuf[40], restorebuf[40], *filename;
    16101660        FILE *nfp;
    1611         int rval, errval;
    16121661        dt_pfargv_t *pfv = fmtdata;
    16131662        dt_pfargd_t *pfd = pfv->pfv_argv;
     1663#else
     1664        int rval, errval;
     1665#endif
    16141666
    16151667        rval = dtrace_sprintf(dtp, fp, fmtdata, recp, nrecs, buf, len);
     
    16181670                return (rval);
    16191671
     1672#ifndef VBOX
    16201673        if (pfd->pfd_preflen != 0 &&
    16211674            strcmp(pfd->pfd_prefix, DT_FREOPEN_RESTORE) == 0) {
     
    17001753
    17011754        return (rval);
     1755
     1756#else  /* VBOX  - the above is not easily portable because of /dev/fd/xxx. */
     1757        if ((errval = dt_handle_liberr(dtp, data, "reopening stdout is not implemented")) == 0)
     1758                return (rval);
     1759        return (errval);
     1760#endif
    17021761}
    17031762
     
    17171776        dt_pfargv_t *pfv = dt_printf_create(dtp, s);
    17181777        dt_pfargd_t *pfd;
    1719         int i;
     1778        VBDTTYPE(uint_t,int) i;
    17201779
    17211780        if (pfv == NULL)
     
    17761835        char *format = alloca(formatlen);
    17771836        char *f = format;
     1837#ifndef VBOX
    17781838        int i, j;
     1839#else
     1840        uint_t i;
     1841        size_t j;
     1842#endif
    17791843
    17801844        for (i = 0; i < pfv->pfv_argc; i++, pfd = pfd->pfd_next) {
     
    19161980         * a different statement.
    19171981         */
    1918         for (i = 0; i < nrecs; i++) {
     1982        for (i = 0; VBDTCAST(uint_t)i < nrecs; i++) {
    19191983                const dtrace_recdesc_t *nrec = &recs[i];
    19201984
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_regset.c

    r53634 r53653  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
    2829
     
    3233#include <strings.h>
    3334#include <stdlib.h>
     35#else  /* VBOX */
     36# include <iprt/asm.h>
     37#endif /* VBOX */
    3438
    3539#include <dt_regset.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_regset.h

    r53652 r53653  
    3232
    3333#include <sys/types.h>
    34 #endif
     34#else  /* VBOX */
     35# include "VBoxDTraceTypes.h"
     36#endif /* VBOX */
    3537
    3638#ifdef  __cplusplus
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_string.c

    r53634 r53653  
    2424 */
    2525
     26#ifndef VBOX
    2627#include <strings.h>
    2728#include <stdlib.h>
     
    3031
    3132#include <dt_string.h>
     33
     34#else  /* VBOX */
     35# include <dt_string.h>
     36# include <dt_impl.h>
     37# include <iprt/ctype.h>
     38# define isalnum(a_ch) RT_C_IS_ALNUM(a_ch)
     39#endif /* VBOX */
    3240
    3341/*
     
    253261strbadidnum(const char *s)
    254262{
     263#ifndef VBOX
    255264        char *p;
     265#endif
    256266        int c;
    257267
     
    259269                return (s);
    260270
     271#ifndef VBOX
    261272        errno = 0;
    262273        (void) strtoull(s, &p, 0);
     
    264275        if (errno == 0 && *p == '\0')
    265276                return (NULL); /* matches RGX_INT */
     277#else
     278        /* A number? */
     279        c = *s;
     280        if (RT_C_IS_DIGIT(c)) {
     281                s++;
     282                if (c == '0') {
     283                        c = *s;
     284                        if (c == 'x' || c == 'X') {
     285                                s++;
     286                                while ((c = *s++) != '\0') {
     287                                        if (RT_C_IS_XDIGIT(c) == 0)
     288                                                return (s - 1);
     289                                }
     290                        } else  {
     291                                while ((c = *s++) != '\0') {
     292                                        if (RT_C_IS_ODIGIT(c) == 0)
     293                                                return (s - 1);
     294                                }
     295                        }
     296                } else {
     297                        while ((c = *s++) != '\0') {
     298                                if (RT_C_IS_DIGIT(c) == 0)
     299                                        return (s - 1);
     300                        }
     301                }
     302                return (NULL); /* matches RGX_INT */
     303        }
     304#endif
    266305
    267306        while ((c = *s++) != '\0') {
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_strtab.c

    r53634 r53653  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
    2829
     
    3233#include <stdlib.h>
    3334#include <assert.h>
     35#endif
    3436
    3537#include <dt_strtab.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_strtab.h

    r53652 r53653  
    3232
    3333#include <sys/types.h>
     34#else
     35# include "VBoxDTraceTypes.h"
    3436#endif
    3537
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_subr.c

    r53634 r53653  
    2424 */
    2525
     26#ifndef VBOX
    2627#include <sys/sysmacros.h>
    2728
     
    3839#include <libgen.h>
    3940#include <limits.h>
     41#else  /* VBOX */
     42# include <ctype.h>
     43# include <iprt/mp.h>
     44# ifdef _MSC_VER
     45#  include <io.h>
     46# else
     47#  include <unistd.h>
     48# endif
     49#endif /* VBOX */
    4050
    4151#include <dt_impl.h>
     
    217227        dtrace_class_t c;
    218228        char *p, *q;
     229#ifdef VBOX
     230        size_t cbStr;
     231#endif
    219232
    220233        if (str == NULL || attr == NULL)
     
    222235
    223236        *attr = _dtrace_maxattr;
     237#ifndef VBOX
    224238        p = strdupa(str);
     239#else
     240        cbStr = strlen(str) + 1;
     241        p = alloca(cbStr);
     242        memcpy(p, str, cbStr);
     243#endif
    225244
    226245        if ((p = dt_getstrattr(p, &q)) == NULL)
     
    473492                return (v->dtv_ioctl(dtp->dt_varg, val, arg));
    474493
     494#ifndef VBOX
    475495        if (dtp->dt_fd >= 0)
    476496                return (ioctl(dtp->dt_fd, val, arg));
     497#else
     498        AssertFailed(); /** @todo FIXME */
     499#endif
    477500
    478501        errno = EBADF;
     
    486509
    487510        if (v == NULL)
     511#ifndef VBOX
    488512                return (p_online(cpu, P_STATUS));
     513#else
     514                return RTMpIsCpuOnline(cpu) ? 1
     515                        : RTMpIsCpuPresent(cpu) ? 0 : -1; /* Only -1 is checked. */
     516#endif
    489517
    490518        return (v->dtv_status(dtp->dt_varg, cpu));
    491519}
    492520
     521#ifndef VBOX
    493522long
    494523dt_sysconf(dtrace_hdl_t *dtp, int name)
     
    501530        return (v->dtv_sysconf(dtp->dt_varg, name));
    502531}
     532#endif /* !VBOX */
    503533
    504534/*
     
    561591                assert(dtp->dt_sprintf_buf != NULL);
    562592
    563                 buf = &dtp->dt_sprintf_buf[len = strlen(dtp->dt_sprintf_buf)];
     593                buf = &dtp->dt_sprintf_buf[len = VBDTCAST(int)strlen(dtp->dt_sprintf_buf)];
    564594                len = dtp->dt_sprintf_buflen - len;
    565595                assert(len >= 0);
     
    742772dt_gmatch(const char *s, const char *p)
    743773{
     774#ifndef VBOX
    744775        return (p == NULL || *p == '\0' || gmatch(s, p));
     776#else
     777        return (p == NULL || *p == '\0' || RTStrSimplePatternMatch(p, s)); /** @todo implement gmatch. */
     778#endif
    745779}
    746780
     
    805839dt_string2str(char *s, char *str, int nbytes)
    806840{
    807         int len = strlen(s);
     841        int len = VBDTCAST(int)strlen(s);
    808842
    809843        if (nbytes == 0) {
     
    832866dtrace_addr2str(dtrace_hdl_t *dtp, uint64_t addr, char *str, int nbytes)
    833867{
     868#ifndef VBOX
    834869        dtrace_syminfo_t dts;
    835870        GElf_Sym sym;
     
    863898                }
    864899        }
     900#else
     901        char s[32];
     902        RTStrPrintf(s, sizeof(s), "0x%llx", (uint64_t)addr);
     903#endif
    865904
    866905        return (dt_string2str(s, str, nbytes));
     
    871910    uint64_t addr, char *str, int nbytes)
    872911{
     912#ifndef VBOX
    873913        char name[PATH_MAX], objname[PATH_MAX], c[PATH_MAX * 2];
    874914        struct ps_prochandle *P = NULL;
     
    906946        dt_proc_unlock(dtp, P);
    907947        dt_proc_release(dtp, P);
     948#else
     949        char c[32];
     950        RTStrPrintf(c, sizeof (c), "0x%llx", addr);
     951#endif
    908952
    909953        return (dt_string2str(c, str, nbytes));
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dtrace.h

    r53652 r53653  
    525525    const dtrace_probedesc_t *, dtrace_probeinfo_t *);
    526526
    527 #ifndef VBOX
    528527/*
    529528 * DTrace Vector Interface
     
    536535struct dtrace_vector {
    537536        int (*dtv_ioctl)(void *, int, void *);
     537#ifndef VBOX
    538538        int (*dtv_lookup_by_addr)(void *, GElf_Addr, GElf_Sym *,
    539539            dtrace_syminfo_t *);
     540#endif /* !VBOX */
    540541        int (*dtv_status)(void *, processorid_t);
    541542        long (*dtv_sysconf)(void *, int);
    542543};
    543 #endif /* !VBOX */
    544544
    545545/*
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