1 From binutils-return-33437-listarch-binutils=sources dot redhat dot com at sources dot redhat dot com Wed May 05 17:45:08 2004
2 Return-Path: <binutils-return-33437-listarch-binutils=sources dot redhat dot com at sources dot redhat dot com>
3 Delivered-To: listarch-binutils at sources dot redhat dot com
4 Received: (qmail 20913 invoked by alias); 5 May 2004 17:45:08 -0000
5 Mailing-List: contact binutils-help at sources dot redhat dot com; run by ezmlm
7 List-Subscribe: <mailto:binutils-subscribe at sources dot redhat dot com>
8 List-Archive: <http://sources.redhat.com/ml/binutils/>
9 List-Post: <mailto:binutils at sources dot redhat dot com>
10 List-Help: <mailto:binutils-help at sources dot redhat dot com>, <http://sources dot redhat dot com/ml/#faqs>
11 Sender: binutils-owner at sources dot redhat dot com
12 Delivered-To: mailing list binutils at sources dot redhat dot com
13 Received: (qmail 20904 invoked from network); 5 May 2004 17:45:05 -0000
14 Received: from unknown (HELO dmz.algor.co.uk) (62.254.210.145)
15 by sources dot redhat dot com with SMTP; 5 May 2004 17:45:05 -0000
16 Received: from alg158.algor.co.uk ([62.254.210.158] helo=olympia.mips.com)
17 by dmz dot algor dot co dot uk with esmtp (Exim 3 dot 35 #1 (Debian))
18 id 1BLQgU-0007Tz-00; Wed, 05 May 2004 18:59:54 +0100
19 Received: from stockwell.mips.com ([192.168.192.238])
20 by olympia dot mips dot com with esmtp (Exim 3 dot 36 #1 (Debian))
21 id 1BLQRk-0004Mi-00; Wed, 05 May 2004 18:44:40 +0100
22 Subject: Re: [mips patch RFC] removal of gas embedded-pic support code
23 From: David Ung <davidu at mips dot com>
24 To: cgd at broadcom dot com, ica2_ts at csv dot ica dot uni-stuttgart dot de, binutils at sources dot redhat dot com
25 Content-Type: text/plain
26 Organization: MIPS Technologies UK
27 Message-Id: <1083779079.31797.223.camel@stockwell.mips.com>
29 Date: Wed, 05 May 2004 18:44:40 +0100
30 Content-Transfer-Encoding: 7bit
31 X-MTUK-Scanner: Found to be clean
32 X-MTUK-SpamCheck: not spam, SpamAssassin (score=-4.833, required 4, AWL,
35 >At Thu, 29 Apr 2004 02:46:46 +0000 (UTC), "Thiemo Seufer" wrote:
38 >Thanks for looking it over.
40 >I've checked it in. I *really* hope it really doesn't break
48 woops. your recent patch seem to have broke building of the compiler on
49 linux. The problem occurs when building for libgcc/./_divdi3.o
52 Error: operation combines symbols in different segments
54 as it is trying to assemble this piece of .s code generated from gcc.
56 .section .eh_frame,"aw",@progbits
58 .4byte $LECIE1-$LSCIE1
74 .4byte $LEFDE1-$LASFDE1
76 .4byte $LASFDE1-$Lframe1
81 ** $LFB42 is from the text section of divdi3.
83 I've reverted back the necessary changes to your patch, so that it now
91 ===================================================================
92 RCS file: /cvsroot/gcc/src-cvs/src/bfd/ChangeLog,v
93 retrieving revision 1.2535
94 diff -u -r1.2535 ChangeLog
95 --- bfd/ChangeLog 3 May 2004 14:52:01 -0000 1.2535
96 +++ bfd/ChangeLog 5 May 2004 17:38:51 -0000
98 +2004-05-05 David Ung <davidu@mips.com>
100 + * elfxx-mips.c (mips_elf_calculate_relocation): Put back cases for
101 + R_MIPS_PC32 and R_MIPS_PC64.
103 + * elf32-mips.c: Put back elf_mips_gnu_pcrel64 and
104 + elf_mips_gnu_pcrel32.
105 + (bfd_elf32_bfd_reloc_type_lookup): Put back cases for
106 + BFD_RELOC_64_PCREL and BFD_RELOC_32_PCREL.
107 + (mips_elf32_rtype_to_howto): Put back cases for R_MIPS_PC32 and
110 Index: bfd/elf32-mips.c
111 ===================================================================
112 RCS file: /cvsroot/gcc/src-cvs/src/bfd/elf32-mips.c,v
113 retrieving revision 1.175
114 diff -u -r1.175 elf32-mips.c
115 --- bfd/elf32-mips.c 24 Apr 2004 22:07:13 -0000 1.175
116 +++ bfd/elf32-mips.c 5 May 2004 17:38:51 -0000
118 0xffff, /* dst_mask */
119 TRUE); /* pcrel_offset */
121 +/* 64 bit pc-relative. */
122 +static reloc_howto_type elf_mips_gnu_pcrel64 =
123 + HOWTO (R_MIPS_PC64, /* type */
124 + 0, /* rightshift */
125 + 4, /* size (0 = byte, 1 = short, 2 = long) */
127 + TRUE, /* pc_relative */
129 + complain_overflow_signed, /* complain_on_overflow */
130 + _bfd_mips_elf_generic_reloc, /* special_function */
131 + "R_MIPS_PC64", /* name */
132 + TRUE, /* partial_inplace */
133 + MINUS_ONE, /* src_mask */
134 + MINUS_ONE, /* dst_mask */
135 + TRUE); /* pcrel_offset */
137 +/* 32 bit pc-relative. */
138 +static reloc_howto_type elf_mips_gnu_pcrel32 =
139 + HOWTO (R_MIPS_PC32, /* type */
140 + 0, /* rightshift */
141 + 2, /* size (0 = byte, 1 = short, 2 = long) */
143 + TRUE, /* pc_relative */
145 + complain_overflow_signed, /* complain_on_overflow */
146 + _bfd_mips_elf_generic_reloc, /* special_function */
147 + "R_MIPS_PC32", /* name */
148 + TRUE, /* partial_inplace */
149 + 0xffffffff, /* src_mask */
150 + 0xffffffff, /* dst_mask */
151 + TRUE); /* pcrel_offset */
153 /* GNU extension to record C++ vtable hierarchy */
154 static reloc_howto_type elf_mips_gnu_vtinherit_howto =
155 HOWTO (R_MIPS_GNU_VTINHERIT, /* type */
156 @@ -1071,6 +1103,10 @@
157 return &elf_mips_gnu_vtentry_howto;
158 case BFD_RELOC_16_PCREL_S2:
159 return &elf_mips_gnu_rel16_s2;
160 + case BFD_RELOC_64_PCREL:
161 + return &elf_mips_gnu_pcrel64;
162 + case BFD_RELOC_32_PCREL:
163 + return &elf_mips_gnu_pcrel32;
167 @@ -1092,6 +1128,10 @@
168 return &elf_mips_gnu_vtentry_howto;
169 case R_MIPS_GNU_REL16_S2:
170 return &elf_mips_gnu_rel16_s2;
172 + return &elf_mips_gnu_pcrel64;
174 + return &elf_mips_gnu_pcrel32;
176 BFD_ASSERT (r_type < (unsigned int) R_MIPS_max);
177 return &elf_mips_howto_table_rel[r_type];
178 Index: bfd/elfxx-mips.c
179 ===================================================================
180 RCS file: /cvsroot/gcc/src-cvs/src/bfd/elfxx-mips.c,v
181 retrieving revision 1.100
182 diff -u -r1.100 elfxx-mips.c
183 --- bfd/elfxx-mips.c 24 Apr 2004 22:07:13 -0000 1.100
184 +++ bfd/elfxx-mips.c 5 May 2004 17:38:51 -0000
185 @@ -3335,6 +3335,12 @@
186 value &= howto->dst_mask;
191 + value = symbol + addend - p;
192 + value &= howto->dst_mask;
195 case R_MIPS_GNU_REL16_S2:
196 value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
197 overflowed_p = mips_elf_overflow_p (value, 18);
199 ===================================================================
200 RCS file: /cvsroot/gcc/src-cvs/src/gas/ChangeLog,v
201 retrieving revision 1.2114
202 diff -u -r1.2114 ChangeLog
203 --- gas/ChangeLog 29 Apr 2004 05:14:20 -0000 1.2114
204 +++ gas/ChangeLog 5 May 2004 17:38:51 -0000
206 +2004-05-05 David Ung <davidu@mips.com>
208 + * config/tc-mips.c (md_apply_fix3): Revert last change.
209 + (tc_gen_reloc): Put back pc rel handling.
210 + * config/tc-mips.h: Defines DIFF_EXPR_OK.
212 Index: gas/config/tc-mips.c
213 ===================================================================
214 RCS file: /cvsroot/gcc/src-cvs/src/gas/config/tc-mips.c,v
215 retrieving revision 1.263
216 diff -u -r1.263 tc-mips.c
217 --- gas/config/tc-mips.c 29 Apr 2004 05:14:21 -0000 1.263
218 +++ gas/config/tc-mips.c 5 May 2004 17:38:51 -0000
219 @@ -10861,8 +10861,7 @@
220 buf = (bfd_byte *) (fixP->fx_frag->fr_literal + fixP->fx_where);
222 /* We are not done if this is a composite relocation to set up gp. */
223 - assert (! fixP->fx_pcrel);
224 - if (fixP->fx_addsy == NULL
225 + if (fixP->fx_addsy == NULL && ! fixP->fx_pcrel
226 && !(fixP->fx_r_type == BFD_RELOC_MIPS_SUB
227 || (fixP->fx_r_type == BFD_RELOC_64
228 && (previous_fx_r_type == BFD_RELOC_GPREL32
229 @@ -12723,8 +12722,27 @@
230 *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
231 reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
233 - assert (! fixp->fx_pcrel);
234 - reloc->addend = fixp->fx_addnumber;
235 + if (fixp->fx_pcrel)
237 + bfd_vma pcrel_address;
239 + pcrel_address = reloc->address;
241 + if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
243 + /* At this point, fx_addnumber is "symbol offset - pcrel_address".
244 + Relocations want only the symbol offset. */
245 + reloc->addend = fixp->fx_addnumber + pcrel_address;
249 + /* A gruesome hack which is a result of the gruesome gas reloc
251 + reloc->addend = pcrel_address;
255 + reloc->addend = fixp->fx_addnumber;
257 /* Since the old MIPS ELF ABI uses Rel instead of Rela, encode the vtable
258 entry to be used in the relocation's section offset. */
259 @@ -12735,6 +12753,34 @@
262 code = fixp->fx_r_type;
263 + if (fixp->fx_pcrel)
268 + code = BFD_RELOC_8_PCREL;
271 + code = BFD_RELOC_16_PCREL;
274 + code = BFD_RELOC_32_PCREL;
277 + code = BFD_RELOC_64_PCREL;
279 + case BFD_RELOC_8_PCREL:
280 + case BFD_RELOC_16_PCREL:
281 + case BFD_RELOC_32_PCREL:
282 + case BFD_RELOC_64_PCREL:
283 + case BFD_RELOC_16_PCREL_S2:
286 + as_bad_where (fixp->fx_file, fixp->fx_line,
287 + _("Cannot make %s relocation PC relative"),
288 + bfd_get_reloc_code_name (code));
292 /* To support a PC relative reloc, we used a Cygnus extension.
293 We check for that here to make sure that we don't let such a
294 Index: gas/config/tc-mips.h
295 ===================================================================
296 RCS file: /cvsroot/gcc/src-cvs/src/gas/config/tc-mips.h,v
297 retrieving revision 1.35
298 diff -u -r1.35 tc-mips.h
299 --- gas/config/tc-mips.h 29 Apr 2004 05:14:22 -0000 1.35
300 +++ gas/config/tc-mips.h 5 May 2004 17:38:51 -0000
303 #define MAX_MEM_FOR_RS_ALIGN_CODE (1 + 2)
305 +/* We permit PC relative difference expressions when generating
306 + embedded PIC code. */
307 +#define DIFF_EXPR_OK
309 /* Tell assembler that we have an itbl_mips.h header file to include. */
310 #define HAVE_ITBL_CPU
312 Index: include/elf/ChangeLog
313 ===================================================================
314 RCS file: /cvsroot/gcc/src-cvs/src/include/elf/ChangeLog,v
315 retrieving revision 1.205
316 diff -u -r1.205 ChangeLog
317 --- include/elf/ChangeLog 24 Apr 2004 22:07:14 -0000 1.205
318 +++ include/elf/ChangeLog 5 May 2004 17:38:51 -0000
320 +2004-05-05 David Ung <davidu@mips.com>
322 + * mips.h: Put back R_MIPS_PC32 and R_MIPS_PC64.
324 2004-04-24 Chris Demetriou <cgd@broadcom.com>
326 * mips.h (R_MIPS_PC32, R_MIPS_PC64, R_MIPS_GNU_REL_LO16)
327 Index: include/elf/mips.h
328 ===================================================================
329 RCS file: /cvsroot/gcc/src-cvs/src/include/elf/mips.h,v
330 retrieving revision 1.22
331 diff -u -r1.22 mips.h
332 --- include/elf/mips.h 24 Apr 2004 22:07:14 -0000 1.22
333 +++ include/elf/mips.h 5 May 2004 17:38:51 -0000
335 /* These relocs are used for the mips16. */
336 RELOC_NUMBER (R_MIPS16_26, 100)
337 RELOC_NUMBER (R_MIPS16_GPREL, 101)
338 + RELOC_NUMBER (R_MIPS_PC32, 248)
339 + RELOC_NUMBER (R_MIPS_PC64, 249)
340 /* FIXME: this relocation is used internally by gas. */
341 RELOC_NUMBER (R_MIPS_GNU_REL16_S2, 250)
342 /* These are GNU extensions to enable C++ vtable garbage collection. */