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