diff options
-rw-r--r-- | gas/ChangeLog | 13 | ||||
-rw-r--r-- | gas/config/tc-i386-intel.c | 8 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/intelok.s | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/inval-seg.l | 18 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/inval-seg.s | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-inval-seg.l | 22 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-inval-seg.s | 6 |
7 files changed, 57 insertions, 18 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 1a3439d..81ce3f7 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,16 @@ +2017-08-01 H.J. Lu <hongjiu.lu@intel.com> + + PR gas/21874 + * config/tc-i386-intel.c (i386_intel_operand): Update segment + register check. + * testsuite/gas/i386/intelok.s: Replace "fs:gs:[eax]" with + "fs:[eax]". + * testsuite/gas/i386/inval-seg.s: Add tests for invalid segment + register. + * testsuite/gas/i386/x86-64-inval-seg.s: Likewise. + * testsuite/gas/i386/inval-seg.l: Updated. + * testsuite/gas/i386/x86-64-inval-seg.l: Likewise. + 2017-07-31 John David Anglin <danglin@gcc.gnu.org> * config/tc-hppa.c (pa_ip): Clear `d' bit in branch on bit instructions diff --git a/gas/config/tc-i386-intel.c b/gas/config/tc-i386-intel.c index 92ed98e..9e8135e 100644 --- a/gas/config/tc-i386-intel.c +++ b/gas/config/tc-i386-intel.c @@ -932,13 +932,7 @@ i386_intel_operand (char *operand_string, int got_a_float) if (intel_state.seg) { - for (;;) - { - expP = symbol_get_value_expression (intel_state.seg); - if (expP->X_op != O_full_ptr) - break; - intel_state.seg = expP->X_add_symbol; - } + expP = symbol_get_value_expression (intel_state.seg); if (expP->X_op != O_register) { as_bad (_("segment register name expected")); diff --git a/gas/testsuite/gas/i386/intelok.s b/gas/testsuite/gas/i386/intelok.s index eae9c2d..4c16613 100644 --- a/gas/testsuite/gas/i386/intelok.s +++ b/gas/testsuite/gas/i386/intelok.s @@ -150,7 +150,7 @@ start: mov eax, [eax[ecx]] mov eax, [[eax][ecx]] mov eax, es:[eax] - mov eax, fs:gs:[eax] + mov eax, fs:[eax] # expressions diff --git a/gas/testsuite/gas/i386/inval-seg.l b/gas/testsuite/gas/i386/inval-seg.l index efe190e..c1bbef9 100644 --- a/gas/testsuite/gas/i386/inval-seg.l +++ b/gas/testsuite/gas/i386/inval-seg.l @@ -1,10 +1,20 @@ .*: Assembler messages: .*:3: Error: .* .*:4: Error: .* +.*:7: Error: .* +.*:8: Error: .* +.*:9: Error: .* +.*:10: Error: .* GAS LISTING .* - 1 [ ]* .text - 2 [ ]*# All the following should be illegal - 3 [ ]* movl %ds,\(%eax\) - 4 [ ]* movl \(%eax\),%ds +[ ]*1[ ]+\.text +[ ]*2[ ]+\# All the following should be illegal +[ ]*3[ ]+movl %ds,\(%eax\) +[ ]*4[ ]+movl \(%eax\),%ds +[ ]*5[ ]+ +[ ]*6[ ]+\.intel_syntax noprefix +[ ]*7[ ]+mov eax, DWORD PTR fs:foobar:16 +[ ]*8[ ]+mov eax, DWORD PTR fs:foobar:barfoo:16 +[ ]*9[ ]+mov eax, DWORD PTR fs:ds:16 +[ ]*10[ ]+mov eax, DWORD PTR fs:ds:cs:16 diff --git a/gas/testsuite/gas/i386/inval-seg.s b/gas/testsuite/gas/i386/inval-seg.s index 4cc2221..b23d87d 100644 --- a/gas/testsuite/gas/i386/inval-seg.s +++ b/gas/testsuite/gas/i386/inval-seg.s @@ -2,3 +2,9 @@ # All the following should be illegal movl %ds,(%eax) movl (%eax),%ds + + .intel_syntax noprefix + mov eax, DWORD PTR fs:foobar:16 + mov eax, DWORD PTR fs:foobar:barfoo:16 + mov eax, DWORD PTR fs:ds:16 + mov eax, DWORD PTR fs:ds:cs:16 diff --git a/gas/testsuite/gas/i386/x86-64-inval-seg.l b/gas/testsuite/gas/i386/x86-64-inval-seg.l index adef5d4..51deb15 100644 --- a/gas/testsuite/gas/i386/x86-64-inval-seg.l +++ b/gas/testsuite/gas/i386/x86-64-inval-seg.l @@ -3,12 +3,22 @@ .*:4: Error: .* .*:5: Error: .* .*:6: Error: .* +.*:9: Error: .* +.*:10: Error: .* +.*:11: Error: .* +.*:12: Error: .* GAS LISTING .* - 1 [ ]* .text - 2 [ ]*# All the following should be illegal - 3 [ ]* movq %ds,\(%rax\) - 4 [ ]* movl %ds,\(%rax\) - 5 [ ]* movq \(%rax\),%ds - 6 [ ]* movl \(%rax\),%ds +[ ]*1[ ]+\.text +[ ]*2[ ]+\# All the following should be illegal +[ ]*3[ ]+movq %ds,\(%rax\) +[ ]*4[ ]+movl %ds,\(%rax\) +[ ]*5[ ]+movq \(%rax\),%ds +[ ]*6[ ]+movl \(%rax\),%ds +[ ]*7[ ]+ +[ ]*8[ ]+\.intel_syntax noprefix +[ ]*9[ ]+mov eax, DWORD PTR fs:foobar:16 +[ ]*10[ ]+mov eax, DWORD PTR fs:foobar:barfoo:16 +[ ]*11[ ]+mov eax, DWORD PTR fs:ds:16 +[ ]*12[ ]+mov eax, DWORD PTR fs:ds:cs:16 diff --git a/gas/testsuite/gas/i386/x86-64-inval-seg.s b/gas/testsuite/gas/i386/x86-64-inval-seg.s index bb54742..cfe46cf 100644 --- a/gas/testsuite/gas/i386/x86-64-inval-seg.s +++ b/gas/testsuite/gas/i386/x86-64-inval-seg.s @@ -4,3 +4,9 @@ movl %ds,(%rax) movq (%rax),%ds movl (%rax),%ds + + .intel_syntax noprefix + mov eax, DWORD PTR fs:foobar:16 + mov eax, DWORD PTR fs:foobar:barfoo:16 + mov eax, DWORD PTR fs:ds:16 + mov eax, DWORD PTR fs:ds:cs:16 |