------- Additional Comments From tcl_de at gmx dot net 2009-03-18 14:57 ------- @Dave Korn: I added you as a CC because I saw that thread on the mailinglist where you say that you want to make weak symbols work on cygwin with binutils. The same I write about mingw32 here is true for cygwin 1.7 (binutils 2.18.50.20080625), too. The weak.o generated by binutils is identical on mingw32 and cygwin.
In the meantime I found out why it couldn't work: (I suppose) I switched to >GNU assembler (GNU Binutils) 2.19.1 >Copyright 2007 Free Software Foundation, Inc. >This program is free software; you may redistribute it under the terms of >the GNU General Public License version 3 or later. >This program has absolutely no warranty. >This assembler was configured for a target of `mingw32'. and it produces exactly the same output as version 2.19. But gas does not correctly set the field Characteristics the auxiliary record (format 3 for weak externals) of the weak external automatically generated for the weak symbol. GNU as sets it to IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY but it should actually be set to IMAGE_WEAK_EXTERN_SEARCH_ALIAS. The reason I think it's like that is because I tried to link the weak.o produced by gas to main.obj produced by visual c++ with ms link and the output is: >Microsoft (R) Incremental Linker Version 9.00.21022.08 >Copyright (C) Microsoft Corporation. All rights reserved. > >main.obj : error LNK2019: unresolved external symbol _function referenced in function _main >weak.o : error LNK2001: unresolved external symbol _function >main.exe : fatal error LNK1120: 1 unresolved externals If I change the field Characteristics to IMAGE_WEAK_EXTERN_SEARCH_ALIAS link will output >Microsoft (R) Incremental Linker Version 9.00.21022.08 >Copyright (C) Microsoft Corporation. All rights reserved. and main.exe will output >Hello from the weak function and when i even link another file strong.o produced by compiling strong.c with gcc ===== strong. c======================= #include <stdio.h> void function() { printf("Hello from the strong function\n"); } =============================================== to weak.o and main.obj with link, main.exe will output: >Hello from the strong function Note that changing Characteristics to IMAGE_WEAK_EXTERN_SEARCH_LIBRARY will also lead to the same errors as IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY and link outputs are the same. So please modify gas to use IMAGE_WEAK_EXTERN_SEARCH_ALIAS for the field Characteristics at least for weak externals that are automatically generated as GNU extension for weak symbols. Anyways I can't link any of the three versions of weak.o with a main.obj using GNU ld (called from gcc) because it will always output: >Warning: .drectve `/DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized >main.obj:(.text+0x4): undefined reference to `function' >collect2: ld returned 1 exit status -- What |Removed |Added ---------------------------------------------------------------------------- CC| |dave dot korn dot cygwin at | |gmail dot com Component|ld |gas http://sourceware.org/bugzilla/show_bug.cgi?id=9687 ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-binutils