Serhei Makarov <[email protected]> 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 <[email protected]> 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) > {
signature.asc
Description: PGP signature
