diff options
Diffstat (limited to 'tools/perf/builtin-script.c')
| -rw-r--r-- | tools/perf/builtin-script.c | 6 | 
1 files changed, 5 insertions, 1 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 286fc70d7402..67be8d31afab 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -1063,7 +1063,7 @@ static int perf_sample__fprintf_brstackinsn(struct perf_sample *sample,  			continue;  		insn = 0; -		for (off = 0;; off += ilen) { +		for (off = 0; off < (unsigned)len; off += ilen) {  			uint64_t ip = start + off;  			printed += ip__fprintf_sym(ip, thread, x.cpumode, x.cpu, &lastsym, attr, fp); @@ -1074,6 +1074,7 @@ static int perf_sample__fprintf_brstackinsn(struct perf_sample *sample,  					printed += print_srccode(thread, x.cpumode, ip);  				break;  			} else { +				ilen = 0;  				printed += fprintf(fp, "\t%016" PRIx64 "\t%s\n", ip,  						   dump_insn(&x, ip, buffer + off, len - off, &ilen));  				if (ilen == 0) @@ -1083,6 +1084,8 @@ static int perf_sample__fprintf_brstackinsn(struct perf_sample *sample,  				insn++;  			}  		} +		if (off != (unsigned)len) +			printed += fprintf(fp, "\tmismatch of LBR data and executable\n");  	}  	/* @@ -1123,6 +1126,7 @@ static int perf_sample__fprintf_brstackinsn(struct perf_sample *sample,  		goto out;  	}  	for (off = 0; off <= end - start; off += ilen) { +		ilen = 0;  		printed += fprintf(fp, "\t%016" PRIx64 "\t%s\n", start + off,  				   dump_insn(&x, start + off, buffer + off, len - off, &ilen));  		if (ilen == 0)  | 
