From: Serhei Makarov Date: Fri, 13 Mar 2026 15:06:03 +0000 (-0400) Subject: libdwfl/linux-pid-attach.c PR33974: __libdwfl_set_initial_registers_thread on non... X-Git-Tag: elfutils-0.195~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=99999b28054eee4a6100a6237699646655d9fd61;p=thirdparty%2Felfutils.git libdwfl/linux-pid-attach.c PR33974: __libdwfl_set_initial_registers_thread on non-Linux 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. Tested-by: Sam James Signed-off-by: Serhei Makarov --- 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) {