Re: [PATCH BACKPORT 4.19 1/2] Compiler Attributes: add support for __copy (gcc >= 9)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jun 04, 2019 at 03:24:40PM +0200, Stefan Agner wrote:
> From: Miguel Ojeda <miguel.ojeda.sandonis@xxxxxxxxx>
> 
> [ 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: <stable@xxxxxxxxxxxxxxx> # 4.14+
> Suggested-by: Martin Sebor <msebor@xxxxxxxxxxx>
> Reviewed-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>
> Signed-off-by: Miguel Ojeda <miguel.ojeda.sandonis@xxxxxxxxx>
> Signed-off-by: Stefan Agner <stefan@xxxxxxxx>
> ---
>  include/linux/compiler-gcc.h   | 4 ++++
>  include/linux/compiler_types.h | 4 ++++
>  2 files changed, 8 insertions(+)

Thanks for this, and the 4.14 updated series, I've applied them all now.

greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux