コード例 #1
0
ファイル: addarith.c プロジェクト: ABratovic/open-watcom-v2
long AddrDiff( address a, address b )
{
    AddrFix( &a );
    AddrFix( &b );
    DeAlias( &a.mach );
    DeAlias( &b.mach );
    return( MADAddrDiff( &a, &b, MAF_FULL ) );
}
コード例 #2
0
ファイル: addarith.c プロジェクト: ABratovic/open-watcom-v2
int SameAddrSpace( address a, address b )
{
    if( _IsOn( SW_IGNORE_SEGMENTS ) ) return( TRUE );
    if( a.sect_id == 0 ) a.sect_id = b.sect_id;
    if( b.sect_id == 0 ) b.sect_id = a.sect_id;
    if( a.sect_id != b.sect_id ) return( FALSE );
    AddrFix( &a );
    AddrFix( &b );
    DeAlias( &a.mach );
    DeAlias( &b.mach );
    return( a.mach.segment == b.mach.segment );
}
コード例 #3
0
ファイル: dbgmemor.c プロジェクト: groessler/open-watcom-v2
static bool ItemGet( address *addr, item_mach *item, item_type typ )
{
    unsigned    size = Sizes[typ & IT_TYPE_MASK];

    if( typ & IT_DEC )
        addr->mach.offset -= size;
    if( typ & IT_IO ) {
        if( PortPeek( addr->mach.offset, item, size ) != size ) {
            if( typ & IT_ERR ) {
                Error( ERR_NONE, LIT_ENG( ERR_NO_READ_PORT ), *addr );
            }
            return( false );
        }
    } else {
        if( ProgPeek( *addr , item, size ) != size ) {
            if( typ & IT_ERR ) {
                AddrFix( addr );
                Error( ERR_NONE, LIT_ENG( ERR_NO_READ_MEM ), *addr );
            }
            return( false );
        }
    }
    if( typ & IT_INC )
        addr->mach.offset += size;
    return( true );

}
コード例 #4
0
ファイル: dbgparse.c プロジェクト: ABratovic/open-watcom-v2
void MakeMemoryAddr( bool pops, memory_expr def_seg, address *val )
{
    if( ExprSP->flags & SF_LOCATION ) {
        ExprSP->flags &= ~(SF_LOCATION|SF_IMP_ADDR);
        ExprSP->v.addr = ExprSP->v.loc.e[0].u.addr;
        ExprSP->info.kind = TK_ADDRESS;
        ExprSP->info.modifier = TM_FAR;
    }
    switch( ExprSP->info.kind ) {
    case TK_ADDRESS:
    case TK_POINTER:
        if( (ExprSP->info.modifier & TM_MOD_MASK) != TM_NEAR ) break;
        /* fall through */
    default:
        DefAddr( def_seg, val );
        AddrFix( val );
        //NYI: lost address abstraction
        PushInt( val->mach.segment );
        SwapStack( 1 );
        MakeAddr();
    }
    *val = ExprSP->v.addr;
    AddrFloat( val );
    if( pops ) PopEntry();
}
コード例 #5
0
ファイル: addarith.c プロジェクト: ABratovic/open-watcom-v2
int AddrComp( address a, address b )
{
    if( a.sect_id == 0 ) a.sect_id = b.sect_id;
    if( b.sect_id == 0 ) b.sect_id = a.sect_id;
    if( a.sect_id > b.sect_id ) {
        return( 3 );
    } else if( a.sect_id < b.sect_id ) {
        return( -3 );
    } else {
        if( _IsOn( SW_IGNORE_SEGMENTS ) ) {
            return( MADAddrComp( &a, &b, MAF_OFFSET ) );
        } else {
            AddrFix( &a );
            AddrFix( &b );
            DeAlias( &a.mach );
            DeAlias( &b.mach );
            return( MADAddrComp( &a, &b, MAF_FULL ) );
        }
    }
}
コード例 #6
0
ファイル: dbgutil.c プロジェクト: Azarien/open-watcom-v2
char *AddrTypeToString( address *a, mad_type_handle th, char *buff, size_t buff_len )
{
    mad_type_info       mti;
    item_mach           item;
    mad_type_info       host;

    MADTypeInfo( th, &mti );
    MADTypeInfoForHost( MTK_ADDRESS, sizeof( address ), &host );
    AddrFix( a );
    MADTypeConvert( &host, a, &mti, &item, 0 );
    MADTypeToString( 16, &mti, &item, buff, &buff_len );
    return( buff + buff_len );
}
コード例 #7
0
ファイル: dbgutil.c プロジェクト: Azarien/open-watcom-v2
void CnvAddrToItem( address *a, item_mach *item, mad_type_info *mti )
{
    //MAD: a bit ugly
    AddrFix( a );
    switch( mti->b.bits - mti->a.seg.bits ) {
    case 16:
        item->sa.offset = a->mach.offset;
        item->sa.segment = a->mach.segment;
        break;
    case 32:
        item->la.offset = a->mach.offset;
        item->la.segment = a->mach.segment;
        break;
    }
}
コード例 #8
0
bool PerformExplicitCall( address start, mad_string ctype, unsigned num_parms )
{
    bool                ret;
    stack_entry         *src;
    address             stack;
    unsigned            align;
    unsigned long       amount;
    mad_type_info       mti;

    stack = GetRegSP();
    GetMADTypeDefaultAt( stack, MTK_INTEGER, &mti );
    align = mti.b.bits / BITS_PER_BYTE;
    for( ; num_parms != 0; --num_parms ) {
        if( ExprSP->v.loc.e[0].type!=LT_ADDR && ExprSP->v.loc.e[0].u.p==NULL ) {
            /* push item */
            src = StkEntry( 1 );
            amount = (src->info.size + (align-1)) & -align;
            if( _IsOff( SW_STACK_GROWS_UP ) ) {
                stack.mach.offset -= amount;
            }
            LocationCreate( &ExprSP->v.loc, LT_ADDR, &stack );
            if( _IsOn( SW_STACK_GROWS_UP ) ) {
                stack.mach.offset += amount;
            }
            ExprSP->info = src->info;
            ExprSP->flags |= SF_LOCATION;
            ExprSP->th = NULL;
        }
        SwapStack( 1 );
        DoAssign();
        PopEntry();
    }
    AddrFix( &start );
    SetRegSP( stack );
    MADCallBuildFrame( ctype, start, start, &DbgRegs->mr, &DbgRegs->mr );
    DbgTmpBrk.loc.addr = start;
    NullStatus( &DbgTmpBrk );
    DbgTmpBrk.status.b.active = TRUE;
    ret = CallRoutine();
    NullStatus( &DbgTmpBrk );
    return( ret );
}
コード例 #9
0
ファイル: dbgreg.c プロジェクト: NoSuchProcess/open-watcom-v2
void SetRegBP( address addr )
{
    AddrFix( &addr );
    MADRegSpecialSet( MSR_FP, &DbgRegs->mr, &addr.mach );
}
コード例 #10
0
ファイル: dbgreg.c プロジェクト: NoSuchProcess/open-watcom-v2
void SetRegIP( address addr )
{
    AddrFix( &addr );
    MADRegSpecialSet( MSR_IP, &DbgRegs->mr, &addr.mach );
    SetStateOvlSect( DbgRegs, addr.sect_id );
}