1 /* write.c - emit .o file
2 Copyright (C) 1986-2016 Free Software Foundation, Inc.
4 This file is part of GAS, the GNU Assembler.
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)
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.
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
21 /* This thing should be set up to do byteordering correctly. But... */
26 #include "output-file.h"
27 #include "dwarf2dbg.h"
28 #include "compress-debug.h"
30 #ifndef TC_FORCE_RELOCATION
31 #define TC_FORCE_RELOCATION(FIX) \
32 (generic_force_reloc (FIX))
35 #ifndef TC_FORCE_RELOCATION_ABS
36 #define TC_FORCE_RELOCATION_ABS(FIX) \
37 (TC_FORCE_RELOCATION (FIX))
40 #ifndef TC_FORCE_RELOCATION_LOCAL
41 #define TC_FORCE_RELOCATION_LOCAL(FIX) \
43 || TC_FORCE_RELOCATION (FIX))
46 #ifndef TC_FORCE_RELOCATION_SUB_SAME
47 #define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) \
51 #ifndef md_register_arithmetic
52 # define md_register_arithmetic 1
55 #ifndef TC_FORCE_RELOCATION_SUB_ABS
56 #define TC_FORCE_RELOCATION_SUB_ABS(FIX, SEG) \
57 (!md_register_arithmetic && (SEG) == reg_section)
60 #ifndef TC_FORCE_RELOCATION_SUB_LOCAL
62 #define TC_FORCE_RELOCATION_SUB_LOCAL(FIX, SEG) \
63 (!md_register_arithmetic && (SEG) == reg_section)
65 #define TC_FORCE_RELOCATION_SUB_LOCAL(FIX, SEG) 1
69 #ifndef TC_VALIDATE_FIX_SUB
70 #ifdef UNDEFINED_DIFFERENCE_OK
71 /* The PA needs this for PIC code generation. */
72 #define TC_VALIDATE_FIX_SUB(FIX, SEG) \
73 (md_register_arithmetic || (SEG) != reg_section)
75 #define TC_VALIDATE_FIX_SUB(FIX, SEG) \
76 ((md_register_arithmetic || (SEG) != reg_section) \
77 && ((FIX)->fx_r_type == BFD_RELOC_GPREL32 \
78 || (FIX)->fx_r_type == BFD_RELOC_GPREL16))
82 #ifndef TC_LINKRELAX_FIXUP
83 #define TC_LINKRELAX_FIXUP(SEG) 1
86 #ifndef MD_APPLY_SYM_VALUE
87 #define MD_APPLY_SYM_VALUE(FIX) 1
90 #ifndef TC_FINALIZE_SYMS_BEFORE_SIZE_SEG
91 #define TC_FINALIZE_SYMS_BEFORE_SIZE_SEG 1
94 #ifndef MD_PCREL_FROM_SECTION
95 #define MD_PCREL_FROM_SECTION(FIX, SEC) md_pcrel_from (FIX)
99 #define TC_FAKE_LABEL(NAME) (strcmp ((NAME), FAKE_LABEL_NAME) == 0)
102 /* Positive values of TC_FX_SIZE_SLACK allow a target to define
103 fixups that far past the end of a frag. Having such fixups
104 is of course most most likely a bug in setting fx_size correctly.
105 A negative value disables the fixup check entirely, which is
106 appropriate for something like the Renesas / SuperH SH_COUNT
108 #ifndef TC_FX_SIZE_SLACK
109 #define TC_FX_SIZE_SLACK(FIX) 0
112 /* Used to control final evaluation of expressions. */
113 int finalize_syms
= 0;
115 int symbol_table_frozen
;
117 symbolS
*abs_section_sym
;
119 /* Remember the value of dot when parsing expressions. */
122 /* The frag that dot_value is based from. */
125 /* Relocs generated by ".reloc" pseudo. */
126 struct reloc_list
* reloc_list
;
128 void print_fixup (fixS
*);
130 /* We generally attach relocs to frag chains. However, after we have
131 chained these all together into a segment, any relocs we add after
132 that must be attached to a segment. This will include relocs added
133 in md_estimate_size_for_relax, for example. */
134 static int frags_chained
= 0;
138 #define RELOC_ENUM enum bfd_reloc_code_real
140 /* Create a fixS in obstack 'notes'. */
143 fix_new_internal (fragS
*frag
, /* Which frag? */
144 int where
, /* Where in that frag? */
145 int size
, /* 1, 2, or 4 usually. */
146 symbolS
*add_symbol
, /* X_add_symbol. */
147 symbolS
*sub_symbol
, /* X_op_symbol. */
148 offsetT offset
, /* X_add_number. */
149 int pcrel
, /* TRUE if PC-relative relocation. */
150 RELOC_ENUM r_type
/* Relocation type. */,
151 int at_beginning
) /* Add to the start of the list? */
157 fixP
= (fixS
*) obstack_alloc (¬es
, sizeof (fixS
));
159 fixP
->fx_frag
= frag
;
160 fixP
->fx_where
= where
;
161 fixP
->fx_size
= size
;
162 /* We've made fx_size a narrow field; check that it's wide enough. */
163 if (fixP
->fx_size
!= size
)
165 as_bad (_("field fx_size too small to hold %d"), size
);
168 fixP
->fx_addsy
= add_symbol
;
169 fixP
->fx_subsy
= sub_symbol
;
170 fixP
->fx_offset
= offset
;
171 fixP
->fx_dot_value
= dot_value
;
172 fixP
->fx_dot_frag
= dot_frag
;
173 fixP
->fx_pcrel
= pcrel
;
174 fixP
->fx_r_type
= r_type
;
175 fixP
->fx_im_disp
= 0;
176 fixP
->fx_pcrel_adjust
= 0;
177 fixP
->fx_bit_fixP
= 0;
178 fixP
->fx_addnumber
= 0;
182 fixP
->fx_no_overflow
= 0;
186 fixP
->fx_cgen
.insn
= NULL
;
187 fixP
->fx_cgen
.opinfo
= 0;
191 TC_INIT_FIX_DATA (fixP
);
194 fixP
->fx_file
= as_where (&fixP
->fx_line
);
198 fixS
**seg_fix_rootP
= (frags_chained
199 ? &seg_info (now_seg
)->fix_root
200 : &frchain_now
->fix_root
);
201 fixS
**seg_fix_tailP
= (frags_chained
202 ? &seg_info (now_seg
)->fix_tail
203 : &frchain_now
->fix_tail
);
207 fixP
->fx_next
= *seg_fix_rootP
;
208 *seg_fix_rootP
= fixP
;
209 if (fixP
->fx_next
== NULL
)
210 *seg_fix_tailP
= fixP
;
214 fixP
->fx_next
= NULL
;
216 (*seg_fix_tailP
)->fx_next
= fixP
;
218 *seg_fix_rootP
= fixP
;
219 *seg_fix_tailP
= fixP
;
226 /* Create a fixup relative to a symbol (plus a constant). */
229 fix_new (fragS
*frag
, /* Which frag? */
230 int where
, /* Where in that frag? */
231 int size
, /* 1, 2, or 4 usually. */
232 symbolS
*add_symbol
, /* X_add_symbol. */
233 offsetT offset
, /* X_add_number. */
234 int pcrel
, /* TRUE if PC-relative relocation. */
235 RELOC_ENUM r_type
/* Relocation type. */)
237 return fix_new_internal (frag
, where
, size
, add_symbol
,
238 (symbolS
*) NULL
, offset
, pcrel
, r_type
, FALSE
);
241 /* Create a fixup for an expression. Currently we only support fixups
242 for difference expressions. That is itself more than most object
243 file formats support anyhow. */
246 fix_new_exp (fragS
*frag
, /* Which frag? */
247 int where
, /* Where in that frag? */
248 int size
, /* 1, 2, or 4 usually. */
249 expressionS
*exp
, /* Expression. */
250 int pcrel
, /* TRUE if PC-relative relocation. */
251 RELOC_ENUM r_type
/* Relocation type. */)
263 as_bad (_("register value used as expression"));
267 /* This comes up when _GLOBAL_OFFSET_TABLE_+(.-L0) is read, if
268 the difference expression cannot immediately be reduced. */
270 symbolS
*stmp
= make_expr_symbol (exp
);
272 exp
->X_op
= O_symbol
;
273 exp
->X_op_symbol
= 0;
274 exp
->X_add_symbol
= stmp
;
275 exp
->X_add_number
= 0;
277 return fix_new_exp (frag
, where
, size
, exp
, pcrel
, r_type
);
281 add
= exp
->X_add_symbol
;
282 off
= exp
->X_add_number
;
283 r_type
= BFD_RELOC_RVA
;
287 sub
= exp
->X_add_symbol
;
288 off
= exp
->X_add_number
;
292 sub
= exp
->X_op_symbol
;
295 add
= exp
->X_add_symbol
;
298 off
= exp
->X_add_number
;
302 add
= make_expr_symbol (exp
);
306 return fix_new_internal (frag
, where
, size
, add
, sub
, off
, pcrel
,
310 /* Create a fixup at the beginning of FRAG. The arguments are the same
311 as for fix_new, except that WHERE is implicitly 0. */
314 fix_at_start (fragS
*frag
, int size
, symbolS
*add_symbol
,
315 offsetT offset
, int pcrel
, RELOC_ENUM r_type
)
317 return fix_new_internal (frag
, 0, size
, add_symbol
,
318 (symbolS
*) NULL
, offset
, pcrel
, r_type
, TRUE
);
321 /* Generic function to determine whether a fixup requires a relocation. */
323 generic_force_reloc (fixS
*fix
)
325 if (fix
->fx_r_type
== BFD_RELOC_VTABLE_INHERIT
326 || fix
->fx_r_type
== BFD_RELOC_VTABLE_ENTRY
)
329 if (fix
->fx_addsy
== NULL
)
332 return S_FORCE_RELOC (fix
->fx_addsy
, fix
->fx_subsy
== NULL
);
335 /* Append a string onto another string, bumping the pointer along. */
337 append (char **charPP
, char *fromP
, unsigned long length
)
339 /* Don't trust memcpy() of 0 chars. */
343 memcpy (*charPP
, fromP
, length
);
347 /* This routine records the largest alignment seen for each segment.
348 If the beginning of the segment is aligned on the worst-case
349 boundary, all of the other alignments within it will work. At
350 least one object format really uses this info. */
353 record_alignment (/* Segment to which alignment pertains. */
355 /* Alignment, as a power of 2 (e.g., 1 => 2-byte
356 boundary, 2 => 4-byte boundary, etc.) */
359 if (seg
== absolute_section
)
362 if (align
> bfd_get_section_alignment (stdoutput
, seg
))
363 bfd_set_section_alignment (stdoutput
, seg
, align
);
367 get_recorded_alignment (segT seg
)
369 if (seg
== absolute_section
)
372 return bfd_get_section_alignment (stdoutput
, seg
);
375 /* Reset the section indices after removing the gas created sections. */
378 renumber_sections (bfd
*abfd ATTRIBUTE_UNUSED
, asection
*sec
, void *countparg
)
380 int *countp
= (int *) countparg
;
382 sec
->index
= *countp
;
387 chain_frchains_together_1 (segT section
, struct frchain
*frchp
)
389 fragS dummy
, *prev_frag
= &dummy
;
390 fixS fix_dummy
, *prev_fix
= &fix_dummy
;
392 for (; frchp
; frchp
= frchp
->frch_next
)
394 prev_frag
->fr_next
= frchp
->frch_root
;
395 prev_frag
= frchp
->frch_last
;
396 gas_assert (prev_frag
->fr_type
!= 0);
397 if (frchp
->fix_root
!= (fixS
*) NULL
)
399 if (seg_info (section
)->fix_root
== (fixS
*) NULL
)
400 seg_info (section
)->fix_root
= frchp
->fix_root
;
401 prev_fix
->fx_next
= frchp
->fix_root
;
402 seg_info (section
)->fix_tail
= frchp
->fix_tail
;
403 prev_fix
= frchp
->fix_tail
;
406 gas_assert (prev_frag
!= &dummy
407 && prev_frag
->fr_type
!= 0);
408 prev_frag
->fr_next
= 0;
413 chain_frchains_together (bfd
*abfd ATTRIBUTE_UNUSED
,
415 void *xxx ATTRIBUTE_UNUSED
)
417 segment_info_type
*info
;
419 /* BFD may have introduced its own sections without using
420 subseg_new, so it is possible that seg_info is NULL. */
421 info
= seg_info (section
);
422 if (info
!= (segment_info_type
*) NULL
)
423 info
->frchainP
->frch_last
424 = chain_frchains_together_1 (section
, info
->frchainP
);
426 /* Now that we've chained the frags together, we must add new fixups
427 to the segment, not to the frag chain. */
432 cvt_frag_to_fill (segT sec ATTRIBUTE_UNUSED
, fragS
*fragP
)
434 switch (fragP
->fr_type
)
442 HANDLE_ALIGN (fragP
);
444 know (fragP
->fr_next
!= NULL
);
445 fragP
->fr_offset
= (fragP
->fr_next
->fr_address
447 - fragP
->fr_fix
) / fragP
->fr_var
;
448 if (fragP
->fr_offset
< 0)
450 as_bad_where (fragP
->fr_file
, fragP
->fr_line
,
451 _("attempt to .org/.space backwards? (%ld)"),
452 (long) fragP
->fr_offset
);
453 fragP
->fr_offset
= 0;
455 fragP
->fr_type
= rs_fill
;
463 valueT value
= S_GET_VALUE (fragP
->fr_symbol
);
466 size
= output_leb128 (fragP
->fr_literal
+ fragP
->fr_fix
, value
,
469 fragP
->fr_fix
+= size
;
470 fragP
->fr_type
= rs_fill
;
472 fragP
->fr_offset
= 0;
473 fragP
->fr_symbol
= NULL
;
478 eh_frame_convert_frag (fragP
);
482 dwarf2dbg_convert_frag (fragP
);
485 case rs_machine_dependent
:
486 md_convert_frag (stdoutput
, sec
, fragP
);
488 gas_assert (fragP
->fr_next
== NULL
489 || ((offsetT
) (fragP
->fr_next
->fr_address
- fragP
->fr_address
)
492 /* After md_convert_frag, we make the frag into a ".space 0".
493 md_convert_frag() should set up any fixSs and constants
498 #ifndef WORKING_DOT_WORD
501 struct broken_word
*lie
;
503 if (fragP
->fr_subtype
)
505 fragP
->fr_fix
+= md_short_jump_size
;
506 for (lie
= (struct broken_word
*) (fragP
->fr_symbol
);
507 lie
&& lie
->dispfrag
== fragP
;
508 lie
= lie
->next_broken_word
)
510 fragP
->fr_fix
+= md_long_jump_size
;
518 BAD_CASE (fragP
->fr_type
);
522 md_frag_check (fragP
);
526 struct relax_seg_info
533 relax_seg (bfd
*abfd ATTRIBUTE_UNUSED
, asection
*sec
, void *xxx
)
535 segment_info_type
*seginfo
= seg_info (sec
);
536 struct relax_seg_info
*info
= (struct relax_seg_info
*) xxx
;
538 if (seginfo
&& seginfo
->frchainP
539 && relax_segment (seginfo
->frchainP
->frch_root
, sec
, info
->pass
))
544 size_seg (bfd
*abfd
, asection
*sec
, void *xxx ATTRIBUTE_UNUSED
)
548 segment_info_type
*seginfo
;
550 valueT size
, newsize
;
552 subseg_change (sec
, 0);
554 seginfo
= seg_info (sec
);
555 if (seginfo
&& seginfo
->frchainP
)
557 for (fragp
= seginfo
->frchainP
->frch_root
; fragp
; fragp
= fragp
->fr_next
)
558 cvt_frag_to_fill (sec
, fragp
);
559 for (fragp
= seginfo
->frchainP
->frch_root
;
561 fragp
= fragp
->fr_next
)
562 /* Walk to last elt. */
564 size
= fragp
->fr_address
+ fragp
->fr_fix
;
569 flags
= bfd_get_section_flags (abfd
, sec
);
570 if (size
== 0 && bfd_get_section_size (sec
) != 0 &&
571 (flags
& SEC_HAS_CONTENTS
) != 0)
574 if (size
> 0 && ! seginfo
->bss
)
575 flags
|= SEC_HAS_CONTENTS
;
578 x
= bfd_set_section_flags (abfd
, sec
, flags
);
581 /* If permitted, allow the backend to pad out the section
582 to some alignment boundary. */
583 if (do_not_pad_sections_to_alignment
)
586 newsize
= md_section_align (sec
, size
);
587 x
= bfd_set_section_size (abfd
, sec
, newsize
);
590 /* If the size had to be rounded up, add some padding in the last
592 gas_assert (newsize
>= size
);
595 fragS
*last
= seginfo
->frchainP
->frch_last
;
596 fragp
= seginfo
->frchainP
->frch_root
;
597 while (fragp
->fr_next
!= last
)
598 fragp
= fragp
->fr_next
;
599 last
->fr_address
= size
;
600 if ((newsize
- size
) % fragp
->fr_var
== 0)
601 fragp
->fr_offset
+= (newsize
- size
) / fragp
->fr_var
;
603 /* If we hit this abort, it's likely due to subsegs_finish not
604 providing sufficient alignment on the last frag, and the
605 machine dependent code using alignment frags with fr_var
610 #ifdef tc_frob_section
611 tc_frob_section (sec
);
613 #ifdef obj_frob_section
614 obj_frob_section (sec
);
620 dump_section_relocs (bfd
*abfd ATTRIBUTE_UNUSED
, asection
*sec
, FILE *stream
)
622 segment_info_type
*seginfo
= seg_info (sec
);
623 fixS
*fixp
= seginfo
->fix_root
;
628 fprintf (stream
, "sec %s relocs:\n", sec
->name
);
631 symbolS
*s
= fixp
->fx_addsy
;
633 fprintf (stream
, " %08lx: type %d ", (unsigned long) fixp
,
634 (int) fixp
->fx_r_type
);
636 fprintf (stream
, "no sym\n");
639 print_symbol_value_1 (stream
, s
);
640 fprintf (stream
, "\n");
642 fixp
= fixp
->fx_next
;
646 #define dump_section_relocs(ABFD,SEC,STREAM) ((void) 0)
649 #ifndef EMIT_SECTION_SYMBOLS
650 #define EMIT_SECTION_SYMBOLS 1
653 /* Resolve U.A.OFFSET_SYM and U.A.SYM fields of RELOC_LIST entries,
654 and check for validity. Convert RELOC_LIST from using U.A fields
657 resolve_reloc_expr_symbols (void)
659 bfd_vma addr_mask
= 1;
660 struct reloc_list
*r
;
662 /* Avoid a shift by the width of type. */
663 addr_mask
<<= bfd_arch_bits_per_address (stdoutput
) - 1;
667 for (r
= reloc_list
; r
; r
= r
->next
)
669 reloc_howto_type
*howto
= r
->u
.a
.howto
;
672 bfd_vma offset
, addend
;
675 resolve_symbol_value (r
->u
.a
.offset_sym
);
676 symval
= symbol_get_value_expression (r
->u
.a
.offset_sym
);
680 if (symval
->X_op
== O_constant
)
681 sym
= r
->u
.a
.offset_sym
;
682 else if (symval
->X_op
== O_symbol
)
684 sym
= symval
->X_add_symbol
;
685 offset
= symval
->X_add_number
;
686 symval
= symbol_get_value_expression (symval
->X_add_symbol
);
689 || symval
->X_op
!= O_constant
690 || (sec
= S_GET_SEGMENT (sym
)) == NULL
691 || !SEG_NORMAL (sec
))
693 as_bad_where (r
->file
, r
->line
, _("invalid offset expression"));
697 offset
+= S_GET_VALUE (sym
);
700 addend
= r
->u
.a
.addend
;
701 if (r
->u
.a
.sym
!= NULL
)
703 resolve_symbol_value (r
->u
.a
.sym
);
704 symval
= symbol_get_value_expression (r
->u
.a
.sym
);
705 if (symval
->X_op
== O_constant
)
707 else if (symval
->X_op
== O_symbol
)
709 sym
= symval
->X_add_symbol
;
710 addend
+= symval
->X_add_number
;
711 symval
= symbol_get_value_expression (symval
->X_add_symbol
);
713 if (symval
->X_op
!= O_constant
)
715 as_bad_where (r
->file
, r
->line
, _("invalid reloc expression"));
718 else if (sym
!= NULL
)
720 /* Convert relocs against local symbols to refer to the
721 corresponding section symbol plus offset instead. Keep
722 PC-relative relocs of the REL variety intact though to
723 prevent the offset from overflowing the relocated field,
724 unless it has enough bits to cover the whole address
726 if (S_IS_LOCAL (sym
) && !symbol_section_p (sym
)
728 || (howto
->partial_inplace
729 && (!howto
->pc_relative
730 || howto
->src_mask
== addr_mask
))))
732 asection
*symsec
= S_GET_SEGMENT (sym
);
733 if (!(((symsec
->flags
& SEC_MERGE
) != 0
735 || (symsec
->flags
& SEC_THREAD_LOCAL
) != 0))
737 addend
+= S_GET_VALUE (sym
);
738 sym
= section_symbol (symsec
);
741 symbol_mark_used_in_reloc (sym
);
746 if (abs_section_sym
== NULL
)
747 abs_section_sym
= section_symbol (absolute_section
);
748 sym
= abs_section_sym
;
752 r
->u
.b
.s
= symbol_get_bfdsym (sym
);
753 r
->u
.b
.r
.sym_ptr_ptr
= &r
->u
.b
.s
;
754 r
->u
.b
.r
.address
= offset
;
755 r
->u
.b
.r
.addend
= addend
;
756 r
->u
.b
.r
.howto
= howto
;
760 /* This pass over fixups decides whether symbols can be replaced with
764 adjust_reloc_syms (bfd
*abfd ATTRIBUTE_UNUSED
,
766 void *xxx ATTRIBUTE_UNUSED
)
768 segment_info_type
*seginfo
= seg_info (sec
);
774 dump_section_relocs (abfd
, sec
, stderr
);
776 for (fixp
= seginfo
->fix_root
; fixp
; fixp
= fixp
->fx_next
)
780 else if (fixp
->fx_addsy
)
786 fprintf (stderr
, "\n\nadjusting fixup:\n");
790 sym
= fixp
->fx_addsy
;
792 /* All symbols should have already been resolved at this
793 point. It is possible to see unresolved expression
794 symbols, though, since they are not in the regular symbol
796 resolve_symbol_value (sym
);
798 if (fixp
->fx_subsy
!= NULL
)
799 resolve_symbol_value (fixp
->fx_subsy
);
801 /* If this symbol is equated to an undefined or common symbol,
802 convert the fixup to being against that symbol. */
803 while (symbol_equated_reloc_p (sym
)
804 || S_IS_WEAKREFR (sym
))
806 symbolS
*newsym
= symbol_get_value_expression (sym
)->X_add_symbol
;
809 fixp
->fx_offset
+= symbol_get_value_expression (sym
)->X_add_number
;
810 fixp
->fx_addsy
= newsym
;
814 if (symbol_mri_common_p (sym
))
816 fixp
->fx_offset
+= S_GET_VALUE (sym
);
817 fixp
->fx_addsy
= symbol_get_value_expression (sym
)->X_add_symbol
;
821 /* If the symbol is undefined, common, weak, or global (ELF
822 shared libs), we can't replace it with the section symbol. */
823 if (S_FORCE_RELOC (fixp
->fx_addsy
, 1))
826 /* Is there some other (target cpu dependent) reason we can't adjust
827 this one? (E.g. relocations involving function addresses on
829 #ifdef tc_fix_adjustable
830 if (! tc_fix_adjustable (fixp
))
834 /* Since we're reducing to section symbols, don't attempt to reduce
835 anything that's already using one. */
836 if (symbol_section_p (sym
))
839 symsec
= S_GET_SEGMENT (sym
);
843 if (bfd_is_abs_section (symsec
)
844 || symsec
== reg_section
)
846 /* The fixup_segment routine normally will not use this
847 symbol in a relocation. */
851 /* Don't try to reduce relocs which refer to non-local symbols
852 in .linkonce sections. It can lead to confusion when a
853 debugging section refers to a .linkonce section. I hope
854 this will always be correct. */
855 if (symsec
!= sec
&& ! S_IS_LOCAL (sym
))
857 if ((symsec
->flags
& SEC_LINK_ONCE
) != 0
859 /* The GNU toolchain uses an extension for ELF: a
860 section beginning with the magic string
861 .gnu.linkonce is a linkonce section. */
862 && strncmp (segment_name (symsec
), ".gnu.linkonce",
863 sizeof ".gnu.linkonce" - 1) == 0))
867 /* Never adjust a reloc against local symbol in a merge section
868 with non-zero addend. */
869 if ((symsec
->flags
& SEC_MERGE
) != 0
870 && (fixp
->fx_offset
!= 0 || fixp
->fx_subsy
!= NULL
))
873 /* Never adjust a reloc against TLS local symbol. */
874 if ((symsec
->flags
& SEC_THREAD_LOCAL
) != 0)
877 /* We refetch the segment when calling section_symbol, rather
878 than using symsec, because S_GET_VALUE may wind up changing
879 the section when it calls resolve_symbol_value. */
880 fixp
->fx_offset
+= S_GET_VALUE (sym
);
881 fixp
->fx_addsy
= section_symbol (S_GET_SEGMENT (sym
));
883 fprintf (stderr
, "\nadjusted fixup:\n");
888 dump_section_relocs (abfd
, sec
, stderr
);
893 Go through all the fixS's in a segment and see which ones can be
894 handled now. (These consist of fixS where we have since discovered
895 the value of a symbol, or the address of the frag involved.)
896 For each one, call md_apply_fix to put the fix into the frag data.
897 Ones that we couldn't completely handle here will be output later
898 by emit_relocations. */
901 fixup_segment (fixS
*fixP
, segT this_segment
)
905 segT add_symbol_segment
= absolute_section
;
907 if (fixP
!= NULL
&& abs_section_sym
== NULL
)
908 abs_section_sym
= section_symbol (absolute_section
);
910 /* If the linker is doing the relaxing, we must not do any fixups.
912 Well, strictly speaking that's not true -- we could do any that
913 are PC-relative and don't cross regions that could change size.
914 And for the i960 we might be able to turn callx/callj into bal
915 anyways in cases where we know the maximum displacement. */
916 if (linkrelax
&& TC_LINKRELAX_FIXUP (this_segment
))
918 for (; fixP
; fixP
= fixP
->fx_next
)
921 if (fixP
->fx_addsy
== NULL
)
923 /* There was no symbol required by this relocation.
924 However, BFD doesn't really handle relocations
925 without symbols well. So fake up a local symbol in
926 the absolute section. */
927 fixP
->fx_addsy
= abs_section_sym
;
929 symbol_mark_used_in_reloc (fixP
->fx_addsy
);
930 if (fixP
->fx_subsy
!= NULL
)
931 symbol_mark_used_in_reloc (fixP
->fx_subsy
);
936 for (; fixP
; fixP
= fixP
->fx_next
)
939 fprintf (stderr
, "\nprocessing fixup:\n");
943 fragP
= fixP
->fx_frag
;
945 #ifdef TC_VALIDATE_FIX
946 TC_VALIDATE_FIX (fixP
, this_segment
, skip
);
948 add_number
= fixP
->fx_offset
;
950 if (fixP
->fx_addsy
!= NULL
)
951 add_symbol_segment
= S_GET_SEGMENT (fixP
->fx_addsy
);
953 if (fixP
->fx_subsy
!= NULL
)
955 segT sub_symbol_segment
;
956 resolve_symbol_value (fixP
->fx_subsy
);
957 sub_symbol_segment
= S_GET_SEGMENT (fixP
->fx_subsy
);
958 if (fixP
->fx_addsy
!= NULL
959 && sub_symbol_segment
== add_symbol_segment
960 && !S_FORCE_RELOC (fixP
->fx_addsy
, 0)
961 && !S_FORCE_RELOC (fixP
->fx_subsy
, 0)
962 && !TC_FORCE_RELOCATION_SUB_SAME (fixP
, add_symbol_segment
))
964 add_number
+= S_GET_VALUE (fixP
->fx_addsy
);
965 add_number
-= S_GET_VALUE (fixP
->fx_subsy
);
966 fixP
->fx_offset
= add_number
;
967 fixP
->fx_addsy
= NULL
;
968 fixP
->fx_subsy
= NULL
;
970 /* See the comment below about 68k weirdness. */
974 else if (sub_symbol_segment
== absolute_section
975 && !S_FORCE_RELOC (fixP
->fx_subsy
, 0)
976 && !TC_FORCE_RELOCATION_SUB_ABS (fixP
, add_symbol_segment
))
978 add_number
-= S_GET_VALUE (fixP
->fx_subsy
);
979 fixP
->fx_offset
= add_number
;
980 fixP
->fx_subsy
= NULL
;
982 else if (sub_symbol_segment
== this_segment
983 && !S_FORCE_RELOC (fixP
->fx_subsy
, 0)
984 && !TC_FORCE_RELOCATION_SUB_LOCAL (fixP
, add_symbol_segment
))
986 add_number
-= S_GET_VALUE (fixP
->fx_subsy
);
987 fixP
->fx_offset
= (add_number
+ fixP
->fx_dot_value
988 + fixP
->fx_dot_frag
->fr_address
);
990 /* Make it pc-relative. If the back-end code has not
991 selected a pc-relative reloc, cancel the adjustment
992 we do later on all pc-relative relocs. */
995 /* Do this for m68k even if it's already described
996 as pc-relative. On the m68k, an operand of
997 "pc@(foo-.-2)" should address "foo" in a
1002 add_number
+= MD_PCREL_FROM_SECTION (fixP
, this_segment
);
1003 fixP
->fx_subsy
= NULL
;
1006 else if (!TC_VALIDATE_FIX_SUB (fixP
, add_symbol_segment
))
1008 if (!md_register_arithmetic
1009 && (add_symbol_segment
== reg_section
1010 || sub_symbol_segment
== reg_section
))
1011 as_bad_where (fixP
->fx_file
, fixP
->fx_line
,
1012 _("register value used as expression"));
1014 as_bad_where (fixP
->fx_file
, fixP
->fx_line
,
1015 _("can't resolve `%s' {%s section} - `%s' {%s section}"),
1016 fixP
->fx_addsy
? S_GET_NAME (fixP
->fx_addsy
) : "0",
1017 segment_name (add_symbol_segment
),
1018 S_GET_NAME (fixP
->fx_subsy
),
1019 segment_name (sub_symbol_segment
));
1021 else if (sub_symbol_segment
!= undefined_section
1022 && ! bfd_is_com_section (sub_symbol_segment
)
1023 && MD_APPLY_SYM_VALUE (fixP
))
1024 add_number
-= S_GET_VALUE (fixP
->fx_subsy
);
1029 if (add_symbol_segment
== this_segment
1030 && !S_FORCE_RELOC (fixP
->fx_addsy
, 0)
1031 && !TC_FORCE_RELOCATION_LOCAL (fixP
))
1033 /* This fixup was made when the symbol's segment was
1034 SEG_UNKNOWN, but it is now in the local segment.
1035 So we know how to do the address without relocation. */
1036 add_number
+= S_GET_VALUE (fixP
->fx_addsy
);
1037 fixP
->fx_offset
= add_number
;
1039 add_number
-= MD_PCREL_FROM_SECTION (fixP
, this_segment
);
1040 fixP
->fx_addsy
= NULL
;
1043 else if (add_symbol_segment
== absolute_section
1044 && !S_FORCE_RELOC (fixP
->fx_addsy
, 0)
1045 && !TC_FORCE_RELOCATION_ABS (fixP
))
1047 add_number
+= S_GET_VALUE (fixP
->fx_addsy
);
1048 fixP
->fx_offset
= add_number
;
1049 fixP
->fx_addsy
= NULL
;
1051 else if (add_symbol_segment
!= undefined_section
1052 && ! bfd_is_com_section (add_symbol_segment
)
1053 && MD_APPLY_SYM_VALUE (fixP
))
1054 add_number
+= S_GET_VALUE (fixP
->fx_addsy
);
1059 add_number
-= MD_PCREL_FROM_SECTION (fixP
, this_segment
);
1060 if (!fixP
->fx_done
&& fixP
->fx_addsy
== NULL
)
1062 /* There was no symbol required by this relocation.
1063 However, BFD doesn't really handle relocations
1064 without symbols well. So fake up a local symbol in
1065 the absolute section. */
1066 fixP
->fx_addsy
= abs_section_sym
;
1071 md_apply_fix (fixP
, &add_number
, this_segment
);
1075 if (fixP
->fx_addsy
== NULL
)
1076 fixP
->fx_addsy
= abs_section_sym
;
1077 symbol_mark_used_in_reloc (fixP
->fx_addsy
);
1078 if (fixP
->fx_subsy
!= NULL
)
1079 symbol_mark_used_in_reloc (fixP
->fx_subsy
);
1082 if (!fixP
->fx_bit_fixP
&& !fixP
->fx_no_overflow
&& fixP
->fx_size
!= 0)
1084 if (fixP
->fx_size
< sizeof (valueT
))
1089 mask
--; /* Set all bits to one. */
1090 mask
<<= fixP
->fx_size
* 8 - (fixP
->fx_signed
? 1 : 0);
1091 if ((add_number
& mask
) != 0 && (add_number
& mask
) != mask
)
1093 char buf
[50], buf2
[50];
1094 sprint_value (buf
, fragP
->fr_address
+ fixP
->fx_where
);
1095 if (add_number
> 1000)
1096 sprint_value (buf2
, add_number
);
1098 sprintf (buf2
, "%ld", (long) add_number
);
1099 as_bad_where (fixP
->fx_file
, fixP
->fx_line
,
1100 _("value of %s too large for field of %d bytes at %s"),
1101 buf2
, fixP
->fx_size
, buf
);
1102 } /* Generic error checking. */
1104 #ifdef WARN_SIGNED_OVERFLOW_WORD
1105 /* Warn if a .word value is too large when treated as a signed
1106 number. We already know it is not too negative. This is to
1107 catch over-large switches generated by gcc on the 68k. */
1108 if (!flag_signed_overflow_ok
1109 && fixP
->fx_size
== 2
1110 && add_number
> 0x7fff)
1111 as_bad_where (fixP
->fx_file
, fixP
->fx_line
,
1112 _("signed .word overflow; switch may be too large; %ld at 0x%lx"),
1114 (long) (fragP
->fr_address
+ fixP
->fx_where
));
1116 } /* Not a bit fix. */
1118 #ifdef TC_VALIDATE_FIX
1119 skip
: ATTRIBUTE_UNUSED_LABEL
1123 fprintf (stderr
, "result:\n");
1126 } /* For each fixS in this segment. */
1130 fix_segment (bfd
*abfd ATTRIBUTE_UNUSED
,
1132 void *xxx ATTRIBUTE_UNUSED
)
1134 segment_info_type
*seginfo
= seg_info (sec
);
1136 fixup_segment (seginfo
->fix_root
, sec
);
1140 install_reloc (asection
*sec
, arelent
*reloc
, fragS
*fragp
,
1141 const char *file
, unsigned int line
)
1144 bfd_reloc_status_type s
;
1147 if (reloc
->sym_ptr_ptr
!= NULL
1148 && (sym
= *reloc
->sym_ptr_ptr
) != NULL
1149 && (sym
->flags
& BSF_KEEP
) == 0
1150 && ((sym
->flags
& BSF_SECTION_SYM
) == 0
1151 || (EMIT_SECTION_SYMBOLS
1152 && !bfd_is_abs_section (sym
->section
))))
1153 as_bad_where (file
, line
, _("redefined symbol cannot be used on reloc"));
1155 s
= bfd_install_relocation (stdoutput
, reloc
,
1156 fragp
->fr_literal
, fragp
->fr_address
,
1162 case bfd_reloc_overflow
:
1163 as_bad_where (file
, line
, _("relocation overflow"));
1165 case bfd_reloc_outofrange
:
1166 as_bad_where (file
, line
, _("relocation out of range"));
1169 as_fatal (_("%s:%u: bad return from bfd_install_relocation: %x"),
1175 get_frag_for_reloc (fragS
*last_frag
,
1176 const segment_info_type
*seginfo
,
1177 const struct reloc_list
*r
)
1181 for (f
= last_frag
; f
!= NULL
; f
= f
->fr_next
)
1182 if (f
->fr_address
<= r
->u
.b
.r
.address
1183 && r
->u
.b
.r
.address
< f
->fr_address
+ f
->fr_fix
)
1186 for (f
= seginfo
->frchainP
->frch_root
; f
!= NULL
; f
= f
->fr_next
)
1187 if (f
->fr_address
<= r
->u
.b
.r
.address
1188 && r
->u
.b
.r
.address
< f
->fr_address
+ f
->fr_fix
)
1191 for (f
= seginfo
->frchainP
->frch_root
; f
!= NULL
; f
= f
->fr_next
)
1192 if (f
->fr_address
<= r
->u
.b
.r
.address
1193 && r
->u
.b
.r
.address
<= f
->fr_address
+ f
->fr_fix
)
1196 as_bad_where (r
->file
, r
->line
,
1197 _("reloc not within (fixed part of) section"));
1202 write_relocs (bfd
*abfd
, asection
*sec
, void *xxx ATTRIBUTE_UNUSED
)
1204 segment_info_type
*seginfo
= seg_info (sec
);
1206 struct reloc_list
*my_reloc_list
, **rp
, *r
;
1211 /* If seginfo is NULL, we did not create this section; don't do
1212 anything with it. */
1213 if (seginfo
== NULL
)
1217 for (fixp
= seginfo
->fix_root
; fixp
; fixp
= fixp
->fx_next
)
1221 #ifdef RELOC_EXPANSION_POSSIBLE
1222 n
*= MAX_RELOC_EXPANSION
;
1225 /* Extract relocs for this section from reloc_list. */
1227 my_reloc_list
= NULL
;
1228 while ((r
= *rp
) != NULL
)
1230 if (r
->u
.b
.sec
== sec
)
1233 r
->next
= my_reloc_list
;
1241 relocs
= XCNEWVEC (arelent
*, n
);
1246 for (fixp
= seginfo
->fix_root
; fixp
!= (fixS
*) NULL
; fixp
= fixp
->fx_next
)
1251 #ifndef RELOC_EXPANSION_POSSIBLE
1260 fx_size
= fixp
->fx_size
;
1261 slack
= TC_FX_SIZE_SLACK (fixp
);
1263 fx_size
= fx_size
> slack
? fx_size
- slack
: 0;
1264 loc
= fixp
->fx_where
+ fx_size
;
1265 if (slack
>= 0 && loc
> fixp
->fx_frag
->fr_fix
)
1266 as_bad_where (fixp
->fx_file
, fixp
->fx_line
,
1267 _("internal error: fixup not contained within frag"));
1269 #ifndef RELOC_EXPANSION_POSSIBLE
1270 *reloc
= tc_gen_reloc (sec
, fixp
);
1272 reloc
= tc_gen_reloc (sec
, fixp
);
1277 while (r
!= NULL
&& r
->u
.b
.r
.address
< (*reloc
)->address
)
1279 fragS
*f
= get_frag_for_reloc (last_frag
, seginfo
, r
);
1283 relocs
[n
++] = &r
->u
.b
.r
;
1284 install_reloc (sec
, &r
->u
.b
.r
, f
, r
->file
, r
->line
);
1288 relocs
[n
++] = *reloc
;
1289 install_reloc (sec
, *reloc
, fixp
->fx_frag
,
1290 fixp
->fx_file
, fixp
->fx_line
);
1291 #ifndef RELOC_EXPANSION_POSSIBLE
1301 fragS
*f
= get_frag_for_reloc (last_frag
, seginfo
, r
);
1305 relocs
[n
++] = &r
->u
.b
.r
;
1306 install_reloc (sec
, &r
->u
.b
.r
, f
, r
->file
, r
->line
);
1313 unsigned int k
, j
, nsyms
;
1315 sympp
= bfd_get_outsymbols (stdoutput
);
1316 nsyms
= bfd_get_symcount (stdoutput
);
1317 for (k
= 0; k
< n
; k
++)
1318 if (((*relocs
[k
]->sym_ptr_ptr
)->flags
& BSF_SECTION_SYM
) == 0)
1320 for (j
= 0; j
< nsyms
; j
++)
1321 if (sympp
[j
] == *relocs
[k
]->sym_ptr_ptr
)
1331 flagword flags
= bfd_get_section_flags (abfd
, sec
);
1333 bfd_set_section_flags (abfd
, sec
, flags
);
1334 bfd_set_reloc (stdoutput
, sec
, relocs
, n
);
1337 #ifdef SET_SECTION_RELOCS
1338 SET_SECTION_RELOCS (sec
, relocs
, n
);
1345 fprintf (stderr
, "relocs for sec %s\n", sec
->name
);
1346 for (k
= 0; k
< n
; k
++)
1348 arelent
*rel
= relocs
[k
];
1349 asymbol
*s
= *rel
->sym_ptr_ptr
;
1350 fprintf (stderr
, " reloc %2d @%p off %4lx : sym %-10s addend %lx\n",
1351 k
, rel
, (unsigned long)rel
->address
, s
->name
,
1352 (unsigned long)rel
->addend
);
1359 compress_frag (struct z_stream_s
*strm
, const char *contents
, int in_size
,
1360 fragS
**last_newf
, struct obstack
*ob
)
1363 int total_out_size
= 0;
1364 fragS
*f
= *last_newf
;
1368 /* Call the compression routine repeatedly until it has finished
1369 processing the frag. */
1372 /* Reserve all the space available in the current chunk.
1373 If none is available, start a new frag. */
1374 avail_out
= obstack_room (ob
);
1377 obstack_finish (ob
);
1378 f
= frag_alloc (ob
);
1379 f
->fr_type
= rs_fill
;
1380 (*last_newf
)->fr_next
= f
;
1382 avail_out
= obstack_room (ob
);
1385 as_fatal (_("can't extend frag"));
1386 next_out
= obstack_next_free (ob
);
1387 obstack_blank_fast (ob
, avail_out
);
1388 out_size
= compress_data (strm
, &contents
, &in_size
,
1389 &next_out
, &avail_out
);
1393 f
->fr_fix
+= out_size
;
1394 total_out_size
+= out_size
;
1396 /* Return unused space. */
1398 obstack_blank_fast (ob
, -avail_out
);
1401 return total_out_size
;
1405 compress_debug (bfd
*abfd
, asection
*sec
, void *xxx ATTRIBUTE_UNUSED
)
1407 segment_info_type
*seginfo
= seg_info (sec
);
1411 struct obstack
*ob
= &seginfo
->frchainP
->frch_obstack
;
1412 bfd_size_type uncompressed_size
= (bfd_size_type
) sec
->size
;
1413 bfd_size_type compressed_size
;
1414 const char *section_name
;
1415 char *compressed_name
;
1417 struct z_stream_s
*strm
;
1419 flagword flags
= bfd_get_section_flags (abfd
, sec
);
1420 unsigned int header_size
, compression_header_size
;
1424 || (flags
& (SEC_ALLOC
| SEC_HAS_CONTENTS
)) == SEC_ALLOC
)
1427 section_name
= bfd_get_section_name (stdoutput
, sec
);
1428 if (strncmp (section_name
, ".debug_", 7) != 0)
1431 strm
= compress_init ();
1435 if (flag_compress_debug
== COMPRESS_DEBUG_GABI_ZLIB
)
1437 compression_header_size
1438 = bfd_get_compression_header_size (stdoutput
, NULL
);
1439 header_size
= compression_header_size
;
1443 compression_header_size
= 0;
1447 /* Create a new frag to contain the compression header. */
1448 first_newf
= frag_alloc (ob
);
1449 if (obstack_room (ob
) < header_size
)
1450 first_newf
= frag_alloc (ob
);
1451 if (obstack_room (ob
) < header_size
)
1452 as_fatal (_("can't extend frag %u chars"), header_size
);
1453 last_newf
= first_newf
;
1454 obstack_blank_fast (ob
, header_size
);
1455 last_newf
->fr_type
= rs_fill
;
1456 last_newf
->fr_fix
= header_size
;
1457 header
= last_newf
->fr_literal
;
1458 compressed_size
= header_size
;
1460 /* Stream the frags through the compression engine, adding new frags
1461 as necessary to accomodate the compressed output. */
1462 for (f
= seginfo
->frchainP
->frch_root
;
1471 gas_assert (f
->fr_type
== rs_fill
);
1474 out_size
= compress_frag (strm
, f
->fr_literal
, f
->fr_fix
,
1478 compressed_size
+= out_size
;
1480 fill_literal
= f
->fr_literal
+ f
->fr_fix
;
1481 fill_size
= f
->fr_var
;
1482 count
= f
->fr_offset
;
1483 gas_assert (count
>= 0);
1484 if (fill_size
&& count
)
1488 out_size
= compress_frag (strm
, fill_literal
, (int) fill_size
,
1492 compressed_size
+= out_size
;
1497 /* Flush the compression state. */
1504 /* Reserve all the space available in the current chunk.
1505 If none is available, start a new frag. */
1506 avail_out
= obstack_room (ob
);
1511 obstack_finish (ob
);
1512 newf
= frag_alloc (ob
);
1513 newf
->fr_type
= rs_fill
;
1514 last_newf
->fr_next
= newf
;
1516 avail_out
= obstack_room (ob
);
1519 as_fatal (_("can't extend frag"));
1520 next_out
= obstack_next_free (ob
);
1521 obstack_blank_fast (ob
, avail_out
);
1522 x
= compress_finish (strm
, &next_out
, &avail_out
, &out_size
);
1526 last_newf
->fr_fix
+= out_size
;
1527 compressed_size
+= out_size
;
1529 /* Return unused space. */
1531 obstack_blank_fast (ob
, -avail_out
);
1537 /* PR binutils/18087: If compression didn't make the section smaller,
1538 just keep it uncompressed. */
1539 if (compressed_size
>= uncompressed_size
)
1542 /* Replace the uncompressed frag list with the compressed frag list. */
1543 seginfo
->frchainP
->frch_root
= first_newf
;
1544 seginfo
->frchainP
->frch_last
= last_newf
;
1546 /* Update the section size and its name. */
1547 bfd_update_compression_header (abfd
, (bfd_byte
*) header
, sec
);
1548 x
= bfd_set_section_size (abfd
, sec
, compressed_size
);
1550 if (!compression_header_size
)
1552 compressed_name
= concat (".z", section_name
+ 1, (char *) NULL
);
1553 bfd_section_name (stdoutput
, sec
) = compressed_name
;
1558 write_contents (bfd
*abfd ATTRIBUTE_UNUSED
,
1560 void *xxx ATTRIBUTE_UNUSED
)
1562 segment_info_type
*seginfo
= seg_info (sec
);
1563 addressT offset
= 0;
1566 /* Write out the frags. */
1568 || !(bfd_get_section_flags (abfd
, sec
) & SEC_HAS_CONTENTS
))
1571 for (f
= seginfo
->frchainP
->frch_root
;
1580 gas_assert (f
->fr_type
== rs_fill
);
1583 x
= bfd_set_section_contents (stdoutput
, sec
,
1584 f
->fr_literal
, (file_ptr
) offset
,
1585 (bfd_size_type
) f
->fr_fix
);
1587 as_fatal (_("can't write %ld bytes to section %s of %s because: '%s'"),
1588 (long) f
->fr_fix
, sec
->name
,
1589 stdoutput
->filename
,
1590 bfd_errmsg (bfd_get_error ()));
1591 offset
+= f
->fr_fix
;
1593 fill_literal
= f
->fr_literal
+ f
->fr_fix
;
1594 fill_size
= f
->fr_var
;
1595 count
= f
->fr_offset
;
1596 gas_assert (count
>= 0);
1597 if (fill_size
&& count
)
1600 if (fill_size
> sizeof (buf
))
1602 /* Do it the old way. Can this ever happen? */
1605 x
= bfd_set_section_contents (stdoutput
, sec
,
1608 (bfd_size_type
) fill_size
);
1610 as_fatal (_("can't fill %ld bytes in section %s of %s because '%s'"),
1611 (long) fill_size
, sec
->name
,
1612 stdoutput
->filename
,
1613 bfd_errmsg (bfd_get_error ()));
1614 offset
+= fill_size
;
1619 /* Build a buffer full of fill objects and output it as
1620 often as necessary. This saves on the overhead of
1621 potentially lots of bfd_set_section_contents calls. */
1625 n_per_buf
= sizeof (buf
);
1626 memset (buf
, *fill_literal
, n_per_buf
);
1631 n_per_buf
= sizeof (buf
) / fill_size
;
1632 for (i
= n_per_buf
, bufp
= buf
; i
; i
--, bufp
+= fill_size
)
1633 memcpy (bufp
, fill_literal
, fill_size
);
1635 for (; count
> 0; count
-= n_per_buf
)
1637 n_per_buf
= n_per_buf
> count
? count
: n_per_buf
;
1638 x
= bfd_set_section_contents
1639 (stdoutput
, sec
, buf
, (file_ptr
) offset
,
1640 (bfd_size_type
) n_per_buf
* fill_size
);
1642 as_fatal (_("cannot fill %ld bytes in section %s of %s because: '%s'"),
1643 (long)(n_per_buf
* fill_size
), sec
->name
,
1644 stdoutput
->filename
,
1645 bfd_errmsg (bfd_get_error ()));
1646 offset
+= n_per_buf
* fill_size
;
1654 merge_data_into_text (void)
1656 seg_info (text_section
)->frchainP
->frch_last
->fr_next
=
1657 seg_info (data_section
)->frchainP
->frch_root
;
1658 seg_info (text_section
)->frchainP
->frch_last
=
1659 seg_info (data_section
)->frchainP
->frch_last
;
1660 seg_info (data_section
)->frchainP
= 0;
1671 /* Count symbols. We can't rely on a count made by the loop in
1672 write_object_file, because *_frob_file may add a new symbol or
1675 for (symp
= symbol_rootP
; symp
; symp
= symbol_next (symp
))
1681 bfd_size_type amt
= (bfd_size_type
) nsyms
* sizeof (asymbol
*);
1683 asympp
= (asymbol
**) bfd_alloc (stdoutput
, amt
);
1684 symp
= symbol_rootP
;
1685 for (i
= 0; i
< nsyms
; i
++, symp
= symbol_next (symp
))
1687 asympp
[i
] = symbol_get_bfdsym (symp
);
1688 if (asympp
[i
]->flags
!= BSF_SECTION_SYM
1689 || !(bfd_is_const_section (asympp
[i
]->section
)
1690 && asympp
[i
]->section
->symbol
== asympp
[i
]))
1691 asympp
[i
]->flags
|= BSF_KEEP
;
1692 symbol_mark_written (symp
);
1697 result
= bfd_set_symtab (stdoutput
, asympp
, nsyms
);
1698 gas_assert (result
);
1699 symbol_table_frozen
= 1;
1702 /* Finish the subsegments. After every sub-segment, we fake an
1703 ".align ...". This conforms to BSD4.2 brain-damage. We then fake
1704 ".fill 0" because that is the kind of frag that requires least
1705 thought. ".align" frags like to have a following frag since that
1706 makes calculating their intended length trivial. */
1708 #ifndef SUB_SEGMENT_ALIGN
1710 /* The last subsegment gets an alignment corresponding to the alignment
1711 of the section. This allows proper nop-filling at the end of
1712 code-bearing sections. */
1713 #define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) \
1714 (!(FRCHAIN)->frch_next && subseg_text_p (SEG) \
1715 && !do_not_pad_sections_to_alignment \
1716 ? get_recorded_alignment (SEG) \
1719 #define SUB_SEGMENT_ALIGN(SEG, FRCHAIN) 0
1724 subsegs_finish_section (asection
*s
)
1726 struct frchain
*frchainP
;
1727 segment_info_type
*seginfo
= seg_info (s
);
1731 for (frchainP
= seginfo
->frchainP
;
1733 frchainP
= frchainP
->frch_next
)
1737 subseg_set (s
, frchainP
->frch_subseg
);
1739 /* This now gets called even if we had errors. In that case,
1740 any alignment is meaningless, and, moreover, will look weird
1741 if we are generating a listing. */
1743 do_not_pad_sections_to_alignment
= 1;
1745 alignment
= SUB_SEGMENT_ALIGN (now_seg
, frchainP
);
1746 if ((bfd_get_section_flags (now_seg
->owner
, now_seg
) & SEC_MERGE
)
1747 && now_seg
->entsize
)
1749 unsigned int entsize
= now_seg
->entsize
;
1752 while ((entsize
& 1) == 0)
1758 if (entalign
> alignment
)
1759 alignment
= entalign
;
1762 if (subseg_text_p (now_seg
))
1763 frag_align_code (alignment
, 0);
1765 frag_align (alignment
, 0, 0);
1767 /* frag_align will have left a new frag.
1768 Use this last frag for an empty ".fill".
1770 For this segment ...
1771 Create a last frag. Do not leave a "being filled in frag". */
1772 frag_wane (frag_now
);
1773 frag_now
->fr_fix
= 0;
1774 know (frag_now
->fr_next
== NULL
);
1779 subsegs_finish (void)
1783 for (s
= stdoutput
->sections
; s
; s
= s
->next
)
1784 subsegs_finish_section (s
);
1789 create_obj_attrs_section (void)
1796 size
= bfd_elf_obj_attr_size (stdoutput
);
1799 name
= get_elf_backend_data (stdoutput
)->obj_attrs_section
;
1801 name
= ".gnu.attributes";
1802 s
= subseg_new (name
, 0);
1803 elf_section_type (s
)
1804 = get_elf_backend_data (stdoutput
)->obj_attrs_section_type
;
1805 bfd_set_section_flags (stdoutput
, s
, SEC_READONLY
| SEC_DATA
);
1807 p
= frag_more (size
);
1808 bfd_elf_set_obj_attr_contents (stdoutput
, (bfd_byte
*)p
, size
);
1810 subsegs_finish_section (s
);
1811 relax_segment (seg_info (s
)->frchainP
->frch_root
, s
, 0);
1812 size_seg (stdoutput
, s
, NULL
);
1817 /* Write the object file. */
1820 write_object_file (void)
1822 struct relax_seg_info rsi
;
1823 #ifndef WORKING_DOT_WORD
1824 fragS
*fragP
; /* Track along all frags. */
1829 #ifdef md_pre_output_hook
1833 #ifdef md_pre_relax_hook
1837 /* From now on, we don't care about sub-segments. Build one frag chain
1838 for each segment. Linked thru fr_next. */
1840 /* Remove the sections created by gas for its own purposes. */
1844 bfd_section_list_remove (stdoutput
, reg_section
);
1845 bfd_section_list_remove (stdoutput
, expr_section
);
1846 stdoutput
->section_count
-= 2;
1848 bfd_map_over_sections (stdoutput
, renumber_sections
, &i
);
1851 bfd_map_over_sections (stdoutput
, chain_frchains_together
, (char *) 0);
1853 /* We have two segments. If user gave -R flag, then we must put the
1854 data frags into the text segment. Do this before relaxing so
1855 we know to take advantage of -R and make shorter addresses. */
1856 if (flag_readonly_data_in_text
)
1858 merge_data_into_text ();
1864 #ifndef WORKING_DOT_WORD
1865 /* We need to reset the markers in the broken word list and
1866 associated frags between calls to relax_segment (via
1867 relax_seg). Since the broken word list is global, we do it
1868 once per round, rather than locally in relax_segment for each
1870 struct broken_word
*brokp
;
1872 for (brokp
= broken_words
;
1873 brokp
!= (struct broken_word
*) NULL
;
1874 brokp
= brokp
->next_broken_word
)
1878 if (brokp
->dispfrag
!= (fragS
*) NULL
1879 && brokp
->dispfrag
->fr_type
== rs_broken_word
)
1880 brokp
->dispfrag
->fr_subtype
= 0;
1885 bfd_map_over_sections (stdoutput
, relax_seg
, &rsi
);
1891 /* Note - Most ports will use the default value of
1892 TC_FINALIZE_SYMS_BEFORE_SIZE_SEG, which 1. This will force
1893 local symbols to be resolved, removing their frag information.
1894 Some ports however, will not have finished relaxing all of
1895 their frags and will still need the local symbol frag
1896 information. These ports can set
1897 TC_FINALIZE_SYMS_BEFORE_SIZE_SEG to 0. */
1898 finalize_syms
= TC_FINALIZE_SYMS_BEFORE_SIZE_SEG
;
1900 bfd_map_over_sections (stdoutput
, size_seg
, (char *) 0);
1902 /* Relaxation has completed. Freeze all syms. */
1905 #ifdef md_post_relax_hook
1911 create_obj_attrs_section ();
1914 #ifndef WORKING_DOT_WORD
1916 struct broken_word
*lie
;
1917 struct broken_word
**prevP
;
1919 prevP
= &broken_words
;
1920 for (lie
= broken_words
; lie
; lie
= lie
->next_broken_word
)
1925 subseg_change (lie
->seg
, lie
->subseg
);
1926 exp
.X_op
= O_subtract
;
1927 exp
.X_add_symbol
= lie
->add
;
1928 exp
.X_op_symbol
= lie
->sub
;
1929 exp
.X_add_number
= lie
->addnum
;
1930 #ifdef TC_CONS_FIX_NEW
1931 TC_CONS_FIX_NEW (lie
->frag
,
1932 lie
->word_goes_here
- lie
->frag
->fr_literal
,
1933 2, &exp
, TC_PARSE_CONS_RETURN_NONE
);
1935 fix_new_exp (lie
->frag
,
1936 lie
->word_goes_here
- lie
->frag
->fr_literal
,
1937 2, &exp
, 0, BFD_RELOC_16
);
1939 *prevP
= lie
->next_broken_word
;
1942 prevP
= &(lie
->next_broken_word
);
1944 for (lie
= broken_words
; lie
;)
1946 struct broken_word
*untruth
;
1948 addressT table_addr
;
1949 addressT from_addr
, to_addr
;
1952 subseg_change (lie
->seg
, lie
->subseg
);
1953 fragP
= lie
->dispfrag
;
1955 /* Find out how many broken_words go here. */
1958 untruth
&& untruth
->dispfrag
== fragP
;
1959 untruth
= untruth
->next_broken_word
)
1960 if (untruth
->added
== 1)
1963 table_ptr
= lie
->dispfrag
->fr_opcode
;
1964 table_addr
= (lie
->dispfrag
->fr_address
1965 + (table_ptr
- lie
->dispfrag
->fr_literal
));
1966 /* Create the jump around the long jumps. This is a short
1967 jump from table_ptr+0 to table_ptr+n*long_jump_size. */
1968 from_addr
= table_addr
;
1969 to_addr
= table_addr
+ md_short_jump_size
+ n
* md_long_jump_size
;
1970 md_create_short_jump (table_ptr
, from_addr
, to_addr
, lie
->dispfrag
,
1972 table_ptr
+= md_short_jump_size
;
1973 table_addr
+= md_short_jump_size
;
1976 lie
&& lie
->dispfrag
== fragP
;
1977 m
++, lie
= lie
->next_broken_word
)
1979 if (lie
->added
== 2)
1981 /* Patch the jump table. */
1982 for (untruth
= (struct broken_word
*) (fragP
->fr_symbol
);
1983 untruth
&& untruth
->dispfrag
== fragP
;
1984 untruth
= untruth
->next_broken_word
)
1986 if (untruth
->use_jump
== lie
)
1988 /* This is the offset from ??? to table_ptr+0.
1989 The target is the same for all users of this
1990 md_long_jump, but the "sub" bases (and hence the
1991 offsets) may be different. */
1992 addressT to_word
= table_addr
- S_GET_VALUE (untruth
->sub
);
1993 #ifdef TC_CHECK_ADJUSTED_BROKEN_DOT_WORD
1994 TC_CHECK_ADJUSTED_BROKEN_DOT_WORD (to_word
, untruth
);
1996 md_number_to_chars (untruth
->word_goes_here
, to_word
, 2);
2000 /* Install the long jump. */
2001 /* This is a long jump from table_ptr+0 to the final target. */
2002 from_addr
= table_addr
;
2003 to_addr
= S_GET_VALUE (lie
->add
) + lie
->addnum
;
2004 md_create_long_jump (table_ptr
, from_addr
, to_addr
, lie
->dispfrag
,
2006 table_ptr
+= md_long_jump_size
;
2007 table_addr
+= md_long_jump_size
;
2011 #endif /* not WORKING_DOT_WORD */
2013 /* Resolve symbol values. This needs to be done before processing
2019 for (symp
= symbol_rootP
; symp
; symp
= symbol_next (symp
))
2020 resolve_symbol_value (symp
);
2022 resolve_local_symbol_values ();
2023 resolve_reloc_expr_symbols ();
2027 #ifdef tc_frob_file_before_adjust
2028 tc_frob_file_before_adjust ();
2030 #ifdef obj_frob_file_before_adjust
2031 obj_frob_file_before_adjust ();
2034 bfd_map_over_sections (stdoutput
, adjust_reloc_syms
, (char *) 0);
2036 #ifdef tc_frob_file_before_fix
2037 tc_frob_file_before_fix ();
2039 #ifdef obj_frob_file_before_fix
2040 obj_frob_file_before_fix ();
2043 bfd_map_over_sections (stdoutput
, fix_segment
, (char *) 0);
2045 /* Set up symbol table, and write it out. */
2049 bfd_boolean skip_next_symbol
= FALSE
;
2051 for (symp
= symbol_rootP
; symp
; symp
= symbol_next (symp
))
2056 if (skip_next_symbol
)
2058 /* Don't do anything besides moving the value of the
2059 symbol from the GAS value-field to the BFD value-field. */
2060 symbol_get_bfdsym (symp
)->value
= S_GET_VALUE (symp
);
2061 skip_next_symbol
= FALSE
;
2065 if (symbol_mri_common_p (symp
))
2067 if (S_IS_EXTERNAL (symp
))
2068 as_bad (_("%s: global symbols not supported in common sections"),
2070 symbol_remove (symp
, &symbol_rootP
, &symbol_lastP
);
2074 name
= S_GET_NAME (symp
);
2078 decode_local_label_name ((char *) S_GET_NAME (symp
));
2079 /* They only differ if `name' is a fb or dollar local
2081 if (name2
!= name
&& ! S_IS_DEFINED (symp
))
2082 as_bad (_("local label `%s' is not defined"), name2
);
2085 /* Do it again, because adjust_reloc_syms might introduce
2086 more symbols. They'll probably only be section symbols,
2087 but they'll still need to have the values computed. */
2088 resolve_symbol_value (symp
);
2090 /* Skip symbols which were equated to undefined or common
2092 if (symbol_equated_reloc_p (symp
)
2093 || S_IS_WEAKREFR (symp
))
2095 const char *sname
= S_GET_NAME (symp
);
2097 if (S_IS_COMMON (symp
)
2098 && !TC_FAKE_LABEL (sname
)
2099 && !S_IS_WEAKREFR (symp
)
2100 && (!S_IS_EXTERNAL (symp
) || S_IS_LOCAL (symp
)))
2102 expressionS
*e
= symbol_get_value_expression (symp
);
2104 as_bad (_("Local symbol `%s' can't be equated to common symbol `%s'"),
2105 sname
, S_GET_NAME (e
->X_add_symbol
));
2107 if (S_GET_SEGMENT (symp
) == reg_section
)
2109 /* Report error only if we know the symbol name. */
2110 if (S_GET_NAME (symp
) != reg_section
->name
)
2111 as_bad (_("can't make global register symbol `%s'"),
2114 symbol_remove (symp
, &symbol_rootP
, &symbol_lastP
);
2118 #ifdef obj_frob_symbol
2119 obj_frob_symbol (symp
, punt
);
2121 #ifdef tc_frob_symbol
2122 if (! punt
|| symbol_used_in_reloc_p (symp
))
2123 tc_frob_symbol (symp
, punt
);
2126 /* If we don't want to keep this symbol, splice it out of
2127 the chain now. If EMIT_SECTION_SYMBOLS is 0, we never
2128 want section symbols. Otherwise, we skip local symbols
2129 and symbols that the frob_symbol macros told us to punt,
2130 but we keep such symbols if they are used in relocs. */
2131 if (symp
== abs_section_sym
2132 || (! EMIT_SECTION_SYMBOLS
2133 && symbol_section_p (symp
))
2134 /* Note that S_IS_EXTERNAL and S_IS_LOCAL are not always
2135 opposites. Sometimes the former checks flags and the
2136 latter examines the name... */
2137 || (!S_IS_EXTERNAL (symp
)
2138 && (punt
|| S_IS_LOCAL (symp
) ||
2139 (S_IS_WEAKREFD (symp
) && ! symbol_used_p (symp
)))
2140 && ! symbol_used_in_reloc_p (symp
)))
2142 symbol_remove (symp
, &symbol_rootP
, &symbol_lastP
);
2144 /* After symbol_remove, symbol_next(symp) still returns
2145 the one that came after it in the chain. So we don't
2146 need to do any extra cleanup work here. */
2150 /* Make sure we really got a value for the symbol. */
2151 if (! symbol_resolved_p (symp
))
2153 as_bad (_("can't resolve value for symbol `%s'"),
2155 symbol_mark_resolved (symp
);
2158 /* Set the value into the BFD symbol. Up til now the value
2159 has only been kept in the gas symbolS struct. */
2160 symbol_get_bfdsym (symp
)->value
= S_GET_VALUE (symp
);
2162 /* A warning construct is a warning symbol followed by the
2163 symbol warned about. Don't let anything object-format or
2164 target-specific muck with it; it's ready for output. */
2165 if (symbol_get_bfdsym (symp
)->flags
& BSF_WARNING
)
2166 skip_next_symbol
= TRUE
;
2172 /* Now do any format-specific adjustments to the symbol table, such
2173 as adding file symbols. */
2174 #ifdef tc_adjust_symtab
2175 tc_adjust_symtab ();
2177 #ifdef obj_adjust_symtab
2178 obj_adjust_symtab ();
2181 /* Stop if there is an error. */
2185 /* Now that all the sizes are known, and contents correct, we can
2186 start writing to the file. */
2189 /* If *_frob_file changes the symbol value at this point, it is
2190 responsible for moving the changed value into symp->bsym->value
2191 as well. Hopefully all symbol value changing can be done in
2196 #ifdef obj_frob_file
2199 #ifdef obj_coff_generate_pdata
2200 obj_coff_generate_pdata ();
2202 bfd_map_over_sections (stdoutput
, write_relocs
, (char *) 0);
2204 #ifdef tc_frob_file_after_relocs
2205 tc_frob_file_after_relocs ();
2207 #ifdef obj_frob_file_after_relocs
2208 obj_frob_file_after_relocs ();
2211 #if defined OBJ_ELF || defined OBJ_MAYBE_ELF
2212 if (IS_ELF
&& flag_use_elf_stt_common
)
2213 stdoutput
->flags
|= BFD_CONVERT_ELF_COMMON
| BFD_USE_ELF_STT_COMMON
;
2216 /* Once all relocations have been written, we can compress the
2217 contents of the debug sections. This needs to be done before
2218 we start writing any sections, because it will affect the file
2219 layout, which is fixed once we start writing contents. */
2220 if (flag_compress_debug
)
2222 if (flag_compress_debug
== COMPRESS_DEBUG_GABI_ZLIB
)
2223 stdoutput
->flags
|= BFD_COMPRESS
| BFD_COMPRESS_GABI
;
2225 stdoutput
->flags
|= BFD_COMPRESS
;
2226 bfd_map_over_sections (stdoutput
, compress_debug
, (char *) 0);
2229 bfd_map_over_sections (stdoutput
, write_contents
, (char *) 0);
2232 #ifdef TC_GENERIC_RELAX_TABLE
2233 /* Relax a fragment by scanning TC_GENERIC_RELAX_TABLE. */
2236 relax_frag (segT segment
, fragS
*fragP
, long stretch
)
2238 const relax_typeS
*this_type
;
2239 const relax_typeS
*start_type
;
2240 relax_substateT next_state
;
2241 relax_substateT this_state
;
2247 const relax_typeS
*table
;
2249 target
= fragP
->fr_offset
;
2250 address
= fragP
->fr_address
;
2251 table
= TC_GENERIC_RELAX_TABLE
;
2252 this_state
= fragP
->fr_subtype
;
2253 start_type
= this_type
= table
+ this_state
;
2254 symbolP
= fragP
->fr_symbol
;
2260 sym_frag
= symbol_get_frag (symbolP
);
2262 #ifndef DIFF_EXPR_OK
2263 know (sym_frag
!= NULL
);
2265 know (S_GET_SEGMENT (symbolP
) != absolute_section
2266 || sym_frag
== &zero_address_frag
);
2267 target
+= S_GET_VALUE (symbolP
);
2269 /* If SYM_FRAG has yet to be reached on this pass, assume it
2270 will move by STRETCH just as we did, unless there is an
2271 alignment frag between here and SYM_FRAG. An alignment may
2272 well absorb any STRETCH, and we don't want to choose a larger
2273 branch insn by overestimating the needed reach of this
2274 branch. It isn't critical to calculate TARGET exactly; We
2275 know we'll be doing another pass if STRETCH is non-zero. */
2278 && sym_frag
->relax_marker
!= fragP
->relax_marker
2279 && S_GET_SEGMENT (symbolP
) == segment
)
2282 || sym_frag
->region
== fragP
->region
)
2284 /* If we get here we know we have a forward branch. This
2285 relax pass may have stretched previous instructions so
2286 far that omitting STRETCH would make the branch
2287 negative. Don't allow this in case the negative reach is
2288 large enough to require a larger branch instruction. */
2289 else if (target
< address
)
2290 target
= fragP
->fr_next
->fr_address
+ stretch
;
2294 aim
= target
- address
- fragP
->fr_fix
;
2295 #ifdef TC_PCREL_ADJUST
2296 /* Currently only the ns32k family needs this. */
2297 aim
+= TC_PCREL_ADJUST (fragP
);
2300 #ifdef md_prepare_relax_scan
2301 /* Formerly called M68K_AIM_KLUDGE. */
2302 md_prepare_relax_scan (fragP
, address
, aim
, this_state
, this_type
);
2307 /* Look backwards. */
2308 for (next_state
= this_type
->rlx_more
; next_state
;)
2309 if (aim
>= this_type
->rlx_backward
)
2313 /* Grow to next state. */
2314 this_state
= next_state
;
2315 this_type
= table
+ this_state
;
2316 next_state
= this_type
->rlx_more
;
2321 /* Look forwards. */
2322 for (next_state
= this_type
->rlx_more
; next_state
;)
2323 if (aim
<= this_type
->rlx_forward
)
2327 /* Grow to next state. */
2328 this_state
= next_state
;
2329 this_type
= table
+ this_state
;
2330 next_state
= this_type
->rlx_more
;
2334 growth
= this_type
->rlx_length
- start_type
->rlx_length
;
2336 fragP
->fr_subtype
= this_state
;
2340 #endif /* defined (TC_GENERIC_RELAX_TABLE) */
2342 /* Relax_align. Advance location counter to next address that has 'alignment'
2343 lowest order bits all 0s, return size of adjustment made. */
2344 static relax_addressT
2345 relax_align (relax_addressT address
, /* Address now. */
2346 int alignment
/* Alignment (binary). */)
2348 relax_addressT mask
;
2349 relax_addressT new_address
;
2351 mask
= ~((relax_addressT
) ~0 << alignment
);
2352 new_address
= (address
+ mask
) & (~mask
);
2353 #ifdef LINKER_RELAXING_SHRINKS_ONLY
2355 /* We must provide lots of padding, so the linker can discard it
2356 when needed. The linker will not add extra space, ever. */
2357 new_address
+= (1 << alignment
);
2359 return (new_address
- address
);
2362 /* Now we have a segment, not a crowd of sub-segments, we can make
2367 After this, all frags in this segment have addresses that are correct
2368 within the segment. Since segments live in different file addresses,
2369 these frag addresses may not be the same as final object-file
2373 relax_segment (struct frag
*segment_frag_root
, segT segment
, int pass
)
2375 unsigned long frag_count
;
2377 relax_addressT address
;
2381 /* In case md_estimate_size_before_relax() wants to make fixSs. */
2382 subseg_change (segment
, 0);
2384 /* For each frag in segment: count and store (a 1st guess of)
2388 for (frag_count
= 0, fragP
= segment_frag_root
;
2390 fragP
= fragP
->fr_next
, frag_count
++)
2392 fragP
->region
= region
;
2393 fragP
->relax_marker
= 0;
2394 fragP
->fr_address
= address
;
2395 address
+= fragP
->fr_fix
;
2397 switch (fragP
->fr_type
)
2400 address
+= fragP
->fr_offset
* fragP
->fr_var
;
2407 addressT offset
= relax_align (address
, (int) fragP
->fr_offset
);
2409 if (fragP
->fr_subtype
!= 0 && offset
> fragP
->fr_subtype
)
2412 if (offset
% fragP
->fr_var
!= 0)
2414 as_bad_where (fragP
->fr_file
, fragP
->fr_line
,
2415 _("alignment padding (%lu bytes) not a multiple of %ld"),
2416 (unsigned long) offset
, (long) fragP
->fr_var
);
2417 offset
-= (offset
% fragP
->fr_var
);
2426 /* Assume .org is nugatory. It will grow with 1st relax. */
2433 case rs_machine_dependent
:
2434 /* If fr_symbol is an expression, this call to
2435 resolve_symbol_value sets up the correct segment, which will
2436 likely be needed in md_estimate_size_before_relax. */
2437 if (fragP
->fr_symbol
)
2438 resolve_symbol_value (fragP
->fr_symbol
);
2440 address
+= md_estimate_size_before_relax (fragP
, segment
);
2443 #ifndef WORKING_DOT_WORD
2444 /* Broken words don't concern us yet. */
2445 case rs_broken_word
:
2450 /* Initial guess is always 1; doing otherwise can result in
2451 stable solutions that are larger than the minimum. */
2452 address
+= fragP
->fr_offset
= 1;
2456 address
+= eh_frame_estimate_size_before_relax (fragP
);
2460 address
+= dwarf2dbg_estimate_size_before_relax (fragP
);
2464 BAD_CASE (fragP
->fr_type
);
2471 unsigned long max_iterations
;
2473 /* Cumulative address adjustment. */
2476 /* Have we made any adjustment this pass? We can't just test
2477 stretch because one piece of code may have grown and another
2481 /* Most horrible, but gcc may give us some exception data that
2482 is impossible to assemble, of the form
2486 .uleb128 end - start
2492 If the leb128 is two bytes in size, then end-start is 128*128,
2493 which requires a three byte leb128. If the leb128 is three
2494 bytes in size, then end-start is 128*128-1, which requires a
2495 two byte leb128. We work around this dilemma by inserting
2496 an extra 4 bytes of alignment just after the .align. This
2497 works because the data after the align is accessed relative to
2500 This counter is used in a tiny state machine to detect
2501 whether a leb128 followed by an align is impossible to
2503 int rs_leb128_fudge
= 0;
2505 /* We want to prevent going into an infinite loop where one frag grows
2506 depending upon the location of a symbol which is in turn moved by
2507 the growing frag. eg:
2513 So we dictate that this algorithm can be at most O2. */
2514 max_iterations
= frag_count
* frag_count
;
2515 /* Check for overflow. */
2516 if (max_iterations
< frag_count
)
2517 max_iterations
= frag_count
;
2525 for (fragP
= segment_frag_root
; fragP
; fragP
= fragP
->fr_next
)
2528 addressT was_address
;
2532 fragP
->relax_marker
^= 1;
2533 was_address
= fragP
->fr_address
;
2534 address
= fragP
->fr_address
+= stretch
;
2535 symbolP
= fragP
->fr_symbol
;
2536 offset
= fragP
->fr_offset
;
2538 switch (fragP
->fr_type
)
2540 case rs_fill
: /* .fill never relaxes. */
2544 #ifndef WORKING_DOT_WORD
2545 /* JF: This is RMS's idea. I do *NOT* want to be blamed
2546 for it I do not want to write it. I do not want to have
2547 anything to do with it. This is not the proper way to
2548 implement this misfeature. */
2549 case rs_broken_word
:
2551 struct broken_word
*lie
;
2552 struct broken_word
*untruth
;
2554 /* Yes this is ugly (storing the broken_word pointer
2555 in the symbol slot). Still, this whole chunk of
2556 code is ugly, and I don't feel like doing anything
2557 about it. Think of it as stubbornness in action. */
2559 for (lie
= (struct broken_word
*) (fragP
->fr_symbol
);
2560 lie
&& lie
->dispfrag
== fragP
;
2561 lie
= lie
->next_broken_word
)
2567 offset
= (S_GET_VALUE (lie
->add
)
2569 - S_GET_VALUE (lie
->sub
));
2570 if (offset
<= -32768 || offset
>= 32767)
2572 if (flag_warn_displacement
)
2575 sprint_value (buf
, (addressT
) lie
->addnum
);
2576 as_warn_where (fragP
->fr_file
, fragP
->fr_line
,
2577 _(".word %s-%s+%s didn't fit"),
2578 S_GET_NAME (lie
->add
),
2579 S_GET_NAME (lie
->sub
),
2582 if (fragP
->fr_subtype
== 0)
2584 fragP
->fr_subtype
++;
2585 growth
+= md_short_jump_size
;
2588 /* Redirect *all* words of this table with the same
2589 target, lest we have to handle the case where the
2590 same target but with a offset that fits on this
2591 round overflows at the next relaxation round. */
2592 for (untruth
= (struct broken_word
*) (fragP
->fr_symbol
);
2593 untruth
&& untruth
->dispfrag
== lie
->dispfrag
;
2594 untruth
= untruth
->next_broken_word
)
2595 if ((symbol_get_frag (untruth
->add
)
2596 == symbol_get_frag (lie
->add
))
2597 && (S_GET_VALUE (untruth
->add
)
2598 == S_GET_VALUE (lie
->add
)))
2601 untruth
->use_jump
= lie
;
2605 growth
+= md_long_jump_size
;
2610 } /* case rs_broken_word */
2616 addressT oldoff
, newoff
;
2618 oldoff
= relax_align (was_address
+ fragP
->fr_fix
,
2620 newoff
= relax_align (address
+ fragP
->fr_fix
,
2623 if (fragP
->fr_subtype
!= 0)
2625 if (oldoff
> fragP
->fr_subtype
)
2627 if (newoff
> fragP
->fr_subtype
)
2631 growth
= newoff
- oldoff
;
2633 /* If this align happens to follow a leb128 and
2634 we have determined that the leb128 is bouncing
2635 in size, then break the cycle by inserting an
2638 && (rs_leb128_fudge
& 16) != 0
2639 && (rs_leb128_fudge
& 15) >= 2)
2641 segment_info_type
*seginfo
= seg_info (segment
);
2642 struct obstack
*ob
= &seginfo
->frchainP
->frch_obstack
;
2645 newf
= frag_alloc (ob
);
2646 obstack_blank_fast (ob
, fragP
->fr_var
);
2647 obstack_finish (ob
);
2648 memcpy (newf
, fragP
, SIZEOF_STRUCT_FRAG
);
2649 memcpy (newf
->fr_literal
,
2650 fragP
->fr_literal
+ fragP
->fr_fix
,
2652 newf
->fr_type
= rs_fill
;
2653 newf
->fr_address
= address
+ fragP
->fr_fix
+ newoff
;
2655 newf
->fr_offset
= (((offsetT
) 1 << fragP
->fr_offset
)
2657 if (newf
->fr_offset
* newf
->fr_var
2658 != (offsetT
) 1 << fragP
->fr_offset
)
2660 newf
->fr_offset
= (offsetT
) 1 << fragP
->fr_offset
;
2663 /* Include size of new frag in GROWTH. */
2664 growth
+= newf
->fr_offset
* newf
->fr_var
;
2665 /* Adjust the new frag address for the amount
2666 we'll add when we process the new frag. */
2667 newf
->fr_address
-= stretch
+ growth
;
2668 newf
->relax_marker
^= 1;
2669 fragP
->fr_next
= newf
;
2671 as_warn (_("padding added"));
2679 addressT target
= offset
;
2684 /* Convert from an actual address to an octet offset
2685 into the section. Here it is assumed that the
2686 section's VMA is zero, and can omit subtracting it
2687 from the symbol's value to get the address offset. */
2688 know (S_GET_SEGMENT (symbolP
)->vma
== 0);
2689 target
+= S_GET_VALUE (symbolP
) * OCTETS_PER_BYTE
;
2692 know (fragP
->fr_next
);
2693 after
= fragP
->fr_next
->fr_address
+ stretch
;
2694 growth
= target
- after
;
2699 /* Don't error on first few frag relax passes.
2700 The symbol might be an expression involving
2701 symbol values from other sections. If those
2702 sections have not yet been processed their
2703 frags will all have zero addresses, so we
2704 will calculate incorrect values for them. The
2705 number of passes we allow before giving an
2706 error is somewhat arbitrary. It should be at
2707 least one, with larger values requiring
2708 increasingly contrived dependencies between
2709 frags to trigger a false error. */
2712 /* Force another pass. */
2717 /* Growth may be negative, but variable part of frag
2718 cannot have fewer than 0 chars. That is, we can't
2720 as_bad_where (fragP
->fr_file
, fragP
->fr_line
,
2721 _("attempt to move .org backwards"));
2723 /* We've issued an error message. Change the
2724 frag to avoid cascading errors. */
2725 fragP
->fr_type
= rs_align
;
2726 fragP
->fr_subtype
= 0;
2727 fragP
->fr_offset
= 0;
2728 fragP
->fr_fix
= after
- address
;
2739 amount
= S_GET_VALUE (symbolP
);
2740 if (S_GET_SEGMENT (symbolP
) != absolute_section
2741 || S_IS_COMMON (symbolP
)
2742 || ! S_IS_DEFINED (symbolP
))
2744 as_bad_where (fragP
->fr_file
, fragP
->fr_line
,
2745 _(".space specifies non-absolute value"));
2746 /* Prevent repeat of this error message. */
2747 fragP
->fr_symbol
= 0;
2749 else if (amount
< 0)
2751 /* Don't error on first few frag relax passes.
2752 See rs_org comment for a longer explanation. */
2759 as_warn_where (fragP
->fr_file
, fragP
->fr_line
,
2760 _(".space or .fill with negative value, ignored"));
2761 fragP
->fr_symbol
= 0;
2764 growth
= (was_address
+ fragP
->fr_fix
+ amount
2765 - fragP
->fr_next
->fr_address
);
2769 case rs_machine_dependent
:
2770 #ifdef md_relax_frag
2771 growth
= md_relax_frag (segment
, fragP
, stretch
);
2773 #ifdef TC_GENERIC_RELAX_TABLE
2774 /* The default way to relax a frag is to look through
2775 TC_GENERIC_RELAX_TABLE. */
2776 growth
= relax_frag (segment
, fragP
, stretch
);
2777 #endif /* TC_GENERIC_RELAX_TABLE */
2786 value
= resolve_symbol_value (fragP
->fr_symbol
);
2787 size
= sizeof_leb128 (value
, fragP
->fr_subtype
);
2788 growth
= size
- fragP
->fr_offset
;
2789 fragP
->fr_offset
= size
;
2794 growth
= eh_frame_relax_frag (fragP
);
2798 growth
= dwarf2dbg_relax_frag (fragP
);
2802 BAD_CASE (fragP
->fr_type
);
2809 if (fragP
->fr_type
== rs_leb128
)
2810 rs_leb128_fudge
+= 16;
2811 else if (fragP
->fr_type
== rs_align
2812 && (rs_leb128_fudge
& 16) != 0
2814 rs_leb128_fudge
+= 16;
2816 rs_leb128_fudge
= 0;
2821 && (rs_leb128_fudge
& 16) == 0
2822 && (rs_leb128_fudge
& -16) != 0)
2823 rs_leb128_fudge
+= 1;
2825 rs_leb128_fudge
= 0;
2827 /* Until nothing further to relax. */
2828 while (stretched
&& -- max_iterations
);
2831 as_fatal (_("Infinite loop encountered whilst attempting to compute the addresses of symbols in section %s"),
2832 segment_name (segment
));
2835 for (fragP
= segment_frag_root
; fragP
; fragP
= fragP
->fr_next
)
2836 if (fragP
->last_fr_address
!= fragP
->fr_address
)
2838 fragP
->last_fr_address
= fragP
->fr_address
;
2845 number_to_chars_bigendian (char *buf
, valueT val
, int n
)
2851 buf
[n
] = val
& 0xff;
2857 number_to_chars_littleendian (char *buf
, valueT val
, int n
)
2863 *buf
++ = val
& 0xff;
2869 write_print_statistics (FILE *file
)
2871 fprintf (file
, "fixups: %d\n", n_fixups
);
2874 /* For debugging. */
2875 extern int indent_level
;
2878 print_fixup (fixS
*fixp
)
2881 fprintf (stderr
, "fix ");
2882 fprintf_vma (stderr
, (bfd_vma
)((bfd_hostptr_t
) fixp
));
2883 fprintf (stderr
, " %s:%d",fixp
->fx_file
, fixp
->fx_line
);
2885 fprintf (stderr
, " pcrel");
2886 if (fixp
->fx_pcrel_adjust
)
2887 fprintf (stderr
, " pcrel_adjust=%d", fixp
->fx_pcrel_adjust
);
2888 if (fixp
->fx_im_disp
)
2891 fprintf (stderr
, " im_disp=%d", fixp
->fx_im_disp
);
2893 fprintf (stderr
, " im_disp");
2897 fprintf (stderr
, " tcbit");
2899 fprintf (stderr
, " done");
2900 fprintf (stderr
, "\n size=%d frag=", fixp
->fx_size
);
2901 fprintf_vma (stderr
, (bfd_vma
) ((bfd_hostptr_t
) fixp
->fx_frag
));
2902 fprintf (stderr
, " where=%ld offset=%lx addnumber=%lx",
2903 (long) fixp
->fx_where
,
2904 (unsigned long) fixp
->fx_offset
,
2905 (unsigned long) fixp
->fx_addnumber
);
2906 fprintf (stderr
, "\n %s (%d)", bfd_get_reloc_code_name (fixp
->fx_r_type
),
2910 fprintf (stderr
, "\n +<");
2911 print_symbol_value_1 (stderr
, fixp
->fx_addsy
);
2912 fprintf (stderr
, ">");
2916 fprintf (stderr
, "\n -<");
2917 print_symbol_value_1 (stderr
, fixp
->fx_subsy
);
2918 fprintf (stderr
, ">");
2920 fprintf (stderr
, "\n");
2921 #ifdef TC_FIX_DATA_PRINT
2922 TC_FIX_DATA_PRINT (stderr
, fixp
);