From patchwork Sat Apr 8 00:10:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 81101 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp596117vqo; Fri, 7 Apr 2023 17:20:36 -0700 (PDT) X-Google-Smtp-Source: AKy350YGQCD4tckcesMbuLpENKdsNLF6e10dItVnEThmq0bdP4DtaHn61klEVa8LQBd+dJqnTkyS X-Received: by 2002:a17:906:edc6:b0:93e:24f6:d7a3 with SMTP id sb6-20020a170906edc600b0093e24f6d7a3mr1133335ejb.8.1680913236279; Fri, 07 Apr 2023 17:20:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680913236; cv=none; d=google.com; s=arc-20160816; b=DjQ2nuca2vJ1TpdY3itEkv9k/AI90RDob9Uyy77DNGeTdGtFGVefyoPTtxK08VjKEm TWnWo8K7uWcmOcwlYmGW/a0MSOhwNSbFxNtwN8sEcN4lpz5/l5Y+MxF1iWQsd2XAumSx VgbjDst2w+DA+U5EBMPDcElWfKtLVQSm8JIbD4oPqw1QBlsGJ+DYBmyfHB79ZAcBJKTN 3gIUm+abdZjAqnxTq81HA/DinJgYctIvxZn45pYSEJ0AwAE2uKsSL5uetw9QeJbP89Xm u1h17Lz9LvQOlkolCKD+cPzI/TwaBkWrdl2cs3WSaM5UdFkT6TmPQxNkFGsuJfXIPDPj iizQ== 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=2AMyCQ7cul2DO+ONJJhyvWDfDPkLyH5JISGixWGH+nE=; b=akh5bUhhyN3xZFJg77Lq3dKMrrtccQ4hHLed37tw/nOoLOtsVAM5ri0MBs0qoRJaGw mn1wk/W00LqBxpnme33zFh/GO/11L1hItOYTkUdh6Y0cihIdixhPZL+Gl5EYvD18866e E07YIbKLjYT1AypUZ4p3Xa1ujsMzoSyOkcFVxwhqjBkxsPep6ArwtAApyUsFmGHOx7v3 AKKbtUiRy1cj/CpTXad8xHBKvkanUY8vg1XL+YQmEBTMGdgvAJetTR/MSlYTALsPDb0K pj4aflWQ73gmkD71NZyiPuyK3KnHgAcgVHhpZKoHfpSnbGGN82NCXaorWROZ+47LXkgO NE2A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=F2bFZsZQ; 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 b5-20020a170906708500b0093defbd628fsi4550340ejk.1046.2023.04.07.17.20.12; Fri, 07 Apr 2023 17:20: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=F2bFZsZQ; 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 S230038AbjDHAKv (ORCPT + 99 others); Fri, 7 Apr 2023 20:10:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229931AbjDHAKY (ORCPT ); Fri, 7 Apr 2023 20:10:24 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8B3B912851; Fri, 7 Apr 2023 17:10:23 -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 6302664D4F; Sat, 8 Apr 2023 00:10:23 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6365FC4339C; Sat, 8 Apr 2023 00:10:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1680912622; bh=nPPJKoXoUDUyf2kVRAhGsCxgWLcp4kLpuj6wa6/Qr/k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=F2bFZsZQsdk0J2F99z8mRARYtyBZ4J35WIXonbBeBI/HVs0WBc4rjteQsgv6nYPRN ccXqfuJQl+2xsaizeMorppAdC1QWJOSMvXiGAdKMvFawvJOzhQjHE3alFD4FiMPwT/ QaBLzOQTT1XmEt8t+mvz1N8/o01fOc8Go5IZwFEsZpXfhKv8t9N2C5tYHwylNC804l /jY8suzff/3WiJ4Ej+1GHD/PMXDXDKpq/3Ho+d8p3/B7nf12jMe78hspXI2xe3ZNsS 9IAdJQsdOA3utdmErpBNWQ1DDGaSocRhjaORS9J85QpCaa+L9yBhjhJZJiibxVFc/m JyM6lkaQBameg== From: Josh Poimboeuf To: x86@kernel.org Cc: linux-kernel@vger.kernel.org, Peter Zijlstra , Miroslav Benes , linux-btrfs@vger.kernel.org, Mark Rutland , linux-scsi@vger.kernel.org, linux-hyperv@vger.kernel.org, Arnd Bergmann , "Guilherme G . Piccoli" , Michael Kelley Subject: [PATCH 09/11] objtool: Include weak functions in global_noreturns check Date: Fri, 7 Apr 2023 17:10:02 -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?1762565277600474681?= X-GMAIL-MSGID: =?utf-8?q?1762565277600474681?= If a global function doesn't return, and its prototype has the __noreturn attribute, its weak counterpart must also not return so that it matches the prototype and meets call site expectations. To properly follow the compiled control flow at the call sites, change the global_noreturns check to include both global and weak functions. On the other hand, if a weak function isn't in global_noreturns, assume the prototype doesn't have __noreturn. Even if the weak function doesn't return, call sites treat it like a returnable function. Signed-off-by: Josh Poimboeuf --- tools/objtool/check.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/objtool/check.c b/tools/objtool/check.c index a926da218c01..a42a2af99ea2 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -239,14 +239,14 @@ static bool __dead_end_function(struct objtool_file *file, struct symbol *func, if (!func) return false; - if (func->bind == STB_WEAK) - return false; - - if (func->bind == STB_GLOBAL) + if (func->bind == STB_GLOBAL || func->bind == STB_WEAK) for (i = 0; i < ARRAY_SIZE(global_noreturns); i++) if (!strcmp(func->name, global_noreturns[i])) return true; + if (func->bind == STB_WEAK) + return false; + if (!func->len) return false;