From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755783AbaGQI7s (ORCPT ); Thu, 17 Jul 2014 04:59:48 -0400 Received: from mga01.intel.com ([192.55.52.88]:25352 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753605AbaGQI7n (ORCPT ); Thu, 17 Jul 2014 04:59:43 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.01,676,1400050800"; d="scan'208";a="571179525" From: Adrian Hunter To: Jiri Olsa Cc: Arnaldo Carvalho de Melo , Peter Zijlstra , David Ahern , Frederic Weisbecker , Namhyung Kim , Paul Mackerras , Stephane Eranian , linux-kernel@vger.kernel.org Subject: [PATCH V3] perf tools: Record whether a dso has data Date: Thu, 17 Jul 2014 11:58:30 +0300 Message-Id: <1405587510-15037-1-git-send-email-adrian.hunter@intel.com> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1405586590-13657-3-git-send-email-adrian.hunter@intel.com> References: <1405586590-13657-3-git-send-email-adrian.hunter@intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add 'data_status' to record whether a dso has data (i.e. an object file) Signed-off-by: Adrian Hunter --- tools/perf/util/dso.c | 20 ++++++++++++-------- tools/perf/util/dso.h | 7 +++++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c index 28cf747..08eb028 100644 --- a/tools/perf/util/dso.c +++ b/tools/perf/util/dso.c @@ -332,25 +332,28 @@ int dso__data_fd(struct dso *dso, struct machine *machine) int i = 0; if (dso->data.fd >= 0) - return dso->data.fd; + goto out; if (dso->binary_type != DSO_BINARY_TYPE__NOT_FOUND) { dso->data.fd = open_dso(dso, machine); - return dso->data.fd; + goto out; } do { - int fd; - dso->binary_type = binary_type_data[i++]; - fd = open_dso(dso, machine); - if (fd >= 0) - return dso->data.fd = fd; + dso->data.fd = open_dso(dso, machine); + if (dso->data.fd >= 0) + goto out; } while (dso->binary_type != DSO_BINARY_TYPE__NOT_FOUND); +out: + if (dso->data.fd >= 0) + dso->data.data_status = DSO_DATA_STATUS_OK; + else + dso->data.data_status = DSO_DATA_STATUS_ERROR; - return -EINVAL; + return dso->data.fd; } static void @@ -701,6 +704,7 @@ struct dso *dso__new(const char *name) dso->symbols[i] = dso->symbol_names[i] = RB_ROOT; dso->data.cache = RB_ROOT; dso->data.fd = -1; + dso->data.data_status = DSO_DATA_STATUS_UNKNOWN; dso->symtab_type = DSO_BINARY_TYPE__NOT_FOUND; dso->binary_type = DSO_BINARY_TYPE__NOT_FOUND; dso->is_64_bit = (sizeof(void *) == 8); diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h index c239e86..07d0a58 100644 --- a/tools/perf/util/dso.h +++ b/tools/perf/util/dso.h @@ -40,6 +40,12 @@ enum dso_swap_type { DSO_SWAP__YES, }; +enum dso_data_status { + DSO_DATA_STATUS_ERROR = -1, + DSO_DATA_STATUS_UNKNOWN = 0, + DSO_DATA_STATUS_OK = 1, +}; + #define DSO__SWAP(dso, type, val) \ ({ \ type ____r = val; \ @@ -104,6 +110,7 @@ struct dso { struct { struct rb_root cache; int fd; + int data_status; size_t file_size; struct list_head open_entry; } data; -- 1.8.3.2