mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-24 18:44:20 +08:00
Restore "call|jmp [xtrn]" in x86 assembler.
gas/ 2010-04-24 H.J. Lu <hongjiu.lu@intel.com> PR gas/11535 * config/tc-i386-intel.c (intel_state): Add is_indirect. (i386_intel_operand): Initialize intel_state.is_indirect. Check intel_state.is_indirect for "call|jmp [symbol]". gas/testsuite/ 2010-04-24 H.J. Lu <hongjiu.lu@intel.com> PR gas/11535 * gas/i386/intelok.s: Add tests for "call|jmp [xtrn]". * gas/i386/intelok.d: Updated.
This commit is contained in:
parent
bd288ea21b
commit
253036079b
@ -1,3 +1,10 @@
|
||||
2010-04-24 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR gas/11535
|
||||
* config/tc-i386-intel.c (intel_state): Add is_indirect.
|
||||
(i386_intel_operand): Initialize intel_state.is_indirect. Check
|
||||
intel_state.is_indirect for "call|jmp [symbol]".
|
||||
|
||||
2010-04-22 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* po/gas.pot: Updated by the Translation project.
|
||||
|
@ -23,6 +23,7 @@ static struct
|
||||
{
|
||||
operatorT op_modifier; /* Operand modifier. */
|
||||
int is_mem; /* 1 if operand is memory reference. */
|
||||
int is_indirect; /* 1 if operand is indirect reference. */
|
||||
int has_offset; /* 1 if operand has offset. */
|
||||
unsigned int in_offset; /* >=1 if processing operand of offset. */
|
||||
unsigned int in_bracket; /* >=1 if processing operand in brackets. */
|
||||
@ -491,6 +492,7 @@ i386_intel_operand (char *operand_string, int got_a_float)
|
||||
/* Initialize state structure. */
|
||||
intel_state.op_modifier = O_absent;
|
||||
intel_state.is_mem = 0;
|
||||
intel_state.is_indirect = 0;
|
||||
intel_state.has_offset = 0;
|
||||
intel_state.base = NULL;
|
||||
intel_state.index = NULL;
|
||||
@ -528,7 +530,10 @@ i386_intel_operand (char *operand_string, int got_a_float)
|
||||
else if (!intel_state.has_offset
|
||||
&& input_line_pointer > buf
|
||||
&& *(input_line_pointer - 1) == ']')
|
||||
intel_state.is_mem |= 1;
|
||||
{
|
||||
intel_state.is_mem |= 1;
|
||||
intel_state.is_indirect = 1;
|
||||
}
|
||||
|
||||
input_line_pointer = saved_input_line_pointer;
|
||||
free (buf);
|
||||
@ -674,7 +679,11 @@ i386_intel_operand (char *operand_string, int got_a_float)
|
||||
{
|
||||
intel_state.is_mem = 1;
|
||||
if (intel_state.op_modifier == O_absent)
|
||||
break;
|
||||
{
|
||||
if (intel_state.is_indirect == 1)
|
||||
i.types[this_operand].bitfield.jumpabsolute = 1;
|
||||
break;
|
||||
}
|
||||
as_bad (_("cannot infer the segment part of the operand"));
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,3 +1,9 @@
|
||||
2010-04-24 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR gas/11535
|
||||
* gas/i386/intelok.s: Add tests for "call|jmp [xtrn]".
|
||||
* gas/i386/intelok.d: Updated.
|
||||
|
||||
2010-04-21 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* gas/tic6x/insns-c674x.s, gas/tic6x/insns-c674x.d: Also test
|
||||
|
@ -204,4 +204,6 @@ Disassembly of section .text:
|
||||
[ ]*[0-9a-f]+: ea 03 00 00 00 05 00[ ]+l?jmp[ ]+0x5[,:]0x3
|
||||
[ ]*[0-9a-f]+: ff 15 00 00 00 00[ ]+call[ ]+DWORD PTR (ds:)?(0x)?0
|
||||
[ ]*[0-9a-f]+: 66 ff 25 00 00 00 00[ ]+jmp[ ]+WORD PTR (ds:)?(0x)?0
|
||||
[ ]*[0-9a-f]+: ff 15 00 00 00 00[ ]+call[ ]+DWORD PTR (ds:)?(0x)?0
|
||||
[ ]*[0-9a-f]+: ff 25 00 00 00 00[ ]+jmp[ ]+DWORD PTR (ds:)?(0x)?0
|
||||
#pass
|
||||
|
@ -215,3 +215,5 @@ start:
|
||||
jmp 5:[3]
|
||||
call dword ptr xtrn
|
||||
jmp word ptr xtrn
|
||||
call [xtrn]
|
||||
jmp [xtrn]
|
||||
|
Loading…
Reference in New Issue
Block a user