[cfe-dev] [PATCH] plugin problem on Windows

Argyrios Kyrtzidis kyrtzidis at apple.com
Mon Apr 4 13:10:12 PDT 2011


On Feb 11, 2011, at 1:18 PM, John Thompson wrote:

> With reference to the Bugzilla 9078 issue I posted, it appears the plug-in mechanism doesn't work on Windows.
>  
> To recap, in loading a Windows plug-in DLL, the DLL will have it's own copy of the clang library code and data, such that the plug-in registry node list ends up in the DLL and not the Clang executable's data space, hence as-is, the plug-ins node doesn't end up in the registry instance in Clang.
>  
> One way to fix it is to have the plug-ins provide a function hook for retrieving the node.  Since the address look-up function in Clang looks in all plug-ins loaded, that means it has to be a uniquely-named function.  Therefore, perhaps basing it on the plug-in name is a way to go,
>  
> I've enclosed a patch that modifies things to do this.  It expects the plug-in to export a function with a name like "Get_(plug-in name)_Node that returns the node instance.  See the modified PrintFunctionNames for an example of this.  Since the name for the PrintFunctionNames plug-in is "print-fns", I have the function lookup code replace '-' with '_' to get a legal C name.
>  
> I've also modified the example.CMakeLists.txt file to build the example projects as part of the main build.
> 
> I also needed some changes in the Registry class to add an AddNode function and expose some privates so the plug-in can get at its node.
>  
> I've enclosed two patch files, one for the Clang side and one for the LLVM side (the Registry hack).
>  
> Permission to check it in?  Otherwise, please suggest an alternate fix.

I think we should move away from the llvm::Registry mechanism. How about the exported function returns a PluginASTAction*, we store all PluginASTAction* pointers that the plugins return and iterate over them when invoking plugin actions.

-Argyrios

>  
> -John
> 
> -- 
> John Thompson
> John.Thompson.JTSoftware at gmail.com
> 
> <cpluginfix.patch><lpluginfix.patch>_______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110404/2f3884d5/attachment.html>


More information about the cfe-dev mailing list