aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/vendor/github.com/google/pprof/internal/elfexec
diff options
context:
space:
mode:
authorAlberto Donizetti <alb.donizetti@gmail.com>2017-06-20 18:54:22 +0000
committerAlberto Donizetti <alb.donizetti@gmail.com>2017-06-20 19:46:11 +0000
commit5a5ac34133f31eedf39e0cc6bef06085190317d2 (patch)
tree977ce2134e96a56575d1c177e253dc91ea755d60 /src/cmd/vendor/github.com/google/pprof/internal/elfexec
parent3d13b5e00c9bc065d83e27d787a64adc683cea02 (diff)
downloadgo-5a5ac34133f31eedf39e0cc6bef06085190317d2.tar.xz
Revert "cmd/vendor/github.com/google/pprof: refresh from upstream"
This reverts commit 3d13b5e00c9bc065d83e27d787a64adc683cea02. Reason for revert: the new TestHttpsInsecure test breaks two darwin builders, the android builders, and one plan9 builder. Change-Id: I09158e7d1bd2b3ffda57e7f2350f34eb9b62e784 Reviewed-on: https://go-review.googlesource.com/46158 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/cmd/vendor/github.com/google/pprof/internal/elfexec')
-rw-r--r--src/cmd/vendor/github.com/google/pprof/internal/elfexec/elfexec.go25
-rw-r--r--src/cmd/vendor/github.com/google/pprof/internal/elfexec/elfexec_test.go3
2 files changed, 11 insertions, 17 deletions
diff --git a/src/cmd/vendor/github.com/google/pprof/internal/elfexec/elfexec.go b/src/cmd/vendor/github.com/google/pprof/internal/elfexec/elfexec.go
index 9b238c5b87..c46272e8fc 100644
--- a/src/cmd/vendor/github.com/google/pprof/internal/elfexec/elfexec.go
+++ b/src/cmd/vendor/github.com/google/pprof/internal/elfexec/elfexec.go
@@ -131,7 +131,7 @@ func GetBuildID(binary io.ReaderAt) ([]byte, error) {
if buildID == nil {
buildID = note.Desc
} else {
- return nil, fmt.Errorf("multiple build ids found, don't know which to use")
+ return nil, fmt.Errorf("multiple build ids found, don't know which to use!")
}
}
}
@@ -240,22 +240,17 @@ func GetBase(fh *elf.FileHeader, loadSegment *elf.ProgHeader, stextOffset *uint6
}
return start, nil
case elf.ET_DYN:
- // The process mapping information, start = start of virtual address range,
- // and offset = offset in the executable file of the start address, tells us
- // that a runtime virtual address x maps to a file offset
- // fx = x - start + offset.
+ if offset != 0 {
+ if loadSegment == nil || loadSegment.Vaddr == 0 {
+ return start - offset, nil
+ }
+ return 0, fmt.Errorf("Don't know how to handle mapping. Offset=%x, vaddr=%x",
+ offset, loadSegment.Vaddr)
+ }
if loadSegment == nil {
- return start - offset, nil
+ return start, nil
}
- // The program header, if not nil, indicates the offset in the file where
- // the executable segment is located (loadSegment.Off), and the base virtual
- // address where the first byte of the segment is loaded
- // (loadSegment.Vaddr). A file offset fx maps to a virtual (symbol) address
- // sx = fx - loadSegment.Off + loadSegment.Vaddr.
- //
- // Thus, a runtime virtual address x maps to a symbol address
- // sx = x - start + offset - loadSegment.Off + loadSegment.Vaddr.
- return start - offset + loadSegment.Off - loadSegment.Vaddr, nil
+ return start - loadSegment.Vaddr, nil
}
return 0, fmt.Errorf("Don't know how to handle FileHeader.Type %v", fh.Type)
}
diff --git a/src/cmd/vendor/github.com/google/pprof/internal/elfexec/elfexec_test.go b/src/cmd/vendor/github.com/google/pprof/internal/elfexec/elfexec_test.go
index c6b8fe4c22..b9f2a841a6 100644
--- a/src/cmd/vendor/github.com/google/pprof/internal/elfexec/elfexec_test.go
+++ b/src/cmd/vendor/github.com/google/pprof/internal/elfexec/elfexec_test.go
@@ -62,9 +62,8 @@ func TestGetBase(t *testing.T) {
{"exec chromeos kernel 4", fhExec, kernelHeader, uint64p(0xffffffff81200198), 0x198, 0x100000, 0, 0x7ee00000, false},
{"exec chromeos kernel unremapped", fhExec, kernelHeader, uint64p(0xffffffff810001c8), 0xffffffff834001c8, 0xffffffffc0000000, 0xffffffff834001c8, 0x2400000, false},
{"dyn", fhDyn, nil, nil, 0x200000, 0x300000, 0, 0x200000, false},
- {"dyn map", fhDyn, lsOffset, nil, 0x0, 0x300000, 0, 0xFFFFFFFFFFE00000, false},
+ {"dyn offset", fhDyn, lsOffset, nil, 0x0, 0x300000, 0, 0xFFFFFFFFFFC00000, false},
{"dyn nomap", fhDyn, nil, nil, 0x0, 0x0, 0, 0, false},
- {"dyn map+offset", fhDyn, lsOffset, nil, 0x900000, 0xa00000, 0x200000, 0x500000, false},
{"rel", fhRel, nil, nil, 0x2000000, 0x3000000, 0, 0x2000000, false},
{"rel nomap", fhRel, nil, nil, 0x0, ^uint64(0), 0, 0, false},
{"rel offset", fhRel, nil, nil, 0x100000, 0x200000, 0x1, 0, true},