]> Cypherpunks repositories - gostls13.git/commitdiff
darwin/amd64: fix text-relocation issues for c-archive libraries

authorAaron Zinman <aaron@azinman.com>
Thu, 4 Feb 2016 01:36:15 +0000 (17:36 -0800)
committerAndrew Gerrand <adg@golang.org>
Thu, 14 Apr 2016 05:24:14 +0000 (05:24 +0000)
The existing implementation deals with absolute relocations in __TEXT
for darwin/amd64 in build-mode c-shared, but it ignores c-archive.
This results in issues when trying to use a c-archive in an iOS
app on the 64-bit simulator. This patch adds c-archive to the
handling of this issue.

Fixes #14217

Change-Id: I2e4d5193caa531171ad22fd0cd420a8bfb4646a6
Reviewed-on: https://go-review.googlesource.com/19206
Reviewed-by: David Crawshaw <crawshaw@golang.org>
Run-TryBot: David Crawshaw <crawshaw@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-on: https://go-review.googlesource.com/22046

src/cmd/link/internal/ld/macho.go

index 1c7f3a0d824cd93f35e7e9b7456854c5105f4467..cf3fba1eee9574807188efba8a96dbb96394ec97 100644 (file)
@@ -356,8 +356,9 @@ func machoshbits(mseg *MachoSeg, sect *Section, segname string) {
        buf := "__" + strings.Replace(sect.Name[1:], ".", "_", -1)
 
        var msect *MachoSect
-       if sect.Rwx&1 == 0 && (Thearch.Thechar == '7' || (Thearch.Thechar == '6' && Buildmode == BuildmodeCShared)) {
-               // Darwin external linker on arm64 and on amd64 in c-shared buildmode
+       if sect.Rwx&1 == 0 && (Thearch.Thechar == '7' || // arm64
+               (Thearch.Thechar == '6' && (Buildmode == BuildmodeCShared || Buildmode == BuildmodeCArchive))) { // amd64
+               // Darwin external linker on arm64 and on amd64 in c-shared/c-archive buildmode
                // complains about absolute relocs in __TEXT, so if the section is not
                // executable, put it in __DATA segment.
                msect = newMachoSect(mseg, buf, "__DATA")