This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [PATCH] prevent core dump for multiple def symbols
- From: Daniel Jacobowitz <drow at false dot org>
- To: Fergal Daly <fergal at esatclear dot ie>, binutils at sources dot redhat dot com
- Cc: gdb-patches at sources dot redhat dot com
- Date: Fri, 11 Jun 2004 10:53:41 -0400
- Subject: Re: [PATCH] prevent core dump for multiple def symbols
- References: <20040611144526.GF16613@dyn.fergaldaly.com>
The files in bfd/ are maintained as part of GNU Binutils, so you need
to ask on the binutils list about this patch.
It seems obvious and correct to me. Is multiple_definition a recent
callback or did I just miss it when I wrote simple.c? [I won't even
ask how you have a shared library with multiple definitions of a
dynamic symbol.]
On Fri, Jun 11, 2004 at 03:45:26PM +0100, Fergal Daly wrote:
> I have a .so file that makes gdb dump core. The problem shows up in
> bfd/linker.c:1800
>
> if (! ((*info->callbacks->multiple_definition)
> (info, h->root.string, msec->owner, msec, mval,
> abfd, section, value)))
> return FALSE;
>
> because info->callbacks->multiple_definition is null.
>
> I have no idea if this patch is "the right thing" but it allows me to debug
> my app. It just sets the callback to a dummy callback which returns TRUE
> when the link_info is being created. I presume this is OK because all the
> other callbacks are set to dummies too.
>
> This was logged as bug 1668, hopefully this is a fix for it.
>
> Patch below,
>
> F
>
>
> --- ./bfd/simple.c.orig 2004-06-11 15:32:40.620497552 +0100
> +++ ./bfd/simple.c 2004-06-11 15:18:42.043980560 +0100
> @@ -78,6 +78,19 @@
> return TRUE;
> }
>
> +static bfd_boolean
> +simple_dummy_multiple_definition (struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
> + const char *name ATTRIBUTE_UNUSED,
> + bfd *obfd ATTRIBUTE_UNUSED,
> + asection *osec,
> + bfd_vma oval ATTRIBUTE_UNUSED,
> + bfd *nbfd ATTRIBUTE_UNUSED,
> + asection *nsec ATTRIBUTE_UNUSED,
> + bfd_vma nval ATTRIBUTE_UNUSED)
> +{
> + return TRUE;
> +}
> +
> struct saved_output_info
> {
> bfd_vma offset;
> @@ -171,6 +184,7 @@
> callbacks.reloc_overflow = simple_dummy_reloc_overflow;
> callbacks.reloc_dangerous = simple_dummy_reloc_dangerous;
> callbacks.unattached_reloc = simple_dummy_unattached_reloc;
> + callbacks.multiple_definition = simple_dummy_multiple_definition;
>
> memset (&link_order, 0, sizeof (link_order));
> link_order.next = NULL;
>
--
Daniel Jacobowitz