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;
if (intel_state.seg)
{
- for (;;)
+ for (ret = check_none; ; ret = operand_check)
{
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;
}
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;