From 4d920410d2a61b9df697337faff3944834b55162 Mon Sep 17 00:00:00 2001 From: David Crawshaw Date: Thu, 24 Mar 2016 22:32:38 -0400 Subject: [PATCH] cmd/compile: avoid pointers in go.string.* symbols When creating binaries for dynamic linking, the linker moves read-only data symbols that contain pointers into relro sections. It is not setup for handling a go.string symbol moving to relro. Instead of teaching it how (because go.string symbols with pointers are unusual anyhow), put the data in a type.. section. Fixes the android builder. Change-Id: Ica4722d32241643c060923517b90276ff8ac6b07 Reviewed-on: https://go-review.googlesource.com/21110 Reviewed-by: Brad Fitzpatrick --- src/cmd/compile/internal/gc/reflect.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/gc/reflect.go b/src/cmd/compile/internal/gc/reflect.go index a91948fb8e..d02bf66d3f 100644 --- a/src/cmd/compile/internal/gc/reflect.go +++ b/src/cmd/compile/internal/gc/reflect.go @@ -533,7 +533,11 @@ func dname(s *Sym, ot int, name, tag string, pkg *Pkg, exported bool) int { if pkg == nil { _, bsym = stringsym(string(b)) } else { - bsymname := fmt.Sprintf(`go.string."".methodname.%d`, dnameCount) + // Write out data as "type.." to signal two things to the + // linker, first that when dynamically linking, the symbol + // should be moved to a relro section, and second that the + // contents should not be decoded as a type. + bsymname := fmt.Sprintf(`type..methodname."".%d`, dnameCount) dnameCount++ bsym = obj.Linklookup(Ctxt, bsymname, 0) bsym.P = b -- 2.48.1