Bug 14507 - failed to compute dwarf2-CFA when unwinder of caller frame is unknown.
Summary: failed to compute dwarf2-CFA when unwinder of caller frame is unknown.
Status: NEW
Alias: None
Product: gdb
Classification: Unclassified
Component: backtrace (show other bugs)
Version: HEAD
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-08-22 09:53 UTC by gee
Modified: 2012-08-22 09:53 UTC (History)
0 users

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments
the source i tried to debug. (2.76 KB, text/plain)
2012-08-22 09:53 UTC, gee
Details

Note You need to log in before you can comment on or make changes to this bug.
Description gee 2012-08-22 09:53:05 UTC
Created attachment 6598 [details]
the source i tried to debug.

i think gdb 7.1 didn't complain like following. but i got unexpected `error reading variable: can't compute CFA for this frame'
anyway, the following is mmap test debug session.
and in cygwin host, i tried to breakpoint mmap64(a.k.a mmap)
cygwin replaces its return address to sigbe so gdb cannot find its caller frame.(hence sigbe of sigfe.s doesn't contain any cfi information.)
the problem is, it resulted in displaying incorrect frame info about the callee frame which has correct dwarf-2 CFI, whose caller doesn't have CFI.


$ gdb --args a
GNU gdb (GDB) 7.5.50.20120806-cvs
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-pc-cygwin".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...

warning: the current range check setting does not match the language.


warning: the current type check setting does not match the language.

Whether backtraces should continue past the entry point of a program is off.
Reading symbols from /tmp/a...done.
(gdb) b mmap64
Function "mmap64" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y

Breakpoint 1 (mmap64) pending.
(gdb) r
Starting program: /tmp/a
[New Thread 5304.0x1d00]
[New Thread 5304.0x1428]

Breakpoint 1, mmap64 (
    addr=<error reading variable: can't compute CFA for this frame>,
    len=<error reading variable: can't compute CFA for this frame>,
    prot=<error reading variable: can't compute CFA for this frame>,
    flags=<error reading variable: can't compute CFA for this frame>,
    fd=<error reading variable: can't compute CFA for this frame>,
    off=<error reading variable: can't compute CFA for this frame>)
    at /tmp/winsup/winsup/cygwin/mmap.cc:795
795     {
(gdb) bt
#0  mmap64 (addr=<error reading variable: can't compute CFA for this frame>,
    len=<error reading variable: can't compute CFA for this frame>,
    prot=<error reading variable: can't compute CFA for this frame>,
    flags=<error reading variable: can't compute CFA for this frame>,
    fd=<error reading variable: can't compute CFA for this frame>,
    off=<error reading variable: can't compute CFA for this frame>)
    at /tmp/winsup/winsup/cygwin/mmap.cc:795
#1  0x610d2ca5 in _sigfe () from /usr/bin/cygwin1.dll
#2  0x00000003 in ?? ()
#3  0x00000012 in ?? ()
#4  0x00000003 in ?? ()
#5  0x00000000 in ?? ()
(gdb) info frame 0
Stack frame at 0x22ac10:
 eip = 0x61086420 in mmap64 (/tmp/winsup/winsup/cygwin/mmap.cc:795);
    saved eip 0x610d2ca5
 called by frame at 0x22ac1c
 source language c++.
 Arglist at 0x22ac08, args:
    addr=<error reading variable: can't compute CFA for this frame>,
    len=<error reading variable: can't compute CFA for this frame>,
    prot=<error reading variable: can't compute CFA for this frame>,
    flags=<error reading variable: can't compute CFA for this frame>,
    fd=<error reading variable: can't compute CFA for this frame>,
    off=<error reading variable: can't compute CFA for this frame>
 Locals at 0x22ac08, Previous frame's sp is 0x22ac10
 Saved registers:
  eip at 0x22ac0c
(gdb) info frame 1
Stack frame at 0x22ac1c:
 eip = 0x610d2ca5 in _sigbe; saved eip 0x3
 called by frame at 0x22ac20, caller of frame at 0x22ac10
 Arglist at 0x22ac14, args:
 Locals at 0x22ac14, Previous frame's sp is 0x22ac1c
 Saved registers:
  edx at 0x22ac0c, ebx at 0x22ac10, eip at 0x22ac18