This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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.

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

-- 
Alan Modra
Australia Development Lab, IBM


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]