[Ltrace-devel] [PATCH 08/11] Make some functions and datastructures global. Definitely a hack.

Joe Damato ice799 at gmail.com
Mon Nov 8 23:47:41 UTC 2010


---
 common.h     |    8 ++++++++
 ltrace-elf.c |   20 +++++++++++---------
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/common.h b/common.h
index 45d38fc..115b954 100644
--- a/common.h
+++ b/common.h
@@ -233,6 +233,14 @@ extern void open_pid(pid_t pid);
 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 dafb5cb..ee5e350 100644
--- a/ltrace-elf.c
+++ b/ltrace-elf.c
@@ -12,19 +12,20 @@
 
 #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,
+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);
-static int in_load_libraries(const char *name, struct ltelf *lte, size_t count, GElf_Sym *sym);
+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
 
-static void
+void
 do_init_elf(struct ltelf *lte, const char *filename) {
 	int i;
 	GElf_Addr relplt_addr = 0;
@@ -317,7 +318,7 @@ do_init_elf(struct ltelf *lte, const char *filename) {
 	}
 }
 
-static void
+void
 do_close_elf(struct ltelf *lte) {
 	debug(DEBUG_FUNCTION, "do_close_elf()");
 	if (lte->lte_flags & LTE_HASH_MALLOCED)
@@ -326,7 +327,7 @@ do_close_elf(struct ltelf *lte) {
 	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) {
@@ -361,7 +362,7 @@ private_elf_gnu_hash(const char *name) {
 	return h & 0xffffffff;
 }
 
-static int
+int
 in_load_libraries(const char *name, struct ltelf *lte, size_t count, GElf_Sym *sym) {
 	size_t i;
 	unsigned long hash;
@@ -468,7 +469,6 @@ opd2addr(struct ltelf *lte, GElf_Addr addr) {
 
 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;
@@ -478,6 +478,8 @@ read_elf(Process *proc) {
 
 	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);
-- 
1.7.0.4




More information about the Ltrace-devel mailing list