This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug debug/53927] wrong value for DW_AT_static_link
- From: "ebotcazou at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 31 Jan 2013 22:34:02 +0000
- Subject: [Bug debug/53927] wrong value for DW_AT_static_link
- Auto-submitted: auto-generated
- References: <bug-53927-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53927
--- Comment #6 from Eric Botcazou <ebotcazou at gcc dot gnu.org> 2013-01-31 22:34:02 UTC ---
> The idea is you can determine which instance by computing the static link,
> then unwind the stack and look for the corresponding CFA.
> The test case here is supposed to confound simplistic approaches to this
> by having multiple instances of 'nestee' on the stack.
Yes, but you can do something useful even with this value of DW_AT_static_link,
albeit not exactly what DWARF means. In the GDB released by AdaCore, we do use
this value of DW_AT_static_link to deal with up-level references; you can ask
Joel for the details.
> Note also that if the nested function doesn't refer to any variables from
> the outer scope, then GCC seems not to emit DW_AT_static_link at all.
> I guess this is an optimization; but it is a little unfortunate since
> it makes debugging less obvious.
Indeed, that's why in AdaCore's version of the compiler, we always generate
DW_AT_static_link at -O0, and we even force the static chain onto the stack in
this case (as there are no location lists at -O0).