On Thu, Apr 24, 2025 at 5:48 PM Serhei Makarov <[email protected]> wrote:
>
> Changes for v2:
>
> - No longer exposing this in public libdwfl.h api.
>
> * * *
>
> Renaming pid_set_initial_registers to
> __libdwfl_set_initial_registers_thread and adding to libdwflP.h.
>
> This callback was private to one file, but now we need to access it
> from the perf_events sampling code as well.
>
> * libdwfl/libdwflP.h (__libdwfl_set_initial_registers_thread): New function.
> * libdwfl/linux-pid-attach.c (__libdwfl_set_initial_registers_thread):
> Renamed from pid_thread_state_registers_cb.
> (pid_set_initial_registers): Pass the newly renamed callback.
> ---
> libdwfl/libdwflP.h | 11 ++++++++++-
> libdwfl/linux-pid-attach.c | 12 +++++++-----
> 2 files changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/libdwfl/libdwflP.h b/libdwfl/libdwflP.h
> index 6ec5c966..2b7eb8da 100644
> --- a/libdwfl/libdwflP.h
> +++ b/libdwfl/libdwflP.h
> @@ -1,5 +1,5 @@
> /* Internal definitions for libdwfl.
> - Copyright (C) 2005-2015, 2018, 2024 Red Hat, Inc.
> + Copyright (C) 2005-2015, 2018, 2024-2025 Red Hat, Inc.
> This file is part of elfutils.
>
> This file is free software; you can redistribute it and/or modify
> @@ -591,6 +591,15 @@ extern Dwfl_Module *__libdwfl_report_offline (Dwfl
> *dwfl, const char *name,
> extern void __libdwfl_process_free (Dwfl_Process *process)
> internal_function;
>
> +/* Basic implementation of Dwfl_Thread_Callbacks.set_initial_registers.
> + ARG must be a Dwfl_Thread *. Calls dwfl_thread_state_register_pc
> + if firstreg is -1 (indicating arch PC), dwfl_thread_state_registers
> + otherwise. */
> +extern bool __libdwfl_set_initial_registers_thread (int firstreg,
> + unsigned nregs,
> + const Dwarf_Word *regs,
> + void *arg);
> +
Some missing whitespace.
> /* Update STATE->unwound for the unwound frame.
> On error STATE->unwound == NULL
> or STATE->unwound->pc_state == DWFL_FRAME_STATE_ERROR;
> diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c
> index 0eec1e88..a6e4e41a 100644
> --- a/libdwfl/linux-pid-attach.c
> +++ b/libdwfl/linux-pid-attach.c
> @@ -1,5 +1,5 @@
> /* Get Dwarf Frame state for target live PID process.
> - Copyright (C) 2013, 2014, 2015, 2018 Red Hat, Inc.
> + Copyright (C) 2013, 2014, 2015, 2018, 2025 Red Hat, Inc.
> This file is part of elfutils.
>
> This file is free software; you can redistribute it and/or modify
> @@ -304,9 +304,11 @@ pid_getthread (Dwfl *dwfl __attribute__ ((unused)),
> pid_t tid,
>
> /* Implement the ebl_set_initial_registers_tid setfunc callback. */
>
> -static bool
> -pid_thread_state_registers_cb (int firstreg, unsigned nregs,
> - const Dwarf_Word *regs, void *arg)
> +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)
> @@ -338,7 +340,7 @@ pid_set_initial_registers (Dwfl_Thread *thread, void
> *thread_arg)
> Dwfl_Process *process = thread->process;
> Ebl *ebl = process->ebl;
> return ebl_set_initial_registers_tid (ebl, tid,
> - pid_thread_state_registers_cb,
> thread);
> +
> __libdwfl_set_initial_registers_thread, thread);
> }
>
> static void
> --
> 2.47.0
>
With the formatting change mentioned above, LGTM.
Aaron