From binutils-return-33437-listarch-binutils=sources dot redhat dot com at sources dot redhat dot com Wed May 05 17:45:08 2004 Return-Path: Delivered-To: listarch-binutils at sources dot redhat dot com Received: (qmail 20913 invoked by alias); 5 May 2004 17:45:08 -0000 Mailing-List: contact binutils-help at sources dot redhat dot com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner at sources dot redhat dot com Delivered-To: mailing list binutils at sources dot redhat dot com Received: (qmail 20904 invoked from network); 5 May 2004 17:45:05 -0000 Received: from unknown (HELO dmz.algor.co.uk) (62.254.210.145) by sources dot redhat dot com with SMTP; 5 May 2004 17:45:05 -0000 Received: from alg158.algor.co.uk ([62.254.210.158] helo=olympia.mips.com) by dmz dot algor dot co dot uk with esmtp (Exim 3 dot 35 #1 (Debian)) id 1BLQgU-0007Tz-00; Wed, 05 May 2004 18:59:54 +0100 Received: from stockwell.mips.com ([192.168.192.238]) by olympia dot mips dot com with esmtp (Exim 3 dot 36 #1 (Debian)) id 1BLQRk-0004Mi-00; Wed, 05 May 2004 18:44:40 +0100 Subject: Re: [mips patch RFC] removal of gas embedded-pic support code From: David Ung To: cgd at broadcom dot com, ica2_ts at csv dot ica dot uni-stuttgart dot de, binutils at sources dot redhat dot com Content-Type: text/plain Organization: MIPS Technologies UK Message-Id: <1083779079.31797.223.camel@stockwell.mips.com> Mime-Version: 1.0 Date: Wed, 05 May 2004 18:44:40 +0100 Content-Transfer-Encoding: 7bit X-MTUK-Scanner: Found to be clean X-MTUK-SpamCheck: not spam, SpamAssassin (score=-4.833, required 4, AWL, BAYES_00) >At Thu, 29 Apr 2004 02:46:46 +0000 (UTC), "Thiemo Seufer" wrote: >> I think it is ok. > >Thanks for looking it over. > >I've checked it in. I *really* hope it really doesn't break >anything. 8-) > > >chris Chris, woops. your recent patch seem to have broke building of the compiler on linux. The problem occurs when building for libgcc/./_divdi3.o gas fails with: Error: operation combines symbols in different segments as it is trying to assemble this piece of .s code generated from gcc. .section .eh_frame,"aw",@progbits $Lframe1: .4byte $LECIE1-$LSCIE1 $LSCIE1: .4byte 0x0 .byte 0x1 .ascii "zR\000" .uleb128 0x1 .sleb128 4 .byte 0x1f .uleb128 0x1 .byte 0x1b .byte 0xc .uleb128 0x1d .uleb128 0x0 .align 2 $LECIE1: $LSFDE1: .4byte $LEFDE1-$LASFDE1 $LASFDE1: .4byte $LASFDE1-$Lframe1 .4byte $LFB42-. ** .4byte $LFE42-$LFB42 .uleb128 0x0 ** $LFB42 is from the text section of divdi3. I've reverted back the necessary changes to your patch, so that it now works with the above. David. Index: gas/ChangeLog =================================================================== RCS file: /cvsroot/gcc/src-cvs/src/gas/ChangeLog,v retrieving revision 1.2114 diff -u -r1.2114 ChangeLog --- gas/ChangeLog 29 Apr 2004 05:14:20 -0000 1.2114 +++ gas/ChangeLog 5 May 2004 17:38:51 -0000 @@ -1,0 +1,6 @@ +2004-05-05 David Ung + + * config/tc-mips.c (md_apply_fix3): Revert last change. + (tc_gen_reloc): Put back pc rel handling. + * config/tc-mips.h: Defines DIFF_EXPR_OK. + --- gas/config/tc-mips.c.orig 2006-07-15 20:23:51.000000000 +0200 +++ gas/config/tc-mips.c 2006-07-17 10:51:06.164440000 +0200 @@ -11736,8 +11736,6 @@ buf = (bfd_byte *) (fixP->fx_frag->fr_literal + fixP->fx_where); - assert (!fixP->fx_pcrel || fixP->fx_r_type == BFD_RELOC_16_PCREL_S2); - /* Don't treat parts of a composite relocation as done. There are two reasons for this: @@ -13562,8 +13560,6 @@ if (fixp->fx_pcrel) { - assert (fixp->fx_r_type == BFD_RELOC_16_PCREL_S2); - /* At this point, fx_addnumber is "symbol offset - pcrel address". Relocations want only the symbol offset. */ reloc->addend = fixp->fx_addnumber + reloc->address; @@ -13588,6 +13584,34 @@ } code = fixp->fx_r_type; + if (fixp->fx_pcrel) + { + switch (code) + { + case BFD_RELOC_8: + code = BFD_RELOC_8_PCREL; + break; + case BFD_RELOC_16: + code = BFD_RELOC_16_PCREL; + break; + case BFD_RELOC_32: + code = BFD_RELOC_32_PCREL; + break; + case BFD_RELOC_64: + code = BFD_RELOC_64_PCREL; + break; + case BFD_RELOC_8_PCREL: + case BFD_RELOC_16_PCREL: + case BFD_RELOC_32_PCREL: + case BFD_RELOC_64_PCREL: + case BFD_RELOC_16_PCREL_S2: + break; + default: + as_bad_where (fixp->fx_file, fixp->fx_line, + _("Cannot make %s relocation PC relative"), + bfd_get_reloc_code_name (code)); + } + } reloc->howto = bfd_reloc_type_lookup (stdoutput, code); if (reloc->howto == NULL) Index: gas/config/tc-mips.h =================================================================== RCS file: /cvsroot/gcc/src-cvs/src/gas/config/tc-mips.h,v retrieving revision 1.35 diff -u -r1.35 tc-mips.h --- gas/config/tc-mips.h 29 Apr 2004 05:14:22 -0000 1.35 +++ gas/config/tc-mips.h 5 May 2004 17:38:51 -0000 @@ -58,6 +58,10 @@ #define MAX_MEM_FOR_RS_ALIGN_CODE (1 + 2) +/* We permit PC relative difference expressions when generating + embedded PIC code. */ +#define DIFF_EXPR_OK + /* Tell assembler that we have an itbl_mips.h header file to include. */ #define HAVE_ITBL_CPU