cmd/link: fix outdated output mmap check

This commit is contained in:
Zxilly 2025-05-15 18:43:19 +08:00
parent bb0c14b895
commit 6449f2973d
No known key found for this signature in database
GPG key ID: 47AB1DEC841BC6A2
3 changed files with 10 additions and 13 deletions

View file

@ -195,10 +195,7 @@ func relocSectFn(ctxt *Link, relocSect func(*Link, *OutBuf, *sym.Section, []load
fn = func(ctxt *Link, sect *sym.Section, syms []loader.Sym) {
wg.Add(1)
sem <- 1
out, err := ctxt.Out.View(sect.Reloff)
if err != nil {
panic(err)
}
out := ctxt.Out.View(sect.Reloff)
go func() {
relocSect(ctxt, out, sect, syms)
wg.Done()

View file

@ -1063,7 +1063,8 @@ func writeBlocks(ctxt *Link, out *OutBuf, sem chan int, ldr *loader.Loader, syms
}
// Start the block output operator.
if o, err := out.View(uint64(out.Offset() + written)); err == nil {
if ctxt.Out.isMmapped() {
o := out.View(uint64(out.Offset() + written))
sem <- 1
wg.Add(1)
go func(o *OutBuf, ldr *loader.Loader, syms []loader.Sym, addr, size int64, pad []byte) {
@ -1142,15 +1143,16 @@ type writeFn func(*Link, *OutBuf, int64, int64)
// writeParallel handles scheduling parallel execution of data write functions.
func writeParallel(wg *sync.WaitGroup, fn writeFn, ctxt *Link, seek, vaddr, length uint64) {
if out, err := ctxt.Out.View(seek); err != nil {
ctxt.Out.SeekSet(int64(seek))
fn(ctxt, ctxt.Out, int64(vaddr), int64(length))
} else {
if ctxt.Out.isMmapped() {
out := ctxt.Out.View(seek)
wg.Add(1)
go func() {
defer wg.Done()
fn(ctxt, out, int64(vaddr), int64(length))
}()
} else {
ctxt.Out.SeekSet(int64(seek))
fn(ctxt, ctxt.Out, int64(vaddr), int64(length))
}
}

View file

@ -92,9 +92,7 @@ func NewOutBuf(arch *sys.Arch) *OutBuf {
}
}
var viewError = errors.New("output not mmapped")
func (out *OutBuf) View(start uint64) (*OutBuf, error) {
func (out *OutBuf) View(start uint64) *OutBuf {
return &OutBuf{
arch: out.arch,
name: out.name,
@ -102,7 +100,7 @@ func (out *OutBuf) View(start uint64) (*OutBuf, error) {
heap: out.heap,
off: int64(start),
isView: true,
}, nil
}
}
var viewCloseError = errors.New("cannot Close OutBuf from View")