On Mar 18 07:13, Dave Korn wrote: > Ah, gottit. The bug happens because the libraries are not quite correctly > constructed. When you add -lm to the link line, you see this in the map file, > in the imports section: > > /usr/lib/gcc/i686-pc-cygwin/4.3.2/libgcc_s.dll.a(d000104.o) > > /usr/lib/gcc/i686-pc-cygwin/4.3.2/libgcc_s.dll.a(d000000.o) > (cyggcc_s_1_dll_iname) > /usr/lib/libm.a(d001286.o) math.o (pow) > /usr/lib/libm.a(d000000.o) /usr/lib/libm.a(d001286.o) (_head_libm) > /usr/lib/libcygwin.a(dll_entry.o) > (_cygwin_dll_en...@12) > > There's no import name chunk for libm (_libm_dll_iname), instead the head > chunk of the import table in libm.a refers to _cygwin1_dll_iname: > > dkad...@ubik /usr/src/zsh2/zsh-4.3.9/.build/Src/libm > $ nm ./d000000.o > 00000000 i .idata$2 > 00000000 i .idata$4 > 00000000 i .idata$5 > 00000000 I __head_libm > U _cygwin1_dll_iname > > which means at link time it is resolved by the definition of that symbol > supplied by libcygwin.a and so the tail chunk from libm is not pulled in to > correctly 'cap off' the end of the import table. Then all the name entries > and IAT table pointers get out of sync and we get confused and overlapping > import name tables. Constructing import tables is tricky, and we can't > optimise away or share any of the .idata$x blocks. > > There are a number of ways to solve this, either by changing the undefined > symbol in the head and tail archive members, or maybe by using dlltool or ld > to generate a fresh import library rather than munging an existing one, but > I'm going AFK now to get a few hours sleep.
What I'm wondering is, why did it work all these years before? Is it a bug in the new binutils? Or was it a bug in the old binutils to create working results? Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/