aboutsummaryrefslogtreecommitdiffstats
path: root/prog/encoding.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-02-21 10:22:07 +0100
committerDmitry Vyukov <dvyukov@google.com>2020-02-21 10:22:07 +0100
commitb6ed1478343c98348649330e66b021faa747b6e5 (patch)
tree38df81e84acdb967a7dac486521f3856c598e1ca /prog/encoding.go
parentbd2a74a31f07d383be203bcd77dfbecbc1205dd3 (diff)
prog: dump orig prog if Deserialize panics
We are seeing some one-off panics during Deserialization and it's unclear if it's machine memory corrpution or an actual bug in prog. I leam towards machine memory corruption but it's impossible to prove without seeing the orig program. Move git revision to prog and it's more base package (sys can import prog, prog can't import sys).
Diffstat (limited to 'prog/encoding.go')
-rw-r--r--prog/encoding.go6
1 files changed, 6 insertions, 0 deletions
diff --git a/prog/encoding.go b/prog/encoding.go
index 493edd9f4..b36bf9637 100644
--- a/prog/encoding.go
+++ b/prog/encoding.go
@@ -204,6 +204,12 @@ const (
)
func (target *Target) Deserialize(data []byte, mode DeserializeMode) (*Prog, error) {
+ defer func() {
+ if err := recover(); err != nil {
+ panic(fmt.Errorf("%v\ntarget: %v/%v, rev: %v, mode=%v, prog:\n%q",
+ err, target.OS, target.Arch, GitRevision, mode, data))
+ }
+ }()
p := newParser(target, data, mode == Strict)
prog, err := p.parseProg()
if err := p.Err(); err != nil {