mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/internal/obj: reject too large symbols
We never supported symbol larger than 2GB (issue #9862), so the object file uses 32-bit for symbol sizes. Check and reject too large symbol before truncating its size. Fixes #42054. Change-Id: I0d1d585ebdba9556f2fd3a97043bd4296d5cc9e4 Reviewed-on: https://go-review.googlesource.com/c/go/+/263641 Trust: Cherry Zhang <cherryyz@google.com> Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
parent
e2c420591c
commit
c9c64886ef
3 changed files with 46 additions and 1 deletions
|
|
@ -261,6 +261,10 @@ func (w *writer) StringTable() {
|
|||
}
|
||||
}
|
||||
|
||||
// cutoff is the maximum data section size permitted by the linker
|
||||
// (see issue #9862).
|
||||
const cutoff = int64(2e9) // 2 GB (or so; looks better in errors than 2^31)
|
||||
|
||||
func (w *writer) Sym(s *LSym) {
|
||||
abi := uint16(s.ABI())
|
||||
if s.Static() {
|
||||
|
|
@ -325,6 +329,9 @@ func (w *writer) Sym(s *LSym) {
|
|||
// don't bother setting align to 1.
|
||||
}
|
||||
}
|
||||
if s.Size > cutoff {
|
||||
w.ctxt.Diag("%s: symbol too large (%d bytes > %d bytes)", s.Name, s.Size, cutoff)
|
||||
}
|
||||
var o goobj.Sym
|
||||
o.SetName(name, w.Writer)
|
||||
o.SetABI(abi)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue