Re: [PATCH 7/7] DWARF: add the config option

From: Josh Poimboeuf
Date: Mon May 22 2017 - 18:11:26 EST


On Mon, May 22, 2017 at 02:37:50PM -0700, H. Peter Anvin wrote:
> On 05/22/17 14:07, H. Peter Anvin wrote:
> > On 05/20/17 13:01, H.J. Lu wrote:
> >> On Sat, May 20, 2017 at 9:20 AM, Josh Poimboeuf <jpoimboe@xxxxxxxxxx> wrote:
> >>
> >>>>
> >>>> (H.J., could we get a binutils feature that allows is to do:
> >>>>
> >>>> pushq %whatever
> >>>> .cfi_adjust_sp -8
> >>>> ...
> >>>> popq %whatever
> >>>> .cfi_adjust_sp 8
> >>>>
> >>
> >> Np. Compiler needs to generate this.
> >>
> >
> > For actual assembly we have such a feature, it is called macros.
> >
> > push/pop is the easy stuff; macros take care of that, but the real pain
> > is dealing with the flow of control.
> >
>
> My biggest beef with the CFI directives that gas uses is that there is
> that .cfi_remember_state/.cfi_restore_state doesn't have a way to
> specify more than one state. That makes it really hard to get sanity
> around control flow changes, especially with code that is intentionally
> out of line.
>
> That, and some of the CFI directives seem to be a bit ill-defined in
> their definition (are they even applicable to anything other than
> DWARF?) They almost seem to be referencing some external specification,
> but the only thing I'm finding is the DWARF documentation which is
> written in very different terms.
>
> The best description of what a personality routine is I found in an
> article by Ian Lance Taylor. It doesn't seem to be applicable to C as
> far as I can tell.

So my understanding is that there's stock DWARF (.debug_frame) and then
there's souped-up DWARF (.eh_frame), which is basically DWARF with a few
extensions.

The remember/restore state thing is stock DWARF (DW_CFA_remember_state
and DW_CFA_restore_state). The personality routine thing is in the
.eh_frame extension which is documented here:

http://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/ehframechpt.html

--
Josh