1N/A/*********************************************************************** 1N/A* This software is part of the ast package * 1N/A* Copyright (c) 1985-2011 AT&T Intellectual Property * 1N/A* and is licensed under the * 1N/A* Common Public License, Version 1.0 * 1N/A* by AT&T Intellectual Property * 1N/A* A copy of the License is available at * 1N/A* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 1N/A* Information and Software Systems Research * 1N/A* Glenn Fowler <gsf@research.att.com> * 1N/A* David Korn <dgk@research.att.com> * 1N/A* Phong Vo <kpv@research.att.com> * 1N/A***********************************************************************/ 1N/A/* Method to help with debugging. This does rigorous checks on 1N/A** addresses and arena integrity. 1N/A** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. 1N/A/* structure to keep track of file names */ 1N/A/* global watch list */ 1N/A/* types of warnings reported by dbwarn() */ 1N/Astatic int Dbfd =
2;
/* default warning file descriptor */ 1N/A/* just an entry point to make it easy to set break point */ 1N/A/* issue a warning of some type */ 1N/Aconst char*
file;
/* file where call originates */ 1N/Aint type;
/* operation being done */ 1N/A#
define SLOP 64 /* enough for a message and an int */ 1N/A /* location where offending call originates from */ 1N/A/* check for watched address and issue warnings */ 1N/A/* record information about the block */ 1N/Aconst char*
file;
/* file where the request came from */ 1N/A /* find the file structure */ 1N/A else if(
last)
/* move-to-front heuristic */ 1N/A/* Check to see if an address is in some data block of a region. 1N/A** This returns -(offset+1) if block is already freed, +(offset+1) 1N/A** if block is live, 0 if no match. 1N/A if(
local)
/* must be vmfree or vmresize checking address */ 1N/A if(s <
sizeof(
Body_t))
/* no tiny blocks during Vmdebug */ 1N/A /* clear free space */ 1N/A/* Resizing an existing block */ 1N/Aint type;
/* !=0 for movable, >0 for copy */ 1N/A /* Vmbest data block */ 1N/A if(!
data)
/* failed, reset data for old block */ 1N/A do { *d++ = 0; }
while(d <
ed);
1N/A/* compact any residual free space */ 1N/A/* check for memory overwrites over all live blocks */ 1N/A /* check the meta-data of this region */ 1N/A if(n < 0)
/* insert */ 1N/A {
/* delete left-most */ 1N/A/* print statistics of region vm. If vm is NULL, use Vmregion */