Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp1004328imm; Tue, 2 Oct 2018 00:40:57 -0700 (PDT) X-Google-Smtp-Source: ACcGV60fV1JUnxNJDcxZx3EdwhTtflnIjZttuGJEI6LU7oA3SkjDX4j6OlMAEEhu0Rd3uNJv5RxS X-Received: by 2002:a63:4d5b:: with SMTP id n27-v6mr13366868pgl.270.1538466057855; Tue, 02 Oct 2018 00:40:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538466057; cv=none; d=google.com; s=arc-20160816; b=kAegu2ioZY6Huj05OeiyIJ/b8FMRCeJwkcNJCxUc4Bhydl4a/1bq1m9O/ZYX+eMabD aW4Ot1JcLpiPzaclbytb92bEOJH+tvZDVq+WPzGKMBudOs/kZ5xm3ShRw3VAoS2TPnm8 hgAfjXQdHNyURuAmrB4/9nevQU/aMzYqc/QnavB17ewXWaK2P7trp/iTYahGbyS4jMyQ +3xfWr3USAH4lUUbL+rghPXpRU1JWTBO75TCMRieN/8fZHgVCedw6Pzs0+gg2rkdyAsh qwzPnQHqlgOd3ly31FnX7ypfkEq7aIZclWwL/wPn/kjaVfGJ1DI/0lPljhH3CmVs933O Bt7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=fSNSN0ifXjv0HqkVLvT/ifNvgE6kJOXSVwYBJ3eY+Zk=; b=CwUepazVXaDmPE6/OOvSQJtbA9JMaTW9jS4IM2UpXvwSv1RGZs7kcs7DG8lUnxvAzm iKqO5L6k297gn7Gz0DKvDjE4lwfpG8aKDjGXyyEOg15SJ8c5GF+GXQDvoSXVv6HDH8AX kZmB9inllcnCORAUlccIy7hN/sEuD9rKbZIGRdm8n8jDQAuKZKe6Thy/Nu7KZh8g1ISS Cvs1g6mGuHVdBJCR9HIA1pk3Lj2N7owIxqpD/ccmfrNBQVIE4l9wdOXRnuE2bTrYYzsx NyXl1EeHAfYaHif/SFN/aE3EcXVLcEqDNNeTG3v35YVmQO5G42IazVxq/kW1839ay3YJ bD4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kdab.com header.s=dkim header.b=okyBIlgt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=kdab.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u70-v6si4577240pgd.502.2018.10.02.00.40.42; Tue, 02 Oct 2018 00:40:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kdab.com header.s=dkim header.b=okyBIlgt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=kdab.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727231AbeJBOWA (ORCPT + 99 others); Tue, 2 Oct 2018 10:22:00 -0400 Received: from mail.kdab.com ([176.9.126.58]:7480 "EHLO mail.kdab.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726822AbeJBOWA (ORCPT ); Tue, 2 Oct 2018 10:22:00 -0400 Authentication-Results: mail.kdab.com (amavisd-new); dkim=pass (1024-bit key) reason="pass (just generated, assumed good)" header.d=kdab.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kdab.com; h= content-transfer-encoding:mime-version:message-id:date:date :subject:subject:from:from; s=dkim; t=1538466004; x=1539330005; bh=fSNSN0ifXjv0HqkVLvT/ifNvgE6kJOXSVwYBJ3eY+Zk=; b=okyBIlgt+1VN jrG+wBNLam4aL9ASD65k0OjjeldB/mSPLBlck4tpdO26s89wUdpJfHJTNgLBeFak i7XqR8b6Ns8JsXAO1QnEni9rNV1NsDLpa4vOxMM7NU8fI/WOLHT8IjF/z0kj8iMq uFZF551UrFjUzvTDAxyhvGjtVkwNpeA= X-Virus-Scanned: amavisd-new at kdab.com From: Milian Wolff To: acme@kernel.org, jolsa@kernel.org, Jin Yao Cc: Linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Milian Wolff Subject: [PATCH] perf record: use unmapped IP for inline callchain cursors Date: Tue, 2 Oct 2018 09:39:49 +0200 Message-Id: <20181002073949.3297-1-milian.wolff@kdab.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Only use the mapped IP to find inline frames, but keep using the unmapped IP for the callchain cursor. This ensures we properly show the unmapped IP when displaying a frame we received via the dso__parse_addr_inlines API for a module which does not contain sufficient debug symbols to show the srcline. Before: $ perf record -e cycles:u --call-graph ls $ perf script ... ls 12853 2735.563911: 43354 cycles:u: 17878 __GI___tunables_init+0xffff01d1d63a0118 (/usr/li= b/ld-2.28.so) 19ee9 _dl_sysdep_start+0xffff01d1d63a02e9 (/usr/lib/ld= -2.28.so) 3087 _dl_start+0xffff01d1d63a0287 (/usr/lib/ld-2.28.s= o) 2007 _start+0xffff01d1d63a0007 (/usr/lib/ld-2.28.so) After: $ perf script ... ls 12853 2735.563911: 43354 cycles:u: 7f1714e46878 __GI___tunables_init+0x118 (/usr/lib/ld-2.28.so) 7f1714e48ee9 _dl_sysdep_start+0x2e9 (/usr/lib/ld-2.28.so) 7f1714e32087 _dl_start+0x287 (/usr/lib/ld-2.28.so) 7f1714e31007 _start+0x7 (/usr/lib/ld-2.28.so) For frames with sufficient debug symbols, the behavior is still sane and works as expected in my tests. This patch series shows that we desperately need an automated test for inline frame resolution. I'll try to come up with something for the various regressions in the future. Signed-off-by: Milian Wolff Cc: Arnaldo Carvalho de Melo Reported-by: Ravi Bangoria # Tested-by: # Reviewed-by: # Suggested-b: Fixes: bfe16b0653 ("perf report: Don't crash on invalid inline debug info= rmation") --- tools/perf/util/machine.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index 73a651f10a0f..111ae858cbcb 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -2286,7 +2286,8 @@ static int append_inlines(struct callchain_cursor *= cursor, if (!symbol_conf.inline_name || !map || !sym) return ret; =20 - addr =3D map__rip_2objdump(map, ip); + addr =3D map__map_ip(map, ip); + addr =3D map__rip_2objdump(map, addr); =20 inline_node =3D inlines__tree_find(&map->dso->inlined_nodes, addr); if (!inline_node) { @@ -2317,6 +2318,9 @@ static int unwind_entry(struct unwind_entry *entry,= void *arg) if (symbol_conf.hide_unresolved && entry->sym =3D=3D NULL) return 0; =20 + if (append_inlines(cursor, entry->map, entry->sym, entry->ip) =3D=3D 0) + return 0; + /* * Convert entry->ip from a virtual address to an offset in * its corresponding binary. @@ -2324,9 +2328,6 @@ static int unwind_entry(struct unwind_entry *entry,= void *arg) if (entry->map) addr =3D map__map_ip(entry->map, entry->ip); =20 - if (append_inlines(cursor, entry->map, entry->sym, addr) =3D=3D 0) - return 0; - srcline =3D callchain_srcline(entry->map, entry->sym, addr); return callchain_cursor_append(cursor, entry->ip, entry->map, entry->sym, --=20 2.19.0