Movatterモバイル変換
[0]ホーム
This is the mail archive of thebinutils@sources.redhat.commailing list for thebinutils project.
Re: Binutils 2.14 prerelease 2
- From: Nick Clifton <nickc at redhat dot com>
- To: drow at mvista dot com
- Cc: binutils at sources dot redhat dot com
- Date: Tue, 03 Jun 2003 17:10:29 +0100
- Subject: Re: Binutils 2.14 prerelease 2
- References: <20030602211451.GA29294@nevyn.them.org>
Hi Daniel,> I've just uploaded the new prerelease to:>ftp://sources.redhat.com/pub/binutils/snapshots/binutils-2.13.92.tar.bz2>> There are some test failures on mips-linux (all testsuite problems);> mips64-linux (dunno); v850-elf (ld-elf/merge);The v850-elf bug is due to the fact that the port did not have apc-relative 32-bit reloc. The following patch fixes this and I willbe applying it to the mainline and branch shortly.Cheers Nickinclude/elf/ChangeLog 2003-06-03 Nick Clifton <nickc@redhat.com>* v850.h (R_V850_32): Rename to R_V850_ABS32. Add R_V850_REL32.bfd/ChangeLog 2003-06-03 Nick Clifton <nickc@redhat.com>* elf32-v850.c (v850_elf_howto_t): Rename R_V850_32toR_V850_ABS32. Add entry for R_V850_REL32. (v850_elf_reloc_map): Likewise. (v850_elf_check_relocs): Likewise. (v850_elf_perform_relocation): Likewise. (v850_elf_final_link_relocate): Likewise. Include computationto make R_V850_REl32 pc-relative. gas/ChangeLog 2003-06-03 Nick Clifton <nickc@redhat.com>* tc-v850.c (tc-gen_reloc): Translate BFD_RELOC_32 into BFD_RELOC_32_PCREL if the reloc is pc-relative. Do this before calling bfd_reloc_type_lookup. Index: include/elf/v850.h===================================================================RCS file: /cvs/src/src/include/elf/v850.h,vretrieving revision 1.6diff -c -3 -p -r1.6 v850.h*** include/elf/v850.h29 Aug 2002 06:49:35 -00001.6--- include/elf/v850.h3 Jun 2003 16:14:05 -0000*************** START_RELOC_NUMBERS (v850_reloc_type)*** 53,59 **** RELOC_NUMBER (R_V850_HI16_S, 3) RELOC_NUMBER (R_V850_HI16, 4) RELOC_NUMBER (R_V850_LO16, 5)! RELOC_NUMBER (R_V850_32, 6) RELOC_NUMBER (R_V850_16, 7) RELOC_NUMBER (R_V850_8, 8) RELOC_NUMBER( R_V850_SDA_16_16_OFFSET, 9)/* For ld.b, st.b, set1, clr1, not1, tst1, movea, movhi */--- 53,59 ---- RELOC_NUMBER (R_V850_HI16_S, 3) RELOC_NUMBER (R_V850_HI16, 4) RELOC_NUMBER (R_V850_LO16, 5)! RELOC_NUMBER (R_V850_ABS32, 6) RELOC_NUMBER (R_V850_16, 7) RELOC_NUMBER (R_V850_8, 8) RELOC_NUMBER( R_V850_SDA_16_16_OFFSET, 9)/* For ld.b, st.b, set1, clr1, not1, tst1, movea, movhi */*************** START_RELOC_NUMBERS (v850_reloc_type)*** 75,80 ****--- 75,81 ---- RELOC_NUMBER (R_V850_LONGCALL, 25) RELOC_NUMBER (R_V850_LONGJUMP, 26) RELOC_NUMBER (R_V850_ALIGN, 27)+ RELOC_NUMBER (R_V850_REL32, 28) END_RELOC_NUMBERS (R_V850_max) Index: bfd/elf32-v850.c===================================================================RCS file: /cvs/src/src/bfd/elf32-v850.c,vretrieving revision 1.31diff -c -3 -p -r1.31 elf32-v850.c*** bfd/elf32-v850.c9 May 2003 02:27:04 -00001.31--- bfd/elf32-v850.c3 Jun 2003 16:14:07 -0000*************** static reloc_howto_type v850_elf_howto_t*** 189,195 **** FALSE),/* pcrel_offset */ /* Simple 32bit reloc. */! HOWTO (R_V850_32,/* type */ 0,/* rightshift */ 2,/* size (0 = byte, 1 = short, 2 = long) */ 32,/* bitsize */--- 189,195 ---- FALSE),/* pcrel_offset */ /* Simple 32bit reloc. */! HOWTO (R_V850_ABS32,/* type */ 0,/* rightshift */ 2,/* size (0 = byte, 1 = short, 2 = long) */ 32,/* bitsize */*************** static reloc_howto_type v850_elf_howto_t*** 197,203 **** 0,/* bitpos */ complain_overflow_dont,/* complain_on_overflow */ v850_elf_reloc,/* special_function */! "R_V850_32",/* name */ FALSE,/* partial_inplace */ 0xffffffff,/* src_mask */ 0xffffffff,/* dst_mask */--- 197,203 ---- 0,/* bitpos */ complain_overflow_dont,/* complain_on_overflow */ v850_elf_reloc,/* special_function */! "R_V850_ABS32",/* name */ FALSE,/* partial_inplace */ 0xffffffff,/* src_mask */ 0xffffffff,/* dst_mask */*************** static reloc_howto_type v850_elf_howto_t*** 518,523 ****--- 518,538 ---- 0, /* src_mask */ 0, /* dst_mask */ TRUE), /* pcrel_offset */+ + /* Simple pc-relative 32bit reloc. */+ HOWTO (R_V850_REL32,/* type */+ 0,/* rightshift */+ 2,/* size (0 = byte, 1 = short, 2 = long) */+ 32,/* bitsize */+ TRUE,/* pc_relative */+ 0,/* bitpos */+ complain_overflow_dont,/* complain_on_overflow */+ v850_elf_reloc,/* special_function */+ "R_V850_REL32",/* name */+ FALSE,/* partial_inplace */+ 0xffffffff,/* src_mask */+ 0xffffffff,/* dst_mask */+ FALSE),/* pcrel_offset */ }; /* Map BFD reloc types to V850 ELF reloc types. */*************** static const struct v850_elf_reloc_map v*** 538,544 **** { BFD_RELOC_HI16_S, R_V850_HI16_S }, { BFD_RELOC_HI16, R_V850_HI16 }, { BFD_RELOC_LO16, R_V850_LO16 },! { BFD_RELOC_32, R_V850_32 }, { BFD_RELOC_16, R_V850_16 }, { BFD_RELOC_8, R_V850_8 }, { BFD_RELOC_V850_SDA_16_16_OFFSET, R_V850_SDA_16_16_OFFSET },--- 553,560 ---- { BFD_RELOC_HI16_S, R_V850_HI16_S }, { BFD_RELOC_HI16, R_V850_HI16 }, { BFD_RELOC_LO16, R_V850_LO16 },! { BFD_RELOC_32, R_V850_ABS32 },! { BFD_RELOC_32_PCREL, R_V850_REL32 }, { BFD_RELOC_16, R_V850_16 }, { BFD_RELOC_8, R_V850_8 }, { BFD_RELOC_V850_SDA_16_16_OFFSET, R_V850_SDA_16_16_OFFSET },*************** v850_elf_check_relocs (abfd, info, sec, *** 672,678 **** case R_V850_HI16_S: case R_V850_HI16: case R_V850_LO16:! case R_V850_32: case R_V850_16: case R_V850_8: case R_V850_CALLT_6_7_OFFSET:--- 688,695 ---- case R_V850_HI16_S: case R_V850_HI16: case R_V850_LO16:! case R_V850_ABS32:! case R_V850_REL32: case R_V850_16: case R_V850_8: case R_V850_CALLT_6_7_OFFSET:*************** v850_elf_perform_relocation (abfd, r_typ*** 905,911 **** /* fprintf (stderr, "reloc type %d not SUPPORTED\n", r_type ); */ return bfd_reloc_notsupported; ! case R_V850_32: bfd_put_32 (abfd, addend, address); return bfd_reloc_ok; --- 922,929 ---- /* fprintf (stderr, "reloc type %d not SUPPORTED\n", r_type ); */ return bfd_reloc_notsupported; ! case R_V850_REL32:! case R_V850_ABS32: bfd_put_32 (abfd, addend, address); return bfd_reloc_ok; *************** v850_elf_final_link_relocate (howto, inp*** 1466,1476 **** value = SEXT24 (value); break; case R_V850_HI16_S: case R_V850_HI16: case R_V850_LO16: case R_V850_16:! case R_V850_32: case R_V850_8: break; --- 1484,1500 ---- value = SEXT24 (value); break; + case R_V850_REL32:+ value -= (input_section->output_section->vma+ + input_section->output_offset+ + offset);+ break;+ case R_V850_HI16_S: case R_V850_HI16: case R_V850_LO16: case R_V850_16:! case R_V850_ABS32: case R_V850_8: break; Index: gas/config/tc-v850.c===================================================================RCS file: /cvs/src/src/gas/config/tc-v850.c,vretrieving revision 1.32diff -c -3 -p -r1.32 tc-v850.c*** gas/config/tc-v850.c21 May 2003 12:07:56 -00001.32--- gas/config/tc-v850.c3 Jun 2003 16:14:09 -0000*************** tc_gen_reloc (seg, fixp)*** 2239,2244 ****--- 2239,2260 ---- reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;+ + if ( fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY+ || fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT+ || fixp->fx_r_type == BFD_RELOC_V850_LONGCALL+ || fixp->fx_r_type == BFD_RELOC_V850_LONGJUMP+ || fixp->fx_r_type == BFD_RELOC_V850_ALIGN)+ reloc->addend = fixp->fx_offset;+ else+ {+ if (fixp->fx_r_type == BFD_RELOC_32+ && fixp->fx_pcrel)+ fixp->fx_r_type = BFD_RELOC_32_PCREL;+ + reloc->addend = fixp->fx_addnumber;+ }+ reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type); if (reloc->howto == (reloc_howto_type *) NULL)*************** tc_gen_reloc (seg, fixp)*** 2252,2267 **** return NULL; }- - if (fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY- || fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT)- reloc->addend = fixp->fx_offset;- else if ( fixp->fx_r_type == BFD_RELOC_V850_LONGCALL- || fixp->fx_r_type == BFD_RELOC_V850_LONGJUMP- || fixp->fx_r_type == BFD_RELOC_V850_ALIGN)- reloc->addend = fixp->fx_offset;- else- reloc->addend = fixp->fx_addnumber; return reloc; }--- 2268,2273 ----
[8]ページ先頭