From patchwork Mon Mar 27 16:00:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 75543 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:6358:3404:b0:112:7285:5352 with SMTP id h4csp1532400rwd; Mon, 27 Mar 2023 09:15:15 -0700 (PDT) X-Google-Smtp-Source: AKy350aJZee4/Fj1m5Y1jpt6dy//g7gxVKLxik9LMLotUXQ2cLnyoLbsuME/MbWy8KVZv/yar/3E X-Received: by 2002:aa7:d54c:0:b0:501:cde7:7e2c with SMTP id u12-20020aa7d54c000000b00501cde77e2cmr12056712edr.6.1679933715500; Mon, 27 Mar 2023 09:15:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679933715; cv=none; d=google.com; s=arc-20160816; b=pyT5xClCbK0zcRXf3vvIGQhLqEmU7MkC5KNfl6RyNxDGbC8tyBEE72bQHc55v1cdbY yME5f2rUywQDMWVLeDdSl9ur1fkGP1EDvKHgcA5gX/YJRfmxN32AID+HDYSe2Aqb1nqB H8gK2wyAD47jqy6UJ1faYW2mNtNqO3f/9MH7nKRyMN8nSPC1AK8nojHylFZROZrhLv9o NgXiSoOYdOSBS/OsSQkcadoI22xMi8srEVEQNdh1wapk5eFkwweAKJcJl8oDjvBZRWkz QrL1JLsekLDmrvY2XUc2OqOCm8uxvCMdkvVCzPnT4fgvXk9U/Vv7/5ZN4oohTp8REDp8 aohg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=xPhKSnbvwRrdBMk+4hHkhxBtwMYXvQRnmwdLhxvbetw=; b=LWE32Z0WfLei601BUMAISENofwEtvRrYYUI3XMuBG/knQz3D4xBWHSHla/1DnvOy2s Uit4o5Q4CCPNnvlbntKNqo0aolJRjCJfPuhGs5P78z8MeEmGRKVVI+WusT8DLliz+Kp+ fg/BvSVL4pFP9kRsGiWe5vQZfDvFcw9Gtf8lf50e58UWjc+ZAKQ2srnOFCmNMnH/BZ80 IdsyM5almNbpj4CEjHnMsjSs96HpEZ8TLPi+eFnsPNSv4GEiuRmeDmFXgm+xJKCGH0QH sstjxzKTVJHUM9qILOIMxN+RxX7/sUXdsbeJ64aElixqZkxrbVm1JRMdmuoshlpqyamW JfYw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Fe77Ph3b; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k6-20020aa7c386000000b004af64997fb7si27209820edq.18.2023.03.27.09.14.51; Mon, 27 Mar 2023 09:15:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Fe77Ph3b; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233126AbjC0QBo (ORCPT + 99 others); Mon, 27 Mar 2023 12:01:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60296 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232558AbjC0QBR (ORCPT ); Mon, 27 Mar 2023 12:01:17 -0400 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 318B061AA for ; Mon, 27 Mar 2023 09:00:59 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sin.source.kernel.org (Postfix) with ESMTPS id 6A302CE1895 for ; Mon, 27 Mar 2023 16:00:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8987AC433EF; Mon, 27 Mar 2023 16:00:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1679932855; bh=bYtZM+fVMt9qB3FBfutuXiVUqLBuKD6bVnTa58kw0c4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Fe77Ph3byGHORIBfErdD+mVoeIP2sM1YLoQpXcTU8uUmT0Mi0ltNPXcjNEqat5nfq vAlmx04lOmS0ABs1gV2fZ+GuQpzu+xcCiqXmXWbbhyvZgp7+p5bTf8PL5lnwqj+aVj c5/CNYra7ebHh5TyKogdYYCbayNuBbCBQjiK8j6VWTXq271ipXmDYY4MpR1WhgTleb dqbLjTvjW1YT5lvyUXviy2Ud2srDdPl5py7Ty3LmLUI/V/0YOm/a51ywXVhG1LmV6B JesC/cgl4tz2kHv3l46Wwe9v1BTKOak5ZpCG/hnliWuvoiC/PS0JPmOgYw+3oUXnc7 bT6z4qOAnJpmw== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra Subject: [PATCH 1/5] objtool: Add '--verbose' option for disassembling affected functions Date: Mon, 27 Mar 2023 09:00:44 -0700 Message-Id: <217a005fe22f9d33f99fed499d6508af9f5cabd0.1679932620.git.jpoimboe@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: References: MIME-Version: 1.0 Content-type: text/plain X-Spam-Status: No, score=-5.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761538175822574759?= X-GMAIL-MSGID: =?utf-8?q?1761538175822574759?= When a warning is associated with a function, add an option to disassemble that function. This makes it easier for reporters to submit the information needed to diagnose objtool warnings. Signed-off-by: Josh Poimboeuf --- tools/objtool/Documentation/objtool.txt | 5 ++++ tools/objtool/builtin-check.c | 1 + tools/objtool/include/objtool/builtin.h | 1 + tools/objtool/include/objtool/warn.h | 38 +++++++++++++++++++++++++ 4 files changed, 45 insertions(+) diff --git a/tools/objtool/Documentation/objtool.txt b/tools/objtool/Documentation/objtool.txt index 8e53fc6735ef..7c1a46af322f 100644 --- a/tools/objtool/Documentation/objtool.txt +++ b/tools/objtool/Documentation/objtool.txt @@ -244,6 +244,11 @@ To achieve the validation, objtool enforces the following rules: Objtool warnings ---------------- +NOTE: When requesting help with an objtool warning, please re-run the +kernel build with `OBJTOOL_ARGS="--verbose" make ` and send +the full warning output (including any function disassembly below the +warning) to the objtool maintainers. + For asm files, if you're getting an error which doesn't make sense, first make sure that the affected code follows the above rules. diff --git a/tools/objtool/builtin-check.c b/tools/objtool/builtin-check.c index 7c175198d09f..b8de42f6778e 100644 --- a/tools/objtool/builtin-check.c +++ b/tools/objtool/builtin-check.c @@ -93,6 +93,7 @@ static const struct option check_options[] = { OPT_BOOLEAN(0, "no-unreachable", &opts.no_unreachable, "skip 'unreachable instruction' warnings"), OPT_BOOLEAN(0, "sec-address", &opts.sec_address, "print section addresses in warnings"), OPT_BOOLEAN(0, "stats", &opts.stats, "print statistics"), + OPT_BOOLEAN('v', "verbose", &opts.verbose, "verbose warnings"), OPT_END(), }; diff --git a/tools/objtool/include/objtool/builtin.h b/tools/objtool/include/objtool/builtin.h index 2a108e648b7a..fcca6662c8b4 100644 --- a/tools/objtool/include/objtool/builtin.h +++ b/tools/objtool/include/objtool/builtin.h @@ -37,6 +37,7 @@ struct opts { bool no_unreachable; bool sec_address; bool stats; + bool verbose; }; extern struct opts opts; diff --git a/tools/objtool/include/objtool/warn.h b/tools/objtool/include/objtool/warn.h index a3e79ae75f2e..b85aa440ee1f 100644 --- a/tools/objtool/include/objtool/warn.h +++ b/tools/objtool/include/objtool/warn.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -41,6 +42,41 @@ static inline char *offstr(struct section *sec, unsigned long offset) return str; } +static inline void objdump_func(struct section *sec, unsigned long offset) +{ + struct symbol *sym = find_func_containing(sec, offset); + const char *script_relative = "scripts/objdump-func"; + bool is_text = (sec->sh.sh_flags & SHF_EXECINSTR); + char *cmd, *srctree, *script; + + if (is_text) + sym = find_func_containing(sec, offset); + if (!sym) + sym = find_symbol_containing(sec, offset); + if (!sym) + return; + + srctree = getenv("abs_srctree"); + if (!srctree) + return; + + script = malloc(strlen(srctree) + strlen(script_relative) + 2); + if (!script) + return; + + sprintf(script, "%s/%s", srctree, script_relative); + + if (access(script, X_OK)) + return; + + cmd = malloc(strlen(script) + strlen(objname) + strlen(sym->name) + 10); + if (!cmd) + return; + + sprintf(cmd, "%s %s %s 1>&2", script, objname, sym->name); + system(cmd); +} + #define WARN(format, ...) \ fprintf(stderr, \ "%s: warning: objtool: " format "\n", \ @@ -51,6 +87,8 @@ static inline char *offstr(struct section *sec, unsigned long offset) char *_str = offstr(sec, offset); \ WARN("%s: " format, _str, ##__VA_ARGS__); \ free(_str); \ + if (opts.verbose) \ + objdump_func(sec, offset); \ }) #define BT_FUNC(format, insn, ...) \ From patchwork Mon Mar 27 16:00:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 75539 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:6358:3404:b0:112:7285:5352 with SMTP id h4csp1523639rwd; Mon, 27 Mar 2023 09:04:00 -0700 (PDT) X-Google-Smtp-Source: AKy350Y4NEYdFv9VWkJthhFDQUCgFXfjD79lNu3JipI2j2ZyitXRAtcx2hstD/Bc8oKdExybZ7Oh X-Received: by 2002:a17:90b:4f47:b0:23d:2f73:d3c8 with SMTP id pj7-20020a17090b4f4700b0023d2f73d3c8mr14067271pjb.42.1679933026822; Mon, 27 Mar 2023 09:03:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679933026; cv=none; d=google.com; s=arc-20160816; b=JY2IsE+20QoqO4XsNtbC/94VlOuVaMbPyAKemWUo5RVtg5se7RmwXLKFkMK+J2/Jnl CTGxhK7XucfvPtBZ3kRw4lTauPMjva05PXLNw+sbV8Ik5Z0ESmv95Bq1w2BGuTr4CCfI acDPrYybZovqLycp3U3Dkquwirp5fqoAxih0Rtc8lUu/ByvXUTD26C1aJ5JyCsLelL/W gxmuEAgRAXo5Ip26sgPXMfdzEvJ2bEGOShlkqRX2xbsGIUyGFPZCyIAO1r/IiQyqKVvf lJl+QlXNbydEijl1MCqDIfBTTdqwmOcolE/+0rGNdfudlu6g9NAfGWD7fSEoFKVRQp8H 1Wvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=g4ramF4r0ZzIrTYGrJvMnxDm18mZ1kcXsnK090Lw8SE=; b=E4+GOiTfrjQwXsIdMeLLSErptjFD6juPu+ndG4G/gRVEi6HXhY8y2F6/gBeCTRPSnK eD+cu2WQk+6c/9ZVJLL4UyzrCVxaoiAbuezextqANSIkK7gq37EUokAxH5M03cfUFS4n Gbl0Lvp7gUo9QgMLWvjeWc/wV7E92XdKCol9SQV8ulvsqYAB15hF0zG4wxXy2d+3iRlW WtU4ERKfiuPVfJz1iJ4HFWBv+/ga0M1F0wYD/6byg3OkD5CNasB23ZeS92X5uVN7DbhH jfuVYDldfWbd5cFeL3uwRz5jxii+eepoLYv5YGr6hXrFQW5TNoA7yzQhG3i/FJpg5fa3 7TVQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="C2SNBv4/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x2-20020a17090a6c0200b0022bb7ca5bc0si10601222pjj.151.2023.03.27.09.03.24; Mon, 27 Mar 2023 09:03:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="C2SNBv4/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233040AbjC0QBh (ORCPT + 99 others); Mon, 27 Mar 2023 12:01:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60182 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232888AbjC0QBO (ORCPT ); Mon, 27 Mar 2023 12:01:14 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 223306181 for ; Mon, 27 Mar 2023 09:00:57 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 9FDEC61360 for ; Mon, 27 Mar 2023 16:00:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DE4DBC433A0; Mon, 27 Mar 2023 16:00:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1679932856; bh=cs2v2L19PFI4Qr/i72VjLOqDUF7s1Wn6MGxQhSSimu0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=C2SNBv4/oV5HVK55UwiwjP/7gI449xEUPzntxXzYyIOMgx8cEOEqsJN5BCl3XKnD9 HFKXK7eddyNJXaCniPst8agGIweJj1vz+44vj590+kKwLbAorTQmAIOAzKS6nKVwV9 Mx9njW+yjbCwPYHztyIevU1qcIEW8V3CHsrHcZKTk0q152nBKdrDgIvMWIpMesWIdM z1hySE8w3imxYYw8tGMSGMI08Ub+VQtAEqLPt3OGTVoSPXaUMzx2YfNiAlbR+tjhN4 9213HzYPRShcAzedB9KtYb6rAbLRvM6CIxXlO2Pzg9vzzGZY1IVSmSVS1nzy5GRWtK 3vq8/B+fF+0BQ== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra Subject: [PATCH 2/5] objtool: Combine '--backtrace' with '--verbose' Date: Mon, 27 Mar 2023 09:00:45 -0700 Message-Id: X-Mailer: git-send-email 2.39.2 In-Reply-To: References: MIME-Version: 1.0 Content-type: text/plain X-Spam-Status: No, score=-5.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761537453479334481?= X-GMAIL-MSGID: =?utf-8?q?1761537453479334481?= Get rid of the '--backtrace' option, instead including that functionality in '--verbose'. This makes it easy to gather all the information needed for diagnosing objtool warnings. Signed-off-by: Josh Poimboeuf --- tools/objtool/Documentation/objtool.txt | 4 ++-- tools/objtool/builtin-check.c | 1 - tools/objtool/check.c | 22 ++++++++-------------- tools/objtool/include/objtool/builtin.h | 1 - tools/objtool/include/objtool/warn.h | 14 ++++++++------ 5 files changed, 18 insertions(+), 24 deletions(-) diff --git a/tools/objtool/Documentation/objtool.txt b/tools/objtool/Documentation/objtool.txt index 7c1a46af322f..ec6f82fb414c 100644 --- a/tools/objtool/Documentation/objtool.txt +++ b/tools/objtool/Documentation/objtool.txt @@ -246,8 +246,8 @@ Objtool warnings NOTE: When requesting help with an objtool warning, please re-run the kernel build with `OBJTOOL_ARGS="--verbose" make ` and send -the full warning output (including any function disassembly below the -warning) to the objtool maintainers. +the full warning output (including any function disassembly or objtool +backtrace below the warning) to the objtool maintainers. For asm files, if you're getting an error which doesn't make sense, first make sure that the affected code follows the above rules. diff --git a/tools/objtool/builtin-check.c b/tools/objtool/builtin-check.c index b8de42f6778e..937ba5d78e08 100644 --- a/tools/objtool/builtin-check.c +++ b/tools/objtool/builtin-check.c @@ -84,7 +84,6 @@ static const struct option check_options[] = { OPT_CALLBACK_OPTARG(0, "dump", NULL, NULL, "orc", "dump metadata", parse_dump), OPT_GROUP("Options:"), - OPT_BOOLEAN(0, "backtrace", &opts.backtrace, "unwind on error"), OPT_BOOLEAN(0, "backup", &opts.backup, "create .orig files before modification"), OPT_BOOLEAN(0, "dry-run", &opts.dryrun, "don't write modifications"), OPT_BOOLEAN(0, "link", &opts.link, "object is a linked object"), diff --git a/tools/objtool/check.c b/tools/objtool/check.c index cae6ac6ff246..a652b9e5c805 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -3708,8 +3708,7 @@ static int validate_branch(struct objtool_file *file, struct symbol *func, ret = validate_branch(file, func, alt->insn, state); if (ret) { - if (opts.backtrace) - BT_FUNC("(alt)", insn); + BT_FUNC("(alt)", insn); return ret; } } @@ -3755,8 +3754,7 @@ static int validate_branch(struct objtool_file *file, struct symbol *func, ret = validate_branch(file, func, insn->jump_dest, state); if (ret) { - if (opts.backtrace) - BT_FUNC("(branch)", insn); + BT_FUNC("(branch)", insn); return ret; } } @@ -3855,7 +3853,7 @@ static int validate_unwind_hint(struct objtool_file *file, { if (insn->hint && !insn->visited && !insn->ignore) { int ret = validate_branch(file, insn_func(insn), insn, *state); - if (ret && opts.backtrace) + if (ret) BT_FUNC("<=== (hint)", insn); return ret; } @@ -3914,8 +3912,7 @@ static int validate_unret(struct objtool_file *file, struct instruction *insn) ret = validate_unret(file, alt->insn); if (ret) { - if (opts.backtrace) - BT_FUNC("(alt)", insn); + BT_FUNC("(alt)", insn); return ret; } } @@ -3942,10 +3939,8 @@ static int validate_unret(struct objtool_file *file, struct instruction *insn) } ret = validate_unret(file, insn->jump_dest); if (ret) { - if (opts.backtrace) { - BT_FUNC("(branch%s)", insn, - insn->type == INSN_JUMP_CONDITIONAL ? "-cond" : ""); - } + BT_FUNC("(branch%s)", insn, + insn->type == INSN_JUMP_CONDITIONAL ? "-cond" : ""); return ret; } @@ -3967,8 +3962,7 @@ static int validate_unret(struct objtool_file *file, struct instruction *insn) ret = validate_unret(file, dest); if (ret) { - if (opts.backtrace) - BT_FUNC("(call)", insn); + BT_FUNC("(call)", insn); return ret; } /* @@ -4254,7 +4248,7 @@ static int validate_symbol(struct objtool_file *file, struct section *sec, state->uaccess = sym->uaccess_safe; ret = validate_branch(file, insn_func(insn), insn, *state); - if (ret && opts.backtrace) + if (ret) BT_FUNC("<=== (sym)", insn); return ret; } diff --git a/tools/objtool/include/objtool/builtin.h b/tools/objtool/include/objtool/builtin.h index fcca6662c8b4..38aef760465e 100644 --- a/tools/objtool/include/objtool/builtin.h +++ b/tools/objtool/include/objtool/builtin.h @@ -28,7 +28,6 @@ struct opts { bool cfi; /* options: */ - bool backtrace; bool backup; bool dryrun; bool link; diff --git a/tools/objtool/include/objtool/warn.h b/tools/objtool/include/objtool/warn.h index b85aa440ee1f..a9ec1ed6a2e3 100644 --- a/tools/objtool/include/objtool/warn.h +++ b/tools/objtool/include/objtool/warn.h @@ -91,12 +91,14 @@ static inline void objdump_func(struct section *sec, unsigned long offset) objdump_func(sec, offset); \ }) -#define BT_FUNC(format, insn, ...) \ -({ \ - struct instruction *_insn = (insn); \ - char *_str = offstr(_insn->sec, _insn->offset); \ - WARN(" %s: " format, _str, ##__VA_ARGS__); \ - free(_str); \ +#define BT_FUNC(format, insn, ...) \ +({ \ + if (opts.verbose) { \ + struct instruction *_insn = (insn); \ + char *_str = offstr(_insn->sec, _insn->offset); \ + WARN(" %s: " format, _str, ##__VA_ARGS__); \ + free(_str); \ + } \ }) #define WARN_ELF(format, ...) \ From patchwork Mon Mar 27 16:00:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 75544 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:6358:3404:b0:112:7285:5352 with SMTP id h4csp1532415rwd; Mon, 27 Mar 2023 09:15:16 -0700 (PDT) X-Google-Smtp-Source: AKy350YfD+Oq1fbg22QrQq1LEzr/KCl5Qmqk/gS0mlcsyX4iF9NNYWbGBBAYrhbs4Nzp7veuDLUf X-Received: by 2002:a17:907:1c95:b0:93d:e6c8:ed5e with SMTP id nb21-20020a1709071c9500b0093de6c8ed5emr14950943ejc.20.1679933716398; Mon, 27 Mar 2023 09:15:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679933716; cv=none; d=google.com; s=arc-20160816; b=AaOtSvFs7cGGMOgvPLnds0p7SPdOBtINaL9vAHK5Ql2eN6wfqm6IcHcwMxtnY2Zrou 2WhsXeRcgh6dwbw5r2wYQMQY2gI/qDHfXhID5hMY/ZLoMKZlI5yHFy/XFEUV440r2amM oPlIia36upMazH4KrmN8QwSigpHiwn81ESu4TJNxKFcE/uthIfpvAdqp7EDnVQI2CWmb zhd2kfXTtb0h6WRYrIUc/BLJUvP4QdVB1MlpyDzqJl8cZMDQM0k5tMZRzt+vbwM9jrHt Uoa+RE1pd9hu4td0M5ed4c0enjU1U9/Wf0M+pKKYPps65bJNQqnVajyPNfntbXADZUDC 6JIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=FO27veqfKklp7/B8Iqp7KNeb07+qdG7JO7K1jLrX2fs=; b=I+Ks6AdUQHBJHhHX7fSBc8y608/HXRtS9oAwCmgPaGalFv84qRVXdswUMSset6HhD5 bMCg5Vx47Vq0PZ0flxT8dJmtfoLypxPsNWFNV/FgeqRrg8ugzNaXYk4GHnbXWJs+Z98I 4LntNPqN8Dk3SN+18rcPOozQUO2043skV2ISgxN5L5MjUUclqVSMHKcIy1xx7nPT+bWZ 461QJoXGj++1RSYzJ6Bb3VW3lTThBrhxs42NW1jER8/RaNeIQ/ZKMoLexOTuNNEx2WRZ IB+pYWbvQXsqQBETr65a/nhCWMbJxN0/vHiDLnLFn3tjdkC+UQZS9WEwNes1g/Fahblj ufJg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=ce8fKwBD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id rb9-20020a170907690900b009333a755b3bsi21368479ejc.460.2023.03.27.09.14.51; Mon, 27 Mar 2023 09:15:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=ce8fKwBD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233001AbjC0QBd (ORCPT + 99 others); Mon, 27 Mar 2023 12:01:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60176 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232885AbjC0QBN (ORCPT ); Mon, 27 Mar 2023 12:01:13 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6413A65A1 for ; Mon, 27 Mar 2023 09:00:57 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id F34606136E for ; Mon, 27 Mar 2023 16:00:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3AA57C4339B; Mon, 27 Mar 2023 16:00:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1679932856; bh=q9Vpi9kjIy4hLyGLwLZZ/FrbCreS4bEtiQO84AJpizA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ce8fKwBD6Dw2NN7jzRcnIZfQhhi1c3/If+5JYNRxH8r9ImWozIW/nFAt3O5YlUHCM a/lkGW/n8x4sQc9a1cKMi78zWRO8e8aa8xolV3pvq+A0vsqTHaxoIPpPYuAGFNRiUg 2Ncezskn9wnNWwDYTdX0D16z4PQ9REaLLcZyTm8Yb3d8z0+BspRNbBctgTCpKzaF5A Fb89O1bUAoxOvuLfQ4oyeY0R5+wALY4GC4Axz/L9uX7JDGfM/LPRXJqNTTQtA/CYAt UCxdhbKwY6t872sHXpD0DfyVBInkwKIqUUlODfvrQSElN6Py31W+Zrc+TanMf6N4ZV hwJLMXRYIg+fA== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra Subject: [PATCH 3/5] objtool: Remove superfluous dead_end_function() check Date: Mon, 27 Mar 2023 09:00:46 -0700 Message-Id: <5e314b6d68090f3aa32e5e02551e6a8db62d6728.1679932620.git.jpoimboe@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: References: MIME-Version: 1.0 Content-type: text/plain X-Spam-Status: No, score=-2.5 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761538176411387332?= X-GMAIL-MSGID: =?utf-8?q?1761538176411387332?= annotate_call_site() already sets 'insn->dead_end' for calls to dead end functions. Signed-off-by: Josh Poimboeuf --- tools/objtool/check.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/objtool/check.c b/tools/objtool/check.c index a652b9e5c805..73dd091c0075 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -4140,8 +4140,7 @@ static bool ignore_unreachable_insn(struct objtool_file *file, struct instructio * It may also insert a UD2 after calling a __noreturn function. */ prev_insn = prev_insn_same_sec(file, insn); - if ((prev_insn->dead_end || - dead_end_function(file, insn_call_dest(prev_insn))) && + if (prev_insn->dead_end && (insn->type == INSN_BUG || (insn->type == INSN_JUMP_UNCONDITIONAL && insn->jump_dest && insn->jump_dest->type == INSN_BUG))) From patchwork Mon Mar 27 16:00:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 75541 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:6358:3404:b0:112:7285:5352 with SMTP id h4csp1525080rwd; Mon, 27 Mar 2023 09:05:37 -0700 (PDT) X-Google-Smtp-Source: AK7set9eoeH0KOHsIyxXnsNhHUEEEo/4QRbhz4nTRk3PBI0mWsL5flY5mL2Fc2zF33ynssveCVoO X-Received: by 2002:a05:6a20:7da6:b0:da:d4eb:9e07 with SMTP id v38-20020a056a207da600b000dad4eb9e07mr11781791pzj.30.1679933005381; Mon, 27 Mar 2023 09:03:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679933005; cv=none; d=google.com; s=arc-20160816; b=SsXTneayCU5e+f6reJ0KGgdPRchAHjC6Pp4plghXI620Hlem/L7ReCBJD4lmFYmqyu WUXv8taFgBNyvJjh5igKfrTUTfAe6DCaeFR6gHwXRU6ttJO23eao0TD+py5WW+tH4AAI MQZpW06mO3Q8hASOiSpYZEVqwl8aFXaebP98Sq9jXjTtzQwhIEEojUBZD3lTRMHksree 6+gaOY5iit1nosRZaNMII81BoLY2h3JzX9bDkxTySfzj58nbMZWSVec0wTDB4XIoJBeR TDXdf06qXlaIfmy6b8nhpAJ9q0YTkm+Zbqu+avk946fkFsDZ3UGIOtT/wlkOsS9Eh7a4 xw6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=MlPzgOjIgaQbuDlp+ewku2BEejtll/oMFOYC56z/60s=; b=vcu3kl4raXGlzX+1E/rDBbD9g9sPJq/Qg8Zd6D9CPoZyHVRPrSzD4oHpL6Yo2dmVvm 2ukwn569D8i9XuhIqwU//BCqXs9FActZO1m6mYjNklvhUqJbZus7Pw7L9xcY2ILI0u0J sy8RkoCCv7A69mFmNrxUExTpWW5a+/OGFqXnjGzZIyAkkiAThCuYoPnW0O1uB9Rq2Ox1 bW2GO3oKHoN/87IlXXAjYw7DJcWPj1aaBJExahf51kQPaLMl308GLCD0h+KXagbq2HnT fnCA2G2rENWp90hwGtyONmiYJcY61dOMruvEyhCli6VS3fwaNeqj3YXuQTxcTFwHRDEQ umhw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="W9sFA8/7"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id u190-20020a6385c7000000b0050c1054814esi26178587pgd.558.2023.03.27.09.02.59; Mon, 27 Mar 2023 09:03:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="W9sFA8/7"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229705AbjC0QBa (ORCPT + 99 others); Mon, 27 Mar 2023 12:01:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58700 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232781AbjC0QBN (ORCPT ); Mon, 27 Mar 2023 12:01:13 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 60707659E for ; Mon, 27 Mar 2023 09:00:57 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id E42F46136A for ; Mon, 27 Mar 2023 16:00:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8CE07C433A7; Mon, 27 Mar 2023 16:00:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1679932856; bh=u69Tg1vdhRZztJGiueD2tMeEsNcJF/AVA/Gcuwho7Uw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=W9sFA8/7euAUx/U00p8kXj+DzpvXxXElLAYtrLNsyf+VP/iQWZsdLAt8Qwu0XaJNH TxHgm5nbvc8dBKA2gh2kcYT7mlqCHwLCKedOZe9VuPZMEr6jqHTKtaNSQtyUTKZMFW +UAHxmvcdxn+WoTt5gbwCHWCRQvZCLBcfnloCe26Km1AgLIGuJLwnmAlm4y9Uo6vH2 WW1C8nAHkmp7NmFuDpTDyk/Q0PLWnU3d3LaTHqDRh3VHM7AMYj0bjf7LR2Zn8JUP/1 n563m3/LNTN0axjJBXYCHiGCF5EM44y9o6oIl1UB6bLeuJV1DQWXm0wdnrvx8A9snu CJg6hplRTKZfg== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra Subject: [PATCH 4/5] objtool: Add per-function rate limiting for unreachable warnings Date: Mon, 27 Mar 2023 09:00:47 -0700 Message-Id: X-Mailer: git-send-email 2.39.2 In-Reply-To: References: MIME-Version: 1.0 Content-type: text/plain X-Spam-Status: No, score=-5.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761537431110830522?= X-GMAIL-MSGID: =?utf-8?q?1761537431110830522?= Unreachable instruction warnings are rate limited to once per object file. That no longer makes sense for vmlinux validation, which might have other unreachable instructions lurking in other places. Change it to once per function. Signed-off-by: Josh Poimboeuf --- tools/objtool/check.c | 4 ++++ tools/objtool/include/objtool/elf.h | 1 + 2 files changed, 5 insertions(+) diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 73dd091c0075..67a684225702 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -4557,6 +4557,10 @@ static int validate_reachable_instructions(struct objtool_file *file) if (insn->visited || ignore_unreachable_insn(file, insn)) continue; + if (insn->sym->warned) + continue; + insn->sym->warned = 1; + WARN_FUNC("unreachable instruction", insn->sec, insn->offset); return 1; } diff --git a/tools/objtool/include/objtool/elf.h b/tools/objtool/include/objtool/elf.h index ad0024da262b..a668173a5869 100644 --- a/tools/objtool/include/objtool/elf.h +++ b/tools/objtool/include/objtool/elf.h @@ -61,6 +61,7 @@ struct symbol { u8 return_thunk : 1; u8 fentry : 1; u8 profiling_func : 1; + u8 warned : 1; struct list_head pv_target; struct list_head reloc_list; }; From patchwork Mon Mar 27 16:00:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 75538 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:6358:3404:b0:112:7285:5352 with SMTP id h4csp1523607rwd; Mon, 27 Mar 2023 09:03:58 -0700 (PDT) X-Google-Smtp-Source: AKy350aQJWm1TY5KQHcZj3iII58i40eXUGj0f96jIkI4HGpWLVD/twyo2nOKBftkjsnfAL3+mfMC X-Received: by 2002:a17:903:41c1:b0:1a0:67fb:444b with SMTP id u1-20020a17090341c100b001a067fb444bmr21490811ple.2.1679933037887; Mon, 27 Mar 2023 09:03:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679933037; cv=none; d=google.com; s=arc-20160816; b=dfC0hXBue9JG6oSYKOqRfErekJg7pSRqIwZoHQ09qlJ8W0eNcHJqVEJ4wkymmZKsmX Yj53BvJqflpEbzeF17aXtm0+gh7Jq7Zce/sUCRA6iKq/qDYe2Vhg5ZX+o8wGN8JuSLp9 /ba90aHsiFc6lnN+2UKoNrnGDi5+1IrxxoJvEmbe832UITFcMS/lvjTPv14rRhZGwS7r Q3JR+mTDg01SVxDH/uDYH7X8/1Ceg4PnqvMly2iOjDz+JlQ59UScTRPUx13IahyqwSdK 0/hT83fgE+4D7ghff2N5meOdJFXa6Nr9TrJz7c4qm0/ljefIj8aDk47fCN6zkqzK3UH6 +42A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=LQ1EBxC253g9sEyz26VbrESqYHac7iE8+nOrz9ST43c=; b=MLsgxM9qqBCClMCKmY0xVrfXs1QS+l4x6Zsi6s+E6E+uIRiE4sS5kozcWDYxwzfvv/ k7qbIxgxW5TeXelBW3viVo3FvGZofxoZQiXpZzRvqXHqwuKwm4SjDgc/9D/ZqaUAl94m UxyuLL5wAJpP5dO5jYEmAehAYGxy970m0eHM42J2efV7ugXTxD6fr7fktjZTN7bt8g9i 8BIH2ORA4qMYsF7M/HOHsW14vuQkSuGhuus5LukXwgu0njLIeWwrydP/1TW8nr7KH3hI FL0rIfz+ojomcYTvfb1q6J/tZ96xIceFqe1/h+XtFl8DcWc8c5PQlSnzqar6kGaQOApE yZjw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=NP503enp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bk13-20020a056a02028d00b0050300b179f3si26111058pgb.444.2023.03.27.09.03.28; Mon, 27 Mar 2023 09:03:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=NP503enp; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232710AbjC0QBm (ORCPT + 99 others); Mon, 27 Mar 2023 12:01:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233029AbjC0QBQ (ORCPT ); Mon, 27 Mar 2023 12:01:16 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 39F3E46B4 for ; Mon, 27 Mar 2023 09:00:57 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 3EE2161372 for ; Mon, 27 Mar 2023 16:00:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DDADAC433AF; Mon, 27 Mar 2023 16:00:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1679932857; bh=ouspNU+K1gyvLb2HKblJJmDAoAUT2VISUiIQf8ijcJ4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NP503enpxBHNNnrS7Xth/nqQzgMG8Q5fF3zn5DjpS4GO09w7OndJq7BQZaSkEHR9f pZaINcTY3qQQLFViJxpdupawo5yVMaEGetHFePzy2boiN0Kl79hOh1V6q1qbagGXdx kYPr1iAqTKWgSI42IXMUmUozTGvaarCM6kQHwdnr/5/rXuXZCDcUZtEO1VOWYKGOUg VCgeG27rugpUG0hrUj/lTn9HPJo9P95G96E7tINdDeirzHiC0GPljT2VyMJhaqq1xI tnC3eFYkoQXSWjlcGxow4K/XqCbbnCjHr+CcZ97LTreSFjFzn74AJuEI5O34BybXuj bRqRvea9cFs1A== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra Subject: [PATCH 5/5] objtool: Add "missing __noreturn" warning Date: Mon, 27 Mar 2023 09:00:48 -0700 Message-Id: <4f22aa05702ca037630fa6c1f7fd54d13914a631.1679932620.git.jpoimboe@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: References: MIME-Version: 1.0 Content-type: text/plain X-Spam-Status: No, score=-2.5 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761537465098482160?= X-GMAIL-MSGID: =?utf-8?q?1761537465098482160?= Most "unreachable instruction" warnings these days seem to actually be the result of a missing __noreturn annotation. Add an explicit check for that. Signed-off-by: Josh Poimboeuf --- tools/objtool/Documentation/objtool.txt | 7 +++++++ tools/objtool/check.c | 16 ++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/tools/objtool/Documentation/objtool.txt b/tools/objtool/Documentation/objtool.txt index ec6f82fb414c..e04d16490c3b 100644 --- a/tools/objtool/Documentation/objtool.txt +++ b/tools/objtool/Documentation/objtool.txt @@ -423,6 +423,13 @@ the objtool maintainers. names and does not use module_init() / module_exit() macros to create them. +13. file.o: warning: func(): missing __noreturn + + Objtool has detected that the function doesn't return, but is missing + the __noreturn annotation. NOTE: In addition to adding the + __noreturn annotation, the function name also needs to be added to + 'global_noreturns' in tools/objtool/check.c. + If the error doesn't seem to make sense, it could be a bug in objtool. Feel free to ask the objtool maintainer for help. diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 67a684225702..1ed3024af2b1 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -4548,7 +4548,8 @@ static int validate_sls(struct objtool_file *file) static int validate_reachable_instructions(struct objtool_file *file) { - struct instruction *insn; + struct instruction *insn, *prev_insn; + struct symbol *call_dest; if (file->ignore_unreachables) return 0; @@ -4561,8 +4562,19 @@ static int validate_reachable_instructions(struct objtool_file *file) continue; insn->sym->warned = 1; + prev_insn = prev_insn_same_sec(file, insn); + if (prev_insn) + call_dest = insn_call_dest(prev_insn); + if (prev_insn && prev_insn->dead_end && call_dest) { + if (call_dest->warned) + continue; + call_dest->warned = 1; + + WARN("%s(): missing __noreturn", call_dest->name); + continue; + } + WARN_FUNC("unreachable instruction", insn->sec, insn->offset); - return 1; } return 0;