[PATCH] gas: Improve documentation for cfi_remember/restore_state
Martin Galvan
martin.galvan@tallertechnologies.com
Fri Apr 15 14:22:00 GMT 2016
More information about the Binutils mailing list
Fri Apr 15 14:22:00 GMT 2016
- Previous message (by thread): [PATCH] gas: Improve documentation for cfi_remember/restore_state
- Next message (by thread): [PATCH] gas: Improve documentation for cfi_remember/restore_state
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Thu, Apr 14, 2016 at 8:16 PM, Alan Modra <amodra@gmail.com> wrote: > > On Thu, Apr 14, 2016 at 11:23:08AM -0300, Martin Galvan wrote: > > You mean something like: > > > > je label > > popq %rbx > > .cfi_remember_state > > .cfi_restore %rbx > > popq %rbp > > .cfi_restore %rbp > > popq %r12 > > .cfi_restore %r12 > > ret > > > > label: > > .cfi_restore_state > > /* Do something else */ > > > > In that case we're using .cfi_restore_state to save us having to use > > multiple CFI directives to recreate the original save locations. > > Yes, exactly. However the above example shows a gcc bug! If you're referring to the last example I sent (with the three pops), I wrote that manually. So it's a programmer bug, not gcc's :) > Hmm, seems like current mainline gcc is buggy in this area on x86_64. > I see this sort of thing around a tail call: > je .L4 > popq %rbp > .cfi_remember_state > .cfi_def_cfa 7, 8 > movl $1, %edi > jmp *%rax > .L4: > .cfi_restore_state > So the cfa is set back to rsp on popping rbp, but there ought to be a > ".cfi_restore 6". Otherwise when an async interrupt hits after the > pop of rbp, the unwinder will load rbp from the stack, which has just > been trashed by the interrupt handler.. That's probably true, though. I can look into it a bit more if you want. I know next to nothing about gcc internals, but a couple guys at the office can give me a hand with it. > It might be better to choose an example from gcc -fomit-frame-pointer > -fasynchronous-unwind-tables code. Could we keep my 3-pop example if I added the required CFA adjustment? I'd like to keep the example as simple as possible for the documentation.
- Previous message (by thread): [PATCH] gas: Improve documentation for cfi_remember/restore_state
- Next message (by thread): [PATCH] gas: Improve documentation for cfi_remember/restore_state
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list