Fix PR17493, attempted output of *GAS `reg' section* symbol

The write.c change is to make gas report an error if reg_section
symbols should leak in future.  The tc-i386.c change is the real fix.

Note that the error isn't the most helpful, "redefined symbol cannot
be used on reloc", but I'm not inclined to improve what is really an
internal gas error.  reg_section symbols shouldn't leak..

gas/
	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.
gas/testsuite/
	* gas/i386/inval-equ-2.l: Adjust.
This commit is contained in:
Alan Modra 2014-10-18 11:10:53 +10:30
parent 998a69f46a
commit a841bdf5d3
5 changed files with 21 additions and 8 deletions

View File

@ -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.

View File

@ -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);

View File

@ -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',

View File

@ -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[ ]+..

View File

@ -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. */