aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAyke van Laethem <[email protected]>2023-06-01 18:58:26 +0200
committerRon Evans <[email protected]>2023-06-06 11:46:16 +0200
commit4a240827cbb74a2f4892850349e37f13aa205c19 (patch)
treeb84808353ce4db56153a90b9b2c9f2545c440555
parent92d9f856ab704ec8615fc289a07fc9e0e7443778 (diff)
downloadtinygo-4a240827cbb74a2f4892850349e37f13aa205c19.tar.gz
tinygo-4a240827cbb74a2f4892850349e37f13aa205c19.zip
main: add -internal-nodwarf flag
This can be useful during development to avoid generating debug information in IR.
-rw-r--r--builder/build.go2
-rw-r--r--compileopts/options.go1
-rw-r--r--main.go7
3 files changed, 9 insertions, 1 deletions
diff --git a/builder/build.go b/builder/build.go
index d95519b33..516b9e64f 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 9c4cb10ae..4440f4cf6 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 c1980881c..64bb2f6b2 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,