lastTs = int64(raw.args[1])
case traceEvFrequency:
ticksPerSec = int64(raw.args[0])
+ if ticksPerSec <= 0 {
+ err = fmt.Errorf("traceEvFrequency contains invalid frequency %v at offset 0x%x",
+ ticksPerSec, raw.off)
+ return
+ }
case traceEvTimerGoroutine:
timerGoid = raw.args[0]
case traceEvStack:
func skipTraceTestsIfNeeded(t *testing.T) {
switch runtime.GOOS {
case "solaris":
- t.Skip("skipping: solaris timer can go backwards which is incompatible with tracer (http://golang.org/issue/8976)")
- case "windows":
- t.Skip("skipping: windows tests fail with 'failed to parse trace: no traceEvFrequency event'")
- case "android":
- t.Skip("skipping: android tests fail with 'failed to parse trace: g 2 is not runnable before traceEvGoWaiting'")
+ t.Skip("skipping: solaris timer can go backwards (http://golang.org/issue/8976)")
case "plan9":
- t.Skip("skipping: plan9 tests fail with 'fatal error: trace: out of memory'")
+ t.Skip("skipping: plan9 tests fail with out of memory (http://golang.org/issue/9712")
+ }
+
+ switch runtime.GOARCH {
+ case "arm":
+ t.Skip("skipping: arm tests fail with 'failed to parse trace' (http://golang.org/issue/9725)")
}
}
for _, f := range ev.stk {
if strings.HasSuffix(f.file, "trace_test.go") &&
strings.HasSuffix(f.fn, "pprof_test.TestTraceSymbolize") &&
- f.line == 217 {
+ f.line == 218 {
found = true
break eventLoop
}
traceFullQueue(buf)
}
- trace.ticksEnd = cputicks()
- trace.timeEnd = nanotime()
+ for {
+ trace.ticksEnd = cputicks()
+ trace.timeEnd = nanotime()
+ // Windows time can tick only every 15ms, wait for at least one tick.
+ if trace.timeEnd != trace.timeStart {
+ break
+ }
+ osyield()
+ }
+
trace.enabled = false
trace.shutdown = true
trace.stackTab.dump()