[Bug target/40905] GCC creates invalid executable with auto-imported DLL and __attribute__((cold))
--- Comment #8 from ktietz at gcc dot gnu dot org 2010-05-23 07:41 --- As there is no feed-back for some time now. I've tested this issue with recent mingw runtimes and the issue is solved. As this isse is related to old pseudo-relocation and linker, and not related to gcc itself, I close this bug as works-for-me. -- ktietz at gcc dot gnu dot org changed: What|Removed |Added Status|UNCONFIRMED |RESOLVED Resolution||WORKSFORME http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40905
[Bug target/40905] GCC creates invalid executable with auto-imported DLL and __attribute__((cold))
--- Comment #7 from ktietz at gcc dot gnu dot org 2010-04-05 09:17 --- (In reply to comment #6) I added you to this thread, as you merged new pseudo-relocation code to mingw.org's runtime. As cygwin and mingw.org are supporting now new linker generated runtime-pseudo-relocation, could you please confirm that your issue is solved. I tested your issue and for me it works with recent version of cygwin/mingw.org runtimes. Kai -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40905
[Bug target/40905] GCC creates invalid executable with auto-imported DLL and __attribute__((cold))
--- Comment #6 from ktietz at gcc dot gnu dot org 2009-09-12 10:55 --- I added you to this thread, as you merged new pseudo-relocation code to mingw.org's runtime. -- ktietz at gcc dot gnu dot org changed: What|Removed |Added CC||dannysmith at users dot ||sourceforge dot net http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40905
[Bug target/40905] GCC creates invalid executable with auto-imported DLL and __attribute__((cold))
--- Comment #5 from ktietz at gcc dot gnu dot org 2009-09-04 13:27 --- (In reply to comment #4) (In reply to comment #2) Is it possible that it triggers the exception trying to write in text.unlikely which is READONLY? Exactly. This is a linker, not a compiler issue. If you are using a relatively recent binutils and mingw run time, the addition of the switch -Wl,--enable-runtime-pseudo-reloc-v2 should get around the READONLY problem. Otherwise, you could always just add __declspec (dllimport) to extern int foo[2]; and so retain portability with the rest of the PE-COFF world. Danny Right, this is a linker issue (or runtime issue of pseudo-relocation). But newer mingw32's runtime uses new code for v1 relocations, too. So for it, this issue should be solved, too. So can we close this bug? Cheers, Kai -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40905
[Bug target/40905] GCC creates invalid executable with auto-imported DLL and __attribute__((cold))
--- Comment #4 from dannysmith at users dot sourceforge dot net 2009-07-30 08:00 --- (In reply to comment #2) Is it possible that it triggers the exception trying to write in text.unlikely which is READONLY? Exactly. This is a linker, not a compiler issue. If you are using a relatively recent binutils and mingw run time, the addition of the switch -Wl,--enable-runtime-pseudo-reloc-v2 should get around the READONLY problem. Otherwise, you could always just add __declspec (dllimport) to extern int foo[2]; and so retain portability with the rest of the PE-COFF world. Danny -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40905
[Bug target/40905] GCC creates invalid executable with auto-imported DLL and __attribute__((cold))
--- Comment #1 from pinskia at gcc dot gnu dot org 2009-07-29 16:10 --- IIRC the cold attribute does a couple of things. The only thing I think that might cause this is putting it into a .text.cold section. -- pinskia at gcc dot gnu dot org changed: What|Removed |Added Component|regression |target http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40905
[Bug target/40905] GCC creates invalid executable with auto-imported DLL and __attribute__((cold))
--- Comment #2 from ramiro dot polla at gmail dot com 2009-07-30 03:43 --- I might be guessing wildly since I don't know that much about PE, but this is what more I've found: It crashes loading the dll in __pei386_runtime_relocator at address 65ec12a8: 65ec1290 __pei386_runtime_relocator: 65ec1290: 55 push %ebp 65ec1291: b9 28 40 ec 65 mov$0x65ec4028,%ecx 65ec1296: 89 e5 mov%esp,%ebp 65ec1298: eb 14 jmp65ec12ae __pei386_runtime_relocator+0x1e 65ec129a: 8d b6 00 00 00 00 lea0x0(%esi),%esi 65ec12a0: 8b 51 04mov0x4(%ecx),%edx 65ec12a3: 8b 01 mov(%ecx),%eax 65ec12a5: 83 c1 08add$0x8,%ecx 65ec12a8: 01 82 00 00 ec 65 add%eax,0x65ec(%edx) 65ec12ae: 81 f9 30 40 ec 65 cmp$0x65ec4030,%ecx 65ec12b4: 72 ea jb 65ec12a0 __pei386_runtime_relocator+0x10 65ec12b6: 5d pop%ebp 65ec12b7: c3 ret In the same testcase compiled without -O2, I get the sole entry of runtime_pseudo_reloc in __RUNTIME_PSEUDO_RELOC_LIST__ (the equivalent to 0x65ec4028) is: addend = 0x0004 target = 0x11d5 and the .text section is: 0 .text 0344 67701000 67701000 0400 2**4 CONTENTS, ALLOC, LOAD, CODE, DATA With -O2 it is: addend = 0x0004 target = 0x2005 0 .text 0334 65ec1000 65ec1000 0600 2**4 CONTENTS, ALLOC, LOAD, CODE, DATA 1 .text.unlikely 000c 65ec2000 65ec2000 0a00 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE Is it possible that it triggers the exception trying to write in text.unlikely which is READONLY? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40905
[Bug target/40905] GCC creates invalid executable with auto-imported DLL and __attribute__((cold))
--- Comment #3 from pinskia at gcc dot gnu dot org 2009-07-30 03:59 --- Doesn't DLL source need to be compiled with -fPIC to allow it to work? So what is happening is you are getting a runtime relocation inside the .text.unlikely section which should not happen for DLLs I think ... -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40905