From 08304e886790cbf0ef4bca8158dcb7d99f3a67e7 Mon Sep 17 00:00:00 2001 From: Cherry Zhang Date: Wed, 4 Apr 2018 12:12:10 -0400 Subject: [PATCH] cmd/link: put runtime.framepointer_enabled in DATA instead of RODATA On darwin, only writable symbol is exported (cmd/link/internal/ld/macho.go:/machoShouldExport). For plugin to work correctly, global variables, including runtime.framepointer_enabled which is set by the linker, need to be exported when dynamic linking. Put it in DATA so it is exported. Also in Go it is defined as a var, which is not read-only. While here, do the same for runtime.goarm. Fixes #24653. Change-Id: I9d1b7d5a648be17103d20b97be65a901cb69f5a2 Reviewed-on: https://go-review.googlesource.com/104715 Run-TryBot: Cherry Zhang Reviewed-by: Brad Fitzpatrick Reviewed-by: Austin Clements --- src/cmd/link/internal/ld/lib.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index 7d930746148..435660950f5 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -454,14 +454,14 @@ func (ctxt *Link) loadlib() { // recording the value of GOARM. if ctxt.Arch.Family == sys.ARM { s := ctxt.Syms.Lookup("runtime.goarm", 0) - s.Type = sym.SRODATA + s.Type = sym.SDATA s.Size = 0 s.AddUint8(uint8(objabi.GOARM)) } if objabi.Framepointer_enabled(objabi.GOOS, objabi.GOARCH) { s := ctxt.Syms.Lookup("runtime.framepointer_enabled", 0) - s.Type = sym.SRODATA + s.Type = sym.SDATA s.Size = 0 s.AddUint8(1) }