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