• Miguel Ojeda's avatar
    Compiler Attributes: add support for __copy (gcc >= 9) · 44ea70c1
    Miguel Ojeda authored
    commit c0d9782f upstream.
    
    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.
    Suggested-by: default avatarMartin Sebor <msebor@gcc.gnu.org>
    Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: default avatarMiguel Ojeda <miguel.ojeda.sandonis@gmail.com>
    Signed-off-by: default avatarStefan Agner <stefan@agner.ch>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    44ea70c1
Name
Last commit
Last update
..
acpi Loading commit data...
asm-generic Loading commit data...
clocksource Loading commit data...
crypto Loading commit data...
drm Loading commit data...
dt-bindings Loading commit data...
keys Loading commit data...
kvm Loading commit data...
linux Loading commit data...
math-emu Loading commit data...
media Loading commit data...
memory Loading commit data...
misc Loading commit data...
net Loading commit data...
pcmcia Loading commit data...
ras Loading commit data...
rdma Loading commit data...
scsi Loading commit data...
soc Loading commit data...
sound Loading commit data...
target Loading commit data...
trace Loading commit data...
uapi Loading commit data...
video Loading commit data...
xen Loading commit data...