From patchwork Tue Apr 18 21:27: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: 85080 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp3143401vqo; Tue, 18 Apr 2023 14:41:36 -0700 (PDT) X-Google-Smtp-Source: AKy350awwQckrU30kwnkTaLUf3lHS+z4ALZxrX1vkBPBrJQugErLnqsHo5JMIv1duWMs8xyGy6T9 X-Received: by 2002:a17:902:d512:b0:1a6:c67f:4ed with SMTP id b18-20020a170902d51200b001a6c67f04edmr3935985plg.9.1681854096165; Tue, 18 Apr 2023 14:41:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681854096; cv=none; d=google.com; s=arc-20160816; b=KmhDoS2xoA1q4eKL592NrpjYQ+6bgnxZmmgZN6uufCQdE3jxxYwgW0OptvehdaKTTB 144UcsjgJnL+8QmuRjYNSqerMNWY8ZNDlez59BMdzlr8lpK8iZuvzn8VxwwGXjBMatUI szFBwF5fMehoWGZtTk9yen+KiU+j8lsxJelSBoPdwmU7yylOYx4kLutTL2zbi33RVWb5 P+YfFbxUzPjQIJLqEfswXP323ds2W/bcjdI7khCS1DBC2XWhCpz7/3+mTLWk3Q1W59E9 mHi7e0nSI7r1XvkBRFaYmJMz9p+m2hubPlP+Vj9bFRzE6ECZf2J4nYzxVFOwTjc/TlN7 qrsg== 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=h1pWEEITFt8OlUP1zG4iE8ACsleTQMsNIoCAOa4yFWQ=; b=mILuodzBUoyNhmyAKeTtHBpopG93b/mDPN4gVx1+uUsXRU30dRZs0Ac7l9YoOavaRU qUg4y2dBsRyKqL0A7M021qfe7Gaa8/2WHC9zkmu80QFZIVCEg6nZrorGK4XUw3UD8n8i LK1MCaxkEyhIgr6/DFaLBaqn9H321clO23eppc1KGw2ojMxUlDN7sP3rbxKlyQa8ebKW zFkI815G6xjBnyOf8Q51Ns7pF3Syuop0dkUZsUSzrYuXsD1z20n6YFDv2fsg6QLhlJrI dbvyzOxGbBl7BUge/jiloJzFt8AckuV463EQCohBsWpQzg27pSaBprEWx3t9WwfQe8sn iuTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=AAFVT7Th; 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 z7-20020a170903018700b001a6d4f56673si6442948plg.457.2023.04.18.14.41.20; Tue, 18 Apr 2023 14:41:36 -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=AAFVT7Th; 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 S232790AbjDRV2Q (ORCPT + 99 others); Tue, 18 Apr 2023 17:28:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44874 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232707AbjDRV2N (ORCPT ); Tue, 18 Apr 2023 17:28: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 B83E0AD3D for ; Tue, 18 Apr 2023 14:28:00 -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 551FC63951 for ; Tue, 18 Apr 2023 21:28:00 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 80055C4339E; Tue, 18 Apr 2023 21:27:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681853279; bh=QLb9CZEh4jbifWcfcjQ/raJsyLVWkp1Ug+utfGGdmOQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AAFVT7Th4uWYQ5gVAbR35YJeC/EuGSNAl/6RaCsICHji5Ezk2jCGofZBnr4atJJpy UOompHmTAw/0dhGQ9f6EdBAstltpwdxCpBvvuBQLchl4MbBH6FnZHGX0Te6SzUBEW7 qNL/MXS66dNDLAX0L8Vzd4Xl7qvwfMKolvby59iGOvnyWuHwMtD3fNGN2J2AnoAHAC Jo7PRS/UJkvi59h3ZV1yedBmCN9m00imhM6P76KbnrUyfSY2ykwdbffmvGhBXYnvK7 3rAoqOZAMxAYP++eGZNZpEApbXxOsspLX3MBqWyxoVXeh5SCCN0wKco4CcvMcI/uBB L1uti4KL0mHgA== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra , Miroslav Benes , Nick Desaulniers Subject: [PATCH v3 1/8] objtool: Limit unreachable warnings to once per function Date: Tue, 18 Apr 2023 14:27:47 -0700 Message-Id: <9d38f881bfc34e031c74e4e90064ccb3e49f599a.1681853186.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=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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?1763551840471104009?= X-GMAIL-MSGID: =?utf-8?q?1763551840471104009?= Unreachable instruction warnings are limited to once per object file. That no longer makes sense for vmlinux validation, which might have more unreachable instructions lurking in other places. Change it to once per function. Note this affects some other (much rarer) non-fatal warnings as well. In general I think one-warning-per-function makes sense, as related warnings can accumulate quickly and we want to eventually get back to failing the build with -Werror anyway. Signed-off-by: Josh Poimboeuf --- tools/objtool/check.c | 5 +++-- tools/objtool/include/objtool/elf.h | 1 + tools/objtool/include/objtool/warn.h | 7 ++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 5b600bbf2389..a00931342c7e 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -4514,6 +4514,7 @@ static int validate_sls(struct objtool_file *file) static int validate_reachable_instructions(struct objtool_file *file) { struct instruction *insn; + int warnings = 0; if (file->ignore_unreachables) return 0; @@ -4523,10 +4524,10 @@ static int validate_reachable_instructions(struct objtool_file *file) continue; WARN_INSN(insn, "unreachable instruction"); - return 1; + warnings++; } - return 0; + return warnings; } int check(struct objtool_file *file) diff --git a/tools/objtool/include/objtool/elf.h b/tools/objtool/include/objtool/elf.h index e1ca588eb69d..78e2d0fc21ca 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; }; diff --git a/tools/objtool/include/objtool/warn.h b/tools/objtool/include/objtool/warn.h index b1c920dc9516..f195deab456e 100644 --- a/tools/objtool/include/objtool/warn.h +++ b/tools/objtool/include/objtool/warn.h @@ -55,7 +55,12 @@ static inline char *offstr(struct section *sec, unsigned long offset) #define WARN_INSN(insn, format, ...) \ ({ \ - WARN_FUNC(format, insn->sec, insn->offset, ##__VA_ARGS__); \ + struct instruction *_insn = (insn); \ + if (!_insn->sym || !_insn->sym->warned) \ + WARN_FUNC(format, _insn->sec, _insn->offset, \ + ##__VA_ARGS__); \ + if (_insn->sym) \ + _insn->sym->warned = 1; \ }) #define BT_FUNC(format, insn, ...) \ From patchwork Tue Apr 18 21:27: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: 85078 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp3139958vqo; Tue, 18 Apr 2023 14:33:43 -0700 (PDT) X-Google-Smtp-Source: AKy350ZAGjLzFij9KTf9VzyuzKI5PeqyFG+PTmyL0qc3HdAHohbip5mM1nE9jbJxacysRt+YROiW X-Received: by 2002:a05:6a00:2190:b0:63d:3c9d:2c9 with SMTP id h16-20020a056a00219000b0063d3c9d02c9mr1276548pfi.3.1681853623746; Tue, 18 Apr 2023 14:33:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681853623; cv=none; d=google.com; s=arc-20160816; b=KlAtJVKMkB3gJy2ZiReFx8qlYa1uMol92/0MbJpWYXoYLai1v0upHhjridOK1Yyh1e 8KhxfNxxU6Vr2RXRfbRx2MRVurhc/84ITLxF5HIv713hVQveCJZspN/yQ2b4NbE3RPUg EsmzLkotO+vkmNJgNsAyJXIXqPDirS+MgkrYKDSkyum9gYgKzXW6LRWSYjylc5XRSfpq ORRcDCzoV/GDNw4xmzwCsK3+cPA6NMa0h3pLE7DDmqhBEXjbnMCh3oFKcPp5eaZCBkCI vc6ia+3jvnIL3sIiW8OuHSIMK7UaLEjxTDC8RXf919hWjoBdMm9zUM6qCa+rHjWEGnRs SIDQ== 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=yQVuSFQPrG3ZktfzpdDfoSkq9ByJHWncWchg/stfZ6c=; b=zsF798YOoLzNih5qqSULOll0SDwtg4qnG4cN/N8bz1z8XM4pmPT4C2okyo3fzF23O6 XxnqUzMGg0+yky2+540SyJnLQy1FV2eopU98MGu3LvL79zJIZerXk9gS5Ow0s5fNWX0d 78Y0lqHuWJTsk5U8d1pcEseuhs3E7wfJdA0KtrY7VWKpnA/Hc1fC+VN1tyou0wOVUQyU 94lfC2jmw+jmC2JitgNjM/6cIIiV6J3Fwmsg+8DbB8o5ezqoOqfj8nyX8qMnpf+DjtA8 8vrW9MbKH4l5CK2croB3zo+lBU4DsxIg6wQ5ykgbQIBT94BP51pG9S0UVJ7QPHQyIv7U g6Kw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=f8rTKQmV; 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 6-20020a621806000000b0063b6bc7df13si11500939pfy.209.2023.04.18.14.33.29; Tue, 18 Apr 2023 14:33:43 -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=f8rTKQmV; 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 S232946AbjDRV2T (ORCPT + 99 others); Tue, 18 Apr 2023 17:28:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44988 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232818AbjDRV2P (ORCPT ); Tue, 18 Apr 2023 17:28:15 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4CA5EAD0F for ; Tue, 18 Apr 2023 14:28:01 -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 A2BBC63945 for ; Tue, 18 Apr 2023 21:28:00 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D9872C433A4; Tue, 18 Apr 2023 21:27:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681853280; bh=mkUcunGwZcbLDMBJzfgmVtTvYRmD88J1hdWzV9cPHn4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=f8rTKQmVKoRowFB1Jq7qGx9DQ9/NsrY/BoSFNs1K1A9O4YYLn7ohcGN8TuFihLB+g TaTb3hO0eTLP2LBZvrGkcwkmN0GGyV89ICl3jyL6BZAkLOk+fC1e3+BtI55vftBGSr 2ZP6o0Gczg/JnPUuXVViIT/qYPw63CdFJz5ZfXzV6f0sWnquxWV87W1dkvtUi7bWZ5 42Ag6eY86awyKJWJIx8O9cRunf8u7jg1ZYxIr5cEXK8S+ks09CXhFV1uXCdIkMOZkT M0jP+AOkdATyQNedY3gsvuduYfPV8yxjkXaZVRk2YyBjlFz6dyad/n+fGrNI9Yon46 OD6yD/yFptwww== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra , Miroslav Benes , Nick Desaulniers Subject: [PATCH v3 2/8] objtool: Add verbose option for disassembling affected functions Date: Tue, 18 Apr 2023 14:27:48 -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=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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?1763551345231412873?= X-GMAIL-MSGID: =?utf-8?q?1763551345231412873?= 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 | 5 ++ tools/objtool/check.c | 77 +++++++++++++++++++++++++ tools/objtool/include/objtool/builtin.h | 1 + 4 files changed, 88 insertions(+) diff --git a/tools/objtool/Documentation/objtool.txt b/tools/objtool/Documentation/objtool.txt index 8e53fc6735ef..4d6c5acde7a3 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 recreate with +OBJTOOL_VERBOSE=1 (e.g., "make OBJTOOL_VERBOSE=1") and send the full +output, including any 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..5e21cfb7661d 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(), }; @@ -118,6 +119,10 @@ int cmd_parse_options(int argc, const char **argv, const char * const usage[]) parse_options(envc, envv, check_options, env_usage, 0); } + env = getenv("OBJTOOL_VERBOSE"); + if (env && !strcmp(env, "1")) + opts.verbose = true; + argc = parse_options(argc, argv, check_options, usage, 0); if (argc != 1) usage_with_options(usage, check_options); diff --git a/tools/objtool/check.c b/tools/objtool/check.c index a00931342c7e..c63e0867daca 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -4530,6 +4530,81 @@ static int validate_reachable_instructions(struct objtool_file *file) return warnings; } +/* 'funcs' is a space-separated list of function names */ +static int disas_funcs(const char *funcs) +{ + const char *objdump_str, *cross_compile; + int size, ret; + char *cmd; + + cross_compile = getenv("CROSS_COMPILE"); + + objdump_str = "%sobjdump -wdr %s | gawk -M -v _funcs='%s' '" + "BEGIN { split(_funcs, funcs); }" + "/^$/ { func_match = 0; }" + "/<.*>:/ { " + "f = gensub(/.*<(.*)>:/, \"\\\\1\", 1);" + "for (i in funcs) {" + "if (funcs[i] == f) {" + "func_match = 1;" + "base = strtonum(\"0x\" $1);" + "break;" + "}" + "}" + "}" + "{" + "if (func_match) {" + "addr = strtonum(\"0x\" $1);" + "printf(\"%%04x \", addr - base);" + "print;" + "}" + "}' 1>&2"; + + /* fake snprintf() to calculate the size */ + size = snprintf(NULL, 0, objdump_str, cross_compile, objname, funcs) + 1; + if (size <= 0) { + WARN("objdump string size calculation failed"); + return -1; + } + + cmd = malloc(size); + + /* real snprintf() */ + snprintf(cmd, size, objdump_str, cross_compile, objname, funcs); + ret = system(cmd); + if (ret) { + WARN("disassembly failed: %d", ret); + return -1; + } + + return 0; +} + +static int disas_warned_funcs(struct objtool_file *file) +{ + struct symbol *sym; + char *funcs = NULL, *tmp; + + for_each_sym(file, sym) { + if (sym->warned) { + if (!funcs) { + funcs = malloc(strlen(sym->name) + 1); + strcpy(funcs, sym->name); + } else { + tmp = malloc(strlen(funcs) + strlen(sym->name) + 2); + sprintf(tmp, "%s %s", funcs, sym->name); + free(funcs); + funcs = tmp; + } + } + } + + if (funcs) + disas_funcs(funcs); + + return 0; +} + int check(struct objtool_file *file) { int ret, warnings = 0; @@ -4674,6 +4749,8 @@ int check(struct objtool_file *file) warnings += ret; } + if (opts.verbose) + disas_warned_funcs(file); if (opts.stats) { printf("nr_insns_visited: %ld\n", nr_insns_visited); 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; From patchwork Tue Apr 18 21:27:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 85076 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp3138780vqo; Tue, 18 Apr 2023 14:31:16 -0700 (PDT) X-Google-Smtp-Source: AKy350bRFziuRrSvBipGfCfH5cZtDExAPq4pH3usPQKgIoAXUuVrq6AeHKuKyzd1J+WIRwyNXVOT X-Received: by 2002:a05:6a20:4404:b0:db:f682:65ed with SMTP id ce4-20020a056a20440400b000dbf68265edmr1108126pzb.61.1681853476223; Tue, 18 Apr 2023 14:31:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681853476; cv=none; d=google.com; s=arc-20160816; b=nh8VH1NjIhQDHghQNOSPR2ZuNlbAw7T3vBx3ILZhJAFEXu28aplzI8XdqhJ1JAgfkV UvpJk+c79fnvaRnlBhDRn0NCalcb9Keoon39sqWcFWSfrn3fqOQkkG7/1zxiAMm0Td68 MznAwKRkNGw87lXkSlTVpNP4/SDLi2uN9+TiihDlC7VJStG2ap8sl5LRQGHunW9vYUlN HSzk3zWZcKejVylc9nHvzPIP3zBZLOzBDqfyZhDnRSrCMpnlK2jiBmPn7iYdY7Euz7Fk x95EK7WI7f0VGHmBqTNXiCUD/Ijcsja61droXbfEwvcv85VG2ZurMBxkGY8kBs1C+S4Q P0PA== 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=elFHmzVjgw1NQzzaCjSeSa5fyM1DnN5RYpYet6adpRw=; b=WbAm186Bu4fqWsnwpRvqU4CnVI+eYycjvuIfEBwZFXvwqpFH0Pg2U/e5YH5iAwu3rf EamdTCGejyoHzercyesNp3i5Fxq+eVYfFc9JWJTLUIDFjWnn5Cf2aflhDpc2wdEiwLZD q4lhZmTfDCw/GUOdlzXE8We5yfSUB5CuTgeJTgJEePVGFzdP6pgt/2QA4LqgyzGF9d27 wkr4DrPwaEkFMzPS3MI78u2Db7zqIpMtUNd+bdWGVz2su5IGV5pPaMJdvE6YAXMUb570 4OHa48qhvlkMv2fOi9niD3qpqBms0cg1DZyp/fcDyYCuyOs9JA/Q6WtN5CxDKD5PTabD OA7g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=mG5cYVFR; 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 k69-20020a638448000000b0050aea0375afsi14334088pgd.765.2023.04.18.14.30.38; Tue, 18 Apr 2023 14:31: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=mG5cYVFR; 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 S232964AbjDRV2Z (ORCPT + 99 others); Tue, 18 Apr 2023 17:28:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44992 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232753AbjDRV2P (ORCPT ); Tue, 18 Apr 2023 17:28:15 -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 91B62BBB1 for ; Tue, 18 Apr 2023 14:28:01 -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 09E606395A for ; Tue, 18 Apr 2023 21:28:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3E4AEC433A0; Tue, 18 Apr 2023 21:28:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681853280; bh=pBU1V3n8RoeNydoWkCOq7gRDOLCsSaGVqI+g1UM+LHw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mG5cYVFRVoVveup0sM4ym0gMevTAZG6FJHEsWSU21tEm7ayDCeF9gOXAR0VM8DZjr 5C14MITk1NDLNM/Ax3aI8n6SmbQHnNTz1tpR3JqM/fVwKUB5JEcWwScT9AQ9zO/zY0 V1TwpLTdaU5F9enIOoKlMdTbPwx1rbwpyKYZOWDlCS0imSE3fdi0Dsd401W/kkHwol 0izRQKppbnRm2/maVb9w6Cr3xQ6XBvQctEelTOU8j+IePma+pdIBNa2pHnB7euNPQ4 PWK8kIF7YPEiIyvdoRk7E6utFwNxEuncCeijR6PmxWB9a0R0jyyTsNqY526UEUvwUz 0HAzKEFGPD6WA== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra , Miroslav Benes , Nick Desaulniers Subject: [PATCH v3 3/8] objtool: Include backtrace in verbose mode Date: Tue, 18 Apr 2023 14:27:49 -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=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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?1763551190529127880?= X-GMAIL-MSGID: =?utf-8?q?1763551190529127880?= Include backtrace in verbose mode. 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/check.c | 26 ++++++++++--------------- tools/objtool/include/objtool/warn.h | 14 +++++++------ 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/tools/objtool/Documentation/objtool.txt b/tools/objtool/Documentation/objtool.txt index 4d6c5acde7a3..5a69c207a10e 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 recreate with OBJTOOL_VERBOSE=1 (e.g., "make OBJTOOL_VERBOSE=1") and send the full -output, including any disassembly below the warning, to the objtool -maintainers. +output, including any disassembly or 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/check.c b/tools/objtool/check.c index c63e0867daca..aa083296af1e 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -3657,8 +3657,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_INSN(insn, "(alt)"); return ret; } } @@ -3703,8 +3702,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_INSN(insn, "(branch)"); return ret; } } @@ -3802,8 +3800,8 @@ 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) - BT_FUNC("<=== (hint)", insn); + if (ret) + BT_INSN(insn, "<=== (hint)"); return ret; } @@ -3861,8 +3859,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_INSN(insn, "(alt)"); return ret; } } @@ -3888,10 +3885,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_INSN(insn, "(branch%s)", + insn->type == INSN_JUMP_CONDITIONAL ? "-cond" : ""); return ret; } @@ -3913,8 +3908,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_INSN(insn, "(call)"); return ret; } /* @@ -4216,8 +4210,8 @@ 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) - BT_FUNC("<=== (sym)", insn); + if (ret) + BT_INSN(insn, "<=== (sym)"); return ret; } diff --git a/tools/objtool/include/objtool/warn.h b/tools/objtool/include/objtool/warn.h index f195deab456e..ac04d3fe4dd9 100644 --- a/tools/objtool/include/objtool/warn.h +++ b/tools/objtool/include/objtool/warn.h @@ -63,12 +63,14 @@ static inline char *offstr(struct section *sec, unsigned long offset) _insn->sym->warned = 1; \ }) -#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_INSN(insn, format, ...) \ +({ \ + if (opts.verbose || opts.backtrace) { \ + 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 Tue Apr 18 21:27:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 85084 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp3144964vqo; Tue, 18 Apr 2023 14:45:18 -0700 (PDT) X-Google-Smtp-Source: AKy350YCEEJ8wOfPL0ea1qyhmcN/2+h+xN3CxtJ5o5xVYqiZQYoWKPRu/sVCCmdcrPyayIFbP/B1 X-Received: by 2002:a05:6a20:7351:b0:ee:6c12:6c95 with SMTP id v17-20020a056a20735100b000ee6c126c95mr1312338pzc.21.1681854318287; Tue, 18 Apr 2023 14:45:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681854318; cv=none; d=google.com; s=arc-20160816; b=tdziCyGLEzih/OWGl37hGboq85QRh6YO5J/iWokLsq9lu/qiB9+ShuubaPILQolVby J8roUuhkgkA0wmtArFi+Ph+SUDVk5miv1zeS54rVdNTXDNA/21szZpq3phQbIyd1peM6 ryztnetmsvkrIsOENZuR1gTKz+//qMn7Br/gmIVChuIKeipCOJnyRjURTze59OfuOuSs urDD2Ad0rHewoe9IDW9AvtMTVpI5bPPjbEAeuGbO0vruUBVbkffkjAY/aIMu2HZ/zKzl eDwkQGo9aum+A0Z/IkT+0NJZeAfUlCT7iJiOLQealMVS3gOfsNENJG4HBsvLzNpGW0Y2 3UnQ== 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=4bwaAxHLoDdK88IkcQgw+sHrcEmNH9gPUmyyd2sbFY0=; b=oo3sKswODBLfX11RCubgVF2GFKhHk227KYSj9x2WGzTaZg5OXkthk7ZqC6Nmql6JlB gHr8Ipon7o7759fibrjJkNSXq4EXEoeI8jP3WiUTNl01Pbew3Ix++WdzlvCY5y7eCBMb GEBjAaXUdjV45h15hLU293WKPyzhXTOioZTmt0r2eptJOF99z/d49qQWlEZNTUXyRgO3 5DrGQDHqahSZL1y4GsKv490Ao7oYl5sLJCVBQlOfx+UEXEwd8hHc+Nr+gdVYZDvIXIgK gN3Zb4IJ8OAHEcS1QE1w+dJ0jVW/jFVSIDK3dD6B9EfS4qdt3k7Vq3wf0Z6DdP0h9jLS Qf0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=hQOxdvbF; 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 bs193-20020a6328ca000000b0051a650b8f62si14734524pgb.836.2023.04.18.14.45.04; Tue, 18 Apr 2023 14:45:18 -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=hQOxdvbF; 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 S232968AbjDRV2W (ORCPT + 99 others); Tue, 18 Apr 2023 17:28:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44986 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232814AbjDRV2P (ORCPT ); Tue, 18 Apr 2023 17:28:15 -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 8FD14BBAA for ; Tue, 18 Apr 2023 14:28:01 -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 008CD6394F for ; Tue, 18 Apr 2023 21:28:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 96148C433D2; Tue, 18 Apr 2023 21:28:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681853280; bh=d8JeZbsO9FoCUm7Dn+I8dcmej5dQ111QeGOLzKzYoxw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hQOxdvbFmQbJ8Ey4p9LJ+o8btkCtcDjirAQFXJUP9kU7/jj5rHE7x6YNHb2wuzse/ wZzM5lnhebXXYVROnDVsWNniHyqHAtA65tiRFNLYvSyCWQLFPaESkwG1Dm098ottzm pthA0dTvkLcmyvE93Mz+Y/BoY7whAsZNwvxg6VTWG8nQe/RXJyrlRXaTR3ttw9l7jd sHRNLAw2FR5jzW8oKGwhO/ojHNkRN150MZr4s9boNzIR/YcaGjlZKkvfunlh5Gdmnt pxhY3aZSbLQ3fxejuQqc/7BG6oKjhWQ50+mV+aN1M5BVvdFNSDVKBeyL0Hbr6rQQuQ Tha6MYOjdzuCQ== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra , Miroslav Benes , Nick Desaulniers Subject: [PATCH v3 4/8] objtool: Detect missing __noreturn annotations Date: Tue, 18 Apr 2023 14:27:50 -0700 Message-Id: <6e2b93d8c65eaed6c4166a358269dc0ef01f890c.1681853186.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=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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?1763552073473429247?= X-GMAIL-MSGID: =?utf-8?q?1763552073473429247?= 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 | 6 ++++++ tools/objtool/check.c | 14 +++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/tools/objtool/Documentation/objtool.txt b/tools/objtool/Documentation/objtool.txt index 5a69c207a10e..2cd1fa16ed08 100644 --- a/tools/objtool/Documentation/objtool.txt +++ b/tools/objtool/Documentation/objtool.txt @@ -303,6 +303,12 @@ the objtool maintainers. If it's not actually in a callable function (e.g. kernel entry code), change ENDPROC to END. +3. file.o: warning: objtool: foo+0x48c: bar() is missing a __noreturn annotation + + The call from foo() to bar() doesn't return, but bar() 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. 4. file.o: warning: objtool: func(): can't find starting instruction or diff --git a/tools/objtool/check.c b/tools/objtool/check.c index aa083296af1e..dd10128ab013 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -4507,7 +4507,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; int warnings = 0; if (file->ignore_unreachables) @@ -4517,6 +4518,17 @@ static int validate_reachable_instructions(struct objtool_file *file) if (insn->visited || ignore_unreachable_insn(file, insn)) continue; + prev_insn = prev_insn_same_sec(file, insn); + if (prev_insn && prev_insn->dead_end) { + call_dest = insn_call_dest(prev_insn); + if (call_dest) { + WARN_INSN(insn, "%s() is missing a __noreturn annotation", + call_dest->name); + warnings++; + continue; + } + } + WARN_INSN(insn, "unreachable instruction"); warnings++; } From patchwork Tue Apr 18 21:27:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 85087 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp3152640vqo; Tue, 18 Apr 2023 15:02:24 -0700 (PDT) X-Google-Smtp-Source: AKy350bqJqJvsRXnHucUfQ+WgCn8g9Oiwb56+Nk3A/ufYF1bZURK7jsVHcTu2jhnXeIhTCefo4yi X-Received: by 2002:a05:6a00:ac8:b0:63d:489c:971 with SMTP id c8-20020a056a000ac800b0063d489c0971mr439234pfl.24.1681855344069; Tue, 18 Apr 2023 15:02:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681855344; cv=none; d=google.com; s=arc-20160816; b=bQ8pY81XJbLjWLcCrLyHUI+0GVtRk3bRtsTHBZDMJJrmmyPrE69eApfttBKXizvQjq Z9f3V8neNuLeX4mauKBOHO7oDMMJAr6C8VeBgoNGt9AZZHuKqUN/gE8ImbbCVy0aA/YT wWHiZ2J/dPuWVoMnx1lj4Zy9efoVxi241dU/rToL12aGXtPkcQ3QKiQh5GY03tffnGC9 tem1dAT8E4Q5jUNrSrqdl33zmq5xAiWguLg7e/uju1icUjXFrZ8H90m2WxNLwY+pCqKy 2hXTxbU3b38N/TiWN3VvHVZsQmtK/u0uALYCu6II8PdsY89NTGpQ30QwcU0sbtW7xDNx PyOw== 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=Oc08TwWTUhbnv+KmwT6H/lJOv3XnybKdFYOva+u687k=; b=xBoziNJ11ftJF0c4JwQWgjR3is4A9gr3L0k6Adst7zRYJD3GJ27tVUqpo5IHgojbzX mMZiVtx9gqyGnDexEf+CF4yOuctYbfK234twQ5ROeqwKpSGBs5Ype8dzN+/WKGIakVVS dBO/hm9KTQpmDYeSHt1QMaacTcydAQnLwGZzTjqPYwpUUeS6YtlctJmozrQe0IQjjlnY FbRr0t60N8mDhl92smPsqdtXN8UbWe35VHYLeQ2qzRXhaX3CDpYhNxqURUYYZgQjDgUE ajhxiTBVPNM2/rpqZfIppM4Pv3qI3VkyFWP4siPeB8/fQgoR5dT0hUU8PJAK9p02FMtz IEHw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=RwW7odxe; 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 v9-20020aa799c9000000b0063d2121a7b6si5219101pfi.66.2023.04.18.15.02.09; Tue, 18 Apr 2023 15:02:24 -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=RwW7odxe; 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 S232996AbjDRV2m (ORCPT + 99 others); Tue, 18 Apr 2023 17:28:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45412 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232997AbjDRV2e (ORCPT ); Tue, 18 Apr 2023 17:28:34 -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 278F31026E for ; Tue, 18 Apr 2023 14:28:12 -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 B6D6D612AE for ; Tue, 18 Apr 2023 21:28:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EE361C4339B; Tue, 18 Apr 2023 21:28:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681853281; bh=ij85bIvlI0ug5hahPrm5CUQ/Uj6pydt9FfFsLuqiE1o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RwW7odxeNgHigkMNNMw1f88aayUFzwCqtCcmWcCvr+ZBqnoaEexntOjXcgZD2PLf8 VWilc8PbrS+97sWQ5yTo1qLWnrcjD3AKumLAPGjRsydINKg01qS5oUyqjxJiuTPLYN XMKEPDsMDzZTLXtgmKHfktMroK7xaAtrSOuBEYwUTkDVRhu5ln+OfoeGoCe94YIzVq ycgik4QUrMA6gXCr/X/8UvIQrw25D4gYdd1uThwXmtl+iNXz1j9VJ9dg7Mjj8yDIoi Xozdhxx3k2/QJqQS+tgYJUqEiR6LJdHueN3e0ZV5KlyYIVpvyzjbiVgzfFmkm+K33H pqKiNjWgQgZNQ== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra , Miroslav Benes , Nick Desaulniers Subject: [PATCH v3 5/8] objtool: Ignore exc_double_fault() __noreturn warnings Date: Tue, 18 Apr 2023 14:27:51 -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=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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?1763553149202187016?= X-GMAIL-MSGID: =?utf-8?q?1763553149202187016?= This is a hack, but it works for now. Problem is, exc_double_fault() may or may not return, depending on whether CONFIG_X86_ESPFIX64 is set. But objtool has no visibility to the kernel config. "Fix" it by silencing the exc_double_fault() __noreturn warning. This removes the following warning: vmlinux.o: warning: objtool: xenpv_exc_double_fault+0xd: exc_double_fault() is missing a __noreturn annotation Signed-off-by: Josh Poimboeuf --- tools/objtool/check.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/tools/objtool/check.c b/tools/objtool/check.c index dd10128ab013..1cace399d32a 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -4505,6 +4505,35 @@ static int validate_sls(struct objtool_file *file) return warnings; } +static bool ignore_noreturn_call(struct instruction *insn) +{ + struct symbol *call_dest = insn_call_dest(insn); + + /* + * FIXME: hack, we need a real noreturn solution + * + * Problem is, exc_double_fault() may or may not return, depending on + * whether CONFIG_X86_ESPFIX64 is set. But objtool has no visibility + * to the kernel config. + * + * Other potential ways to fix it: + * + * - have compiler communicate __noreturn functions somehow + * - remove CONFIG_X86_ESPFIX64 + * - read the .config file + * - add a cmdline option + * - create a generic objtool annotation format (vs a bunch of custom + * formats) and annotate it + */ + if (!strcmp(call_dest->name, "exc_double_fault")) { + /* prevent further unreachable warnings for the caller */ + insn->sym->warned = 1; + return true; + } + + return false; +} + static int validate_reachable_instructions(struct objtool_file *file) { struct instruction *insn, *prev_insn; @@ -4521,7 +4550,7 @@ static int validate_reachable_instructions(struct objtool_file *file) prev_insn = prev_insn_same_sec(file, insn); if (prev_insn && prev_insn->dead_end) { call_dest = insn_call_dest(prev_insn); - if (call_dest) { + if (call_dest && !ignore_noreturn_call(prev_insn)) { WARN_INSN(insn, "%s() is missing a __noreturn annotation", call_dest->name); warnings++; From patchwork Tue Apr 18 21:27:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 85091 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp3158717vqo; Tue, 18 Apr 2023 15:13:28 -0700 (PDT) X-Google-Smtp-Source: AKy350b2MhYY+vEZK1TBlFVbrrp0xrr/Tg6JGi2i7H+cf6eooJ/TdNojib1KoxuJoS+YIrFZKHeU X-Received: by 2002:a17:903:410c:b0:1a6:7f14:707e with SMTP id r12-20020a170903410c00b001a67f14707emr2594390pld.9.1681856007956; Tue, 18 Apr 2023 15:13:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681856007; cv=none; d=google.com; s=arc-20160816; b=atSplErKJbG3FE9gEIzWG+m5KB1FCtUFKS180GV/jHSnAOYWYDIIq/0VyI3f6KZjaV n2HNFVpyJdk0REl2IvcxlIyPjVOKo0bN5U1+QIKilqXVrD0XzTk+bs1hlMSu2Z6bKHO0 9In4YQfQpazEGw/9EHNze6NggiqqZVN9gz6gFK9ffTKqPRfwDPhB+dcEchl01ZmGJHrC QYf5Eo2KSWGbNhz1zCK+DgefDeeIBCZTIy4hScWD+5GDSfJ82sY64oOCce1YLYS0i/q1 /Wt3tW+A2f7P+1/UCzLM8F18Ty12XRmoucy6zWtHrTEFPAh6qckt/n1jihYkYAWLt0/D YFAA== 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=kvHftZnse1vs2lAXESnEGq8NjA7UTePxE7nxGF1Be/g=; b=iEyv4xZsF7iR5NwYZ/JY2O16ZcmFQUZ7/6k5K0iJCKyWLI7MBV9fgtjXGUe0H2R9bu SkgzHSOkKF5+aPhVAoxmyZxrrQIOLDmdIZvf7IW0nfPxDu2mcHk23Q9ZTwQ52d5d1XjG aTDnnPyLLawt9x1KklXBR7kVbHpMDURr1IqnyioPu6mGD0Zl7Tm51fVcNXEgMtTsC1k6 N0Dg0A1nNi+swpdhXMITkBf46U9ERbn0jGOlUOXo2SUGz4zYxR0j83iesI/a0ojAy8q9 MdOlb4AObx1MGWXPjpym1OTMBdlx8qWj+IldfcWaPWsDs+sTvNu7T/llpPaG/rtpqdPw uI3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=sSNHEHgu; 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 k3-20020a170902760300b001a6458c9f96si14476564pll.37.2023.04.18.15.13.06; Tue, 18 Apr 2023 15:13:27 -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=sSNHEHgu; 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 S233005AbjDRV2o (ORCPT + 99 others); Tue, 18 Apr 2023 17:28:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45110 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232978AbjDRV2e (ORCPT ); Tue, 18 Apr 2023 17:28:34 -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 D031CAD3D for ; Tue, 18 Apr 2023 14:28:13 -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 1A2D863964 for ; Tue, 18 Apr 2023 21:28:02 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5146EC433EF; Tue, 18 Apr 2023 21:28:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681853281; bh=WeuYulFAOo3QWy7DY6IxPDrEghLxpSGlZTD112qJl50=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sSNHEHguFD6YyAWfQ1wYp/ylJAjG5fiTRuh7fOWDkzNzkgh+Q3fh5sLhjuQLjvCTH Re3o6PhjPw1ZMz9QD99L8IcERE5fmgEt4d3mEH/yuSU2XzkgMdcj6bUYo6127sa98e YfWiPt4fGvcxYvxqyMwTuuoH4XAhnjc0iQnIoAGvIfYtgwT97yAiM+hB2Fa5NaABk4 c8Rz69VKES3JUape+FBypFBHjWURpa8Bx30tL1FCoFMmKvhhG3uM1SdXbLyhkUdtck oLB1TUFK0fWzWv7V/fgP8IS5c7EOEt18JEzcaKoIUp2WOrJDA+a0xmQu8uvmeA+Dlq OWvmcRvRCmAXw== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra , Miroslav Benes , Nick Desaulniers Subject: [PATCH v3 6/8] objtool: Remove superfluous global_noreturns entries Date: Tue, 18 Apr 2023 14:27:52 -0700 Message-Id: <2725d7f2ccc2361c6903de9ebaa2b5bb304f7ac2.1681853186.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=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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?1763553845154320014?= X-GMAIL-MSGID: =?utf-8?q?1763553845154320014?= lbug_with_loc() no longer exists, and resume_play_dead() is static (objtool only checks globals and weaks). Signed-off-by: Josh Poimboeuf --- tools/objtool/check.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 1cace399d32a..2047a6d5339b 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -217,7 +217,6 @@ static bool __dead_end_function(struct objtool_file *file, struct symbol *func, "kthread_complete_and_exit", "kthread_exit", "kunit_try_catch_throw", - "lbug_with_loc", "machine_real_restart", "make_task_dead", "mpt_halt_firmware", @@ -225,7 +224,6 @@ static bool __dead_end_function(struct objtool_file *file, struct symbol *func, "panic", "panic_smp_self_stop", "rest_init", - "resume_play_dead", "rewind_stack_and_make_dead", "sev_es_terminate", "snp_abort", From patchwork Tue Apr 18 21:27:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 85077 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp3138880vqo; Tue, 18 Apr 2023 14:31:30 -0700 (PDT) X-Google-Smtp-Source: AKy350Y001x7kNfXwrIBOVHtTrwiwOh05C35shEjPXbeSdui2YLH0+//urWJOrRSleyeiiYTlAMw X-Received: by 2002:a05:6a20:7fa1:b0:f0:b18d:78fc with SMTP id d33-20020a056a207fa100b000f0b18d78fcmr902805pzj.30.1681853490147; Tue, 18 Apr 2023 14:31:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681853490; cv=none; d=google.com; s=arc-20160816; b=X24men8MmAq2EklvNJuxhe4/PKCbrkEyOLbqii5P6Vzka4Li46hBdrKdF79KvFgHKn GJrqzgMIqbzyY7mzkB3PEPB9ZVqS6iGuVyf6OXBWxz8IY/RDkNoTwgeTLhe23JUdXFbB RXPE7Jcd5o1BJo7fep5vSZc4Y0118IsNcRKxOHQHdWUJK5G/Tqdmx1h2bDV2uHQdAHIz pcsD9gIIWRtfFIgqhcEJ512zszTCYvP8zK+tfplHRGrNpp+k71qoP8Si7KnPtPbAFRE3 fJr1rArd+D9U7DAvcCSAJu6zE2q9rb4HQYt8CeD5MHO0EjpE+eDRafivWIqf4WSzioOM aQ7A== 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=1DnR2NJ1U0549L48VfEBxvh+J3bBte1vEClY1vjW8Rg=; b=exQhWvhTxc8YlT9LQuAxEXCBKv0G92huQBWouXolkdvqJSty3jU19eKUP3jmNNfSDq 4XwG6Ohy6XkcxOOyKWDp+Jm4rMZY9BaW15E6XQLv6r71L3z3I/MHA5lDchc/hcg8QjXP EZXs92Jht+TrungAk1lphR7n5SCSNqf44SH1CeyzcKUSiZQtUYjPoRKwfhCic16yNO2t GuLDWe/QgtLxKIT2HS80od8k2giHlT3HYhJk1nC5dfT+WRIqLXBqdrKDzI5npoM3M3oN w5Eh+trad2Sp3Qqnpsulocz5KE1NBLfxsute0UVmrGi/bkxEk8dYUkx9rOU7kLlI7KXG 3aTg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=c0blbe4l; 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 b6-20020a656686000000b0051909d663desi14473817pgw.481.2023.04.18.14.31.10; Tue, 18 Apr 2023 14:31:30 -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=c0blbe4l; 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 S232753AbjDRV2k (ORCPT + 99 others); Tue, 18 Apr 2023 17:28:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45118 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232996AbjDRV2e (ORCPT ); Tue, 18 Apr 2023 17:28:34 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 270FFC671 for ; Tue, 18 Apr 2023 14:28:12 -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 172B96393D for ; Tue, 18 Apr 2023 21:28:02 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A98FCC433A1; Tue, 18 Apr 2023 21:28:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681853281; bh=rKNOJA2iFxFHQD00gPxbX9WeLPWBE9JGs0wdA5OiRv4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=c0blbe4lLqfHHadAtOQFMEbIpw6pqLcijlz7BFygBypbTqIXXrbuq+bnKXo2qQOBu NULyMH4LXCIdMoKckY0Yr3CwAt3oS6pyE/2aJnwD2NwZHBFsAKwEMBGJInOdBwf3lC QX8TAaHzTIS1uGJ+DJHBuWCMZrryJYd9PLT8qK4Z+//BZSiSJG7y/o/Q5tf6sRg4m8 DlbxA992QxOtLr9oD9r+tS5cCJcI+batN2VA+4n9ZspK1y4iZ/xAaO5kKpZp+4iXxd UTqRKHX/qAq8KrnFuqhjgFUPbc0Oq7pl3Ky20SgdthWPVxxSBowFQxl14CXSxakaNZ NXx5512m9DnWQ== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra , Miroslav Benes , Nick Desaulniers Subject: [PATCH v3 7/8] tools/lib/subcmd: Replace NORETURN usage with __noreturn Date: Tue, 18 Apr 2023 14:27:53 -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=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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?1763551205110834396?= X-GMAIL-MSGID: =?utf-8?q?1763551205110834396?= NORETURN is redundant with __noreturn, just use the latter. Signed-off-by: Josh Poimboeuf --- tools/lib/subcmd/parse-options.h | 8 ++------ tools/lib/subcmd/subcmd-util.h | 5 ++--- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/tools/lib/subcmd/parse-options.h b/tools/lib/subcmd/parse-options.h index 41b9b942504d..8e9147358a28 100644 --- a/tools/lib/subcmd/parse-options.h +++ b/tools/lib/subcmd/parse-options.h @@ -6,10 +6,6 @@ #include #include -#ifndef NORETURN -#define NORETURN __attribute__((__noreturn__)) -#endif - enum parse_opt_type { /* special types */ OPTION_END, @@ -183,9 +179,9 @@ extern int parse_options_subcommand(int argc, const char **argv, const char *const subcommands[], const char *usagestr[], int flags); -extern NORETURN void usage_with_options(const char * const *usagestr, +extern __noreturn void usage_with_options(const char * const *usagestr, const struct option *options); -extern NORETURN __attribute__((format(printf,3,4))) +extern __noreturn __attribute__((format(printf,3,4))) void usage_with_options_msg(const char * const *usagestr, const struct option *options, const char *fmt, ...); diff --git a/tools/lib/subcmd/subcmd-util.h b/tools/lib/subcmd/subcmd-util.h index b2aec04fce8f..dfac76e35ac7 100644 --- a/tools/lib/subcmd/subcmd-util.h +++ b/tools/lib/subcmd/subcmd-util.h @@ -5,8 +5,7 @@ #include #include #include - -#define NORETURN __attribute__((__noreturn__)) +#include static inline void report(const char *prefix, const char *err, va_list params) { @@ -15,7 +14,7 @@ static inline void report(const char *prefix, const char *err, va_list params) fprintf(stderr, " %s%s\n", prefix, msg); } -static NORETURN inline void die(const char *err, ...) +static __noreturn inline void die(const char *err, ...) { va_list params; From patchwork Tue Apr 18 21:27:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 85079 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp3141935vqo; Tue, 18 Apr 2023 14:38:14 -0700 (PDT) X-Google-Smtp-Source: AKy350argiF9nt7/xpLoOG5vI5D5baDcu5/0gONNIZ6iPEYJHg1iiO2PW12upauqh7NHEnTmH3fz X-Received: by 2002:a17:902:e812:b0:1a3:d5af:9b6f with SMTP id u18-20020a170902e81200b001a3d5af9b6fmr3775738plg.19.1681853893846; Tue, 18 Apr 2023 14:38:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681853893; cv=none; d=google.com; s=arc-20160816; b=stU/MRz/2t9reKGUymRp2O5+oY8gnpNBdyz3OjjFyDwFKPl+GwXU3fWcBmbftXvXC9 T55aF38RQtklwfMo1tQea65o1O+DIwf9S19lfSFtHiq5KfRG8bo1XPlnTHp4efbSex7s rwVX+MZ3kglALEXsGHKOAzbULChPYR4Yj81lfedKwnAG4ardqlWWpuPz7NVdgOMLmZrN M6F3Au7hfvGQ5pFaokksZ51qZUsWqPbyQ2/Q2npA46U0e8idgqUDYSRmOKqLOE/Bks/B Hnqu6joB3WjjJZDR6xa2lSileh8b8xnyU28+KPmlh1VFshpID4prZHwdCHTHpv5VmUg6 4KHw== 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=xBOr2vgj8ZOHyNrebkW94/OgsbSdg9m9IOdgJVQD1fY=; b=kSBZHPQOp6iMPhiJlgFlHMwq/4kTxHJfdzGdcxHDJqMVGBrbLVBdoHBqfYyA6nuyUd LMaKhz8oeekWN4gS/xY7QwoXM0H2qfBFLjG60n0HEQ65DjNbEWZ6PUu4OKMbdIDVceXX 7Vvhk0ypvAyaE0eo3kBx3HUQ0HJIcO87cG9SVdMZqHRuwuTtA/pUXiEElSSsSMf8BNNa qfj4tbTsjs0KFcfs6pTsm3Jtt6TiYs+k+j7vFPWRTFJylI+lpMYIlOQLKmwLBveRHN02 7WV9bXUtDnaW77cd1h0mMmhyRPO7VdY0fxkszXw81GOw0dxH8ULMRl/Gm02PYIR5W5Xc vDNA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=pk0raLms; 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 x21-20020a170902ea9500b001a69195f80csi13093678plb.350.2023.04.18.14.37.59; Tue, 18 Apr 2023 14:38:13 -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=pk0raLms; 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 S233011AbjDRV2s (ORCPT + 99 others); Tue, 18 Apr 2023 17:28:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45714 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232999AbjDRV2e (ORCPT ); Tue, 18 Apr 2023 17:28:34 -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 D0C12CC0B for ; Tue, 18 Apr 2023 14:28:13 -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 D12D96395F for ; Tue, 18 Apr 2023 21:28:02 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1075AC4339E; Tue, 18 Apr 2023 21:28:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681853282; bh=ntG9ViCrjPSzd67qUu5eqOdkFLpY/tylKZuYgUZ9cSU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pk0raLmseMDt9vaVephe1yLCLi62LKnBpUmBkCmZlO4/Sn3u7b5Ln3Zq5YmxpVl+4 /t87PR/8MhAMcKqkGZLxm4l1AzGlZAYMNnGoWU97LqXABy7V+oyb7fV2BX5mefj5v9 ZgONh0VS3+sWtvi9PqpNzfztuVF2fvJhT93yBfdsF6NUXBndZ4JFT2xAQj9F9lsBcD Ofa4D3QKqOVN02bDfDOTunZixBiISy78Mo4Lczhwm6GMndgpBvRj/QQviAUl1ckPXc fEoFqkIPx6TAG28sjHwumFEAsFUNVPf8iv/Ywge5y5uV0EGzIkDfuyalEG+UYb/MOf e2KbhGMX43y9Q== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra , Miroslav Benes , Nick Desaulniers Subject: [PATCH v3 8/8] objtool: Move noreturn function list to separate file Date: Tue, 18 Apr 2023 14:27:54 -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=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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?1763551628890354725?= X-GMAIL-MSGID: =?utf-8?q?1763551628890354725?= This makes it a little cleaner and easier to maintain. Suggested-by: Peter Zijlstra Signed-off-by: Josh Poimboeuf --- tools/objtool/Documentation/objtool.txt | 5 ++- tools/objtool/check.c | 44 ++---------------------- tools/objtool/noreturns.h | 45 +++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 44 deletions(-) create mode 100644 tools/objtool/noreturns.h diff --git a/tools/objtool/Documentation/objtool.txt b/tools/objtool/Documentation/objtool.txt index 2cd1fa16ed08..00f0a7e385ec 100644 --- a/tools/objtool/Documentation/objtool.txt +++ b/tools/objtool/Documentation/objtool.txt @@ -306,9 +306,8 @@ the objtool maintainers. 3. file.o: warning: objtool: foo+0x48c: bar() is missing a __noreturn annotation The call from foo() to bar() doesn't return, but bar() 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. + __noreturn annotation. NOTE: In addition to annotating the function + with __noreturn, please also add it to tools/objtool/noreturns.h. 4. file.o: warning: objtool: func(): can't find starting instruction or diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 2047a6d5339b..69794c25f857 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -192,49 +192,11 @@ static bool __dead_end_function(struct objtool_file *file, struct symbol *func, struct instruction *insn; bool empty = true; - /* - * Unfortunately these have to be hard coded because the noreturn - * attribute isn't provided in ELF data. Keep 'em sorted. - */ +#define NORETURN(func) __stringify(func), static const char * const global_noreturns[] = { - "__invalid_creds", - "__module_put_and_kthread_exit", - "__reiserfs_panic", - "__stack_chk_fail", - "__ubsan_handle_builtin_unreachable", - "arch_call_rest_init", - "arch_cpu_idle_dead", - "btrfs_assertfail", - "cpu_bringup_and_idle", - "cpu_startup_entry", - "do_exit", - "do_group_exit", - "do_task_dead", - "ex_handler_msr_mce", - "fortify_panic", - "hlt_play_dead", - "hv_ghcb_terminate", - "kthread_complete_and_exit", - "kthread_exit", - "kunit_try_catch_throw", - "machine_real_restart", - "make_task_dead", - "mpt_halt_firmware", - "nmi_panic_self_stop", - "panic", - "panic_smp_self_stop", - "rest_init", - "rewind_stack_and_make_dead", - "sev_es_terminate", - "snp_abort", - "start_kernel", - "stop_this_cpu", - "usercopy_abort", - "x86_64_start_kernel", - "x86_64_start_reservations", - "xen_cpu_bringup_again", - "xen_start_kernel", +#include "noreturns.h" }; +#undef NORETURN if (!func) return false; diff --git a/tools/objtool/noreturns.h b/tools/objtool/noreturns.h new file mode 100644 index 000000000000..cede6068ddf6 --- /dev/null +++ b/tools/objtool/noreturns.h @@ -0,0 +1,45 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/* + * This is a (sorted!) list of all known __noreturn functions in the kernel. + * It's needed for objtool to properly reverse-engineer the control flow graph. + * + * Yes, this is unfortunate. A better solution is in the works. + */ +NORETURN(__invalid_creds) +NORETURN(__module_put_and_kthread_exit) +NORETURN(__reiserfs_panic) +NORETURN(__stack_chk_fail) +NORETURN(__ubsan_handle_builtin_unreachable) +NORETURN(arch_call_rest_init) +NORETURN(arch_cpu_idle_dead) +NORETURN(btrfs_assertfail) +NORETURN(cpu_bringup_and_idle) +NORETURN(cpu_startup_entry) +NORETURN(do_exit) +NORETURN(do_group_exit) +NORETURN(do_task_dead) +NORETURN(ex_handler_msr_mce) +NORETURN(fortify_panic) +NORETURN(hlt_play_dead) +NORETURN(hv_ghcb_terminate) +NORETURN(kthread_complete_and_exit) +NORETURN(kthread_exit) +NORETURN(kunit_try_catch_throw) +NORETURN(machine_real_restart) +NORETURN(make_task_dead) +NORETURN(mpt_halt_firmware) +NORETURN(nmi_panic_self_stop) +NORETURN(panic) +NORETURN(panic_smp_self_stop) +NORETURN(rest_init) +NORETURN(rewind_stack_and_make_dead) +NORETURN(sev_es_terminate) +NORETURN(snp_abort) +NORETURN(start_kernel) +NORETURN(stop_this_cpu) +NORETURN(usercopy_abort) +NORETURN(x86_64_start_kernel) +NORETURN(x86_64_start_reservations) +NORETURN(xen_cpu_bringup_again) +NORETURN(xen_start_kernel)