示例#1
0
static void NearToFar( stack_entry *entry )
{
    addr_off    near_off;

    near_off = entry->v.addr.mach.offset;
    if( entry->th == NULL
      || TypePtrAddrSpace( entry->th, entry->lc, &entry->v.addr ) != DS_OK ) {
        if( near_off == 0 ) {
            entry->v.addr = NilAddr;
        } else if( IsCodePointer( entry ) ) {
            entry->v.addr = Context.execution;
        } else if( entry->th != NULL ) {
            entry->v.addr = DefAddrSpaceForMod( TypeMod( entry->th ) );
        } else {
            entry->v.addr = DefAddrSpaceForAddr( Context.execution );
        }
        entry->v.addr.mach.offset = 0;
    } else {
        entry->info.modifier = TM_FAR;
        entry->info.size += sizeof( addr_seg );
    }
    entry->v.addr.mach.offset += near_off;
    if( entry->th == NULL ) {
        entry->info.kind = TK_ADDRESS;
    }
}
示例#2
0
address DefAddrSpaceForAddr( address addr )
{
    mod_handle  mod;

    if( DeAliasAddrMod( addr, &mod ) == SR_NONE )
        mod = NO_MOD;
    return( DefAddrSpaceForMod( mod ) );
}