[Bug 1887974] Re: [20.04] Valgrind: PPC sync instruction L field should only be 2 bits in ISA 3.0
Matthieu Clemenceau
1887974 at bugs.launchpad.net
Thu Aug 20 22:58:06 UTC 2020
Both patches are available and ready for SRU on Focal and Bionic.
After being tested individually from a ppa ppa:mclemenceau/distro-work on ppc64le instances
** Description changed:
+ SRU Description
+
+ [Impact]
+ Valgrind mishandles the L field of the sync instruction.
+ More details are available at: https://bugs.kde.org/show_bug.cgi?id=422677
+ Single line patch available online with commit fb6f7abcbc92506d302fb18a2c5fc853d2929248
+
+ [Test Case]
+ On a PPC64le Hardware
+ # sudo apt-get install gcc valgrind
+ #cat test-sync.c
+ define __SYNC(l) ".long (0x7c0004AC | ((" #l ") << 21))"
+
+ int
+ main ()
+ {
+ asm volatile(__SYNC(4) : : : "memory");
+ }
+
+ # gcc test-sync.c && valgrind --tool=none ./a.out
+ This will report this error unpatched part of the valgrind output
+
+ dis_memsync(ppc)(sync/lwsync,flag_L)
+ disInstr(ppc): unhandled instruction: 0x7C8004AC
+ primary 31(0x1F), secondary 1196(0x4AC)
+
+ # This won't report this error once using the updated version
+
+ [Regression Potential]
+ The regression potential is very low since this bug has been submitted upstream and is already available in Groovy. Package build and run successfully. Not anticipating regression
+
+ End SRU Description
+
+
---Problem Description---
This is a bug report for focal.
Valgrind, including version 3.16, mishandles the L field of the sync instruction.
More details are available at: https://bugs.kde.org/show_bug.cgi?id=422677
This is a request to backport the following Valgrind patch from
upstream:
commit fb6f7abcbc92506d302fb18a2c5fc853d2929248
Author: Carl Love <cel at us.ibm.com>
Date: Tue Jun 9 10:42:03 2020 -0500
- Power PC Fix extraction of the L field for sync instruction
-
- The L field is currently a two bit[22:21] field in ISA 3.0. The size of the
- L field has changed over time.
-
- Currently the ISA 3.0 Valgrind sync instruction support code sets the
- flag_L for the instruction L field to a five bit value that includes bits
- that are marked reserved the sync instruction. This patch fixes the issue for ISA 3.0
- to only setting flag_L the specified two bits.
-
- Valgrind bugzilla: https://bugs.kde.org/show_bug.cgi?id=422677
-
- Contact Information = Tulio Magno/tuliom at linux.ibm.com
-
+ Power PC Fix extraction of the L field for sync instruction
+
+ The L field is currently a two bit[22:21] field in ISA 3.0. The size of the
+ L field has changed over time.
+
+ Currently the ISA 3.0 Valgrind sync instruction support code sets the
+ flag_L for the instruction L field to a five bit value that includes bits
+ that are marked reserved the sync instruction. This patch fixes the issue for ISA 3.0
+ to only setting flag_L the specified two bits.
+
+ Valgrind bugzilla: https://bugs.kde.org/show_bug.cgi?id=422677
+
+ Contact Information = Tulio Magno/tuliom at linux.ibm.com
+
---uname output---
N/A
-
- Machine Type = Reproducible on all POWER8 and POWER9 servers
-
+
+ Machine Type = Reproducible on all POWER8 and POWER9 servers
+
---Debugger---
A debugger is not configured
-
+
---Steps to Reproduce---
- $ cat test-sync.c
+ $ cat test-sync.c
#define __SYNC(l) ".long (0x7c0004AC | ((" #l ") << 21))"
int
main ()
{
- asm volatile(__SYNC(4) : : : "memory");
+ asm volatile(__SYNC(4) : : : "memory");
}
$ gcc test-sync.c && valgrind --tool=none ./a.out
==150073== Nulgrind, the minimal Valgrind tool
==150073== Copyright (C) 2002-2017, and GNU GPL'd, by Nicholas Nethercote.
==150073== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==150073== Command: ./a.out
- ==150073==
+ ==150073==
dis_memsync(ppc)(sync/lwsync,flag_L)
disInstr(ppc): unhandled instruction: 0x7C8004AC
- primary 31(0x1F), secondary 1196(0x4AC)
+ primary 31(0x1F), secondary 1196(0x4AC)
==150073== valgrind: Unrecognised instruction at address 0x180788.
==150073== at 0x180788: main (in /home/tuliom/tmp/a.out)
==150073== Your program just tried to execute an instruction that Valgrind
==150073== did not recognise.
...
-
- Userspace tool common name: Valgrind
-
- The userspace tool has the following bit modes: 64-bit
+
+ Userspace tool common name: Valgrind
+
+ The userspace tool has the following bit modes: 64-bit
Userspace deb: valgrind
Userspace tool obtained from project website: na
--
You received this bug notification because you are a member of Ubuntu
Sponsors Team, which is subscribed to the bug report.
https://bugs.launchpad.net/bugs/1887974
Title:
[20.04] Valgrind: PPC sync instruction L field should only be 2 bits
in ISA 3.0
Status in The Ubuntu-power-systems project:
Triaged
Status in valgrind package in Ubuntu:
Fix Released
Status in valgrind source package in Bionic:
In Progress
Status in valgrind source package in Focal:
In Progress
Bug description:
SRU Description
[Impact]
Valgrind mishandles the L field of the sync instruction.
More details are available at: https://bugs.kde.org/show_bug.cgi?id=422677
Single line patch available online with commit fb6f7abcbc92506d302fb18a2c5fc853d2929248
[Test Case]
On a PPC64le Hardware
# sudo apt-get install gcc valgrind
#cat test-sync.c
define __SYNC(l) ".long (0x7c0004AC | ((" #l ") << 21))"
int
main ()
{
asm volatile(__SYNC(4) : : : "memory");
}
# gcc test-sync.c && valgrind --tool=none ./a.out
This will report this error unpatched part of the valgrind output
dis_memsync(ppc)(sync/lwsync,flag_L)
disInstr(ppc): unhandled instruction: 0x7C8004AC
primary 31(0x1F), secondary 1196(0x4AC)
# This won't report this error once using the updated version
[Regression Potential]
The regression potential is very low since this bug has been submitted upstream and is already available in Groovy. Package build and run successfully. Not anticipating regression
End SRU Description
---Problem Description---
This is a bug report for focal.
Valgrind, including version 3.16, mishandles the L field of the sync instruction.
More details are available at: https://bugs.kde.org/show_bug.cgi?id=422677
This is a request to backport the following Valgrind patch from
upstream:
commit fb6f7abcbc92506d302fb18a2c5fc853d2929248
Author: Carl Love <cel at us.ibm.com>
Date: Tue Jun 9 10:42:03 2020 -0500
Power PC Fix extraction of the L field for sync instruction
The L field is currently a two bit[22:21] field in ISA 3.0. The size of the
L field has changed over time.
Currently the ISA 3.0 Valgrind sync instruction support code sets the
flag_L for the instruction L field to a five bit value that includes bits
that are marked reserved the sync instruction. This patch fixes the issue for ISA 3.0
to only setting flag_L the specified two bits.
Valgrind bugzilla: https://bugs.kde.org/show_bug.cgi?id=422677
Contact Information = Tulio Magno/tuliom at linux.ibm.com
---uname output---
N/A
Machine Type = Reproducible on all POWER8 and POWER9 servers
---Debugger---
A debugger is not configured
---Steps to Reproduce---
$ cat test-sync.c
#define __SYNC(l) ".long (0x7c0004AC | ((" #l ") << 21))"
int
main ()
{
asm volatile(__SYNC(4) : : : "memory");
}
$ gcc test-sync.c && valgrind --tool=none ./a.out
==150073== Nulgrind, the minimal Valgrind tool
==150073== Copyright (C) 2002-2017, and GNU GPL'd, by Nicholas Nethercote.
==150073== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==150073== Command: ./a.out
==150073==
dis_memsync(ppc)(sync/lwsync,flag_L)
disInstr(ppc): unhandled instruction: 0x7C8004AC
primary 31(0x1F), secondary 1196(0x4AC)
==150073== valgrind: Unrecognised instruction at address 0x180788.
==150073== at 0x180788: main (in /home/tuliom/tmp/a.out)
==150073== Your program just tried to execute an instruction that Valgrind
==150073== did not recognise.
...
Userspace tool common name: Valgrind
The userspace tool has the following bit modes: 64-bit
Userspace deb: valgrind
Userspace tool obtained from project website: na
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu-power-systems/+bug/1887974/+subscriptions
More information about the Ubuntu-sponsors
mailing list