diff options
| -rw-r--r-- | sparse-llvm.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c index 792f8253..24bc6000 100644 --- a/sparse-llvm.c +++ b/sparse-llvm.c @@ -48,7 +48,7 @@ static LLVMLinkage data_linkage(struct symbol *sym) if (sym->ctype.modifiers & MOD_STATIC) return LLVMPrivateLinkage; - return LLVMCommonLinkage; + return LLVMExternalLinkage; } static LLVMLinkage function_linkage(struct symbol *sym) @@ -128,16 +128,25 @@ static void output_fn(LLVMModuleRef module, struct entrypoint *ep) static int output_data(LLVMModuleRef module, struct symbol *sym) { + struct expression *initializer = sym->initializer; + unsigned long long initial_value = 0; LLVMValueRef data; const char *name; + if (initializer) { + if (initializer->type == EXPR_VALUE) + initial_value = initializer->value; + else + assert(0); + } + name = show_ident(sym->ident); data = LLVMAddGlobal(module, symbol_type(sym->ctype.base_type), name); LLVMSetLinkage(data, data_linkage(sym)); - LLVMSetInitializer(data, LLVMConstInt(symbol_type(sym), 0, 1)); + LLVMSetInitializer(data, LLVMConstInt(symbol_type(sym), initial_value, 1)); return 0; } |
