]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.2] cmd/cgo: accept extra leading _ on __cgodebug_data for all...
authorAndrew Gerrand <adg@golang.org>
Fri, 1 Nov 2013 00:32:10 +0000 (11:32 +1100)
committerAndrew Gerrand <adg@golang.org>
Fri, 1 Nov 2013 00:32:10 +0000 (11:32 +1100)
««« CL 19780043 / 8b49cdda6ff4
cmd/cgo: accept extra leading _ on __cgodebug_data for all object formats

The current Windows build breakage appears to be because
the Windows code should be looking for __cgodebug_data
not ___cgodebug_data. Dodge the question everywhere by
accepting both.

R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/19780043
»»»

R=golang-dev
CC=golang-dev
https://golang.org/cl/20660043

src/cmd/cgo/gcc.go

index 60d420b21f30507f48b7fce107f90d4a2d179df8..f2a109d3432165b819a68500b12f456dd262a9e4 100644 (file)
@@ -780,6 +780,11 @@ func (p *Package) gccCmd() []string {
 func (p *Package) gccDebug(stdin []byte) (*dwarf.Data, binary.ByteOrder, []byte) {
        runGcc(stdin, p.gccCmd())
 
+       isDebugData := func(s string) bool {
+               // Some systems use leading _ to denote non-assembly symbols.
+               return s == "__cgodebug_data" || s == "___cgodebug_data"
+       }
+
        if f, err := macho.Open(gccTmp()); err == nil {
                defer f.Close()
                d, err := f.DWARF()
@@ -790,8 +795,7 @@ func (p *Package) gccDebug(stdin []byte) (*dwarf.Data, binary.ByteOrder, []byte)
                if f.Symtab != nil {
                        for i := range f.Symtab.Syms {
                                s := &f.Symtab.Syms[i]
-                               // Mach-O still uses a leading _ to denote non-assembly symbols.
-                               if s.Name == "_"+"__cgodebug_data" {
+                               if isDebugData(s.Name) {
                                        // Found it.  Now find data section.
                                        if i := int(s.Sect) - 1; 0 <= i && i < len(f.Sections) {
                                                sect := f.Sections[i]
@@ -818,7 +822,7 @@ func (p *Package) gccDebug(stdin []byte) (*dwarf.Data, binary.ByteOrder, []byte)
                if err == nil {
                        for i := range symtab {
                                s := &symtab[i]
-                               if s.Name == "__cgodebug_data" {
+                               if isDebugData(s.Name) {
                                        // Found it.  Now find data section.
                                        if i := int(s.Section); 0 <= i && i < len(f.Sections) {
                                                sect := f.Sections[i]
@@ -842,7 +846,7 @@ func (p *Package) gccDebug(stdin []byte) (*dwarf.Data, binary.ByteOrder, []byte)
                }
                var data []byte
                for _, s := range f.Symbols {
-                       if s.Name == "_"+"__cgodebug_data" {
+                       if isDebugData(s.Name) {
                                if i := int(s.SectionNumber) - 1; 0 <= i && i < len(f.Sections) {
                                        sect := f.Sections[i]
                                        if s.Value < sect.Size {