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

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

View File

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