On 2025-11-13 20:40, H. Peter Anvin wrote:
> 
> For 64 bits, if you need frame pointer support *and* frob %rsp, using:
> 
> xchg %[arg],%%rbp
> <stuff>
> xchg %[arg],%%rbp
> 
> ... is probably easiest, with %[arg] in a register.
> 

Incidentally, ORC is one thing, but if you need DWARF information to be
correct for user space, it is definitely "fun".  With the xchg hack for 64
bits it is just a matter of using .cfi_def_cfa_register to change the frame
pointer around, but in the 32-bit case the best I could come up with was:

        .cfi_remember_state
        push %ebp
        .cfi_escape 0x0f,3,0x74,0,0x06  // CFA address in *%esp
        mov %eax, %ebp
        mov $syscall_no, %eax
        int $0x80
        pop %ebp
        .cfi_restore_state

Note that in both cases you need to *NOT* put in any of these CFI directives
when compiling without frame pointers (in which case you need to let gcc take
care of it if you want any hope of getting the CFI correct.)

        -hpa


Reply via email to