void BrkAddrRefresh( void ) { brkp *bp; for( bp = BrkList; bp != NULL; bp = bp->next ) { SetPointAddr( bp, bp->loc.addr ); } }
static remap_return ReMapOnePoint( brkp *bp, image_entry *image ) { mod_handle himage, mod; bool ok; address addr; DIPHDL( cue, ch ); DIPHDL( cue, ch2 ); remap_return rc = REMAP_REMAPPED; if( !bp->status.b.unmapped ) return( REMAP_WRONG_IMAGE ); if( bp->image_name == NULL || bp->mod_name == NULL ) { if( image == NULL ) { if( ReMapAddress( &bp->loc ) ) { rc = REMAP_REMAPPED; } else { rc = REMAP_ERROR; } } else { rc = ReMapImageAddress( &bp->loc, image ); } } else { himage = LookupImageName( bp->image_name, strlen( bp->image_name ) ); if( himage == NO_MOD ) return( REMAP_ERROR ); mod = LookupModName( himage, bp->mod_name, strlen( bp->mod_name ) ); if( mod == NO_MOD ) return( REMAP_ERROR ); ok = GetBPSymAddr( bp, &addr ); if( !ok ) return( REMAP_ERROR ); if( bp->cue_diff != 0 ) { if( DeAliasAddrCue( mod, addr, ch ) != SR_EXACT ) return( REMAP_ERROR ); if( LineCue( mod, CueFileId( ch ), CueLine( ch ) + bp->cue_diff, 0, ch2 ) != SR_EXACT ) return( REMAP_ERROR ); addr = CueAddr( ch2 ); } if( bp->addr_diff != 0 ) { addr.mach.offset += bp->addr_diff; } bp->loc.addr = addr; rc = REMAP_REMAPPED; } if( rc == REMAP_REMAPPED ) { bp->status.b.unmapped = false; } SetPointAddr( bp, bp->loc.addr ); if( bp->status.b.activate_on_remap ) { ActPoint( bp, true ); } return( rc ); }
static brkp *AddPoint( address loc, mad_type_handle th, bool unmapped ) { brkp *bp; brkp **owner; if( !IS_BP_EXECUTE( th ) && !BrkCheckWatchLimit( loc, th ) ) return( NULL ); _Alloc( bp, sizeof( brkp ) ); InitMappableAddr( &bp->loc ); bp->th = th; bp->mad = SysConfig.mad; NullStatus( bp ); bp->status.b.active = true; bp->source_line = NULL; bp->image_name = NULL; bp->mod_name = NULL; bp->sym_name = NULL; bp->cue_diff = 0; bp->status.b.unmapped = unmapped; SetPointAddr( bp, loc ); bp->cmds = NULL; bp->status.b.use_cmds = false; bp->index = FindNextBPIndex(); bp->total_hits = 0; bp->countdown = 0; bp->initial_countdown = 0; bp->status.b.use_countdown = false; bp->condition = NULL; bp->status.b.use_condition = false; bp->error = NULL; owner = &BrkList; while( *owner != NULL ) { owner = &((*owner)->next); } bp->next = NULL; *owner = bp; DbgUpdate( UP_BREAK_CHANGE ); return( bp ); }