--- ltrace-0.5/elf.c~ 2010-03-25 14:07:20.000000000 +0100 +++ ltrace-0.5/elf.c 2010-03-31 13:11:35.000000000 +0200 @@ -435,6 +435,7 @@ struct library_symbol *read_elf(struct p struct library_symbol *library_symbols = NULL; struct ltelf lte[MAX_LIBRARY + 1]; size_t i; + struct opt_x_t *opt_x_loc = opt_x; struct opt_x_t *xptr; struct library_symbol **lib_tail = NULL; struct opt_x_t *main_cheat; @@ -502,11 +503,11 @@ struct library_symbol *read_elf(struct p 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); @@ -514,7 +515,7 @@ struct library_symbol *read_elf(struct p break; } if (main_cheat) - opt_x = main_cheat; + opt_x_loc = main_cheat; } #endif @@ -533,7 +534,7 @@ struct library_symbol *read_elf(struct p 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. */ @@ -543,7 +544,7 @@ struct library_symbol *read_elf(struct p break; } } - 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. Wed Mar 31 13:12:38 2010