]> sourceware.org Git - valgrind.git/commit
Assorted changes to protect from side affects from the feature checking code.
authorCarl Love <cel@us.ibm.com>
Fri, 14 Jan 2022 23:04:44 +0000 (23:04 +0000)
committerCarl Love <cel@us.ibm.com>
Thu, 20 Jan 2022 16:34:52 +0000 (10:34 -0600)
commit3ea8d4327003c3cefe8e82c59be8e92dcfe1a60f
tree60af57339b0ddab47beae2b7191bda32e33cab42
parentb6efa526c85de148b677308a5cd0bbca956cfdfb
Assorted changes to protect from side affects from the feature checking code.

Patch contributed by Will Schmidt <will_schmidt@vnet.ibm.com>

This problem was initially reported by Tulio, he assisted me in
identifying the underlying issue here.

This was discovered on a Power10, and occurs since the ISA 3.1 support
check uses the brh instruction via a hardcoded ".long 0x7f1401b6" asm stanza.
That encoding writes to r20, and since the stanza does not contain a clobber
the compiler did not know to save or restore that register upon entry or exit.
The junk value remaining in r20 subsequently caused a segfault.

This patch adds clobber masks to the instruction stanzas, as well as
updates the associated comments to clarify which registers are being
used.
    As part of this change I've also
    - updated the .long for the cnttzw instruction to write to r20, and
      zeroed the reserved bits from that instruction so it is properly
      decoded by the disassembler.
    - updated the .long for the dadd instruction to write to f0.

    I've inspected the current codegen with these changes in place, and
    confirm that r20 is now saved and restored on entry and exit from the
    machine_get_hwcaps() function.

bugzilla 447995   Valgrind segfault on power10 due to hwcap checking code
NEWS
coregrind/m_machine.c
This page took 0.030863 seconds and 5 git commands to generate.