From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751698AbcEJMDf (ORCPT ); Tue, 10 May 2016 08:03:35 -0400 Received: from mga03.intel.com ([134.134.136.65]:61768 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751076AbcEJMDe (ORCPT ); Tue, 10 May 2016 08:03:34 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,604,1455004800"; d="scan'208";a="972460172" Subject: Re: [PATCH v2 5/9] perf tools: Add methods to test dso is 64-bit or 32-bit To: Hekuang , peterz@infradead.org, mingo@redhat.com, acme@kernel.org, alexander.shishkin@linux.intel.com, jolsa@redhat.com, wangnan0@huawei.com, jpoimboe@redhat.com, ak@linux.intel.com, eranian@google.com, namhyung@kernel.org, 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 References: <1462866037-30382-1-git-send-email-hekuang@huawei.com> <1462866037-30382-6-git-send-email-hekuang@huawei.com> <573196E5.9080807@intel.com> <5731AEBB.8060200@huawei.com> <5731B94A.3070402@intel.com> <5731C844.9080406@huawei.com> Cc: linux-kernel@vger.kernel.org From: Adrian Hunter Organization: Intel Finland Oy, Registered Address: PL 281, 00181 Helsinki, Business Identity Code: 0357606 - 4, Domiciled in Helsinki Message-ID: <5731CD04.3000005@intel.com> Date: Tue, 10 May 2016 14:59:00 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 MIME-Version: 1.0 In-Reply-To: <5731C844.9080406@huawei.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/05/16 14:38, Hekuang wrote: > > > 在 2016/5/10 18:34, Adrian Hunter 写道: >> On 10/05/16 12:49, Hekuang wrote: >>> hi >>> >>> 在 2016/5/10 16:08, Adrian Hunter 写道: >>>> On 10/05/16 10:40, He Kuang wrote: >>>>> 32-bit programs can be run on 64-bit machines, so we should choose >>>>> unwind methods according to 'thread->map' instead of the host >>>>> architecture. >>>>> >>>>> This patch adds methods to test whether a dso is 64-bit or 32-bit by >>>>> the class info in elf. >>>> What about using dso->is_64_bit set by dso__load_sym() ? >>> I've noticed this variable, but it's value is not as its name said: >>> >>> util/dso.c: 1067 dso->is_64_bit = (sizeof(void *) == 8); >> That is just initialization i.e. before we know what it is we assume it is >> the same as the host. >> >>> This is only related to the host architecture. >>> >>> A closer one is 'is_64_bit' in 'struct symsrc', but the value is assigned >>> after dso >>> loaded. So I think we should provide individual methods to get that value. >> Are you saying you don't load dsos? Or that is_64_bit is set incorrectly? >> > > Yes, I know it's the inital value, but the correct value is > assigned in function dso__load_sym(), and have a look at the call > stack(gdb): > > #0 dso__load_sym > #1 in dso__load > #2 in map__load > #3 in map__find_symbol > #4 in thread__find_addr_location > #5 in entry > #6 in get_entries > #7 in _Ux86__unwind__get_entries > #8 in thread__resolve_callchain > > I think we should choose the right unwind method before > dso__load_sym(). i.e. line#7, which is called before dso__load_sym(). > > I'm not very familiar with this, what's your opinion? Have you considered calling map__load() instead of dso_is_64_bit()