use print_symbol() to decode the offender's program counter.


 mm/slab.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff -puN mm/slab.c~slab-caller-tracking-symbolic mm/slab.c
--- 25/mm/slab.c~slab-caller-tracking-symbolic	2003-03-07 11:54:37.000000000 -0800
+++ 25-akpm/mm/slab.c	2003-03-07 11:54:37.000000000 -0800
@@ -82,6 +82,7 @@
 #include	<linux/compiler.h>
 #include	<linux/seq_file.h>
 #include	<linux/notifier.h>
+#include	<linux/kallsyms.h>
 #include	<asm/uaccess.h>
 
 /*
@@ -801,11 +802,15 @@ static void check_poison_obj(kmem_cache_
 		printk(KERN_ERR "Slab corruption: start=%p, expend=%p, "
 				"problemat=%p\n", addr, addr+size-1, end);
 		if (cachep->flags & SLAB_STORE_USER) {
+			void *pc;
+
 			if (cachep->flags & SLAB_RED_ZONE)
-				printk(KERN_ERR "Last user: [<%p>]\n", *(void**)(addr+size+BYTES_PER_WORD));
+				pc = *(void**)(addr+size+BYTES_PER_WORD);
 			else
-				printk(KERN_ERR "Last user: [<%p>]\n", *(void**)(addr+size));
-
+				pc = *(void**)(addr+size);
+			printk(KERN_ERR "Last user: [<%p>]", pc);
+			print_symbol("(%s)", (unsigned long)pc);
+			printk("\n");
 		}
 		printk(KERN_ERR "Data: ");
 		for (s = 0; s < size; s++) {

_