diff options
author | Cherry Mui <cherryyz@google.com> | 2021-05-11 22:40:02 -0400 |
---|---|---|
committer | Dmitri Shuralyov <dmitshur@golang.org> | 2021-05-21 22:34:30 +0000 |
commit | 305fa952c23b67e03a21d30318b945fddb2f3916 (patch) | |
tree | 5dfa19b756d6d748f35252cb68a18f22ccd0df5b | |
parent | c7248a0c9408552e7748a5cbdbee63c5535c8c83 (diff) | |
download | go-305fa952c23b67e03a21d30318b945fddb2f3916.tar.gz go-305fa952c23b67e03a21d30318b945fddb2f3916.zip |
[release-branch.go1.16] cmd/link: don't cast end address to int32
When linking a very large binary, the section address may not fit
in int32. Don't truncate it.
Fixes #46128.
Updates #46126.
Change-Id: Ibcc8d74bf5662611949e547ce44ca8b973de383f
Reviewed-on: https://go-review.googlesource.com/c/go/+/319289
Trust: Cherry Mui <cherryyz@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
(cherry picked from commit af0f8c149e8a4b237910fc7b41739bedc546473c)
Reviewed-on: https://go-review.googlesource.com/c/go/+/319369
-rw-r--r-- | src/cmd/link/internal/ld/elf.go | 2 | ||||
-rw-r--r-- | src/cmd/link/internal/ld/macho.go | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/src/cmd/link/internal/ld/elf.go b/src/cmd/link/internal/ld/elf.go index 37b2dc640d..f5823a8fbf 100644 --- a/src/cmd/link/internal/ld/elf.go +++ b/src/cmd/link/internal/ld/elf.go @@ -1086,7 +1086,7 @@ func elfrelocsect(ctxt *Link, out *OutBuf, sect *sym.Section, syms []loader.Sym) } } - eaddr := int32(sect.Vaddr + sect.Length) + eaddr := sect.Vaddr + sect.Length for _, s := range syms { if !ldr.AttrReachable(s) { continue diff --git a/src/cmd/link/internal/ld/macho.go b/src/cmd/link/internal/ld/macho.go index 3630e67c25..a9f4d87229 100644 --- a/src/cmd/link/internal/ld/macho.go +++ b/src/cmd/link/internal/ld/macho.go @@ -1168,7 +1168,7 @@ func machorelocsect(ctxt *Link, out *OutBuf, sect *sym.Section, syms []loader.Sy } } - eaddr := int32(sect.Vaddr + sect.Length) + eaddr := sect.Vaddr + sect.Length for _, s := range syms { if !ldr.AttrReachable(s) { continue |