diff options
author | Ian Lance Taylor <ian@airs.com> | 1998-10-20 15:24:45 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1998-10-20 15:24:45 +0000 |
commit | 7540e470968b1b658d0da258a47244c476ff8b3d (patch) | |
tree | b926aefb450a1e174c29f020caa475607e7d51b2 | |
parent | f5003e7d628285d7d578ae4b1149ce23dbe12694 (diff) | |
download | gdb-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/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-i386.c | 96 |
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; |