On Thu, 14 Nov 2013 16:16:26 +0100, Mark Wielaard wrote: > Yes, this makes sense to me. The elf is more "natural" to pass around > than the more abstract e_machine. Looks good.
Checked in. Thanks, Jan Fix dwfl_attach_state machine->elf Signed-off-by: Jan Kratochvil <[email protected]> --- libdwfl/ChangeLog | 12 ++++++++++++ libdwfl/dwfl_frame.c | 6 +++--- libdwfl/libdwfl.h | 14 +++++++------- libdwfl/linux-core-attach.c | 4 ++-- libdwfl/linux-pid-attach.c | 2 +- 5 files changed, 25 insertions(+), 13 deletions(-) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index 95e3cd7..561017b 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,15 @@ +2013-11-14 Jan Kratochvil <[email protected]> + + Fix dwfl_attach_state machine->elf. + * dwfl_frame.c (dwfl_attach_state): Change parameter machine to elf. + Call ebl_openbackend instead of ebl_openbackend_machine. + * libdwfl.h (dwfl_attach_state): Change parameter machine to elf. + Update the function description. + * linux-core-attach.c (__libdwfl_attach_state_for_core): Pass CORE to + dwfl_attach_state. + * linux-pid-attach.c (__libdwfl_attach_state_for_pid): Pass NULL to + dwfl_attach_state. + 2013-11-06 Jan Kratochvil <[email protected]> Provide __libdwfl_module_getsym to get dwfl_file *. diff --git a/libdwfl/dwfl_frame.c b/libdwfl/dwfl_frame.c index 11376c6..f286350 100644 --- a/libdwfl/dwfl_frame.c +++ b/libdwfl/dwfl_frame.c @@ -131,7 +131,7 @@ process_alloc (Dwfl *dwfl) } bool -dwfl_attach_state (Dwfl *dwfl, int machine, pid_t pid, +dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, const Dwfl_Thread_Callbacks *thread_callbacks, void *arg) { if (thread_callbacks == NULL || thread_callbacks->next_thread == NULL @@ -147,9 +147,9 @@ dwfl_attach_state (Dwfl *dwfl, int machine, pid_t pid, } Ebl *ebl; bool ebl_close; - if (machine != EM_NONE) + if (elf != NULL) { - ebl = ebl_openbackend_machine (machine); + ebl = ebl_openbackend (elf); ebl_close = true; } else diff --git a/libdwfl/libdwfl.h b/libdwfl/libdwfl.h index bbabb70..303f79c 100644 --- a/libdwfl/libdwfl.h +++ b/libdwfl/libdwfl.h @@ -625,13 +625,13 @@ typedef struct } Dwfl_Thread_Callbacks; /* PID is the process id associated with the DWFL state. Architecture of DWFL - modules is specified by MACHINE. Use EM_NONE to detect architecture from - DWFL. If EBL is NULL the function will detect it from arbitrary Dwfl_Module - of DWFL. DWFL_ARG is the callback backend state. DWFL_ARG will be provided - to the callbacks. *THREAD_CALLBACKS function pointers must remain valid - during lifetime of DWFL. Function returns true on success, - false otherwise. */ -bool dwfl_attach_state (Dwfl *dwfl, int machine, pid_t pid, + modules is specified by ELF, ELF must remain valid during DWFL lifetime. + Use NULL ELF to detect architecture from DWFL, the function will then detect + it from arbitrary Dwfl_Module of DWFL. DWFL_ARG is the callback backend + state. DWFL_ARG will be provided to the callbacks. *THREAD_CALLBACKS + function pointers must remain valid during lifetime of DWFL. Function + returns true on success, false otherwise. */ +bool dwfl_attach_state (Dwfl *dwfl, Elf *elf, pid_t pid, const Dwfl_Thread_Callbacks *thread_callbacks, void *dwfl_arg) __nonnull_attribute__ (1, 4); diff --git a/libdwfl/linux-core-attach.c b/libdwfl/linux-core-attach.c index 106d764..971d495 100644 --- a/libdwfl/linux-core-attach.c +++ b/libdwfl/linux-core-attach.c @@ -369,8 +369,8 @@ __libdwfl_attach_state_for_core (Dwfl *dwfl, Elf *core) core_arg->note_data = note_data; core_arg->thread_note_offset = 0; core_arg->ebl = ebl; - if (! INTUSE(dwfl_attach_state) (dwfl, ebl_get_elfmachine (ebl), pid, - &core_thread_callbacks, core_arg)) + if (! INTUSE(dwfl_attach_state) (dwfl, core, pid, &core_thread_callbacks, + core_arg)) { free (core_arg); ebl_closebackend (ebl); diff --git a/libdwfl/linux-pid-attach.c b/libdwfl/linux-pid-attach.c index 5ad58f6..b4f3165 100644 --- a/libdwfl/linux-pid-attach.c +++ b/libdwfl/linux-pid-attach.c @@ -271,7 +271,7 @@ __libdwfl_attach_state_for_pid (Dwfl *dwfl, pid_t pid) } pid_arg->dir = dir; pid_arg->tid_attached = 0; - if (! INTUSE(dwfl_attach_state) (dwfl, EM_NONE, pid, &pid_thread_callbacks, + if (! INTUSE(dwfl_attach_state) (dwfl, NULL, pid, &pid_thread_callbacks, pid_arg)) { closedir (dir); -- 1.8.3.1
