aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2011-06-29 11:19:09 -0400
committerSteven Rostedt <rostedt@goodmis.org>2011-06-29 11:19:09 -0400
commit1e57b57502e47eff379cfe8347bab61eadbcf3c0 (patch)
tree5042d0a6c3c723e70ee7a15b9e7f1df2e39b434f
parent1d51f1a4959ec87f17f66c2decace13a5cb30d1e (diff)
trace-cmd: Use size of record to determine kernel stack trace
The kernel stack trace may soon become dynamic, and the size will depend on the size of the record and not the size of the stack array. Use the size of the record to determine the end of the stack output instead of the array. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--trace-ftrace.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/trace-ftrace.c b/trace-ftrace.c
index 7be0ed6..d050738 100644
--- a/trace-ftrace.c
+++ b/trace-ftrace.c
@@ -354,7 +354,6 @@ trace_stack_handler(struct trace_seq *s, struct record *record,
354 unsigned long long addr; 354 unsigned long long addr;
355 const char *func; 355 const char *func;
356 void *data = record->data; 356 void *data = record->data;
357 int i;
358 357
359 field = pevent_find_any_field(event, "caller"); 358 field = pevent_find_any_field(event, "caller");
360 if (!field) { 359 if (!field) {
@@ -366,9 +365,9 @@ trace_stack_handler(struct trace_seq *s, struct record *record,
366 365
367 long_size_check(finfo); 366 long_size_check(finfo);
368 367
369 for (i = 0; i < field->size; i += finfo->long_size) { 368 for (data += field->offset; data < record->data + record->size;
370 addr = pevent_read_number(event->pevent, 369 data += finfo->long_size) {
371 data + field->offset + i, finfo->long_size); 370 addr = pevent_read_number(event->pevent, data, finfo->long_size);
372 371
373 if ((finfo->long_size == 8 && addr == (unsigned long long)-1) || 372 if ((finfo->long_size == 8 && addr == (unsigned long long)-1) ||
374 ((int)addr == -1)) 373 ((int)addr == -1))