* Dave Anderson <anderson(a)redhat.com> [2007-10-29 20:34]:
 > Dave Anderson <anderson redhat com> [2007-10-22 15:32]:
 >> Troy Heber wrote:
 >>> On 10/19/07 12:23, Dave Anderson wrote:
 >>>> So my biggest worry would be if this somehow breaks
 >>>> backwards-compatibility, but I'm presuming that you took
 >>>> that into account.  But anyway, I leave this all up
 >>>> to Troy.
 >>> I just did a quick sanity check on a couple of old IA64 LKCD dumps and
 >>> everything seems to work, so I'm happy.
 >>> Troy
 >
 > Troy, thanks for checking this!
 >
 >> Bernhard, can you post a cleaned-up patch for queueing?
 >
 > Here it is (attached). I didn't see any warnings in the crash code
 > with 'make warn' now. I have used your own definition of offsetof()
 > but moved it into the header file.
 My biggest worry came true, so I'm going to have to NAK
 this patch in its current state. 
I'm sorry. Unfortunately, I have no old dumps to test here. Only SLES9
and SLES10, and that's v8/v9.
This patch should fix this.
---
 defs.h        |    3 ++-
 lkcd_common.c |   12 ++++++++++++
 lkcd_v8.c     |    6 +++---
 3 files changed, 17 insertions(+), 4 deletions(-)
--- a/defs.h
+++ b/defs.h
@@ -3845,7 +3845,7 @@ int get_lkcd_regs_for_cpu_arch(int cpu, 
 /*
  * lkcd_v8.c
  */
-int get_lkcd_regs_for_cpu(struct bt_info *bt, ulong *eip, ulong *esp);
+int get_lkcd_regs_for_cpu_v8(struct bt_info *bt, ulong *eip, ulong *esp);
 
 /*
  *  ia64.c
@@ -4111,6 +4111,7 @@ int lkcd_load_dump_page_header(void *, u
 void lkcd_dumpfile_complaint(uint32_t, uint32_t, int);
 int set_mb_benchmark(ulong);
 ulonglong fix_lkcd_address(ulonglong);
+int get_lkcd_regs_for_cpu(struct bt_info *bt, ulong *eip, ulong *esp);
 
 /*
  * lkcd_v1.c
--- a/lkcd_common.c
+++ b/lkcd_common.c
@@ -1401,3 +1401,15 @@ lkcd_dumpfile_complaint(uint32_t realpag
 	}
 }
 
+int
+get_lkcd_regs_for_cpu(struct bt_info *bt, ulong *eip, ulong *esp)
+{
+	switch (lkcd->version) {
+	case LKCD_DUMP_V8:
+	case LKCD_DUMP_V9:
+		return get_lkcd_regs_for_cpu_v8(bt, eip, esp);
+	default:
+		return -1;
+	}
+}
+
--- a/lkcd_v8.c
+++ b/lkcd_v8.c
@@ -69,12 +69,12 @@ get_lkcd_regs_for_cpu_arch(int cpu, ulon
 
 
 int
-get_lkcd_regs_for_cpu(struct bt_info *bt, ulong *eip, ulong *esp)
+get_lkcd_regs_for_cpu_v8(struct bt_info *bt, ulong *eip, ulong *esp)
 {
 	int cpu;
 
 	if (!bt || !bt->tc) {
-		fprintf(stderr, "get_lkcd_regs_for_cpu: invalid tc "
+		fprintf(stderr, "get_lkcd_regs_for_cpu_v8: invalid tc "
 				"(CPU=%d)\n", cpu);
 		return -EINVAL;
 	}
@@ -82,7 +82,7 @@ get_lkcd_regs_for_cpu(struct bt_info *bt
 	cpu = bt->tc->processor;
 
 	if (cpu >= NR_CPUS) {
-		fprintf(stderr, "get_lkcd_regs_for_cpu, cpu (%d) too high\n", cpu);
+		fprintf(stderr, "get_lkcd_regs_for_cpu_v8, cpu (%d) too high\n", cpu);
 		return -EINVAL;
 	}