mirror of
https://github.com/golang/go.git
synced 2025-10-19 11:03:18 +00:00
cmd/link: fix outdated output mmap check
Outbuf.View used to perform a mmap check by default
and return an error if the check failed,
this behavior has been changed so that now
the View never returns any error,
so the usage needs to be modified accordingly.
Change-Id: I76ffcda5476847f6fed59856a5a5161734f47562
GitHub-Last-Rev: 6449f2973d
GitHub-Pull-Request: golang/go#73730
Reviewed-on: https://go-review.googlesource.com/c/go/+/673095
Reviewed-by: Keith Randall <khr@golang.org>
Auto-Submit: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
8105ea53c3
commit
b338f6bfa6
3 changed files with 10 additions and 13 deletions
|
@ -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()
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue