From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1422813AbcFGSHB (ORCPT ); Tue, 7 Jun 2016 14:07:01 -0400 Received: from mail.kernel.org ([198.145.29.136]:33969 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161610AbcFGSG7 (ORCPT ); Tue, 7 Jun 2016 14:06:59 -0400 Date: Tue, 7 Jun 2016 15:06:55 -0300 From: Arnaldo Carvalho de Melo To: He Kuang Cc: peterz@infradead.org, mingo@redhat.com, alexander.shishkin@linux.intel.com, jolsa@redhat.com, wangnan0@huawei.com, jpoimboe@redhat.com, ak@linux.intel.com, eranian@google.com, namhyung@kernel.org, adrian.hunter@intel.com, sukadev@linux.vnet.ibm.com, masami.hiramatsu.pt@hitachi.com, tumanova@linux.vnet.ibm.com, kan.liang@intel.com, penberg@kernel.org, dsahern@gmail.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH v9 10/14 UPDATE] perf tools: Check the target platform before assigning unwind methods Message-ID: <20160607180655.GE11589@kernel.org> References: <1464924803-22214-11-git-send-email-hekuang@huawei.com> <1465018589-10830-1-git-send-email-hekuang@huawei.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1465018589-10830-1-git-send-email-hekuang@huawei.com> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.6.1 (2016-04-27) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Sat, Jun 04, 2016 at 05:36:29AM +0000, He Kuang escreveu: > -int unwind__prepare_access(struct thread *thread) > +int unwind__prepare_access(struct thread *thread, struct map *map) > { > + const char *arch; > + enum dso_type dso_type; > + > + if (thread->addr_space) { > + pr_debug("unwind: thread map already set, dso=%s\n", > + map->dso->name); > + return 0; > + } > + > + /* env->arch is NULL for live-mode (i.e. perf top) */ > + if (!thread->mg->machine->env || !thread->mg->machine->env->arch) > + return 0; You can not simply return here, you need to jump to... > + > + dso_type = dso__type(map->dso, thread->mg->machine); > + if (dso_type == DSO__TYPE_UNKNOWN) > + return 0; > + > + arch = normalize_arch(thread->mg->machine->env->arch); > + pr_debug("unwind: target platform=%s\n", arch); > + Here: > unwind__register_ops(thread, local_unwind_libunwind_ops); This way things continue work on, say: perf top --call-graph dwarf or: perf trace --call-graph dwarf usleep 1 And also: perf test unwind Will pass, fixing it. > return thread->unwind_libunwind_ops->prepare_access(thread); > diff --git a/tools/perf/util/unwind.h b/tools/perf/util/unwind.h > index bbd73d9..bf9f593 100644 > --- a/tools/perf/util/unwind.h > +++ b/tools/perf/util/unwind.h > @@ -30,11 +30,12 @@ int unwind__get_entries(unwind_entry_cb_t cb, void *arg, > /* libunwind specific */ > #ifdef HAVE_LIBUNWIND_SUPPORT > int libunwind__arch_reg_id(int regnum); > -int unwind__prepare_access(struct thread *thread); > +int unwind__prepare_access(struct thread *thread, struct map *map); > void unwind__flush_access(struct thread *thread); > void unwind__finish_access(struct thread *thread); > #else > -static inline int unwind__prepare_access(struct thread *thread __maybe_unused) > +static inline int unwind__prepare_access(struct thread *thread __maybe_unused, > + struct map *map __maybe_unused) > { > return 0; > } > @@ -53,7 +54,8 @@ unwind__get_entries(unwind_entry_cb_t cb __maybe_unused, > return 0; > } > > -static inline int unwind__prepare_access(struct thread *thread __maybe_unused) > +static inline int unwind__prepare_access(struct thread *thread __maybe_unused, > + struct map *map __maybe_unused) > { > return 0; > } > -- > 1.8.5.2