1 /* write.c - emit .o file
2 Copyright (C) 1986, 87, 90, 91, 92, 93, 94, 95, 96, 97, 1998
3 Free Software Foundation, Inc.
5 This file is part of GAS, the GNU Assembler.
7 GAS is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
12 GAS is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GAS; see the file COPYING. If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
22 /* This thing should be set up to do byteordering correctly. But... */
27 #include "output-file.h"
29 /* This looks like a good idea. Let's try turning it on always, for now. */
30 #undef BFD_FAST_SECTION_FILL
31 #define BFD_FAST_SECTION_FILL
33 /* The NOP_OPCODE is for the alignment fill value. Fill it with a nop
34 instruction so that the disassembler does not choke on it. */
36 #define NOP_OPCODE 0x00
39 #ifndef TC_ADJUST_RELOC_COUNT
40 #define TC_ADJUST_RELOC_COUNT(FIXP,COUNT)
43 #ifndef TC_FORCE_RELOCATION
44 #define TC_FORCE_RELOCATION(FIXP) 0
47 #ifndef TC_FORCE_RELOCATION_SECTION
48 #define TC_FORCE_RELOCATION_SECTION(FIXP,SEG) TC_FORCE_RELOCATION(FIXP)
51 #ifndef MD_PCREL_FROM_SECTION
52 #define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from(FIXP)
55 #ifndef WORKING_DOT_WORD
56 extern CONST int md_short_jump_size;
57 extern CONST int md_long_jump_size;
60 int symbol_table_frozen;
61 void print_fixup PARAMS ((fixS *));
64 static void renumber_sections PARAMS ((bfd *, asection *, PTR));
66 /* We generally attach relocs to frag chains. However, after we have
67 chained these all together into a segment, any relocs we add after
68 that must be attached to a segment. This will include relocs added
69 in md_estimate_size_for_relax, for example. */
70 static int frags_chained = 0;
76 struct frag *text_frag_root;
77 struct frag *data_frag_root;
78 struct frag *bss_frag_root;
80 struct frag *text_last_frag; /* Last frag in segment. */
81 struct frag *data_last_frag; /* Last frag in segment. */
82 static struct frag *bss_last_frag; /* Last frag in segment. */
86 static object_headers headers;
89 long string_byte_count;
90 char *next_object_file_charP; /* Tracks object file bytes. */
93 int magic_number_for_object_file = DEFAULT_MAGIC_NUMBER_FOR_OBJECT_FILE;
96 #endif /* BFD_ASSEMBLER */
101 static fixS *fix_new_internal PARAMS ((fragS *, int where, int size,
102 symbolS *add, symbolS *sub,
103 offsetT offset, int pcrel,
104 bfd_reloc_code_real_type r_type));
106 static fixS *fix_new_internal PARAMS ((fragS *, int where, int size,
107 symbolS *add, symbolS *sub,
108 offsetT offset, int pcrel,
111 #if defined (BFD_ASSEMBLER) || (!defined (BFD) && !defined (OBJ_VMS))
112 static long fixup_segment PARAMS ((fixS * fixP, segT this_segment_type));
114 static relax_addressT relax_align PARAMS ((relax_addressT addr, int align));
115 #if defined (BFD_ASSEMBLER) || ! defined (BFD)
116 static fragS *chain_frchains_together_1 PARAMS ((segT, struct frchain *));
119 static void chain_frchains_together PARAMS ((bfd *, segT, PTR));
120 static void cvt_frag_to_fill PARAMS ((segT, fragS *));
121 static void relax_and_size_seg PARAMS ((bfd *, asection *, PTR));
122 static void adjust_reloc_syms PARAMS ((bfd *, asection *, PTR));
123 static void write_relocs PARAMS ((bfd *, asection *, PTR));
124 static void write_contents PARAMS ((bfd *, asection *, PTR));
125 static void set_symtab PARAMS ((void));
127 #if defined (BFD_ASSEMBLER) || (! defined (BFD) && ! defined (OBJ_AOUT))
128 static void merge_data_into_text PARAMS ((void));
130 #if ! defined (BFD_ASSEMBLER) && ! defined (BFD)
131 static void cvt_frag_to_fill PARAMS ((object_headers *, segT, fragS *));
132 static void remove_subsegs PARAMS ((frchainS *, int, fragS **, fragS **));
133 static void relax_and_size_all_segments PARAMS ((void));
139 * Create a fixS in obstack 'notes'.
142 fix_new_internal (frag, where, size, add_symbol, sub_symbol, offset, pcrel,
144 fragS *frag; /* Which frag? */
145 int where; /* Where in that frag? */
146 int size; /* 1, 2, or 4 usually. */
147 symbolS *add_symbol; /* X_add_symbol. */
148 symbolS *sub_symbol; /* X_op_symbol. */
149 offsetT offset; /* X_add_number. */
150 int pcrel; /* TRUE if PC-relative relocation. */
152 bfd_reloc_code_real_type r_type; /* Relocation type */
154 int r_type; /* Relocation type */
161 fixP = (fixS *) obstack_alloc (¬es, sizeof (fixS));
163 fixP->fx_frag = frag;
164 fixP->fx_where = where;
165 fixP->fx_size = size;
166 /* We've made fx_size a narrow field; check that it's wide enough. */
167 if (fixP->fx_size != size)
169 as_bad (_("field fx_size too small to hold %d"), size);
172 fixP->fx_addsy = add_symbol;
173 fixP->fx_subsy = sub_symbol;
174 fixP->fx_offset = offset;
175 fixP->fx_pcrel = pcrel;
177 #if defined(NEED_FX_R_TYPE) || defined (BFD_ASSEMBLER)
178 fixP->fx_r_type = r_type;
180 fixP->fx_im_disp = 0;
181 fixP->fx_pcrel_adjust = 0;
182 fixP->fx_bit_fixP = 0;
183 fixP->fx_addnumber = 0;
186 fixP->fx_no_overflow = 0;
190 TC_INIT_FIX_DATA(fixP);
193 as_where (&fixP->fx_file, &fixP->fx_line);
195 /* Usually, we want relocs sorted numerically, but while
196 comparing to older versions of gas that have relocs
197 reverse sorted, it is convenient to have this compile
198 time option. xoxorich. */
203 fixS **seg_fix_rootP = (frags_chained
204 ? &seg_info (now_seg)->fix_root
205 : &frchain_now->fix_root);
206 fixS **seg_fix_tailP = (frags_chained
207 ? &seg_info (now_seg)->fix_tail
208 : &frchain_now->fix_tail);
211 #ifdef REVERSE_SORT_RELOCS
213 fixP->fx_next = *seg_fix_rootP;
214 *seg_fix_rootP = fixP;
216 #else /* REVERSE_SORT_RELOCS */
218 fixP->fx_next = NULL;
221 (*seg_fix_tailP)->fx_next = fixP;
223 *seg_fix_rootP = fixP;
224 *seg_fix_tailP = fixP;
226 #endif /* REVERSE_SORT_RELOCS */
233 /* Create a fixup relative to a symbol (plus a constant). */
236 fix_new (frag, where, size, add_symbol, offset, pcrel, r_type)
237 fragS *frag; /* Which frag? */
238 int where; /* Where in that frag? */
239 int size; /* 1, 2, or 4 usually. */
240 symbolS *add_symbol; /* X_add_symbol. */
241 offsetT offset; /* X_add_number. */
242 int pcrel; /* TRUE if PC-relative relocation. */
244 bfd_reloc_code_real_type r_type; /* Relocation type */
246 int r_type; /* Relocation type */
249 return fix_new_internal (frag, where, size, add_symbol,
250 (symbolS *) NULL, offset, pcrel, r_type);
253 /* Create a fixup for an expression. Currently we only support fixups
254 for difference expressions. That is itself more than most object
255 file formats support anyhow. */
258 fix_new_exp (frag, where, size, exp, pcrel, r_type)
259 fragS *frag; /* Which frag? */
260 int where; /* Where in that frag? */
261 int size; /* 1, 2, or 4 usually. */
262 expressionS *exp; /* Expression. */
263 int pcrel; /* TRUE if PC-relative relocation. */
265 bfd_reloc_code_real_type r_type; /* Relocation type */
267 int r_type; /* Relocation type */
280 /* This comes up when _GLOBAL_OFFSET_TABLE_+(.-L0) is read, if
281 the difference expression cannot immediately be reduced. */
283 symbolS *stmp = make_expr_symbol (exp);
284 exp->X_op = O_symbol;
285 exp->X_op_symbol = 0;
286 exp->X_add_symbol = stmp;
287 exp->X_add_number = 0;
288 return fix_new_exp (frag, where, size, exp, pcrel, r_type);
292 add = exp->X_add_symbol;
293 off = exp->X_add_number;
295 #if defined(BFD_ASSEMBLER)
296 r_type = BFD_RELOC_RVA;
298 #if defined(TC_RVA_RELOC)
299 r_type = TC_RVA_RELOC;
301 as_fatal(_("rva not supported"));
307 sub = exp->X_add_symbol;
308 off = exp->X_add_number;
312 sub = exp->X_op_symbol;
315 add = exp->X_add_symbol;
318 off = exp->X_add_number;
322 add = make_expr_symbol (exp);
326 return fix_new_internal (frag, where, size, add, sub, off,
330 /* Append a string onto another string, bumping the pointer along. */
332 append (charPP, fromP, length)
335 unsigned long length;
337 /* Don't trust memcpy() of 0 chars. */
341 memcpy (*charPP, fromP, length);
345 #ifndef BFD_ASSEMBLER
346 int section_alignment[SEG_MAXIMUM_ORDINAL];
350 * This routine records the largest alignment seen for each segment.
351 * If the beginning of the segment is aligned on the worst-case
352 * boundary, all of the other alignments within it will work. At
353 * least one object format really uses this info.
356 record_alignment (seg, align)
357 /* Segment to which alignment pertains */
359 /* Alignment, as a power of 2 (e.g., 1 => 2-byte boundary, 2 => 4-byte
363 if (seg == absolute_section)
366 if ((unsigned int) align > bfd_get_section_alignment (stdoutput, seg))
367 bfd_set_section_alignment (stdoutput, seg, align);
369 if (align > section_alignment[(int) seg])
370 section_alignment[(int) seg] = align;
376 /* Reset the section indices after removing the gas created sections. */
379 renumber_sections (abfd, sec, countparg)
384 int *countp = (int *) countparg;
386 sec->index = *countp;
390 #endif /* defined (BFD_ASSEMBLER) */
392 #if defined (BFD_ASSEMBLER) || ! defined (BFD)
395 chain_frchains_together_1 (section, frchp)
397 struct frchain *frchp;
399 fragS dummy, *prev_frag = &dummy;
401 fixS fix_dummy, *prev_fix = &fix_dummy;
404 for (; frchp && frchp->frch_seg == section; frchp = frchp->frch_next)
406 prev_frag->fr_next = frchp->frch_root;
407 prev_frag = frchp->frch_last;
408 assert (prev_frag->fr_type != 0);
410 if (frchp->fix_root != (fixS *) NULL)
412 if (seg_info (section)->fix_root == (fixS *) NULL)
413 seg_info (section)->fix_root = frchp->fix_root;
414 prev_fix->fx_next = frchp->fix_root;
415 seg_info (section)->fix_tail = frchp->fix_tail;
416 prev_fix = frchp->fix_tail;
420 assert (prev_frag->fr_type != 0);
421 prev_frag->fr_next = 0;
430 chain_frchains_together (abfd, section, xxx)
431 bfd *abfd; /* unused */
433 PTR xxx; /* unused */
435 segment_info_type *info;
437 /* BFD may have introduced its own sections without using
438 subseg_new, so it is possible that seg_info is NULL. */
439 info = seg_info (section);
440 if (info != (segment_info_type *) NULL)
441 info->frchainP->frch_last
442 = chain_frchains_together_1 (section, info->frchainP);
444 /* Now that we've chained the frags together, we must add new fixups
445 to the segment, not to the frag chain. */
451 #if !defined (BFD) && !defined (BFD_ASSEMBLER)
454 remove_subsegs (head, seg, root, last)
460 *root = head->frch_root;
461 *last = chain_frchains_together_1 (seg, head);
466 #if defined (BFD_ASSEMBLER) || !defined (BFD)
470 cvt_frag_to_fill (sec, fragP)
475 cvt_frag_to_fill (headersP, sec, fragP)
476 object_headers *headersP;
481 switch (fragP->fr_type)
488 HANDLE_ALIGN (fragP);
490 know (fragP->fr_next != NULL);
491 fragP->fr_offset = (fragP->fr_next->fr_address
493 - fragP->fr_fix) / fragP->fr_var;
494 if (fragP->fr_offset < 0)
496 as_bad (_("attempt to .org/.space backwards? (%ld)"),
497 (long) fragP->fr_offset);
499 fragP->fr_type = rs_fill;
507 valueT value = S_GET_VALUE (fragP->fr_symbol);
510 size = output_leb128 (fragP->fr_literal + fragP->fr_fix, value,
513 fragP->fr_fix += size;
514 fragP->fr_type = rs_fill;
516 fragP->fr_offset = 0;
517 fragP->fr_symbol = NULL;
522 eh_frame_convert_frag (fragP);
525 case rs_machine_dependent:
527 md_convert_frag (stdoutput, sec, fragP);
529 md_convert_frag (headersP, sec, fragP);
532 assert (fragP->fr_next == NULL
533 || ((offsetT) (fragP->fr_next->fr_address - fragP->fr_address)
537 * After md_convert_frag, we make the frag into a ".space 0".
538 * Md_convert_frag() should set up any fixSs and constants
544 #ifndef WORKING_DOT_WORD
547 struct broken_word *lie;
549 if (fragP->fr_subtype)
551 fragP->fr_fix += md_short_jump_size;
552 for (lie = (struct broken_word *) (fragP->fr_symbol);
553 lie && lie->dispfrag == fragP;
554 lie = lie->next_broken_word)
556 fragP->fr_fix += md_long_jump_size;
564 BAD_CASE (fragP->fr_type);
569 #endif /* defined (BFD_ASSEMBLER) || !defined (BFD) */
573 relax_and_size_seg (abfd, sec, xxx)
580 segment_info_type *seginfo;
582 valueT size, newsize;
584 subseg_change (sec, 0);
586 flags = bfd_get_section_flags (abfd, sec);
588 seginfo = seg_info (sec);
589 if (seginfo && seginfo->frchainP)
591 relax_segment (seginfo->frchainP->frch_root, sec);
592 for (fragp = seginfo->frchainP->frch_root; fragp; fragp = fragp->fr_next)
593 cvt_frag_to_fill (sec, fragp);
594 for (fragp = seginfo->frchainP->frch_root;
596 fragp = fragp->fr_next)
597 /* walk to last elt */;
598 size = fragp->fr_address + fragp->fr_fix;
603 if (size > 0 && ! seginfo->bss)
604 flags |= SEC_HAS_CONTENTS;
606 /* @@ This is just an approximation. */
607 if (seginfo && seginfo->fix_root)
611 x = bfd_set_section_flags (abfd, sec, flags);
614 newsize = md_section_align (sec, size);
615 x = bfd_set_section_size (abfd, sec, newsize);
618 /* If the size had to be rounded up, add some padding in the last
620 assert (newsize >= size);
623 fragS *last = seginfo->frchainP->frch_last;
624 fragp = seginfo->frchainP->frch_root;
625 while (fragp->fr_next != last)
626 fragp = fragp->fr_next;
627 last->fr_address = size;
628 fragp->fr_offset += newsize - size;
631 #ifdef tc_frob_section
632 tc_frob_section (sec);
634 #ifdef obj_frob_section
635 obj_frob_section (sec);
641 dump_section_relocs (abfd, sec, stream_)
646 FILE *stream = (FILE *) stream_;
647 segment_info_type *seginfo = seg_info (sec);
648 fixS *fixp = seginfo->fix_root;
653 fprintf (stream, "sec %s relocs:\n", sec->name);
656 symbolS *s = fixp->fx_addsy;
659 fprintf (stream, " %08x: %s(%s", fixp, S_GET_NAME (s),
660 s->bsym->section->name);
661 if (s->bsym->flags & BSF_SECTION_SYM)
663 fprintf (stream, " section sym");
665 fprintf (stream, "+%x", S_GET_VALUE (s));
668 fprintf (stream, "+%x", S_GET_VALUE (s));
669 fprintf (stream, ")+%x\n", fixp->fx_offset);
672 fprintf (stream, " %08x: type %d no sym\n", fixp, fixp->fx_r_type);
673 fixp = fixp->fx_next;
677 #define dump_section_relocs(ABFD,SEC,STREAM) ((void) 0)
680 #ifndef EMIT_SECTION_SYMBOLS
681 #define EMIT_SECTION_SYMBOLS 1
685 adjust_reloc_syms (abfd, sec, xxx)
690 segment_info_type *seginfo = seg_info (sec);
696 dump_section_relocs (abfd, sec, stderr);
698 for (fixp = seginfo->fix_root; fixp; fixp = fixp->fx_next)
701 else if (fixp->fx_addsy)
707 fprintf (stderr, "\n\nadjusting fixup:\n");
711 sym = fixp->fx_addsy;
713 /* All symbols should have already been resolved at this
714 point. It is possible to see unresolved expression
715 symbols, though, since they are not in the regular symbol
717 if (sym != NULL && ! sym->sy_resolved)
718 resolve_symbol_value (sym, 1);
719 if (fixp->fx_subsy != NULL && ! fixp->fx_subsy->sy_resolved)
720 resolve_symbol_value (fixp->fx_subsy, 1);
722 /* If this symbol is equated to an undefined symbol, convert
723 the fixup to being against that symbol. */
724 if (sym->sy_value.X_op == O_symbol
725 && (! S_IS_DEFINED (sym) || S_IS_COMMON (sym)))
727 fixp->fx_offset += sym->sy_value.X_add_number;
728 sym = sym->sy_value.X_add_symbol;
729 fixp->fx_addsy = sym;
732 symsec = S_GET_SEGMENT (sym);
734 if (sym != NULL && sym->sy_mri_common)
736 /* These symbols are handled specially in fixup_segment. */
740 if (bfd_is_abs_section (symsec))
742 /* The fixup_segment routine will not use this symbol in a
743 relocation unless TC_FORCE_RELOCATION returns 1. */
744 if (TC_FORCE_RELOCATION (fixp))
746 fixp->fx_addsy->sy_used_in_reloc = 1;
747 #ifdef UNDEFINED_DIFFERENCE_OK
748 if (fixp->fx_subsy != NULL)
749 fixp->fx_subsy->sy_used_in_reloc = 1;
755 /* If it's one of these sections, assume the symbol is
756 definitely going to be output. The code in
757 md_estimate_size_before_relax in tc-mips.c uses this test
758 as well, so if you change this code you should look at that
760 if (bfd_is_und_section (symsec)
761 || bfd_is_com_section (symsec))
763 fixp->fx_addsy->sy_used_in_reloc = 1;
764 #ifdef UNDEFINED_DIFFERENCE_OK
765 /* We have the difference of an undefined symbol and some
766 other symbol. Make sure to mark the other symbol as used
767 in a relocation so that it will always be output. */
769 fixp->fx_subsy->sy_used_in_reloc = 1;
774 /* Don't try to reduce relocs which refer to .linkonce
775 sections. It can lead to confusion when a debugging
776 section refers to a .linkonce section. I hope this will
777 always be correct. */
784 if ((bfd_get_section_flags (stdoutput, symsec) & SEC_LINK_ONCE)
789 /* The GNU toolchain uses an extension for ELF: a section
790 beginning with the magic string .gnu.linkonce is a
792 if (strncmp (segment_name (symsec), ".gnu.linkonce",
793 sizeof ".gnu.linkonce" - 1) == 0)
799 fixp->fx_addsy->sy_used_in_reloc = 1;
800 #ifdef UNDEFINED_DIFFERENCE_OK
801 if (fixp->fx_subsy != NULL)
802 fixp->fx_subsy->sy_used_in_reloc = 1;
808 /* Since we're reducing to section symbols, don't attempt to reduce
809 anything that's already using one. */
810 if (sym->bsym->flags & BSF_SECTION_SYM)
812 fixp->fx_addsy->sy_used_in_reloc = 1;
816 /* Is there some other reason we can't adjust this one? (E.g.,
817 call/bal links in i960-bout symbols.) */
818 #ifdef obj_fix_adjustable
819 if (! obj_fix_adjustable (fixp))
821 fixp->fx_addsy->sy_used_in_reloc = 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))
832 fixp->fx_addsy->sy_used_in_reloc = 1;
837 /* If the section symbol isn't going to be output, the relocs
838 at least should still work. If not, figure out what to do
839 when we run into that case.
841 We refetch the segment when calling section_symbol, rather
842 than using symsec, because S_GET_VALUE may wind up changing
843 the section when it calls resolve_symbol_value. */
844 fixp->fx_offset += S_GET_VALUE (sym);
845 fixp->fx_addsy = section_symbol (S_GET_SEGMENT (sym));
846 fixp->fx_addsy->sy_used_in_reloc = 1;
851 #if 1/*def RELOC_REQUIRES_SYMBOL*/
854 /* There was no symbol required by this relocation. However,
855 BFD doesn't really handle relocations without symbols well.
856 (At least, the COFF support doesn't.) So for now we fake up
857 a local symbol in the absolute section. */
859 fixp->fx_addsy = section_symbol (absolute_section);
860 /* fixp->fx_addsy->sy_used_in_reloc = 1; */
864 dump_section_relocs (abfd, sec, stderr);
868 write_relocs (abfd, sec, xxx)
873 segment_info_type *seginfo = seg_info (sec);
880 /* If seginfo is NULL, we did not create this section; don't do
885 fixup_segment (seginfo->fix_root, sec);
888 for (fixp = seginfo->fix_root; fixp; fixp = fixp->fx_next)
891 #ifndef RELOC_EXPANSION_POSSIBLE
892 /* Set up reloc information as well. */
893 relocs = (arelent **) xmalloc (n * sizeof (arelent *));
894 memset ((char*)relocs, 0, n * sizeof (arelent*));
897 for (fixp = seginfo->fix_root; fixp != (fixS *) NULL; fixp = fixp->fx_next)
900 bfd_reloc_status_type s;
909 /* If this is an undefined symbol which was equated to another
910 symbol, then use generate the reloc against the latter symbol
911 rather than the former. */
912 sym = fixp->fx_addsy;
913 while (sym->sy_value.X_op == O_symbol
914 && (! S_IS_DEFINED (sym) || S_IS_COMMON (sym)))
918 /* We must avoid looping, as that can occur with a badly
920 n = sym->sy_value.X_add_symbol;
923 fixp->fx_offset += sym->sy_value.X_add_number;
926 fixp->fx_addsy = sym;
928 reloc = tc_gen_reloc (sec, fixp);
936 /* This test is triggered inappropriately for the SH. */
937 if (fixp->fx_where + fixp->fx_size
938 > fixp->fx_frag->fr_fix + fixp->fx_frag->fr_offset)
942 s = bfd_install_relocation (stdoutput, reloc,
943 fixp->fx_frag->fr_literal,
944 fixp->fx_frag->fr_address,
950 case bfd_reloc_overflow:
951 as_bad_where (fixp->fx_file, fixp->fx_line, _("relocation overflow"));
954 as_fatal (_("%s:%u: bad return from bfd_install_relocation"),
955 fixp->fx_file, fixp->fx_line);
960 n = n * MAX_RELOC_EXPANSION;
961 /* Set up reloc information as well. */
962 relocs = (arelent **) xmalloc (n * sizeof (arelent *));
965 for (fixp = seginfo->fix_root; fixp != (fixS *) NULL; fixp = fixp->fx_next)
969 bfd_reloc_status_type s;
979 /* If this is an undefined symbol which was equated to another
980 symbol, then use generate the reloc against the latter symbol
981 rather than the former. */
982 sym = fixp->fx_addsy;
983 while (sym->sy_value.X_op == O_symbol
984 && (! S_IS_DEFINED (sym) || S_IS_COMMON (sym)))
985 sym = sym->sy_value.X_add_symbol;
986 fixp->fx_addsy = sym;
988 reloc = tc_gen_reloc (sec, fixp);
990 for (j = 0; reloc[j]; j++)
992 relocs[i++] = reloc[j];
995 data = fixp->fx_frag->fr_literal + fixp->fx_where;
996 if (fixp->fx_where + fixp->fx_size
997 > fixp->fx_frag->fr_fix + fixp->fx_frag->fr_offset)
998 as_bad_where (fixp->fx_file, fixp->fx_line,
999 _("internal error: fixup not contained within frag"));
1000 for (j = 0; reloc[j]; j++)
1002 s = bfd_install_relocation (stdoutput, reloc[j],
1003 fixp->fx_frag->fr_literal,
1004 fixp->fx_frag->fr_address,
1010 case bfd_reloc_overflow:
1011 as_bad_where (fixp->fx_file, fixp->fx_line,
1012 _("relocation overflow"));
1015 as_fatal (_("%s:%u: bad return from bfd_install_relocation"),
1016 fixp->fx_file, fixp->fx_line);
1027 sympp = bfd_get_outsymbols (stdoutput);
1028 nsyms = bfd_get_symcount (stdoutput);
1029 for (i = 0; i < n; i++)
1030 if (((*relocs[i]->sym_ptr_ptr)->flags & BSF_SECTION_SYM) == 0)
1032 for (j = 0; j < nsyms; j++)
1033 if (sympp[j] == *relocs[i]->sym_ptr_ptr)
1042 bfd_set_reloc (stdoutput, sec, relocs, n);
1044 bfd_set_section_flags (abfd, sec,
1045 (bfd_get_section_flags (abfd, sec)
1046 & (flagword) ~SEC_RELOC));
1053 fprintf (stderr, "relocs for sec %s\n", sec->name);
1054 for (i = 0; i < n; i++)
1057 s = *r->sym_ptr_ptr;
1058 fprintf (stderr, " reloc %2d @%08x off %4x : sym %-10s addend %x\n",
1059 i, r, r->address, s->name, r->addend);
1066 write_contents (abfd, sec, xxx)
1071 segment_info_type *seginfo = seg_info (sec);
1072 unsigned long offset = 0;
1075 /* Write out the frags. */
1077 || ! (bfd_get_section_flags (abfd, sec) & SEC_HAS_CONTENTS))
1080 for (f = seginfo->frchainP->frch_root;
1085 unsigned long fill_size;
1089 assert (f->fr_type == rs_fill);
1092 x = bfd_set_section_contents (stdoutput, sec,
1093 f->fr_literal, (file_ptr) offset,
1094 (bfd_size_type) f->fr_fix);
1097 bfd_perror (stdoutput->filename);
1098 as_perror (_("FATAL: Can't write %s"), stdoutput->filename);
1099 exit (EXIT_FAILURE);
1101 offset += f->fr_fix;
1103 fill_literal = f->fr_literal + f->fr_fix;
1104 fill_size = f->fr_var;
1105 count = f->fr_offset;
1106 assert (count >= 0);
1107 if (fill_size && count)
1110 if (fill_size > sizeof(buf))
1112 /* Do it the old way. Can this ever happen? */
1115 x = bfd_set_section_contents (stdoutput, sec,
1118 (bfd_size_type) fill_size);
1121 bfd_perror (stdoutput->filename);
1122 as_perror (_("FATAL: Can't write %s"), stdoutput->filename);
1123 exit (EXIT_FAILURE);
1125 offset += fill_size;
1130 /* Build a buffer full of fill objects and output it as
1131 often as necessary. This saves on the overhead of
1132 potentially lots of bfd_set_section_contents calls. */
1136 n_per_buf = sizeof (buf);
1137 memset (buf, *fill_literal, n_per_buf);
1142 n_per_buf = sizeof(buf)/fill_size;
1143 for (i = n_per_buf, bufp = buf; i; i--, bufp += fill_size)
1144 memcpy(bufp, fill_literal, fill_size);
1146 for (; count > 0; count -= n_per_buf)
1148 n_per_buf = n_per_buf > count ? count : n_per_buf;
1149 x = bfd_set_section_contents (stdoutput, sec,
1150 buf, (file_ptr) offset,
1151 (bfd_size_type) n_per_buf * fill_size);
1153 as_fatal (_("Cannot write to output file."));
1154 offset += n_per_buf * fill_size;
1162 #if defined(BFD_ASSEMBLER) || (!defined (BFD) && !defined(OBJ_AOUT))
1164 merge_data_into_text ()
1166 #if defined(BFD_ASSEMBLER) || defined(MANY_SEGMENTS)
1167 seg_info (text_section)->frchainP->frch_last->fr_next =
1168 seg_info (data_section)->frchainP->frch_root;
1169 seg_info (text_section)->frchainP->frch_last =
1170 seg_info (data_section)->frchainP->frch_last;
1171 seg_info (data_section)->frchainP = 0;
1175 text_last_frag->fr_next = data_frag_root;
1176 text_last_frag = data_last_frag;
1177 data_last_frag = NULL;
1178 data_frag_root = NULL;
1181 for (tmp = text_fix_root; tmp->fx_next; tmp = tmp->fx_next);;
1182 tmp->fx_next = data_fix_root;
1183 text_fix_tail = data_fix_tail;
1186 text_fix_root = data_fix_root;
1187 data_fix_root = NULL;
1190 #endif /* BFD_ASSEMBLER || (! BFD && ! OBJ_AOUT) */
1192 #if !defined (BFD_ASSEMBLER) && !defined (BFD)
1194 relax_and_size_all_segments ()
1198 relax_segment (text_frag_root, SEG_TEXT);
1199 relax_segment (data_frag_root, SEG_DATA);
1200 relax_segment (bss_frag_root, SEG_BSS);
1202 * Now the addresses of frags are correct within the segment.
1205 know (text_last_frag->fr_type == rs_fill && text_last_frag->fr_offset == 0);
1206 H_SET_TEXT_SIZE (&headers, text_last_frag->fr_address);
1207 text_last_frag->fr_address = H_GET_TEXT_SIZE (&headers);
1210 * Join the 2 segments into 1 huge segment.
1211 * To do this, re-compute every rn_address in the SEG_DATA frags.
1212 * Then join the data frags after the text frags.
1214 * Determine a_data [length of data segment].
1218 register relax_addressT slide;
1220 know ((text_last_frag->fr_type == rs_fill) && (text_last_frag->fr_offset == 0));
1222 H_SET_DATA_SIZE (&headers, data_last_frag->fr_address);
1223 data_last_frag->fr_address = H_GET_DATA_SIZE (&headers);
1224 slide = H_GET_TEXT_SIZE (&headers); /* & in file of the data segment. */
1226 #define RoundUp(N,S) (((N)+(S)-1)&-(S))
1227 /* For b.out: If the data section has a strict alignment
1228 requirement, its load address in the .o file will be
1229 rounded up from the size of the text section. These
1230 two values are *not* the same! Similarly for the bss
1232 slide = RoundUp (slide, 1 << section_alignment[SEG_DATA]);
1235 for (fragP = data_frag_root; fragP; fragP = fragP->fr_next)
1237 fragP->fr_address += slide;
1238 } /* for each data frag */
1240 know (text_last_frag != 0);
1241 text_last_frag->fr_next = data_frag_root;
1245 H_SET_DATA_SIZE (&headers, 0);
1249 /* See above comments on b.out data section address. */
1252 if (data_last_frag == 0)
1253 bss_vma = H_GET_TEXT_SIZE (&headers);
1255 bss_vma = data_last_frag->fr_address;
1256 bss_vma = RoundUp (bss_vma, 1 << section_alignment[SEG_BSS]);
1257 bss_address_frag.fr_address = bss_vma;
1259 #else /* ! OBJ_BOUT */
1260 bss_address_frag.fr_address = (H_GET_TEXT_SIZE (&headers) +
1261 H_GET_DATA_SIZE (&headers));
1263 #endif /* ! OBJ_BOUT */
1265 /* Slide all the frags */
1268 relax_addressT slide = bss_address_frag.fr_address;
1270 for (fragP = bss_frag_root; fragP; fragP = fragP->fr_next)
1272 fragP->fr_address += slide;
1273 } /* for each bss frag */
1277 H_SET_BSS_SIZE (&headers,
1278 bss_last_frag->fr_address - bss_frag_root->fr_address);
1280 H_SET_BSS_SIZE (&headers, 0);
1282 #endif /* ! BFD_ASSEMBLER && ! BFD */
1284 #if defined (BFD_ASSEMBLER) || !defined (BFD)
1286 #ifdef BFD_ASSEMBLER
1294 extern PTR bfd_alloc PARAMS ((bfd *, size_t));
1296 /* Count symbols. We can't rely on a count made by the loop in
1297 write_object_file, because *_frob_file may add a new symbol or
1300 for (symp = symbol_rootP; symp; symp = symbol_next (symp))
1307 asympp = (asymbol **) bfd_alloc (stdoutput,
1308 nsyms * sizeof (asymbol *));
1309 symp = symbol_rootP;
1310 for (i = 0; i < nsyms; i++, symp = symbol_next (symp))
1312 asympp[i] = symp->bsym;
1318 result = bfd_set_symtab (stdoutput, asympp, nsyms);
1319 assert (result == true);
1320 symbol_table_frozen = 1;
1324 /* Finish the subsegments. After every sub-segment, we fake an
1325 ".align ...". This conforms to BSD4.2 brane-damage. We then fake
1326 ".fill 0" because that is the kind of frag that requires least
1327 thought. ".align" frags like to have a following frag since that
1328 makes calculating their intended length trivial. */
1330 #ifndef SUB_SEGMENT_ALIGN
1331 #ifdef BFD_ASSEMBLER
1332 #define SUB_SEGMENT_ALIGN(SEG) (0)
1334 #define SUB_SEGMENT_ALIGN(SEG) (2)
1341 struct frchain *frchainP;
1343 for (frchainP = frchain_root; frchainP; frchainP = frchainP->frch_next)
1345 subseg_set (frchainP->frch_seg, frchainP->frch_subseg);
1346 frag_align (SUB_SEGMENT_ALIGN (now_seg), NOP_OPCODE, 0);
1348 /* frag_align will have left a new frag.
1349 Use this last frag for an empty ".fill".
1351 For this segment ...
1352 Create a last frag. Do not leave a "being filled in frag". */
1354 frag_wane (frag_now);
1355 frag_now->fr_fix = 0;
1356 know (frag_now->fr_next == NULL);
1360 /* Write the object file. */
1363 write_object_file ()
1365 #if ! defined (BFD_ASSEMBLER) || ! defined (WORKING_DOT_WORD)
1366 fragS *fragP; /* Track along all frags. */
1369 /* Do we really want to write it? */
1371 int n_warns, n_errs;
1372 n_warns = had_warnings ();
1373 n_errs = had_errors ();
1374 /* The -Z flag indicates that an object file should be generated,
1375 regardless of warnings and errors. */
1376 if (flag_always_generate_output)
1378 if (n_warns || n_errs)
1379 as_warn (_("%d error%s, %d warning%s, generating bad object file.\n"),
1380 n_errs, n_errs == 1 ? "" : "s",
1381 n_warns, n_warns == 1 ? "" : "s");
1386 as_fatal (_("%d error%s, %d warning%s, no object file generated.\n"),
1387 n_errs, n_errs == 1 ? "" : "s",
1388 n_warns, n_warns == 1 ? "" : "s");
1393 /* Under VMS we try to be compatible with VAX-11 "C". Thus, we call
1394 a routine to check for the definition of the procedure "_main",
1395 and if so -- fix it up so that it can be program entry point. */
1396 vms_check_for_main ();
1397 #endif /* OBJ_VMS */
1399 /* From now on, we don't care about sub-segments. Build one frag chain
1400 for each segment. Linked thru fr_next. */
1402 #ifdef BFD_ASSEMBLER
1403 /* Remove the sections created by gas for its own purposes. */
1405 asection **seclist, *sec;
1408 seclist = &stdoutput->sections;
1409 while (seclist && *seclist)
1412 while (sec == reg_section || sec == expr_section)
1416 stdoutput->section_count--;
1421 seclist = &(*seclist)->next;
1424 bfd_map_over_sections (stdoutput, renumber_sections, &i);
1427 bfd_map_over_sections (stdoutput, chain_frchains_together, (char *) 0);
1429 remove_subsegs (frchain_root, SEG_TEXT, &text_frag_root, &text_last_frag);
1430 remove_subsegs (data0_frchainP, SEG_DATA, &data_frag_root, &data_last_frag);
1431 remove_subsegs (bss0_frchainP, SEG_BSS, &bss_frag_root, &bss_last_frag);
1434 /* We have two segments. If user gave -R flag, then we must put the
1435 data frags into the text segment. Do this before relaxing so
1436 we know to take advantage of -R and make shorter addresses. */
1437 #if !defined (OBJ_AOUT) || defined (BFD_ASSEMBLER)
1438 if (flag_readonly_data_in_text)
1440 merge_data_into_text ();
1444 #ifdef BFD_ASSEMBLER
1445 bfd_map_over_sections (stdoutput, relax_and_size_seg, (char *) 0);
1447 relax_and_size_all_segments ();
1448 #endif /* BFD_ASSEMBLER */
1450 #ifndef BFD_ASSEMBLER
1453 * Crawl the symbol chain.
1455 * For each symbol whose value depends on a frag, take the address of
1456 * that frag and subsume it into the value of the symbol.
1457 * After this, there is just one way to lookup a symbol value.
1458 * Values are left in their final state for object file emission.
1459 * We adjust the values of 'L' local symbols, even if we do
1460 * not intend to emit them to the object file, because their values
1461 * are needed for fix-ups.
1463 * Unless we saw a -L flag, remove all symbols that begin with 'L'
1464 * from the symbol chain. (They are still pointed to by the fixes.)
1466 * Count the remaining symbols.
1467 * Assign a symbol number to each symbol.
1468 * Count the number of string-table chars we will emit.
1469 * Put this info into the headers as appropriate.
1472 know (zero_address_frag.fr_address == 0);
1473 string_byte_count = sizeof (string_byte_count);
1475 obj_crawl_symbol_chain (&headers);
1477 if (string_byte_count == sizeof (string_byte_count))
1478 string_byte_count = 0;
1480 H_SET_STRING_SIZE (&headers, string_byte_count);
1483 * Addresses of frags now reflect addresses we use in the object file.
1484 * Symbol values are correct.
1485 * Scan the frags, converting any ".org"s and ".align"s to ".fill"s.
1486 * Also converting any machine-dependent frags using md_convert_frag();
1488 subseg_change (SEG_TEXT, 0);
1490 for (fragP = text_frag_root; fragP; fragP = fragP->fr_next)
1492 /* At this point we have linked all the frags into a single
1493 chain. However, cvt_frag_to_fill may call md_convert_frag
1494 which may call fix_new. We need to ensure that fix_new adds
1495 the fixup to the right section. */
1496 if (fragP == data_frag_root)
1497 subseg_change (SEG_DATA, 0);
1499 cvt_frag_to_fill (&headers, SEG_TEXT, fragP);
1501 /* Some assert macros don't work with # directives mixed in. */
1503 if (!(fragP->fr_next == NULL
1505 || fragP->fr_next == data_frag_root
1507 || ((fragP->fr_next->fr_address - fragP->fr_address)
1508 == (fragP->fr_fix + fragP->fr_offset * fragP->fr_var))))
1512 #endif /* ! BFD_ASSEMBLER */
1514 #ifndef WORKING_DOT_WORD
1516 struct broken_word *lie;
1517 struct broken_word **prevP;
1519 prevP = &broken_words;
1520 for (lie = broken_words; lie; lie = lie->next_broken_word)
1525 subseg_change (lie->seg, lie->subseg);
1526 exp.X_op = O_subtract;
1527 exp.X_add_symbol = lie->add;
1528 exp.X_op_symbol = lie->sub;
1529 exp.X_add_number = lie->addnum;
1530 #ifdef BFD_ASSEMBLER
1531 #ifdef TC_CONS_FIX_NEW
1532 TC_CONS_FIX_NEW (lie->frag,
1533 lie->word_goes_here - lie->frag->fr_literal,
1536 fix_new_exp (lie->frag,
1537 lie->word_goes_here - lie->frag->fr_literal,
1538 2, &exp, 0, BFD_RELOC_16);
1541 #if defined(TC_SPARC) || defined(TC_A29K) || defined(NEED_FX_R_TYPE)
1542 fix_new_exp (lie->frag,
1543 lie->word_goes_here - lie->frag->fr_literal,
1544 2, &exp, 0, NO_RELOC);
1547 fix_new_ns32k_exp (lie->frag,
1548 lie->word_goes_here - lie->frag->fr_literal,
1549 2, &exp, 0, 0, 2, 0, 0);
1551 fix_new_exp (lie->frag,
1552 lie->word_goes_here - lie->frag->fr_literal,
1554 #endif /* TC_NS32K */
1555 #endif /* TC_SPARC|TC_A29K|NEED_FX_R_TYPE */
1556 #endif /* BFD_ASSEMBLER */
1557 *prevP = lie->next_broken_word;
1560 prevP = &(lie->next_broken_word);
1562 for (lie = broken_words; lie;)
1564 struct broken_word *untruth;
1566 addressT table_addr;
1567 addressT from_addr, to_addr;
1570 subseg_change (lie->seg, lie->subseg);
1571 fragP = lie->dispfrag;
1573 /* Find out how many broken_words go here. */
1575 for (untruth = lie; untruth && untruth->dispfrag == fragP; untruth = untruth->next_broken_word)
1576 if (untruth->added == 1)
1579 table_ptr = lie->dispfrag->fr_opcode;
1580 table_addr = lie->dispfrag->fr_address + (table_ptr - lie->dispfrag->fr_literal);
1581 /* Create the jump around the long jumps. This is a short
1582 jump from table_ptr+0 to table_ptr+n*long_jump_size. */
1583 from_addr = table_addr;
1584 to_addr = table_addr + md_short_jump_size + n * md_long_jump_size;
1585 md_create_short_jump (table_ptr, from_addr, to_addr, lie->dispfrag, lie->add);
1586 table_ptr += md_short_jump_size;
1587 table_addr += md_short_jump_size;
1589 for (m = 0; lie && lie->dispfrag == fragP; m++, lie = lie->next_broken_word)
1591 if (lie->added == 2)
1593 /* Patch the jump table */
1594 /* This is the offset from ??? to table_ptr+0 */
1595 to_addr = table_addr - S_GET_VALUE (lie->sub);
1596 #ifdef BFD_ASSEMBLER
1597 to_addr -= lie->sub->sy_frag->fr_address;
1599 md_number_to_chars (lie->word_goes_here, to_addr, 2);
1600 for (untruth = lie->next_broken_word; untruth && untruth->dispfrag == fragP; untruth = untruth->next_broken_word)
1602 if (untruth->use_jump == lie)
1603 md_number_to_chars (untruth->word_goes_here, to_addr, 2);
1606 /* Install the long jump */
1607 /* this is a long jump from table_ptr+0 to the final target */
1608 from_addr = table_addr;
1609 to_addr = S_GET_VALUE (lie->add) + lie->addnum;
1610 #ifdef BFD_ASSEMBLER
1611 to_addr += lie->add->sy_frag->fr_address;
1613 md_create_long_jump (table_ptr, from_addr, to_addr, lie->dispfrag, lie->add);
1614 table_ptr += md_long_jump_size;
1615 table_addr += md_long_jump_size;
1619 #endif /* not WORKING_DOT_WORD */
1621 #ifndef BFD_ASSEMBLER
1624 char *the_object_file;
1625 long object_file_size;
1627 * Scan every FixS performing fixups. We had to wait until now to do
1628 * this because md_convert_frag() may have made some fixSs.
1632 subseg_change (SEG_TEXT, 0);
1633 trsize = md_reloc_size * fixup_segment (text_fix_root, SEG_TEXT);
1634 subseg_change (SEG_DATA, 0);
1635 drsize = md_reloc_size * fixup_segment (data_fix_root, SEG_DATA);
1636 H_SET_RELOCATION_SIZE (&headers, trsize, drsize);
1638 /* FIXME move this stuff into the pre-write-hook */
1639 H_SET_MAGIC_NUMBER (&headers, magic_number_for_object_file);
1640 H_SET_ENTRY_POINT (&headers, 0);
1642 obj_pre_write_hook (&headers); /* extra coff stuff */
1644 object_file_size = H_GET_FILE_SIZE (&headers);
1645 next_object_file_charP = the_object_file = xmalloc (object_file_size);
1647 output_file_create (out_file_name);
1649 obj_header_append (&next_object_file_charP, &headers);
1651 know ((next_object_file_charP - the_object_file) == H_GET_HEADER_SIZE (&headers));
1656 for (fragP = text_frag_root; fragP; fragP = fragP->fr_next)
1658 register long count;
1659 register char *fill_literal;
1660 register long fill_size;
1663 know (fragP->fr_type == rs_fill);
1664 append (&next_object_file_charP, fragP->fr_literal, (unsigned long) fragP->fr_fix);
1665 fill_literal = fragP->fr_literal + fragP->fr_fix;
1666 fill_size = fragP->fr_var;
1667 know (fragP->fr_offset >= 0);
1669 for (count = fragP->fr_offset; count; count--)
1671 append (&next_object_file_charP, fill_literal, (unsigned long) fill_size);
1674 } /* for each code frag. */
1676 know ((next_object_file_charP - the_object_file) == (H_GET_HEADER_SIZE (&headers) + H_GET_TEXT_SIZE (&headers) + H_GET_DATA_SIZE (&headers)));
1681 obj_emit_relocations (&next_object_file_charP, text_fix_root, (relax_addressT) 0);
1682 know ((next_object_file_charP - the_object_file) == (H_GET_HEADER_SIZE (&headers) + H_GET_TEXT_SIZE (&headers) + H_GET_DATA_SIZE (&headers) + H_GET_TEXT_RELOCATION_SIZE (&headers)));
1684 /* Make addresses in data relocation directives relative to beginning of
1685 * first data fragment, not end of last text fragment: alignment of the
1686 * start of the data segment may place a gap between the segments.
1688 obj_emit_relocations (&next_object_file_charP, data_fix_root, data0_frchainP->frch_root->fr_address);
1690 obj_emit_relocations (&next_object_file_charP, data_fix_root, text_last_frag->fr_address);
1691 #endif /* TC_I960 */
1693 know ((next_object_file_charP - the_object_file) == (H_GET_HEADER_SIZE (&headers) + H_GET_TEXT_SIZE (&headers) + H_GET_DATA_SIZE (&headers) + H_GET_TEXT_RELOCATION_SIZE (&headers) + H_GET_DATA_RELOCATION_SIZE (&headers)));
1696 * Emit line number entries.
1698 OBJ_EMIT_LINENO (&next_object_file_charP, lineno_rootP, the_object_file);
1699 know ((next_object_file_charP - the_object_file) == (H_GET_HEADER_SIZE (&headers) + H_GET_TEXT_SIZE (&headers) + H_GET_DATA_SIZE (&headers) + H_GET_TEXT_RELOCATION_SIZE (&headers) + H_GET_DATA_RELOCATION_SIZE (&headers) + H_GET_LINENO_SIZE (&headers)));
1704 obj_emit_symbols (&next_object_file_charP, symbol_rootP);
1705 know ((next_object_file_charP - the_object_file) == (H_GET_HEADER_SIZE (&headers) + H_GET_TEXT_SIZE (&headers) + H_GET_DATA_SIZE (&headers) + H_GET_TEXT_RELOCATION_SIZE (&headers) + H_GET_DATA_RELOCATION_SIZE (&headers) + H_GET_LINENO_SIZE (&headers) + H_GET_SYMBOL_TABLE_SIZE (&headers)));
1711 if (string_byte_count > 0)
1713 obj_emit_strings (&next_object_file_charP);
1714 } /* only if we have a string table */
1717 bfd_seek (stdoutput, 0, 0);
1718 bfd_write (the_object_file, 1, object_file_size, stdoutput);
1721 /* Write the data to the file */
1722 output_file_append (the_object_file, object_file_size, out_file_name);
1723 free (the_object_file);
1725 } /* non vms output */
1728 * Now do the VMS-dependent part of writing the object file
1730 vms_write_object_file (H_GET_TEXT_SIZE (&headers),
1731 H_GET_DATA_SIZE (&headers),
1732 H_GET_BSS_SIZE (&headers),
1733 text_frag_root, data_frag_root);
1734 #endif /* OBJ_VMS */
1735 #else /* BFD_ASSEMBLER */
1737 /* Resolve symbol values. This needs to be done before processing
1743 for (symp = symbol_rootP; symp; symp = symbol_next (symp))
1744 if (!symp->sy_resolved)
1745 resolve_symbol_value (symp, 1);
1750 #ifdef tc_frob_file_before_adjust
1751 tc_frob_file_before_adjust ();
1753 #ifdef obj_frob_file_before_adjust
1754 obj_frob_file_before_adjust ();
1757 bfd_map_over_sections (stdoutput, adjust_reloc_syms, (char *)0);
1759 /* Set up symbol table, and write it out. */
1764 for (symp = symbol_rootP; symp; symp = symbol_next (symp))
1769 if (symp->sy_mri_common)
1771 if (S_IS_EXTERNAL (symp))
1772 as_bad (_("%s: global symbols not supported in common sections"),
1774 symbol_remove (symp, &symbol_rootP, &symbol_lastP);
1778 name = S_GET_NAME (symp);
1781 const char *name2 = decode_local_label_name ((char *)S_GET_NAME (symp));
1782 /* They only differ if `name' is a fb or dollar local
1784 if (name2 != name && ! S_IS_DEFINED (symp))
1785 as_bad (_("local label %s is not defined"), name2);
1788 /* Do it again, because adjust_reloc_syms might introduce
1789 more symbols. They'll probably only be section symbols,
1790 but they'll still need to have the values computed. */
1791 if (! symp->sy_resolved)
1793 if (symp->sy_value.X_op == O_constant)
1795 /* This is the normal case; skip the call. */
1798 + symp->sy_frag->fr_address));
1799 symp->sy_resolved = 1;
1802 resolve_symbol_value (symp, 1);
1805 /* Skip symbols which were equated to undefined or common
1807 if (symp->sy_value.X_op == O_symbol
1808 && (! S_IS_DEFINED (symp) || S_IS_COMMON (symp)))
1810 symbol_remove (symp, &symbol_rootP, &symbol_lastP);
1814 /* So far, common symbols have been treated like undefined symbols.
1815 Put them in the common section now. */
1816 if (S_IS_DEFINED (symp) == 0
1817 && S_GET_VALUE (symp) != 0)
1818 S_SET_SEGMENT (symp, bfd_com_section_ptr);
1820 printf ("symbol `%s'\n\t@%x: value=%d flags=%x seg=%s\n",
1821 S_GET_NAME (symp), symp,
1824 segment_name (symp->bsym->section));
1827 #ifdef obj_frob_symbol
1828 obj_frob_symbol (symp, punt);
1830 #ifdef tc_frob_symbol
1831 if (! punt || symp->sy_used_in_reloc)
1832 tc_frob_symbol (symp, punt);
1835 /* If we don't want to keep this symbol, splice it out of
1836 the chain now. If EMIT_SECTION_SYMBOLS is 0, we never
1837 want section symbols. Otherwise, we skip local symbols
1838 and symbols that the frob_symbol macros told us to punt,
1839 but we keep such symbols if they are used in relocs. */
1840 if ((! EMIT_SECTION_SYMBOLS
1841 && (symp->bsym->flags & BSF_SECTION_SYM) != 0)
1842 /* Note that S_IS_EXTERN and S_IS_LOCAL are not always
1843 opposites. Sometimes the former checks flags and the
1844 latter examines the name... */
1845 || (!S_IS_EXTERN (symp)
1846 && (S_IS_LOCAL (symp) || punt)
1847 && ! symp->sy_used_in_reloc))
1849 symbol_remove (symp, &symbol_rootP, &symbol_lastP);
1850 /* After symbol_remove, symbol_next(symp) still returns
1851 the one that came after it in the chain. So we don't
1852 need to do any extra cleanup work here. */
1857 /* Make sure we really got a value for the symbol. */
1858 if (! symp->sy_resolved)
1860 as_bad (_("can't resolve value for symbol \"%s\""),
1862 symp->sy_resolved = 1;
1865 /* Set the value into the BFD symbol. Up til now the value
1866 has only been kept in the gas symbolS struct. */
1867 symp->bsym->value = S_GET_VALUE (symp);
1873 /* Now do any format-specific adjustments to the symbol table, such
1874 as adding file symbols. */
1875 #ifdef tc_adjust_symtab
1876 tc_adjust_symtab ();
1878 #ifdef obj_adjust_symtab
1879 obj_adjust_symtab ();
1882 /* Now that all the sizes are known, and contents correct, we can
1883 start writing to the file. */
1886 /* If *_frob_file changes the symbol value at this point, it is
1887 responsible for moving the changed value into symp->bsym->value
1888 as well. Hopefully all symbol value changing can be done in
1893 #ifdef obj_frob_file
1897 bfd_map_over_sections (stdoutput, write_relocs, (char *) 0);
1899 #ifdef tc_frob_file_after_relocs
1900 tc_frob_file_after_relocs ();
1902 #ifdef obj_frob_file_after_relocs
1903 obj_frob_file_after_relocs ();
1906 bfd_map_over_sections (stdoutput, write_contents, (char *) 0);
1907 #endif /* BFD_ASSEMBLER */
1914 * Now we have a segment, not a crowd of sub-segments, we can make fr_address
1919 * After this, all frags in this segment have addresses that are correct
1920 * within the segment. Since segments live in different file addresses,
1921 * these frag addresses may not be the same as final object-file addresses.
1924 #ifdef TC_GENERIC_RELAX_TABLE
1926 static int is_dnrange PARAMS ((fragS *, fragS *));
1928 /* Subroutines of relax_segment. */
1934 for (; f1; f1 = f1->fr_next)
1935 if (f1->fr_next == f2)
1940 /* Relax a fragment by scanning TC_GENERIC_RELAX_TABLE. */
1943 relax_frag (fragP, stretch)
1947 const relax_typeS *this_type;
1948 const relax_typeS *start_type;
1949 relax_substateT next_state;
1950 relax_substateT this_state;
1951 long aim, target, growth;
1952 symbolS *symbolP = fragP->fr_symbol;
1953 long offset = fragP->fr_offset;
1954 /* Recompute was_address by undoing "+= stretch" done by relax_segment. */
1955 unsigned long was_address = fragP->fr_address - stretch;
1956 unsigned long address = fragP->fr_address;
1957 const relax_typeS *table = TC_GENERIC_RELAX_TABLE;
1959 this_state = fragP->fr_subtype;
1960 start_type = this_type = table + this_state;
1965 #ifndef DIFF_EXPR_OK
1966 #if !defined (MANY_SEGMENTS) && !defined (BFD_ASSEMBLER)
1967 know ((S_GET_SEGMENT (symbolP) == SEG_ABSOLUTE)
1968 || (S_GET_SEGMENT (symbolP) == SEG_DATA)
1969 || (S_GET_SEGMENT (symbolP) == SEG_BSS)
1970 || (S_GET_SEGMENT (symbolP) == SEG_TEXT));
1972 know (symbolP->sy_frag);
1974 know (!(S_GET_SEGMENT (symbolP) == absolute_section)
1975 || symbolP->sy_frag == &zero_address_frag);
1977 S_GET_VALUE (symbolP)
1978 + symbolP->sy_frag->fr_address;
1980 /* If frag has yet to be reached on this pass,
1981 assume it will move by STRETCH just as we did.
1982 If this is not so, it will be because some frag
1983 between grows, and that will force another pass.
1985 Beware zero-length frags.
1987 There should be a faster way to do this. */
1989 if (symbolP->sy_frag->fr_address >= was_address
1990 && is_dnrange (fragP, symbolP->sy_frag))
1996 aim = target - address - fragP->fr_fix;
1997 #ifdef TC_PCREL_ADJUST
1998 /* Currently only the ns32k family needs this */
1999 aim += TC_PCREL_ADJUST(fragP);
2001 /* This machine doesn't want to use pcrel_adjust.
2002 In that case, pcrel_adjust should be zero. */
2003 /* assert (fragP->fr_targ.ns32k.pcrel_adjust == 0);*/
2005 #ifdef md_prepare_relax_scan /* formerly called M68K_AIM_KLUDGE */
2006 md_prepare_relax_scan (fragP, address, aim, this_state, this_type);
2011 /* Look backwards. */
2012 for (next_state = this_type->rlx_more; next_state;)
2013 if (aim >= this_type->rlx_backward)
2017 /* Grow to next state. */
2018 this_state = next_state;
2019 this_type = table + this_state;
2020 next_state = this_type->rlx_more;
2025 /* Look forwards. */
2026 for (next_state = this_type->rlx_more; next_state;)
2027 if (aim <= this_type->rlx_forward)
2031 /* Grow to next state. */
2032 this_state = next_state;
2033 this_type = table + this_state;
2034 next_state = this_type->rlx_more;
2038 growth = this_type->rlx_length - start_type->rlx_length;
2040 fragP->fr_subtype = this_state;
2044 #endif /* defined (TC_GENERIC_RELAX_TABLE) */
2046 /* Relax_align. Advance location counter to next address that has 'alignment'
2047 lowest order bits all 0s, return size of adjustment made. */
2048 static relax_addressT
2049 relax_align (address, alignment)
2050 register relax_addressT address; /* Address now. */
2051 register int alignment; /* Alignment (binary). */
2053 relax_addressT mask;
2054 relax_addressT new_address;
2056 mask = ~((~0) << alignment);
2057 new_address = (address + mask) & (~mask);
2058 #ifdef LINKER_RELAXING_SHRINKS_ONLY
2060 /* We must provide lots of padding, so the linker can discard it
2061 when needed. The linker will not add extra space, ever. */
2062 new_address += (1 << alignment);
2064 return (new_address - address);
2068 relax_segment (segment_frag_root, segment)
2069 struct frag *segment_frag_root;
2072 register struct frag *fragP;
2073 register relax_addressT address;
2074 #if !defined (MANY_SEGMENTS) && !defined (BFD_ASSEMBLER)
2075 know (segment == SEG_DATA || segment == SEG_TEXT || segment == SEG_BSS);
2077 /* In case md_estimate_size_before_relax() wants to make fixSs. */
2078 subseg_change (segment, 0);
2080 /* For each frag in segment: count and store (a 1st guess of)
2083 for (fragP = segment_frag_root; fragP; fragP = fragP->fr_next)
2085 fragP->fr_address = address;
2086 address += fragP->fr_fix;
2088 switch (fragP->fr_type)
2091 address += fragP->fr_offset * fragP->fr_var;
2097 addressT offset = relax_align (address, (int) fragP->fr_offset);
2099 if (fragP->fr_subtype != 0 && offset > fragP->fr_subtype)
2102 if (offset % fragP->fr_var != 0)
2104 as_bad (_("alignment padding (%lu bytes) not a multiple of %ld"),
2105 (unsigned long) offset, (long) fragP->fr_var);
2106 offset -= (offset % fragP->fr_var);
2115 /* Assume .org is nugatory. It will grow with 1st relax. */
2118 case rs_machine_dependent:
2119 address += md_estimate_size_before_relax (fragP, segment);
2122 #ifndef WORKING_DOT_WORD
2123 /* Broken words don't concern us yet */
2124 case rs_broken_word:
2129 /* Initial guess is always 1; doing otherwise can result in
2130 stable solutions that are larger than the minimum. */
2131 address += fragP->fr_offset = 1;
2135 address += eh_frame_estimate_size_before_relax (fragP);
2139 BAD_CASE (fragP->fr_type);
2141 } /* switch(fr_type) */
2142 } /* for each frag in the segment */
2146 long stretch; /* May be any size, 0 or negative. */
2147 /* Cumulative number of addresses we have */
2148 /* relaxed this pass. */
2149 /* We may have relaxed more than one address. */
2150 long stretched; /* Have we stretched on this pass? */
2151 /* This is 'cuz stretch may be zero, when, in fact some piece of code
2152 grew, and another shrank. If a branch instruction doesn't fit anymore,
2153 we could be scrod. */
2157 stretch = stretched = 0;
2158 for (fragP = segment_frag_root; fragP; fragP = fragP->fr_next)
2161 addressT was_address;
2165 was_address = fragP->fr_address;
2166 address = fragP->fr_address += stretch;
2167 symbolP = fragP->fr_symbol;
2168 offset = fragP->fr_offset;
2170 switch (fragP->fr_type)
2172 case rs_fill: /* .fill never relaxes. */
2176 #ifndef WORKING_DOT_WORD
2177 /* JF: This is RMS's idea. I do *NOT* want to be blamed
2178 for it I do not want to write it. I do not want to have
2179 anything to do with it. This is not the proper way to
2180 implement this misfeature. */
2181 case rs_broken_word:
2183 struct broken_word *lie;
2184 struct broken_word *untruth;
2186 /* Yes this is ugly (storing the broken_word pointer
2187 in the symbol slot). Still, this whole chunk of
2188 code is ugly, and I don't feel like doing anything
2189 about it. Think of it as stubbornness in action. */
2191 for (lie = (struct broken_word *) (fragP->fr_symbol);
2192 lie && lie->dispfrag == fragP;
2193 lie = lie->next_broken_word)
2199 offset = (lie->add->sy_frag->fr_address
2200 + S_GET_VALUE (lie->add)
2202 - (lie->sub->sy_frag->fr_address
2203 + S_GET_VALUE (lie->sub)));
2204 if (offset <= -32768 || offset >= 32767)
2206 if (flag_warn_displacement)
2209 sprint_value (buf, (addressT) lie->addnum);
2210 as_warn (_(".word %s-%s+%s didn't fit"),
2211 S_GET_NAME (lie->add),
2212 S_GET_NAME (lie->sub),
2216 if (fragP->fr_subtype == 0)
2218 fragP->fr_subtype++;
2219 growth += md_short_jump_size;
2221 for (untruth = lie->next_broken_word;
2222 untruth && untruth->dispfrag == lie->dispfrag;
2223 untruth = untruth->next_broken_word)
2224 if ((untruth->add->sy_frag == lie->add->sy_frag)
2225 && S_GET_VALUE (untruth->add) == S_GET_VALUE (lie->add))
2228 untruth->use_jump = lie;
2230 growth += md_long_jump_size;
2235 } /* case rs_broken_word */
2240 addressT oldoff, newoff;
2242 oldoff = relax_align (was_address + fragP->fr_fix,
2244 newoff = relax_align (address + fragP->fr_fix,
2247 if (fragP->fr_subtype != 0)
2249 if (oldoff > fragP->fr_subtype)
2251 if (newoff > fragP->fr_subtype)
2255 growth = newoff - oldoff;
2261 long target = offset;
2266 #if !defined (MANY_SEGMENTS) && !defined (BFD_ASSEMBLER)
2267 know ((S_GET_SEGMENT (symbolP) == SEG_ABSOLUTE)
2268 || (S_GET_SEGMENT (symbolP) == SEG_DATA)
2269 || (S_GET_SEGMENT (symbolP) == SEG_TEXT)
2270 || S_GET_SEGMENT (symbolP) == SEG_BSS);
2271 know (symbolP->sy_frag);
2272 know (!(S_GET_SEGMENT (symbolP) == SEG_ABSOLUTE)
2273 || (symbolP->sy_frag == &zero_address_frag));
2275 target += S_GET_VALUE (symbolP)
2276 + symbolP->sy_frag->fr_address;
2277 } /* if we have a symbol */
2279 know (fragP->fr_next);
2280 after = fragP->fr_next->fr_address;
2281 growth = target - after;
2284 /* Growth may be negative, but variable part of frag
2285 cannot have fewer than 0 chars. That is, we can't
2287 as_bad (_("attempt to .org backwards ignored"));
2291 growth -= stretch; /* This is an absolute growth factor */
2298 growth = S_GET_VALUE (symbolP);
2299 if (symbolP->sy_frag != &zero_address_frag
2300 || S_IS_COMMON (symbolP)
2301 || ! S_IS_DEFINED (symbolP))
2302 as_bad_where (fragP->fr_file, fragP->fr_line,
2303 _(".space specifies non-absolute value"));
2304 fragP->fr_symbol = 0;
2307 as_warn (_(".space or .fill with negative value, ignored"));
2315 case rs_machine_dependent:
2316 #ifdef md_relax_frag
2317 growth = md_relax_frag (fragP, stretch);
2319 #ifdef TC_GENERIC_RELAX_TABLE
2320 /* The default way to relax a frag is to look through
2321 TC_GENERIC_RELAX_TABLE. */
2322 growth = relax_frag (fragP, stretch);
2323 #endif /* TC_GENERIC_RELAX_TABLE */
2332 value = resolve_symbol_value (fragP->fr_symbol, 0);
2333 size = sizeof_leb128 (value, fragP->fr_subtype);
2334 growth = size - fragP->fr_offset;
2335 fragP->fr_offset = size;
2340 growth = eh_frame_relax_frag (fragP);
2344 BAD_CASE (fragP->fr_type);
2352 } /* For each frag in the segment. */
2354 while (stretched); /* Until nothing further to relax. */
2358 * We now have valid fr_address'es for each frag.
2362 * All fr_address's are correct, relative to their own segment.
2363 * We have made all the fixS we will ever make.
2365 } /* relax_segment() */
2367 #if defined (BFD_ASSEMBLER) || (!defined (BFD) && !defined (OBJ_VMS))
2369 #ifndef TC_RELOC_RTSYM_LOC_FIXUP
2370 #define TC_RELOC_RTSYM_LOC_FIXUP(X) (1)
2375 Go through all the fixS's in a segment and see which ones can be
2376 handled now. (These consist of fixS where we have since discovered
2377 the value of a symbol, or the address of the frag involved.)
2378 For each one, call md_apply_fix to put the fix into the frag data.
2380 Result is a count of how many relocation structs will be needed to
2381 handle the remaining fixS's that we couldn't completely handle here.
2382 These will be output later by emit_relocations(). */
2385 fixup_segment (fixP, this_segment_type)
2386 register fixS *fixP;
2387 segT this_segment_type; /* N_TYPE bits for segment. */
2389 long seg_reloc_count = 0;
2390 symbolS *add_symbolP;
2391 symbolS *sub_symbolP;
2398 segT add_symbol_segment = absolute_section;
2400 /* If the linker is doing the relaxing, we must not do any fixups.
2402 Well, strictly speaking that's not true -- we could do any that are
2403 PC-relative and don't cross regions that could change size. And for the
2404 i960 (the only machine for which we've got a relaxing linker right now),
2405 we might be able to turn callx/callj into bal anyways in cases where we
2406 know the maximum displacement. */
2409 for (; fixP; fixP = fixP->fx_next)
2411 TC_ADJUST_RELOC_COUNT (fixP, seg_reloc_count);
2412 return seg_reloc_count;
2415 for (; fixP; fixP = fixP->fx_next)
2418 fprintf (stderr, "\nprocessing fixup:\n");
2422 fragP = fixP->fx_frag;
2424 where = fixP->fx_where;
2425 place = fragP->fr_literal + where;
2426 size = fixP->fx_size;
2427 add_symbolP = fixP->fx_addsy;
2428 #ifdef TC_VALIDATE_FIX
2429 TC_VALIDATE_FIX (fixP, this_segment_type, skip);
2431 sub_symbolP = fixP->fx_subsy;
2432 add_number = fixP->fx_offset;
2433 pcrel = fixP->fx_pcrel;
2436 if (add_symbolP != NULL
2437 && add_symbolP->sy_mri_common)
2439 know (add_symbolP->sy_value.X_op == O_symbol);
2440 add_number += S_GET_VALUE (add_symbolP);
2441 fixP->fx_offset = add_number;
2442 add_symbolP = fixP->fx_addsy = add_symbolP->sy_value.X_add_symbol;
2446 add_symbol_segment = S_GET_SEGMENT (add_symbolP);
2450 resolve_symbol_value (sub_symbolP, 1);
2451 if (add_symbolP == NULL || add_symbol_segment == absolute_section)
2453 if (add_symbolP != NULL)
2455 add_number += S_GET_VALUE (add_symbolP);
2457 fixP->fx_addsy = NULL;
2460 /* It's just -sym */
2461 if (S_GET_SEGMENT (sub_symbolP) == absolute_section)
2463 add_number -= S_GET_VALUE (sub_symbolP);
2464 fixP->fx_subsy = NULL;
2467 && S_GET_SEGMENT (sub_symbolP) == this_segment_type)
2469 /* Should try converting to a constant. */
2474 as_bad_where (fixP->fx_file, fixP->fx_line,
2475 _("Negative of non-absolute symbol %s"),
2476 S_GET_NAME (sub_symbolP));
2478 else if (S_GET_SEGMENT (sub_symbolP) == add_symbol_segment
2479 && SEG_NORMAL (add_symbol_segment))
2481 /* Difference of 2 symbols from same segment.
2482 Can't make difference of 2 undefineds: 'value' means
2483 something different for N_UNDF. */
2485 /* Makes no sense to use the difference of 2 arbitrary symbols
2486 as the target of a call instruction. */
2488 as_bad_where (fixP->fx_file, fixP->fx_line,
2489 _("callj to difference of 2 symbols"));
2490 #endif /* TC_I960 */
2491 add_number += S_GET_VALUE (add_symbolP) -
2492 S_GET_VALUE (sub_symbolP);
2495 pcrel = 0; /* No further pcrel processing. */
2497 /* Let the target machine make the final determination
2498 as to whether or not a relocation will be needed to
2499 handle this fixup. */
2500 if (!TC_FORCE_RELOCATION_SECTION (fixP, this_segment_type))
2503 fixP->fx_addsy = NULL;
2504 fixP->fx_subsy = NULL;
2509 /* Different segments in subtraction. */
2510 know (!(S_IS_EXTERNAL (sub_symbolP)
2511 && (S_GET_SEGMENT (sub_symbolP) == absolute_section)));
2513 if ((S_GET_SEGMENT (sub_symbolP) == absolute_section))
2514 add_number -= S_GET_VALUE (sub_symbolP);
2517 else if (S_GET_SEGMENT (sub_symbolP) == this_segment_type
2518 #if 0 /* Do this even if it's already described as pc-relative. For example,
2519 on the m68k, an operand of "pc@(foo-.-2)" should address "foo" in a
2520 pc-relative mode. */
2525 /* Make it pc-relative. */
2526 add_number += (MD_PCREL_FROM_SECTION (fixP, this_segment_type)
2527 - S_GET_VALUE (sub_symbolP));
2534 #ifdef UNDEFINED_DIFFERENCE_OK
2535 /* The PA needs this for PIC code generation. We basically
2536 don't want to do anything if we have the difference of two
2537 symbols at this point. */
2540 /* Leave it alone. */
2543 #ifdef BFD_ASSEMBLER
2544 else if (fixP->fx_r_type == BFD_RELOC_GPREL32
2545 || fixP->fx_r_type == BFD_RELOC_GPREL16)
2547 /* Leave it alone. */
2553 sprint_value (buf, fragP->fr_address + where);
2554 as_bad_where (fixP->fx_file, fixP->fx_line,
2555 _("Subtraction of two symbols in different sections \"%s\" {%s section} - \"%s\" {%s section} at file address %s."),
2556 S_GET_NAME (add_symbolP),
2557 segment_name (S_GET_SEGMENT (add_symbolP)),
2558 S_GET_NAME (sub_symbolP),
2559 segment_name (S_GET_SEGMENT (sub_symbolP)),
2567 if (add_symbol_segment == this_segment_type && pcrel && !plt
2568 && TC_RELOC_RTSYM_LOC_FIXUP (fixP))
2571 * This fixup was made when the symbol's segment was
2572 * SEG_UNKNOWN, but it is now in the local segment.
2573 * So we know how to do the address without relocation.
2576 /* reloc_callj() may replace a 'call' with a 'calls' or a
2577 'bal', in which cases it modifies *fixP as appropriate.
2578 In the case of a 'calls', no further work is required,
2579 and *fixP has been set up to make the rest of the code
2582 #endif /* TC_I960 */
2584 add_number += S_GET_VALUE (add_symbolP);
2585 add_number -= MD_PCREL_FROM_SECTION (fixP, this_segment_type);
2586 pcrel = 0; /* Lie. Don't want further pcrel processing. */
2588 /* Let the target machine make the final determination
2589 as to whether or not a relocation will be needed to
2590 handle this fixup. */
2591 if (!TC_FORCE_RELOCATION (fixP))
2594 fixP->fx_addsy = NULL;
2599 if (add_symbol_segment == absolute_section
2603 /* See comment about reloc_callj() above. */
2605 #endif /* TC_I960 */
2606 add_number += S_GET_VALUE (add_symbolP);
2608 /* Let the target machine make the final determination
2609 as to whether or not a relocation will be needed to
2610 handle this fixup. */
2612 if (!TC_FORCE_RELOCATION (fixP))
2614 fixP->fx_addsy = NULL;
2618 else if (add_symbol_segment == undefined_section
2619 #ifdef BFD_ASSEMBLER
2620 || bfd_is_com_section (add_symbol_segment)
2625 if ((int) fixP->fx_bit_fixP == 13)
2627 /* This is a COBR instruction. They have only a
2628 * 13-bit displacement and are only to be used
2629 * for local branches: flag as error, don't generate
2632 as_bad_where (fixP->fx_file, fixP->fx_line,
2633 _("can't use COBR format with external label"));
2634 fixP->fx_addsy = NULL;
2638 #endif /* TC_I960 */
2642 if (S_IS_COMMON (add_symbolP))
2643 add_number += S_GET_VALUE (add_symbolP);
2644 #endif /* TE_I386AIX */
2645 #endif /* OBJ_COFF */
2651 #if !(defined (TC_V850) && defined (OBJ_ELF))
2652 #if !(defined (TC_M68K) && defined (OBJ_ELF))
2653 #if !defined (TC_I386) || !(defined (OBJ_ELF) || defined (OBJ_COFF)) || defined (TE_PE)
2654 add_number += S_GET_VALUE (add_symbolP);
2664 add_number -= MD_PCREL_FROM_SECTION (fixP, this_segment_type);
2665 if (add_symbolP == 0)
2667 #ifndef BFD_ASSEMBLER
2668 fixP->fx_addsy = &abs_symbol;
2670 fixP->fx_addsy = section_symbol (absolute_section);
2672 fixP->fx_addsy->sy_used_in_reloc = 1;
2677 if (!fixP->fx_bit_fixP && !fixP->fx_no_overflow && size > 0)
2679 if ((size_t) size < sizeof (valueT))
2683 /* set all bits to one */
2686 /* Technically, combining these produces an undefined result
2687 if size is sizeof (valueT), though I think these two
2688 half-way operations should both be defined. And the
2689 compiler should be able to combine them if it's valid on
2690 the host architecture. */
2693 hibit = (valueT) 1 << (size * 8 - 1);
2694 if (((add_number & mask) != 0
2696 && (add_number & hibit) != 0))
2697 && ((add_number & mask) != mask
2698 || (add_number & hibit) == 0))
2700 char buf[50], buf2[50];
2701 sprint_value (buf, fragP->fr_address + where);
2702 if (add_number > 1000)
2703 sprint_value (buf2, add_number);
2705 sprintf (buf2, "%ld", (long) add_number);
2706 as_bad_where (fixP->fx_file, fixP->fx_line,
2707 _("Value of %s too large for field of %d bytes at %s"),
2709 } /* generic error checking */
2711 #ifdef WARN_SIGNED_OVERFLOW_WORD
2712 /* Warn if a .word value is too large when treated as a signed
2713 number. We already know it is not too negative. This is to
2714 catch over-large switches generated by gcc on the 68k. */
2715 if (!flag_signed_overflow_ok
2717 && add_number > 0x7fff)
2718 as_bad_where (fixP->fx_file, fixP->fx_line,
2719 _("Signed .word overflow; switch may be too large; %ld at 0x%lx"),
2721 (unsigned long) (fragP->fr_address + where));
2723 } /* not a bit fix */
2727 #ifdef MD_APPLY_FIX3
2728 md_apply_fix3 (fixP, &add_number, this_segment_type);
2730 #ifdef BFD_ASSEMBLER
2731 md_apply_fix (fixP, &add_number);
2733 md_apply_fix (fixP, add_number);
2737 #ifndef TC_HANDLES_FX_DONE
2738 /* If the tc-* files haven't been converted, assume it's handling
2739 it the old way, where a null fx_addsy means that the fix has
2740 been applied completely, and no further work is needed. */
2741 if (fixP->fx_addsy == 0 && fixP->fx_pcrel == 0)
2745 #ifdef TC_VALIDATE_FIX
2749 fprintf (stderr, "result:\n");
2752 } /* For each fixS in this segment. */
2754 TC_ADJUST_RELOC_COUNT (fixP, seg_reloc_count);
2755 return seg_reloc_count;
2758 #endif /* defined (BFD_ASSEMBLER) || (!defined (BFD) && !defined (OBJ_VMS)) */
2761 number_to_chars_bigendian (buf, val, n)
2766 if ((size_t) n > sizeof (val) || n <= 0)
2770 buf[n] = val & 0xff;
2776 number_to_chars_littleendian (buf, val, n)
2781 if ((size_t) n > sizeof (val) || n <= 0)
2785 *buf++ = val & 0xff;
2791 write_print_statistics (file)
2794 fprintf (stderr, "fixups: %d\n", n_fixups);
2798 extern int indent_level;
2805 fprintf (stderr, "fix %lx %s:%d", (long) fixp, fixp->fx_file, fixp->fx_line);
2807 fprintf (stderr, " pcrel");
2808 if (fixp->fx_pcrel_adjust)
2809 fprintf (stderr, " pcrel_adjust=%d", fixp->fx_pcrel_adjust);
2810 if (fixp->fx_im_disp)
2813 fprintf (stderr, " im_disp=%d", fixp->fx_im_disp);
2815 fprintf (stderr, " im_disp");
2819 fprintf (stderr, " tcbit");
2821 fprintf (stderr, " done");
2822 fprintf (stderr, "\n size=%d frag=%lx where=%ld offset=%lx addnumber=%lx",
2823 fixp->fx_size, (long) fixp->fx_frag, (long) fixp->fx_where,
2824 (long) fixp->fx_offset, (long) fixp->fx_addnumber);
2825 #ifdef BFD_ASSEMBLER
2826 fprintf (stderr, "\n %s (%d)", bfd_get_reloc_code_name (fixp->fx_r_type),
2829 #ifdef NEED_FX_R_TYPE
2830 fprintf (stderr, " r_type=%d", fixp->fx_r_type);
2835 fprintf (stderr, "\n +<");
2836 print_symbol_value_1 (stderr, fixp->fx_addsy);
2837 fprintf (stderr, ">");
2841 fprintf (stderr, "\n -<");
2842 print_symbol_value_1 (stderr, fixp->fx_subsy);
2843 fprintf (stderr, ">");
2845 fprintf (stderr, "\n");
2846 #ifdef TC_FIX_DATA_PRINT
2847 TC_FIX_DATA_PRINT (stderr, fixp);
2851 /* end of write.c */