Blob Blame History Raw
diff -up ltrace-0.6.0/ltrace-elf.c\~ ltrace-0.6.0/ltrace-elf.c
--- ltrace-0.6.0/ltrace-elf.c~	2011-02-14 16:48:25.000000000 +0100
+++ ltrace-0.6.0/ltrace-elf.c	2011-02-14 18:13:03.000000000 +0100
@@ -609,6 +609,7 @@ read_elf(Process *proc) {
 	struct ltelf lte[MAX_LIBRARIES + 1];
 	size_t i;
 	struct opt_x_t *xptr;
+	struct opt_x_t *opt_x_loc = opt_x;
 	struct library_symbol **lib_tail = NULL;
 	int exit_out = 0;
 	int count = 0;
@@ -722,11 +723,11 @@ read_elf(Process *proc) {
 			main_cheat = (struct opt_x_t *)malloc(sizeof(struct opt_x_t));
 			if (main_cheat == NULL)
 				error(EXIT_FAILURE, 0, "Couldn't allocate memory");
-			main_cheat->next = opt_x;
+			main_cheat->next = opt_x_loc;
 			main_cheat->found = 0;
 			main_cheat->name = PLTs_initialized_by_here;
 
-			for (xptr = opt_x; xptr; xptr = xptr->next)
+			for (xptr = opt_x_loc; xptr; xptr = xptr->next)
 				if (strcmp(xptr->name, PLTs_initialized_by_here) == 0
 						&& main_cheat) {
 					free(main_cheat);
@@ -734,7 +735,7 @@ read_elf(Process *proc) {
 					break;
 				}
 			if (main_cheat)
-				opt_x = main_cheat;
+				opt_x_loc = main_cheat;
 		}
 #endif
 	} else {
@@ -756,7 +757,7 @@ read_elf(Process *proc) {
 		if (!addr)
 			continue;
 
-		for (xptr = opt_x; xptr; xptr = xptr->next)
+		for (xptr = opt_x_loc; xptr; xptr = xptr->next)
 			if (xptr->name && strcmp(xptr->name, name) == 0) {
 				/* FIXME: Should be able to use &library_symbols as above.  But
 				   when you do, none of the real library symbols cause breaks. */
@@ -769,7 +770,7 @@ read_elf(Process *proc) {
 
 	unsigned found_count = 0;
 
-	for (xptr = opt_x; xptr; xptr = xptr->next) {
+	for (xptr = opt_x_loc; xptr; xptr = xptr->next) {
 		if (xptr->found)
 			continue;
 
@@ -791,7 +792,7 @@ read_elf(Process *proc) {
 		}
 	}
 
-	for (xptr = opt_x; xptr; xptr = xptr->next)
+	for (xptr = opt_x_loc; xptr; xptr = xptr->next)
 		if ( ! xptr->found) {
 			char *badthing = "WARNING";
 #ifdef PLT_REINITALISATION_BP

Diff finished.  Mon Feb 14 18:13:11 2011