1
0
mirror of https://github.com/golang/go synced 2024-09-25 07:20:12 -06:00

ld: fix Mach-O code signing for non-cgo binaries

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5561060
This commit is contained in:
Mikkel Krautz 2012-01-23 09:42:09 -05:00 committed by Russ Cox
parent b35cef6704
commit 280d85a80b

View File

@ -499,7 +499,24 @@ domacholink(void)
s3 = lookup(".linkedit.got", 0);
s4 = lookup(".dynstr", 0);
while(s4->size%4)
// Force the linkedit section to end on a 16-byte
// boundary. This allows pure (non-cgo) Go binaries
// to be code signed correctly.
//
// Apple's codesign_allocate (a helper utility for
// the codesign utility) can do this fine itself if
// it is run on a dynamic Mach-O binary. However,
// when it is run on a pure (non-cgo) Go binary, where
// the linkedit section is mostly empty, it fails to
// account for the extra padding that it itself adds
// when adding the LC_CODE_SIGNATURE load command
// (which must be aligned on a 16-byte boundary).
//
// By forcing the linkedit section to end on a 16-byte
// boundary, codesign_allocate will not need to apply
// any alignment padding itself, working around the
// issue.
while(s4->size%16)
adduint8(s4, 0);
size = s1->size + s2->size + s3->size + s4->size;