aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog8
-rw-r--r--gas/config/tc-i386.c2
-rw-r--r--gas/testsuite/ChangeLog4
-rw-r--r--gas/testsuite/gas/i386/inval-equ-2.l12
-rw-r--r--gas/write.c3
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. */