[Crash-utility] "invalid structure member offset: task_struct_parent" on x86_64 rawhide
Jeff Layton
jlayton at redhat.com
Fri Apr 4 14:12:35 UTC 2008
On Fri, 04 Apr 2008 10:02:20 -0400
Dave Anderson <anderson at redhat.com> wrote:
> > Jeff Layton wrote:
> >> Looks like we might have gotten bitten by some upstream changes
> >> again...
> >>
> >> When I run crash on a recent rawhide x86_64 kernel, I seem to be
> >> getting this error:
> >>
> >> crash: invalid structure member offset: task_struct_parent
> >> FILE: task.c LINE: 2163 FUNCTION: store_context()
> >>
> >> [/usr/bin/crash] error trace: 49150a => 495bb8 => 4963be => 4fc1bc
> >> /usr/bin/nm: /usr/bin/crash: no symbols
> >> /usr/bin/nm: /usr/bin/crash: no symbols
> >> /usr/bin/nm: /usr/bin/crash: no symbols
> >> /usr/bin/nm: /usr/bin/crash: no symbols
> >>
> >> Relevant package versions:
> >>
> >> crash-4.0-6.2.x86_64
> >> kernel-2.6.25-0.185.rc7.git6.fc9.x86_64
> >>
> >> ...machine is a x86_64 FV xen guest. Any thoughts?
> >>
> >> Thanks,
> >
> > Yep, although the change is not upstream in Linus's tree, Roland's
> > linux-2.6-utrace.patch removes it in Fedora:
> >
> > @@ -1070,18 +1063,26 @@ struct task_struct {
> > /*
> > * pointers to (original) parent process, youngest child,
> > younger sibling,
> > * older sibling, respectively. (p->father can be replaced with
> > - * p->parent->pid)
> > + * p->real_parent->pid)
> > */
> > - struct task_struct *real_parent; /* real parent process (when
> > being debugged) */
> > - struct task_struct *parent; /* parent process */
> > + struct task_struct *real_parent; /* real parent process */
> > /*
> > - * children/sibling forms the list of my children plus the
> > - * tasks I'm ptracing.
> > + * children/sibling forms the list of my natural children
> > */
> >
> > AFAICT, task_struct.real_parent can be substituted. Try the attached
> > patch. (and then wait to see what else has been broken...)
> >
> > Dave
> >
> >
> >
> > ------------------------------------------------------------------------
> >
> > --- task.c.orig 2008-04-04 09:48:38.000000000 -0400
> > +++ task.c 2008-04-04 09:50:13.000000000 -0400
> > @@ -208,6 +208,9 @@
> > MEMBER_OFFSET_INIT(task_struct_processor, "task_struct", "processor");
> > MEMBER_OFFSET_INIT(task_struct_p_pptr, "task_struct", "p_pptr");
> > MEMBER_OFFSET_INIT(task_struct_parent, "task_struct", "parent");
> > + if (INVALID_MEMBER(task_struct_parent))
> > + MEMBER_OFFSET_INIT(task_struct_parent, "task_struct",
> > + "real_parent");
> > MEMBER_OFFSET_INIT(task_struct_has_cpu, "task_struct", "has_cpu");
> > MEMBER_OFFSET_INIT(task_struct_cpus_runnable,
> > "task_struct", "cpus_runnable");
>
That worked! I didn't do any extensive testing, but that seems to allow
crash to start and do a "ps".
Many thanks!
--
Jeff Layton <jlayton at redhat.com>
More information about the Crash-utility
mailing list