|
@@ -234,6 +234,13 @@ static int map__overlap(struct map *l, struct map *r)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static size_t map__fprintf(struct map *self, FILE *fp)
|
|
|
|
+{
|
|
|
|
+ return fprintf(fp, " %lx-%lx %lx %s\n",
|
|
|
|
+ self->start, self->end, self->pgoff, self->dso->name);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
struct thread {
|
|
struct thread {
|
|
struct rb_node rb_node;
|
|
struct rb_node rb_node;
|
|
struct list_head maps;
|
|
struct list_head maps;
|
|
@@ -264,6 +271,18 @@ static int thread__set_comm(struct thread *self, const char *comm)
|
|
return self->comm ? 0 : -ENOMEM;
|
|
return self->comm ? 0 : -ENOMEM;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static size_t thread__fprintf(struct thread *self, FILE *fp)
|
|
|
|
+{
|
|
|
|
+ struct map *pos;
|
|
|
|
+ size_t ret = fprintf(fp, "Thread %d %s\n", self->pid, self->comm);
|
|
|
|
+
|
|
|
|
+ list_for_each_entry(pos, &self->maps, node)
|
|
|
|
+ ret += map__fprintf(pos, fp);
|
|
|
|
+
|
|
|
|
+ return ret;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
static struct rb_root threads;
|
|
static struct rb_root threads;
|
|
static struct thread *last_match;
|
|
static struct thread *last_match;
|
|
|
|
|
|
@@ -355,6 +374,20 @@ static struct map *thread__find_map(struct thread *self, uint64_t ip)
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static size_t threads__fprintf(FILE *fp)
|
|
|
|
+{
|
|
|
|
+ size_t ret = 0;
|
|
|
|
+ struct rb_node *nd;
|
|
|
|
+
|
|
|
|
+ for (nd = rb_first(&threads); nd; nd = rb_next(nd)) {
|
|
|
|
+ struct thread *pos = rb_entry(nd, struct thread, rb_node);
|
|
|
|
+
|
|
|
|
+ ret += thread__fprintf(pos, fp);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return ret;
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* histogram, sorted on item, collects counts
|
|
* histogram, sorted on item, collects counts
|
|
*/
|
|
*/
|
|
@@ -1126,6 +1159,9 @@ more:
|
|
if (dump_trace)
|
|
if (dump_trace)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
|
|
+ if (verbose >= 3)
|
|
|
|
+ threads__fprintf(stdout);
|
|
|
|
+
|
|
if (verbose >= 2)
|
|
if (verbose >= 2)
|
|
dsos__fprintf(stdout);
|
|
dsos__fprintf(stdout);
|
|
|
|
|