This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] MIPS gas: Fix broken relocation sorting
- From: David Daney <ddaney at avtrex dot com>
- To: binutils at sourceware dot org
- Cc: Richard Sandiford <richard at codesourcery dot com>
- Date: Tue, 07 Nov 2006 14:14:56 -0800
- Subject: Re: [PATCH] MIPS gas: Fix broken relocation sorting
- References: <4550F1D3.70705@avtrex.com> <87fycv2bk8.fsf@talisman.home>
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"