On Wed, 2005-10-26 at 10:25 -0400, Dave Anderson wrote:
Badari Pulavarty wrote:
> Hi,
>
> I am getting following failures from "crash" when tried
> running on 2.6.14-rc5 on EM64T machine. Is this a known
> problem ?
>
> Thanks,
> Badari
>
> [root@localhost crash-4.0-2.8]# crash --readnow
>
> crash 4.0-2.8
> Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
> Copyright (C) 2004, 2005 IBM Corporation
> Copyright (C) 1999-2005 Hewlett-Packard Co
> Copyright (C) 1999, 2002 Silicon Graphics, Inc.
> Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
> This program is free software, covered by the GNU General Public
> License,
> and you are welcome to change it and/or distribute copies of it under
> certain conditions. Enter "help copying" to see the conditions.
> This program has absolutely no warranty. Enter "help warranty" for
> details.
>
> GNU gdb 6.1
> Copyright 2004 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you
> are
> welcome to change it and/or distribute copies of it under certain
> conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB. Type "show warranty" for
> details.
> This GDB was configured as "x86_64-unknown-linux-gnu"...
>
> crash: invalid structure member offset: x8664_pda_level4_pgt
> FILE: x86_64.c LINE: 332 FUNCTION: x86_64_cpu_pda_init()
>
> [/usr/bin/crash] error trace: 4456f3 => 4a6c8e => 4a7c0c => 4d0c1e
>
> 4d0c1e: OFFSET_verify+117
> 4a7c0c: x86_64_cpu_pda_init+771
> 4a6c8e: x86_64_init+1522
> 4456f3: main_loop+50
>
> --
> Crash-utility mailing list
> Crash-utility(a)redhat.com
>
https://www.redhat.com/mailman/listinfo/crash-utility
Between 2.6.10 and 2.6.11, the x8664_pda structure dropped the
level4_pgt member, and work needs to be done to get past it.
The contents of the x8664_pda.level4_pgt member is only used
as a qualifier in two of the crash utility's x86_64.c functions:
x86_64_cpu_pda_init()
where it's offset is initialized, and then the contents from each
potential x8664_pda structure is assigned to "level4_pgt", and
that value is passed to VALID_LEVEL4_PGT_ADDR() for
validation.
Similarly it's also used in:
x86_64_get_smp_cpus()
where, for each potential x8664_pda, its value is assigned to
"level4_pgt", and also passed to VALID_LEVEL4_PGT_ADDR()
for validation.
In both cases, crash is fishing around in the x8664_pda[NR_CPUS]
array to try to determine how many of the pda structures are legitimate,
and therefore how many cpus are in the system. But in both functions,
it also verifies the x8664_pda structure by requiring that the cpunumber
member also makes sense.
So I believe the level4_pgt is unnecessary in this case -- and if
INVALID_MEMBER(x8664_pda_level4_pgt) is true, then the
assignments to "level4_pgt" in both functions must not be attempted,
and VALID_LEVEL4_PGT_ADDR() either should not be attempted,
or just return TRUE if INVALID_MEMBER(x8664_pda_level4_pgt)
is true.
I need somebody to build and test this concept on a kernel with
this type of x8664_pda strucure.
Any volunteers?
Okay, I made those changes - ran into next problem :(
Ideas ?
Thanks,
Badari
[root@localhost crash-4.0-2.8]# ./crash
crash 4.0-2.8
Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
Copyright (C) 2004, 2005 IBM Corporation
Copyright (C) 1999-2005 Hewlett-Packard Co
Copyright (C) 1999, 2002 Silicon Graphics, Inc.
Copyright (C) 1999, 2000, 2001, 2002 Mission Critical Linux, Inc.
This program is free software, covered by the GNU General Public
License,
and you are welcome to change it and/or distribute copies of it under
certain conditions. Enter "help copying" to see the conditions.
This program has absolutely no warranty. Enter "help warranty" for
details.
GNU gdb 6.1
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you
are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for
details.
This GDB was configured as "x86_64-unknown-linux-gnu"...
crash: read error: kernel virtual address: ffff8100050eb084 type:
"tss_struct ist array"