[llvm-dev] RuntimeDyLdCOFF and RTTI on Windows
Stefan Gränitz via llvm-dev
llvm-dev at lists.llvm.org
Tue Oct 11 01:52:22 PDT 2016
Thanks Lang for forwarding this to the list
The symptom in a nutshell: I cannot get dynamic_cast to work in JITed
code on Windows
Reid, do you have an idea whether: it's a bug / it's just not
implemented yet / I am missing something?
> Just to rule out one other possibility, Reid: does Windows require any
> special calls to register C++ RTTI?
There's some more details in the original mail.
Thanks
Stefan
Am 07.10.16 um 02:29 schrieb Lang Hames via llvm-dev:
> HI Stefan,
>
> CC'ing Reid Kleckner, who might have some insight here, and llvm-dev
> as this may be of interest to other windows JIT users.
>
> I am facing the issue that C++ dynamic_cast doesn't work for types
> loaded from object files with RuntimeDyLd.
>
>
> <snip>
>
> Do you think it is possible that RuntimeDyLd misses type info data in
> the COFF file or doesn't wire it up correctly?
> I set ProcessAllSections = true, but I didn't recognize any change. I
> found that RuntimeDyLdCOFF does not override finalizeLoad like the ELF
> and MachO versions. The function call's comment reads "Give the
> subclasses a chance to tie-up any loose ends" -- possibly missing
> functionality?
>
>
> Unfortunately I don't have a windows machine to test on, so it's
> difficult to know for sure. From a quick look at the IR, it seems like
> the Window's C++ ABI implementation of dynamic_cast works similarly to
> Darwin's: The type info pointers for the reference type and cast type
> are passed in to the function, so as long as memory has been allocated
> for the type info I would have expected this to "just work". My best
> guess for why it wouldn't is that RuntimeDyldCOFF is a missing
> relocation somewhere. What happens when you run this code on a debug
> build? Do you hit the llvm_unreachable at the bottom of the
> resolveRelocation switch?
>
> Just to rule out one other possibility, Reid: does Windows require any
> special calls to register C++ RTTI?
>
> Finally, regarding the ProcessAllSections flag: it tells RuntimeDyld
> to call the memory manager interface for every section, not just the
> sections that RuntimeDyld thinks are necessary for execution. This was
> a hack to make debug info sections visible to clients who are
> interested in them. It can be important if your object file contains
> metadata sections that are required, but not referenced in the file. I
> don't think it should affect this case though.
>
> - Lang.
>
>
> On Thu, Oct 6, 2016 at 4:37 AM, Stefan Gränitz
> <stefan.granitz at roli.com <mailto:stefan.granitz at roli.com>> wrote:
>
> Hi Lang
>
> You are not only the maintainer for ORC but also for RuntimeDyLd
> right?
> May I ask if you know about problems reading RTTI data from COFF
> object
> files on Windows?
>
> I am facing the issue that C++ dynamic_cast doesn't work for types
> loaded from object files with RuntimeDyLd. I inspected my object files
> compiled with Clang-3.9 (pure, not cl2) and they seem to include
> all the
> necessary info. When I link (with MS link) and run the static build I
> get the expected behavior. Correspondingly I'd consider the RTTI
> emission in Clang to work correctly.
>
> When I load the object files with RuntimeDyLd at runtime, I face the
> following troubles in vcruntime140.dll:
> * invoking dynamic_cast: the RTTI Complete Object Locator queried in
> __RTDynamicCast (rtti.cpp) has incomplete data, which tricks the
> runtime
> to always belief the number of base classes is zero, that's why
> dynamic_cast never succeeds
> * invoking typeid(variable).name(): the runtime's __std_type_info_name
> (std_type_info.cpp) receives a corrupt type data pointer, which causes
> an access violation when reading from one of its members
>
> Do you think it is possible that RuntimeDyLd misses type info data in
> the COFF file or doesn't wire it up correctly?
> I set ProcessAllSections = true, but I didn't recognize any change. I
> found that RuntimeDyLdCOFF does not override finalizeLoad like the ELF
> and MachO versions. The function call's comment reads "Give the
> subclasses a chance to tie-up any loose ends" -- possibly missing
> functionality?
>
> It would help a lot if you let me know your feeling on this issue
> and/or
> give me a few pointers what I could check next.
>
> I can reproduce the above symptoms reliably within our project on
> different Windows systems. I think I can also prepare a self-contained
> repro, if you happen to have a Windows machine/VM at hand and you are
> interested in clearing up this issue.
>
> Thanks.
> Stefan
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
--
https://about.me/stefan.graenitz
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161011/1272e4a1/attachment.html>
More information about the llvm-dev
mailing list