diff -urN LeakTracer/LeakTracer.cc LeakTracer.new/LeakTracer.cc
--- LeakTracer/LeakTracer.cc	2003-11-18 13:42:21.000000000 +0000
+++ LeakTracer.new/LeakTracer.cc	2005-06-09 11:32:24.000000000 +0000
@@ -237,8 +237,8 @@
 	/*
 	 * the workhorses:
 	 */
-	void *registerAlloc(size_t size, bool type);
-	void  registerFree (void *p, bool type);
+	void *registerAlloc(size_t size, bool type, const void *caller);
+	void  registerFree (void *p, bool type, const void *caller);
 
 	/**
 	 * write a hexdump of the given area.
@@ -279,7 +279,7 @@
 	}
 } leakTracer;
 
-void* LeakTracer::registerAlloc (size_t size, bool type) {
+void* LeakTracer::registerAlloc (size_t size, bool type, const void *caller) {
 	initialize();
 
 	//	fprintf(stderr, "LeakTracer::registerAlloc()\n");
@@ -326,7 +326,7 @@
 				leaks[i].addr = p;
 				leaks[i].size = size;
 				leaks[i].type = type;
-				leaks[i].allocAddr=__builtin_return_address(1);
+				leaks[i].allocAddr=caller;
 				firstFreeSpot = i+1;
 				// allow to lookup our index fast.
 				int *hashPos = &leakHash[ ADDR_HASH(p) ];
@@ -375,7 +375,7 @@
 	fprintf(report, "\n");
 }
 
-void LeakTracer::registerFree (void *p, bool type) {
+void LeakTracer::registerFree (void *p, bool type, const void *caller) {
 	initialize();
 
 	if (p == NULL)
@@ -410,7 +410,7 @@
 				"S %10p %10p  # new%s but delete%s "
 				"; size %d\n",
 				leaks[i].allocAddr,
-				__builtin_return_address(1),
+				caller,
 				((!type) ? "[]" : " normal"),
 				((type) ? "[]" : " normal"),
 				leaks[i].size);
@@ -423,7 +423,7 @@
 				"# memory overwritten beyond allocated"
 				" %d bytes\n",
 				leaks[i].allocAddr,
-				__builtin_return_address(1),
+				caller,
 				leaks[i].size);
 			fprintf(report, "# %d byte beyond area:\n",
 				MAGIC_SIZE);
@@ -454,7 +454,7 @@
 	pthread_mutex_unlock(&mutex);
 #endif
 	fprintf(report, "D %10p             # delete non alloc or twice pointer %10p\n", 
-		__builtin_return_address(1), p);
+		caller, p);
 	progAbort( DELETE_NONEXISTENT );
 }
 
@@ -488,22 +488,22 @@
 /** -- The actual new/delete operators -- **/
 
 void* operator new(size_t size) {
-	return leakTracer.registerAlloc(size,false);
+	return leakTracer.registerAlloc(size,false,__builtin_return_address(0));
 }
 
 
 void* operator new[] (size_t size) {
-	return leakTracer.registerAlloc(size,true);
+	return leakTracer.registerAlloc(size,true,__builtin_return_address(0));
 }
 
 
 void operator delete (void *p) {
-	leakTracer.registerFree(p,false);
+	leakTracer.registerFree(p,false,__builtin_return_address(0));
 }
 
 
 void operator delete[] (void *p) {
-	leakTracer.registerFree(p,true);
+	leakTracer.registerFree(p,true,__builtin_return_address(0));
 }
 
 /* Emacs: 
