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]
Other format: [Raw text]

Re: Confusing meaning of --no-undefined


On Wed, Feb 12, 2003 at 02:05:35PM +1030, Alan Modra wrote:
> On Tue, Feb 11, 2003 at 05:30:45PM +0000, Nick Clifton wrote:
> >   concerning the fact that:
> > 
> >      ld --share --no-undefined foo.o bar.so
> > 
> >   does not report an undefined symbol in bar.so.
> 
> I think there's general agreement that this is desirable default
> behaviour.  ie. --no-undefined should only report undefined references
> in the shared lib being built, _not_ in other libraries linked
> against.
> 
> > *** bfd/elflink.h	4 Feb 2003 12:49:57 -0000	1.204
> > --- bfd/elflink.h	11 Feb 2003 17:09:10 -0000
> > *************** elf_link_output_extsym (h, data)
> > *** 6096,6103 ****
> >        referenced by regular files, because we will already have issued
> >        warnings for them.  */
> >     if (! finfo->info->relocateable
> > !       && ! finfo->info->allow_shlib_undefined
> > !       && ! finfo->info->shared
> >         && h->root.type == bfd_link_hash_undefined
> >         && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
> >         && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
> > --- 6097,6103 ----
> >        referenced by regular files, because we will already have issued
> >        warnings for them.  */
> >     if (! finfo->info->relocateable
> > !       && (! finfo->info->shared || ! finfo->info->allow_shlib_undefined)
> >         && h->root.type == bfd_link_hash_undefined
> >         && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0
> >         && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0
> > 
> >   and sure enough the error message in Jan's test was now correctly
> >   generated.  When I ran the linker tests however, I discovered that
> >   this patch causes the ld-elfweak tests to fail:
> 
> Yeah, this code does look wrong, and I was the last to touch it.  :-(
> I think your patch makes sense, but you should also update the comment
> and default allow_shlib_undefined to 1.  The other thing is that I see

Does "ld --shared -Bsymbolic --no-undefined" work with the change? See

http://sources.redhat.com/ml/binutils/2000-11/msg00314.html

> code like the following from elf32-i386.c:
> 
> 	  else if (info->shared
> 		   && (!info->symbolic || info->allow_shlib_undefined)
> 		   && !info->no_undefined
> 		   && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
> 	    ;
> 	  else
> 	    report an error
> 
> This seems like another bogus test of allow_shlib_undefined.  Or at
> least it's an entirely different usage only affecting -Bsymbolic libs.
> You could accomplish the same effect by not requesting --no-undefined.
> ie. I think we want
> 
> 	  else if (info->shared
> 		   && !info->no_undefined
> 		   && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
> 	    ;
> 	  else
> 	    report an error
> 


H.J.


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