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; } }
address DefAddrSpaceForAddr( address addr ) { mod_handle mod; if( DeAliasAddrMod( addr, &mod ) == SR_NONE ) mod = NO_MOD; return( DefAddrSpaceForMod( mod ) ); }