From dfc6944b1c5ffe2cb1e43483ce56c343e9a06fae Mon Sep 17 00:00:00 2001 From: Andrey Zhizhikin Date: Tue, 19 Nov 2019 20:02:51 +0000 Subject: [PATCH] linux-fslc-imx_4.9-1.0.x: replace patchset to the one from stable Replace the patchset, which resolves kernel compilation issues when gcc9 is used. Original patchset introduced here was the initial commit that solved the issue, while this patchset is cherry-picked from stable tree branch linux-4.9.y and included included in v4.9.188 upwards. Once linux-fslc-imx would get updated past v4.9.188 - this patchset should be removed from the layer. Signed-off-by: Andrey Zhizhikin --- ...-compiler_attributes.h-to-support-GC.patch | 47 ++++++ ...ttributes-add-support-for-copy-gcc-9.patch | 132 ----------------- ...dule.h-copy-__init-__exit-attrs-to-i.patch | 84 +++++++++++ ...ux-module.h-copy-init-exit-attrs-to-.patch | 135 ------------------ .../linux/linux-fslc-imx_4.9-1.0.x.bb | 4 +- 5 files changed, 133 insertions(+), 269 deletions(-) create mode 100644 recipes-kernel/linux/linux-fslc-imx/0001-Backport-minimal-compiler_attributes.h-to-support-GC.patch delete mode 100644 recipes-kernel/linux/linux-fslc-imx/0001-compiler-attributes-add-support-for-copy-gcc-9.patch create mode 100644 recipes-kernel/linux/linux-fslc-imx/0002-include-linux-module.h-copy-__init-__exit-attrs-to-i.patch delete mode 100644 recipes-kernel/linux/linux-fslc-imx/0002-include-linux-module.h-copy-init-exit-attrs-to-.patch diff --git a/recipes-kernel/linux/linux-fslc-imx/0001-Backport-minimal-compiler_attributes.h-to-support-GC.patch b/recipes-kernel/linux/linux-fslc-imx/0001-Backport-minimal-compiler_attributes.h-to-support-GC.patch new file mode 100644 index 00000000..aef97ea6 --- /dev/null +++ b/recipes-kernel/linux/linux-fslc-imx/0001-Backport-minimal-compiler_attributes.h-to-support-GC.patch @@ -0,0 +1,47 @@ +From fe5844365ec6c4d61838f289926f4d55da94d2fb Mon Sep 17 00:00:00 2001 +From: Miguel Ojeda +Date: Fri, 2 Aug 2019 12:37:56 +0200 +Subject: [PATCH 1/2] Backport minimal compiler_attributes.h to support GCC 9 + +This adds support for __copy to v4.9.y so that we can use it in +init/exit_module to avoid -Werror=missing-attributes errors on GCC 9. + +Link: https://lore.kernel.org/lkml/259986242.BvXPX32bHu@devpool35/ +Cc: +Suggested-by: Rolf Eike Beer +Signed-off-by: Miguel Ojeda +Signed-off-by: Greg Kroah-Hartman +--- + include/linux/compiler.h | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/include/linux/compiler.h b/include/linux/compiler.h +index 3050de0dac96..0020ee1cab37 100644 +--- a/include/linux/compiler.h ++++ b/include/linux/compiler.h +@@ -54,6 +54,22 @@ extern void __chk_io_ptr(const volatile void __iomem *); + + #ifdef __KERNEL__ + ++/* ++ * Minimal backport of compiler_attributes.h to add support for __copy ++ * to v4.9.y so that we can use it in init/exit_module to avoid ++ * -Werror=missing-attributes errors on GCC 9. ++ */ ++#ifndef __has_attribute ++# define __has_attribute(x) __GCC4_has_attribute_##x ++# define __GCC4_has_attribute___copy__ 0 ++#endif ++ ++#if __has_attribute(__copy__) ++# define __copy(symbol) __attribute__((__copy__(symbol))) ++#else ++# define __copy(symbol) ++#endif ++ + #ifdef __GNUC__ + #include + #endif +-- +2.17.1 + diff --git a/recipes-kernel/linux/linux-fslc-imx/0001-compiler-attributes-add-support-for-copy-gcc-9.patch b/recipes-kernel/linux/linux-fslc-imx/0001-compiler-attributes-add-support-for-copy-gcc-9.patch deleted file mode 100644 index a234c0c3..00000000 --- a/recipes-kernel/linux/linux-fslc-imx/0001-compiler-attributes-add-support-for-copy-gcc-9.patch +++ /dev/null @@ -1,132 +0,0 @@ -From mboxrd@z Thu Jan 1 00:00:00 1970 -Return-Path: -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -X-Spam-Level: -X-Spam-Status: No, score=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, - DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, - SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT - autolearn=ham autolearn_force=no version=3.4.0 -Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) - by smtp.lore.kernel.org (Postfix) with ESMTP id 354C8C282CE - for ; Tue, 4 Jun 2019 13:25:01 +0000 (UTC) -Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) - by mail.kernel.org (Postfix) with ESMTP id 0D01C24291 - for ; Tue, 4 Jun 2019 13:25:01 +0000 (UTC) -Authentication-Results: mail.kernel.org; - dkim=pass (1024-bit key) header.d=agner.ch header.i=@agner.ch header.b="HG5nfXC5" -Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand - id S1727392AbfFDNZA (ORCPT ); - Tue, 4 Jun 2019 09:25:00 -0400 -Received: from mail.kmu-office.ch ([178.209.48.109]:48336 "EHLO - mail.kmu-office.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org - with ESMTP id S1727340AbfFDNZA (ORCPT - ); Tue, 4 Jun 2019 09:25:00 -0400 -Received: from trochilidae.toradex.int (unknown [46.140.72.82]) - by mail.kmu-office.ch (Postfix) with ESMTPSA id 8BE845C2138; - Tue, 4 Jun 2019 15:24:55 +0200 (CEST) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=agner.ch; s=dkim; - t=1559654695; - h=from:from:reply-to:subject:subject:date:date:message-id:message-id: - to:to:cc:cc:mime-version:mime-version:content-type:content-type: - content-transfer-encoding:content-transfer-encoding:in-reply-to: - references; bh=2lQNwDLO9/HfsHTvSmLn5csGG1S09yt0LuSYqXeE0y0=; - b=HG5nfXC5qPZvu4E7tM2iveXY8wtjralMObB8KMvD1S6NWkkOwkeLjXonm495Hz+G+geOig - NlbMrAg5b6wYCzvMgqUeSBmGkYCjB/7IFlotEiTcUNmOCorD2pTasqUOcpObuc6WqBkEjM - 3seyrLJVs51y9A3weXf9CMO3OMOXwRA= -From: Stefan Agner -To: gregkh@linuxfoundation.org -Cc: stable@vger.kernel.org, - Miguel Ojeda , - Martin Sebor , - Nick Desaulniers , - Stefan Agner -Subject: [PATCH BACKPORT 4.19 1/2] Compiler Attributes: add support for __copy (gcc >= 9) -Date: Tue, 4 Jun 2019 15:24:40 +0200 -Message-Id: <20190604132441.15383-1-stefan@agner.ch> -X-Mailer: git-send-email 2.21.0 -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit -Sender: stable-owner@vger.kernel.org -Precedence: bulk -List-ID: -X-Mailing-List: stable@vger.kernel.org -Archived-At: -List-Archive: -List-Post: - -From: Miguel Ojeda - -[ Upstream commit c0d9782f5b6d7157635ae2fd782a4b27d55a6013 ] - ->From the GCC manual: - - copy - copy(function) - - The copy attribute applies the set of attributes with which function - has been declared to the declaration of the function to which - the attribute is applied. The attribute is designed for libraries - that define aliases or function resolvers that are expected - to specify the same set of attributes as their targets. The copy - attribute can be used with functions, variables, or types. However, - the kind of symbol to which the attribute is applied (either - function or variable) must match the kind of symbol to which - the argument refers. The copy attribute copies only syntactic and - semantic attributes but not attributes that affect a symbol’s - linkage or visibility such as alias, visibility, or weak. - The deprecated attribute is also not copied. - - https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html - -The upcoming GCC 9 release extends the -Wmissing-attributes warnings -(enabled by -Wall) to C and aliases: it warns when particular function -attributes are missing in the aliases but not in their target, e.g.: - - void __cold f(void) {} - void __alias("f") g(void); - -diagnoses: - - warning: 'g' specifies less restrictive attribute than - its target 'f': 'cold' [-Wmissing-attributes] - -Using __copy(f) we can copy the __cold attribute from f to g: - - void __cold f(void) {} - void __copy(f) __alias("f") g(void); - -This attribute is most useful to deal with situations where an alias -is declared but we don't know the exact attributes the target has. - -For instance, in the kernel, the widely used module_init/exit macros -define the init/cleanup_module aliases, but those cannot be marked -always as __init/__exit since some modules do not have their -functions marked as such. - -Cc: # 4.14+ -Suggested-by: Martin Sebor -Reviewed-by: Nick Desaulniers -Signed-off-by: Miguel Ojeda -Signed-off-by: Stefan Agner ---- - include/linux/compiler-gcc.h | 4 ++++ - include/linux/compiler_types.h | 4 ++++ - 2 files changed, 8 insertions(+) - -Index: git/include/linux/compiler-gcc.h -=================================================================== ---- git.orig/include/linux/compiler-gcc.h -+++ git/include/linux/compiler-gcc.h -@@ -282,6 +282,10 @@ - - #endif /* gcc version >= 40000 specific checks */ - -+#if GCC_VERSION >= 90100 -+#define __copy(symbol) __attribute__((__copy__(symbol))) -+#endif -+ - #if !defined(__noclone) - #define __noclone /* not needed */ - #endif diff --git a/recipes-kernel/linux/linux-fslc-imx/0002-include-linux-module.h-copy-__init-__exit-attrs-to-i.patch b/recipes-kernel/linux/linux-fslc-imx/0002-include-linux-module.h-copy-__init-__exit-attrs-to-i.patch new file mode 100644 index 00000000..8472a151 --- /dev/null +++ b/recipes-kernel/linux/linux-fslc-imx/0002-include-linux-module.h-copy-__init-__exit-attrs-to-i.patch @@ -0,0 +1,84 @@ +From 2d75d1869fb3d9d7d47ae7c0ac6fab4e7dd9487e Mon Sep 17 00:00:00 2001 +From: Miguel Ojeda +Date: Fri, 2 Aug 2019 12:37:57 +0200 +Subject: [PATCH 2/2] include/linux/module.h: copy __init/__exit attrs to + init/cleanup_module + +commit a6e60d84989fa0e91db7f236eda40453b0e44afa upstream. + +The upcoming GCC 9 release extends the -Wmissing-attributes warnings +(enabled by -Wall) to C and aliases: it warns when particular function +attributes are missing in the aliases but not in their target. + +In particular, it triggers for all the init/cleanup_module +aliases in the kernel (defined by the module_init/exit macros), +ending up being very noisy. + +These aliases point to the __init/__exit functions of a module, +which are defined as __cold (among other attributes). However, +the aliases themselves do not have the __cold attribute. + +Since the compiler behaves differently when compiling a __cold +function as well as when compiling paths leading to calls +to __cold functions, the warning is trying to point out +the possibly-forgotten attribute in the alias. + +In order to keep the warning enabled, we decided to silence +this case. Ideally, we would mark the aliases directly +as __init/__exit. However, there are currently around 132 modules +in the kernel which are missing __init/__exit in their init/cleanup +functions (either because they are missing, or for other reasons, +e.g. the functions being called from somewhere else); and +a section mismatch is a hard error. + +A conservative alternative was to mark the aliases as __cold only. +However, since we would like to eventually enforce __init/__exit +to be always marked, we chose to use the new __copy function +attribute (introduced by GCC 9 as well to deal with this). +With it, we copy the attributes used by the target functions +into the aliases. This way, functions that were not marked +as __init/__exit won't have their aliases marked either, +and therefore there won't be a section mismatch. + +Note that the warning would go away marking either the extern +declaration, the definition, or both. However, we only mark +the definition of the alias, since we do not want callers +(which only see the declaration) to be compiled as if the function +was __cold (and therefore the paths leading to those calls +would be assumed to be unlikely). + +Link: https://lore.kernel.org/lkml/259986242.BvXPX32bHu@devpool35/ +Cc: +Link: https://lore.kernel.org/lkml/20190123173707.GA16603@gmail.com/ +Link: https://lore.kernel.org/lkml/20190206175627.GA20399@gmail.com/ +Suggested-by: Martin Sebor +Acked-by: Jessica Yu +Signed-off-by: Miguel Ojeda +Signed-off-by: Greg Kroah-Hartman +--- + include/linux/module.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/include/linux/module.h b/include/linux/module.h +index 0c3207d26ac0..06aca48417c9 100644 +--- a/include/linux/module.h ++++ b/include/linux/module.h +@@ -129,13 +129,13 @@ extern void cleanup_module(void); + #define module_init(initfn) \ + static inline initcall_t __inittest(void) \ + { return initfn; } \ +- int init_module(void) __attribute__((alias(#initfn))); ++ int init_module(void) __copy(initfn) __attribute__((alias(#initfn))); + + /* This is only required if you want to be unloadable. */ + #define module_exit(exitfn) \ + static inline exitcall_t __exittest(void) \ + { return exitfn; } \ +- void cleanup_module(void) __attribute__((alias(#exitfn))); ++ void cleanup_module(void) __copy(exitfn) __attribute__((alias(#exitfn))); + + #endif + +-- +2.17.1 + diff --git a/recipes-kernel/linux/linux-fslc-imx/0002-include-linux-module.h-copy-init-exit-attrs-to-.patch b/recipes-kernel/linux/linux-fslc-imx/0002-include-linux-module.h-copy-init-exit-attrs-to-.patch deleted file mode 100644 index 758a8a07..00000000 --- a/recipes-kernel/linux/linux-fslc-imx/0002-include-linux-module.h-copy-init-exit-attrs-to-.patch +++ /dev/null @@ -1,135 +0,0 @@ -From mboxrd@z Thu Jan 1 00:00:00 1970 -Return-Path: -X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on - aws-us-west-2-korg-lkml-1.web.codeaurora.org -X-Spam-Level: -X-Spam-Status: No, score=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, - DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, - SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT - autolearn=ham autolearn_force=no version=3.4.0 -Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) - by smtp.lore.kernel.org (Postfix) with ESMTP id 63BF0C46470 - for ; Tue, 4 Jun 2019 13:25:01 +0000 (UTC) -Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) - by mail.kernel.org (Postfix) with ESMTP id 3D9B223D29 - for ; Tue, 4 Jun 2019 13:25:01 +0000 (UTC) -Authentication-Results: mail.kernel.org; - dkim=pass (1024-bit key) header.d=agner.ch header.i=@agner.ch header.b="QWkQ/3jN" -Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand - id S1727340AbfFDNZA (ORCPT ); - Tue, 4 Jun 2019 09:25:00 -0400 -Received: from mail.kmu-office.ch ([178.209.48.109]:48348 "EHLO - mail.kmu-office.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org - with ESMTP id S1727343AbfFDNZA (ORCPT - ); Tue, 4 Jun 2019 09:25:00 -0400 -Received: from trochilidae.toradex.int (unknown [46.140.72.82]) - by mail.kmu-office.ch (Postfix) with ESMTPSA id A3CC45C1F29; - Tue, 4 Jun 2019 15:24:57 +0200 (CEST) -DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=agner.ch; s=dkim; - t=1559654697; - h=from:from:reply-to:subject:subject:date:date:message-id:message-id: - to:to:cc:cc:mime-version:mime-version:content-type: - content-transfer-encoding:content-transfer-encoding: - in-reply-to:in-reply-to:references:references; - bh=tc6JvYRo2QJoJQVnFd/oGDG0/z6TF30OxAP+nBfruDc=; - b=QWkQ/3jNBkysiiD5SMb2UF+0YtSMCbOyP2/dUXeDQChYIal8jUex+QvYHjBh6l4Gff6WwG - 3Zd44X6jE/KqxygBkoglOSb/dHwZ5AS8B8vpUM8vh2CzhrW4fD9eguoEIImOJJZ9RHgx0b - Gwno+ZPPhuPOcFbSrBwNsKK6mZLGttY= -From: Stefan Agner -To: gregkh@linuxfoundation.org -Cc: stable@vger.kernel.org, - Miguel Ojeda , - Martin Sebor , - Jessica Yu , Stefan Agner -Subject: [PATCH BACKPORT 4.19 2/2] include/linux/module.h: copy __init/__exit attrs to init/cleanup_module -Date: Tue, 4 Jun 2019 15:24:41 +0200 -Message-Id: <20190604132441.15383-2-stefan@agner.ch> -X-Mailer: git-send-email 2.21.0 -In-Reply-To: <20190604132441.15383-1-stefan@agner.ch> -References: <20190604132441.15383-1-stefan@agner.ch> -MIME-Version: 1.0 -Content-Transfer-Encoding: 8bit -Sender: stable-owner@vger.kernel.org -Precedence: bulk -List-ID: -X-Mailing-List: stable@vger.kernel.org -Archived-At: -List-Archive: -List-Post: - -From: Miguel Ojeda - -[ Upstream commit a6e60d84989fa0e91db7f236eda40453b0e44afa ] - -The upcoming GCC 9 release extends the -Wmissing-attributes warnings -(enabled by -Wall) to C and aliases: it warns when particular function -attributes are missing in the aliases but not in their target. - -In particular, it triggers for all the init/cleanup_module -aliases in the kernel (defined by the module_init/exit macros), -ending up being very noisy. - -These aliases point to the __init/__exit functions of a module, -which are defined as __cold (among other attributes). However, -the aliases themselves do not have the __cold attribute. - -Since the compiler behaves differently when compiling a __cold -function as well as when compiling paths leading to calls -to __cold functions, the warning is trying to point out -the possibly-forgotten attribute in the alias. - -In order to keep the warning enabled, we decided to silence -this case. Ideally, we would mark the aliases directly -as __init/__exit. However, there are currently around 132 modules -in the kernel which are missing __init/__exit in their init/cleanup -functions (either because they are missing, or for other reasons, -e.g. the functions being called from somewhere else); and -a section mismatch is a hard error. - -A conservative alternative was to mark the aliases as __cold only. -However, since we would like to eventually enforce __init/__exit -to be always marked, we chose to use the new __copy function -attribute (introduced by GCC 9 as well to deal with this). -With it, we copy the attributes used by the target functions -into the aliases. This way, functions that were not marked -as __init/__exit won't have their aliases marked either, -and therefore there won't be a section mismatch. - -Note that the warning would go away marking either the extern -declaration, the definition, or both. However, we only mark -the definition of the alias, since we do not want callers -(which only see the declaration) to be compiled as if the function -was __cold (and therefore the paths leading to those calls -would be assumed to be unlikely). - -Cc: # 4.14+ -Link: https://lore.kernel.org/lkml/20190123173707.GA16603@gmail.com/ -Link: https://lore.kernel.org/lkml/20190206175627.GA20399@gmail.com/ -Suggested-by: Martin Sebor -Acked-by: Jessica Yu -Signed-off-by: Miguel Ojeda -Signed-off-by: Stefan Agner ---- - include/linux/module.h | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -Index: git/include/linux/module.h -=================================================================== ---- git.orig/include/linux/module.h -+++ git/include/linux/module.h -@@ -129,13 +129,13 @@ extern void cleanup_module(void); - #define module_init(initfn) \ - static inline initcall_t __inittest(void) \ - { return initfn; } \ -- int init_module(void) __attribute__((alias(#initfn))); -+ int init_module(void) __copy(initfn) __attribute__((alias(#initfn))); - - /* This is only required if you want to be unloadable. */ - #define module_exit(exitfn) \ - static inline exitcall_t __exittest(void) \ - { return exitfn; } \ -- void cleanup_module(void) __attribute__((alias(#exitfn))); -+ void cleanup_module(void) __copy(exitfn) __attribute__((alias(#exitfn))); - - #endif - diff --git a/recipes-kernel/linux/linux-fslc-imx_4.9-1.0.x.bb b/recipes-kernel/linux/linux-fslc-imx_4.9-1.0.x.bb index 3f4371d3..7114cd22 100644 --- a/recipes-kernel/linux/linux-fslc-imx_4.9-1.0.x.bb +++ b/recipes-kernel/linux/linux-fslc-imx_4.9-1.0.x.bb @@ -12,8 +12,8 @@ PV .= "+git${SRCPV}" SRCBRANCH = "4.9-1.0.x-imx" SRCREV = "953c6e30c9701fda69ef08e2476c541dc4fb1453" -SRC_URI += "file://0001-compiler-attributes-add-support-for-copy-gcc-9.patch \ - file://0002-include-linux-module.h-copy-init-exit-attrs-to-.patch \ +SRC_URI += "file://0001-Backport-minimal-compiler_attributes.h-to-support-GC.patch \ + file://0002-include-linux-module.h-copy-__init-__exit-attrs-to-i.patch \ " COMPATIBLE_MACHINE = "(mx6|mx7)" -- 2.40.1