Checker V0.4  (c) 1993, 1994 Tristan Gingold

  Hello!  This is the new version of Checker.  Checker is a debugging
tool suite which will find memory errors at runtime.  As most programmers
know, runtime memory errors are difficult to track down; therefore, it is
likely that you will be well rewarded for taking the time to learn
how to use Checker!

  Version 0.4 of Checker corrects several bugs, makes better checks,
supports option via ~/.checker, supports signals, provide new 'as' and 'ld'
which prevent from linking with other libraries, and is faster.

  Checker is a package designed to find memory access errors and bad 
usage of malloc at run time.  When Checker finds an error, it displays 
a warning along with the current stack frames.  For more information 
about this, see the example below.

  The malloc library of Checker is very robust; however, it is slower than 
GNU Malloc.  Robust means that you can't cheat malloc.  Checker warns you if
	o You call free or realloc before you malloc the memory block
	o You try to free an already free zone
	o You call free with a bad address (not returned by malloc, calloc
          or realloc)
Futhermore, Checker's malloc tries to be as secure as possible: when you free
a block, it becomes 'aged' and will be really freed after n calls to free in
order to catch bugs where you access a block after it has been freed and 
when you try to free a block more than once.

Checker implements a garbage detector that can be called either in your 
program or by a debugger, such as gdb.  The garbage detector displays 
all the memory leaks along with the functions that called malloc.

EXAMPLE:
Here's a bogus file example.c
	#include <malloc.h>

	int main()
	{
	 char *zone=malloc(20);
	 char *ptr=NULL;
	 int i;
	 char c;
 
	 c=zone[1];	/* error: read an uninitialized char */
	 c=zone[-2];	/* error: read before the zone */
	 zone[25]=' ';  /* error: write after the zone */
	 *ptr = 2;	/* error: use a NULL pointer, must produce a core */
	}

To compile:
% checkergcc -o example.o example.c -c
% checkergcc -o example example.o

and then run the program:
% ./example
This program has been compiled with '-checker' option.
Checker is a memory access detector.
Checker is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.
For more information, set CHECKEROPTS to '-h'

From Checker:
Memory access error
When Reading 1 byte(s) at address 0x1129d, inside the heap.
The block is 20 bytes length and starts at 0x1129c
1 bytes after the begin of the block
The block was allocated from:
	pc=0x000004d8 in _malloc() at malloc.c:165
	pc=0x00000529 in malloc() at malloc.c:180
	pc=0x0000009a in main() at example.c:6
	pc=0x0000004e in __entry() at chkrcrt0.S:1
Stack frames are:
	pc=0x000000cc in main() at example.c:11
	pc=0x0000004e in __entry() at chkrcrt0.S:1
From Checker:
Memory access error
When Reading 1 byte(s) at address 0x1129a, inside the heap.
The block is 20 bytes length and starts at 0x1129c
2 bytes before the begin of the block
The block was allocated from:
	pc=0x000004d8 in _malloc() at malloc.c:165
	pc=0x00000529 in malloc() at malloc.c:180
	pc=0x0000009a in main() at example.c:6
	pc=0x0000004e in __entry() at chkrcrt0.S:1
Stack frames are:
	pc=0x000000ef in main() at example.c:12
	pc=0x0000004e in __entry() at chkrcrt0.S:1
From Checker:
Memory access error
When Writing 1 byte(s) at address 0x112b5, inside the heap.
The block is 20 bytes length and starts at 0x1129c
5 bytes after the end of the block
The block was allocated from:
	pc=0x000004d8 in _malloc() at malloc.c:165
	pc=0x00000529 in malloc() at malloc.c:180
	pc=0x0000009a in main() at example.c:6
	pc=0x0000004e in __entry() at chkrcrt0.S:1
Stack frames are:
	pc=0x00000112 in main() at example.c:13
	pc=0x0000004e in __entry() at chkrcrt0.S:1
From Checker:
Memory access error
When Writing 1 byte(s) at address 0x0, inside the NULL zone.
You probably use a NULL pointer.
THIS SHOULD PRODUCE A SEGMENTATION FAULT.
Stack frames are:
	pc=0x00000127 in main() at example.c:14
	pc=0x0000004e in __entry() at chkrcrt0.S:1

segmentation fault.

To see other features in Checker, see the testsuite/try_*.c files.

  Checker has been only been tested on Linux. 

If you like Checker, use it, and try to find bugs....
If you find a bug, have a suggestion, dislike Checker, want to make it
better, want to port it, or find an English mistake, email me at:
 Tristan C/O marc@david.saclay.cea.fr
I can send you a reply during the weekend.

Checker could become a GNU package.

IF YOU GET Checker-V0.4.tgz, YOU ALSO NEED Checker-libs-V0.4.tgz.
You can also get Checker-Xlibs-V0.4.tgz.

Good Checks.

Tristan.
