]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/{addr2line,objdump}: fix finding pclntab and symtab for pe and plan9obj
authorMatthew Dempsky <mdempsky@google.com>
Thu, 28 Aug 2014 01:01:17 +0000 (18:01 -0700)
committerIan Lance Taylor <iant@golang.org>
Thu, 28 Aug 2014 01:01:17 +0000 (18:01 -0700)
Broken by 8b5fc7c59d05.

Update #8092

LGTM=iant, alex.brainman
R=rsc, iant, alex.brainman
CC=golang-codereviews
https://golang.org/cl/138770043

src/cmd/internal/objfile/pe.go
src/cmd/internal/objfile/plan9obj.go
src/cmd/objdump/main.go

index 492766d9a214e45f4db9681e45c0704dc38d6cc6..868709eaf9e04a11e371e92822f0d2c78443e5cf 100644 (file)
@@ -115,11 +115,20 @@ func (f *peFile) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
        if sect := f.pe.Section(".text"); sect != nil {
                textStart = imageBase + uint64(sect.VirtualAddress)
        }
-       if pclntab, err = loadPETable(f.pe, "pclntab", "epclntab"); err != nil {
-               return 0, nil, nil, err
+       if pclntab, err = loadPETable(f.pe, "runtime.pclntab", "runtime.epclntab"); err != nil {
+               // We didn't find the symbols, so look for the names used in 1.3 and earlier.
+               // TODO: Remove code looking for the old symbols when we no longer care about 1.3.
+               var err2 error
+               if pclntab, err2 = loadPETable(f.pe, "pclntab", "epclntab"); err2 != nil {
+                       return 0, nil, nil, err
+               }
        }
-       if symtab, err = loadPETable(f.pe, "symtab", "esymtab"); err != nil {
-               return 0, nil, nil, err
+       if symtab, err = loadPETable(f.pe, "runtime.symtab", "runtime.esymtab"); err != nil {
+               // Same as above.
+               var err2 error
+               if symtab, err2 = loadPETable(f.pe, "symtab", "esymtab"); err2 != nil {
+                       return 0, nil, nil, err
+               }
        }
        return textStart, symtab, pclntab, nil
 }
index 3fe05ec03b57deb4ff2be462796d94482f1a9aa1..d2c3d3f3fe8f7de1a53c05e1091602b9575ccff4 100644 (file)
@@ -55,11 +55,20 @@ func (f *plan9File) symbols() ([]Sym, error) {
 
 func (f *plan9File) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
        textStart = f.plan9.LoadAddress + f.plan9.HdrSize
-       if pclntab, err = loadPlan9Table(f.plan9, "pclntab", "epclntab"); err != nil {
-               return 0, nil, nil, err
+       if pclntab, err = loadPlan9Table(f.plan9, "runtime.pclntab", "runtime.epclntab"); err != nil {
+               // We didn't find the symbols, so look for the names used in 1.3 and earlier.
+               // TODO: Remove code looking for the old symbols when we no longer care about 1.3.
+               var err2 error
+               if pclntab, err2 = loadPlan9Table(f.plan9, "pclntab", "epclntab"); err2 != nil {
+                       return 0, nil, nil, err
+               }
        }
-       if symtab, err = loadPlan9Table(f.plan9, "symtab", "esymtab"); err != nil {
-               return 0, nil, nil, err
+       if symtab, err = loadPlan9Table(f.plan9, "runtime.symtab", "runtime.esymtab"); err != nil {
+               // Same as above.
+               var err2 error
+               if symtab, err2 = loadPlan9Table(f.plan9, "symtab", "esymtab"); err2 != nil {
+                       return 0, nil, nil, err
+               }
        }
        return textStart, symtab, pclntab, nil
 }
index 42f015be707561beeea6f65533c6f28d70c0bd50..1e4163296f07873ab55cec9c07e4e35f1385f846 100644 (file)
@@ -355,11 +355,20 @@ func loadTables(f *os.File) (textStart uint64, textData, symtab, pclntab []byte,
                        textStart = imageBase + uint64(sect.VirtualAddress)
                        textData, _ = sect.Data()
                }
-               if pclntab, err = loadPETable(obj, "pclntab", "epclntab"); err != nil {
-                       return 0, nil, nil, nil, err
+               if pclntab, err = loadPETable(obj, "runtime.pclntab", "runtime.epclntab"); err != nil {
+                       // We didn't find the symbols, so look for the names used in 1.3 and earlier.
+                       // TODO: Remove code looking for the old symbols when we no longer care about 1.3.
+                       var err2 error
+                       if pclntab, err2 = loadPETable(obj, "pclntab", "epclntab"); err2 != nil {
+                               return 0, nil, nil, nil, err
+                       }
                }
-               if symtab, err = loadPETable(obj, "symtab", "esymtab"); err != nil {
-                       return 0, nil, nil, nil, err
+               if symtab, err = loadPETable(obj, "runtime.symtab", "runtime.esymtab"); err != nil {
+                       // Same as above.
+                       var err2 error
+                       if symtab, err2 = loadPETable(obj, "symtab", "esymtab"); err2 != nil {
+                               return 0, nil, nil, nil, err
+                       }
                }
                return textStart, textData, symtab, pclntab, nil
        }
@@ -369,11 +378,20 @@ func loadTables(f *os.File) (textStart uint64, textData, symtab, pclntab []byte,
                if sect := obj.Section("text"); sect != nil {
                        textData, _ = sect.Data()
                }
-               if pclntab, err = loadPlan9Table(obj, "pclntab", "epclntab"); err != nil {
-                       return 0, nil, nil, nil, err
+               if pclntab, err = loadPlan9Table(obj, "runtime.pclntab", "runtime.epclntab"); err != nil {
+                       // We didn't find the symbols, so look for the names used in 1.3 and earlier.
+                       // TODO: Remove code looking for the old symbols when we no longer care about 1.3.
+                       var err2 error
+                       if pclntab, err2 = loadPlan9Table(obj, "pclntab", "epclntab"); err2 != nil {
+                               return 0, nil, nil, nil, err
+                       }
                }
-               if symtab, err = loadPlan9Table(obj, "symtab", "esymtab"); err != nil {
-                       return 0, nil, nil, nil, err
+               if symtab, err = loadPlan9Table(obj, "runtime.symtab", "runtime.esymtab"); err != nil {
+                       // Same as above.
+                       var err2 error
+                       if symtab, err2 = loadPlan9Table(obj, "symtab", "esymtab"); err2 != nil {
+                               return 0, nil, nil, nil, err
+                       }
                }
                return textStart, textData, symtab, pclntab, nil
        }