These two patches are the 5th and 6th of the Compiler Attributes series,
which Stefan and Nick requested to go into v4.19 so that the clang ARM32
build is fixed. The v5 of Compiler Attributes will have these two removed
if this goes in.
Miguel Ojeda (2):
Compiler Attributes: naked was fixed in gcc 4.6
Compiler Attributes: naked can be shared
include/linux/compiler-gcc.h | 14 --------------
include/linux/compiler_types.h | 8 ++++++++
2 files changed, 8 insertions(+), 14 deletions(-)
--
2.17.1
The naked attribute is supported by at least gcc >= 4.6 (for ARM,
which is the only current user), gcc >= 8 (for x86), clang >= 3.1
and icc >= 13. See https://godbolt.org/z/350Dyc
Therefore, move it out of compiler-gcc.h so that the definition
is shared by all compilers.
This also fixes Clang support for ARM32 --- 815f0ddb346c
("include/linux/compiler*.h: make compiler-*.h mutually exclusive").
Cc: Stefan Agner <[email protected]>
Cc: Rasmus Villemoes <[email protected]>
Cc: Eli Friedman <[email protected]>
Cc: Christopher Li <[email protected]>
Cc: Kees Cook <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Geert Uytterhoeven <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Joe Perches <[email protected]>
Cc: Dominique Martinet <[email protected]>
Cc: Linus Torvalds <[email protected]>
Cc: [email protected]
Suggested-by: Arnd Bergmann <[email protected]>
Reviewed-by: Luc Van Oostenryck <[email protected]>
Reviewed-by: Nick Desaulniers <[email protected]>
Signed-off-by: Miguel Ojeda <[email protected]>
---
include/linux/compiler-gcc.h | 8 --------
include/linux/compiler_types.h | 8 ++++++++
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index 25d3dd6b2702..4d36b27214fd 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -79,14 +79,6 @@
#define __noretpoline __attribute__((indirect_branch("keep")))
#endif
-/*
- * it doesn't make sense on ARM (currently the only user of __naked)
- * to trace naked functions because then mcount is called without
- * stack and frame pointer being set up and there is no chance to
- * restore the lr register to the value before mcount was called.
- */
-#define __naked __attribute__((naked)) notrace
-
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
#define __optimize(level) __attribute__((__optimize__(level)))
diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
index 3525c179698c..db192becfec4 100644
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -226,6 +226,14 @@ struct ftrace_likely_data {
#define notrace __attribute__((no_instrument_function))
#endif
+/*
+ * it doesn't make sense on ARM (currently the only user of __naked)
+ * to trace naked functions because then mcount is called without
+ * stack and frame pointer being set up and there is no chance to
+ * restore the lr register to the value before mcount was called.
+ */
+#define __naked __attribute__((naked)) notrace
+
#define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
/*
--
2.17.1
Commit 9c695203a7dd ("compiler-gcc.h: gcc-4.5 needs noclone
and noinline on __naked functions") added noinline and noclone
as a workaround for a gcc 4.5 bug, which was resolved in 4.6.0.
Since now the minimum gcc supported version is 4.6,
we can clean it up.
See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=44290
and https://godbolt.org/z/h6NMIL
Cc: Stefan Agner <[email protected]>
Cc: Rasmus Villemoes <[email protected]>
Cc: Eli Friedman <[email protected]>
Cc: Christopher Li <[email protected]>
Cc: Kees Cook <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Geert Uytterhoeven <[email protected]>
Cc: Arnd Bergmann <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Joe Perches <[email protected]>
Cc: Dominique Martinet <[email protected]>
Cc: Linus Torvalds <[email protected]>
Cc: [email protected]
Reviewed-by: Luc Van Oostenryck <[email protected]>
Reviewed-by: Nick Desaulniers <[email protected]>
Signed-off-by: Miguel Ojeda <[email protected]>
---
include/linux/compiler-gcc.h | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index 763bbad1e258..25d3dd6b2702 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -84,14 +84,8 @@
* to trace naked functions because then mcount is called without
* stack and frame pointer being set up and there is no chance to
* restore the lr register to the value before mcount was called.
- *
- * The asm() bodies of naked functions often depend on standard calling
- * conventions, therefore they must be noinline and noclone.
- *
- * GCC 4.[56] currently fail to enforce this, so we must do so ourselves.
- * See GCC PR44290.
*/
-#define __naked __attribute__((naked)) noinline __noclone notrace
+#define __naked __attribute__((naked)) notrace
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
--
2.17.1
On 13.09.2018 16:59, Miguel Ojeda wrote:
> Commit 9c695203a7dd ("compiler-gcc.h: gcc-4.5 needs noclone
> and noinline on __naked functions") added noinline and noclone
> as a workaround for a gcc 4.5 bug, which was resolved in 4.6.0.
>
> Since now the minimum gcc supported version is 4.6,
> we can clean it up.
>
> See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=44290
> and https://godbolt.org/z/h6NMIL
>
> Cc: Stefan Agner <[email protected]>
> Cc: Rasmus Villemoes <[email protected]>
> Cc: Eli Friedman <[email protected]>
> Cc: Christopher Li <[email protected]>
> Cc: Kees Cook <[email protected]>
> Cc: Ingo Molnar <[email protected]>
> Cc: Geert Uytterhoeven <[email protected]>
> Cc: Arnd Bergmann <[email protected]>
> Cc: Greg Kroah-Hartman <[email protected]>
> Cc: Masahiro Yamada <[email protected]>
> Cc: Joe Perches <[email protected]>
> Cc: Dominique Martinet <[email protected]>
> Cc: Linus Torvalds <[email protected]>
> Cc: [email protected]
> Reviewed-by: Luc Van Oostenryck <[email protected]>
> Reviewed-by: Nick Desaulniers <[email protected]>
> Signed-off-by: Miguel Ojeda <[email protected]>
Reviewed-by: Stefan Agner <[email protected]>
--
Stefan
> ---
> include/linux/compiler-gcc.h | 8 +-------
> 1 file changed, 1 insertion(+), 7 deletions(-)
>
> diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
> index 763bbad1e258..25d3dd6b2702 100644
> --- a/include/linux/compiler-gcc.h
> +++ b/include/linux/compiler-gcc.h
> @@ -84,14 +84,8 @@
> * to trace naked functions because then mcount is called without
> * stack and frame pointer being set up and there is no chance to
> * restore the lr register to the value before mcount was called.
> - *
> - * The asm() bodies of naked functions often depend on standard calling
> - * conventions, therefore they must be noinline and noclone.
> - *
> - * GCC 4.[56] currently fail to enforce this, so we must do so ourselves.
> - * See GCC PR44290.
> */
> -#define __naked __attribute__((naked)) noinline __noclone notrace
> +#define __naked __attribute__((naked)) notrace
>
> #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
On 13.09.2018 16:59, Miguel Ojeda wrote:
> The naked attribute is supported by at least gcc >= 4.6 (for ARM,
> which is the only current user), gcc >= 8 (for x86), clang >= 3.1
> and icc >= 13. See https://godbolt.org/z/350Dyc
>
> Therefore, move it out of compiler-gcc.h so that the definition
> is shared by all compilers.
>
> This also fixes Clang support for ARM32 --- 815f0ddb346c
> ("include/linux/compiler*.h: make compiler-*.h mutually exclusive").
>
> Cc: Stefan Agner <[email protected]>
> Cc: Rasmus Villemoes <[email protected]>
> Cc: Eli Friedman <[email protected]>
> Cc: Christopher Li <[email protected]>
> Cc: Kees Cook <[email protected]>
> Cc: Ingo Molnar <[email protected]>
> Cc: Geert Uytterhoeven <[email protected]>
> Cc: Greg Kroah-Hartman <[email protected]>
> Cc: Masahiro Yamada <[email protected]>
> Cc: Joe Perches <[email protected]>
> Cc: Dominique Martinet <[email protected]>
> Cc: Linus Torvalds <[email protected]>
> Cc: [email protected]
> Suggested-by: Arnd Bergmann <[email protected]>
> Reviewed-by: Luc Van Oostenryck <[email protected]>
> Reviewed-by: Nick Desaulniers <[email protected]>
> Signed-off-by: Miguel Ojeda <[email protected]>
Reviewed-by: Stefan Agner <[email protected]>
Ideally this two patches should go into v4.19. Not sure which path the patch should take, MAINTAINERS is not quite clear about that. This fixes 815f0ddb346c ("include/linux/compiler*.h: make compiler-*.h mutually exclusive") for ARM32, which has been merged directly by
Linus, afaict...
--
Stefan
> ---
> include/linux/compiler-gcc.h | 8 --------
> include/linux/compiler_types.h | 8 ++++++++
> 2 files changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
> index 25d3dd6b2702..4d36b27214fd 100644
> --- a/include/linux/compiler-gcc.h
> +++ b/include/linux/compiler-gcc.h
> @@ -79,14 +79,6 @@
> #define __noretpoline __attribute__((indirect_branch("keep")))
> #endif
>
> -/*
> - * it doesn't make sense on ARM (currently the only user of __naked)
> - * to trace naked functions because then mcount is called without
> - * stack and frame pointer being set up and there is no chance to
> - * restore the lr register to the value before mcount was called.
> - */
> -#define __naked __attribute__((naked)) notrace
> -
> #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
>
> #define __optimize(level) __attribute__((__optimize__(level)))
> diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
> index 3525c179698c..db192becfec4 100644
> --- a/include/linux/compiler_types.h
> +++ b/include/linux/compiler_types.h
> @@ -226,6 +226,14 @@ struct ftrace_likely_data {
> #define notrace __attribute__((no_instrument_function))
> #endif
>
> +/*
> + * it doesn't make sense on ARM (currently the only user of __naked)
> + * to trace naked functions because then mcount is called without
> + * stack and frame pointer being set up and there is no chance to
> + * restore the lr register to the value before mcount was called.
> + */
> +#define __naked __attribute__((naked)) notrace
> +
> #define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
>
> /*
On Mon, Sep 17, 2018 at 08:19:50PM -0700, Stefan Agner wrote:
> On 13.09.2018 16:59, Miguel Ojeda wrote:
> > The naked attribute is supported by at least gcc >= 4.6 (for ARM,
> > which is the only current user), gcc >= 8 (for x86), clang >= 3.1
> > and icc >= 13. See https://godbolt.org/z/350Dyc
> >
> > Therefore, move it out of compiler-gcc.h so that the definition
> > is shared by all compilers.
> >
> > This also fixes Clang support for ARM32 --- 815f0ddb346c
> > ("include/linux/compiler*.h: make compiler-*.h mutually exclusive").
> >
> > Cc: Stefan Agner <[email protected]>
> > Cc: Rasmus Villemoes <[email protected]>
> > Cc: Eli Friedman <[email protected]>
> > Cc: Christopher Li <[email protected]>
> > Cc: Kees Cook <[email protected]>
> > Cc: Ingo Molnar <[email protected]>
> > Cc: Geert Uytterhoeven <[email protected]>
> > Cc: Greg Kroah-Hartman <[email protected]>
> > Cc: Masahiro Yamada <[email protected]>
> > Cc: Joe Perches <[email protected]>
> > Cc: Dominique Martinet <[email protected]>
> > Cc: Linus Torvalds <[email protected]>
> > Cc: [email protected]
> > Suggested-by: Arnd Bergmann <[email protected]>
> > Reviewed-by: Luc Van Oostenryck <[email protected]>
> > Reviewed-by: Nick Desaulniers <[email protected]>
> > Signed-off-by: Miguel Ojeda <[email protected]>
>
> Reviewed-by: Stefan Agner <[email protected]>
>
> Ideally this two patches should go into v4.19. Not sure which path the patch should take, MAINTAINERS is not quite clear about that. This fixes 815f0ddb346c ("include/linux/compiler*.h: make compiler-*.h mutually exclusive") for ARM32, which has been merged directly by
> Linus, afaict...
Good point, can you resend these to me with all of the acks added so
far?
thanks,
greg k-h
On Tue, Sep 18, 2018 at 9:30 AM, Greg Kroah-Hartman
<[email protected]> wrote:
> On Mon, Sep 17, 2018 at 08:19:50PM -0700, Stefan Agner wrote:
>> On 13.09.2018 16:59, Miguel Ojeda wrote:
>> > The naked attribute is supported by at least gcc >= 4.6 (for ARM,
>> > which is the only current user), gcc >= 8 (for x86), clang >= 3.1
>> > and icc >= 13. See https://godbolt.org/z/350Dyc
>> >
>> > Therefore, move it out of compiler-gcc.h so that the definition
>> > is shared by all compilers.
>> >
>> > This also fixes Clang support for ARM32 --- 815f0ddb346c
>> > ("include/linux/compiler*.h: make compiler-*.h mutually exclusive").
>> >
>> > Cc: Stefan Agner <[email protected]>
>> > Cc: Rasmus Villemoes <[email protected]>
>> > Cc: Eli Friedman <[email protected]>
>> > Cc: Christopher Li <[email protected]>
>> > Cc: Kees Cook <[email protected]>
>> > Cc: Ingo Molnar <[email protected]>
>> > Cc: Geert Uytterhoeven <[email protected]>
>> > Cc: Greg Kroah-Hartman <[email protected]>
>> > Cc: Masahiro Yamada <[email protected]>
>> > Cc: Joe Perches <[email protected]>
>> > Cc: Dominique Martinet <[email protected]>
>> > Cc: Linus Torvalds <[email protected]>
>> > Cc: [email protected]
>> > Suggested-by: Arnd Bergmann <[email protected]>
>> > Reviewed-by: Luc Van Oostenryck <[email protected]>
>> > Reviewed-by: Nick Desaulniers <[email protected]>
>> > Signed-off-by: Miguel Ojeda <[email protected]>
>>
>> Reviewed-by: Stefan Agner <[email protected]>
>>
>> Ideally this two patches should go into v4.19. Not sure which path the patch should take, MAINTAINERS is not quite clear about that. This fixes 815f0ddb346c ("include/linux/compiler*.h: make compiler-*.h mutually exclusive") for ARM32, which has been merged directly by
>> Linus, afaict...
>
> Good point, can you resend these to me with all of the acks added so
> far?
Sure (I think only Stefan is the added ack, though).
Cheers,
Miguel
On 18.09.2018 09:06, Miguel Ojeda wrote:
> On Tue, Sep 18, 2018 at 9:30 AM, Greg Kroah-Hartman
> <[email protected]> wrote:
>> On Mon, Sep 17, 2018 at 08:19:50PM -0700, Stefan Agner wrote:
>>> On 13.09.2018 16:59, Miguel Ojeda wrote:
>>> > The naked attribute is supported by at least gcc >= 4.6 (for ARM,
>>> > which is the only current user), gcc >= 8 (for x86), clang >= 3.1
>>> > and icc >= 13. See https://godbolt.org/z/350Dyc
>>> >
>>> > Therefore, move it out of compiler-gcc.h so that the definition
>>> > is shared by all compilers.
>>> >
>>> > This also fixes Clang support for ARM32 --- 815f0ddb346c
>>> > ("include/linux/compiler*.h: make compiler-*.h mutually exclusive").
>>> >
>>> > Cc: Stefan Agner <[email protected]>
>>> > Cc: Rasmus Villemoes <[email protected]>
>>> > Cc: Eli Friedman <[email protected]>
>>> > Cc: Christopher Li <[email protected]>
>>> > Cc: Kees Cook <[email protected]>
>>> > Cc: Ingo Molnar <[email protected]>
>>> > Cc: Geert Uytterhoeven <[email protected]>
>>> > Cc: Greg Kroah-Hartman <[email protected]>
>>> > Cc: Masahiro Yamada <[email protected]>
>>> > Cc: Joe Perches <[email protected]>
>>> > Cc: Dominique Martinet <[email protected]>
>>> > Cc: Linus Torvalds <[email protected]>
>>> > Cc: [email protected]
>>> > Suggested-by: Arnd Bergmann <[email protected]>
>>> > Reviewed-by: Luc Van Oostenryck <[email protected]>
>>> > Reviewed-by: Nick Desaulniers <[email protected]>
>>> > Signed-off-by: Miguel Ojeda <[email protected]>
>>>
>>> Reviewed-by: Stefan Agner <[email protected]>
>>>
>>> Ideally this two patches should go into v4.19. Not sure which path the patch should take, MAINTAINERS is not quite clear about that. This fixes 815f0ddb346c ("include/linux/compiler*.h: make compiler-*.h mutually exclusive") for ARM32, which has been merged directly by
>>> Linus, afaict...
>>
>> Good point, can you resend these to me with all of the acks added so
>> far?
>
> Sure (I think only Stefan is the added ack, though).
>
Thanks Miguel.
You can also add my Tested-by: Stefan Agner <[email protected]> to the two patches.
--
Stefan
> Cheers,
> Miguel