diff --git a/chore/gentests/gentests.go b/chore/gentests/gentests.go index 480a3854..6cd06ba5 100644 --- a/chore/gentests/gentests.go +++ b/chore/gentests/gentests.go @@ -21,7 +21,6 @@ import ( "os" "strings" - "github.com/goplus/llgo/cl" "github.com/goplus/llgo/internal/llgen" "github.com/goplus/mod" ) @@ -38,20 +37,6 @@ func main() { llgenDir(dir + "/cl/_testdata") } -func isDbgSymEnabled(flagsFile string) bool { - data, err := os.ReadFile(flagsFile) - if err != nil { - return false - } - toks := strings.Split(strings.Join(strings.Split(string(data), "\n"), " "), " ") - for _, tok := range toks { - if tok == "-dbg" { - return true - } - } - return false -} - func llgenDir(dir string) { fis, err := os.ReadDir(dir) check(err) @@ -63,8 +48,6 @@ func llgenDir(dir string) { testDir := dir + "/" + name fmt.Fprintln(os.Stderr, "llgen", testDir) check(os.Chdir(testDir)) - dbg := isDbgSymEnabled("flags.txt") - cl.EnableDebugSymbols(dbg) llgen.SmartDoFile(testDir) } } diff --git a/cl/cltest/cltest.go b/cl/cltest/cltest.go index 15c05185..5bfde54f 100644 --- a/cl/cltest/cltest.go +++ b/cl/cltest/cltest.go @@ -107,32 +107,12 @@ func Pkg(t *testing.T, pkgPath, outFile string) { } } -func isDbgSymEnabled(flagsFile string) bool { - data, err := os.ReadFile(flagsFile) - if err != nil { - return false - } - toks := strings.Split(strings.Join(strings.Split(string(data), "\n"), " "), " ") - for _, tok := range toks { - if tok == "-dbg" { - return true - } - } - return false -} - func testFrom(t *testing.T, pkgDir, sel string) { if sel != "" && !strings.Contains(pkgDir, sel) { return } log.Println("Parsing", pkgDir) out := pkgDir + "/out.ll" - dbg := isDbgSymEnabled(pkgDir + "/flags.txt") - if dbg { - cl.EnableDebugSymbols(true) - defer cl.EnableDebugSymbols(false) - cl.DebugSymbols() // just for coverage - } b, err := os.ReadFile(out) if err != nil { t.Fatal("ReadFile failed:", err) diff --git a/cl/compile.go b/cl/compile.go index 305bf1cb..f4949b74 100644 --- a/cl/compile.go +++ b/cl/compile.go @@ -57,15 +57,10 @@ func SetDebug(dbgFlags dbgFlags) { debugGoSSA = (dbgFlags & DbgFlagGoSSA) != 0 } -// EnableDebugSymbols enables debug symbols. func EnableDebugSymbols(b bool) { debugSymbols = b } -func DebugSymbols() bool { - return debugSymbols -} - // ----------------------------------------------------------------------------- type instrOrValue interface { diff --git a/internal/build/build.go b/internal/build/build.go index 1f015109..e12e57eb 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -122,7 +122,6 @@ const ( func Do(args []string, conf *Config) ([]Package, error) { flags, patterns, verbose := ParseArgs(args, buildFlags) - cl.EnableDebugSymbols(IsDebugEnabled()) flags = append(flags, "-tags", "llgo") cfg := &packages.Config{ Mode: loadSyntax | packages.NeedDeps | packages.NeedModule | packages.NeedExportFile, @@ -138,6 +137,7 @@ func Do(args []string, conf *Config) ([]Package, error) { } } + cl.EnableDebugSymbols(IsDebugEnabled()) llssa.Initialize(llssa.InitAll) target := &llssa.Target{ @@ -187,7 +187,7 @@ func Do(args []string, conf *Config) ([]Package, error) { }) buildMode := ssaBuildMode - if cl.DebugSymbols() { + if IsDebugEnabled() { buildMode |= ssa.GlobalDebug } if !IsOptimizeEnabled() { @@ -460,7 +460,7 @@ func linkMainPkg(ctx *context, pkg *packages.Package, pkgs []*aPackage, linkArgs } } args = append(args, exargs...) - if cl.DebugSymbols() { + if IsDebugEnabled() { args = append(args, "-gdwarf-4") } diff --git a/internal/llgen/llgenf.go b/internal/llgen/llgenf.go index 283f4d51..e7f8cc83 100644 --- a/internal/llgen/llgenf.go +++ b/internal/llgen/llgenf.go @@ -32,6 +32,13 @@ func GenFrom(fileOrPkg string) string { } func genFrom(pkgPath string) (build.Package, error) { + oldDbg := os.Getenv("LLGO_DEBUG") + dbg := isDbgSymEnabled(filepath.Join(pkgPath, "flags.txt")) + if dbg { + os.Setenv("LLGO_DEBUG", "1") + } + defer os.Setenv("LLGO_DEBUG", oldDbg) + conf := &build.Config{ Mode: build.ModeGen, AppExt: build.DefaultAppExt(), @@ -49,8 +56,22 @@ func DoFile(fileOrPkg, outFile string) { check(err) } -func SmartDoFile(pkgPath ...string) { - pkg, err := genFrom(pkgPath[0]) +func isDbgSymEnabled(flagsFile string) bool { + data, err := os.ReadFile(flagsFile) + if err != nil { + return false + } + toks := strings.Split(strings.Join(strings.Split(string(data), "\n"), " "), " ") + for _, tok := range toks { + if tok == "-dbg" { + return true + } + } + return false +} + +func SmartDoFile(pkgPath string) { + pkg, err := genFrom(pkgPath) check(err) const autgenFile = "llgo_autogen.ll"