Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755334AbbKRILi (ORCPT ); Wed, 18 Nov 2015 03:11:38 -0500 Received: from szxga03-in.huawei.com ([119.145.14.66]:30413 "EHLO szxga03-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755301AbbKRILg (ORCPT ); Wed, 18 Nov 2015 03:11:36 -0500 Message-ID: <564C3011.8090002@huawei.com> Date: Wed, 18 Nov 2015 16:00:17 +0800 From: "Wangnan (F)" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Jiri Olsa , Arnaldo Carvalho de Melo , David Ahern , Peter Zijlstra , Ingo Molnar , Milian Wolff CC: , pi3orama , "lizefan 00213767" Subject: Re: [BUG REPORT] perf tools: x86_64: Broken calllchain when sampling taken at 'callq' instruction References: <564C26C4.2040603@huawei.com> In-Reply-To: <564C26C4.2040603@huawei.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.111.66.109] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A090205.564C31C7.004D,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0, ip=0.0.0.0, so=2013-05-26 15:14:31, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: dccfd85670d8b02c78d12b80bd191b0b Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1282 Lines: 52 On 2015/11/18 15:20, Wangnan (F) wrote: > Hi all, > > When analysising Jiri's patchset [1] I found a dwarf unwind problem. > On x86 platform, when sample is at a 'callq' instruction, dwarf based > stack unwind always fail. > > I compile a small C source file with debug information, turn off > frame pointer and disable optimization: > > $ gcc -g -O0 -fomit-frame-pointer ./test_dwarf_unwind.c -o > ./test_dwarf_unwind For whom want to test it: here is the test code I used. #include #include #include static volatile int x = 0; int funcc(void) { struct timeval tv1, tv2; unsigned long us1, us2; gettimeofday(&tv1, NULL); us1 = tv1.tv_sec * 1000000 + tv1.tv_usec; while(1) { x = x + 100; gettimeofday(&tv2, NULL); us2 = tv2.tv_sec * 1000000 + tv2.tv_usec; if (us2 - us1 >= 3000000) break; } return x; } int funcb(void) { return funcc();} int funca(void) { return funcb();} int main() { funca(); return 0;} -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/