projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
x86/Intel: issue diagnostics for redundant segment override prefixes
[deliverable/binutils-gdb.git]
/
gas
/
config
/
tc-i386-intel.c
diff --git
a/gas/config/tc-i386-intel.c
b/gas/config/tc-i386-intel.c
index 74aae24c41ba80c7ce5dc68104c4cdc43ec03148..99d215e8eff3d088ee9cd01b41c5e90de58aef4b 100644
(file)
--- a/
gas/config/tc-i386-intel.c
+++ b/
gas/config/tc-i386-intel.c
@@
-413,7
+413,19
@@
static int i386_intel_simplify (expressionS *e)
intel_state.index))
return 0;
if (!intel_state.in_offset)
intel_state.index))
return 0;
if (!intel_state.in_offset)
- intel_state.seg = e->X_add_symbol;
+ {
+ if (!intel_state.seg)
+ intel_state.seg = e->X_add_symbol;
+ else
+ {
+ expressionS exp;
+
+ exp.X_op = O_full_ptr;
+ exp.X_add_symbol = e->X_add_symbol;
+ exp.X_op_symbol = intel_state.seg;
+ intel_state.seg = make_expr_symbol (&exp);
+ }
+ }
i386_intel_fold (e, e->X_op_symbol);
break;
i386_intel_fold (e, e->X_op_symbol);
break;
@@
-956,10
+968,12
@@
i386_intel_operand (char *operand_string, int got_a_float)
if (intel_state.seg)
{
if (intel_state.seg)
{
- for (
;;
)
+ for (
ret = check_none; ; ret = operand_check
)
{
expP = symbol_get_value_expression (intel_state.seg);
{
expP = symbol_get_value_expression (intel_state.seg);
- if (expP->X_op != O_full_ptr)
+ if (expP->X_op != O_full_ptr
+ || symbol_get_value_expression (expP->X_op_symbol)->X_op
+ != O_register)
break;
intel_state.seg = expP->X_add_symbol;
}
break;
intel_state.seg = expP->X_add_symbol;
}
@@
-974,6
+988,15
@@
i386_intel_operand (char *operand_string, int got_a_float)
as_bad (_("invalid use of register"));
return 0;
}
as_bad (_("invalid use of register"));
return 0;
}
+ switch (ret)
+ {
+ case check_error:
+ as_bad (_("redundant segment overrides"));
+ return 0;
+ case check_warning:
+ as_warn (_("redundant segment overrides"));
+ break;
+ }
switch (i386_regtab[expP->X_add_number].reg_num)
{
case 0: i.seg[i.mem_operands] = &es; break;
switch (i386_regtab[expP->X_add_number].reg_num)
{
case 0: i.seg[i.mem_operands] = &es; break;
This page took
0.037846 seconds
and
4
git commands to generate.