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"
|
"debug/macho"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/ast"
|
"go/ast"
|
||||||
|
"go/build"
|
||||||
"go/constant"
|
"go/constant"
|
||||||
"go/token"
|
"go/token"
|
||||||
"go/types"
|
"go/types"
|
||||||
@@ -135,7 +136,12 @@ func Do(args []string, conf *Config) {
|
|||||||
|
|
||||||
llssa.Initialize(llssa.InitAll)
|
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
|
sizes := prog.TypeSizes
|
||||||
dedup := packages.NewDeduper()
|
dedup := packages.NewDeduper()
|
||||||
dedup.SetPreload(func(pkg *types.Package, files []*ast.File) {
|
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 {
|
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)
|
return b.Call(fn, jb, savemask)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package ssa
|
|||||||
import (
|
import (
|
||||||
"go/token"
|
"go/token"
|
||||||
"go/types"
|
"go/types"
|
||||||
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
@@ -203,7 +204,10 @@ type Program = *aProgram
|
|||||||
// NewProgram creates a new program.
|
// NewProgram creates a new program.
|
||||||
func NewProgram(target *Target) Program {
|
func NewProgram(target *Target) Program {
|
||||||
if target == nil {
|
if target == nil {
|
||||||
target = &Target{}
|
target = &Target{
|
||||||
|
GOOS: runtime.GOOS,
|
||||||
|
GOARCH: runtime.GOARCH,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ctx := llvm.NewContext()
|
ctx := llvm.NewContext()
|
||||||
td := target.targetData() // TODO(xsw): target config
|
td := target.targetData() // TODO(xsw): target config
|
||||||
|
|||||||
Reference in New Issue
Block a user