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);