From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31810 invoked by alias); 31 Oct 2011 21:35:30 -0000 Received: (qmail 31645 invoked by uid 22791); 31 Oct 2011 21:35:30 -0000 X-SWARE-Spam-Status: No, hits=-0.0 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from mail-pz0-f49.google.com (HELO mail-pz0-f49.google.com) (209.85.210.49) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 31 Oct 2011 21:35:14 +0000 Received: by pzk32 with SMTP id 32so19423408pzk.8 for ; Mon, 31 Oct 2011 14:35:14 -0700 (PDT) MIME-Version: 1.0 Received: by 10.68.43.100 with SMTP id v4mr185433pbl.35.1320096913837; Mon, 31 Oct 2011 14:35:13 -0700 (PDT) Received: by 10.68.43.137 with HTTP; Mon, 31 Oct 2011 14:35:13 -0700 (PDT) In-Reply-To: <201110311946.50273.pedro@codesourcery.com> References: <201110311743.03721.pedro@codesourcery.com> <201110311946.50273.pedro@codesourcery.com> Date: Mon, 31 Oct 2011 21:36:00 -0000 Message-ID: Subject: Fwd: How "can't compute CFA for this frame" and "no enough registers or memory available to further unwind" happen? From: zhihua che To: gdb Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2011-10/txt/msg00245.txt.bz2 ---------- Forwarded message ---------- From: Pedro Alves 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 On Monday 31 October 2011 18:45:09, zhihua che wrote: > 2011/11/1 Pedro Alves : > > On Monday 31 October 2011 17:25:46, zhihua che wrote: > >> Hi, everyone > >> > >> =A0 =A0 =A0 =A0I'm not sure this is right place for the help. I'm writ= ing 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. =A0Check what is it that gdb is finding > > unavailable. =A0Put a breakpoint at `throw_error' and then do that > > "print XXX". =A0You should hit a call like `throw_error (NOT_AVAILABLE_= ERROR...'. > > Get a backtrace. =A0Do "continue" on the top gdb, and see if further > > hits appear. =A0GDB 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: > =A0 =A0 =A0 if (! frame_unwinder_is(this_frame, &dwarf2_frame_unwinder)) > =A0 =A0 =A0 =A0 =A0 =A0error(_("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. =A0You should try mainline gdb, or a recent cvs snapshop. =A0What's the gdb version you're using BTW? And what's the gdb backtrace at that point? -- Pedro Alves