From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932372AbcHXIcA (ORCPT ); Wed, 24 Aug 2016 04:32:00 -0400 Received: from mail-he1eur01on0095.outbound.protection.outlook.com ([104.47.0.95]:14702 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753456AbcHXIbz (ORCPT ); Wed, 24 Aug 2016 04:31:55 -0400 X-Greylist: delayed 152711 seconds by postgrey-1.27 at vger.kernel.org; Wed, 24 Aug 2016 04:31:16 EDT Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=matija.glavinic-pecotic.ext@nokia.com; Subject: Re: [PATCH RFC RESEND] Perf: lookup dwarf unwind stack info in debug file pointed by .gnu_debuglink To: Jiri Olsa References: <2d72fb64-9b9c-7aa1-5ac5-ac710ec5a900@nokia.com> <20160822151919.GA614@krava> <20160823112204.GC6486@krava> <69a799bb-1c54-928e-f58b-fdc8bb3fac0c@nokia.com> <83fbb2b5-df77-220f-7157-6675560f7e72@nokia.com> <20160824073010.GA3202@krava> CC: , , Namhyung Kim , Masami Hiramatsu From: Matija Glavinic Pecotic Message-ID: <4bd5fc49-95c2-e4ff-bfb4-a5da696a5c8a@nokia.com> Date: Wed, 24 Aug 2016 10:13:58 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Icedove/45.1.0 MIME-Version: 1.0 In-Reply-To: <20160824073010.GA3202@krava> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-Originating-IP: [88.207.42.27] X-ClientProxiedBy: VI1PR0901CA0021.eurprd09.prod.outlook.com (10.167.194.31) To DB6PR0701MB2165.eurprd07.prod.outlook.com (10.168.58.20) X-MS-Office365-Filtering-Correlation-Id: 37a40ee5-73a6-48b5-41a2-08d3cbf69b68 X-Microsoft-Exchange-Diagnostics: 1;DB6PR0701MB2165;2:7MC+dcqNKjBkT1a3VUNYTABozLtC1HJn1VjkI7KH+DEnlrUhbsZROhjsMDSYP5O2byQH9O54wP6QCsrolc550wTjHqgr3SI0YcylFaT+EYnpJFCngg0c4YBUKdBSyUUyGcV5sPpOXLsCOUa6YZRdhB9n6yvGsBnJeO/h+wglnlcxDbMz2AFEMiUWzVytYVRg;3:DbWOGL/s5sbaM+MTnjCC88FeldRU2LJBR1Q7HGseDeF29zJrGw7JYqxMgqHgZWA31oInO7qfE1o6kfsGk5Dg9DWclHA4TsF1ufhaqPleDAYyMd8wbfxNChdpMxgqFIDQ;25:1i6WKKdV9cbRQTT8D52nfch5X8s08zEvdvRhWeMWYivbuHrfjwlcYtqeC6g3yuBgfcDgUy/Hq2DDnM5LdHEQ1D4oUDYkwFCuhtJ3Cm2Xw0pgBaoIoiXBPrVJD8x/xSEhspTVi5fAythRHxf3tWCsiv8H0RXmbQEBlIs5QeYcsSfSsMxZK8ybOEC+UmKPY5pux8Xm38K9WoaZsqEt9OpymX+pEClUP4MzKpc/uuI+DvaRG/irb8V4iRjJaBjBVr2eSOYGyZBQWmkVOj+PrDBBQ5GaIue5peDdNkpA4KljMK6IBMXrxLqrZT9ibLB9pLoi4mvTS91FYOeZboMPaNBNHc5KiLl/hs8ZSAW7BbTmkMWFxIQ8NOja7ZP4V3QOubdlZjt8w6dW0XzZqef6YIGDAknOXE2nW7o4T5TmHe4fVfc= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0701MB2165; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0701MB2165;31:N/q9W2fj8I/nJRoCuAdnz126Rcf/3kkXZ2zN/35abtDZ8DUD5dc1Kyu0+5ECLr7jiamMUGGWGb0ppmYnEazgXHJzL8XWkWUvcIU18LXhz9wuMJuTL+0A4I3eBenw6whCn8mUeaOjPiEOcLkL+H/eyt3uOtTWWh6juDVZqg9CVpeOlWRBpyvcJVJYULjux7MXW0ObA1wA38ov1Ihp1JACQwJfLjT4nVXulS7JGOTAzZQ=;20:o6NLkOdMKeq8igKj6pf9GjxX809hjF0PLLwKt4JaZR+m0qfmRZ6ckcCkkPqZLvXf6gZzFKId48daNUaL+75LxK87b86GYV35EQMC0ZX2Z4mqk6Zyqzdra4ll1ACTeMD+MO4oZGxB2KRGjnPfDmHi9/5zM2D8eXUqVsM8hTUc64eaVZlPkT4naulklvCi2pPw+/Iudg4W2DjJKeYwHJrgAd47/iB+Fsj5Azz0PPI3feVbHvPf5WUmvAfSZvp9y2u87Np0Jl6l4/sRJ1wnKRETGqK9BuiFb8fNCDWcu7z4FllElYscUOzHd1zYjVz0Q1qk39YXA/UxArm/73IvIoloqMTHzEM7RP7bB7hfX5sxN43pS63/G0kRwfb5GoQRwFpKPanCaMKiYML3zHAiZyODdhcItxBH04Kom6xfXUb/04p9HTICUX4cDvkTI9dKZsgxo7O73FfgJb8ggG4Btx4++nxbUVSXGA3ET7lNr/rsAaWx/nX+DUn82kWg/SEWudnH X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:DB6PR0701MB2165;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0701MB2165; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0701MB2165;4:9KnK3fH9cGshO2dYvLBhwta34+4Uo2s/mxf9y8JkKb6ewYTxXgF0fU75cMRIMRljbqHf/Ok4PPwhRhELNW0Tz4Qj7/6uiF6yNVNm7kVQveC1kq8aMBlkulp4qxUVpX8Sc/slV0chDZYorrrPeMgYJpM6GC2gW825gJ14TVX3jPTuzQfwi2dBOoO/gr+L4GaqUrue+kHbXGO5p0yzvtZQoEWdv//PRsU3t5wrrxJXu+XM9FLb0MPHtm8zpCU+E/ws1/biTC8cKqVTCPsmc4gQ2NVUS4xTlv06dry9ArngGbJGxDfvn6VMBglk3v5XyFcMGdqLXXFSHhqvvB7H0piME9Oo7LrAp6ymds9QJda+NBoIesWS64THhS7icQcDnRWUbDMg+2OdfjNalAfmQSe0kQ== X-Forefront-PRVS: 0044C17179 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(7916002)(199003)(189002)(24454002)(86362001)(586003)(31696002)(36756003)(76176999)(50986999)(47776003)(105586002)(66066001)(6116002)(3846002)(7846002)(101416001)(106356001)(54356999)(23746002)(305945005)(68736007)(4326007)(2950100001)(110136002)(42186005)(31686004)(2906002)(117156001)(230700001)(33646002)(64126003)(93886004)(4001350100001)(83506001)(97736004)(7736002)(8676002)(189998001)(50466002)(92566002)(81156014)(5660300001)(81166006)(77096005)(142923001)(217873001);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0701MB2165;H:[192.168.0.12];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;DB6PR0701MB2165;23:iaxwjgrKQPKwpTkzy2CUyx8W+NBYQfuKv7q?= =?Windows-1252?Q?2dBLgEvVvEvNz7vizhJQ099w32T3CiVX94K0YyhPwIBjE0EZV/pYMVi2?= =?Windows-1252?Q?kD2kb6NVaZn66dgdlQwGJVi3FsguKKYnEDl1W3v07jpaUxkYR5CEYIdk?= =?Windows-1252?Q?NSG08B2KxflbnJS+vToqgOv+eoSkhpyqIxyKyw0aEW64tvlfil8pQZzy?= =?Windows-1252?Q?DfqD7HXA7H1QQU99RS5OJdr9cx1ktv/hZ+2kI1cWZhEPop12A6fxAMlc?= =?Windows-1252?Q?AjnLKbwbtJvlrHqUVzBbJLGyxCKaybEej3ImN+esBf7JCUDbu+PCVLbL?= =?Windows-1252?Q?JHOouRyxBK4WY8KpXVJlvoZ2l74GtlXBdioE2rDomT7sJNw1qlgYPrkZ?= =?Windows-1252?Q?gQw00vFoQDnRIPFoHe/EoPJuS95hNcSyOZ7aE5cRJd2jH7wmPwAZGGEh?= =?Windows-1252?Q?2aJpiTZqZuHXLXIQHyMtkaozwdByw2miVDITJTGMtBXl+V1kKJB0EG6e?= =?Windows-1252?Q?VcAfk32kzpnL9rbB22E7H8X/w9S7l6XUmZZacLPJraO1DPY8vvdsQiEj?= =?Windows-1252?Q?V+x/4h30cahcSKPSikrQ7Sf2MnnrT8nx0dsApbT3YfZCTAI5PoafB4aS?= =?Windows-1252?Q?C231XaewIetCXpCRp7Wy5kfL1bQRnjbwU9cnNk/scQTy9dM92E6RBOxF?= =?Windows-1252?Q?0GYbjksUxPfesXXnQyiXB7PkFOoqo6xpgvoqIrRJoQd7w01pmdt65cxN?= =?Windows-1252?Q?qE/dzYYSAFPi9q7841Yz9jknQK7AUpVeLYZBrDGR2Ef6x8LUpuF0c41W?= =?Windows-1252?Q?8cTmEXHHyw9/i/R180QOuiiUozAnRQMn4ITkHSF+TlJfKP7gY7xARBu2?= =?Windows-1252?Q?VLNke7JtLzNtlAGv4QirXJwteUSUB7l13waFwdIOcCD1tDJNTvi+A8Wz?= =?Windows-1252?Q?O8Hot4eVaDSqWYob30gZC/FuwTPPfb+SgH4pFWilN8O2vDHdOKDpFLCf?= =?Windows-1252?Q?qBTu/npSlYthSS6FFSx5e5KAZIHQCrIs0yrWIXb9pjLrQqaWaavn/fLH?= =?Windows-1252?Q?HvHWNmj9qCZ1ul9kYJ3gWM3sYCh3nNW4zv7BTfzDZQgQ1vl4dsY1evxM?= =?Windows-1252?Q?TkfZxTaxlVYSH3JBpjtW31uZVJ43x4fBH8LPQgJ6OHA1909C/wiyp9/z?= =?Windows-1252?Q?VffUspQC+otfp3OGWUmAIWITbpV1Hjgp7fqUgsbhkrt865XNNrV9PiYA?= =?Windows-1252?Q?qsPgCPYwXo/dQWADQVMaI6q7b+W5xyPP691sJrs70iPZnoPSyO8RSRxT?= =?Windows-1252?Q?2eblnXj2gU/At7BmD7oN8+LQIRw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0701MB2165;6:rpsH8K9NXgSGThD0H3+fujFxl/qShk48ecWL0ZokfgEaFA5w0cp01W+O5JTNp7QHWfQfyEG+Dc4KWnGGCNE+NDxOC7kKTMn0Cec+8BMszMpDiPNbDg6+2QR6wlmL64rj/Kwesv+WdqVRPTzUMfx6t9xf6zHpsWnkfMpqyfh7scpLHqhluxleeumfsrVj4sIGp64jjvz+3YrMr6qyTOecDgbrUZ0yegY3BsmFY93vIRXBiPrEsA+fcVkiYTkquY9ij2bj1FZ1xP9UUdt3zZuQi/jjQJO0gSFoRUWFPBvZJkEClYECej5gyxb3ZUZGz516xuzbPf5HxgdIX3tAYKEvaA==;5:LJAEdtwzpVeEgxM3BvggOQrXeJOlwvNiJoeLqObhx6mPH6SsgiASem3UykmaJOVyCiO9tWSPr5d0JTHe6yFfq78dlX79BF80m+bd6ra6ZvAqklQgOSgyk9LIuVOqLSr48DPYQMfBssdtKQ7ZJEHqIg==;24:/rVN0WeJtG6d0/EC4CPRICWG8zVKyxZKhtesIDdIjr22wJq3ho3FXUwjjIivWiEoXFO+EYGbUPbzMPfx7t8+opjJMcD8Czc/8zk9RCz3eco=;7:rkCjSPBfiNUWOnnuUMXZUUSaHnoEejPgD3KkYbCGNoRakyfIwpC4QUv+v3OCUd6oVascR0Cih7V8jyPXyc8qrFK+GoXSurqSeOosH+idOZVLsQu6ps81N3A3+kRWhO61Gwk01+Xht6GzOgYGjmdpfg0o0TmMN2nYlBrzRKi92TPBV13YqeqyIlwbGvboMSFOZxFy2u4GbqD7Q0rj+ayMHBminfhNkF2R416pbzv55O1D7fGnLoyWaDs56RX/0gDj SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nokia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Aug 2016 08:14:01.5062 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0701MB2165 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 24/08/16 09:30, Jiri Olsa wrote: > On Tue, Aug 23, 2016 at 06:18:10PM +0200, Matija Glavinic Pecotic wrote: >> - ret = filename__read_debuglink(filename, debuglink, >> - size - (debuglink - filename)); >> + ret = filename__read_debuglink(filename, symfile, PATH_MAX); >> + if (ret) >> + break; >> + >> + /* Check predefined locations where debug file might reside: >> + * - if debuglink is absolute path, check only that one >> + * If debuglink provides name w/o path, look for debug file: >> + * - in the same directory as dso >> + * - in the .debug subdirectory of dso directory >> + * - in the /usr/lib/debug/[dso directory] >> + * */ >> + ret = 0; >> + if (symfile[0] == '/') { >> + if (!is_regular_file(symfile)) >> + ret = -1; >> + else >> + strncpy(filename, symfile, size); >> + break; >> } >> + >> + snprintf(filename, size, "%s/%s", dso_dir, symfile); >> + if(is_regular_file(filename)) >> + break; >> + >> + snprintf(filename, size, "%s/.debug/%s", dso_dir, symfile); >> + if(is_regular_file(filename)) >> + break; >> + >> + snprintf(filename, size, "/usr/lib/debug/%s/%s", >> + dso_dir, symfile); >> + if(is_regular_file(filename)) >> + break; > > it might be more clear to follow the same way we do for vmlinux search, > like array of possible paths and generic code to check.. search for > vmlinux_path in symbol.c It indeed looks better: diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c index 774f6ec..3ea205cc 100644 --- a/tools/perf/util/dso.c +++ b/tools/perf/util/dso.c @@ -35,6 +35,13 @@ char dso__symtab_origin(const struct dso *dso) return origin[dso->symtab_type]; } +static const char * const debuglink_paths[] = { + "%.0s%s", + "%s/%s", + "%s/.debug/%s", + "/usr/lib/debug%s/%s" +}; + int dso__read_binary_type_filename(const struct dso *dso, enum dso_binary_type type, char *root_dir, char *filename, size_t size) @@ -44,24 +51,44 @@ int dso__read_binary_type_filename(const struct dso *dso, size_t len; switch (type) { - case DSO_BINARY_TYPE__DEBUGLINK: { - char *debuglink; + case DSO_BINARY_TYPE__DEBUGLINK: + { + const char *last_slash; + char dso_dir[PATH_MAX]; + char symfile[PATH_MAX]; + unsigned int i; len = __symbol__join_symfs(filename, size, dso->long_name); - debuglink = filename + len; - while (debuglink != filename && *debuglink != '/') - debuglink--; - if (*debuglink == '/') - debuglink++; + last_slash = filename + len; + while (last_slash != filename && *last_slash != '/') + last_slash--; - ret = -1; - if (!is_regular_file(filename)) + strncpy(dso_dir, filename, last_slash - filename); + dso_dir[last_slash-filename] = '\0'; + + if (!is_regular_file(filename)) { + ret = -1; + break; + } + + ret = filename__read_debuglink(filename, symfile, PATH_MAX); + if (ret) break; - ret = filename__read_debuglink(filename, debuglink, - size - (debuglink - filename)); + /* Check predefined locations where debug file might reside */ + ret = -1; + for (i = 0; i < ARRAY_SIZE(debuglink_paths); i++) { + snprintf(filename, size, + debuglink_paths[i], dso_dir, symfile); + if(is_regular_file(filename)) { + ret = 0; + break; + } } + break; + } Thanks, Matija