Merge pull request #599 from aofei/sigsetjmp
ssa: fix `Builder.Sigsetjmp` for Linux
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user