[PATCH v3] libdwfl/linux-pid-attach.c PR33974: __libdwfl_set_initial_registers_thread on non-Linux
Sam James
sam@gentoo.org
Wed Mar 18 21:57:35 GMT 2026
Serhei Makarov <serhei@serhei.io> writes:
> libdwfl_stacktrace uses __libdwfl_set_initial_registers_thread but it
> is wrapped by #ifdef __linux__, causing build errors on non-Linux
> platforms.
>
> * linux-pid-attach.c (__libdwfl_set_initial_registers_thread):
> Remove from inside the '#ifdef __linux__'.
> * dwfl_frame_regs.c (__libdwfl_set_initial_registers_thread):
> Move here.
I have no opinion on the design of the fix so I won't say I've reviewed
it.
Tested-by: Sam James <sam@gentoo.org>
Thank you!
> ---
> libdwfl/dwfl_frame_regs.c | 27 +++++++++++++++++++++++++++
> libdwfl/linux-pid-attach.c | 25 -------------------------
> 2 files changed, 27 insertions(+), 25 deletions(-)
>
> diff --git a/libdwfl/dwfl_frame_regs.c b/libdwfl/dwfl_frame_regs.c
> index 572ac676..99de3c22 100644
> --- a/libdwfl/dwfl_frame_regs.c
> +++ b/libdwfl/dwfl_frame_regs.c
> @@ -77,3 +77,30 @@ dwfl_frame_reg (Dwfl_Frame *state, unsigned regno, Dwarf_Word *val)
> return res;
> }
> INTDEF(dwfl_frame_reg)
> +
> +/* Implement the ebl_set_initial_registers_tid setfunc callback. */
> +
> +bool
> +/* Not internal_function, since that allows calling-convention changes
> + e.g. on i386, and stable ABI is needed to use this as an
> + ebl_tid_registers_t * callback in linux-pid-attach.c and
> + libdwfl_stacktrace. */
> +__libdwfl_set_initial_registers_thread (int firstreg, unsigned nregs,
> + const Dwarf_Word *regs, void *arg)
> +{
> + Dwfl_Thread *thread = (Dwfl_Thread *) arg;
> + if (firstreg == -1)
> + {
> + assert (nregs == 1);
> + INTUSE(dwfl_thread_state_register_pc) (thread, *regs);
> + return true;
> + }
> + else if (firstreg == -2)
> + {
> + assert (nregs == 1);
> + INTUSE(dwfl_thread_state_registers) (thread, firstreg, nregs, regs);
> + return true;
> + }
> + assert (nregs > 0);
> + return INTUSE(dwfl_thread_state_registers) (thread, firstreg, nregs, regs);
> +}
> diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c
> index a6e4e41a..9472b041 100644
> --- a/libdwfl/linux-pid-attach.c
> +++ b/libdwfl/linux-pid-attach.c
> @@ -302,31 +302,6 @@ pid_getthread (Dwfl *dwfl __attribute__ ((unused)), pid_t tid,
> return true;
> }
>
> -/* Implement the ebl_set_initial_registers_tid setfunc callback. */
> -
> -bool
> -/* XXX No internal_function annotation,
> - as this function gets passed as ebl_tid_registers_t *. */
> -__libdwfl_set_initial_registers_thread (int firstreg, unsigned nregs,
> - const Dwarf_Word *regs, void *arg)
> -{
> - Dwfl_Thread *thread = (Dwfl_Thread *) arg;
> - if (firstreg == -1)
> - {
> - assert (nregs == 1);
> - INTUSE(dwfl_thread_state_register_pc) (thread, *regs);
> - return true;
> - }
> - else if (firstreg == -2)
> - {
> - assert (nregs == 1);
> - INTUSE(dwfl_thread_state_registers) (thread, firstreg, nregs, regs);
> - return true;
> - }
> - assert (nregs > 0);
> - return INTUSE(dwfl_thread_state_registers) (thread, firstreg, nregs, regs);
> -}
> -
> static bool
> pid_set_initial_registers (Dwfl_Thread *thread, void *thread_arg)
> {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 418 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/elfutils-devel/attachments/20260318/f0ebedad/attachment.sig>
More information about the Elfutils-devel
mailing list