Sedat Dilek <[email protected]> writes:

> Just to mention... On MIPS(EL) I need to apply Edgar's patch from [1]
> or this "brutal" one:
>
> --- proc.c
> +++ proc.c
> @@ -752,8 +752,10 @@ breakpoint_for_symbol(struct library_sym
>         struct breakpoint *bp = dict_find_entry(proc->breakpoints,
>                                                 bp_addr);
>         if (bp != NULL) {
> +#if defined (host_mips)
>                 assert(bp->libsym == NULL);
>                 bp->libsym = libsym;
> +#endif
>                 return 0;
>         }
>
> Dunno why "#ifdef __mips__" fails here... Just checked the config(ure)* logs.
>
> Should this be "make ... ARCH=mips ..." or can I use "ARCH=mipsel"?

Does the following excerpt from your [1] fix the problem?

diff --git a/sysdeps/linux-gnu/mipsel/plt.c b/sysdeps/linux-gnu/mipsel/plt.c
index 7799dfa..7bb00e0 100644
--- a/sysdeps/linux-gnu/mipsel/plt.c
+++ b/sysdeps/linux-gnu/mipsel/plt.c
@@ -251,6 +251,13 @@ void arch_symbol_ret(struct Process *proc, struct 
library_symbol *libsym)
                return;
        }
 
+       /* For multiple symbols that resolve to the same address, we need
+        * to avoid adding multiple breakpoints.  */
+       if (dict_find_entry(proc->leader->breakpoints, resolved_addr) != NULL) {
+               fprintf(stderr, "%s: skip %p %s\n", __func__, resolved_addr, 
libsym->name);
+               return;
+       }
+
        bp = malloc(sizeof (*bp));
        if (bp == NULL) {
                fprintf(stderr, "Failed to allocate bp for %s\n",

If yes, and if you can fix coding style in that (probably call debug
instead of fprintf, keep line length <=80), then I'd be happy to apply
such patch.

Thanks,
PM

_______________________________________________
Ltrace-devel mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/ltrace-devel

Reply via email to