> Subject: Re: [PATCH] hypervisor: arm/arm64: fix build error > > On 12.01.22 07:56, Peng Fan (OSS) wrote: > > From: Peng Fan <[email protected]> > > > > With gcc 5.15, met the following error > > Which gcc version (surely not "5.15") from which distro? I've tried with > manually adding -Werror=array-bounds to the build and using gcc-10.3.1, but > this message didn't trigger.
I use NXP linux 5.15-honister, gcc version 11.2.0. > > > > > hypervisor/arch/arm64/control.c:33:9: > > error: ‘memset’ offset [0, 255] is out of the bounds [0, 0] > [-Werror=array-bounds] > > 33 | memset(&this_cpu_data()->guest_regs, 0, sizeof(union > registers)); > > | > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > ~~ > > cc1: all warnings being treated as errors > > > > Fix this by use a volatile pointer to keep GCC from determining its > > value > > > > Do we something wrong here, or did the kernel, e.g., had to work around such > issues as well? The workaround looks a bit odd. It is gcc try to determining the array value, but I am not sure why it not. This patch is to let gcc not determine the array value to avoid build break. Regards, Peng. > > Jan > > > Signed-off-by: Peng Fan <[email protected]> > > --- > > hypervisor/arch/arm/control.c | 3 ++- > > hypervisor/arch/arm64/control.c | 3 ++- > > 2 files changed, 4 insertions(+), 2 deletions(-) > > > > diff --git a/hypervisor/arch/arm/control.c > > b/hypervisor/arch/arm/control.c index 46125e1a..c9c93982 100644 > > --- a/hypervisor/arch/arm/control.c > > +++ b/hypervisor/arch/arm/control.c > > @@ -23,9 +23,10 @@ > > void arm_cpu_reset(unsigned long pc, bool aarch32) > > { > > u32 sctlr; > > + union registers * volatile guest_regs = > > +&this_cpu_data()->guest_regs; > > > > /* Wipe all banked and usr regs */ > > - memset(&this_cpu_data()->guest_regs, 0, sizeof(union registers)); > > + memset(guest_regs, 0, sizeof(union registers)); > > > > arm_write_banked_reg(SP_usr, 0); > > arm_write_banked_reg(SP_svc, 0); > > diff --git a/hypervisor/arch/arm64/control.c > > b/hypervisor/arch/arm64/control.c index 5b41b393..2c33c5f7 100644 > > --- a/hypervisor/arch/arm64/control.c > > +++ b/hypervisor/arch/arm64/control.c > > @@ -22,6 +22,7 @@ void arm_cpu_reset(unsigned long pc, bool aarch32) > > { > > u64 hcr_el2; > > u64 fpexc32_el2; > > + union registers * volatile guest_regs = > > +&this_cpu_data()->guest_regs; > > > > /* put the cpu in a reset state */ > > /* AARCH64_TODO: handle big endian support */ @@ -30,7 +31,7 > @@ > > void arm_cpu_reset(unsigned long pc, bool aarch32) > > arm_write_sysreg(PMCR_EL0, 0); > > > > /* wipe any other state to avoid leaking information accross cells */ > > - memset(&this_cpu_data()->guest_regs, 0, sizeof(union registers)); > > + memset(guest_regs, 0, sizeof(union registers)); > > > > /* AARCH64_TODO: wipe floating point registers */ > > > > -- > Siemens AG, Technology > Competence Center Embedded Linux -- You received this message because you are subscribed to the Google Groups "Jailhouse" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jailhouse-dev/DU0PR04MB94175FA39632BC0AFEA908B088529%40DU0PR04MB9417.eurprd04.prod.outlook.com.
