This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: binutils is broken


On Tue, Oct 02, 2001 at 11:55:46PM -0700, H . J . Lu wrote:
> On Wed, Oct 03, 2001 at 04:04:04PM +0930, Alan Modra wrote:
> > On Tue, Oct 02, 2001 at 04:43:56PM -0700, H . J . Lu wrote:
> > >  
> > > @@ -1132,6 +1103,7 @@ elf_i386_adjust_dynamic_symbol (info, h)
> > >  		  || h->weakdef->root.type == bfd_link_hash_defweak);
> > >        h->root.u.def.section = h->weakdef->root.u.def.section;
> > >        h->root.u.def.value = h->weakdef->root.u.def.value;
> > > +      return true;
> > >      }
> > >  
> > >    /* This is a reference to a symbol defined by a dynamic object which
> > 
> > The above is the change that actually breaks things (note you had the
> > diff reversed, so the problem is caused by continuing on and generating
> > copy relocs for the weakdef).  Doing so defines the symbol in the dynbss
> > section, and the comment at line 3695 of elflink.h comes into play
> > because we have a definition for tzname, daylight etc. in the
> > application.
> > 
> > The real bug is around line 3618 of elflink.h, where flags are copied
> > to a weakdef.  I think copy_indirect_symbol needs to be called here
> > instead so that the x86 dyn_relocs field gets copied to the weakdef.
> > That would make my incorrect fudge in ..adjust_dynamic_symbol not needed.
> > 
> > I'm testing this patch at the moment, and will commit it if all is
> > well.
> > 
> > 	* elflink.h (elf_fix_symbol_flags): Copy flags to weakdef using
> > 	elf_backend_copy_indirect_symbol so that backend has a chance to
> > 	copy other necessary fields.
> > 	* elf.c (_bfd_elf_link_hash_copy_indirect): Bail out after
> > 	copying flags if this is a weakdef.
> > 	* elf32-i386 (elf_i386_adjust_dynamic_symbol): Don't do copy
> > 	reloc processing for weakdefs.
> > 
> 
> I don't think it works. It won't even link timezone/tst-timezone.c in
> glibc for me. You can just do
> 
> # gcc tst-timezone.c
> # a.out
> 

Oops. I was wrong. It works. Please check it in if it passes your
test. I will run more tests after it is in :-(.

Thanks.


H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]