FYI: x86_64 bug when using gdb with vmcore
Dave Anderson
anderson at redhat.com
Wed Feb 17 08:49:46 EST 2010
----- "Simon Horman" <horms at verge.net.au> wrote:
> On Fri, Feb 05, 2010 at 11:53:18AM -0500, Dave Anderson wrote:
> >
> > The kexec/arch/x86_64/crashdump-x86_64.h file contains a
> > stale PAGE_OFFSET value. In 2.6.27 it was changed from
> > 0xffff810000000000UL to 0xffff880000000000UL. This is
> > only a problem when using gdb with the vmlinux/vmcore
> > pair, because gdb relies upon the PT_LOAD segment's p_vaddr
> > values in the ELF header to be correct.
> >
> > Anyway, in the RHEL6 kexec-tools, this simple patch
> > was made:
> >
> > -#define PAGE_OFFSET 0xffff810000000000UL
> > +#define PAGE_OFFSET 0xffff880000000000UL
> >
> > which is OK since the RHEL6 version of kexec-tools
> > will only be used with RHEL6 kernels.
> >
> > But for backwards compatibility, the better way to do
> > it would be to check the utsname of the running kernel,
> > and use the right value.
> >
> > But again, this is only required for gdb usage. The
> > crash utility (and makedumpfile) make kernel version checks
> > to determine which x86_64 PAGE_OFFSET value is applicable,
> > and don't rely on the ELF header p_vaddr values for
> > the unity-mapped regions.
>
> Hi Dave,
>
> Something like this?
Looks good to me -- all except for the second "if" statement/typo below:
> +int arch_init(void)
> +{
> + int kv;
> +
> + kv = kernel_version();
> + if (kv < 0)
> + return -1;
> +
> + if (kv < KERNEL_VERSION(2, 4, 27))
> + page_offset = PAGE_OFFSET_PRE_2_6_27;
> + else
> + page_offset = PAGE_OFFSET;
> +
> + return 0;
> +}
Thanks,
Dave
More information about the kexec
mailing list