This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: GCC >= 3 problems
On Wed, Jan 23, 2002 at 07:45:26PM +0100, Maciej W. Rozycki wrote:
> On Wed, 23 Jan 2002, H . J . Lu wrote:
>
> > > It may not necessarily be a linker bug. It's a result of crtendS.o
> > > referencing atexit() in older versions of gcc. But there is no atexit()
> > > in libc.so -- it's only defined in libc_nonshared.a (thus it may be pulled
> > > in and provided by executables). A recompilation of libglut.so with the
> > > new gcc should fix the problem.
> >
> > That is why I call it a linker bug. Why do you have to recompile a
> > library? Everything should work fine without recompiling.
>
> You have to recompile it because it bogusly references a symbol that was
> unknown at the library's link time and therefore has to be provided by an
> executable. If an executable does not provide it, linking obviously
> fails. IOW, the library was built incorrectly and thus needs a rebuild.
Here is the related thread:
http://sources.redhat.com/ml/binutils/2001-05/msg00124.html
My current patch is different from it. The Linux binutils will do the
similar thing as the ld.so. Here are the ChangeLog entries:
* elf-bfd.h (elf_link_loaded_list): New structure.
(elf_link_hash_table): Add "loaded".
* elf.c (_bfd_elf_link_hash_table_init): Initialize the
"loaded" field to NULL.
* elflink.h (elf_link_check_versioned_symbol): New function.
Return true if there is one hidden definition for the undefined
symbol.
* elflink.h (elf_link_output_extsym): For undefined symbol in
DSO from DT_NEEDED, Call elf_link_check_versioned_symbol to
check if there is one hidden definition.
H.J.