AUSAM/sys106/ken/debug.cold

#
#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