From: Roland McGrath <mcgrathr@google.com>
To: "binutils@sourceware.org" <binutils@sourceware.org>
Subject: [PATCH] avoid strange arithmetic with strings in i386-dis.c
Date: Thu, 10 Oct 2013 23:15:00 -0000 [thread overview]
Message-ID: <CAB=4xhoJe2Z_Uex9_mXmG2ea1ZdDwoBXUYMi8J3yM+=Yu3SV1Q@mail.gmail.com> (raw)
This makes the code a bit less baroque, and also avoids warnings from some
compilers. After the various changes I've committed in the last couple of
days, this is enough to get binutils (excluding gold) to build warning-free
with a recent Clang.
OK for trunk and 2.24?
Thanks,
Roland
opcodes/
* i386-dis.c (oappend_maybe_intel): New function.
(OP_ST, OP_STi, append_seg, OP_I, OP_I64, OP_sI, OP_ESreg): Use it.
(OP_C, OP_T, CMP_Fixup, OP_EX_VexImmW): Likewise.
(VCMP_Fixup, VPCMP_Fixup, PCLMUL_Fixup): Likewise.
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -1,6 +1,6 @@
/* Print i386 instructions for GDB, the GNU debugger.
Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
- 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
Free Software Foundation, Inc.
This file is part of the GNU opcodes library.
@@ -13095,17 +13095,27 @@ dofloat (int sizeflag)
}
}
+/* Like oappend (below), but S is a string starting with '%'.
+ In Intel syntax, the '%' is elided. */
+static void
+oappend_maybe_intel (const char *s)
+{
+ if (intel_syntax)
+ ++s;
+ oappend (s);
+}
+
static void
OP_ST (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
- oappend ("%st" + intel_syntax);
+ oappend_maybe_intel ("%st");
}
static void
OP_STi (int bytemode ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
sprintf (scratchbuf, "%%st(%d)", modrm.rm);
- oappend (scratchbuf + intel_syntax);
+ oappend_maybe_intel (scratchbuf);
}
/* Capital letters in template are macros. */
@@ -13629,32 +13639,32 @@ append_seg (void)
if (prefixes & PREFIX_CS)
{
used_prefixes |= PREFIX_CS;
- oappend ("%cs:" + intel_syntax);
+ oappend_maybe_intel ("%cs:");
}
if (prefixes & PREFIX_DS)
{
used_prefixes |= PREFIX_DS;
- oappend ("%ds:" + intel_syntax);
+ oappend_maybe_intel ("%ds:");
}
if (prefixes & PREFIX_SS)
{
used_prefixes |= PREFIX_SS;
- oappend ("%ss:" + intel_syntax);
+ oappend_maybe_intel ("%ss:");
}
if (prefixes & PREFIX_ES)
{
used_prefixes |= PREFIX_ES;
- oappend ("%es:" + intel_syntax);
+ oappend_maybe_intel ("%es:");
}
if (prefixes & PREFIX_FS)
{
used_prefixes |= PREFIX_FS;
- oappend ("%fs:" + intel_syntax);
+ oappend_maybe_intel ("%fs:");
}
if (prefixes & PREFIX_GS)
{
used_prefixes |= PREFIX_GS;
- oappend ("%gs:" + intel_syntax);
+ oappend_maybe_intel ("%gs:");
}
}
@@ -14904,7 +14914,7 @@ OP_I (int bytemode, int sizeflag)
op &= mask;
scratchbuf[0] = '$';
print_operand_value (scratchbuf + 1, 1, op);
- oappend (scratchbuf + intel_syntax);
+ oappend_maybe_intel (scratchbuf);
scratchbuf[0] = '\0';
}
@@ -14958,7 +14968,7 @@ OP_I64 (int bytemode, int sizeflag)
op &= mask;
scratchbuf[0] = '$';
print_operand_value (scratchbuf + 1, 1, op);
- oappend (scratchbuf + intel_syntax);
+ oappend_maybe_intel (scratchbuf);
scratchbuf[0] = '\0';
}
@@ -15012,7 +15022,7 @@ OP_sI (int bytemode, int sizeflag)
scratchbuf[0] = '$';
print_operand_value (scratchbuf + 1, 1, op);
- oappend (scratchbuf + intel_syntax);
+ oappend_maybe_intel (scratchbuf);
}
static void
@@ -15194,7 +15204,7 @@ OP_ESreg (int code, int sizeflag)
intel_operand_size (b_mode, sizeflag);
}
}
- oappend ("%es:" + intel_syntax);
+ oappend_maybe_intel ("%es:");
ptr_reg (code, sizeflag);
}
@@ -15247,7 +15257,7 @@ OP_C (int dummy ATTRIBUTE_UNUSED, int sizeflag
ATTRIBUTE_UNUSED)
else
add = 0;
sprintf (scratchbuf, "%%cr%d", modrm.reg + add);
- oappend (scratchbuf + intel_syntax);
+ oappend_maybe_intel (scratchbuf);
}
static void
@@ -15270,7 +15280,7 @@ static void
OP_T (int dummy ATTRIBUTE_UNUSED, int sizeflag ATTRIBUTE_UNUSED)
{
sprintf (scratchbuf, "%%tr%d", modrm.reg);
- oappend (scratchbuf + intel_syntax);
+ oappend_maybe_intel (scratchbuf);
}
static void
@@ -15715,7 +15725,7 @@ CMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int
sizeflag ATTRIBUTE_UNUSED)
/* We have a reserved extension byte. Output it directly. */
scratchbuf[0] = '$';
print_operand_value (scratchbuf + 1, 1, cmp_type);
- oappend (scratchbuf + intel_syntax);
+ oappend_maybe_intel (scratchbuf);
scratchbuf[0] = '\0';
}
}
@@ -16240,7 +16250,7 @@ OP_EX_VexImmW (int bytemode, int sizeflag)
/* Output the imm8 directly. */
scratchbuf[0] = '$';
print_operand_value (scratchbuf + 1, 1, vex_imm8 & 0xf);
- oappend (scratchbuf + intel_syntax);
+ oappend_maybe_intel (scratchbuf);
scratchbuf[0] = '\0';
codep++;
}
@@ -16469,7 +16479,7 @@ VCMP_Fixup (int bytemode ATTRIBUTE_UNUSED, int
sizeflag ATTRIBUTE_UNUSED)
/* We have a reserved extension byte. Output it directly. */
scratchbuf[0] = '$';
print_operand_value (scratchbuf + 1, 1, cmp_type);
- oappend (scratchbuf + intel_syntax);
+ oappend_maybe_intel (scratchbuf);
scratchbuf[0] = '\0';
}
}
@@ -16516,7 +16526,7 @@ VPCMP_Fixup (int bytemode ATTRIBUTE_UNUSED,
/* We have a reserved extension byte. Output it directly. */
scratchbuf[0] = '$';
print_operand_value (scratchbuf + 1, 1, cmp_type);
- oappend (scratchbuf + intel_syntax);
+ oappend_maybe_intel (scratchbuf);
scratchbuf[0] = '\0';
}
}
@@ -16564,7 +16574,7 @@ PCLMUL_Fixup (int bytemode ATTRIBUTE_UNUSED,
/* We have a reserved extension byte. Output it directly. */
scratchbuf[0] = '$';
print_operand_value (scratchbuf + 1, 1, pclmul_type);
- oappend (scratchbuf + intel_syntax);
+ oappend_maybe_intel (scratchbuf);
scratchbuf[0] = '\0';
}
}
next reply other threads:[~2013-10-10 23:15 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-10 23:15 Roland McGrath [this message]
2013-10-11 0:12 ` H.J. Lu
2013-10-11 1:01 ` Roland McGrath
2013-10-11 0:47 ` Alan Modra
2013-10-11 6:30 ` Jan Beulich
2013-10-11 22:49 ` Alan Modra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAB=4xhoJe2Z_Uex9_mXmG2ea1ZdDwoBXUYMi8J3yM+=Yu3SV1Q@mail.gmail.com' \
--to=mcgrathr@google.com \
--cc=binutils@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).