Merge pull request #599 from aofei/sigsetjmp

ssa: fix `Builder.Sigsetjmp` for Linux
This commit is contained in:
xushiwei
2024-07-29 17:54:19 +08:00
committed by GitHub
3 changed files with 17 additions and 3 deletions

View File

@@ -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) {

View 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)
} }

View File

@@ -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