public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
* Restoring pc to a different value than lr on aarch64
@ 2022-05-06 12:05 Yichao Yu
  2022-05-06 12:46 ` Yichao Yu
  0 siblings, 1 reply; 12+ messages in thread
From: Yichao Yu @ 2022-05-06 12:05 UTC (permalink / raw)
  To: gdb

I have a case in my code where I want to restore the value of lr (x30)
during unwinding, to a different value than the return address of the
code. However, it seems that for aarch64,
(aarch64_dwarf2_frame_init_reg among other functions) hardcode x30 and
pc to be exactly the same value after unwinding.

According to aadwarf64[1],

> having both LR and PC columns is useful for describing asynchronously created stack frames. A DWARF expression may use this register to restore the context in case of a signal context.

so assume the intention is that if I explicitly unwind the pc in
addition to lr, it should work. I tried to do that, and also to set
return address column to 32, as well as trying to mark the frame as
signal frame but none of them seems to work. Is there any way for gdb
to honer the explicit unwinding of pc?

Also it seems that the sp is also card coded to be cfa. My code also
contains explicit saving and restoring of that as well so if that's
the case (haven't tested yet) it would be a problem too...

Would it be possible to not use this hard-coded logic if the frame
contains explicit override of the pc value?

Yichao

A bit more about the actual code. This is done as part of runtime
patching code. The actual restoration of lr is done by returning to a
runtime allocated stub that restores lr and directly branch back to
the return location. After returning, all registers values are
restored back to their previous one. The stack pointer is also
switched out since we cannot rely on how much stack space the call
site has available.

[1] https://github.com/ARM-software/abi-aa/blob/8a7b266879c60ca1c76e94ebb279b2dac60ed6a5/aadwarf64/aadwarf64.rst#note-9

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2022-05-13 12:34 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-06 12:05 Restoring pc to a different value than lr on aarch64 Yichao Yu
2022-05-06 12:46 ` Yichao Yu
2022-05-06 13:32   ` Luis Machado
2022-05-06 16:11     ` Yichao Yu
2022-05-06 16:30       ` Yichao Yu
2022-05-09 10:44         ` Luis Machado
2022-05-09 14:24           ` Yichao Yu
2022-05-10 14:48             ` Luis Machado
2022-05-11 13:26               ` Yichao Yu
2022-05-11 14:51                 ` Luis Machado
2022-05-11 15:10                   ` Luis Machado
2022-05-13 12:34                   ` Yichao Yu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).