This is the mail archive of the
gdb-prs@sourceware.org
mailing list for the GDB project.
[Bug backtrace/16215] SPARC: can't compute CFA for this frame
- From: "cvs-commit at gcc dot gnu.org" <sourceware-bugzilla at sourceware dot org>
- To: gdb-prs at sourceware dot org
- Date: Sat, 13 Dec 2014 13:27:18 +0000
- Subject: [Bug backtrace/16215] SPARC: can't compute CFA for this frame
- Auto-submitted: auto-generated
- References: <bug-16215-4717 at http dot sourceware dot org/bugzilla/>
https://sourceware.org/bugzilla/show_bug.cgi?id=16215
--- Comment #5 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".
The branch, master has been updated
via 14aba1ac0d583ebd77b7645f88308d75c0a69d0f (commit)
from ae6a105d22fb603dbfb956bbcedf9ae469323d55 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=14aba1ac0d583ebd77b7645f88308d75c0a69d0f
commit 14aba1ac0d583ebd77b7645f88308d75c0a69d0f
Author: Joel Brobecker <brobecker@adacore.com>
Date: Fri Nov 21 04:59:35 2014 +0100
Lift DWARF unwinder restriction in dwarf2-frame.c::dwarf2_frame_cfa
GDB is currently broken on all SPARC targets when using GCC 4.9.
When trying to print any local variable:
(gdb) p x
can't compute CFA for this frame
This is related to the fact that the compiler now generates DWARF 4
debugging info by default, and in particular that it now emits
DW_OP_call_frame_cfa, which triggers a limitation in dwarf2_frame_cfa:
/* This restriction could be lifted if other unwinders are known to
compute the frame base in a way compatible with the DWARF
unwinder. */
if (!frame_unwinder_is (this_frame, &dwarf2_frame_unwind)
&& !frame_unwinder_is (this_frame, &dwarf2_tailcall_frame_unwind))
error (_("can't compute CFA for this frame"));
We couldn't append the dwarf2 unwinder to all SPARC targets because
it does not work properly with StackGhost:
https://www.sourceware.org/ml/gdb-patches/2014-07/msg00012.html
We also later discovered that using the DWARF2 unwinder means
using it for computing the function's return address, which
is buggy when it comes to functions returning a struct (where
the return address is saved-pc+12 instead of saved-pc+8).
This is because GCC is emitting the info about the return address
as %o7/%i7 instead of the actual return address. For functions
that have debugging info, we compensate by looking at the function's
return type and add the extra +4, but for function without debug
info, we're stuck.
EricB and I twisted the issue in all the directions we could think of,
and unfortunately couldn't find a way to make it work without
introduction one regression or another.
But, stepping back a little, just removing the restriction seems to work
well for us on all both sparc-elf and {sparc,sparc64}-solaris.
After reviewing the previous discussions about this test, I could
not figure out whether some unwinders were already known to have
incompatible CFAs or if the concern was purely theoretical:
https://www.sourceware.org/ml/gdb-patches/2009-06/msg00191.html
https://www.sourceware.org/ml/gdb-patches/2009-07/msg00570.html
https://www.sourceware.org/ml/gdb-patches/2009-09/msg00027.html
At the moment, we took the approach of trying it out, and see what
happens...
gdb/ChangeLog:
PR backtrace/16215:
* dwarf2-frame.c (dwarf2_frame_cfa): Remove the restriction
the frame unwinder must either be the dwarf2_frame_unwind
or the dwarf2_tailcall_frame_unwind. Verify that this_frame's
stack_addr is valid before calling get_frame_base. Throw
an error if not valid.
Tested on sparc-solaris and sparc-elf with AdaCore's testsuite
(the FSF testsuite crashes all of AdaCore's solaris machines).
-----------------------------------------------------------------------
Summary of changes:
gdb/dwarf2-frame.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
--
You are receiving this mail because:
You are on the CC list for the bug.