diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 8 | ||||
-rw-r--r-- | gas/config/tc-i386.c | 2 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/inval-equ-2.l | 12 | ||||
-rw-r--r-- | gas/write.c | 3 |
5 files changed, 21 insertions, 8 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 0ad7a54..56542cd 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2014-10-18 Alan Modra <amodra@gmail.com> + + PR 17493 + * write.c (adjust_reloc_syms): Don't allow symbols in reg_section + to be reduced to reg_section section symbol. + * gas/config/tc-i386.c (i386_finalize_immediate): Reject all + reg_section immediates. + 2014-10-17 Matthew Fortune <matthew.fortune@imgtec.com> * doc/c-mips.texi: Fix bad @value references. diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 38e9781..2e34ce3 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -7985,7 +7985,7 @@ i386_finalize_immediate (segT exp_seg ATTRIBUTE_UNUSED, expressionS *exp, return 0; } #endif - else if (!intel_syntax && exp->X_op == O_register) + else if (!intel_syntax && exp_seg == reg_section) { if (imm_start) as_bad (_("illegal immediate register operand %s"), imm_start); diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 4cbfd06..396d5ab 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2014-10-18 Alan Modra <amodra@gmail.com> + + * gas/i386/inval-equ-2.l: Adjust. + 2014-10-09 Jose E. Marchesi <jose.marchesi@oracle.com> * gas/sparc/hpcvis3.d: Remove tests for the `chkpt', `commit', diff --git a/gas/testsuite/gas/i386/inval-equ-2.l b/gas/testsuite/gas/i386/inval-equ-2.l index eafaf25..11f5e4e 100644 --- a/gas/testsuite/gas/i386/inval-equ-2.l +++ b/gas/testsuite/gas/i386/inval-equ-2.l @@ -7,15 +7,15 @@ GAS LISTING .* [ ]*1[ ]+\.globl bar1 [ ]*2[ ]+\.set bar1,\(%eax\+1\) -[ ]*3[ ]+\?\?\?\? A12A0000 mov bar1,%eax -[ ]*3[ ]+00 +[ ]*3[ ]+\?\?\?\? A1...... mov bar1,%eax +[ ]*3[ ]+.. [ ]*4[ ]+\.set bar2,\(%eax\+1\) -[ ]*5[ ]+\?\?\?\? A12A0000 mov bar2,%eax -[ ]*5[ ]+00 +[ ]*5[ ]+\?\?\?\? A1...... mov bar2,%eax +[ ]*5[ ]+.. [ ]*6[ ]+\.globl bar2 [ ]*7[ ]+\.set bar3,\(%eax\+1\) -[ ]*8[ ]+\?\?\?\? A12A0000 mov bar3,%eax +[ ]*8[ ]+\?\?\?\? A1...... mov bar3,%eax .* Error: can't make global register symbol `bar1' .* Error: can't make global register symbol `bar2' .* Error: can't make global register symbol `bar3' -[ ]*8[ ]+00 +[ ]*8[ ]+.. diff --git a/gas/write.c b/gas/write.c index 263b002..0f82d47 100644 --- a/gas/write.c +++ b/gas/write.c @@ -836,7 +836,8 @@ adjust_reloc_syms (bfd *abfd ATTRIBUTE_UNUSED, if (symsec == NULL) abort (); - if (bfd_is_abs_section (symsec)) + if (bfd_is_abs_section (symsec) + || symsec == reg_section) { /* The fixup_segment routine normally will not use this symbol in a relocation. */ |