Bernhard Walle wrote:
* 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;
}
Thanks -- this one works. Queued for (today's?) release...
Dave