Ausam/sys/ken/debug.c
#
#include "../defines.h"
#include "../param.h"
#ifdef DEBUG_SWAP
#include "../proc.h"
#include "../text.h"
#ifdef AUSAML
#include "../lnode.h"
#endif AUSAML
#include "../systm.h"
struct map
{
unsigned m_size;
unsigned m_addr;
};
tightmap ()
{ register struct proc *p;
register struct text *x;
for (p=proc; p <= max_proc; p++)
if (p->p_stat && p->p_stat != SZOMB && !(p->p_flag & SLOCK))
if (p->p_flag & SLOAD )
{ if (inmap(coremap,p->p_size,p->p_addr))
printf ("proc / core map at proc[%d]\n", p - proc);
} else {
if (inmap(swapmap,(p->p_size + 7) >> 3,p->p_addr))
printf ("proc / swap map at proc[%d]\n", p - proc);
}
for (x=text; x < &text[NTEXT]; x++)
if (x->x_iptr && x->x_ccount && x->x_caddr)
if (inmap(coremap,x->x_size,x->x_caddr))
printf ("text / core map at text[%d]\n", x - text);
}
/*
* this is a map consistency check for a very nasty bug
*/
inmap(mp, size, addr)
unsigned size, addr;
struct map *mp;
{
register struct map *bp;
/* find bp: bp[-1].m_addr <= addr < bp[0].m_addr */
for(bp=mp; bp->m_size && bp->m_addr <= addr; bp++);
if( bp > mp && (bp-1)->m_addr + (bp-1)->m_size > addr)
return(1);
if(bp->m_size && bp->m_addr < addr + size)
return(1);
return(0);
}
#endif DEBUG_SWAP