Make some functions and datastructures global. Definitely a hack.
diff --git a/common.h b/common.h
index 45d38fc..115b954 100644
--- a/common.h
+++ b/common.h
@@ -233,6 +233,14 @@
extern void show_summary(void);
extern arg_type_info * lookup_prototype(enum arg_type at);
+extern void do_init_elf(struct ltelf *lte, const char *filename);
+extern void do_close_elf(struct ltelf *lte);
+extern int in_load_libraries(const char *name, struct ltelf *lte, size_t count, GElf_Sym *sym);
+extern struct library_symbol *library_symbols;
+extern void add_library_symbol(GElf_Addr addr, const char *name,
+ struct library_symbol **library_symbolspp,
+ enum toplt type_of_plt, int is_weak);
+
/* Arch-dependent stuff: */
extern char * pid2name(pid_t pid);
extern void trace_set_options(Process * proc, pid_t pid);
diff --git a/ltrace-elf.c b/ltrace-elf.c
index 57a0399..004a307 100644
--- a/ltrace-elf.c
+++ b/ltrace-elf.c
@@ -13,14 +13,15 @@
#include "common.h"
-static void do_init_elf(struct ltelf *lte, const char *filename);
-static void do_close_elf(struct ltelf *lte);
-static void add_library_symbol(GElf_Addr addr, const char *name,
- struct library_symbol **library_symbolspp,
- enum toplt type_of_plt, int is_weak);
-static int in_load_libraries(const char *name, struct ltelf *lte, size_t count, GElf_Sym *sym);
+void do_init_elf(struct ltelf *lte, const char *filename);
+void do_close_elf(struct ltelf *lte);
+void add_library_symbol(GElf_Addr addr, const char *name,
+ struct library_symbol **library_symbolspp,
+ enum toplt type_of_plt, int is_weak);
+int in_load_libraries(const char *name, struct ltelf *lte, size_t count, GElf_Sym *sym);
static GElf_Addr opd2addr(struct ltelf *ltc, GElf_Addr addr);
+struct library_symbol *library_symbols = NULL;
#ifdef PLT_REINITALISATION_BP
extern char *PLTs_initialized_by_here;
#endif
@@ -132,7 +133,7 @@
return 0;
}
-static void
+void
do_init_elf(struct ltelf *lte, const char *filename) {
int i;
GElf_Addr relplt_addr = 0;
@@ -452,7 +453,7 @@
}
}
-static void
+void
do_close_elf(struct ltelf *lte) {
debug(DEBUG_FUNCTION, "do_close_elf()");
if (lte->lte_flags & LTE_HASH_MALLOCED)
@@ -461,7 +462,7 @@
close(lte->fd);
}
-static void
+void
add_library_symbol(GElf_Addr addr, const char *name,
struct library_symbol **library_symbolspp,
enum toplt type_of_plt, int is_weak) {
@@ -517,7 +518,7 @@
&& strcmp(name, lte[lte_i].dynstr + tmp->st_name) == 0;
}
-static int
+int
in_load_libraries(const char *name, struct ltelf *lte, size_t count, GElf_Sym *sym) {
size_t i;
unsigned long hash;
@@ -598,7 +599,6 @@
struct library_symbol *
read_elf(Process *proc) {
- struct library_symbol *library_symbols = NULL;
struct ltelf lte[MAX_LIBRARIES + 1];
size_t i;
struct opt_x_t *xptr;
@@ -608,6 +608,8 @@
debug(DEBUG_FUNCTION, "read_elf(file=%s)", proc->filename);
+ library_symbols = NULL;
+ library_num = 0;
elf_version(EV_CURRENT);
do_init_elf(lte, proc->filename);