From 4a240827cbb74a2f4892850349e37f13aa205c19 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Thu, 1 Jun 2023 18:58:26 +0200 Subject: [PATCH] main: add -internal-nodwarf flag This can be useful during development to avoid generating debug information in IR. --- builder/build.go | 2 +- compileopts/options.go | 1 + main.go | 7 +++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/builder/build.go b/builder/build.go index d95519b3..516b9e64 100644 --- a/builder/build.go +++ b/builder/build.go @@ -175,7 +175,7 @@ func Build(pkgName, outpath, tmpdir string, config *compileopts.Config) (BuildRe AutomaticStackSize: config.AutomaticStackSize(), DefaultStackSize: config.StackSize(), NeedsStackObjects: config.NeedsStackObjects(), - Debug: true, + Debug: !config.Options.SkipDWARF, // emit DWARF except when -internal-nodwarf is passed } // Load the target machine, which is the LLVM object that contains all diff --git a/compileopts/options.go b/compileopts/options.go index 9c4cb10a..4440f4cf 100644 --- a/compileopts/options.go +++ b/compileopts/options.go @@ -35,6 +35,7 @@ type Options struct { PrintIR bool DumpSSA bool VerifyIR bool + SkipDWARF bool PrintCommands func(cmd string, args ...string) `json:"-"` Semaphore chan struct{} `json:"-"` // -p flag controls cap Debug bool diff --git a/main.go b/main.go index c1980881..64bb2f6b 100644 --- a/main.go +++ b/main.go @@ -1431,6 +1431,12 @@ func main() { printIR := flag.Bool("internal-printir", false, "print LLVM IR") dumpSSA := flag.Bool("internal-dumpssa", false, "dump internal Go SSA") verifyIR := flag.Bool("internal-verifyir", false, "run extra verification steps on LLVM IR") + // Don't generate debug information in the IR, to make IR more readable. + // You generally want debug information in IR for various features, like + // stack size calculation and features like -size=short, -print-allocs=, + // etc. The -no-debug flag is used to strip it at link time. But for TinyGo + // development it can be useful to not emit debug information at all. + skipDwarf := flag.Bool("internal-nodwarf", false, "internal flag, use -no-debug instead") var flagJSON, flagDeps, flagTest bool if command == "help" || command == "list" || command == "info" || command == "build" { @@ -1508,6 +1514,7 @@ func main() { PrintIR: *printIR, DumpSSA: *dumpSSA, VerifyIR: *verifyIR, + SkipDWARF: *skipDwarf, Semaphore: make(chan struct{}, *parallelism), Debug: !*nodebug, PrintSizes: *printSize,