On Mon, Jan 31, 2005 at 05:43:08PM +1030, Alan Modra wrote: > On Mon, Jan 31, 2005 at 10:32:27AM +1030, Alan Modra wrote: > > On Sun, Jan 30, 2005 at 11:22:49AM -0800, H. J. Lu wrote: > > > /usr/lib/crt1.o:(.dynamic+0x0): multiple definition of `_DYNAMIC' > > [snip] > > > The 2005-01-24 binutils is OK. It may have something to do with > > > > > > http://sources.redhat.com/ml/binutils/2005-01/msg00405.html > > > > Possible, I suppose. An as-needed shared lib will define syms whether > > or not the lib is actually linked. It will be linked if any symbol it > > defines satisfies an undefined reference, and conversely it isn't linked > > then there are no references to its symbols. That should make it safe > > to leave its symbols in the symbol table, so long as we properly treat > > them in _bfd_elf_merge_symbol. If there is a problem, it's likely to be > > in _bfd_elf_merge_symbol. > > I'm testing the following on powerpc and x86 to ensure I haven't made > any silly mistakes. It's a big hammer approach but cleaner than what we > had before, I think. Rather than tweaking _bfd_elf_merge_symbol and > other places to specially handle symbols defined in unused --as-needed > libs, I've munged all such symbols back to their new state. Hopefully > this won't break too many back-end elf_link_hash_traverse functions.. > > Would you please test this on ia64? I don't have access to ia64 > hardware, so testing this isn't so easy. I am enclosing a testcase here. I saw the same problem on ia32, ia64 and x86_64: [hjl@gnu-4 needed]$ make gcc -c -o foo.o foo.c gcc -shared -fPIC -o libneeded.so needed.c gcc -o foo foo.o \ -Wl,--as-needed -lneeded -L. -Wl,--no-as-needed /usr/lib/gcc-lib/ia64-redhat-linux/3.2.3/../../../crt1.o:(.dynamic+0x0): multiple definition of `_DYNAMIC' collect2: ld returned 1 exit status make: *** [foo] Error 1 H.J.