build: apply review feedback on main module generation

This commit is contained in:
xgopilot
2025-11-16 04:35:41 +00:00
committed by Li Jie
parent 2a4b2ef023
commit 8c7e8b6290

View File

@@ -22,7 +22,6 @@ package build
import ( import (
"go/token" "go/token"
"go/types" "go/types"
"runtime"
"github.com/goplus/llgo/internal/packages" "github.com/goplus/llgo/internal/packages"
llvm "github.com/goplus/llvm" llvm "github.com/goplus/llvm"
@@ -32,13 +31,12 @@ import (
func genMainModule(ctx *context, rtPkgPath string, pkg *packages.Package, needRuntime, needPyInit bool) Package { func genMainModule(ctx *context, rtPkgPath string, pkg *packages.Package, needRuntime, needPyInit bool) Package {
prog := ctx.prog prog := ctx.prog
mainPkg := prog.NewPackage("", pkg.PkgPath+".main") mainPkg := prog.NewPackage("", pkg.ID+".main")
argcVar := mainPkg.NewVarEx("__llgo_argc", prog.Pointer(prog.Int32())) argcVar := mainPkg.NewVarEx("__llgo_argc", prog.Pointer(prog.Int32()))
argcVar.Init(prog.Zero(prog.Int32())) argcVar.Init(prog.Zero(prog.Int32()))
charPtrType := prog.Pointer(prog.Byte()) argvValueType := prog.Pointer(prog.CStr())
argvValueType := prog.Pointer(charPtrType)
argvVar := mainPkg.NewVarEx("__llgo_argv", prog.Pointer(argvValueType)) argvVar := mainPkg.NewVarEx("__llgo_argv", prog.Pointer(argvValueType))
argvVar.InitNil() argvVar.InitNil()
@@ -59,6 +57,7 @@ func genMainModule(ctx *context, rtPkgPath string, pkg *packages.Package, needRu
} }
runtimeStub := defineWeakNoArgStub(mainPkg, "runtime.init") runtimeStub := defineWeakNoArgStub(mainPkg, "runtime.init")
// TODO(lijie): workaround for syscall patch
defineWeakNoArgStub(mainPkg, "syscall.init") defineWeakNoArgStub(mainPkg, "syscall.init")
var pyInit llssa.Function var pyInit llssa.Function
@@ -144,9 +143,8 @@ func emitStdioNobuf(b llssa.Builder, pkg llssa.Package, goarch string) {
stderr := declareExternalPtrGlobal(pkg, "stderr", streamType) stderr := declareExternalPtrGlobal(pkg, "stderr", streamType)
stdoutAlt := declareExternalPtrGlobal(pkg, "__stdout", streamType) stdoutAlt := declareExternalPtrGlobal(pkg, "__stdout", streamType)
stderrAlt := declareExternalPtrGlobal(pkg, "__stderr", streamType) stderrAlt := declareExternalPtrGlobal(pkg, "__stderr", streamType)
sizeType := sizeTypeForArch(prog, goarch) sizeType := prog.Uintptr()
charPtrType := prog.Pointer(prog.Byte()) setvbuf := declareSetvbuf(pkg, streamPtrType, prog.CStr(), prog.Int32(), sizeType)
setvbuf := declareSetvbuf(pkg, streamPtrType, charPtrType, prog.Int32(), sizeType)
stdoutSlot := b.AllocaT(streamPtrType) stdoutSlot := b.AllocaT(streamPtrType)
b.Store(stdoutSlot, stdout) b.Store(stdoutSlot, stdout)
@@ -166,7 +164,7 @@ func emitStdioNobuf(b llssa.Builder, pkg llssa.Package, goarch string) {
mode := prog.IntVal(2, prog.Int32()) mode := prog.IntVal(2, prog.Int32())
zeroSize := prog.Zero(sizeType) zeroSize := prog.Zero(sizeType)
nullBuf := prog.Nil(charPtrType) nullBuf := prog.Nil(prog.CStr())
b.Call(setvbuf.Expr, stdoutPtr, nullBuf, mode, zeroSize) b.Call(setvbuf.Expr, stdoutPtr, nullBuf, mode, zeroSize)
b.Call(setvbuf.Expr, stderrPtr, nullBuf, mode, zeroSize) b.Call(setvbuf.Expr, stderrPtr, nullBuf, mode, zeroSize)
@@ -213,13 +211,3 @@ func newEntrySignature(argvType types.Type) *types.Signature {
[]types.Type{types.Typ[types.Int32]}, []types.Type{types.Typ[types.Int32]},
) )
} }
func sizeTypeForArch(prog llssa.Program, arch string) llssa.Type {
if arch == "" {
arch = runtime.GOARCH
}
if is32Bits(arch) {
return prog.Uint32()
}
return prog.Uint64()
}