This is the mail archive of the binutils@sources.redhat.com 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] m32r's pcrel relocate miss at between different sectionsin the same module.


Hi Nick,

The following patch must be applied for 2.15 branch too.
Would you commit it into the 2.15-branch?

http://sourceware.org/ml/binutils/2004-11/msg00365.html

Regards,

Kazuhiro Inaoka

Kazuhiro Inaoka wrote:

Hi Nick,

m32r-*-as has a relocate miss at pcrel between different sections
in the same module.
In this case, the relocation field was not 0 with RELA and the addend was 0.


These are patterns of test and a patch for it.

Please commit it.

Kazuhiro Inaoka

gas/ChangeLog

2004-11-29  Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com>
    * config/tc-m32r.c (md_pcrel_from_section): Fixed a pcrel
    relocte miss between different section in the same module.
    (tc_gen_reloc): Ditto.
    * testsuite/gas/m32r/rela-1.s: New file.
    * testsuite/gas/m32r/rela-1.d: New file.
    * testsuite/gas/m32r/m32r.exp: Add new file.
    * testsuite/gas/m32r/relax-1.d: Update file.


------------------------------------------------------------------------


Index: config/tc-m32r.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-m32r.c,v
retrieving revision 1.37
diff -u -r1.37 tc-m32r.c
--- config/tc-m32r.c 25 Jun 2004 16:11:09 -0000 1.37
+++ config/tc-m32r.c 29 Nov 2004 07:57:17 -0000
@@ -1999,6 +1999,12 @@
|| S_IS_EXTERNAL (fixP->fx_addsy)
|| S_IS_WEAK (fixP->fx_addsy)))
{
+ if (S_GET_SEGMENT(fixP->fx_addsy) != sec
+ && S_IS_DEFINED (fixP->fx_addsy)
+ && ! S_IS_EXTERNAL(fixP->fx_addsy)
+ && ! S_IS_WEAK(fixP->fx_addsy))
+ return fixP->fx_offset;
+
/* The symbol is undefined (or is defined but not in this section).
Let the linker figure it out. */
return 0;
@@ -2488,7 +2494,7 @@
&& ! S_IS_EXTERNAL(fixP->fx_addsy)
&& ! S_IS_WEAK(fixP->fx_addsy))
/* Already used fx_offset in the opcode field itseld. */
- reloc->addend = 0;
+ reloc->addend = fixP->fx_offset;
else
reloc->addend = fixP->fx_addnumber;



------------------------------------------------------------------------


diff -N ./m32r.exp new/m32r.exp
9a10

run_dump_test "rela-1"

diff -N ./rela-1.d new/rela-1.d 0a1,24

#as:
#objdump: -dr
#name: rela-1

.*: +file format .*

Disassembly of section .text:

0+0000 <.text>:
  0:	fe 00 00 00 	bl 0 <.text>
			0: R_M32R_26_PCREL_RELA	.text2\+0x8
  4:	fe 00 00 00 	bl 4 <.text\+0x4>
			4: R_M32R_26_PCREL_RELA	.text2\+0x8
  8:	7e 00 f0 00 	bl 8 <.text\+0x8> \|\| nop
			8: R_M32R_10_PCREL_RELA	.text2\+0x8
  c:	b0 90 00 00 	bnez r0,c <.text\+0xc>
			c: R_M32R_18_PCREL_RELA	.text2\+0x8
 10:	10 80 7e 00 	mv r0,r0 -> bl 10 <.text\+0x10>
			12: R_M32R_10_PCREL_RELA	.text2\+0x8
Disassembly of section .text2:

0+0000 <label-0x8>:
  0:	70 00 70 00 	nop -> nop
  4:	70 00 70 00 	nop -> nop

diff -N ./rela-1.s new/rela-1.s 0a1,18

	.section .text
	bl	label
	bl.l	label
	bl.s	label
	bnez	r0,label
	mv	r0,r0
	bl.s	label

.section .text2, "ax" nop
nop
nop
nop
label:
.end




diff -N ./relax-1.d new/relax-1.d 17,18c17,18 < *0: ff 00 00 01 bra 4 <Work> < [ ]*0: R_M32R_26_PCREL_RELA .text ---

*0:	ff 00 00 00 	bra 0 <branch>
[ 	]*0: R_M32R_26_PCREL_RELA	.text\+0x4


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