ppc64: Fix stwux encoding

Message ID 20180204203902.GA10037@host1.jankratochvil.net
State New
Headers show
Series
  • ppc64: Fix stwux encoding
Related show

Commit Message

Jan Kratochvil Feb. 4, 2018, 8:39 p.m.
Hi,

with gcc-8.0.1-0.9.fc28.x86_64 I get:

../../gdb/rs6000-tdep.c: In function 'CORE_ADDR skip_prologue(gdbarch*, CORE_ADDR, CORE_ADDR, rs6000_framedata*)':
../../gdb/rs6000-tdep.c:1911:34: error: bitwise comparison always evaluates to false [-Werror=tautological-compare]
       else if ((op & 0xfc1f016a) == 0x7c01016e)
                ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~

The code is there since:
	commit 98f08d3d9b69b344bb8b0cd2a4bda1cf4d966e20
	Author: Kevin Buettner <kevinb@redhat.com>
	Date:   Thu May 29 19:47:14 2003 +0000
		    From Jimi X <jimix@watson.ibm.com>:
		    * rs6000-tdep.c (skip_prologue): Improve support for 64-bit code.
So I do not think we can find the original author.

https://www.ibm.com/support/knowledgecenter/en/ssw_aix_72/com.ibm.aix.alangref/idalangref_stwux_stux_instrs.htm
says
	bit 21 - 30 = 183
	Those are bits 1..10 in normal bit order: 183<<1 = 0x16e

OK for check-in?


Jan
gdb/ChangeLog
2018-02-04  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* rs6000-tdep.c (skip_prologue): Fix stwux encoding.

Comments

Kevin Buettner Feb. 5, 2018, 6:46 p.m. | #1
On Sun, 4 Feb 2018 21:39:23 +0100
Jan Kratochvil <jan.kratochvil@redhat.com> wrote:

> 2018-02-04  Jan Kratochvil  <jan.kratochvil@redhat.com>

> 

> 	* rs6000-tdep.c (skip_prologue): Fix stwux encoding.

> 


Okay.
Jan Kratochvil Feb. 5, 2018, 7:22 p.m. | #2
On Mon, 05 Feb 2018 19:46:21 +0100, Kevin Buettner wrote:
> On Sun, 4 Feb 2018 21:39:23 +0100 Jan Kratochvil <jan.kratochvil@redhat.com> wrote:

> > 2018-02-04  Jan Kratochvil  <jan.kratochvil@redhat.com>

> > 

> > 	* rs6000-tdep.c (skip_prologue): Fix stwux encoding.

> > 

> 

> Okay.


Checked in:
	72dd27306224497c8ba97f391d30b774d4d973fb


Jan
Pedro Franco de Carvalho March 16, 2018, 6:24 p.m. | #3
Thank you for this patch!

The mask was still too permissive (see PR gdb/18295), so I submitted
another patch fixing that. Sorry I didn't see this before!

Previously the stdux mask also allowed stwux (and more), and the if body
was the same, so it was accidentally working for stwux, despite the
tautological compare.

-- 
Pedro Franco de Carvalho

Patch

--- a/gdb/rs6000-tdep.c
+++ b/gdb/rs6000-tdep.c
@@ -1857,7 +1857,7 @@  skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
 	  offset = fdata->offset;
 	  continue;
 	}
-      else if ((op & 0xfc1f016a) == 0x7c01016e)
+      else if ((op & 0xfc1f016e) == 0x7c01016e)
 	{			/* stwux rX,r1,rY */
 	  /* No way to figure out what r1 is going to be.  */
 	  fdata->frameless = 0;