This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fwd: How "can't compute CFA for this frame" and "no enough registers or memory available to further unwind" happen?


---------- Forwarded message ----------
From: Pedro Alves <pedro@codesourcery.com>
Date: 2011/11/1
Subject: Re: How "can't compute CFA for this frame" and "no enough
registers or memory available to further unwind" happen?
To: zhihua che <zhihua.che@gmail.com>


On Monday 31 October 2011 18:45:09, zhihua che wrote:
> 2011/11/1 Pedro Alves <pedro@codesourcery.com>:
> > On Monday 31 October 2011 17:25:46, zhihua che wrote:
> >> Hi, everyone
> >>
> >> ? ? ? ?I'm not sure this is right place for the help. I'm writing a
> >> toy os and coding with mixed assembly and C language, debugging with
> >> GDB. But I'm trapped with an annoying problem. This is my situation:
> >> During the os booting time, after the os control transfers from real
> >> mode assembly codes to real mode C codes, I wish I can exam the stack
> >> frames and local variable as I do in regular application program, but
> >> I always get "can't compute CFA for this frame" or "No enough
> >> registers or memory available to further unwind" if I issue "print
> >> xxx" or "backtrace" command respectivelly.
> >
> > You'll need to debug gdb. ?Check what is it that gdb is finding
> > unavailable. ?Put a breakpoint at `throw_error' and then do that
> > "print XXX". ?You should hit a call like `throw_error (NOT_AVAILABLE_ERROR...'.
> > Get a backtrace. ?Do "continue" on the top gdb, and see if further
> > hits appear. ?GDB has an exception handling mechanism, and that
> > exception may be thrown more than once during a command run.
>
> I've tried debugging the GDB under "print xxx" circumstance, and I
> find it doesn't satisfy an comparison in dwarf2_frame_cfa() which is
> like the below:
> ? ? ? if (! frame_unwinder_is(this_frame, &dwarf2_frame_unwinder))
> ? ? ? ? ? ?error(_("can't compute CFA for this frame"))
> the frame_unwinder_is() tests if this_frame->unwind is equal with
> &dwarf2_frame_unwind. And I further find out this_frame->unwind is
> equal with &sentinel_frame_unwind instead in this situation

This code changed recently. ?You should try mainline gdb, or a
recent cvs snapshop. ?What's the gdb version you're using BTW?

And what's the gdb backtrace at that point?

--
Pedro Alves


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]