selftests/powerpc/ptrace: Declare test temporary variables as volatile
While the target is volatile, the temporary variables used to access the target cast away the volatile. This is undefined behaviour, and a compiler may optimise away/reorder these accesses, breaking the test. This was observed with GCC 13.1.1, but it can be difficult to reproduce because of the dependency on compiler behaviour. Signed-off-by: Benjamin Gray <bgray@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://msgid.link/20230725005841.28854-5-bgray@linux.ibm.com
This commit is contained in:
parent
fc6732a855
commit
c3062ede99
@ -64,26 +64,26 @@ static bool dawr_present(struct ppc_debug_info *dbginfo)
|
||||
|
||||
static void write_var(int len)
|
||||
{
|
||||
__u8 *pcvar;
|
||||
__u16 *psvar;
|
||||
__u32 *pivar;
|
||||
__u64 *plvar;
|
||||
volatile __u8 *pcvar;
|
||||
volatile __u16 *psvar;
|
||||
volatile __u32 *pivar;
|
||||
volatile __u64 *plvar;
|
||||
|
||||
switch (len) {
|
||||
case 1:
|
||||
pcvar = (__u8 *)&glvar;
|
||||
pcvar = (volatile __u8 *)&glvar;
|
||||
*pcvar = 0xff;
|
||||
break;
|
||||
case 2:
|
||||
psvar = (__u16 *)&glvar;
|
||||
psvar = (volatile __u16 *)&glvar;
|
||||
*psvar = 0xffff;
|
||||
break;
|
||||
case 4:
|
||||
pivar = (__u32 *)&glvar;
|
||||
pivar = (volatile __u32 *)&glvar;
|
||||
*pivar = 0xffffffff;
|
||||
break;
|
||||
case 8:
|
||||
plvar = (__u64 *)&glvar;
|
||||
plvar = (volatile __u64 *)&glvar;
|
||||
*plvar = 0xffffffffffffffffLL;
|
||||
break;
|
||||
}
|
||||
@ -98,16 +98,16 @@ static void read_var(int len)
|
||||
|
||||
switch (len) {
|
||||
case 1:
|
||||
cvar = (__u8)glvar;
|
||||
cvar = (volatile __u8)glvar;
|
||||
break;
|
||||
case 2:
|
||||
svar = (__u16)glvar;
|
||||
svar = (volatile __u16)glvar;
|
||||
break;
|
||||
case 4:
|
||||
ivar = (__u32)glvar;
|
||||
ivar = (volatile __u32)glvar;
|
||||
break;
|
||||
case 8:
|
||||
lvar = (__u64)glvar;
|
||||
lvar = (volatile __u64)glvar;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user