From aa78827db2931d5affa13c5612f821e1328ec5ac Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 10 Oct 2017 18:04:02 -0400 Subject: [PATCH] add module flag to emit CodeView for COFF object files see #516 --- README.md | 4 ++++ src/codegen.cpp | 6 +++++- src/zig_llvm.cpp | 4 ++++ src/zig_llvm.hpp | 1 + 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8cbf31b3e144..a28da25e54ed 100644 --- a/README.md +++ b/README.md @@ -189,6 +189,10 @@ make install ./zig build --build-file ../build.zig test ``` +#### Windows + +See https://github.com/zig-lang/zig/wiki/Building-Zig-on-Windows + ### Release / Install Build Once installed, `ZIG_LIBC_LIB_DIR` and `ZIG_LIBC_INCLUDE_DIR` can be overridden diff --git a/src/codegen.cpp b/src/codegen.cpp index 5889ba316a78..03fa976b2e4c 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -4992,7 +4992,11 @@ static void init(CodeGen *g) { LLVMSetTarget(g->module, buf_ptr(&g->triple_str)); - ZigLLVMAddModuleDebugInfoFlag(g->module); + if (g->zig_target.oformat == ZigLLVM_COFF) { + ZigLLVMAddModuleCodeViewFlag(g->module); + } else { + ZigLLVMAddModuleDebugInfoFlag(g->module); + } LLVMTargetRef target_ref; char *err_msg = nullptr; diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp index b9f1f7b92fa2..5d8b34de1020 100644 --- a/src/zig_llvm.cpp +++ b/src/zig_llvm.cpp @@ -706,6 +706,10 @@ void ZigLLVMAddModuleDebugInfoFlag(LLVMModuleRef module) { unwrap(module)->addModuleFlag(Module::Warning, "Debug Info Version", DEBUG_METADATA_VERSION); } +void ZigLLVMAddModuleCodeViewFlag(LLVMModuleRef module) { + unwrap(module)->addModuleFlag(Module::Warning, "CodeView", 1); +} + static AtomicOrdering mapFromLLVMOrdering(LLVMAtomicOrdering Ordering) { switch (Ordering) { case LLVMAtomicOrderingNotAtomic: return AtomicOrdering::NotAtomic; diff --git a/src/zig_llvm.hpp b/src/zig_llvm.hpp index 114c75775b28..e8df900a10fb 100644 --- a/src/zig_llvm.hpp +++ b/src/zig_llvm.hpp @@ -112,6 +112,7 @@ unsigned ZigLLVMTag_DW_structure_type(void); ZigLLVMDIBuilder *ZigLLVMCreateDIBuilder(LLVMModuleRef module, bool allow_unresolved); void ZigLLVMAddModuleDebugInfoFlag(LLVMModuleRef module); +void ZigLLVMAddModuleCodeViewFlag(LLVMModuleRef module); void ZigLLVMSetCurrentDebugLocation(LLVMBuilderRef builder, int line, int column, ZigLLVMDIScope *scope); void ZigLLVMClearCurrentDebugLocation(LLVMBuilderRef builder);