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]

Re: [PATCH] MIPS gas: Fix broken relocation sorting


Richard Sandiford wrote:

Thus if we were indeed converting R_MIPS_GOT16 relocations against local symbols into R_MIPS_GOT16 relocations against global symbols, (1) would be the right fix. But like I say, the bug appears at first glance to be in pic_need_relax.


New version of the patch:


Tested as before with mipsel-linux cross build no regressions.

OK to commit?

If this looks better, I will restart my gcc-4.2 boot strap with this instead.

gas:
2006-11-06  David Daney  <ddaney@avtrex.com>

* config/tc-mips.c (pic_need_relax): Return true for section symbols.

gas/testsuite:
2006-11-06  David Daney  <ddaney@avtrex.com>

	* gas/mips/elf-rel26.s: New test.
	* gas/mips/elf-rel26.d: Ditto.
	* gas/mips/mips.exp: Run it.
? doc/as.info
Index: config/tc-mips.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-mips.c,v
retrieving revision 1.359
diff -c -p -r1.359 tc-mips.c
*** config/tc-mips.c	6 Nov 2006 14:28:21 -0000	1.359
--- config/tc-mips.c	7 Nov 2006 22:07:59 -0000
*************** pic_need_relax (symbolS *sym, asection *
*** 13153,13158 ****
--- 13153,13161 ----
        sym = n;
      }
  
+   if (symbol_section_p (sym))
+     return TRUE;
+ 
    symsec = S_GET_SEGMENT (sym);
  
    /* This must duplicate the test in adjust_reloc_syms.  */
Index: testsuite/gas/mips/elf-rel26.d
===================================================================
RCS file: testsuite/gas/mips/elf-rel26.d
diff -N testsuite/gas/mips/elf-rel26.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- testsuite/gas/mips/elf-rel26.d	7 Nov 2006 22:08:00 -0000
***************
*** 0 ****
--- 1,22 ----
+ #as: -mips32 -EL -KPIC
+ #readelf: --relocs
+ #name: MIPS ELF reloc 26
+ 
+ Relocation section '\.rel\.pdr' .*
+  *Offset.*
+ 00.*
+ 
+ Relocation section '\.rel\.text\.foo' at offset .* contains 11 entries:
+  *Offset * Info * Type * Sym\.Value * Sym\. Name
+ 0+000 * .+ * R_MIPS_HI16 * 0+0 * _gp_disp
+ 0+004 * .+ * R_MIPS_LO16 * 0+0 * _gp_disp
+ 0+014 * .+ * R_MIPS_GOT16 * 0+0 * \$LC28
+ 0+01c * .+ * R_MIPS_LO16 * 0+0 * \$LC28
+ 0+020 * .+ * R_MIPS_CALL16 * 0+0 * bar
+ 0+030 * .+ * R_MIPS_PC16 * 0+0 * \$L846
+ 0+034 * .+ * R_MIPS_GOT16 * 0+0 * \$LC27
+ 0+038 * .+ * R_MIPS_PC16 * 0+0 * \$L848
+ 0+048 * .+ * R_MIPS_PC16 * 0+0 * \$L925
+ 0+010 * .+ * R_MIPS_GOT16 * 0+0 * \.rodata\.foo
+ 0+05c * .+ * R_MIPS_LO16 * 0+0 * \.rodata\.foo
+ #pass
Index: testsuite/gas/mips/elf-rel26.s
===================================================================
RCS file: testsuite/gas/mips/elf-rel26.s
diff -N testsuite/gas/mips/elf-rel26.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- testsuite/gas/mips/elf-rel26.s	7 Nov 2006 22:08:00 -0000
***************
*** 0 ****
--- 1,62 ----
+ 	.section	.text.foo,"axG",@progbits,foo,comdat
+ 	.align	2
+ 	.weak	foo
+ 	.ent	foo
+ 	.type	foo, @function
+ foo:
+ $LFB308:
+ 	.frame	$fp,136,$31		# vars= 72, regs= 10/0, args= 16, gp= 8
+ 	.mask	0xc0ff0000,-4
+ 	.fmask	0x00000000,0
+ 	.set	noreorder
+ 	.cpload	$25
+ 
+ 	.set	nomacro
+ 	bne	$3,$0,$L924
+ 	lw	$25,%got($L874)($28)
+ 	.set	macro
+ 	.set	reorder
+ 	lw	$5,%got($LC28)($28)
+ 	lw	$4,136($fp)
+ 	addiu	$5,$5,%lo($LC28)
+ 	lw	$25,%call16(bar)($28)
+ 	.set	noreorder
+ 	.set	nomacro
+ 	jalr	$25
+ 	li	$6,-1			# 0xffffffffffffffff
+ 	.set	macro
+ 	.set	reorder
+ 	lw	$25,64($fp)
+ 	.set	noreorder
+ 	.set	nomacro
+ 	bne	$25,$0,$L846
+ 	lw	$5,%got($LC27)($28)
+ 	b	$L848
+ 	sw	$0,68($fp)
+ 	.set	macro
+ 	.set	reorder
+ $L920:
+ 	lb	$3,0($18)
+ 	li	$2,59			# 0x3b
+ 	.set	noreorder
+ 	.set	nomacro
+ 	beq	$3,$2,$L925
+ 	lw	$25,76($fp)
+ 	b	$L920
+ 	addiu	$18,$18,1
+ 	.set	macro
+ 	.set	reorder
+ 
+ $L924:
+ 	sll	$2,$2,2
+ 	addiu	$25,$25,%lo($L874)
+ 	addu	$2,$2,$25
+ 	lw	$3,0($2)
+ 	addu	$3,$3,$28
+ 	j	$3
+ 	.end foo
+ 	.section	.rodata.foo,"aG",@progbits,foo,comdat
+ 	.align	2
+ 	.align	2
+ $L874:
+ 	.gpword	$L924
Index: testsuite/gas/mips/mips.exp
===================================================================
RCS file: /cvs/src/src/gas/testsuite/gas/mips/mips.exp,v
retrieving revision 1.125
diff -c -p -r1.125 mips.exp
*** testsuite/gas/mips/mips.exp	2 Nov 2006 15:20:31 -0000	1.125
--- testsuite/gas/mips/mips.exp	7 Nov 2006 22:08:00 -0000
*************** if { [istarget mips*-*-vxworks*] } {
*** 687,692 ****
--- 687,693 ----
  
  	run_dump_test "elf-rel25"
  	run_dump_test "elf-rel25a"
+ 	run_dump_test "elf-rel26"
  
  	if { !$no_mips16 } {
  	    run_dump_test "${tmips}mips${el}16-e"

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