Message ID | 20210313134158.24363-1-julien@xen.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [for-4.15,v2] xen: Bump the minimum version of GCC supported to 4.9 for arm32 and 5.1 on arm64 | expand |
Hi Julien, > On 13 Mar 2021, at 13:41, Julien Grall <julien@xen.org> wrote: > > From: Julien Grall <jgrall@amazon.com> > > Compilers older than 4.8 have known codegen issues which can lead to > silent miscompilation: > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58145 > > Furthermore, pre-4.9 GCC have known bugs (including things like > internal compiler errors on Arm) which would require workaround (I > haven't checked if we have any in Xen). > > The minimum version of GCC to build the hypervisor on arm is now > raised to 4.9. > > In addition to that, on arm64, GCC version >= 4.9 and < 5.1 have been > shown to emit memory references beyond the stack pointer, resulting in > memory corruption if an interrupt is taken after the stack pointer has > been adjusted but before the reference has been executed. > > Therefore, the minimum for arm64 is raised to 5.1. > > Signed-off-by: Julien Grall <jgrall@amazon.com> Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com> Cheers Bertrand > > --- > > This patch is candidate to 4.15 and backport. > > This is only a build change and will be low-risk for anyone using newer > compiler (5.1+ for arm64 and 4.9+ for arm32). Xen will stop building > for anyone using older compiler. But it is better than fighting > with codegen issues. > > Changes in v2: > - Only bump the GCC version for Arm. > --- > README | 7 +++++-- > xen/include/xen/compiler.h | 10 ++++++++++ > 2 files changed, 15 insertions(+), 2 deletions(-) > > diff --git a/README b/README > index 8c99c30986c1..aa8b4fe126a8 100644 > --- a/README > +++ b/README > @@ -42,8 +42,11 @@ provided by your OS distributor: > - GNU Binutils 2.16.91.0.5 or later > or > - Clang/LLVM 3.5 or later > - - For ARM: > - - GCC 4.8 or later > + - For ARM 32-bit: > + - GCC 4.9 or later > + - GNU Binutils 2.24 or later > + - For ARM 64-bit: > + - GCC 5.1 or later > - GNU Binutils 2.24 or later > * Development install of zlib (e.g., zlib-dev) > * Development install of Python 2.6 or later (e.g., python-dev) > diff --git a/xen/include/xen/compiler.h b/xen/include/xen/compiler.h > index 0ec0b4698ea7..17cf00e1ec92 100644 > --- a/xen/include/xen/compiler.h > +++ b/xen/include/xen/compiler.h > @@ -3,6 +3,16 @@ > > #if !defined(__GNUC__) || (__GNUC__ < 4) > #error Sorry, your compiler is too old/not recognized. > +#elif CONFIG_CC_IS_GCC > +# if defined(CONFIG_ARM_32) && CONFIG_GCC_VERSION < 40900 > +# error Sorry, your version of GCC is too old - please use 4.9 or newer. > +# elif defined(CONFIG_ARM_64) && CONFIG_GCC_VERSION < 50100 > +/* > + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293 > + * https://lore.kernel.org/r/20210107111841.GN1551@shell.armlinux.org.uk > + */ > +# error Sorry, your version of GCC is too old - please use 5.1 or newer. > +# endif > #endif > > #define barrier() __asm__ __volatile__("": : :"memory") > -- > 2.17.1 >
Julien Grall writes ("[PATCH for-4.15 v2] xen: Bump the minimum version of GCC supported to 4.9 for arm32 and 5.1 on arm64"): > From: Julien Grall <jgrall@amazon.com> > > Compilers older than 4.8 have known codegen issues which can lead to > silent miscompilation: > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58145 > > Furthermore, pre-4.9 GCC have known bugs (including things like > internal compiler errors on Arm) which would require workaround (I > haven't checked if we have any in Xen). > > The minimum version of GCC to build the hypervisor on arm is now > raised to 4.9. > > In addition to that, on arm64, GCC version >= 4.9 and < 5.1 have been > shown to emit memory references beyond the stack pointer, resulting in > memory corruption if an interrupt is taken after the stack pointer has > been adjusted but before the reference has been executed. > > Therefore, the minimum for arm64 is raised to 5.1. > > Signed-off-by: Julien Grall <jgrall@amazon.com> Release-Acked-by: Ian Jackson <iwj@xenproject.org>
On Sat, 13 Mar 2021, Julien Grall wrote: > From: Julien Grall <jgrall@amazon.com> > > Compilers older than 4.8 have known codegen issues which can lead to > silent miscompilation: > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58145 > > Furthermore, pre-4.9 GCC have known bugs (including things like > internal compiler errors on Arm) which would require workaround (I > haven't checked if we have any in Xen). > > The minimum version of GCC to build the hypervisor on arm is now > raised to 4.9. > > In addition to that, on arm64, GCC version >= 4.9 and < 5.1 have been > shown to emit memory references beyond the stack pointer, resulting in > memory corruption if an interrupt is taken after the stack pointer has > been adjusted but before the reference has been executed. > > Therefore, the minimum for arm64 is raised to 5.1. > > Signed-off-by: Julien Grall <jgrall@amazon.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> > --- > > This patch is candidate to 4.15 and backport. > > This is only a build change and will be low-risk for anyone using newer > compiler (5.1+ for arm64 and 4.9+ for arm32). Xen will stop building > for anyone using older compiler. But it is better than fighting > with codegen issues. > > Changes in v2: > - Only bump the GCC version for Arm. > --- > README | 7 +++++-- > xen/include/xen/compiler.h | 10 ++++++++++ > 2 files changed, 15 insertions(+), 2 deletions(-) > > diff --git a/README b/README > index 8c99c30986c1..aa8b4fe126a8 100644 > --- a/README > +++ b/README > @@ -42,8 +42,11 @@ provided by your OS distributor: > - GNU Binutils 2.16.91.0.5 or later > or > - Clang/LLVM 3.5 or later > - - For ARM: > - - GCC 4.8 or later > + - For ARM 32-bit: > + - GCC 4.9 or later > + - GNU Binutils 2.24 or later > + - For ARM 64-bit: > + - GCC 5.1 or later > - GNU Binutils 2.24 or later > * Development install of zlib (e.g., zlib-dev) > * Development install of Python 2.6 or later (e.g., python-dev) > diff --git a/xen/include/xen/compiler.h b/xen/include/xen/compiler.h > index 0ec0b4698ea7..17cf00e1ec92 100644 > --- a/xen/include/xen/compiler.h > +++ b/xen/include/xen/compiler.h > @@ -3,6 +3,16 @@ > > #if !defined(__GNUC__) || (__GNUC__ < 4) > #error Sorry, your compiler is too old/not recognized. > +#elif CONFIG_CC_IS_GCC > +# if defined(CONFIG_ARM_32) && CONFIG_GCC_VERSION < 40900 > +# error Sorry, your version of GCC is too old - please use 4.9 or newer. > +# elif defined(CONFIG_ARM_64) && CONFIG_GCC_VERSION < 50100 > +/* > + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293 > + * https://lore.kernel.org/r/20210107111841.GN1551@shell.armlinux.org.uk > + */ > +# error Sorry, your version of GCC is too old - please use 5.1 or newer. > +# endif > #endif > > #define barrier() __asm__ __volatile__("": : :"memory") > -- > 2.17.1 >
Hi Ian, On 15/03/2021 12:05, Ian Jackson wrote: > Julien Grall writes ("[PATCH for-4.15 v2] xen: Bump the minimum version of GCC supported to 4.9 for arm32 and 5.1 on arm64"): >> From: Julien Grall <jgrall@amazon.com> >> >> Compilers older than 4.8 have known codegen issues which can lead to >> silent miscompilation: >> >> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58145 >> >> Furthermore, pre-4.9 GCC have known bugs (including things like >> internal compiler errors on Arm) which would require workaround (I >> haven't checked if we have any in Xen). >> >> The minimum version of GCC to build the hypervisor on arm is now >> raised to 4.9. >> >> In addition to that, on arm64, GCC version >= 4.9 and < 5.1 have been >> shown to emit memory references beyond the stack pointer, resulting in >> memory corruption if an interrupt is taken after the stack pointer has >> been adjusted but before the reference has been executed. >> >> Therefore, the minimum for arm64 is raised to 5.1. >> >> Signed-off-by: Julien Grall <jgrall@amazon.com> > > Release-Acked-by: Ian Jackson <iwj@xenproject.org> Thanks! I have committed the patch with Bertrand and Stefano's reviewed-by. Cheers,
diff --git a/README b/README index 8c99c30986c1..aa8b4fe126a8 100644 --- a/README +++ b/README @@ -42,8 +42,11 @@ provided by your OS distributor: - GNU Binutils 2.16.91.0.5 or later or - Clang/LLVM 3.5 or later - - For ARM: - - GCC 4.8 or later + - For ARM 32-bit: + - GCC 4.9 or later + - GNU Binutils 2.24 or later + - For ARM 64-bit: + - GCC 5.1 or later - GNU Binutils 2.24 or later * Development install of zlib (e.g., zlib-dev) * Development install of Python 2.6 or later (e.g., python-dev) diff --git a/xen/include/xen/compiler.h b/xen/include/xen/compiler.h index 0ec0b4698ea7..17cf00e1ec92 100644 --- a/xen/include/xen/compiler.h +++ b/xen/include/xen/compiler.h @@ -3,6 +3,16 @@ #if !defined(__GNUC__) || (__GNUC__ < 4) #error Sorry, your compiler is too old/not recognized. +#elif CONFIG_CC_IS_GCC +# if defined(CONFIG_ARM_32) && CONFIG_GCC_VERSION < 40900 +# error Sorry, your version of GCC is too old - please use 4.9 or newer. +# elif defined(CONFIG_ARM_64) && CONFIG_GCC_VERSION < 50100 +/* + * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293 + * https://lore.kernel.org/r/20210107111841.GN1551@shell.armlinux.org.uk + */ +# error Sorry, your version of GCC is too old - please use 5.1 or newer. +# endif #endif #define barrier() __asm__ __volatile__("": : :"memory")