This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: gcc 3.4.4 bug


> 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 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]