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);
+
/* 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