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