From ed78237ef7c31fb1d7dc80e2c2e07484e1216727 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Thu, 14 Nov 2013 20:53:20 +0100 Subject: Fix dwfl_attach_state machine->elf Signed-off-by: Jan Kratochvil --- 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 95e3cd7c..561017b1 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,15 @@ +2013-11-14 Jan Kratochvil + + 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 Provide __libdwfl_module_getsym to get dwfl_file *. diff --git a/libdwfl/dwfl_frame.c b/libdwfl/dwfl_frame.c index 11376c6e..f2863503 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 bbabb708..303f79cc 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 106d7649..971d495f 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 5ad58f6b..b4f31654 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); -- cgit v1.2.1