aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link
diff options
context:
space:
mode:
authorChristian Banse <christian.banse@me.com>2023-04-21 15:13:17 +0000
committerCherry Mui <cherryyz@google.com>2023-06-01 17:49:36 +0000
commit7dc8509c693c6e6dfa7bdcebdb9d62058b14b509 (patch)
treedcd62639a356b1048b92b1404442da1e8b96dc41 /src/cmd/link
parent73a29bad0bd24cdd70bbf468fa12fbe7760ef47d (diff)
downloadgo-7dc8509c693c6e6dfa7bdcebdb9d62058b14b509.tar.xz
cmd/link/internal/ld: pass correct offset to codesign.Sign
Previously, codesign.Sign was called with Segtext.Fileoff and Segtext.Filelen. However, both variables do not contain the complete __TEXT segment, as it excludes padding and header. Therefore, we now store a reference to the complete segment in mstext when it is created and pass its offset (which should always be 0) and filesize to codesign.Sign. Fixes #59555 Change-Id: Iad88f142705949dcc0b192b811337df9b4be08cf GitHub-Last-Rev: 37a048d58e01a3befa4db574e5fb48ab8d6013a1 GitHub-Pull-Request: golang/go#59581 Reviewed-on: https://go-review.googlesource.com/c/go/+/484015 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com>
Diffstat (limited to 'src/cmd/link')
-rw-r--r--src/cmd/link/internal/ld/macho.go4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/cmd/link/internal/ld/macho.go b/src/cmd/link/internal/ld/macho.go
index d6c28e4790..e43a1aa002 100644
--- a/src/cmd/link/internal/ld/macho.go
+++ b/src/cmd/link/internal/ld/macho.go
@@ -710,6 +710,7 @@ func asmbMacho(ctxt *Link) {
/* text */
v := Rnd(int64(uint64(HEADR)+Segtext.Length), int64(*FlagRound))
+ var mstext *MachoSeg
if ctxt.LinkMode != LinkExternal {
ms = newMachoSeg("__TEXT", 20)
ms.vaddr = uint64(va)
@@ -718,6 +719,7 @@ func asmbMacho(ctxt *Link) {
ms.filesize = uint64(v)
ms.prot1 = 7
ms.prot2 = 5
+ mstext = ms
}
for _, sect := range Segtext.Sections {
@@ -868,7 +870,7 @@ func asmbMacho(ctxt *Link) {
if int64(len(data)) != codesigOff {
panic("wrong size")
}
- codesign.Sign(ldr.Data(cs), bytes.NewReader(data), "a.out", codesigOff, int64(Segtext.Fileoff), int64(Segtext.Filelen), ctxt.IsExe() || ctxt.IsPIE())
+ codesign.Sign(ldr.Data(cs), bytes.NewReader(data), "a.out", codesigOff, int64(mstext.fileoffset), int64(mstext.filesize), ctxt.IsExe() || ctxt.IsPIE())
ctxt.Out.SeekSet(codesigOff)
ctxt.Out.Write(ldr.Data(cs))
}