[Bug 1887974] [NEW] [20.04] Valgrind: PPC sync instruction L field should only be 2 bits in ISA 3.0

bugproxy 1887974 at bugs.launchpad.net
Fri Jul 17 14:29:29 UTC 2020


Public bug reported:

---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

** Affects: ubuntu-power-systems
     Importance: Undecided
         Status: New

** Affects: valgrind (Ubuntu)
     Importance: Undecided
     Assignee: Ubuntu on IBM Power Systems Bug Triage (ubuntu-power-triage)
         Status: New


** Tags: architecture-ppc64le bugnameltc-186878 severity-medium targetmilestone-inin20041

** Tags added: architecture-ppc64le bugnameltc-186878 severity-medium
targetmilestone-inin20041

** Changed in: ubuntu
     Assignee: (unassigned) => Ubuntu on IBM Power Systems Bug Triage (ubuntu-power-triage)

** Package changed: ubuntu => valgrind (Ubuntu)

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to valgrind in Ubuntu.
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:
  New
Status in valgrind package in Ubuntu:
  New

Bug 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 foundations-bugs mailing list