This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: gcc 3.4.4 bug
- From: Danny Smith <danny_smith_0000 at yahoo dot co dot nz>
- To: john dot gravley at cctechnol dot com
- Cc: gcc-bugs at gcc dot gnu dot org, Gerrit Haase <gp at familiehaase dot de>
- Date: Tue, 26 Jul 2005 09:32:37 +1200 (NZST)
- Subject: Re: gcc 3.4.4 bug
- Reply-to: dannysmith at users dot sourceforge dot net
> I have found an apparent bug in gcc 3.4.4 under Cygwin. The attached test case (and the code
> it's derived from) works as expected with Cygwin gcc 3.3.3 with the exact same Cygwin install
> except the compiler packages. It also works fine with various versions of gcc on other
> platforms, including 3.4.2 (FC3) and 4.0 (FC4).
Here is the reason:
When linking against the dll, you are notified:
Info: resolving typeinfo for base_t by linking to __imp___ZTI6base_t (auto-import)
typeinfo tables are readonly and so place in .rdata section.
Auto-import doesn't work for .rdata because it depends on the linker writing a thunk to
dereference the *__imp__foo. It gets away with this trickery for non-constant data by "casting"
the .text section writeable. But the loader really does expect the contents of .rdata section to
be non-writeable. If you lie to it, bad things happen.
If we put readonly data in text section (as we did in gcc-3.3.x) then your testcase should work.
It will also work if you don't use auto-import and explicitly mark the dllimport'd base_t class
with __attribute__ ((dllimport)).
Danny
Send instant messages to your online friends http://au.messenger.yahoo.com