diff --git a/internal/build/build.go b/internal/build/build.go index aa3b8b89..8854fb36 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -20,6 +20,7 @@ import ( "debug/macho" "fmt" "go/ast" + "go/build" "go/constant" "go/token" "go/types" @@ -135,7 +136,12 @@ func Do(args []string, conf *Config) { llssa.Initialize(llssa.InitAll) - prog := llssa.NewProgram(nil) + target := &llssa.Target{ + GOOS: build.Default.GOOS, + GOARCH: build.Default.GOARCH, + } + + prog := llssa.NewProgram(target) sizes := prog.TypeSizes dedup := packages.NewDeduper() dedup.SetPreload(func(pkg *types.Package, files []*ast.File) { diff --git a/ssa/eh.go b/ssa/eh.go index 2e996101..a7f42a59 100644 --- a/ssa/eh.go +++ b/ssa/eh.go @@ -63,7 +63,11 @@ func (b Builder) AllocaSigjmpBuf() Expr { } func (b Builder) Sigsetjmp(jb, savemask Expr) Expr { - fn := b.Pkg.cFunc("sigsetjmp", b.Prog.tySigsetjmp()) + fname := "sigsetjmp" + if b.Prog.target.GOOS == "linux" { + fname = "__sigsetjmp" + } + fn := b.Pkg.cFunc(fname, b.Prog.tySigsetjmp()) return b.Call(fn, jb, savemask) } diff --git a/ssa/package.go b/ssa/package.go index 382ef365..c519cc14 100644 --- a/ssa/package.go +++ b/ssa/package.go @@ -19,6 +19,7 @@ package ssa import ( "go/token" "go/types" + "runtime" "strconv" "unsafe" @@ -203,7 +204,10 @@ type Program = *aProgram // NewProgram creates a new program. func NewProgram(target *Target) Program { if target == nil { - target = &Target{} + target = &Target{ + GOOS: runtime.GOOS, + GOARCH: runtime.GOARCH, + } } ctx := llvm.NewContext() td := target.targetData() // TODO(xsw): target config