ppc64: Fix stwux encoding

Message ID 20180204203902.GA10037@host1.jankratochvil.net
State New, archived
Headers

Commit Message

Jan Kratochvil Feb. 4, 2018, 8:39 p.m. UTC
  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. UTC | #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. UTC | #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
  
pedromfc March 16, 2018, 6:24 p.m. UTC | #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.
  

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;