From 6c3a56a7ffd5a2ec5119447aa81dce9bf6ec1319 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sun, 24 Sep 2017 05:04:44 -0400 Subject: fix i386 windows stdcall --- src/codegen.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'src/codegen.cpp') diff --git a/src/codegen.cpp b/src/codegen.cpp index 842b0205eb..5498647758 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -362,6 +362,14 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) { bool external_linkage = (fn_table_entry->linkage != GlobalLinkageIdInternal); Buf *symbol_name = get_mangled_name(g, &fn_table_entry->symbol_name, external_linkage); + if (fn_table_entry->type_entry->data.fn.fn_type_id.cc == CallingConventionStdcall && external_linkage && + g->zig_target.arch.arch == ZigLLVM_x86) + { + // prevent name mangling + symbol_name = buf_sprintf("\x01_%s", buf_ptr(symbol_name)); + } + + TypeTableEntry *fn_type = fn_table_entry->type_entry; LLVMTypeRef fn_llvm_type = fn_type->data.fn.raw_type_ref; if (external_linkage && fn_table_entry->body_node == nullptr) { @@ -376,17 +384,6 @@ static LLVMValueRef fn_llvm_value(CodeGen *g, FnTableEntry *fn_table_entry) { } fn_table_entry->llvm_name = LLVMGetValueName(fn_table_entry->llvm_value); - // TODO this is for testing windows DLL stuff - //if (buf_eql_str(&fn_table_entry->symbol_name, "ExitProcess") || - // buf_eql_str(&fn_table_entry->symbol_name, "GetConsoleMode") || - // buf_eql_str(&fn_table_entry->symbol_name, "GetStdHandle") || - // buf_eql_str(&fn_table_entry->symbol_name, "GetFileInformationByHandleEx") || - // buf_eql_str(&fn_table_entry->symbol_name, "GetLastError") || - // buf_eql_str(&fn_table_entry->symbol_name, "WriteFile")) - //{ - // LLVMSetDLLStorageClass(fn_table_entry->llvm_value, LLVMDLLImportStorageClass); - //} - switch (fn_table_entry->fn_inline) { case FnInlineAlways: addLLVMFnAttr(fn_table_entry->llvm_value, "alwaysinline"); -- cgit v1.2.3