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