Danny,
I don't get the auto_import message when I build the test case.
I'm also confused as to why reordering the calls makes the test case
work if the problem is as you describe it.
John
Danny Smith wrote:
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