- Subject: [tip:perf/core] perf annotate: Introduce ->free() method in ins_ops
- From: tip-bot for Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
- Date: Mon, 14 May 2012 06:01:29 -0700
- Cc: linux-kernel@xxxxxxxxxxxxxxx, eranian@xxxxxxxxxx, paulus@xxxxxxxxx, acme@xxxxxxxxxx, hpa@xxxxxxxxx, mingo@xxxxxxxxxx, peterz@xxxxxxxxxxxxx, efault@xxxxxx, namhyung@xxxxxxxxx, fweisbec@xxxxxxxxx, dsahern@xxxxxxxxx, tglx@xxxxxxxxxxxxx
- Git-commit-id: c46219ac34f0f365bac700ca6a10ef979c643233
- Reply-to: mingo@xxxxxxxxxx, hpa@xxxxxxxxx, acme@xxxxxxxxxx, paulus@xxxxxxxxx, eranian@xxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, efault@xxxxxx, peterz@xxxxxxxxxxxxx, namhyung@xxxxxxxxx, fweisbec@xxxxxxxxx, dsahern@xxxxxxxxx, tglx@xxxxxxxxxxxxx
- Robot-id: <tip-bot.git.kernel.org>
- Robot-unsubscribe: Contact <mailto:hpa@xxxxxxxxxx> to get blacklisted from these emails
Commit-ID: c46219ac34f0f365bac700ca6a10ef979c643233
Gitweb: http://git.kernel.org/tip/c46219ac34f0f365bac700ca6a10ef979c643233
Author: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
AuthorDate: Sat, 12 May 2012 13:26:20 -0300
Committer: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
CommitDate: Sat, 12 May 2012 13:26:20 -0300
perf annotate: Introduce ->free() method in ins_ops
So that we don't special case disasm_line__free, allowing each
instruction class to provide an specialized destructor, like is needed
for 'lock'.
Cc: David Ahern <dsahern@xxxxxxxxx>
Cc: Frederic Weisbecker <fweisbec@xxxxxxxxx>
Cc: Mike Galbraith <efault@xxxxxx>
Cc: Namhyung Kim <namhyung@xxxxxxxxx>
Cc: Paul Mackerras <paulus@xxxxxxxxx>
Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
Cc: Stephane Eranian <eranian@xxxxxxxxxx>
Link: http://lkml.kernel.org/n/tip-xxw4vs5n077tf35jsvjzylhb@xxxxxxxxxxxxxx
Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
---
tools/perf/util/annotate.c | 28 ++++++++++++++++++++--------
tools/perf/util/annotate.h | 1 +
2 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 1dce098..8069dfb 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -21,6 +21,14 @@ const char *disassembler_style;
static struct ins *ins__find(const char *name);
static int disasm_line__parse(char *line, char **namep, char **rawp);
+static void ins__delete(struct ins_operands *ops)
+{
+ free(ops->source.raw);
+ free(ops->source.name);
+ free(ops->target.raw);
+ free(ops->target.name);
+}
+
static int ins__raw_scnprintf(struct ins *ins, char *bf, size_t size,
struct ins_operands *ops)
{
@@ -192,7 +200,15 @@ static int lock__scnprintf(struct ins *ins, char *bf, size_t size,
size - printed, ops->locked.ops);
}
+static void lock__delete(struct ins_operands *ops)
+{
+ free(ops->locked.ops);
+ free(ops->target.raw);
+ free(ops->target.name);
+}
+
static struct ins_ops lock_ops = {
+ .free = lock__delete,
.parse = lock__parse,
.scnprintf = lock__scnprintf,
};
@@ -542,14 +558,10 @@ void disasm_line__free(struct disasm_line *dl)
{
free(dl->line);
free(dl->name);
- if (dl->ins && dl->ins->ops == &lock_ops) {
- free(dl->ops.locked.ops);
- } else {
- free(dl->ops.source.raw);
- free(dl->ops.source.name);
- }
- free(dl->ops.target.raw);
- free(dl->ops.target.name);
+ if (dl->ins && dl->ins->ops->free)
+ dl->ins->ops->free(&dl->ops);
+ else
+ ins__delete(&dl->ops);
free(dl);
}
diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h
index b79d326..78a5692 100644
--- a/tools/perf/util/annotate.h
+++ b/tools/perf/util/annotate.h
@@ -32,6 +32,7 @@ struct ins_operands {
};
struct ins_ops {
+ void (*free)(struct ins_operands *ops);
int (*parse)(struct ins_operands *ops);
int (*scnprintf)(struct ins *ins, char *bf, size_t size,
struct ins_operands *ops);
--
To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Linux USB Devel]
[Linux Video &Media]
[Video for Linux]
[Linux Audio Users]
[Photo]
[Yosemite News]
[Yosemite Photos]
[Free Online Dating]
[Linux Kernel]
[Linux SCSI]
[XFree86]