Commit b3e2a72e authored by Jeremy Faller's avatar Jeremy Faller

Revert "cmd/link: prefix syms with "_" on darwin links"

This reverts commit 06e5529e.

Reason for revert: darwin_386 is unhappy. (Almost as unhappy as I am.)

https://build.golang.org/log/292c90a4ef1c93597b865ab8513b66a95d93d022

Change-Id: I690566ce1d8212317fc3dc349ad0d4d5a2bb58eb
Reviewed-on: https://go-review.googlesource.com/c/go/+/196033Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
parent 575386d6
// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package ld
import (
"internal/testenv"
"io/ioutil"
"os"
"runtime"
"strings"
"testing"
)
const prog = `
package main
import "log"
func main() {
log.Fatalf("HERE")
}
`
func TestIssue33808(t *testing.T) {
if runtime.GOOS != "darwin" {
return
}
testenv.MustHaveGoBuild(t)
dir, err := ioutil.TempDir("", "TestIssue33808")
if err != nil {
t.Fatalf("could not create directory: %v", err)
}
defer os.RemoveAll(dir)
f := gobuild(t, dir, prog, "-ldflags=-linkmode=external")
f.Close()
syms, err := f.Symbols()
if err != nil {
t.Fatalf("Error reading symbols: %v", err)
}
name := "log.Fatalf"
for _, sym := range syms {
if strings.Contains(sym.Name, name) {
return
}
}
t.Fatalf("Didn't find %v", name)
}
...@@ -869,7 +869,6 @@ func machosymtab(ctxt *Link) { ...@@ -869,7 +869,6 @@ func machosymtab(ctxt *Link) {
symtab.AddUint32(ctxt.Arch, uint32(symstr.Size)) symtab.AddUint32(ctxt.Arch, uint32(symstr.Size))
export := machoShouldExport(ctxt, s) export := machoShouldExport(ctxt, s)
isGoSymbol := strings.Contains(s.Extname(), ".")
// In normal buildmodes, only add _ to C symbols, as // In normal buildmodes, only add _ to C symbols, as
// Go symbols have dot in the name. // Go symbols have dot in the name.
...@@ -878,8 +877,8 @@ func machosymtab(ctxt *Link) { ...@@ -878,8 +877,8 @@ func machosymtab(ctxt *Link) {
// symbols like crosscall2 are in pclntab and end up // symbols like crosscall2 are in pclntab and end up
// pointing at the host binary, breaking unwinding. // pointing at the host binary, breaking unwinding.
// See Issue #18190. // See Issue #18190.
cexport := !isGoSymbol && (ctxt.BuildMode != BuildModePlugin || onlycsymbol(s)) cexport := !strings.Contains(s.Extname(), ".") && (ctxt.BuildMode != BuildModePlugin || onlycsymbol(s))
if cexport || export || isGoSymbol { if cexport || export {
symstr.AddUint8('_') symstr.AddUint8('_')
} }
......
...@@ -473,12 +473,7 @@ func (f *File) parseSymtab(symdat, strtab, cmddat []byte, hdr *SymtabCmd, offset ...@@ -473,12 +473,7 @@ func (f *File) parseSymtab(symdat, strtab, cmddat []byte, hdr *SymtabCmd, offset
if n.Name >= uint32(len(strtab)) { if n.Name >= uint32(len(strtab)) {
return nil, &FormatError{offset, "invalid name in symbol table", n.Name} return nil, &FormatError{offset, "invalid name in symbol table", n.Name}
} }
// We add "_" to Go symbols. Strip it here. See issue 33808. sym.Name = cstring(strtab[n.Name:])
name := cstring(strtab[n.Name:])
if strings.Contains(name, ".") && name[0] == '_' {
name = name[1:]
}
sym.Name = name
sym.Type = n.Type sym.Type = n.Type
sym.Sect = n.Sect sym.Sect = n.Sect
sym.Desc = n.Desc sym.Desc = n.Desc
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment