aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>1998-10-20 15:24:45 +0000
committerIan Lance Taylor <ian@airs.com>1998-10-20 15:24:45 +0000
commit7540e470968b1b658d0da258a47244c476ff8b3d (patch)
treeb926aefb450a1e174c29f020caa475607e7d51b2
parentf5003e7d628285d7d578ae4b1149ce23dbe12694 (diff)
downloadgdb-7540e470968b1b658d0da258a47244c476ff8b3d.zip
gdb-7540e470968b1b658d0da258a47244c476ff8b3d.tar.gz
gdb-7540e470968b1b658d0da258a47244c476ff8b3d.tar.bz2
Tue Oct 20 11:18:28 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
* config/tc-i386.c (i386_operand): Check for garbage after register name.
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-i386.c96
2 files changed, 51 insertions, 50 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 11a9721..6a354fa 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+Tue Oct 20 11:18:28 1998 Alan Modra <alan@spri.levels.unisa.edu.au>
+
+ * config/tc-i386.c (i386_operand): Check for garbage after
+ register name.
+
Tue Oct 20 10:49:42 1998 Ian Lance Taylor <ian@cygnus.com>
* config/tc-i386.c (md_apply_fix3): Change handling of PCREL reloc
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index b4f5c76..96f416e 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -2305,63 +2305,59 @@ i386_operand (operand_string)
op_string = end_op;
if (is_space_char (*op_string))
++op_string;
- if (*op_string == ':')
+ if (*op_string == ':' && (r->reg_type & (SReg2 | SReg3)))
{
- if (r->reg_type & (SReg2 | SReg3))
+ switch (r->reg_num)
{
- switch (r->reg_num)
- {
- case 0:
- i.seg[i.mem_operands] = &es;
- break;
- case 1:
- i.seg[i.mem_operands] = &cs;
- break;
- case 2:
- i.seg[i.mem_operands] = &ss;
- break;
- case 3:
- i.seg[i.mem_operands] = &ds;
- break;
- case 4:
- i.seg[i.mem_operands] = &fs;
- break;
- case 5:
- i.seg[i.mem_operands] = &gs;
- break;
- }
+ case 0:
+ i.seg[i.mem_operands] = &es;
+ break;
+ case 1:
+ i.seg[i.mem_operands] = &cs;
+ break;
+ case 2:
+ i.seg[i.mem_operands] = &ss;
+ break;
+ case 3:
+ i.seg[i.mem_operands] = &ds;
+ break;
+ case 4:
+ i.seg[i.mem_operands] = &fs;
+ break;
+ case 5:
+ i.seg[i.mem_operands] = &gs;
+ break;
+ }
- /* Skip the ':' and whitespace. */
+ /* Skip the ':' and whitespace. */
+ ++op_string;
+ if (is_space_char (*op_string))
+ ++op_string;
+
+ /* Pretend given string starts here. */
+ operand_string = op_string;
+ if (!is_digit_char (*op_string)
+ && !is_identifier_char (*op_string)
+ && *op_string != '('
+ && *op_string != ABSOLUTE_PREFIX)
+ {
+ as_bad (_("bad memory operand `%s'"), op_string);
+ return 0;
+ }
+ /* Handle case of %es:*foo. */
+ if (*op_string == ABSOLUTE_PREFIX)
+ {
++op_string;
if (is_space_char (*op_string))
++op_string;
-
- /* Pretend given string starts here. */
- operand_string = op_string;
- if (!is_digit_char (*op_string)
- && !is_identifier_char (*op_string)
- && *op_string != '('
- && *op_string != ABSOLUTE_PREFIX)
- {
- as_bad (_("bad memory operand `%s'"), op_string);
- return 0;
- }
- /* Handle case of %es:*foo. */
- if (*op_string == ABSOLUTE_PREFIX)
- {
- ++op_string;
- if (is_space_char (*op_string))
- ++op_string;
- i.types[this_operand] |= JumpAbsolute;
- }
- goto do_memory_reference;
- }
- else
- {
- as_bad (_("bad segment prefix `%c%s'"),
- REGISTER_PREFIX, r->reg_name);
- return 0;
+ i.types[this_operand] |= JumpAbsolute;
}
+ goto do_memory_reference;
+ }
+ if (*op_string)
+ {
+ as_bad (_("Junk `%s' after register"), op_string);
+ return 0;
}
i.types[this_operand] |= r->reg_type & ~BaseIndex;
i.regs[this_operand] = r;