From mboxrd@z Thu Jan 1 00:00:00 1970 From: "H . J . Lu" To: Alan Modra Cc: binutils@sourceware.cygnus.com Subject: Re: binutils 2.11.92.0.6 (Re: binutils 2.11.92.0.5 is broken) Date: Sun, 14 Oct 2001 22:42:00 -0000 Message-id: <20011014224046.A1513@lucon.org> References: <200110131452.f9DEq7Q0032358@dandelion.com> <20011013190034.A27019@lucon.org> <20011013235621.A15807@lucon.org> <20011015093317.B1015@bubble.sa.bigpond.net.au> X-SW-Source: 2001-10/msg00255.html On Mon, Oct 15, 2001 at 09:33:17AM +0930, Alan Modra wrote: > > > This patch > > > > > > http://sources.redhat.com/ml/binutils/2001-10/msg00035.html > > > > > > is incomplete. You cannot do any backend processing when > > Err, yes. Thanks for looking into it, HJ. I've been away this weekend, > which is why it appears that I've been ignoring the problem. It is ok. We are on top of it now. > > > > Index: elf32-hppa.c > > =================================================================== > > RCS file: /work/cvs/gnu/binutils/bfd/elf32-hppa.c,v > > retrieving revision 1.41 > > diff -u -p -r1.41 elf32-hppa.c > > --- elf32-hppa.c 2001/10/03 15:55:57 1.41 > > +++ elf32-hppa.c 2001/10/14 06:43:23 > > @@ -1147,7 +1147,7 @@ elf32_hppa_copy_indirect_symbol (dir, in > > edir->dyn_relocs = eind->dyn_relocs; > > eind->dyn_relocs = NULL; > > } > > - else if (eind->dyn_relocs != NULL) > > + else if (dir != ind->weakdef && eind->dyn_relocs != NULL) > > I suspect this is not the correct fix. dyn_relocs is being used to count > relocs, and probably what should happen is something like > > else if (eind->dyn_relocs != NULL) > { > struct elf32_hppa_dyn_reloc_entry *p; > > if (edir != eind->elf.weakdef) > abort (); > > /* Add reloc counts against the weak sym to the strong sym list. > Entries on the eind list should have a different p->sec from > any on the dir list, so we don't need to merge entries. */ > for (p = eind->dyn_relocs; p->next != NULL; p = p->next) > ; > p->next = edir->dyn_relocs; > edir->dyn_relocs = eind->dyn_relocs; > eind->dyn_relocs = NULL; > } > > Untested as yet, because I don't have a testcase. I'll see if I can > dream one up. I am not sure. Feel free to experiment. Please make sure you at least can build telnetd on Linux/x86. > > > --- elflink.h 2001/10/05 20:32:13 1.82 > > +++ elflink.h 2001/10/11 18:15:44 1.83 > > + As above, we permit a non-weak definition in a shared object to > > + override a weak definition in a regular object. */ > > I don't disagree with this change, but has this been discussed sufficiently > here and on the glibc list? That is to back out my own change to elf_merge_symbol in binutils 2.11.92.0.5 to fix a mips linker bug. But I have a better fix. See http://sources.redhat.com/ml/binutils/2001-10/msg00203.html Thanks. H.J.