x86: fold certain AVX512 rotate and shift templates
[deliverable/binutils-gdb.git] / gas / write.c
CommitLineData
252b5132 1/* write.c - emit .o file
219d1afa 2 Copyright (C) 1986-2018 Free Software Foundation, Inc.
252b5132
RH
3
4 This file is part of GAS, the GNU Assembler.
5
6 GAS is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
ec2655a6 8 the Free Software Foundation; either version 3, or (at your option)
252b5132
RH
9 any later version.
10
11 GAS is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GAS; see the file COPYING. If not, write to the Free
4b4da160
NC
18 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
19 02110-1301, USA. */
252b5132 20
33eaf5de 21/* This thing should be set up to do byte ordering correctly. But... */
252b5132
RH
22
23#include "as.h"
24#include "subsegs.h"
25#include "obstack.h"
26#include "output-file.h"
220e750f 27#include "dwarf2dbg.h"
0acf065b 28#include "compress-debug.h"
252b5132 29
252b5132 30#ifndef TC_FORCE_RELOCATION
a161fe53 31#define TC_FORCE_RELOCATION(FIX) \
ae6063d4 32 (generic_force_reloc (FIX))
252b5132
RH
33#endif
34
a161fe53
AM
35#ifndef TC_FORCE_RELOCATION_ABS
36#define TC_FORCE_RELOCATION_ABS(FIX) \
37 (TC_FORCE_RELOCATION (FIX))
38#endif
39
91cb9803 40#define GENERIC_FORCE_RELOCATION_LOCAL(FIX) \
a161fe53 41 (!(FIX)->fx_pcrel \
a161fe53 42 || TC_FORCE_RELOCATION (FIX))
91cb9803
AM
43#ifndef TC_FORCE_RELOCATION_LOCAL
44#define TC_FORCE_RELOCATION_LOCAL GENERIC_FORCE_RELOCATION_LOCAL
a161fe53
AM
45#endif
46
91cb9803
AM
47#define GENERIC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) \
48 (!SEG_NORMAL (SEG))
a161fe53 49#ifndef TC_FORCE_RELOCATION_SUB_SAME
91cb9803 50#define TC_FORCE_RELOCATION_SUB_SAME GENERIC_FORCE_RELOCATION_SUB_SAME
a161fe53
AM
51#endif
52
9a97a5d7
AM
53#ifndef md_register_arithmetic
54# define md_register_arithmetic 1
55#endif
56
a161fe53 57#ifndef TC_FORCE_RELOCATION_SUB_ABS
9a97a5d7
AM
58#define TC_FORCE_RELOCATION_SUB_ABS(FIX, SEG) \
59 (!md_register_arithmetic && (SEG) == reg_section)
a161fe53
AM
60#endif
61
62#ifndef TC_FORCE_RELOCATION_SUB_LOCAL
63#ifdef DIFF_EXPR_OK
5db484ff
AM
64#define TC_FORCE_RELOCATION_SUB_LOCAL(FIX, SEG) \
65 (!md_register_arithmetic && (SEG) == reg_section)
a161fe53 66#else
5db484ff 67#define TC_FORCE_RELOCATION_SUB_LOCAL(FIX, SEG) 1
a161fe53
AM
68#endif
69#endif
70
71#ifndef TC_VALIDATE_FIX_SUB
72#ifdef UNDEFINED_DIFFERENCE_OK
73/* The PA needs this for PIC code generation. */
5db484ff
AM
74#define TC_VALIDATE_FIX_SUB(FIX, SEG) \
75 (md_register_arithmetic || (SEG) != reg_section)
a161fe53 76#else
5db484ff
AM
77#define TC_VALIDATE_FIX_SUB(FIX, SEG) \
78 ((md_register_arithmetic || (SEG) != reg_section) \
79 && ((FIX)->fx_r_type == BFD_RELOC_GPREL32 \
80 || (FIX)->fx_r_type == BFD_RELOC_GPREL16))
a161fe53 81#endif
252b5132
RH
82#endif
83
58a77e41
EC
84#ifndef TC_LINKRELAX_FIXUP
85#define TC_LINKRELAX_FIXUP(SEG) 1
86#endif
87
a161fe53
AM
88#ifndef MD_APPLY_SYM_VALUE
89#define MD_APPLY_SYM_VALUE(FIX) 1
8f36cd18 90#endif
ef99799a 91
87548816
NC
92#ifndef TC_FINALIZE_SYMS_BEFORE_SIZE_SEG
93#define TC_FINALIZE_SYMS_BEFORE_SIZE_SEG 1
94#endif
95
252b5132 96#ifndef MD_PCREL_FROM_SECTION
df44284e 97#define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from (FIX)
252b5132
RH
98#endif
99
c9cd7160
L
100#ifndef TC_FAKE_LABEL
101#define TC_FAKE_LABEL(NAME) (strcmp ((NAME), FAKE_LABEL_NAME) == 0)
102#endif
103
d31f0f6d
AM
104/* Positive values of TC_FX_SIZE_SLACK allow a target to define
105 fixups that far past the end of a frag. Having such fixups
106 is of course most most likely a bug in setting fx_size correctly.
107 A negative value disables the fixup check entirely, which is
108 appropriate for something like the Renesas / SuperH SH_COUNT
109 reloc. */
110#ifndef TC_FX_SIZE_SLACK
111#define TC_FX_SIZE_SLACK(FIX) 0
112#endif
113
6386f3a7
AM
114/* Used to control final evaluation of expressions. */
115int finalize_syms = 0;
e46d99eb 116
252b5132 117int symbol_table_frozen;
a161fe53
AM
118
119symbolS *abs_section_sym;
120
26346241
AM
121/* Remember the value of dot when parsing expressions. */
122addressT dot_value;
123
8e723a10
CLT
124/* The frag that dot_value is based from. */
125fragS *dot_frag;
126
05e9452c
AM
127/* Relocs generated by ".reloc" pseudo. */
128struct reloc_list* reloc_list;
129
d7342424 130void print_fixup (fixS *);
252b5132 131
252b5132
RH
132/* We generally attach relocs to frag chains. However, after we have
133 chained these all together into a segment, any relocs we add after
134 that must be attached to a segment. This will include relocs added
135 in md_estimate_size_for_relax, for example. */
136static int frags_chained = 0;
252b5132
RH
137
138static int n_fixups;
139
df44284e 140#define RELOC_ENUM enum bfd_reloc_code_real
df44284e 141
efaf0ba4
NC
142/* Create a fixS in obstack 'notes'. */
143
252b5132 144static fixS *
d7342424
KH
145fix_new_internal (fragS *frag, /* Which frag? */
146 int where, /* Where in that frag? */
147 int size, /* 1, 2, or 4 usually. */
148 symbolS *add_symbol, /* X_add_symbol. */
149 symbolS *sub_symbol, /* X_op_symbol. */
150 offsetT offset, /* X_add_number. */
151 int pcrel, /* TRUE if PC-relative relocation. */
032fbb7a 152 RELOC_ENUM r_type /* Relocation type. */,
c865e45b 153 int at_beginning) /* Add to the start of the list? */
252b5132
RH
154{
155 fixS *fixP;
156
157 n_fixups++;
158
1e9cc1c2 159 fixP = (fixS *) obstack_alloc (&notes, sizeof (fixS));
252b5132
RH
160
161 fixP->fx_frag = frag;
162 fixP->fx_where = where;
163 fixP->fx_size = size;
164 /* We've made fx_size a narrow field; check that it's wide enough. */
165 if (fixP->fx_size != size)
166 {
167 as_bad (_("field fx_size too small to hold %d"), size);
168 abort ();
169 }
170 fixP->fx_addsy = add_symbol;
171 fixP->fx_subsy = sub_symbol;
172 fixP->fx_offset = offset;
26346241 173 fixP->fx_dot_value = dot_value;
8e723a10 174 fixP->fx_dot_frag = dot_frag;
252b5132 175 fixP->fx_pcrel = pcrel;
252b5132 176 fixP->fx_r_type = r_type;
252b5132
RH
177 fixP->fx_im_disp = 0;
178 fixP->fx_pcrel_adjust = 0;
179 fixP->fx_bit_fixP = 0;
180 fixP->fx_addnumber = 0;
181 fixP->fx_tcbit = 0;
20ee54e8 182 fixP->fx_tcbit2 = 0;
252b5132
RH
183 fixP->fx_done = 0;
184 fixP->fx_no_overflow = 0;
185 fixP->fx_signed = 0;
186
187#ifdef USING_CGEN
188 fixP->fx_cgen.insn = NULL;
189 fixP->fx_cgen.opinfo = 0;
190#endif
191
192#ifdef TC_FIX_TYPE
efaf0ba4 193 TC_INIT_FIX_DATA (fixP);
252b5132
RH
194#endif
195
3b4dbbbf 196 fixP->fx_file = as_where (&fixP->fx_line);
252b5132 197
252b5132
RH
198 {
199
252b5132
RH
200 fixS **seg_fix_rootP = (frags_chained
201 ? &seg_info (now_seg)->fix_root
202 : &frchain_now->fix_root);
203 fixS **seg_fix_tailP = (frags_chained
204 ? &seg_info (now_seg)->fix_tail
205 : &frchain_now->fix_tail);
252b5132 206
c865e45b
RS
207 if (at_beginning)
208 {
209 fixP->fx_next = *seg_fix_rootP;
210 *seg_fix_rootP = fixP;
211 if (fixP->fx_next == NULL)
212 *seg_fix_tailP = fixP;
213 }
252b5132 214 else
c865e45b
RS
215 {
216 fixP->fx_next = NULL;
217 if (*seg_fix_tailP)
218 (*seg_fix_tailP)->fx_next = fixP;
219 else
220 *seg_fix_rootP = fixP;
221 *seg_fix_tailP = fixP;
222 }
252b5132
RH
223 }
224
225 return fixP;
226}
227
228/* Create a fixup relative to a symbol (plus a constant). */
229
230fixS *
d7342424
KH
231fix_new (fragS *frag, /* Which frag? */
232 int where, /* Where in that frag? */
233 int size, /* 1, 2, or 4 usually. */
234 symbolS *add_symbol, /* X_add_symbol. */
235 offsetT offset, /* X_add_number. */
236 int pcrel, /* TRUE if PC-relative relocation. */
237 RELOC_ENUM r_type /* Relocation type. */)
252b5132
RH
238{
239 return fix_new_internal (frag, where, size, add_symbol,
c865e45b 240 (symbolS *) NULL, offset, pcrel, r_type, FALSE);
252b5132
RH
241}
242
243/* Create a fixup for an expression. Currently we only support fixups
244 for difference expressions. That is itself more than most object
245 file formats support anyhow. */
246
247fixS *
d7342424
KH
248fix_new_exp (fragS *frag, /* Which frag? */
249 int where, /* Where in that frag? */
250 int size, /* 1, 2, or 4 usually. */
251 expressionS *exp, /* Expression. */
252 int pcrel, /* TRUE if PC-relative relocation. */
253 RELOC_ENUM r_type /* Relocation type. */)
252b5132
RH
254{
255 symbolS *add = NULL;
256 symbolS *sub = NULL;
257 offsetT off = 0;
258
259 switch (exp->X_op)
260 {
261 case O_absent:
262 break;
263
37006e43
NC
264 case O_register:
265 as_bad (_("register value used as expression"));
266 break;
267
252b5132
RH
268 case O_add:
269 /* This comes up when _GLOBAL_OFFSET_TABLE_+(.-L0) is read, if
270 the difference expression cannot immediately be reduced. */
271 {
272 symbolS *stmp = make_expr_symbol (exp);
58a77e41 273
252b5132
RH
274 exp->X_op = O_symbol;
275 exp->X_op_symbol = 0;
276 exp->X_add_symbol = stmp;
277 exp->X_add_number = 0;
58a77e41 278
252b5132
RH
279 return fix_new_exp (frag, where, size, exp, pcrel, r_type);
280 }
281
282 case O_symbol_rva:
283 add = exp->X_add_symbol;
284 off = exp->X_add_number;
252b5132 285 r_type = BFD_RELOC_RVA;
252b5132
RH
286 break;
287
288 case O_uminus:
289 sub = exp->X_add_symbol;
290 off = exp->X_add_number;
291 break;
292
293 case O_subtract:
294 sub = exp->X_op_symbol;
295 /* Fall through. */
296 case O_symbol:
297 add = exp->X_add_symbol;
efaf0ba4 298 /* Fall through. */
252b5132
RH
299 case O_constant:
300 off = exp->X_add_number;
301 break;
302
303 default:
304 add = make_expr_symbol (exp);
305 break;
306 }
307
c865e45b
RS
308 return fix_new_internal (frag, where, size, add, sub, off, pcrel,
309 r_type, FALSE);
310}
311
312/* Create a fixup at the beginning of FRAG. The arguments are the same
313 as for fix_new, except that WHERE is implicitly 0. */
314
315fixS *
316fix_at_start (fragS *frag, int size, symbolS *add_symbol,
317 offsetT offset, int pcrel, RELOC_ENUM r_type)
318{
319 return fix_new_internal (frag, 0, size, add_symbol,
320 (symbolS *) NULL, offset, pcrel, r_type, TRUE);
252b5132
RH
321}
322
ae6063d4
AM
323/* Generic function to determine whether a fixup requires a relocation. */
324int
d7342424 325generic_force_reloc (fixS *fix)
ae6063d4 326{
ae6063d4
AM
327 if (fix->fx_r_type == BFD_RELOC_VTABLE_INHERIT
328 || fix->fx_r_type == BFD_RELOC_VTABLE_ENTRY)
329 return 1;
7be1c489 330
61e192bf
NC
331 if (fix->fx_addsy == NULL)
332 return 0;
333
ae6063d4
AM
334 return S_FORCE_RELOC (fix->fx_addsy, fix->fx_subsy == NULL);
335}
336
252b5132
RH
337/* Append a string onto another string, bumping the pointer along. */
338void
d7342424 339append (char **charPP, char *fromP, unsigned long length)
252b5132 340{
efaf0ba4 341 /* Don't trust memcpy() of 0 chars. */
252b5132
RH
342 if (length == 0)
343 return;
344
345 memcpy (*charPP, fromP, length);
346 *charPP += length;
347}
348
efaf0ba4
NC
349/* This routine records the largest alignment seen for each segment.
350 If the beginning of the segment is aligned on the worst-case
351 boundary, all of the other alignments within it will work. At
352 least one object format really uses this info. */
353
252b5132 354void
d7342424
KH
355record_alignment (/* Segment to which alignment pertains. */
356 segT seg,
357 /* Alignment, as a power of 2 (e.g., 1 => 2-byte
358 boundary, 2 => 4-byte boundary, etc.) */
9136aa49 359 unsigned int align)
252b5132
RH
360{
361 if (seg == absolute_section)
362 return;
7be1c489 363
9136aa49 364 if (align > bfd_get_section_alignment (stdoutput, seg))
252b5132 365 bfd_set_section_alignment (stdoutput, seg, align);
252b5132
RH
366}
367
0a9ef439 368int
d7342424 369get_recorded_alignment (segT seg)
0a9ef439
RH
370{
371 if (seg == absolute_section)
372 return 0;
7be1c489 373
0a9ef439 374 return bfd_get_section_alignment (stdoutput, seg);
0a9ef439
RH
375}
376
252b5132
RH
377/* Reset the section indices after removing the gas created sections. */
378
379static void
e7ff5c73 380renumber_sections (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *countparg)
252b5132
RH
381{
382 int *countp = (int *) countparg;
383
384 sec->index = *countp;
385 ++*countp;
386}
387
252b5132 388static fragS *
d7342424 389chain_frchains_together_1 (segT section, struct frchain *frchp)
252b5132
RH
390{
391 fragS dummy, *prev_frag = &dummy;
252b5132 392 fixS fix_dummy, *prev_fix = &fix_dummy;
252b5132 393
c9049d30 394 for (; frchp; frchp = frchp->frch_next)
252b5132
RH
395 {
396 prev_frag->fr_next = frchp->frch_root;
397 prev_frag = frchp->frch_last;
9c2799c2 398 gas_assert (prev_frag->fr_type != 0);
252b5132
RH
399 if (frchp->fix_root != (fixS *) NULL)
400 {
401 if (seg_info (section)->fix_root == (fixS *) NULL)
402 seg_info (section)->fix_root = frchp->fix_root;
403 prev_fix->fx_next = frchp->fix_root;
404 seg_info (section)->fix_tail = frchp->fix_tail;
405 prev_fix = frchp->fix_tail;
406 }
252b5132 407 }
4fc0b46e
AM
408 gas_assert (prev_frag != &dummy
409 && prev_frag->fr_type != 0);
252b5132
RH
410 prev_frag->fr_next = 0;
411 return prev_frag;
412}
413
252b5132 414static void
d7342424
KH
415chain_frchains_together (bfd *abfd ATTRIBUTE_UNUSED,
416 segT section,
e7ff5c73 417 void *xxx ATTRIBUTE_UNUSED)
252b5132
RH
418{
419 segment_info_type *info;
420
421 /* BFD may have introduced its own sections without using
422 subseg_new, so it is possible that seg_info is NULL. */
423 info = seg_info (section);
424 if (info != (segment_info_type *) NULL)
efaf0ba4
NC
425 info->frchainP->frch_last
426 = chain_frchains_together_1 (section, info->frchainP);
252b5132
RH
427
428 /* Now that we've chained the frags together, we must add new fixups
429 to the segment, not to the frag chain. */
430 frags_chained = 1;
431}
432
252b5132 433static void
d7342424 434cvt_frag_to_fill (segT sec ATTRIBUTE_UNUSED, fragS *fragP)
252b5132
RH
435{
436 switch (fragP->fr_type)
437 {
62a02d25
L
438 case rs_space_nop:
439 goto skip_align;
252b5132
RH
440 case rs_align:
441 case rs_align_code:
0a9ef439 442 case rs_align_test:
252b5132
RH
443 case rs_org:
444 case rs_space:
445#ifdef HANDLE_ALIGN
446 HANDLE_ALIGN (fragP);
447#endif
62a02d25 448skip_align:
252b5132
RH
449 know (fragP->fr_next != NULL);
450 fragP->fr_offset = (fragP->fr_next->fr_address
451 - fragP->fr_address
452 - fragP->fr_fix) / fragP->fr_var;
453 if (fragP->fr_offset < 0)
454 {
14ad458a 455 as_bad_where (fragP->fr_file, fragP->fr_line,
8f065d3b 456 _("attempt to .org/.space/.nops backwards? (%ld)"),
14ad458a 457 (long) fragP->fr_offset);
3f3cdb03 458 fragP->fr_offset = 0;
252b5132 459 }
62a02d25
L
460 if (fragP->fr_type == rs_space_nop)
461 fragP->fr_type = rs_fill_nop;
462 else
463 fragP->fr_type = rs_fill;
252b5132
RH
464 break;
465
466 case rs_fill:
62a02d25 467 case rs_fill_nop:
252b5132
RH
468 break;
469
470 case rs_leb128:
471 {
472 valueT value = S_GET_VALUE (fragP->fr_symbol);
473 int size;
474
ba8826a8
AO
475 if (!S_IS_DEFINED (fragP->fr_symbol))
476 {
477 as_bad_where (fragP->fr_file, fragP->fr_line,
478 _("leb128 operand is an undefined symbol: %s"),
479 S_GET_NAME (fragP->fr_symbol));
480 }
481
252b5132
RH
482 size = output_leb128 (fragP->fr_literal + fragP->fr_fix, value,
483 fragP->fr_subtype);
484
485 fragP->fr_fix += size;
486 fragP->fr_type = rs_fill;
487 fragP->fr_var = 0;
488 fragP->fr_offset = 0;
489 fragP->fr_symbol = NULL;
490 }
491 break;
492
493 case rs_cfa:
494 eh_frame_convert_frag (fragP);
495 break;
496
220e750f
RH
497 case rs_dwarf2dbg:
498 dwarf2dbg_convert_frag (fragP);
499 break;
500
252b5132 501 case rs_machine_dependent:
252b5132 502 md_convert_frag (stdoutput, sec, fragP);
252b5132 503
9c2799c2 504 gas_assert (fragP->fr_next == NULL
252b5132
RH
505 || ((offsetT) (fragP->fr_next->fr_address - fragP->fr_address)
506 == fragP->fr_fix));
507
efaf0ba4
NC
508 /* After md_convert_frag, we make the frag into a ".space 0".
509 md_convert_frag() should set up any fixSs and constants
510 required. */
252b5132
RH
511 frag_wane (fragP);
512 break;
513
514#ifndef WORKING_DOT_WORD
515 case rs_broken_word:
516 {
517 struct broken_word *lie;
518
519 if (fragP->fr_subtype)
520 {
521 fragP->fr_fix += md_short_jump_size;
522 for (lie = (struct broken_word *) (fragP->fr_symbol);
523 lie && lie->dispfrag == fragP;
524 lie = lie->next_broken_word)
525 if (lie->added == 1)
526 fragP->fr_fix += md_long_jump_size;
527 }
528 frag_wane (fragP);
529 }
530 break;
531#endif
532
533 default:
534 BAD_CASE (fragP->fr_type);
535 break;
536 }
09b935ac
AM
537#ifdef md_frag_check
538 md_frag_check (fragP);
539#endif
252b5132
RH
540}
541
32638454
AM
542struct relax_seg_info
543{
544 int pass;
545 int changed;
546};
d7342424 547
252b5132 548static void
32638454 549relax_seg (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *xxx)
e46d99eb
AM
550{
551 segment_info_type *seginfo = seg_info (sec);
32638454 552 struct relax_seg_info *info = (struct relax_seg_info *) xxx;
e46d99eb
AM
553
554 if (seginfo && seginfo->frchainP
32638454
AM
555 && relax_segment (seginfo->frchainP->frch_root, sec, info->pass))
556 info->changed = 1;
e46d99eb
AM
557}
558
e46d99eb 559static void
e7ff5c73 560size_seg (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED)
252b5132
RH
561{
562 flagword flags;
563 fragS *fragp;
564 segment_info_type *seginfo;
565 int x;
566 valueT size, newsize;
567
568 subseg_change (sec, 0);
569
252b5132
RH
570 seginfo = seg_info (sec);
571 if (seginfo && seginfo->frchainP)
572 {
252b5132
RH
573 for (fragp = seginfo->frchainP->frch_root; fragp; fragp = fragp->fr_next)
574 cvt_frag_to_fill (sec, fragp);
575 for (fragp = seginfo->frchainP->frch_root;
576 fragp->fr_next;
577 fragp = fragp->fr_next)
efaf0ba4
NC
578 /* Walk to last elt. */
579 ;
252b5132
RH
580 size = fragp->fr_address + fragp->fr_fix;
581 }
582 else
583 size = 0;
584
e46d99eb 585 flags = bfd_get_section_flags (abfd, sec);
f3d2b04b
KT
586 if (size == 0 && bfd_get_section_size (sec) != 0 &&
587 (flags & SEC_HAS_CONTENTS) != 0)
588 return;
e46d99eb 589
252b5132
RH
590 if (size > 0 && ! seginfo->bss)
591 flags |= SEC_HAS_CONTENTS;
592
e5435dec 593 flags &= ~SEC_RELOC;
252b5132 594 x = bfd_set_section_flags (abfd, sec, flags);
9c2799c2 595 gas_assert (x);
252b5132 596
2edb36e7
NC
597 /* If permitted, allow the backend to pad out the section
598 to some alignment boundary. */
599 if (do_not_pad_sections_to_alignment)
600 newsize = size;
601 else
602 newsize = md_section_align (sec, size);
252b5132 603 x = bfd_set_section_size (abfd, sec, newsize);
9c2799c2 604 gas_assert (x);
252b5132
RH
605
606 /* If the size had to be rounded up, add some padding in the last
607 non-empty frag. */
9c2799c2 608 gas_assert (newsize >= size);
252b5132
RH
609 if (size != newsize)
610 {
611 fragS *last = seginfo->frchainP->frch_last;
612 fragp = seginfo->frchainP->frch_root;
613 while (fragp->fr_next != last)
614 fragp = fragp->fr_next;
615 last->fr_address = size;
18e1d487
AM
616 if ((newsize - size) % fragp->fr_var == 0)
617 fragp->fr_offset += (newsize - size) / fragp->fr_var;
618 else
619 /* If we hit this abort, it's likely due to subsegs_finish not
620 providing sufficient alignment on the last frag, and the
621 machine dependent code using alignment frags with fr_var
622 greater than 1. */
623 abort ();
252b5132
RH
624 }
625
626#ifdef tc_frob_section
627 tc_frob_section (sec);
628#endif
629#ifdef obj_frob_section
630 obj_frob_section (sec);
631#endif
632}
633
634#ifdef DEBUG2
635static void
988392e2 636dump_section_relocs (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, FILE *stream)
252b5132 637{
252b5132
RH
638 segment_info_type *seginfo = seg_info (sec);
639 fixS *fixp = seginfo->fix_root;
640
641 if (!fixp)
642 return;
643
644 fprintf (stream, "sec %s relocs:\n", sec->name);
645 while (fixp)
646 {
647 symbolS *s = fixp->fx_addsy;
e723ef7c
ILT
648
649 fprintf (stream, " %08lx: type %d ", (unsigned long) fixp,
650 (int) fixp->fx_r_type);
651 if (s == NULL)
652 fprintf (stream, "no sym\n");
653 else
252b5132 654 {
e723ef7c
ILT
655 print_symbol_value_1 (stream, s);
656 fprintf (stream, "\n");
252b5132 657 }
252b5132
RH
658 fixp = fixp->fx_next;
659 }
660}
661#else
662#define dump_section_relocs(ABFD,SEC,STREAM) ((void) 0)
663#endif
664
665#ifndef EMIT_SECTION_SYMBOLS
666#define EMIT_SECTION_SYMBOLS 1
667#endif
668
05e9452c
AM
669/* Resolve U.A.OFFSET_SYM and U.A.SYM fields of RELOC_LIST entries,
670 and check for validity. Convert RELOC_LIST from using U.A fields
671 to U.B fields. */
672static void
673resolve_reloc_expr_symbols (void)
674{
080f9e4f 675 bfd_vma addr_mask = 1;
05e9452c
AM
676 struct reloc_list *r;
677
080f9e4f
MR
678 /* Avoid a shift by the width of type. */
679 addr_mask <<= bfd_arch_bits_per_address (stdoutput) - 1;
680 addr_mask <<= 1;
681 addr_mask -= 1;
682
05e9452c
AM
683 for (r = reloc_list; r; r = r->next)
684 {
080f9e4f 685 reloc_howto_type *howto = r->u.a.howto;
05e9452c
AM
686 expressionS *symval;
687 symbolS *sym;
688 bfd_vma offset, addend;
689 asection *sec;
05e9452c
AM
690
691 resolve_symbol_value (r->u.a.offset_sym);
692 symval = symbol_get_value_expression (r->u.a.offset_sym);
693
694 offset = 0;
695 sym = NULL;
696 if (symval->X_op == O_constant)
697 sym = r->u.a.offset_sym;
698 else if (symval->X_op == O_symbol)
699 {
700 sym = symval->X_add_symbol;
701 offset = symval->X_add_number;
702 symval = symbol_get_value_expression (symval->X_add_symbol);
703 }
704 if (sym == NULL
705 || symval->X_op != O_constant
706 || (sec = S_GET_SEGMENT (sym)) == NULL
707 || !SEG_NORMAL (sec))
708 {
709 as_bad_where (r->file, r->line, _("invalid offset expression"));
710 sec = NULL;
711 }
712 else
713 offset += S_GET_VALUE (sym);
714
715 sym = NULL;
716 addend = r->u.a.addend;
717 if (r->u.a.sym != NULL)
718 {
719 resolve_symbol_value (r->u.a.sym);
720 symval = symbol_get_value_expression (r->u.a.sym);
721 if (symval->X_op == O_constant)
722 sym = r->u.a.sym;
723 else if (symval->X_op == O_symbol)
724 {
725 sym = symval->X_add_symbol;
726 addend += symval->X_add_number;
727 symval = symbol_get_value_expression (symval->X_add_symbol);
728 }
729 if (symval->X_op != O_constant)
730 {
731 as_bad_where (r->file, r->line, _("invalid reloc expression"));
732 sec = NULL;
733 }
2578f2f3 734 else if (sym != NULL && sec != NULL)
7230378d 735 {
080f9e4f
MR
736 /* Convert relocs against local symbols to refer to the
737 corresponding section symbol plus offset instead. Keep
738 PC-relative relocs of the REL variety intact though to
739 prevent the offset from overflowing the relocated field,
740 unless it has enough bits to cover the whole address
741 space. */
742 if (S_IS_LOCAL (sym) && !symbol_section_p (sym)
d6101ac2
MR
743 && (sec->use_rela_p
744 || (howto->partial_inplace
745 && (!howto->pc_relative
746 || howto->src_mask == addr_mask))))
7230378d
AM
747 {
748 asection *symsec = S_GET_SEGMENT (sym);
749 if (!(((symsec->flags & SEC_MERGE) != 0
750 && addend != 0)
751 || (symsec->flags & SEC_THREAD_LOCAL) != 0))
752 {
753 addend += S_GET_VALUE (sym);
754 sym = section_symbol (symsec);
755 }
756 }
757 symbol_mark_used_in_reloc (sym);
758 }
05e9452c
AM
759 }
760 if (sym == NULL)
761 {
762 if (abs_section_sym == NULL)
763 abs_section_sym = section_symbol (absolute_section);
764 sym = abs_section_sym;
765 }
766
05e9452c
AM
767 r->u.b.sec = sec;
768 r->u.b.s = symbol_get_bfdsym (sym);
769 r->u.b.r.sym_ptr_ptr = &r->u.b.s;
770 r->u.b.r.address = offset;
771 r->u.b.r.addend = addend;
772 r->u.b.r.howto = howto;
773 }
774}
775
df44284e
AM
776/* This pass over fixups decides whether symbols can be replaced with
777 section symbols. */
778
252b5132 779static void
d7342424
KH
780adjust_reloc_syms (bfd *abfd ATTRIBUTE_UNUSED,
781 asection *sec,
e7ff5c73 782 void *xxx ATTRIBUTE_UNUSED)
252b5132
RH
783{
784 segment_info_type *seginfo = seg_info (sec);
785 fixS *fixp;
786
787 if (seginfo == NULL)
788 return;
789
790 dump_section_relocs (abfd, sec, stderr);
791
792 for (fixp = seginfo->fix_root; fixp; fixp = fixp->fx_next)
793 if (fixp->fx_done)
efaf0ba4
NC
794 /* Ignore it. */
795 ;
252b5132
RH
796 else if (fixp->fx_addsy)
797 {
798 symbolS *sym;
799 asection *symsec;
800
801#ifdef DEBUG5
802 fprintf (stderr, "\n\nadjusting fixup:\n");
803 print_fixup (fixp);
804#endif
805
806 sym = fixp->fx_addsy;
807
808 /* All symbols should have already been resolved at this
809 point. It is possible to see unresolved expression
810 symbols, though, since they are not in the regular symbol
811 table. */
df44284e 812 resolve_symbol_value (sym);
efaf0ba4 813
49309057 814 if (fixp->fx_subsy != NULL)
6386f3a7 815 resolve_symbol_value (fixp->fx_subsy);
252b5132 816
60938e80
L
817 /* If this symbol is equated to an undefined or common symbol,
818 convert the fixup to being against that symbol. */
b4b24b79
AM
819 while (symbol_equated_reloc_p (sym)
820 || S_IS_WEAKREFR (sym))
252b5132 821 {
b4b24b79
AM
822 symbolS *newsym = symbol_get_value_expression (sym)->X_add_symbol;
823 if (sym == newsym)
824 break;
49309057 825 fixp->fx_offset += symbol_get_value_expression (sym)->X_add_number;
b4b24b79
AM
826 fixp->fx_addsy = newsym;
827 sym = newsym;
252b5132
RH
828 }
829
df44284e 830 if (symbol_mri_common_p (sym))
252b5132 831 {
b4b24b79
AM
832 fixp->fx_offset += S_GET_VALUE (sym);
833 fixp->fx_addsy = symbol_get_value_expression (sym)->X_add_symbol;
df44284e 834 continue;
252b5132
RH
835 }
836
a161fe53
AM
837 /* If the symbol is undefined, common, weak, or global (ELF
838 shared libs), we can't replace it with the section symbol. */
ae6063d4 839 if (S_FORCE_RELOC (fixp->fx_addsy, 1))
a161fe53
AM
840 continue;
841
842 /* Is there some other (target cpu dependent) reason we can't adjust
843 this one? (E.g. relocations involving function addresses on
844 the PA. */
845#ifdef tc_fix_adjustable
846 if (! tc_fix_adjustable (fixp))
847 continue;
848#endif
849
850 /* Since we're reducing to section symbols, don't attempt to reduce
851 anything that's already using one. */
852 if (symbol_section_p (sym))
853 continue;
854
252b5132 855 symsec = S_GET_SEGMENT (sym);
252b5132
RH
856 if (symsec == NULL)
857 abort ();
efaf0ba4 858
a841bdf5
AM
859 if (bfd_is_abs_section (symsec)
860 || symsec == reg_section)
252b5132 861 {
a161fe53 862 /* The fixup_segment routine normally will not use this
b4b24b79 863 symbol in a relocation. */
df44284e 864 continue;
252b5132
RH
865 }
866
7565ed77 867 /* Don't try to reduce relocs which refer to non-local symbols
b4b24b79
AM
868 in .linkonce sections. It can lead to confusion when a
869 debugging section refers to a .linkonce section. I hope
870 this will always be correct. */
7565ed77 871 if (symsec != sec && ! S_IS_LOCAL (sym))
252b5132 872 {
a161fe53
AM
873 if ((symsec->flags & SEC_LINK_ONCE) != 0
874 || (IS_ELF
875 /* The GNU toolchain uses an extension for ELF: a
876 section beginning with the magic string
877 .gnu.linkonce is a linkonce section. */
878 && strncmp (segment_name (symsec), ".gnu.linkonce",
879 sizeof ".gnu.linkonce" - 1) == 0))
880 continue;
252b5132 881 }
f7460f5f
JJ
882
883 /* Never adjust a reloc against local symbol in a merge section
884 with non-zero addend. */
5045ec7a
AM
885 if ((symsec->flags & SEC_MERGE) != 0
886 && (fixp->fx_offset != 0 || fixp->fx_subsy != NULL))
a161fe53 887 continue;
13ae64f3
JJ
888
889 /* Never adjust a reloc against TLS local symbol. */
df44284e 890 if ((symsec->flags & SEC_THREAD_LOCAL) != 0)
a161fe53 891 continue;
252b5132 892
a161fe53 893 /* We refetch the segment when calling section_symbol, rather
252b5132 894 than using symsec, because S_GET_VALUE may wind up changing
efaf0ba4 895 the section when it calls resolve_symbol_value. */
252b5132
RH
896 fixp->fx_offset += S_GET_VALUE (sym);
897 fixp->fx_addsy = section_symbol (S_GET_SEGMENT (sym));
e723ef7c
ILT
898#ifdef DEBUG5
899 fprintf (stderr, "\nadjusted fixup:\n");
900 print_fixup (fixp);
901#endif
252b5132 902 }
252b5132
RH
903
904 dump_section_relocs (abfd, sec, stderr);
905}
906
e7ff5c73
AM
907/* fixup_segment()
908
909 Go through all the fixS's in a segment and see which ones can be
910 handled now. (These consist of fixS where we have since discovered
911 the value of a symbol, or the address of the frag involved.)
912 For each one, call md_apply_fix to put the fix into the frag data.
89d67ed9
AM
913 Ones that we couldn't completely handle here will be output later
914 by emit_relocations. */
e7ff5c73 915
89d67ed9 916static void
e7ff5c73
AM
917fixup_segment (fixS *fixP, segT this_segment)
918{
e7ff5c73
AM
919 valueT add_number;
920 fragS *fragP;
921 segT add_symbol_segment = absolute_section;
922
923 if (fixP != NULL && abs_section_sym == NULL)
924 abs_section_sym = section_symbol (absolute_section);
925
926 /* If the linker is doing the relaxing, we must not do any fixups.
927
928 Well, strictly speaking that's not true -- we could do any that
929 are PC-relative and don't cross regions that could change size.
930 And for the i960 we might be able to turn callx/callj into bal
931 anyways in cases where we know the maximum displacement. */
932 if (linkrelax && TC_LINKRELAX_FIXUP (this_segment))
933 {
934 for (; fixP; fixP = fixP->fx_next)
935 if (!fixP->fx_done)
936 {
937 if (fixP->fx_addsy == NULL)
938 {
939 /* There was no symbol required by this relocation.
940 However, BFD doesn't really handle relocations
941 without symbols well. So fake up a local symbol in
942 the absolute section. */
943 fixP->fx_addsy = abs_section_sym;
944 }
945 symbol_mark_used_in_reloc (fixP->fx_addsy);
946 if (fixP->fx_subsy != NULL)
947 symbol_mark_used_in_reloc (fixP->fx_subsy);
e7ff5c73 948 }
89d67ed9 949 return;
e7ff5c73
AM
950 }
951
952 for (; fixP; fixP = fixP->fx_next)
953 {
954#ifdef DEBUG5
955 fprintf (stderr, "\nprocessing fixup:\n");
956 print_fixup (fixP);
957#endif
958
959 fragP = fixP->fx_frag;
960 know (fragP);
961#ifdef TC_VALIDATE_FIX
962 TC_VALIDATE_FIX (fixP, this_segment, skip);
963#endif
964 add_number = fixP->fx_offset;
965
e7ff5c73
AM
966 if (fixP->fx_addsy != NULL)
967 add_symbol_segment = S_GET_SEGMENT (fixP->fx_addsy);
968
969 if (fixP->fx_subsy != NULL)
970 {
971 segT sub_symbol_segment;
972 resolve_symbol_value (fixP->fx_subsy);
973 sub_symbol_segment = S_GET_SEGMENT (fixP->fx_subsy);
974 if (fixP->fx_addsy != NULL
975 && sub_symbol_segment == add_symbol_segment
c969da64
RS
976 && !S_FORCE_RELOC (fixP->fx_addsy, 0)
977 && !S_FORCE_RELOC (fixP->fx_subsy, 0)
e7ff5c73
AM
978 && !TC_FORCE_RELOCATION_SUB_SAME (fixP, add_symbol_segment))
979 {
980 add_number += S_GET_VALUE (fixP->fx_addsy);
981 add_number -= S_GET_VALUE (fixP->fx_subsy);
982 fixP->fx_offset = add_number;
983 fixP->fx_addsy = NULL;
984 fixP->fx_subsy = NULL;
985#ifdef TC_M68K
986 /* See the comment below about 68k weirdness. */
987 fixP->fx_pcrel = 0;
988#endif
989 }
990 else if (sub_symbol_segment == absolute_section
c969da64 991 && !S_FORCE_RELOC (fixP->fx_subsy, 0)
9a97a5d7 992 && !TC_FORCE_RELOCATION_SUB_ABS (fixP, add_symbol_segment))
e7ff5c73
AM
993 {
994 add_number -= S_GET_VALUE (fixP->fx_subsy);
995 fixP->fx_offset = add_number;
996 fixP->fx_subsy = NULL;
997 }
998 else if (sub_symbol_segment == this_segment
c969da64 999 && !S_FORCE_RELOC (fixP->fx_subsy, 0)
5db484ff 1000 && !TC_FORCE_RELOCATION_SUB_LOCAL (fixP, add_symbol_segment))
e7ff5c73
AM
1001 {
1002 add_number -= S_GET_VALUE (fixP->fx_subsy);
1003 fixP->fx_offset = (add_number + fixP->fx_dot_value
8e723a10 1004 + fixP->fx_dot_frag->fr_address);
e7ff5c73
AM
1005
1006 /* Make it pc-relative. If the back-end code has not
1007 selected a pc-relative reloc, cancel the adjustment
1008 we do later on all pc-relative relocs. */
1009 if (0
1010#ifdef TC_M68K
1011 /* Do this for m68k even if it's already described
1012 as pc-relative. On the m68k, an operand of
1013 "pc@(foo-.-2)" should address "foo" in a
1014 pc-relative mode. */
1015 || 1
1016#endif
1017 || !fixP->fx_pcrel)
1018 add_number += MD_PCREL_FROM_SECTION (fixP, this_segment);
1019 fixP->fx_subsy = NULL;
1020 fixP->fx_pcrel = 1;
1021 }
586ec8c1 1022 else if (!TC_VALIDATE_FIX_SUB (fixP, add_symbol_segment))
e7ff5c73 1023 {
9a97a5d7
AM
1024 if (!md_register_arithmetic
1025 && (add_symbol_segment == reg_section
1026 || sub_symbol_segment == reg_section))
1027 as_bad_where (fixP->fx_file, fixP->fx_line,
1028 _("register value used as expression"));
1029 else
1030 as_bad_where (fixP->fx_file, fixP->fx_line,
1031 _("can't resolve `%s' {%s section} - `%s' {%s section}"),
1032 fixP->fx_addsy ? S_GET_NAME (fixP->fx_addsy) : "0",
1033 segment_name (add_symbol_segment),
1034 S_GET_NAME (fixP->fx_subsy),
1035 segment_name (sub_symbol_segment));
e7ff5c73 1036 }
586ec8c1
NC
1037 else if (sub_symbol_segment != undefined_section
1038 && ! bfd_is_com_section (sub_symbol_segment)
1039 && MD_APPLY_SYM_VALUE (fixP))
1040 add_number -= S_GET_VALUE (fixP->fx_subsy);
e7ff5c73
AM
1041 }
1042
1043 if (fixP->fx_addsy)
1044 {
1fc5d88e 1045 if (add_symbol_segment == this_segment
c969da64 1046 && !S_FORCE_RELOC (fixP->fx_addsy, 0)
e7ff5c73
AM
1047 && !TC_FORCE_RELOCATION_LOCAL (fixP))
1048 {
1049 /* This fixup was made when the symbol's segment was
1050 SEG_UNKNOWN, but it is now in the local segment.
1051 So we know how to do the address without relocation. */
1052 add_number += S_GET_VALUE (fixP->fx_addsy);
1053 fixP->fx_offset = add_number;
1054 if (fixP->fx_pcrel)
1055 add_number -= MD_PCREL_FROM_SECTION (fixP, this_segment);
1056 fixP->fx_addsy = NULL;
1057 fixP->fx_pcrel = 0;
1058 }
1059 else if (add_symbol_segment == absolute_section
c969da64 1060 && !S_FORCE_RELOC (fixP->fx_addsy, 0)
e7ff5c73
AM
1061 && !TC_FORCE_RELOCATION_ABS (fixP))
1062 {
1063 add_number += S_GET_VALUE (fixP->fx_addsy);
1064 fixP->fx_offset = add_number;
1065 fixP->fx_addsy = NULL;
1066 }
1067 else if (add_symbol_segment != undefined_section
1068 && ! bfd_is_com_section (add_symbol_segment)
1069 && MD_APPLY_SYM_VALUE (fixP))
1070 add_number += S_GET_VALUE (fixP->fx_addsy);
1071 }
1072
1073 if (fixP->fx_pcrel)
1074 {
1075 add_number -= MD_PCREL_FROM_SECTION (fixP, this_segment);
1076 if (!fixP->fx_done && fixP->fx_addsy == NULL)
1077 {
1078 /* There was no symbol required by this relocation.
1079 However, BFD doesn't really handle relocations
1080 without symbols well. So fake up a local symbol in
1081 the absolute section. */
1082 fixP->fx_addsy = abs_section_sym;
1083 }
1084 }
1085
1086 if (!fixP->fx_done)
1087 md_apply_fix (fixP, &add_number, this_segment);
1088
1089 if (!fixP->fx_done)
1090 {
e7ff5c73
AM
1091 if (fixP->fx_addsy == NULL)
1092 fixP->fx_addsy = abs_section_sym;
1093 symbol_mark_used_in_reloc (fixP->fx_addsy);
1094 if (fixP->fx_subsy != NULL)
1095 symbol_mark_used_in_reloc (fixP->fx_subsy);
1096 }
1097
1098 if (!fixP->fx_bit_fixP && !fixP->fx_no_overflow && fixP->fx_size != 0)
1099 {
1100 if (fixP->fx_size < sizeof (valueT))
1101 {
1102 valueT mask;
1103
1104 mask = 0;
1105 mask--; /* Set all bits to one. */
1106 mask <<= fixP->fx_size * 8 - (fixP->fx_signed ? 1 : 0);
1107 if ((add_number & mask) != 0 && (add_number & mask) != mask)
1108 {
1109 char buf[50], buf2[50];
1110 sprint_value (buf, fragP->fr_address + fixP->fx_where);
1111 if (add_number > 1000)
1112 sprint_value (buf2, add_number);
1113 else
1114 sprintf (buf2, "%ld", (long) add_number);
1115 as_bad_where (fixP->fx_file, fixP->fx_line,
992a06ee
AM
1116 ngettext ("value of %s too large for field "
1117 "of %d byte at %s",
1118 "value of %s too large for field "
1119 "of %d bytes at %s",
1120 fixP->fx_size),
e7ff5c73
AM
1121 buf2, fixP->fx_size, buf);
1122 } /* Generic error checking. */
1123 }
1124#ifdef WARN_SIGNED_OVERFLOW_WORD
1125 /* Warn if a .word value is too large when treated as a signed
1126 number. We already know it is not too negative. This is to
1127 catch over-large switches generated by gcc on the 68k. */
1128 if (!flag_signed_overflow_ok
1129 && fixP->fx_size == 2
1130 && add_number > 0x7fff)
1131 as_bad_where (fixP->fx_file, fixP->fx_line,
1132 _("signed .word overflow; switch may be too large; %ld at 0x%lx"),
1133 (long) add_number,
1134 (long) (fragP->fr_address + fixP->fx_where));
1135#endif
1136 } /* Not a bit fix. */
1137
1138#ifdef TC_VALIDATE_FIX
1139 skip: ATTRIBUTE_UNUSED_LABEL
1140 ;
1141#endif
1142#ifdef DEBUG5
1143 fprintf (stderr, "result:\n");
1144 print_fixup (fixP);
1145#endif
1146 } /* For each fixS in this segment. */
e7ff5c73
AM
1147}
1148
a161fe53 1149static void
d7342424
KH
1150fix_segment (bfd *abfd ATTRIBUTE_UNUSED,
1151 asection *sec,
e7ff5c73 1152 void *xxx ATTRIBUTE_UNUSED)
a161fe53
AM
1153{
1154 segment_info_type *seginfo = seg_info (sec);
1155
1156 fixup_segment (seginfo->fix_root, sec);
1157}
1158
e5435dec
AM
1159static void
1160install_reloc (asection *sec, arelent *reloc, fragS *fragp,
3b4dbbbf 1161 const char *file, unsigned int line)
e5435dec
AM
1162{
1163 char *err;
1164 bfd_reloc_status_type s;
76d12939
AM
1165 asymbol *sym;
1166
1167 if (reloc->sym_ptr_ptr != NULL
1168 && (sym = *reloc->sym_ptr_ptr) != NULL
1169 && (sym->flags & BSF_KEEP) == 0
1170 && ((sym->flags & BSF_SECTION_SYM) == 0
55f8b826
AM
1171 || (EMIT_SECTION_SYMBOLS
1172 && !bfd_is_abs_section (sym->section))))
76d12939 1173 as_bad_where (file, line, _("redefined symbol cannot be used on reloc"));
e5435dec
AM
1174
1175 s = bfd_install_relocation (stdoutput, reloc,
1176 fragp->fr_literal, fragp->fr_address,
1177 sec, &err);
1178 switch (s)
1179 {
1180 case bfd_reloc_ok:
1181 break;
1182 case bfd_reloc_overflow:
1183 as_bad_where (file, line, _("relocation overflow"));
1184 break;
1185 case bfd_reloc_outofrange:
1186 as_bad_where (file, line, _("relocation out of range"));
1187 break;
1188 default:
1189 as_fatal (_("%s:%u: bad return from bfd_install_relocation: %x"),
1190 file, line, s);
1191 }
1192}
1193
7230378d
AM
1194static fragS *
1195get_frag_for_reloc (fragS *last_frag,
1196 const segment_info_type *seginfo,
1197 const struct reloc_list *r)
1198{
1199 fragS *f;
34bca508 1200
7230378d
AM
1201 for (f = last_frag; f != NULL; f = f->fr_next)
1202 if (f->fr_address <= r->u.b.r.address
1203 && r->u.b.r.address < f->fr_address + f->fr_fix)
1204 return f;
1205
1206 for (f = seginfo->frchainP->frch_root; f != NULL; f = f->fr_next)
1207 if (f->fr_address <= r->u.b.r.address
1208 && r->u.b.r.address < f->fr_address + f->fr_fix)
1209 return f;
1210
740bdc67
AM
1211 for (f = seginfo->frchainP->frch_root; f != NULL; f = f->fr_next)
1212 if (f->fr_address <= r->u.b.r.address
1213 && r->u.b.r.address <= f->fr_address + f->fr_fix)
1214 return f;
1215
7230378d
AM
1216 as_bad_where (r->file, r->line,
1217 _("reloc not within (fixed part of) section"));
1218 return NULL;
1219}
1220
252b5132 1221static void
e7ff5c73 1222write_relocs (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED)
252b5132
RH
1223{
1224 segment_info_type *seginfo = seg_info (sec);
252b5132 1225 unsigned int n;
05e9452c 1226 struct reloc_list *my_reloc_list, **rp, *r;
252b5132
RH
1227 arelent **relocs;
1228 fixS *fixp;
7230378d 1229 fragS *last_frag;
252b5132
RH
1230
1231 /* If seginfo is NULL, we did not create this section; don't do
1232 anything with it. */
1233 if (seginfo == NULL)
1234 return;
1235
252b5132
RH
1236 n = 0;
1237 for (fixp = seginfo->fix_root; fixp; fixp = fixp->fx_next)
e5435dec
AM
1238 if (!fixp->fx_done)
1239 n++;
1240
1241#ifdef RELOC_EXPANSION_POSSIBLE
1242 n *= MAX_RELOC_EXPANSION;
1243#endif
252b5132 1244
05e9452c
AM
1245 /* Extract relocs for this section from reloc_list. */
1246 rp = &reloc_list;
1247 my_reloc_list = NULL;
1248 while ((r = *rp) != NULL)
1249 {
1250 if (r->u.b.sec == sec)
1251 {
1252 *rp = r->next;
1253 r->next = my_reloc_list;
1254 my_reloc_list = r;
1255 n++;
1256 }
1257 else
1258 rp = &r->next;
1259 }
1260
add39d23 1261 relocs = XCNEWVEC (arelent *, n);
252b5132 1262
7230378d
AM
1263 n = 0;
1264 r = my_reloc_list;
1265 last_frag = NULL;
252b5132
RH
1266 for (fixp = seginfo->fix_root; fixp != (fixS *) NULL; fixp = fixp->fx_next)
1267 {
d31f0f6d
AM
1268 int fx_size, slack;
1269 offsetT loc;
7230378d
AM
1270 arelent **reloc;
1271#ifndef RELOC_EXPANSION_POSSIBLE
1272 arelent *rel;
1273
1274 reloc = &rel;
1275#endif
252b5132
RH
1276
1277 if (fixp->fx_done)
e5435dec 1278 continue;
252b5132 1279
d31f0f6d
AM
1280 fx_size = fixp->fx_size;
1281 slack = TC_FX_SIZE_SLACK (fixp);
1282 if (slack > 0)
1283 fx_size = fx_size > slack ? fx_size - slack : 0;
1284 loc = fixp->fx_where + fx_size;
e5435dec 1285 if (slack >= 0 && loc > fixp->fx_frag->fr_fix)
d31f0f6d
AM
1286 as_bad_where (fixp->fx_file, fixp->fx_line,
1287 _("internal error: fixup not contained within frag"));
252b5132 1288
e5435dec 1289#ifndef RELOC_EXPANSION_POSSIBLE
7230378d 1290 *reloc = tc_gen_reloc (sec, fixp);
e5435dec 1291#else
7230378d
AM
1292 reloc = tc_gen_reloc (sec, fixp);
1293#endif
252b5132 1294
7230378d
AM
1295 while (*reloc)
1296 {
1297 while (r != NULL && r->u.b.r.address < (*reloc)->address)
1298 {
1299 fragS *f = get_frag_for_reloc (last_frag, seginfo, r);
1300 if (f != NULL)
1301 {
1302 last_frag = f;
1303 relocs[n++] = &r->u.b.r;
1304 install_reloc (sec, &r->u.b.r, f, r->file, r->line);
1305 }
1306 r = r->next;
1307 }
1308 relocs[n++] = *reloc;
1309 install_reloc (sec, *reloc, fixp->fx_frag,
1310 fixp->fx_file, fixp->fx_line);
1311#ifndef RELOC_EXPANSION_POSSIBLE
1312 break;
1313#else
1314 reloc++;
e5435dec 1315#endif
7230378d
AM
1316 }
1317 }
d31f0f6d 1318
7230378d
AM
1319 while (r != NULL)
1320 {
1321 fragS *f = get_frag_for_reloc (last_frag, seginfo, r);
1322 if (f != NULL)
1323 {
1324 last_frag = f;
1325 relocs[n++] = &r->u.b.r;
1326 install_reloc (sec, &r->u.b.r, f, r->file, r->line);
1327 }
1328 r = r->next;
252b5132 1329 }
252b5132
RH
1330
1331#ifdef DEBUG4
1332 {
1596988d 1333 unsigned int k, j, nsyms;
252b5132
RH
1334 asymbol **sympp;
1335 sympp = bfd_get_outsymbols (stdoutput);
1336 nsyms = bfd_get_symcount (stdoutput);
1596988d
TG
1337 for (k = 0; k < n; k++)
1338 if (((*relocs[k]->sym_ptr_ptr)->flags & BSF_SECTION_SYM) == 0)
252b5132
RH
1339 {
1340 for (j = 0; j < nsyms; j++)
1596988d 1341 if (sympp[j] == *relocs[k]->sym_ptr_ptr)
252b5132
RH
1342 break;
1343 if (j == nsyms)
1344 abort ();
1345 }
1346 }
1347#endif
1348
1349 if (n)
e5435dec
AM
1350 {
1351 flagword flags = bfd_get_section_flags (abfd, sec);
1352 flags |= SEC_RELOC;
1353 bfd_set_section_flags (abfd, sec, flags);
1354 bfd_set_reloc (stdoutput, sec, relocs, n);
1355 }
252b5132 1356
945a1a6b
ILT
1357#ifdef SET_SECTION_RELOCS
1358 SET_SECTION_RELOCS (sec, relocs, n);
1359#endif
1360
252b5132
RH
1361#ifdef DEBUG3
1362 {
1596988d
TG
1363 unsigned int k;
1364
252b5132 1365 fprintf (stderr, "relocs for sec %s\n", sec->name);
1596988d 1366 for (k = 0; k < n; k++)
252b5132 1367 {
1596988d
TG
1368 arelent *rel = relocs[k];
1369 asymbol *s = *rel->sym_ptr_ptr;
988392e2 1370 fprintf (stderr, " reloc %2d @%p off %4lx : sym %-10s addend %lx\n",
1596988d
TG
1371 k, rel, (unsigned long)rel->address, s->name,
1372 (unsigned long)rel->addend);
252b5132
RH
1373 }
1374 }
1375#endif
1376}
1377
0acf065b
CC
1378static int
1379compress_frag (struct z_stream_s *strm, const char *contents, int in_size,
1380 fragS **last_newf, struct obstack *ob)
1381{
1382 int out_size;
1383 int total_out_size = 0;
1384 fragS *f = *last_newf;
1385 char *next_out;
1386 int avail_out;
1387
1388 /* Call the compression routine repeatedly until it has finished
1389 processing the frag. */
1390 while (in_size > 0)
1391 {
1392 /* Reserve all the space available in the current chunk.
1393 If none is available, start a new frag. */
1394 avail_out = obstack_room (ob);
1395 if (avail_out <= 0)
1396 {
1397 obstack_finish (ob);
1398 f = frag_alloc (ob);
1399 f->fr_type = rs_fill;
1400 (*last_newf)->fr_next = f;
1401 *last_newf = f;
1402 avail_out = obstack_room (ob);
1403 }
1404 if (avail_out <= 0)
1405 as_fatal (_("can't extend frag"));
1406 next_out = obstack_next_free (ob);
1407 obstack_blank_fast (ob, avail_out);
1408 out_size = compress_data (strm, &contents, &in_size,
1409 &next_out, &avail_out);
1410 if (out_size < 0)
1411 return -1;
1412
1413 f->fr_fix += out_size;
1414 total_out_size += out_size;
1415
1416 /* Return unused space. */
1417 if (avail_out > 0)
1418 obstack_blank_fast (ob, -avail_out);
1419 }
1420
1421 return total_out_size;
1422}
1423
1424static void
1425compress_debug (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED)
1426{
1427 segment_info_type *seginfo = seg_info (sec);
1428 fragS *f;
1429 fragS *first_newf;
1430 fragS *last_newf;
1431 struct obstack *ob = &seginfo->frchainP->frch_obstack;
1432 bfd_size_type uncompressed_size = (bfd_size_type) sec->size;
1433 bfd_size_type compressed_size;
1434 const char *section_name;
1435 char *compressed_name;
1436 char *header;
1437 struct z_stream_s *strm;
1438 int x;
4a114e3e 1439 flagword flags = bfd_get_section_flags (abfd, sec);
151411f8 1440 unsigned int header_size, compression_header_size;
0acf065b
CC
1441
1442 if (seginfo == NULL
6ac88ef3 1443 || sec->size < 32
4a114e3e 1444 || (flags & (SEC_ALLOC | SEC_HAS_CONTENTS)) == SEC_ALLOC)
0acf065b
CC
1445 return;
1446
1447 section_name = bfd_get_section_name (stdoutput, sec);
1448 if (strncmp (section_name, ".debug_", 7) != 0)
1449 return;
1450
1451 strm = compress_init ();
1452 if (strm == NULL)
1453 return;
1454
151411f8 1455 if (flag_compress_debug == COMPRESS_DEBUG_GABI_ZLIB)
dab394de 1456 {
dab394de
L
1457 compression_header_size
1458 = bfd_get_compression_header_size (stdoutput, NULL);
1459 header_size = compression_header_size;
1460 }
151411f8 1461 else
dab394de 1462 {
dab394de
L
1463 compression_header_size = 0;
1464 header_size = 12;
1465 }
151411f8 1466
dab394de 1467 /* Create a new frag to contain the compression header. */
0acf065b 1468 first_newf = frag_alloc (ob);
151411f8 1469 if (obstack_room (ob) < header_size)
0acf065b 1470 first_newf = frag_alloc (ob);
151411f8 1471 if (obstack_room (ob) < header_size)
992a06ee
AM
1472 as_fatal (ngettext ("can't extend frag %lu char",
1473 "can't extend frag %lu chars",
1474 (unsigned long) header_size),
1475 (unsigned long) header_size);
0acf065b 1476 last_newf = first_newf;
151411f8 1477 obstack_blank_fast (ob, header_size);
0acf065b 1478 last_newf->fr_type = rs_fill;
151411f8 1479 last_newf->fr_fix = header_size;
0acf065b 1480 header = last_newf->fr_literal;
151411f8 1481 compressed_size = header_size;
0acf065b
CC
1482
1483 /* Stream the frags through the compression engine, adding new frags
2b0f3761 1484 as necessary to accommodate the compressed output. */
0acf065b
CC
1485 for (f = seginfo->frchainP->frch_root;
1486 f;
1487 f = f->fr_next)
1488 {
1489 offsetT fill_size;
1490 char *fill_literal;
1491 offsetT count;
1492 int out_size;
1493
1494 gas_assert (f->fr_type == rs_fill);
1495 if (f->fr_fix)
1496 {
1497 out_size = compress_frag (strm, f->fr_literal, f->fr_fix,
1498 &last_newf, ob);
1499 if (out_size < 0)
1500 return;
1501 compressed_size += out_size;
1502 }
1503 fill_literal = f->fr_literal + f->fr_fix;
1504 fill_size = f->fr_var;
1505 count = f->fr_offset;
1506 gas_assert (count >= 0);
1507 if (fill_size && count)
1508 {
1509 while (count--)
1510 {
1511 out_size = compress_frag (strm, fill_literal, (int) fill_size,
1512 &last_newf, ob);
1513 if (out_size < 0)
1514 return;
1515 compressed_size += out_size;
1516 }
1517 }
1518 }
1519
1520 /* Flush the compression state. */
1521 for (;;)
1522 {
1523 int avail_out;
1524 char *next_out;
1525 int out_size;
1526
1527 /* Reserve all the space available in the current chunk.
1528 If none is available, start a new frag. */
1529 avail_out = obstack_room (ob);
1530 if (avail_out <= 0)
1531 {
1532 fragS *newf;
1533
1534 obstack_finish (ob);
1535 newf = frag_alloc (ob);
1536 newf->fr_type = rs_fill;
1537 last_newf->fr_next = newf;
1538 last_newf = newf;
1539 avail_out = obstack_room (ob);
1540 }
1541 if (avail_out <= 0)
1542 as_fatal (_("can't extend frag"));
1543 next_out = obstack_next_free (ob);
1544 obstack_blank_fast (ob, avail_out);
1545 x = compress_finish (strm, &next_out, &avail_out, &out_size);
1546 if (x < 0)
1547 return;
1548
1549 last_newf->fr_fix += out_size;
1550 compressed_size += out_size;
1551
1552 /* Return unused space. */
1553 if (avail_out > 0)
1554 obstack_blank_fast (ob, -avail_out);
1555
1556 if (x == 0)
1557 break;
1558 }
1559
b422eb49
L
1560 /* PR binutils/18087: If compression didn't make the section smaller,
1561 just keep it uncompressed. */
317974f6 1562 if (compressed_size >= uncompressed_size)
273a4985 1563 return;
d94077e2 1564
0acf065b
CC
1565 /* Replace the uncompressed frag list with the compressed frag list. */
1566 seginfo->frchainP->frch_root = first_newf;
1567 seginfo->frchainP->frch_last = last_newf;
1568
1569 /* Update the section size and its name. */
151411f8 1570 bfd_update_compression_header (abfd, (bfd_byte *) header, sec);
0acf065b
CC
1571 x = bfd_set_section_size (abfd, sec, compressed_size);
1572 gas_assert (x);
151411f8
L
1573 if (!compression_header_size)
1574 {
29a2809e 1575 compressed_name = concat (".z", section_name + 1, (char *) NULL);
151411f8
L
1576 bfd_section_name (stdoutput, sec) = compressed_name;
1577 }
0acf065b
CC
1578}
1579
62a02d25
L
1580#ifndef md_generate_nops
1581/* Genenerate COUNT bytes of no-op instructions to WHERE. A target
1582 backend must override this with proper no-op instructions. */
1583
1584static void
1585md_generate_nops (fragS *f ATTRIBUTE_UNUSED,
1586 char *where ATTRIBUTE_UNUSED,
1587 offsetT count ATTRIBUTE_UNUSED,
1588 int control ATTRIBUTE_UNUSED)
1589{
8f065d3b 1590 as_bad (_("unimplemented .nops directive"));
62a02d25
L
1591}
1592#endif
1593
252b5132 1594static void
d7342424
KH
1595write_contents (bfd *abfd ATTRIBUTE_UNUSED,
1596 asection *sec,
e7ff5c73 1597 void *xxx ATTRIBUTE_UNUSED)
252b5132
RH
1598{
1599 segment_info_type *seginfo = seg_info (sec);
685736be 1600 addressT offset = 0;
252b5132
RH
1601 fragS *f;
1602
1603 /* Write out the frags. */
1604 if (seginfo == NULL
efaf0ba4 1605 || !(bfd_get_section_flags (abfd, sec) & SEC_HAS_CONTENTS))
252b5132
RH
1606 return;
1607
1608 for (f = seginfo->frchainP->frch_root;
1609 f;
1610 f = f->fr_next)
1611 {
1612 int x;
685736be 1613 addressT fill_size;
252b5132 1614 char *fill_literal;
685736be 1615 offsetT count;
252b5132 1616
62a02d25 1617 gas_assert (f->fr_type == rs_fill || f->fr_type == rs_fill_nop);
252b5132
RH
1618 if (f->fr_fix)
1619 {
1620 x = bfd_set_section_contents (stdoutput, sec,
1621 f->fr_literal, (file_ptr) offset,
1622 (bfd_size_type) f->fr_fix);
b34976b6 1623 if (!x)
992a06ee
AM
1624 as_fatal (ngettext ("can't write %ld byte "
1625 "to section %s of %s: '%s'",
1626 "can't write %ld bytes "
1627 "to section %s of %s: '%s'",
1628 (long) f->fr_fix),
1629 (long) f->fr_fix,
1630 sec->name, stdoutput->filename,
885afe7b 1631 bfd_errmsg (bfd_get_error ()));
252b5132
RH
1632 offset += f->fr_fix;
1633 }
62a02d25 1634
252b5132
RH
1635 fill_size = f->fr_var;
1636 count = f->fr_offset;
62a02d25
L
1637 fill_literal = f->fr_literal + f->fr_fix;
1638
1639 if (f->fr_type == rs_fill_nop)
1640 {
1641 gas_assert (count >= 0 && fill_size == 1);
1642 if (count > 0)
1643 {
1644 char *buf = xmalloc (count);
1645 md_generate_nops (f, buf, count, *fill_literal);
1646 x = bfd_set_section_contents
1647 (stdoutput, sec, buf, (file_ptr) offset,
1648 (bfd_size_type) count);
1649 if (!x)
1650 as_fatal (ngettext ("can't fill %ld byte "
1651 "in section %s of %s: '%s'",
1652 "can't fill %ld bytes "
1653 "in section %s of %s: '%s'",
1654 (long) count), (long) count,
1655 sec->name, stdoutput->filename,
1656 bfd_errmsg (bfd_get_error ()));
1657 offset += count;
1658 free (buf);
1659 }
1660 continue;
1661 }
1662
9c2799c2 1663 gas_assert (count >= 0);
252b5132
RH
1664 if (fill_size && count)
1665 {
1666 char buf[256];
efaf0ba4 1667 if (fill_size > sizeof (buf))
252b5132 1668 {
efaf0ba4 1669 /* Do it the old way. Can this ever happen? */
252b5132
RH
1670 while (count--)
1671 {
1672 x = bfd_set_section_contents (stdoutput, sec,
1673 fill_literal,
1674 (file_ptr) offset,
1675 (bfd_size_type) fill_size);
b34976b6 1676 if (!x)
992a06ee
AM
1677 as_fatal (ngettext ("can't fill %ld byte "
1678 "in section %s of %s: '%s'",
1679 "can't fill %ld bytes "
1680 "in section %s of %s: '%s'",
1681 (long) fill_size),
1682 (long) fill_size,
1683 sec->name, stdoutput->filename,
885afe7b 1684 bfd_errmsg (bfd_get_error ()));
252b5132
RH
1685 offset += fill_size;
1686 }
1687 }
1688 else
1689 {
1690 /* Build a buffer full of fill objects and output it as
1691 often as necessary. This saves on the overhead of
1692 potentially lots of bfd_set_section_contents calls. */
1693 int n_per_buf, i;
1694 if (fill_size == 1)
1695 {
1696 n_per_buf = sizeof (buf);
1697 memset (buf, *fill_literal, n_per_buf);
1698 }
1699 else
1700 {
1701 char *bufp;
efaf0ba4 1702 n_per_buf = sizeof (buf) / fill_size;
252b5132 1703 for (i = n_per_buf, bufp = buf; i; i--, bufp += fill_size)
efaf0ba4 1704 memcpy (bufp, fill_literal, fill_size);
252b5132
RH
1705 }
1706 for (; count > 0; count -= n_per_buf)
1707 {
1708 n_per_buf = n_per_buf > count ? count : n_per_buf;
efaf0ba4
NC
1709 x = bfd_set_section_contents
1710 (stdoutput, sec, buf, (file_ptr) offset,
1711 (bfd_size_type) n_per_buf * fill_size);
b34976b6 1712 if (!x)
992a06ee
AM
1713 as_fatal (ngettext ("can't fill %ld byte "
1714 "in section %s of %s: '%s'",
1715 "can't fill %ld bytes "
1716 "in section %s of %s: '%s'",
1717 (long) (n_per_buf * fill_size)),
1718 (long) (n_per_buf * fill_size),
1719 sec->name, stdoutput->filename,
a22429b9 1720 bfd_errmsg (bfd_get_error ()));
252b5132
RH
1721 offset += n_per_buf * fill_size;
1722 }
1723 }
1724 }
1725 }
1726}
252b5132 1727
252b5132 1728static void
d7342424 1729merge_data_into_text (void)
252b5132 1730{
252b5132
RH
1731 seg_info (text_section)->frchainP->frch_last->fr_next =
1732 seg_info (data_section)->frchainP->frch_root;
1733 seg_info (text_section)->frchainP->frch_last =
1734 seg_info (data_section)->frchainP->frch_last;
1735 seg_info (data_section)->frchainP = 0;
252b5132 1736}
252b5132 1737
252b5132 1738static void
d7342424 1739set_symtab (void)
252b5132
RH
1740{
1741 int nsyms;
1742 asymbol **asympp;
1743 symbolS *symp;
b34976b6 1744 bfd_boolean result;
252b5132
RH
1745
1746 /* Count symbols. We can't rely on a count made by the loop in
1747 write_object_file, because *_frob_file may add a new symbol or
1748 two. */
1749 nsyms = 0;
1750 for (symp = symbol_rootP; symp; symp = symbol_next (symp))
1751 nsyms++;
1752
1753 if (nsyms)
1754 {
1755 int i;
0e1a166b 1756 bfd_size_type amt = (bfd_size_type) nsyms * sizeof (asymbol *);
252b5132 1757
1e9cc1c2 1758 asympp = (asymbol **) bfd_alloc (stdoutput, amt);
252b5132
RH
1759 symp = symbol_rootP;
1760 for (i = 0; i < nsyms; i++, symp = symbol_next (symp))
1761 {
49309057 1762 asympp[i] = symbol_get_bfdsym (symp);
76d12939
AM
1763 if (asympp[i]->flags != BSF_SECTION_SYM
1764 || !(bfd_is_const_section (asympp[i]->section)
1765 && asympp[i]->section->symbol == asympp[i]))
1766 asympp[i]->flags |= BSF_KEEP;
49309057 1767 symbol_mark_written (symp);
252b5132
RH
1768 }
1769 }
1770 else
1771 asympp = 0;
1772 result = bfd_set_symtab (stdoutput, asympp, nsyms);
9c2799c2 1773 gas_assert (result);
252b5132
RH
1774 symbol_table_frozen = 1;
1775}
252b5132
RH
1776
1777/* Finish the subsegments. After every sub-segment, we fake an
2edb36e7 1778 ".align ...". This conforms to BSD4.2 brain-damage. We then fake
252b5132
RH
1779 ".fill 0" because that is the kind of frag that requires least
1780 thought. ".align" frags like to have a following frag since that
1781 makes calculating their intended length trivial. */
1782
1783#ifndef SUB_SEGMENT_ALIGN
18e1d487 1784#ifdef HANDLE_ALIGN
436d9e46 1785/* The last subsegment gets an alignment corresponding to the alignment
18e1d487
AM
1786 of the section. This allows proper nop-filling at the end of
1787 code-bearing sections. */
1788#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) \
9028d943 1789 (!(FRCHAIN)->frch_next && subseg_text_p (SEG) \
2edb36e7 1790 && !do_not_pad_sections_to_alignment \
9028d943
AM
1791 ? get_recorded_alignment (SEG) \
1792 : 0)
18e1d487 1793#else
18e1d487 1794#define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 0
252b5132
RH
1795#endif
1796#endif
1797
85024cd8 1798static void
d98b0e2b 1799subsegs_finish_section (asection *s)
252b5132
RH
1800{
1801 struct frchain *frchainP;
d98b0e2b
TG
1802 segment_info_type *seginfo = seg_info (s);
1803 if (!seginfo)
1804 return;
252b5132 1805
d98b0e2b
TG
1806 for (frchainP = seginfo->frchainP;
1807 frchainP != NULL;
1808 frchainP = frchainP->frch_next)
252b5132 1809 {
93a24ba7 1810 int alignment;
0a9ef439 1811
d98b0e2b 1812 subseg_set (s, frchainP->frch_subseg);
381a1ab3 1813
d98b0e2b
TG
1814 /* This now gets called even if we had errors. In that case,
1815 any alignment is meaningless, and, moreover, will look weird
1816 if we are generating a listing. */
93a24ba7
MR
1817 if (had_errors ())
1818 do_not_pad_sections_to_alignment = 1;
c9049d30 1819
93a24ba7
MR
1820 alignment = SUB_SEGMENT_ALIGN (now_seg, frchainP);
1821 if ((bfd_get_section_flags (now_seg->owner, now_seg) & SEC_MERGE)
1822 && now_seg->entsize)
1823 {
1824 unsigned int entsize = now_seg->entsize;
1825 int entalign = 0;
d98b0e2b 1826
93a24ba7
MR
1827 while ((entsize & 1) == 0)
1828 {
1829 ++entalign;
1830 entsize >>= 1;
381a1ab3 1831 }
93a24ba7
MR
1832
1833 if (entalign > alignment)
1834 alignment = entalign;
d98b0e2b 1835 }
0a9ef439 1836
d98b0e2b
TG
1837 if (subseg_text_p (now_seg))
1838 frag_align_code (alignment, 0);
1839 else
1840 frag_align (alignment, 0, 0);
252b5132 1841
d98b0e2b
TG
1842 /* frag_align will have left a new frag.
1843 Use this last frag for an empty ".fill".
252b5132 1844
d98b0e2b
TG
1845 For this segment ...
1846 Create a last frag. Do not leave a "being filled in frag". */
1847 frag_wane (frag_now);
1848 frag_now->fr_fix = 0;
1849 know (frag_now->fr_next == NULL);
252b5132
RH
1850 }
1851}
1852
d98b0e2b
TG
1853static void
1854subsegs_finish (void)
1855{
1856 asection *s;
1857
1858 for (s = stdoutput->sections; s; s = s->next)
1859 subsegs_finish_section (s);
1860}
1861
1862#ifdef OBJ_ELF
1863static void
1864create_obj_attrs_section (void)
1865{
1866 segT s;
1867 char *p;
1868 offsetT size;
1869 const char *name;
1870
1871 size = bfd_elf_obj_attr_size (stdoutput);
1872 if (size)
1873 {
1874 name = get_elf_backend_data (stdoutput)->obj_attrs_section;
1875 if (!name)
1876 name = ".gnu.attributes";
1877 s = subseg_new (name, 0);
1878 elf_section_type (s)
1879 = get_elf_backend_data (stdoutput)->obj_attrs_section_type;
1880 bfd_set_section_flags (stdoutput, s, SEC_READONLY | SEC_DATA);
1881 frag_now_fix ();
1882 p = frag_more (size);
1883 bfd_elf_set_obj_attr_contents (stdoutput, (bfd_byte *)p, size);
1884
1885 subsegs_finish_section (s);
1886 relax_segment (seg_info (s)->frchainP->frch_root, s, 0);
1887 size_seg (stdoutput, s, NULL);
1888 }
1889}
1890#endif
1891
252b5132
RH
1892/* Write the object file. */
1893
1894void
d7342424 1895write_object_file (void)
252b5132 1896{
32638454 1897 struct relax_seg_info rsi;
7be1c489 1898#ifndef WORKING_DOT_WORD
efaf0ba4 1899 fragS *fragP; /* Track along all frags. */
252b5132
RH
1900#endif
1901
85024cd8
AM
1902 subsegs_finish ();
1903
16a87420
IS
1904#ifdef md_pre_output_hook
1905 md_pre_output_hook;
1906#endif
1907
cdaa5616
IS
1908#ifdef md_pre_relax_hook
1909 md_pre_relax_hook;
1910#endif
1911
252b5132 1912 /* From now on, we don't care about sub-segments. Build one frag chain
2b0f3761 1913 for each segment. Linked through fr_next. */
252b5132 1914
252b5132
RH
1915 /* Remove the sections created by gas for its own purposes. */
1916 {
252b5132
RH
1917 int i;
1918
5daa8fe7
L
1919 bfd_section_list_remove (stdoutput, reg_section);
1920 bfd_section_list_remove (stdoutput, expr_section);
1921 stdoutput->section_count -= 2;
252b5132
RH
1922 i = 0;
1923 bfd_map_over_sections (stdoutput, renumber_sections, &i);
1924 }
1925
1926 bfd_map_over_sections (stdoutput, chain_frchains_together, (char *) 0);
252b5132
RH
1927
1928 /* We have two segments. If user gave -R flag, then we must put the
1929 data frags into the text segment. Do this before relaxing so
1930 we know to take advantage of -R and make shorter addresses. */
252b5132
RH
1931 if (flag_readonly_data_in_text)
1932 {
1933 merge_data_into_text ();
1934 }
252b5132 1935
32638454 1936 rsi.pass = 0;
e46d99eb
AM
1937 while (1)
1938 {
aacb5251
HPN
1939#ifndef WORKING_DOT_WORD
1940 /* We need to reset the markers in the broken word list and
1941 associated frags between calls to relax_segment (via
1942 relax_seg). Since the broken word list is global, we do it
1943 once per round, rather than locally in relax_segment for each
1944 segment. */
1945 struct broken_word *brokp;
1946
1947 for (brokp = broken_words;
1948 brokp != (struct broken_word *) NULL;
1949 brokp = brokp->next_broken_word)
1950 {
1951 brokp->added = 0;
1952
1953 if (brokp->dispfrag != (fragS *) NULL
1954 && brokp->dispfrag->fr_type == rs_broken_word)
1955 brokp->dispfrag->fr_subtype = 0;
1956 }
1957#endif
1958
32638454
AM
1959 rsi.changed = 0;
1960 bfd_map_over_sections (stdoutput, relax_seg, &rsi);
1961 rsi.pass++;
1962 if (!rsi.changed)
e46d99eb
AM
1963 break;
1964 }
e027f3e8 1965
87548816
NC
1966 /* Note - Most ports will use the default value of
1967 TC_FINALIZE_SYMS_BEFORE_SIZE_SEG, which 1. This will force
1968 local symbols to be resolved, removing their frag information.
1969 Some ports however, will not have finished relaxing all of
1970 their frags and will still need the local symbol frag
1971 information. These ports can set
1972 TC_FINALIZE_SYMS_BEFORE_SIZE_SEG to 0. */
1973 finalize_syms = TC_FINALIZE_SYMS_BEFORE_SIZE_SEG;
1974
e46d99eb 1975 bfd_map_over_sections (stdoutput, size_seg, (char *) 0);
e46d99eb 1976
38b87a1b
NC
1977 /* Relaxation has completed. Freeze all syms. */
1978 finalize_syms = 1;
1979
ba8826a8
AO
1980 dwarf2dbg_final_check ();
1981
e0001a05
NC
1982#ifdef md_post_relax_hook
1983 md_post_relax_hook;
1984#endif
1985
d98b0e2b
TG
1986#ifdef OBJ_ELF
1987 if (IS_ELF)
1988 create_obj_attrs_section ();
1989#endif
1990
252b5132
RH
1991#ifndef WORKING_DOT_WORD
1992 {
1993 struct broken_word *lie;
1994 struct broken_word **prevP;
1995
1996 prevP = &broken_words;
1997 for (lie = broken_words; lie; lie = lie->next_broken_word)
1998 if (!lie->added)
1999 {
2000 expressionS exp;
2001
2002 subseg_change (lie->seg, lie->subseg);
2003 exp.X_op = O_subtract;
2004 exp.X_add_symbol = lie->add;
2005 exp.X_op_symbol = lie->sub;
2006 exp.X_add_number = lie->addnum;
252b5132
RH
2007#ifdef TC_CONS_FIX_NEW
2008 TC_CONS_FIX_NEW (lie->frag,
efaf0ba4 2009 lie->word_goes_here - lie->frag->fr_literal,
62ebcb5c 2010 2, &exp, TC_PARSE_CONS_RETURN_NONE);
252b5132
RH
2011#else
2012 fix_new_exp (lie->frag,
2013 lie->word_goes_here - lie->frag->fr_literal,
2014 2, &exp, 0, BFD_RELOC_16);
2015#endif
252b5132
RH
2016 *prevP = lie->next_broken_word;
2017 }
2018 else
2019 prevP = &(lie->next_broken_word);
2020
2021 for (lie = broken_words; lie;)
2022 {
2023 struct broken_word *untruth;
2024 char *table_ptr;
2025 addressT table_addr;
2026 addressT from_addr, to_addr;
2027 int n, m;
2028
2029 subseg_change (lie->seg, lie->subseg);
2030 fragP = lie->dispfrag;
2031
2032 /* Find out how many broken_words go here. */
2033 n = 0;
efaf0ba4
NC
2034 for (untruth = lie;
2035 untruth && untruth->dispfrag == fragP;
2036 untruth = untruth->next_broken_word)
252b5132
RH
2037 if (untruth->added == 1)
2038 n++;
2039
2040 table_ptr = lie->dispfrag->fr_opcode;
efaf0ba4
NC
2041 table_addr = (lie->dispfrag->fr_address
2042 + (table_ptr - lie->dispfrag->fr_literal));
252b5132
RH
2043 /* Create the jump around the long jumps. This is a short
2044 jump from table_ptr+0 to table_ptr+n*long_jump_size. */
2045 from_addr = table_addr;
2046 to_addr = table_addr + md_short_jump_size + n * md_long_jump_size;
efaf0ba4
NC
2047 md_create_short_jump (table_ptr, from_addr, to_addr, lie->dispfrag,
2048 lie->add);
252b5132
RH
2049 table_ptr += md_short_jump_size;
2050 table_addr += md_short_jump_size;
2051
efaf0ba4
NC
2052 for (m = 0;
2053 lie && lie->dispfrag == fragP;
2054 m++, lie = lie->next_broken_word)
252b5132
RH
2055 {
2056 if (lie->added == 2)
2057 continue;
efaf0ba4 2058 /* Patch the jump table. */
187af7df 2059 for (untruth = (struct broken_word *) (fragP->fr_symbol);
efaf0ba4
NC
2060 untruth && untruth->dispfrag == fragP;
2061 untruth = untruth->next_broken_word)
252b5132
RH
2062 {
2063 if (untruth->use_jump == lie)
187af7df
HPN
2064 {
2065 /* This is the offset from ??? to table_ptr+0.
2066 The target is the same for all users of this
2067 md_long_jump, but the "sub" bases (and hence the
2068 offsets) may be different. */
2069 addressT to_word = table_addr - S_GET_VALUE (untruth->sub);
2070#ifdef TC_CHECK_ADJUSTED_BROKEN_DOT_WORD
2071 TC_CHECK_ADJUSTED_BROKEN_DOT_WORD (to_word, untruth);
2072#endif
2073 md_number_to_chars (untruth->word_goes_here, to_word, 2);
2074 }
252b5132
RH
2075 }
2076
efaf0ba4
NC
2077 /* Install the long jump. */
2078 /* This is a long jump from table_ptr+0 to the final target. */
252b5132
RH
2079 from_addr = table_addr;
2080 to_addr = S_GET_VALUE (lie->add) + lie->addnum;
efaf0ba4
NC
2081 md_create_long_jump (table_ptr, from_addr, to_addr, lie->dispfrag,
2082 lie->add);
252b5132
RH
2083 table_ptr += md_long_jump_size;
2084 table_addr += md_long_jump_size;
2085 }
2086 }
2087 }
efaf0ba4 2088#endif /* not WORKING_DOT_WORD */
252b5132 2089
252b5132
RH
2090 /* Resolve symbol values. This needs to be done before processing
2091 the relocations. */
2092 if (symbol_rootP)
2093 {
2094 symbolS *symp;
2095
2096 for (symp = symbol_rootP; symp; symp = symbol_next (symp))
6386f3a7 2097 resolve_symbol_value (symp);
252b5132 2098 }
49309057 2099 resolve_local_symbol_values ();
05e9452c 2100 resolve_reloc_expr_symbols ();
252b5132
RH
2101
2102 PROGRESS (1);
2103
2104#ifdef tc_frob_file_before_adjust
2105 tc_frob_file_before_adjust ();
2106#endif
2107#ifdef obj_frob_file_before_adjust
2108 obj_frob_file_before_adjust ();
2109#endif
2110
efaf0ba4 2111 bfd_map_over_sections (stdoutput, adjust_reloc_syms, (char *) 0);
252b5132 2112
a161fe53
AM
2113#ifdef tc_frob_file_before_fix
2114 tc_frob_file_before_fix ();
2115#endif
2116#ifdef obj_frob_file_before_fix
2117 obj_frob_file_before_fix ();
2118#endif
2119
2120 bfd_map_over_sections (stdoutput, fix_segment, (char *) 0);
2121
252b5132
RH
2122 /* Set up symbol table, and write it out. */
2123 if (symbol_rootP)
2124 {
2125 symbolS *symp;
aaac53f5 2126 bfd_boolean skip_next_symbol = FALSE;
252b5132
RH
2127
2128 for (symp = symbol_rootP; symp; symp = symbol_next (symp))
2129 {
2130 int punt = 0;
2131 const char *name;
2132
aaac53f5
HPN
2133 if (skip_next_symbol)
2134 {
2135 /* Don't do anything besides moving the value of the
2136 symbol from the GAS value-field to the BFD value-field. */
2137 symbol_get_bfdsym (symp)->value = S_GET_VALUE (symp);
2138 skip_next_symbol = FALSE;
2139 continue;
2140 }
2141
49309057 2142 if (symbol_mri_common_p (symp))
252b5132
RH
2143 {
2144 if (S_IS_EXTERNAL (symp))
2145 as_bad (_("%s: global symbols not supported in common sections"),
2146 S_GET_NAME (symp));
2147 symbol_remove (symp, &symbol_rootP, &symbol_lastP);
2148 continue;
2149 }
2150
2151 name = S_GET_NAME (symp);
2152 if (name)
2153 {
efaf0ba4
NC
2154 const char *name2 =
2155 decode_local_label_name ((char *) S_GET_NAME (symp));
252b5132
RH
2156 /* They only differ if `name' is a fb or dollar local
2157 label name. */
2158 if (name2 != name && ! S_IS_DEFINED (symp))
0e389e77 2159 as_bad (_("local label `%s' is not defined"), name2);
252b5132
RH
2160 }
2161
2162 /* Do it again, because adjust_reloc_syms might introduce
2163 more symbols. They'll probably only be section symbols,
2164 but they'll still need to have the values computed. */
6386f3a7 2165 resolve_symbol_value (symp);
252b5132
RH
2166
2167 /* Skip symbols which were equated to undefined or common
b4b24b79 2168 symbols. */
06e77878
AO
2169 if (symbol_equated_reloc_p (symp)
2170 || S_IS_WEAKREFR (symp))
252b5132 2171 {
91d6fa6a
NC
2172 const char *sname = S_GET_NAME (symp);
2173
60938e80 2174 if (S_IS_COMMON (symp)
91d6fa6a 2175 && !TC_FAKE_LABEL (sname)
76db0a2e 2176 && !S_IS_WEAKREFR (symp))
60938e80
L
2177 {
2178 expressionS *e = symbol_get_value_expression (symp);
91d6fa6a 2179
76db0a2e 2180 as_bad (_("`%s' can't be equated to common symbol `%s'"),
91d6fa6a 2181 sname, S_GET_NAME (e->X_add_symbol));
60938e80 2182 }
d0548f34
L
2183 if (S_GET_SEGMENT (symp) == reg_section)
2184 {
2185 /* Report error only if we know the symbol name. */
2186 if (S_GET_NAME (symp) != reg_section->name)
2187 as_bad (_("can't make global register symbol `%s'"),
91d6fa6a 2188 sname);
d0548f34 2189 }
252b5132
RH
2190 symbol_remove (symp, &symbol_rootP, &symbol_lastP);
2191 continue;
2192 }
2193
252b5132
RH
2194#ifdef obj_frob_symbol
2195 obj_frob_symbol (symp, punt);
2196#endif
2197#ifdef tc_frob_symbol
49309057 2198 if (! punt || symbol_used_in_reloc_p (symp))
252b5132
RH
2199 tc_frob_symbol (symp, punt);
2200#endif
2201
2202 /* If we don't want to keep this symbol, splice it out of
2203 the chain now. If EMIT_SECTION_SYMBOLS is 0, we never
2204 want section symbols. Otherwise, we skip local symbols
2205 and symbols that the frob_symbol macros told us to punt,
2206 but we keep such symbols if they are used in relocs. */
a161fe53
AM
2207 if (symp == abs_section_sym
2208 || (! EMIT_SECTION_SYMBOLS
2209 && symbol_section_p (symp))
e97b3f28 2210 /* Note that S_IS_EXTERNAL and S_IS_LOCAL are not always
252b5132
RH
2211 opposites. Sometimes the former checks flags and the
2212 latter examines the name... */
e97b3f28 2213 || (!S_IS_EXTERNAL (symp)
461b725f
AO
2214 && (punt || S_IS_LOCAL (symp) ||
2215 (S_IS_WEAKREFD (symp) && ! symbol_used_p (symp)))
49309057 2216 && ! symbol_used_in_reloc_p (symp)))
252b5132
RH
2217 {
2218 symbol_remove (symp, &symbol_rootP, &symbol_lastP);
efaf0ba4 2219
252b5132
RH
2220 /* After symbol_remove, symbol_next(symp) still returns
2221 the one that came after it in the chain. So we don't
2222 need to do any extra cleanup work here. */
252b5132
RH
2223 continue;
2224 }
2225
2226 /* Make sure we really got a value for the symbol. */
49309057 2227 if (! symbol_resolved_p (symp))
252b5132 2228 {
0e389e77 2229 as_bad (_("can't resolve value for symbol `%s'"),
252b5132 2230 S_GET_NAME (symp));
49309057 2231 symbol_mark_resolved (symp);
252b5132
RH
2232 }
2233
2234 /* Set the value into the BFD symbol. Up til now the value
2235 has only been kept in the gas symbolS struct. */
49309057 2236 symbol_get_bfdsym (symp)->value = S_GET_VALUE (symp);
aaac53f5
HPN
2237
2238 /* A warning construct is a warning symbol followed by the
2239 symbol warned about. Don't let anything object-format or
2240 target-specific muck with it; it's ready for output. */
2241 if (symbol_get_bfdsym (symp)->flags & BSF_WARNING)
2242 skip_next_symbol = TRUE;
252b5132
RH
2243 }
2244 }
2245
2246 PROGRESS (1);
2247
2248 /* Now do any format-specific adjustments to the symbol table, such
2249 as adding file symbols. */
2250#ifdef tc_adjust_symtab
2251 tc_adjust_symtab ();
2252#endif
2253#ifdef obj_adjust_symtab
2254 obj_adjust_symtab ();
2255#endif
2256
d0548f34
L
2257 /* Stop if there is an error. */
2258 if (had_errors ())
2259 return;
2260
252b5132
RH
2261 /* Now that all the sizes are known, and contents correct, we can
2262 start writing to the file. */
2ae08483 2263 set_symtab ();
252b5132
RH
2264
2265 /* If *_frob_file changes the symbol value at this point, it is
2266 responsible for moving the changed value into symp->bsym->value
2267 as well. Hopefully all symbol value changing can be done in
2268 *_frob_symbol. */
2269#ifdef tc_frob_file
2270 tc_frob_file ();
2271#endif
2272#ifdef obj_frob_file
2273 obj_frob_file ();
2274#endif
f3d2b04b
KT
2275#ifdef obj_coff_generate_pdata
2276 obj_coff_generate_pdata ();
2277#endif
252b5132
RH
2278 bfd_map_over_sections (stdoutput, write_relocs, (char *) 0);
2279
f1c2d4af 2280#ifdef tc_frob_file_after_relocs
252b5132
RH
2281 tc_frob_file_after_relocs ();
2282#endif
2283#ifdef obj_frob_file_after_relocs
2284 obj_frob_file_after_relocs ();
2285#endif
f1c2d4af 2286
b8871f35
L
2287#if defined OBJ_ELF || defined OBJ_MAYBE_ELF
2288 if (IS_ELF && flag_use_elf_stt_common)
2289 stdoutput->flags |= BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON;
2290#endif
2291
0acf065b
CC
2292 /* Once all relocations have been written, we can compress the
2293 contents of the debug sections. This needs to be done before
2294 we start writing any sections, because it will affect the file
2295 layout, which is fixed once we start writing contents. */
2296 if (flag_compress_debug)
8ecb73dd
L
2297 {
2298 if (flag_compress_debug == COMPRESS_DEBUG_GABI_ZLIB)
2299 stdoutput->flags |= BFD_COMPRESS | BFD_COMPRESS_GABI;
2300 else
2301 stdoutput->flags |= BFD_COMPRESS;
2302 bfd_map_over_sections (stdoutput, compress_debug, (char *) 0);
2303 }
0acf065b 2304
252b5132 2305 bfd_map_over_sections (stdoutput, write_contents, (char *) 0);
252b5132 2306}
252b5132
RH
2307
2308#ifdef TC_GENERIC_RELAX_TABLE
252b5132
RH
2309/* Relax a fragment by scanning TC_GENERIC_RELAX_TABLE. */
2310
2311long
d7342424 2312relax_frag (segT segment, fragS *fragP, long stretch)
252b5132
RH
2313{
2314 const relax_typeS *this_type;
2315 const relax_typeS *start_type;
2316 relax_substateT next_state;
2317 relax_substateT this_state;
685736be 2318 offsetT growth;
38686296
AM
2319 offsetT aim;
2320 addressT target;
2321 addressT address;
2322 symbolS *symbolP;
2323 const relax_typeS *table;
2324
2325 target = fragP->fr_offset;
2326 address = fragP->fr_address;
2327 table = TC_GENERIC_RELAX_TABLE;
252b5132
RH
2328 this_state = fragP->fr_subtype;
2329 start_type = this_type = table + this_state;
38686296 2330 symbolP = fragP->fr_symbol;
252b5132
RH
2331
2332 if (symbolP)
2333 {
c842b53a
ILT
2334 fragS *sym_frag;
2335
2336 sym_frag = symbol_get_frag (symbolP);
2337
252b5132 2338#ifndef DIFF_EXPR_OK
c842b53a 2339 know (sym_frag != NULL);
252b5132 2340#endif
a161fe53 2341 know (S_GET_SEGMENT (symbolP) != absolute_section
c842b53a 2342 || sym_frag == &zero_address_frag);
ac62c346 2343 target += S_GET_VALUE (symbolP);
252b5132 2344
e35a414d
AM
2345 /* If SYM_FRAG has yet to be reached on this pass, assume it
2346 will move by STRETCH just as we did, unless there is an
2347 alignment frag between here and SYM_FRAG. An alignment may
2348 well absorb any STRETCH, and we don't want to choose a larger
2349 branch insn by overestimating the needed reach of this
2350 branch. It isn't critical to calculate TARGET exactly; We
2351 know we'll be doing another pass if STRETCH is non-zero. */
252b5132 2352
c842b53a 2353 if (stretch != 0
38686296
AM
2354 && sym_frag->relax_marker != fragP->relax_marker
2355 && S_GET_SEGMENT (symbolP) == segment)
252b5132 2356 {
e35a414d
AM
2357 if (stretch < 0
2358 || sym_frag->region == fragP->region)
2359 target += stretch;
e5940dff
AM
2360 /* If we get here we know we have a forward branch. This
2361 relax pass may have stretched previous instructions so
2362 far that omitting STRETCH would make the branch
2363 negative. Don't allow this in case the negative reach is
2364 large enough to require a larger branch instruction. */
2365 else if (target < address)
2366 target = fragP->fr_next->fr_address + stretch;
252b5132
RH
2367 }
2368 }
2369
2370 aim = target - address - fragP->fr_fix;
2371#ifdef TC_PCREL_ADJUST
efaf0ba4
NC
2372 /* Currently only the ns32k family needs this. */
2373 aim += TC_PCREL_ADJUST (fragP);
efaf0ba4 2374#endif
59c871b4
BE
2375
2376#ifdef md_prepare_relax_scan
2377 /* Formerly called M68K_AIM_KLUDGE. */
252b5132
RH
2378 md_prepare_relax_scan (fragP, address, aim, this_state, this_type);
2379#endif
2380
2381 if (aim < 0)
2382 {
efaf0ba4 2383 /* Look backwards. */
252b5132
RH
2384 for (next_state = this_type->rlx_more; next_state;)
2385 if (aim >= this_type->rlx_backward)
2386 next_state = 0;
2387 else
2388 {
efaf0ba4 2389 /* Grow to next state. */
252b5132
RH
2390 this_state = next_state;
2391 this_type = table + this_state;
2392 next_state = this_type->rlx_more;
2393 }
2394 }
2395 else
2396 {
efaf0ba4 2397 /* Look forwards. */
252b5132
RH
2398 for (next_state = this_type->rlx_more; next_state;)
2399 if (aim <= this_type->rlx_forward)
2400 next_state = 0;
2401 else
2402 {
efaf0ba4 2403 /* Grow to next state. */
252b5132
RH
2404 this_state = next_state;
2405 this_type = table + this_state;
2406 next_state = this_type->rlx_more;
2407 }
2408 }
2409
2410 growth = this_type->rlx_length - start_type->rlx_length;
2411 if (growth != 0)
2412 fragP->fr_subtype = this_state;
2413 return growth;
2414}
2415
efaf0ba4 2416#endif /* defined (TC_GENERIC_RELAX_TABLE) */
252b5132
RH
2417
2418/* Relax_align. Advance location counter to next address that has 'alignment'
2419 lowest order bits all 0s, return size of adjustment made. */
2420static relax_addressT
ed9e98c2
AM
2421relax_align (relax_addressT address, /* Address now. */
2422 int alignment /* Alignment (binary). */)
252b5132
RH
2423{
2424 relax_addressT mask;
2425 relax_addressT new_address;
2426
65879393 2427 mask = ~((relax_addressT) ~0 << alignment);
252b5132
RH
2428 new_address = (address + mask) & (~mask);
2429#ifdef LINKER_RELAXING_SHRINKS_ONLY
2430 if (linkrelax)
2431 /* We must provide lots of padding, so the linker can discard it
2432 when needed. The linker will not add extra space, ever. */
2433 new_address += (1 << alignment);
2434#endif
2435 return (new_address - address);
2436}
2437
efaf0ba4
NC
2438/* Now we have a segment, not a crowd of sub-segments, we can make
2439 fr_address values.
58a77e41 2440
efaf0ba4 2441 Relax the frags.
58a77e41 2442
efaf0ba4
NC
2443 After this, all frags in this segment have addresses that are correct
2444 within the segment. Since segments live in different file addresses,
2445 these frag addresses may not be the same as final object-file
2446 addresses. */
2447
e46d99eb 2448int
32638454 2449relax_segment (struct frag *segment_frag_root, segT segment, int pass)
252b5132 2450{
4111faa5
NC
2451 unsigned long frag_count;
2452 struct frag *fragP;
2453 relax_addressT address;
e35a414d 2454 int region;
e46d99eb
AM
2455 int ret;
2456
efaf0ba4 2457 /* In case md_estimate_size_before_relax() wants to make fixSs. */
252b5132
RH
2458 subseg_change (segment, 0);
2459
2460 /* For each frag in segment: count and store (a 1st guess of)
2461 fr_address. */
2462 address = 0;
e35a414d 2463 region = 0;
4111faa5
NC
2464 for (frag_count = 0, fragP = segment_frag_root;
2465 fragP;
2466 fragP = fragP->fr_next, frag_count ++)
252b5132 2467 {
e35a414d 2468 fragP->region = region;
38686296 2469 fragP->relax_marker = 0;
252b5132
RH
2470 fragP->fr_address = address;
2471 address += fragP->fr_fix;
2472
2473 switch (fragP->fr_type)
2474 {
2475 case rs_fill:
2476 address += fragP->fr_offset * fragP->fr_var;
2477 break;
2478
2479 case rs_align:
2480 case rs_align_code:
0a9ef439 2481 case rs_align_test:
252b5132
RH
2482 {
2483 addressT offset = relax_align (address, (int) fragP->fr_offset);
2484
2485 if (fragP->fr_subtype != 0 && offset > fragP->fr_subtype)
2486 offset = 0;
2487
2488 if (offset % fragP->fr_var != 0)
2489 {
54d3cad9 2490 as_bad_where (fragP->fr_file, fragP->fr_line,
992a06ee
AM
2491 ngettext ("alignment padding (%lu byte) "
2492 "not a multiple of %ld",
2493 "alignment padding (%lu bytes) "
2494 "not a multiple of %ld",
2495 (unsigned long) offset),
54d3cad9 2496 (unsigned long) offset, (long) fragP->fr_var);
252b5132
RH
2497 offset -= (offset % fragP->fr_var);
2498 }
2499
2500 address += offset;
e35a414d 2501 region += 1;
252b5132
RH
2502 }
2503 break;
2504
2505 case rs_org:
252b5132 2506 /* Assume .org is nugatory. It will grow with 1st relax. */
e35a414d
AM
2507 region += 1;
2508 break;
2509
2510 case rs_space:
62a02d25 2511 case rs_space_nop:
252b5132
RH
2512 break;
2513
2514 case rs_machine_dependent:
e0890092
AM
2515 /* If fr_symbol is an expression, this call to
2516 resolve_symbol_value sets up the correct segment, which will
2517 likely be needed in md_estimate_size_before_relax. */
2518 if (fragP->fr_symbol)
2519 resolve_symbol_value (fragP->fr_symbol);
2520
252b5132
RH
2521 address += md_estimate_size_before_relax (fragP, segment);
2522 break;
2523
2524#ifndef WORKING_DOT_WORD
efaf0ba4 2525 /* Broken words don't concern us yet. */
252b5132
RH
2526 case rs_broken_word:
2527 break;
2528#endif
2529
2530 case rs_leb128:
efaf0ba4 2531 /* Initial guess is always 1; doing otherwise can result in
252b5132
RH
2532 stable solutions that are larger than the minimum. */
2533 address += fragP->fr_offset = 1;
2534 break;
2535
2536 case rs_cfa:
2537 address += eh_frame_estimate_size_before_relax (fragP);
2538 break;
2539
220e750f
RH
2540 case rs_dwarf2dbg:
2541 address += dwarf2dbg_estimate_size_before_relax (fragP);
2542 break;
2543
252b5132
RH
2544 default:
2545 BAD_CASE (fragP->fr_type);
2546 break;
efaf0ba4
NC
2547 }
2548 }
252b5132
RH
2549
2550 /* Do relax(). */
2551 {
4111faa5 2552 unsigned long max_iterations;
d1c5f158
AM
2553
2554 /* Cumulative address adjustment. */
2555 offsetT stretch;
2556
2557 /* Have we made any adjustment this pass? We can't just test
2558 stretch because one piece of code may have grown and another
2559 shrank. */
2560 int stretched;
2561
2562 /* Most horrible, but gcc may give us some exception data that
2563 is impossible to assemble, of the form
2564
2565 .align 4
2566 .byte 0, 0
2567 .uleb128 end - start
2568 start:
2569 .space 128*128 - 1
2570 .align 4
2571 end:
2572
2573 If the leb128 is two bytes in size, then end-start is 128*128,
2574 which requires a three byte leb128. If the leb128 is three
2575 bytes in size, then end-start is 128*128-1, which requires a
2576 two byte leb128. We work around this dilemma by inserting
2577 an extra 4 bytes of alignment just after the .align. This
2578 works because the data after the align is accessed relative to
2579 the end label.
2580
2581 This counter is used in a tiny state machine to detect
2582 whether a leb128 followed by an align is impossible to
2583 relax. */
2584 int rs_leb128_fudge = 0;
252b5132 2585
4111faa5
NC
2586 /* We want to prevent going into an infinite loop where one frag grows
2587 depending upon the location of a symbol which is in turn moved by
2588 the growing frag. eg:
2589
b4b24b79
AM
2590 foo = .
2591 .org foo+16
2592 foo = .
4111faa5 2593
b4b24b79 2594 So we dictate that this algorithm can be at most O2. */
4111faa5
NC
2595 max_iterations = frag_count * frag_count;
2596 /* Check for overflow. */
2597 if (max_iterations < frag_count)
2598 max_iterations = frag_count;
2599
32638454 2600 ret = 0;
252b5132
RH
2601 do
2602 {
e46d99eb
AM
2603 stretch = 0;
2604 stretched = 0;
58a77e41 2605
252b5132
RH
2606 for (fragP = segment_frag_root; fragP; fragP = fragP->fr_next)
2607 {
685736be 2608 offsetT growth = 0;
252b5132
RH
2609 addressT was_address;
2610 offsetT offset;
2611 symbolS *symbolP;
2612
38686296 2613 fragP->relax_marker ^= 1;
252b5132
RH
2614 was_address = fragP->fr_address;
2615 address = fragP->fr_address += stretch;
2616 symbolP = fragP->fr_symbol;
2617 offset = fragP->fr_offset;
2618
2619 switch (fragP->fr_type)
2620 {
efaf0ba4 2621 case rs_fill: /* .fill never relaxes. */
252b5132
RH
2622 growth = 0;
2623 break;
2624
2625#ifndef WORKING_DOT_WORD
2626 /* JF: This is RMS's idea. I do *NOT* want to be blamed
2627 for it I do not want to write it. I do not want to have
2628 anything to do with it. This is not the proper way to
2629 implement this misfeature. */
2630 case rs_broken_word:
2631 {
2632 struct broken_word *lie;
2633 struct broken_word *untruth;
2634
2635 /* Yes this is ugly (storing the broken_word pointer
2636 in the symbol slot). Still, this whole chunk of
2637 code is ugly, and I don't feel like doing anything
2638 about it. Think of it as stubbornness in action. */
2639 growth = 0;
2640 for (lie = (struct broken_word *) (fragP->fr_symbol);
2641 lie && lie->dispfrag == fragP;
2642 lie = lie->next_broken_word)
2643 {
2644
2645 if (lie->added)
2646 continue;
2647
ac62c346 2648 offset = (S_GET_VALUE (lie->add)
252b5132 2649 + lie->addnum
ac62c346 2650 - S_GET_VALUE (lie->sub));
252b5132
RH
2651 if (offset <= -32768 || offset >= 32767)
2652 {
2653 if (flag_warn_displacement)
2654 {
2655 char buf[50];
2656 sprint_value (buf, (addressT) lie->addnum);
54d3cad9
AM
2657 as_warn_where (fragP->fr_file, fragP->fr_line,
2658 _(".word %s-%s+%s didn't fit"),
2659 S_GET_NAME (lie->add),
2660 S_GET_NAME (lie->sub),
2661 buf);
252b5132 2662 }
252b5132
RH
2663 if (fragP->fr_subtype == 0)
2664 {
2665 fragP->fr_subtype++;
2666 growth += md_short_jump_size;
2667 }
187af7df
HPN
2668
2669 /* Redirect *all* words of this table with the same
2670 target, lest we have to handle the case where the
2671 same target but with a offset that fits on this
2672 round overflows at the next relaxation round. */
2673 for (untruth = (struct broken_word *) (fragP->fr_symbol);
252b5132
RH
2674 untruth && untruth->dispfrag == lie->dispfrag;
2675 untruth = untruth->next_broken_word)
49309057
ILT
2676 if ((symbol_get_frag (untruth->add)
2677 == symbol_get_frag (lie->add))
2678 && (S_GET_VALUE (untruth->add)
2679 == S_GET_VALUE (lie->add)))
252b5132
RH
2680 {
2681 untruth->added = 2;
2682 untruth->use_jump = lie;
2683 }
187af7df
HPN
2684
2685 lie->added = 1;
252b5132
RH
2686 growth += md_long_jump_size;
2687 }
2688 }
2689
2690 break;
efaf0ba4 2691 } /* case rs_broken_word */
252b5132
RH
2692#endif
2693 case rs_align:
2694 case rs_align_code:
0a9ef439 2695 case rs_align_test:
252b5132
RH
2696 {
2697 addressT oldoff, newoff;
2698
2699 oldoff = relax_align (was_address + fragP->fr_fix,
2700 (int) offset);
2701 newoff = relax_align (address + fragP->fr_fix,
2702 (int) offset);
2703
2704 if (fragP->fr_subtype != 0)
2705 {
2706 if (oldoff > fragP->fr_subtype)
2707 oldoff = 0;
2708 if (newoff > fragP->fr_subtype)
2709 newoff = 0;
2710 }
2711
2712 growth = newoff - oldoff;
d1c5f158
AM
2713
2714 /* If this align happens to follow a leb128 and
2715 we have determined that the leb128 is bouncing
2716 in size, then break the cycle by inserting an
2717 extra alignment. */
2718 if (growth < 0
2719 && (rs_leb128_fudge & 16) != 0
2720 && (rs_leb128_fudge & 15) >= 2)
2721 {
2722 segment_info_type *seginfo = seg_info (segment);
2723 struct obstack *ob = &seginfo->frchainP->frch_obstack;
2724 struct frag *newf;
2725
2726 newf = frag_alloc (ob);
2727 obstack_blank_fast (ob, fragP->fr_var);
2728 obstack_finish (ob);
2729 memcpy (newf, fragP, SIZEOF_STRUCT_FRAG);
2730 memcpy (newf->fr_literal,
2731 fragP->fr_literal + fragP->fr_fix,
2732 fragP->fr_var);
2733 newf->fr_type = rs_fill;
20f5cfbd 2734 newf->fr_address = address + fragP->fr_fix + newoff;
d1c5f158
AM
2735 newf->fr_fix = 0;
2736 newf->fr_offset = (((offsetT) 1 << fragP->fr_offset)
2737 / fragP->fr_var);
2738 if (newf->fr_offset * newf->fr_var
2739 != (offsetT) 1 << fragP->fr_offset)
2740 {
2741 newf->fr_offset = (offsetT) 1 << fragP->fr_offset;
2742 newf->fr_var = 1;
2743 }
20f5cfbd 2744 /* Include size of new frag in GROWTH. */
d1c5f158 2745 growth += newf->fr_offset * newf->fr_var;
20f5cfbd
AM
2746 /* Adjust the new frag address for the amount
2747 we'll add when we process the new frag. */
2748 newf->fr_address -= stretch + growth;
d1c5f158
AM
2749 newf->relax_marker ^= 1;
2750 fragP->fr_next = newf;
2751#ifdef DEBUG
2752 as_warn (_("padding added"));
2753#endif
2754 }
252b5132
RH
2755 }
2756 break;
2757
2758 case rs_org:
2759 {
e46d99eb
AM
2760 addressT target = offset;
2761 addressT after;
252b5132
RH
2762
2763 if (symbolP)
2764 {
b4b24b79
AM
2765 /* Convert from an actual address to an octet offset
2766 into the section. Here it is assumed that the
2767 section's VMA is zero, and can omit subtracting it
2768 from the symbol's value to get the address offset. */
2769 know (S_GET_SEGMENT (symbolP)->vma == 0);
6e917903 2770 target += S_GET_VALUE (symbolP) * OCTETS_PER_BYTE;
ac62c346 2771 }
252b5132
RH
2772
2773 know (fragP->fr_next);
6afe8e98 2774 after = fragP->fr_next->fr_address + stretch;
252b5132 2775 growth = target - after;
9875b365
MR
2776
2777 /* Growth may be negative, but variable part of frag
2778 cannot have fewer than 0 chars. That is, we can't
2779 .org backwards. */
2780 if (address + fragP->fr_fix > target)
252b5132 2781 {
32638454
AM
2782 growth = 0;
2783
2784 /* Don't error on first few frag relax passes.
2785 The symbol might be an expression involving
2786 symbol values from other sections. If those
2787 sections have not yet been processed their
2788 frags will all have zero addresses, so we
2789 will calculate incorrect values for them. The
2790 number of passes we allow before giving an
2791 error is somewhat arbitrary. It should be at
2792 least one, with larger values requiring
2793 increasingly contrived dependencies between
2794 frags to trigger a false error. */
2795 if (pass < 2)
2796 {
2797 /* Force another pass. */
2798 ret = 1;
2799 break;
2800 }
2801
14ad458a 2802 as_bad_where (fragP->fr_file, fragP->fr_line,
685736be 2803 _("attempt to move .org backwards"));
14ad458a
ILT
2804
2805 /* We've issued an error message. Change the
b4b24b79 2806 frag to avoid cascading errors. */
14ad458a
ILT
2807 fragP->fr_type = rs_align;
2808 fragP->fr_subtype = 0;
2809 fragP->fr_offset = 0;
6afe8e98 2810 fragP->fr_fix = after - address;
252b5132 2811 }
252b5132 2812 }
6afe8e98 2813 break;
252b5132
RH
2814
2815 case rs_space:
62a02d25 2816 case rs_space_nop:
54d3cad9 2817 growth = 0;
252b5132
RH
2818 if (symbolP)
2819 {
766c03c9
AM
2820 offsetT amount;
2821
2822 amount = S_GET_VALUE (symbolP);
9e40345d 2823 if (S_GET_SEGMENT (symbolP) != absolute_section
252b5132
RH
2824 || S_IS_COMMON (symbolP)
2825 || ! S_IS_DEFINED (symbolP))
252b5132 2826 {
54d3cad9
AM
2827 as_bad_where (fragP->fr_file, fragP->fr_line,
2828 _(".space specifies non-absolute value"));
2829 /* Prevent repeat of this error message. */
2830 fragP->fr_symbol = 0;
2831 }
2832 else if (amount < 0)
2833 {
32638454
AM
2834 /* Don't error on first few frag relax passes.
2835 See rs_org comment for a longer explanation. */
2836 if (pass < 2)
2837 {
2838 ret = 1;
2839 break;
2840 }
2841
54d3cad9 2842 as_warn_where (fragP->fr_file, fragP->fr_line,
8f065d3b 2843 _(".space, .nops or .fill with negative value, ignored"));
766c03c9 2844 fragP->fr_symbol = 0;
252b5132 2845 }
54d3cad9 2846 else
050be34e 2847 growth = (was_address + fragP->fr_fix + amount
54d3cad9 2848 - fragP->fr_next->fr_address);
252b5132 2849 }
252b5132
RH
2850 break;
2851
2852 case rs_machine_dependent:
2853#ifdef md_relax_frag
c842b53a 2854 growth = md_relax_frag (segment, fragP, stretch);
252b5132
RH
2855#else
2856#ifdef TC_GENERIC_RELAX_TABLE
2857 /* The default way to relax a frag is to look through
2858 TC_GENERIC_RELAX_TABLE. */
c842b53a 2859 growth = relax_frag (segment, fragP, stretch);
efaf0ba4 2860#endif /* TC_GENERIC_RELAX_TABLE */
252b5132
RH
2861#endif
2862 break;
2863
2864 case rs_leb128:
2865 {
2866 valueT value;
685736be 2867 offsetT size;
252b5132 2868
6386f3a7 2869 value = resolve_symbol_value (fragP->fr_symbol);
252b5132
RH
2870 size = sizeof_leb128 (value, fragP->fr_subtype);
2871 growth = size - fragP->fr_offset;
2872 fragP->fr_offset = size;
2873 }
2874 break;
2875
2876 case rs_cfa:
2877 growth = eh_frame_relax_frag (fragP);
2878 break;
2879
220e750f
RH
2880 case rs_dwarf2dbg:
2881 growth = dwarf2dbg_relax_frag (fragP);
2882 break;
2883
252b5132
RH
2884 default:
2885 BAD_CASE (fragP->fr_type);
2886 break;
2887 }
2888 if (growth)
2889 {
2890 stretch += growth;
e46d99eb 2891 stretched = 1;
d1c5f158
AM
2892 if (fragP->fr_type == rs_leb128)
2893 rs_leb128_fudge += 16;
2894 else if (fragP->fr_type == rs_align
2895 && (rs_leb128_fudge & 16) != 0
2896 && stretch == 0)
2897 rs_leb128_fudge += 16;
2898 else
2899 rs_leb128_fudge = 0;
252b5132 2900 }
4111faa5 2901 }
d1c5f158
AM
2902
2903 if (stretch == 0
2904 && (rs_leb128_fudge & 16) == 0
2905 && (rs_leb128_fudge & -16) != 0)
2906 rs_leb128_fudge += 1;
2907 else
2908 rs_leb128_fudge = 0;
252b5132 2909 }
4111faa5
NC
2910 /* Until nothing further to relax. */
2911 while (stretched && -- max_iterations);
2912
2913 if (stretched)
2914 as_fatal (_("Infinite loop encountered whilst attempting to compute the addresses of symbols in section %s"),
2915 segment_name (segment));
2916 }
252b5132 2917
e46d99eb
AM
2918 for (fragP = segment_frag_root; fragP; fragP = fragP->fr_next)
2919 if (fragP->last_fr_address != fragP->fr_address)
2920 {
2921 fragP->last_fr_address = fragP->fr_address;
2922 ret = 1;
2923 }
2924 return ret;
efaf0ba4 2925}
252b5132 2926
252b5132 2927void
d7342424 2928number_to_chars_bigendian (char *buf, valueT val, int n)
252b5132 2929{
937149dd 2930 if (n <= 0)
252b5132
RH
2931 abort ();
2932 while (n--)
2933 {
2934 buf[n] = val & 0xff;
2935 val >>= 8;
2936 }
2937}
2938
2939void
d7342424 2940number_to_chars_littleendian (char *buf, valueT val, int n)
252b5132 2941{
937149dd 2942 if (n <= 0)
252b5132
RH
2943 abort ();
2944 while (n--)
2945 {
2946 *buf++ = val & 0xff;
2947 val >>= 8;
2948 }
2949}
2950
2951void
d7342424 2952write_print_statistics (FILE *file)
252b5132 2953{
6d4d30bb 2954 fprintf (file, "fixups: %d\n", n_fixups);
252b5132
RH
2955}
2956
efaf0ba4 2957/* For debugging. */
252b5132
RH
2958extern int indent_level;
2959
2960void
d7342424 2961print_fixup (fixS *fixp)
252b5132
RH
2962{
2963 indent_level = 1;
d2df793a
NC
2964 fprintf (stderr, "fix ");
2965 fprintf_vma (stderr, (bfd_vma)((bfd_hostptr_t) fixp));
2966 fprintf (stderr, " %s:%d",fixp->fx_file, fixp->fx_line);
252b5132
RH
2967 if (fixp->fx_pcrel)
2968 fprintf (stderr, " pcrel");
2969 if (fixp->fx_pcrel_adjust)
2970 fprintf (stderr, " pcrel_adjust=%d", fixp->fx_pcrel_adjust);
2971 if (fixp->fx_im_disp)
2972 {
2973#ifdef TC_NS32K
2974 fprintf (stderr, " im_disp=%d", fixp->fx_im_disp);
2975#else
2976 fprintf (stderr, " im_disp");
2977#endif
2978 }
2979 if (fixp->fx_tcbit)
2980 fprintf (stderr, " tcbit");
2981 if (fixp->fx_done)
2982 fprintf (stderr, " done");
d2df793a
NC
2983 fprintf (stderr, "\n size=%d frag=", fixp->fx_size);
2984 fprintf_vma (stderr, (bfd_vma) ((bfd_hostptr_t) fixp->fx_frag));
2985 fprintf (stderr, " where=%ld offset=%lx addnumber=%lx",
2986 (long) fixp->fx_where,
0af1713e
AM
2987 (unsigned long) fixp->fx_offset,
2988 (unsigned long) fixp->fx_addnumber);
252b5132
RH
2989 fprintf (stderr, "\n %s (%d)", bfd_get_reloc_code_name (fixp->fx_r_type),
2990 fixp->fx_r_type);
252b5132
RH
2991 if (fixp->fx_addsy)
2992 {
2993 fprintf (stderr, "\n +<");
2994 print_symbol_value_1 (stderr, fixp->fx_addsy);
2995 fprintf (stderr, ">");
2996 }
2997 if (fixp->fx_subsy)
2998 {
2999 fprintf (stderr, "\n -<");
3000 print_symbol_value_1 (stderr, fixp->fx_subsy);
3001 fprintf (stderr, ">");
3002 }
3003 fprintf (stderr, "\n");
3004#ifdef TC_FIX_DATA_PRINT
3005 TC_FIX_DATA_PRINT (stderr, fixp);
3006#endif
3007}
This page took 1.559503 seconds and 4 git commands to generate.