authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-04-10 02:30:56-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-04-10 02:32:11-04:00
log0e77b0ac8936b0f09deb23733fe5a772869a64e6
treed1c7d103a6060f1f79ece0d377241d99bf2ea822
parent095591f0b0f0d09bb1589fc404c2e7fdeac4bee4

fix mangling exported global variables

closes #316

1 files changed, 6 insertions(+), 4 deletions(-)

src/codegen.cpp+6-4
...@@ -3408,7 +3408,8 @@ static void generate_error_name_table(CodeGen *g) {...@@ -3408,7 +3408,8 @@ static void generate_error_name_table(CodeGen *g) {
34083408
3409 LLVMValueRef err_name_table_init = LLVMConstArray(str_type->type_ref, values, g->error_decls.length);3409 LLVMValueRef err_name_table_init = LLVMConstArray(str_type->type_ref, values, g->error_decls.length);
34103410
3411 g->err_name_table = LLVMAddGlobal(g->module, LLVMTypeOf(err_name_table_init), "err_name_table");3411 g->err_name_table = LLVMAddGlobal(g->module, LLVMTypeOf(err_name_table_init),
3412 buf_ptr(get_mangled_name(g, buf_create_from_str("err_name_table"), false)));
3412 LLVMSetInitializer(g->err_name_table, err_name_table_init);3413 LLVMSetInitializer(g->err_name_table, err_name_table_init);
3413 LLVMSetLinkage(g->err_name_table, LLVMPrivateLinkage);3414 LLVMSetLinkage(g->err_name_table, LLVMPrivateLinkage);
3414 LLVMSetGlobalConstant(g->err_name_table, true);3415 LLVMSetGlobalConstant(g->err_name_table, true);
...@@ -3445,7 +3446,7 @@ static void generate_enum_name_tables(CodeGen *g) {...@@ -3445,7 +3446,7 @@ static void generate_enum_name_tables(CodeGen *g) {
34453446
3446 LLVMValueRef name_table_init = LLVMConstArray(str_type->type_ref, values, field_count);3447 LLVMValueRef name_table_init = LLVMConstArray(str_type->type_ref, values, field_count);
34473448
3448 Buf *table_name = buf_sprintf("%s_name_table", buf_ptr(&enum_type->name));3449 Buf *table_name = get_mangled_name(g, buf_sprintf("%s_name_table", buf_ptr(&enum_type->name)), false);
3449 LLVMValueRef name_table = LLVMAddGlobal(g->module, LLVMTypeOf(name_table_init), buf_ptr(table_name));3450 LLVMValueRef name_table = LLVMAddGlobal(g->module, LLVMTypeOf(name_table_init), buf_ptr(table_name));
3450 LLVMSetInitializer(name_table, name_table_init);3451 LLVMSetInitializer(name_table, name_table_init);
3451 LLVMSetLinkage(name_table, LLVMPrivateLinkage);3452 LLVMSetLinkage(name_table, LLVMPrivateLinkage);
...@@ -3535,11 +3536,12 @@ static void do_code_gen(CodeGen *g) {...@@ -3535,11 +3536,12 @@ static void do_code_gen(CodeGen *g) {
35353536
3536 LLVMSetLinkage(global_value, LLVMExternalLinkage);3537 LLVMSetLinkage(global_value, LLVMExternalLinkage);
3537 } else {3538 } else {
3539 bool exported = (var->linkage == VarLinkageExport);
3538 render_const_val(g, var->value);3540 render_const_val(g, var->value);
3539 render_const_val_global(g, var->value, buf_ptr(get_mangled_name(g, &var->name, false)));3541 render_const_val_global(g, var->value, buf_ptr(get_mangled_name(g, &var->name, exported)));
3540 global_value = var->value->llvm_global;3542 global_value = var->value->llvm_global;
35413543
3542 if (var->linkage == VarLinkageExport) {3544 if (exported) {
3543 LLVMSetLinkage(global_value, LLVMExternalLinkage);3545 LLVMSetLinkage(global_value, LLVMExternalLinkage);
3544 }3546 }
3545 if (tld_var->section_name) {3547 if (tld_var->section_name) {