diff options
author | Ayke van Laethem <[email protected]> | 2023-02-26 23:37:19 +0100 |
---|---|---|
committer | Ron Evans <[email protected]> | 2023-02-27 23:11:22 +0100 |
commit | ea183e9197b7c83c18ea2c53e6ddd6fc5eebf296 (patch) | |
tree | 0cd19ea64b0d263ab80c299bdebeb58a52545a49 | |
parent | 74160c0e324a9926566ab76962fd0924c617bc38 (diff) | |
download | tinygo-ea183e9197b7c83c18ea2c53e6ddd6fc5eebf296.tar.gz tinygo-ea183e9197b7c83c18ea2c53e6ddd6fc5eebf296.zip |
compiler: add llvm.ident metadata
This metadata is emitted by Clang and I found it is important for source
level debugging on MacOS. This patch does not get source level debugging
to work yet (for that, it seems like packages need to be built
separately), but it is a step in the right direction.
-rw-r--r-- | builder/build.go | 2 | ||||
-rw-r--r-- | compiler/compiler.go | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/builder/build.go b/builder/build.go index 86d0ef57d..27ce6a02b 100644 --- a/builder/build.go +++ b/builder/build.go @@ -169,6 +169,7 @@ func Build(pkgName, outpath, tmpdir string, config *compileopts.Config) (BuildRe CodeModel: config.CodeModel(), RelocationModel: config.RelocationModel(), SizeLevel: sizeLevel, + TinyGoVersion: goenv.Version, Scheduler: config.Scheduler(), AutomaticStackSize: config.AutomaticStackSize(), @@ -305,7 +306,6 @@ func Build(pkgName, outpath, tmpdir string, config *compileopts.Config) (BuildRe actionID := packageAction{ ImportPath: pkg.ImportPath, CompilerBuildID: string(compilerBuildID), - TinyGoVersion: goenv.Version, LLVMVersion: llvm.Version, Config: compilerConfig, CFlags: pkg.CFlags, diff --git a/compiler/compiler.go b/compiler/compiler.go index 458be2cb5..8b540d351 100644 --- a/compiler/compiler.go +++ b/compiler/compiler.go @@ -47,6 +47,7 @@ type Config struct { CodeModel string RelocationModel string SizeLevel int + TinyGoVersion string // for llvm.ident // Various compiler options that determine how code is generated. Scheduler string @@ -321,6 +322,14 @@ func CompilePackage(moduleName string, pkg *loader.Package, ssaPkg *ssa.Package, llvm.ConstInt(c.ctx.Int32Type(), 4, false).ConstantAsMetadata(), }), ) + if c.TinyGoVersion != "" { + // It is necessary to set llvm.ident, otherwise debugging on MacOS + // won't work. + c.mod.AddNamedMetadataOperand("llvm.ident", + c.ctx.MDNode(([]llvm.Metadata{ + c.ctx.MDString("TinyGo version " + c.TinyGoVersion), + }))) + } c.dibuilder.Finalize() c.dibuilder.Destroy() } |