VirtualBox

Changeset 53657 in vbox for trunk/src/VBox


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

VBoxDTrace: CTF compiles and links. (r33)

Location:
trunk/src/VBox/ExtPacks/VBoxDTrace
Files:
1 added
17 edited

Legend:

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

    r53652 r53657  
    3737VBOXDT_PATH_CMD  = $(VBOXDT_PATH_ONNV)/cmd
    3838VBOXDT_PATH_LIBCTF    = $(VBOXDT_PATH_ONNV)/lib/libctf
     39VBOXDT_PATH_CMN_CTF   = $(VBOXDT_PATH_ONNV)/common/ctf
    3940VBOXDT_PATH_LIBDTRACE = $(VBOXDT_PATH_ONNV)/lib/libdtrace
     41VBOXDT_PATH_CMN_DTRACE= $(VBOXDT_PATH_ONNV)/common/dtrace
  • trunk/src/VBox/ExtPacks/VBoxDTrace/VBoxDTrace/Makefile.kmk

    r53655 r53657  
    3434PROGRAMS += VBoxDTrace
    3535VBoxDTrace_TEMPLATE = VBOXR3NPEXE
     36VBoxDTrace_SDKS = VBOX_ZLIB
    3637VBoxDTrace_INCS = \
    3738        ../include \
    3839        $(VBOXDT_PATH_UTS)/common \
    3940        $(VBOXDT_PATH_LIBCTF)/common \
    40         $(VBOXDT_PATH_LIBDTRACE)/common
     41        $(VBOXDT_PATH_LIBDTRACE)/common \
     42        $(VBOXDT_PATH_CMN_CTF)
    4143VBoxDTrace_SOURCES = \
    4244        $(VBOXDT_PATH_CMD)/dtrace/dtrace.c \
     
    7375        $(VBOXDT_PATH_LIBDTRACE)/common/dt_work.c \
    7476        $(VBOXDT_PATH_LIBDTRACE)/common/dt_xlator.c \
     77        \
     78        $(VBOXDT_PATH_CMN_CTF)/ctf_create.c \
     79        $(VBOXDT_PATH_CMN_CTF)/ctf_error.c \
     80        $(VBOXDT_PATH_CMN_CTF)/ctf_decl.c \
     81        $(VBOXDT_PATH_CMN_CTF)/ctf_hash.c \
     82        $(VBOXDT_PATH_CMN_CTF)/ctf_labels.c \
     83        $(VBOXDT_PATH_CMN_CTF)/ctf_lookup.c \
     84        $(VBOXDT_PATH_CMN_CTF)/ctf_open.c \
     85        $(VBOXDT_PATH_CMN_CTF)/ctf_types.c \
     86        $(VBOXDT_PATH_CMN_CTF)/ctf_util.c \
     87        \
     88        $(VBOXDT_PATH_LIBCTF)/common/ctf_subr.c \
     89        $(VBOXDT_PATH_LIBCTF)/common/ctf_lib.c
     90
     91VBoxDTrace_VBOX_TODO = \
    7592
    7693VBoxDTrace_VBOX_TODO = \
  • trunk/src/VBox/ExtPacks/VBoxDTrace/include/VBoxDTraceTypes.h

    r53655 r53657  
    151151# define EALREADY               (114)
    152152# define EOVERFLOW              (79)
     153# define ENOTSUP                (48)
    153154#endif
    154155
     
    424425        } while (0)
    425426
    426 #endif
     427/*
     428 * gelf
     429 */
     430# include "../../../Runtime/include/internal/ldrELF64.h"
     431typedef Elf64_Half GElf_Half;
     432typedef Elf64_Shdr GElf_Shdr;
     433typedef Elf64_Ehdr GElf_Ehdr;
     434typedef Elf64_Sym  GElf_Sym;
     435
     436#endif /* IN_RING3 */
    427437
    428438RT_C_DECLS_END
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_create.c

    r53656 r53657  
    2626 */
    2727
     28#ifndef VBOX
    2829#pragma ident   "%Z%%M% %I%     %E% SMI"
    2930
     
    3132#include <sys/param.h>
    3233#include <sys/mman.h>
     34#else  /* VBOX */
     35#endif /* VBOX */
    3336#include <ctf_impl.h>
    3437
     
    9497                if (dmd->dmd_name) {
    9598                        ctm.ctm_name = soff;
    96                         soff += strlen(dmd->dmd_name) + 1;
     99                        soff += VBDTCAST(uint_t)strlen(dmd->dmd_name) + 1;
    97100                } else
    98101                        ctm.ctm_name = 0;
     
    117120                if (dmd->dmd_name) {
    118121                        ctlm.ctlm_name = soff;
    119                         soff += strlen(dmd->dmd_name) + 1;
     122                        soff += VBDTCAST(uint_t)strlen(dmd->dmd_name) + 1;
    120123                } else
    121124                        ctlm.ctlm_name = 0;
     
    142145                cte.cte_name = soff;
    143146                cte.cte_value = dmd->dmd_value;
    144                 soff += strlen(dmd->dmd_name) + 1;
     147                soff += VBDTCAST(uint_t)strlen(dmd->dmd_name) + 1;
    145148                bcopy(&cte, t, sizeof (cte));
    146149                t += sizeof (cte);
     
    258261         * bcopy the finished header to the start of the buffer.
    259262         */
    260         hdr.cth_stroff = hdr.cth_typeoff + size;
    261         hdr.cth_strlen = fp->ctf_dtstrlen;
     263        hdr.cth_stroff = hdr.cth_typeoff + VBDTCAST(uint_t)size;
     264        hdr.cth_strlen = VBDTCAST(uint_t)fp->ctf_dtstrlen;
    262265        size = sizeof (ctf_header_t) + hdr.cth_stroff + hdr.cth_strlen;
    263266
     
    597600
    598601        dtd->dtd_data.ctt_info = CTF_TYPE_INFO(kind, flag, 0);
    599         dtd->dtd_data.ctt_size = clp2(P2ROUNDUP(ep->cte_bits, NBBY) / NBBY);
     602        dtd->dtd_data.ctt_size = VBDTCAST(ushort_t)clp2(P2ROUNDUP(ep->cte_bits, NBBY) / NBBY);
    600603        dtd->dtd_u.dtu_enc = *ep;
    601604
     
    777780
    778781        dtd->dtd_data.ctt_info = CTF_TYPE_INFO(CTF_K_ENUM, flag, 0);
    779         dtd->dtd_data.ctt_size = fp->ctf_dmodel->ctd_int;
     782        dtd->dtd_data.ctt_size = VBDTCAST(ushort_t)fp->ctf_dmodel->ctd_int;
    780783
    781784        return (type);
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_decl.c

    r53656 r53657  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
     29#endif
    2830
    2931/*
     
    177179
    178180        va_start(ap, format);
     181#ifndef VBOX
    179182        n = vsnprintf(cd->cd_ptr, len, format, ap);
     183#else
     184        n = RTStrPrintfV(cd->cd_ptr, len, format, ap);
     185#endif
    180186        va_end(ap);
    181187
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_error.c

    r53656 r53657  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
     29#endif
    2830
    2931#include <ctf_impl.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_hash.c

    r53656 r53657  
    2626 */
    2727
     28#ifndef VBOX
    2829#pragma ident   "%Z%%M% %I%     %E% SMI"
     30#endif
    2931
    3032#include <ctf_impl.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_impl.h

    r53656 r53657  
    2929#define _CTF_IMPL_H
    3030
     31#ifndef VBOX
    3132#pragma ident   "%Z%%M% %I%     %E% SMI"
    3233
     
    3435#include <sys/errno.h>
    3536#include <sys/sysmacros.h>
     37#else  /* VBOX */
     38# include "../../../../../Runtime/include/internal/ldrELF32.h"
     39# include "../../../../../Runtime/include/internal/ldrELF64.h"
     40# include <errno.h>
     41#endif /* VBOX */
    3642#include <sys/ctf_api.h>
    3743
    3844#ifdef _KERNEL
    3945
     46#ifndef VBOX
    4047#include <sys/systm.h>
    4148#include <sys/cmn_err.h>
    4249#include <sys/varargs.h>
     50#endif
    4351
    4452#define isspace(c) \
     
    5058#else   /* _KERNEL */
    5159
     60#ifndef VBOX
    5261#include <strings.h>
    5362#include <stdlib.h>
     
    5665#include <limits.h>
    5766#include <ctype.h>
     67#endif
    5868
    5969#endif  /* _KERNEL */
     
    330340extern int _libctf_debug;               /* debugging messages enabled */
    331341
     342#ifdef VBOX
     343# ifndef MAP_FAILED /* returned by ctf_data_alloc on failure. */
     344#  define MAP_FAILED ((void *)~(uintptr_t)0)
     345# endif
     346#endif
     347
    332348#ifdef  __cplusplus
    333349}
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_labels.c

    r53656 r53657  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
     29#endif
    2830
    2931#include <ctf_impl.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_lookup.c

    r53656 r53657  
    2626 */
    2727
     28#ifndef VBOX
    2829#pragma ident   "%Z%%M% %I%     %E% SMI"
    2930
    3031#include <sys/sysmacros.h>
     32#else  /* VBOX */
     33# include <ctype.h>
     34#endif /* VBOX */
    3135#include <ctf_impl.h>
    3236
     
    198202        }
    199203
    200         if (fp->ctf_sxlate[symidx] == -1u)
     204        if (fp->ctf_sxlate[symidx] == ~0u /*VBOX: -1u*/)
    201205                return (ctf_set_errno(fp, ECTF_NOTYPEDAT));
    202206
     
    261265        }
    262266
    263         if (fp->ctf_sxlate[symidx] == -1u)
     267        if (fp->ctf_sxlate[symidx] == ~0u /*VBOX: -1u*/)
    264268                return (ctf_set_errno(fp, ECTF_NOFUNCDAT));
    265269
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_open.c

    r53656 r53657  
    2626 */
    2727
     28#ifndef VBOX
    2829#pragma ident   "%Z%%M% %I%     %E% SMI"
    29 
     30#endif
     31
     32#ifndef VBOX
    3033#include <ctf_impl.h>
    3134#include <sys/mman.h>
    3235#include <sys/zmod.h>
     36#else  /* VBOX */
     37# define CTF_OLD_VERSIONS
     38# include <ctf_impl.h>
     39# include <zlib.h>
     40# define z_compress     compress
     41# define z_uncompress   uncompress
     42# define z_strerror     zError
     43#endif /* VBOX */
    3344
    3445static const ctf_dmodel_t _libctf_models[] = {
     
    143154                    strcmp(name, "_START_") == 0 ||
    144155                    strcmp(name, "_END_") == 0) {
    145                         *xp = -1u;
     156                        *xp = ~0u /*VBOX: -1u*/;
    146157                        continue;
    147158                }
     
    151162                        if (objtoff >= hp->cth_funcoff ||
    152163                            (gsp->st_shndx == SHN_ABS && gsp->st_value == 0)) {
    153                                 *xp = -1u;
     164                                *xp = ~0u /*VBOX: -1u*/;
    154165                                break;
    155166                        }
     
    161172                case STT_FUNC:
    162173                        if (funcoff >= hp->cth_typeoff) {
    163                                 *xp = -1u;
     174                                *xp = ~0u /*VBOX: -1u*/;
    164175                                break;
    165176                        }
     
    183194
    184195                default:
    185                         *xp = -1u;
     196                        *xp = ~0u /*VBOX: -1u*/;
    186197                        break;
    187198                }
     
    632643         */
    633644        if (hp.cth_flags & CTF_F_COMPRESS) {
     645#ifndef VBOX
    634646                size_t srclen, dstlen;
     647#else
     648                uLong srclen;
     649                uLong dstlen;
     650#endif
    635651                const void *src;
    636652                int rc = Z_OK;
    637653
     654#ifndef VBOX
    638655                if (ctf_zopen(errp) == NULL)
    639656                        return (NULL); /* errp is set for us */
     657#endif
    640658
    641659                if ((base = ctf_data_alloc(size + hdrsz)) == MAP_FAILED)
     
    647665
    648666                src = (uchar_t *)ctfsect->cts_data + hdrsz;
    649                 srclen = ctfsect->cts_size - hdrsz;
    650                 dstlen = size;
     667                srclen = VBDTCAST(uLong)(ctfsect->cts_size - hdrsz);
     668                dstlen = VBDTCAST(uLong)size;
    651669
    652670                if ((rc = z_uncompress(buf, &dstlen, src, srclen)) != Z_OK) {
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_types.c

    r53656 r53657  
    2626 */
    2727
     28#ifndef VBOX
    2829#pragma ident   "%Z%%M% %I%     %E% SMI"
     30#endif
    2931
    3032#include <ctf_impl.h>
     
    310312{
    311313        ssize_t rv = ctf_type_lname(fp, type, buf, len);
    312         return (rv >= 0 && rv < len ? buf : NULL);
     314        return (rv >= 0 && VBDTCAST(size_t)rv < len ? buf : NULL);
    313315}
    314316
     
    406408                        for (; n != 0; n--, mp++) {
    407409                                ssize_t am = ctf_type_align(fp, mp->ctm_type);
    408                                 align = MAX(align, am);
     410                                align = MAX(VBDTCAST(ssize_t)align, am);
    409411                        }
    410412                } else {
     
    412414                        for (; n != 0; n--, lmp++) {
    413415                                ssize_t am = ctf_type_align(fp, lmp->ctlm_type);
    414                                 align = MAX(align, am);
     416                                align = MAX(VBDTCAST(ssize_t)align, am);
    415417                        }
    416418                }
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/common/ctf/ctf_util.c

    r53656 r53657  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
     29#endif
    2830
    2931#include <ctf_impl.h>
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libctf/common/ctf_lib.c

    r53650 r53657  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
    2829
     
    3637#include <dlfcn.h>
    3738#include <gelf.h>
    38 
     39#else
     40# include <libctf.h>
     41# include <ctf_impl.h>
     42# include <iprt/param.h>
     43# include <sys/stat.h>
     44# include <stdio.h>
     45# include <fcntl.h>
     46# ifdef _MSC_VER
     47#  include <io.h>
     48# else
     49#  include <unistd.h>
     50# endif
     51# define stat64  stat
     52# define fstat64 fstat
     53# define open64  open
     54# define off64_t int64_t
     55#endif
     56
     57#ifndef VBOX /* staticly linked in */
    3958#ifdef _LP64
    4059static const char *_libctf_zlib = "/usr/lib/64/libz.so";
     
    4867        void *z_dlp;
    4968} zlib;
     69#endif /* !VBOX */
    5070
    5171static size_t _PAGESIZE;
    5272static size_t _PAGEMASK;
    5373
     74#ifndef VBOX
    5475#pragma init(_libctf_init)
    5576void
    5677_libctf_init(void)
    57 {
     78#else
     79void libctf_init(void)
     80#endif
     81{
     82#ifndef VBOX
    5883        const char *p = getenv("LIBCTF_DECOMPRESSOR");
    5984
    6085        if (p != NULL)
    6186                _libctf_zlib = p; /* use alternate decompression library */
     87#endif
    6288
    6389        _libctf_debug = getenv("LIBCTF_DEBUG") != NULL;
    6490
     91#ifndef VBOX
    6592        _PAGESIZE = getpagesize();
     93#else
     94        _PAGESIZE = PAGE_SIZE;
     95#endif
    6696        _PAGEMASK = ~(_PAGESIZE - 1);
    6797}
     98
     99#ifdef VBOX
     100/*
     101 * Fake MMAP for read only access.
     102 */
     103# define munmap(a_pvMem, a_cbMem) \
     104        RTMemPageFree(a_pvMem, a_cbMem)
     105
     106# define mmap64(a_pvAddr, a_cb, a_fProt, a_fFlags, a_fd, a_offFile) \
     107        VBoxCtfMap64Fake(a_pvAddr, a_cb, a_fProt, a_fFlags, a_fd, a_offFile)
     108
     109# undef PROT_READ
     110# define PROT_READ              0xfeed
     111# undef MAP_PRIVATE
     112# define MAP_PRIVATE    0xbeef
     113
     114static void *VBoxCtfMap64Fake(void *pvAddr, size_t cb, int fProt, int fFlags, int fd, int64_t offFile)
     115{
     116        off_t const offSaved = lseek(fd, 0, SEEK_CUR);
     117        void *pvRet;
     118        int err;
     119
     120        Assert(pvAddr == NULL); NOREF(pvAddr);
     121        Assert(fProt == PROT_READ);
     122        Assert(fFlags == MAP_PRIVATE);
     123        if ((off_t)offFile != offFile) {
     124                errno = EIO;
     125                return MAP_FAILED;
     126        }
     127
     128        if (lseek(offFile, offFile, SEEK_SET) >= 0) {
     129
     130                pvRet = RTMemPageAllocZ(cb);
     131                if (!pvRet) {
     132#ifdef _MSC_VER
     133                        ssize_t cbRead = read(fd, pvRet, (unsigned int)cb);
     134#else
     135                        ssize_t cbRead = read(fd, pvRet, cb);
     136#endif
     137                        if (cbRead < 0) {
     138                                RTMemPageFree(pvRet, cb);
     139                                pvRet = MAP_FAILED;
     140                        }
     141                } else {
     142                        errno = ENOMEM;
     143                        pvRet = MAP_FAILED;
     144                }
     145
     146                /* restore original position */
     147                err = errno;
     148                lseek(offSaved, 0, SEEK_SET);
     149                errno = err;
     150        }
     151
     152        return pvRet;
     153}
     154
     155/*
     156 * pread64
     157 */
     158#define pread64(a_fd, a_pvBuf, a_cbToRead, a_offFile) \
     159        VBoxCtfPRead64(a_fd, a_pvBuf, a_cbToRead, a_offFile)
     160
     161static ssize_t VBoxCtfPRead64(int fd, void *pvBuf, size_t cbToRead, int64_t offFile)
     162{
     163        if ((off_t)offFile != offFile) {
     164                errno = EIO;
     165                return -1;
     166        }
     167
     168        if (lseek(fd, offFile, SEEK_SET) < 0)
     169                return -1;
     170#ifndef _MSC_VER
     171        return read(fd, pvBuf, cbToRead);
     172#else
     173        return read(fd, pvBuf, (unsigned int)cbToRead);
     174#endif
     175}
     176
     177
     178
     179#endif /* VBOX */
     180
     181#ifndef VBOX
    68182
    69183/*
     
    113227        return (zlib.z_error(err));
    114228}
     229
     230#endif /* VBOX */
    115231
    116232/*
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libctf/common/ctf_subr.c

    r53650 r53657  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
     29#endif
    2830
    2931#include <ctf_impl.h>
    3032#include <libctf.h>
     33#ifndef VBOX
    3134#include <sys/mman.h>
    3235#include <stdarg.h>
     36#else
     37# include <iprt/asm.h>
     38# include <iprt/log.h>
     39#endif
    3340
    3441void *
    3542ctf_data_alloc(size_t size)
    3643{
     44#ifndef VBOX
    3745        return (mmap(NULL, size, PROT_READ | PROT_WRITE,
    3846            MAP_PRIVATE | MAP_ANON, -1, 0));
     47#else
     48    void *pv = RTMemPageAlloc(size);
     49    return pv == NULL ? MAP_FAILED : pv;
     50#endif
    3951}
    4052
     
    4254ctf_data_free(void *buf, size_t size)
    4355{
     56#ifndef VBOX
    4457        (void) munmap(buf, size);
     58#else
     59    RTMemPageFree(buf, size);
     60#endif
    4561}
    4662
     
    4864ctf_data_protect(void *buf, size_t size)
    4965{
     66#ifndef VBOX
    5067        (void) mprotect(buf, size, PROT_READ);
     68#else
     69    int rc = RTMemProtect(buf, size, RTMEM_PROT_READ);
     70    AssertRC(rc);
     71#endif
    5172}
    5273
     
    5475ctf_alloc(size_t size)
    5576{
     77#ifndef VBOX
    5678        return (malloc(size));
     79#else
     80    return RTMemAlloc(size);
     81#endif
    5782}
    5883
     
    6186ctf_free(void *buf, size_t size)
    6287{
     88#ifndef VBOX
    6389        free(buf);
     90#else
     91    RTMemFree(buf);
     92#endif
    6493}
    6594
     
    78107
    79108                va_start(alist, format);
     109#ifndef VBOX
    80110                (void) fputs("libctf DEBUG: ", stderr);
    81111                (void) vfprintf(stderr, format, alist);
     112#else
     113        RTLogPrintf("libctf DEBUG: %N", format, alist);
     114#endif
    82115                va_end(alist);
    83116        }
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libctf/common/libctf.h

    r53652 r53657  
    5656extern int _libctf_debug;
    5757
     58#ifdef VBOX
     59extern void libctf_init(void);
     60#endif
     61
    5862#ifdef  __cplusplus
    5963}
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_open.c

    r53652 r53657  
    686686#ifdef VBOX
    687687# include <iprt/critsect.h>
     688# include <libctf.h>
    688689extern RTCRITSECT dt_qsort_lock; /* dt_aggregate.c */
    689690
     
    703704        }
    704705#else
     706
     707        libctf_init();
    705708        RTCritSectInit(&dt_qsort_lock);
    706709#endif
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