From: Mark Wielaard Date: Tue, 8 Feb 2022 15:36:08 +0000 (+0100) Subject: ppc64 --track-origins=yes failure because of bad cmov addHRegUse X-Git-Tag: VALGRIND_3_19_0~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fb6a77ed78876083e8ba4c2f92384db5c2e41be8;p=thirdparty%2Fvalgrind.git ppc64 --track-origins=yes failure because of bad cmov addHRegUse For Pin_CMov getRegUsage_PPCInstr called addHRegUse for the dst register with HRmWrite, but since this is a conditional move the register could be both read and written (read + write = modify). This matches the dst of Pin_FpCMov and Pin_AvCMov. In a very rare case, and only with --track-origins=yes, this could cause bad code generation. This is slightly amazing, this code is from 2005 and as far as I know we never seen an issue with --track-origins=yes on power before. And I have been unable to come up simple reproducer. https://bugs.kde.org/show_bug.cgi?id=449672 --- diff --git a/NEWS b/NEWS index ef3eef23dd..ff8af76566 100644 --- a/NEWS +++ b/NEWS @@ -63,6 +63,7 @@ are not entered into bugzilla tend to get forgotten about or ignored. 447995 Valgrind segfault on power10 due to hwcap checking code 449483 Powerpc: vcmpgtsq., vcmpgtuq,, vcmpequq. instructions not setting the condition code correctly. +449672 ppc64 --track-origins=yes failures because of bad cmov addHRegUse To see details of a given bug, visit https://bugs.kde.org/show_bug.cgi?id=XXXXXX diff --git a/VEX/priv/host_ppc_defs.c b/VEX/priv/host_ppc_defs.c index 3ae0f6e082..4222b47868 100644 --- a/VEX/priv/host_ppc_defs.c +++ b/VEX/priv/host_ppc_defs.c @@ -2590,7 +2590,7 @@ void getRegUsage_PPCInstr ( HRegUsage* u, const PPCInstr* i, Bool mode64 ) return; case Pin_CMov: addRegUsage_PPCRI(u, i->Pin.CMov.src); - addHRegUse(u, HRmWrite, i->Pin.CMov.dst); + addHRegUse(u, HRmModify, i->Pin.CMov.dst); return; case Pin_Load: addRegUsage_PPCAMode(u, i->Pin.Load.src);