Exemplo n.º 1
0
void CLR_RT_Assembly::DumpOpcodeDirect( CLR_RT_MethodDef_Instance& call, CLR_PMETADATA ip, CLR_PMETADATA ipStart, int pid )
{
    NATIVE_PROFILE_CLR_DIAGNOSTICS();
    CLR_Debug::Printf( "    [%04x:%04x:%08x", pid, (int)(ip - ipStart), (size_t)ip );

    if(TINYCLR_INDEX_IS_VALID(call))
    {
        CLR_Debug::Printf( ":" );
        CLR_RT_DUMP::METHOD( call );
    }

    CLR_OPCODE      op      = CLR_ReadNextOpcodeCompressed( ip );
    CLR_OpcodeParam opParam = c_CLR_RT_OpcodeLookup[ op ].m_opParam;

    CLR_Debug::Printf( "] %-12s", c_CLR_RT_OpcodeLookup[ op ].m_name );

    if(IsOpParamToken( opParam ))
    {
        DumpToken( CLR_ReadTokenCompressed( ip, op ) );
    }
    else
    {
        CLR_UINT32 argLo;
        CLR_UINT32 argHi;

        switch(c_CLR_opParamSizeCompressed[ opParam ])
        {
        case 8: TINYCLR_READ_UNALIGNED_UINT32( argLo, ip ); TINYCLR_READ_UNALIGNED_UINT32( argHi, ip ); CLR_Debug::Printf( "%08X,%08X", argHi, argLo ); break;
        case 4: TINYCLR_READ_UNALIGNED_UINT32( argLo, ip );                                             CLR_Debug::Printf( "%08X"     ,        argLo ); break;
        case 2: TINYCLR_READ_UNALIGNED_UINT16( argLo, ip );                                             CLR_Debug::Printf( "%04X"     ,        argLo ); break;
        case 1: TINYCLR_READ_UNALIGNED_UINT8 ( argLo, ip );                                             CLR_Debug::Printf( "%02X"     ,        argLo ); break;
        }
    }

    CLR_Debug::Printf( "\r\n" );
}
Exemplo n.º 2
0
void RewriteToken( void )
/***********************/
{
    REWRITE *r;
    REWRITE_TOKENS *rt;
    uint_8 *stop;
    uint_32 srcfile_index;
    SRCFILE srcfile;
    uint_32 absolute;
    int code_byte;
    unsigned len;

    r = currRewrite;
    rt = r->curr;
    stop = &(rt->stream[rt->count]);
    CurToken = getToken( r, &rt, &stop );
    if( CurToken == T_REWRITE_MODS ) {
        code_byte = getByte( r, &rt, &stop );
        if( code_byte == CODE_FILE ) {
            getBinary( r, &rt, &stop, (uint_8*)&srcfile_index, sizeof( srcfile_index ) );
            srcfile = accessSrcFile( r, srcfile_index );
            SrcFilePoint( srcfile );
            TokenLine = 0;
            TokenColumn = 0;
            CurToken = getToken( r, &rt, &stop );
            if( CurToken == T_REWRITE_MODS ) {
                code_byte = getByte( r, &rt, &stop );
            }
        }
    }
    if( CurToken == T_REWRITE_MODS ) {
        for( ;; ) {
            if( code_byte == CODE_ABS ) {
                getBinary( r, &rt, &stop, (uint_8*)&absolute, sizeof( absolute ) );
                if( MASK_ABS_LINE & absolute ) {
                    TokenLine = absolute & ~MASK_ABS_LINE;
                    TokenColumn = 0;
                } else {
                    TokenColumn = absolute;
                    break;
                }
            } else if( MASK_DELTA_LINE & code_byte ) {
                TokenLine += code_byte & ~MASK_DELTA_LINE;
            } else {
                TokenColumn += code_byte;
                break;
            }
            code_byte = getByte( r, &rt, &stop );
        }
        CurToken = getToken( r, &rt, &stop );
    }
    switch( CurToken ) {
    case T_ID:
    case T_BAD_CHAR:
        len = getString( r, &rt, &stop, Buffer );
        TokenLen = len;
        break;
    case T_BAD_TOKEN:
        getBinary( r, &rt, &stop, (uint_8*)&BadTokenInfo, sizeof( BadTokenInfo ) );
        break;
    case T_STRING:
    case T_LSTRING:
        len = getString( r, &rt, &stop, Buffer );
        TokenLen = len + 1;
        break;
    case T_CONSTANT:
        getBinary( r, &rt, &stop, (uint_8*)&ConstType, sizeof( ConstType ) );
        switch( ConstType ) {
        case TYP_LONG_DOUBLE:
        case TYP_DOUBLE:
        case TYP_FLOAT:
            len = getString( r, &rt, &stop, Buffer );
            TokenLen = len;
            break;
        default:
            getBinary( r, &rt, &stop, (uint_8*)&Constant64, sizeof( Constant64 ) );
            break;
        }
        break;
    default:
        break;
    }
#ifndef NDEBUG
    CtxScanToken();
    DumpToken();
#endif
}