VirtualBox

Changeset 53654 in vbox for trunk/src/VBox


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

VBoxDTrace: dt_lex.l and dt_grammar.y. (r30)

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

Legend:

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

    r53653 r53654  
    5656        $(VBOXDT_PATH_LIBDTRACE)/common/dt_subr.c \
    5757        $(VBOXDT_PATH_LIBDTRACE)/common/dt_work.c \
     58        \
    5859
    5960VBoxDTrace_VBOX_TODO = \
     
    6465        $(VBOXDT_PATH_LIBDTRACE)/common/dt_dis.c \
    6566        $(VBOXDT_PATH_LIBDTRACE)/common/dt_dof.c \
    66         $(VBOXDT_PATH_LIBDTRACE)/common/dt_errtags.c \
    6767        $(VBOXDT_PATH_LIBDTRACE)/common/dt_handle.c \
    6868        $(VBOXDT_PATH_LIBDTRACE)/common/dt_ident.c \
     
    7878        $(VBOXDT_PATH_LIBDTRACE)/common/dt_pragma.c \
    7979        $(VBOXDT_PATH_LIBDTRACE)/common/dt_provider.c \
    80         $(VBOXDT_PATH_LIBDTRACE)/common/dt_xlator.c
     80        $(VBOXDT_PATH_LIBDTRACE)/common/dt_xlator.c \
     81        \
     82        generated: $(VBOXDT_PATH_LIBDTRACE)/common/dt_errtags.c \
     83
     84if 1
     85 USES                += yacc
     86 VBoxDTrace_USES     += yacc
     87 VBoxDTrace_YACCTOOL  = BISON
     88 VBoxDTrace_YACCFLAGS = -d
     89 VBoxDTrace_SOURCES  += \
     90        $(VBOXDT_PATH_LIBDTRACE)/common/dt_grammar.y
     91 VBoxDTrace_INCS     += $(VBoxDTrace_0_OUTDIR)/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common
     92else
     93 # fixme later
     94endif
     95
     96if 1
     97 USES                 = lex
     98 VBoxDTrace_USES      = lex
     99 VBoxDTrace_LEXTOOL   = FLEX
     100 VBoxDTrace_LEXFLAGS  = -l
     101 VBoxDTrace_DEFS      = USING_FLEX
     102 VBoxDTrace_SOURCES  += \
     103        $(VBOXDT_PATH_LIBDTRACE)/common/dt_lex.l
     104else
     105 VBoxDTrace_SOURCES  += \
     106        generated/dt_lex.c
     107 VBoxDTrace_INCS.win  += \
     108        generated/hdrhacks
     109endif
    81110
    82111VBoxDTrace_LIBS = \
  • trunk/src/VBox/ExtPacks/VBoxDTrace/include/VBoxDTraceTypes.h

    r53653 r53654  
    8585#  define _IPL32                    1
    8686# endif
     87# define _LITTLE_ENDIAN             1
    8788
    8889#elif defined(RT_ARCH_AMD64)
     
    9697#  define _LP64                     1
    9798# endif
     99# define _LITTLE_ENDIAN             1
    98100
    99101#else
     
    400402# define strncasecmp(a_psz1, a_psz2, a_cch) \
    401403                                    RTStrNICmp(a_psz1, a_psz2, a_cch)
     404# undef assert
    402405# define assert(expr)               Assert(expr)
    403406
     
    411414# define free(a_pvMem)              RTMemFree(a_pvMem)
    412415# define strdup(a_psz)              RTStrDup(a_psz)
     416# define strndup(a_psz, a_cchMax)   RTStrDupN(a_psz, a_cchMax)
    413417# define strlcpy(a_pszDst, a_pszSrc, a_cbDst) ((void)RTStrCopy(a_pszDst, a_cbDst, a_pszSrc))
    414418
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_grammar.y

    r53634 r53654  
    2525 */
    2626
     27#ifndef VBOX
    2728#pragma ident   "%Z%%M% %I%     %E% SMI"
     29#endif
    2830
    2931#include <dt_impl.h>
     
    297299                }
    298300        ;
    299        
     301
    300302
    301303probe_definition:
     
    401403                        $$ = OP1(DT_TOK_POSTDEC, $1);
    402404                }
    403         |       DT_TOK_OFFSETOF DT_TOK_LPAR type_name DT_TOK_COMMA 
     405        |       DT_TOK_OFFSETOF DT_TOK_LPAR type_name DT_TOK_COMMA
    404406                    DT_TOK_IDENT DT_TOK_RPAR {
    405407                        $$ = dt_node_offsetof($3, $5);
    406408                }
    407         |       DT_TOK_OFFSETOF DT_TOK_LPAR type_name DT_TOK_COMMA 
     409        |       DT_TOK_OFFSETOF DT_TOK_LPAR type_name DT_TOK_COMMA
    408410                    DT_TOK_TNAME DT_TOK_RPAR {
    409411                        $$ = dt_node_offsetof($3, $5);
  • trunk/src/VBox/ExtPacks/VBoxDTrace/onnv/lib/libdtrace/common/dt_lex.l

    r53634 r53654  
    2525 */
    2626
     27#ifndef VBOX
    2728#include <string.h>
    2829#include <stdlib.h>
     
    3132#include <ctype.h>
    3233#include <errno.h>
     34#else  /* VBOX */
     35# include <iprt/ctype.h>
     36# define isdigit(a_ch) RT_C_IS_DIGIT(a_ch)
     37#endif /* VBOX */
    3338
    3439#include <dt_impl.h>
     
    3742#include <dt_string.h>
    3843
     44#ifndef USING_FLEX
    3945/*
    4046 * We need to undefine lex's input and unput macros so that references to these
     
    4349#undef input
    4450#undef unput
     51#else  /* USING_FLEX */
     52# define YY_INPUT(buf, result, max_size) \
     53        do { \
     54                if (yypcb->pcb_fileptr != NULL) { \
     55                        result = (int)fread(buf, 1, max_size, yypcb->pcb_fileptr); \
     56                        if (!result && ferror(yypcb->pcb_fileptr)) \
     57                                YY_FATAL_ERROR("input in flex scanner failed"); \
     58                } else { \
     59                        size_t off = yypcb->pcb_strptr - yypcb->pcb_string; \
     60                        if (off < yypcb->pcb_strlen) { \
     61                                result = max_size; \
     62                                if ((size_t)result > yypcb->pcb_strlen) \
     63                                        result = (int)yypcb->pcb_strlen; \
     64                                memcpy(buf, yypcb->pcb_strptr, result); \
     65                                yypcb->pcb_strptr += result; \
     66                        } else \
     67                                result = 0; \
     68                } \
     69        } while (0)
     70#endif /* USING_FLEX */
    4571
    4672static int id_or_type(const char *);
     73#ifndef USING_FLEX
    4774static int input(void);
    4875static void unput(int);
     76#endif
    4977
    5078/*
     
    249277                         */
    250278                        if (isdigit(v[0]) || v[0] == '-' || v[0] == '+') {
     279#ifdef VBOX
     280                                int rc;
     281#endif
    251282                                if (isdigit(v[0]))
    252283                                        yyintprefix = 0;
     
    254285                                        yyintprefix = *v++;
    255286
     287#ifndef VBOX
    256288                                errno = 0;
    257289                                yylval.l_int = strtoull(v, &p, 0);
     290#else
     291                                rc = RTStrToUInt64Ex(v, &p, 0, &yylval.l_int);
     292#endif
    258293                                (void) strncpy(yyintsuffix, p,
    259294                                    sizeof (yyintsuffix));
    260295                                yyintdecimal = *v != '0';
    261296
    262                                 if (errno == ERANGE) {
     297#ifndef VBOX
     298                                if (errno == ERANGE)
     299#else
     300                                if (rc == VWRN_NUMBER_TOO_BIG || rc == VWRN_NEGATIVE_UNSIGNED)
     301#endif
    263302                                        xyerror(D_MACRO_OFLOW, "macro argument"
    264303                                            " %s constant %s results in integer"
    265304                                            " overflow\n", yytext, v);
    266                                 }
    267305
    268306                                return (DT_TOK_INT);
     
    336374                        char *p;
    337375
     376#ifndef VBOX
    338377                        errno = 0;
    339378                        yylval.l_int = strtoull(yytext, &p, 0);
     379#else
     380                        int rc = RTStrToUInt64Ex(yytext, &p, 0, &yylval.l_int);
     381#endif
    340382                        yyintprefix = 0;
    341383                        (void) strncpy(yyintsuffix, p, sizeof (yyintsuffix));
    342384                        yyintdecimal = yytext[0] != '0';
    343385
    344                         if (errno == ERANGE) {
     386#ifndef VBOX
     387                        if (errno == ERANGE)
     388#else
     389                        if (rc == VWRN_NUMBER_TOO_BIG || rc == VWRN_NEGATIVE_UNSIGNED)
     390#endif
    345391                                xyerror(D_INT_OFLOW, "constant %s results in "
    346392                                    "integer overflow\n", yytext);
    347                         }
    348393
    349394                        if (*p != '\0' && strchr("uUlL", *p) == NULL) {
     
    697742        yylineno = 1;
    698743        yypragma = NULL;
     744#ifndef USING_FLEX
    699745        yysptr = yysbuf;
     746#endif
    700747}
    701748
     
    793840}
    794841
     842#ifndef USING_FLEX
     843
    795844static int
    796845input(void)
     
    834883        yytchar = c;
    835884}
     885
     886#endif /* USING_FLEX */
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