[LLVMdev] [PATCH] Link in codegen components in llvm-c

Gordon Henriksen gordonhenriksen at me.com
Sat Sep 13 06:12:43 PDT 2008


On 2008-09-12, at 19:06, Jonathan Bastien-Filiatrault wrote:

> This allows the use of shadow stack from the llvm-c API. I am not  
> sure this is the place to insert the include, though.

Hi Jonathan,

I can't accept this patch. It pulls a bunch of C++ code into what is  
explicitly a C header, with the wrong linkage to boot.

A more appropriate solution would be to add a binding like "void  
LLVMInitCodeGen(void)", defined alone in a compilation unit that  
#include's LinkAllCodegenComponents. The AsmWriter also has a similar  
header, although it isn't necessary for the ShadowStackCollector.

To the list: The GC components have no public symbols; they are  
discoverable only through static ctors. LinkAllCodegenComponents.h  
introduces a use of a function that has no raison d'être save to be  
used by this header. This prevents the linker from omitting the  
"unused" compilation unit when linking with the archive. The back ends  
are packed as objects to avoid this problem. Is there no better way to  
force the linker to run these static ctors?

> Index: include/llvm-c/ExecutionEngine.h
> ===================================================================
> --- include/llvm-c/ExecutionEngine.h	(revision 56175)
> +++ include/llvm-c/ExecutionEngine.h	(working copy)
> @@ -24,6 +24,7 @@
>
> #ifdef __cplusplus
> extern "C" {
> +#include "llvm/LinkAllCodegenComponents.h"
> #endif
>
> typedef struct LLVMOpaqueGenericValue *LLVMGenericValueRef;


— Gordon





More information about the llvm-dev mailing list