From: Joel Sing Date: Sat, 22 Sep 2012 07:57:54 +0000 (+1000) Subject: cmd/cgo: use debug data for enums on windows X-Git-Tag: go1.1rc2~2375 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=49aa74ef7f3a3c3c261bd9cdf3b8eb26631dcd17;p=gostls13.git cmd/cgo: use debug data for enums on windows Use the debug data for enums on windows. Fixes #4120. R=alex.brainman CC=golang-dev https://golang.org/cl/6545047 --- diff --git a/src/cmd/cgo/gcc.go b/src/cmd/cgo/gcc.go index eee7602307..963efa58de 100644 --- a/src/cmd/cgo/gcc.go +++ b/src/cmd/cgo/gcc.go @@ -830,15 +830,25 @@ func (p *Package) gccDebug(stdin []byte) (*dwarf.Data, binary.ByteOrder, []byte) return d, f.ByteOrder, data } - // Can skip debug data block in PE for now. - // The DWARF information is complete. - if f, err := pe.Open(gccTmp()); err == nil { d, err := f.DWARF() if err != nil { fatalf("cannot load DWARF output from %s: %v", gccTmp(), err) } - return d, binary.LittleEndian, nil + var data []byte + for _, s := range f.Symbols { + if s.Name == "_"+"__cgodebug_data" { + if i := int(s.SectionNumber) - 1; 0 <= i && i < len(f.Sections) { + sect := f.Sections[i] + if s.Value < sect.Size { + if sdat, err := sect.Data(); err == nil { + data = sdat[s.Value:] + } + } + } + } + } + return d, binary.LittleEndian, data } fatalf("cannot parse gcc output %s as ELF, Mach-O, PE object", gccTmp())