Tidy gas/configure.tgt
[external/binutils.git] / gas / dwarf2dbg.c
1 /* dwarf2dbg.c - DWARF2 debug support
2    Copyright (C) 1999-2018 Free Software Foundation, Inc.
3    Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
4
5    This file is part of GAS, the GNU Assembler.
6
7    GAS is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3, or (at your option)
10    any later version.
11
12    GAS is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GAS; see the file COPYING.  If not, write to the Free
19    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20    02110-1301, USA.  */
21
22 /* Logical line numbers can be controlled by the compiler via the
23    following directives:
24
25         .file FILENO "file.c"
26         .loc  FILENO LINENO [COLUMN] [basic_block] [prologue_end] \
27               [epilogue_begin] [is_stmt VALUE] [isa VALUE] \
28               [discriminator VALUE]
29 */
30
31 #include "as.h"
32 #include "safe-ctype.h"
33
34 #ifdef HAVE_LIMITS_H
35 #include <limits.h>
36 #else
37 #ifdef HAVE_SYS_PARAM_H
38 #include <sys/param.h>
39 #endif
40 #ifndef INT_MAX
41 #define INT_MAX (int) (((unsigned) (-1)) >> 1)
42 #endif
43 #endif
44
45 #include "dwarf2dbg.h"
46 #include <filenames.h>
47
48 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
49 /* We need to decide which character to use as a directory separator.
50    Just because HAVE_DOS_BASED_FILE_SYSTEM is defined, it does not
51    necessarily mean that the backslash character is the one to use.
52    Some environments, eg Cygwin, can support both naming conventions.
53    So we use the heuristic that we only need to use the backslash if
54    the path is an absolute path starting with a DOS style drive
55    selector.  eg C: or D:  */
56 # define INSERT_DIR_SEPARATOR(string, offset) \
57   do \
58     { \
59       if (offset > 1 \
60           && string[0] != 0 \
61           && string[1] == ':') \
62        string [offset] = '\\'; \
63       else \
64        string [offset] = '/'; \
65     } \
66   while (0)
67 #else
68 # define INSERT_DIR_SEPARATOR(string, offset) string[offset] = '/'
69 #endif
70
71 #ifndef DWARF2_FORMAT
72 # define DWARF2_FORMAT(SEC) dwarf2_format_32bit
73 #endif
74
75 #ifndef DWARF2_ADDR_SIZE
76 # define DWARF2_ADDR_SIZE(bfd) (bfd_arch_bits_per_address (bfd) / 8)
77 #endif
78
79 #ifndef DWARF2_FILE_NAME
80 #define DWARF2_FILE_NAME(FILENAME, DIRNAME) FILENAME
81 #endif
82
83 #ifndef DWARF2_FILE_TIME_NAME
84 #define DWARF2_FILE_TIME_NAME(FILENAME,DIRNAME) 0
85 #endif
86
87 #ifndef DWARF2_FILE_SIZE_NAME
88 #define DWARF2_FILE_SIZE_NAME(FILENAME,DIRNAME) 0
89 #endif
90
91 #ifndef DWARF2_VERSION
92 #define DWARF2_VERSION 2
93 #endif
94
95 /* The .debug_aranges version has been 2 in DWARF version 2, 3 and 4. */
96 #ifndef DWARF2_ARANGES_VERSION
97 #define DWARF2_ARANGES_VERSION 2
98 #endif
99
100 /* This implementation output version 2 .debug_line information. */
101 #ifndef DWARF2_LINE_VERSION
102 #define DWARF2_LINE_VERSION 2
103 #endif
104
105 #include "subsegs.h"
106
107 #include "dwarf2.h"
108
109 /* Since we can't generate the prolog until the body is complete, we
110    use three different subsegments for .debug_line: one holding the
111    prolog, one for the directory and filename info, and one for the
112    body ("statement program").  */
113 #define DL_PROLOG       0
114 #define DL_FILES        1
115 #define DL_BODY         2
116
117 /* If linker relaxation might change offsets in the code, the DWARF special
118    opcodes and variable-length operands cannot be used.  If this macro is
119    nonzero, use the DW_LNS_fixed_advance_pc opcode instead.  */
120 #ifndef DWARF2_USE_FIXED_ADVANCE_PC
121 # define DWARF2_USE_FIXED_ADVANCE_PC    linkrelax
122 #endif
123
124 /* First special line opcode - leave room for the standard opcodes.
125    Note: If you want to change this, you'll have to update the
126    "standard_opcode_lengths" table that is emitted below in
127    out_debug_line().  */
128 #define DWARF2_LINE_OPCODE_BASE         13
129
130 #ifndef DWARF2_LINE_BASE
131   /* Minimum line offset in a special line info. opcode.  This value
132      was chosen to give a reasonable range of values.  */
133 # define DWARF2_LINE_BASE               -5
134 #endif
135
136 /* Range of line offsets in a special line info. opcode.  */
137 #ifndef DWARF2_LINE_RANGE
138 # define DWARF2_LINE_RANGE              14
139 #endif
140
141 #ifndef DWARF2_LINE_MIN_INSN_LENGTH
142   /* Define the architecture-dependent minimum instruction length (in
143      bytes).  This value should be rather too small than too big.  */
144 # define DWARF2_LINE_MIN_INSN_LENGTH    1
145 #endif
146
147 /* Flag that indicates the initial value of the is_stmt_start flag.  */
148 #define DWARF2_LINE_DEFAULT_IS_STMT     1
149
150 /* Given a special op, return the line skip amount.  */
151 #define SPECIAL_LINE(op) \
152         (((op) - DWARF2_LINE_OPCODE_BASE)%DWARF2_LINE_RANGE + DWARF2_LINE_BASE)
153
154 /* Given a special op, return the address skip amount (in units of
155    DWARF2_LINE_MIN_INSN_LENGTH.  */
156 #define SPECIAL_ADDR(op) (((op) - DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)
157
158 /* The maximum address skip amount that can be encoded with a special op.  */
159 #define MAX_SPECIAL_ADDR_DELTA          SPECIAL_ADDR(255)
160
161 #ifndef TC_PARSE_CONS_RETURN_NONE
162 #define TC_PARSE_CONS_RETURN_NONE BFD_RELOC_NONE
163 #endif
164
165 struct line_entry
166 {
167   struct line_entry *next;
168   symbolS *label;
169   struct dwarf2_line_info loc;
170 };
171
172 /* Don't change the offset of next in line_entry.  set_or_check_view
173    calls in dwarf2_gen_line_info_1 depend on it.  */
174 static char unused[offsetof(struct line_entry, next) ? -1 : 1]
175 ATTRIBUTE_UNUSED;
176
177 struct line_subseg
178 {
179   struct line_subseg *next;
180   subsegT subseg;
181   struct line_entry *head;
182   struct line_entry **ptail;
183   struct line_entry **pmove_tail;
184 };
185
186 struct line_seg
187 {
188   struct line_seg *next;
189   segT seg;
190   struct line_subseg *head;
191   symbolS *text_start;
192   symbolS *text_end;
193 };
194
195 /* Collects data for all line table entries during assembly.  */
196 static struct line_seg *all_segs;
197 static struct line_seg **last_seg_ptr;
198
199 struct file_entry
200 {
201   const char *filename;
202   unsigned int dir;
203 };
204
205 /* Table of files used by .debug_line.  */
206 static struct file_entry *files;
207 static unsigned int files_in_use;
208 static unsigned int files_allocated;
209
210 /* Table of directories used by .debug_line.  */
211 static char **dirs;
212 static unsigned int dirs_in_use;
213 static unsigned int dirs_allocated;
214
215 /* TRUE when we've seen a .loc directive recently.  Used to avoid
216    doing work when there's nothing to do.  */
217 bfd_boolean dwarf2_loc_directive_seen;
218
219 /* TRUE when we're supposed to set the basic block mark whenever a
220    label is seen.  */
221 bfd_boolean dwarf2_loc_mark_labels;
222
223 /* Current location as indicated by the most recent .loc directive.  */
224 static struct dwarf2_line_info current =
225 {
226   1, 1, 0, 0,
227   DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0,
228   0, NULL
229 };
230
231 /* This symbol is used to recognize view number forced resets in loc
232    lists.  */
233 static symbolS *force_reset_view;
234
235 /* This symbol evaluates to an expression that, if nonzero, indicates
236    some view assert check failed.  */
237 static symbolS *view_assert_failed;
238
239 /* The size of an address on the target.  */
240 static unsigned int sizeof_address;
241 \f
242 static unsigned int get_filenum (const char *, unsigned int);
243
244 #ifndef TC_DWARF2_EMIT_OFFSET
245 #define TC_DWARF2_EMIT_OFFSET  generic_dwarf2_emit_offset
246
247 /* Create an offset to .dwarf2_*.  */
248
249 static void
250 generic_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
251 {
252   expressionS exp;
253
254   exp.X_op = O_symbol;
255   exp.X_add_symbol = symbol;
256   exp.X_add_number = 0;
257   emit_expr (&exp, size);
258 }
259 #endif
260
261 /* Find or create (if CREATE_P) an entry for SEG+SUBSEG in ALL_SEGS.  */
262
263 static struct line_subseg *
264 get_line_subseg (segT seg, subsegT subseg, bfd_boolean create_p)
265 {
266   struct line_seg *s = seg_info (seg)->dwarf2_line_seg;
267   struct line_subseg **pss, *lss;
268
269   if (s == NULL)
270     {
271       if (!create_p)
272         return NULL;
273
274       s = XNEW (struct line_seg);
275       s->next = NULL;
276       s->seg = seg;
277       s->head = NULL;
278       *last_seg_ptr = s;
279       last_seg_ptr = &s->next;
280       seg_info (seg)->dwarf2_line_seg = s;
281     }
282   gas_assert (seg == s->seg);
283
284   for (pss = &s->head; (lss = *pss) != NULL ; pss = &lss->next)
285     {
286       if (lss->subseg == subseg)
287         goto found_subseg;
288       if (lss->subseg > subseg)
289         break;
290     }
291
292   lss = XNEW (struct line_subseg);
293   lss->next = *pss;
294   lss->subseg = subseg;
295   lss->head = NULL;
296   lss->ptail = &lss->head;
297   lss->pmove_tail = &lss->head;
298   *pss = lss;
299
300  found_subseg:
301   return lss;
302 }
303
304 /* (Un)reverse the line_entry list starting from H.  */
305
306 static struct line_entry *
307 reverse_line_entry_list (struct line_entry *h)
308 {
309   struct line_entry *p = NULL, *e, *n;
310
311   for (e = h; e; e = n)
312     {
313       n = e->next;
314       e->next = p;
315       p = e;
316     }
317   return p;
318 }
319
320 /* Compute the view for E based on the previous entry P.  If we
321    introduce an (undefined) view symbol for P, and H is given (P must
322    be the tail in this case), introduce view symbols for earlier list
323    entries as well, until one of them is constant.  */
324
325 static void
326 set_or_check_view (struct line_entry *e, struct line_entry *p,
327                    struct line_entry *h)
328 {
329   expressionS viewx;
330
331   memset (&viewx, 0, sizeof (viewx));
332   viewx.X_unsigned = 1;
333
334   /* First, compute !(E->label > P->label), to tell whether or not
335      we're to reset the view number.  If we can't resolve it to a
336      constant, keep it symbolic.  */
337   if (!p || (e->loc.view == force_reset_view && force_reset_view))
338     {
339       viewx.X_op = O_constant;
340       viewx.X_add_number = 0;
341       viewx.X_add_symbol = NULL;
342       viewx.X_op_symbol = NULL;
343     }
344   else
345     {
346       viewx.X_op = O_gt;
347       viewx.X_add_number = 0;
348       viewx.X_add_symbol = e->label;
349       viewx.X_op_symbol = p->label;
350       resolve_expression (&viewx);
351       if (viewx.X_op == O_constant)
352         viewx.X_add_number = !viewx.X_add_number;
353       else
354         {
355           viewx.X_add_symbol = make_expr_symbol (&viewx);
356           viewx.X_add_number = 0;
357           viewx.X_op_symbol = NULL;
358           viewx.X_op = O_logical_not;
359         }
360     }
361
362   if (S_IS_DEFINED (e->loc.view) && symbol_constant_p (e->loc.view))
363     {
364       expressionS *value = symbol_get_value_expression (e->loc.view);
365       /* We can't compare the view numbers at this point, because in
366          VIEWX we've only determined whether we're to reset it so
367          far.  */
368       if (viewx.X_op == O_constant)
369         {
370           if (!value->X_add_number != !viewx.X_add_number)
371             as_bad (_("view number mismatch"));
372         }
373       /* Record the expression to check it later.  It is the result of
374          a logical not, thus 0 or 1.  We just add up all such deferred
375          expressions, and resolve it at the end.  */
376       else if (!value->X_add_number)
377         {
378           symbolS *deferred = make_expr_symbol (&viewx);
379           if (view_assert_failed)
380             {
381               expressionS chk;
382               memset (&chk, 0, sizeof (chk));
383               chk.X_unsigned = 1;
384               chk.X_op = O_add;
385               chk.X_add_number = 0;
386               chk.X_add_symbol = view_assert_failed;
387               chk.X_op_symbol = deferred;
388               deferred = make_expr_symbol (&chk);
389             }
390           view_assert_failed = deferred;
391         }
392     }
393
394   if (viewx.X_op != O_constant || viewx.X_add_number)
395     {
396       expressionS incv;
397
398       if (!p->loc.view)
399         {
400           p->loc.view = symbol_temp_make ();
401           gas_assert (!S_IS_DEFINED (p->loc.view));
402         }
403
404       memset (&incv, 0, sizeof (incv));
405       incv.X_unsigned = 1;
406       incv.X_op = O_symbol;
407       incv.X_add_symbol = p->loc.view;
408       incv.X_add_number = 1;
409
410       if (viewx.X_op == O_constant)
411         {
412           gas_assert (viewx.X_add_number == 1);
413           viewx = incv;
414         }
415       else
416         {
417           viewx.X_add_symbol = make_expr_symbol (&viewx);
418           viewx.X_add_number = 0;
419           viewx.X_op_symbol = make_expr_symbol (&incv);
420           viewx.X_op = O_multiply;
421         }
422     }
423
424   if (!S_IS_DEFINED (e->loc.view))
425     {
426       symbol_set_value_expression (e->loc.view, &viewx);
427       S_SET_SEGMENT (e->loc.view, absolute_section);
428       symbol_set_frag (e->loc.view, &zero_address_frag);
429     }
430
431   /* Define and attempt to simplify any earlier views needed to
432      compute E's.  */
433   if (h && p && p->loc.view && !S_IS_DEFINED (p->loc.view))
434     {
435       struct line_entry *h2;
436       /* Reverse the list to avoid quadratic behavior going backwards
437          in a single-linked list.  */
438       struct line_entry *r = reverse_line_entry_list (h);
439
440       gas_assert (r == p);
441       /* Set or check views until we find a defined or absent view.  */
442       do
443         set_or_check_view (r, r->next, NULL);
444       while (r->next && r->next->loc.view && !S_IS_DEFINED (r->next->loc.view)
445              && (r = r->next));
446
447       /* Unreverse the list, so that we can go forward again.  */
448       h2 = reverse_line_entry_list (p);
449       gas_assert (h2 == h);
450
451       /* Starting from the last view we just defined, attempt to
452          simplify the view expressions, until we do so to P.  */
453       do
454         {
455           gas_assert (S_IS_DEFINED (r->loc.view));
456           resolve_expression (symbol_get_value_expression (r->loc.view));
457         }
458       while (r != p && (r = r->next));
459
460       /* Now that we've defined and computed all earlier views that might
461          be needed to compute E's, attempt to simplify it.  */
462       resolve_expression (symbol_get_value_expression (e->loc.view));
463     }
464 }
465
466 /* Record an entry for LOC occurring at LABEL.  */
467
468 static void
469 dwarf2_gen_line_info_1 (symbolS *label, struct dwarf2_line_info *loc)
470 {
471   struct line_subseg *lss;
472   struct line_entry *e;
473
474   e = XNEW (struct line_entry);
475   e->next = NULL;
476   e->label = label;
477   e->loc = *loc;
478
479   lss = get_line_subseg (now_seg, now_subseg, TRUE);
480
481   if (loc->view)
482     set_or_check_view (e,
483                        !lss->head ? NULL : (struct line_entry *)lss->ptail,
484                        lss->head);
485
486   *lss->ptail = e;
487   lss->ptail = &e->next;
488 }
489
490 /* Record an entry for LOC occurring at OFS within the current fragment.  */
491
492 void
493 dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc)
494 {
495   static unsigned int line = -1;
496   static unsigned int filenum = -1;
497
498   symbolS *sym;
499
500   /* Early out for as-yet incomplete location information.  */
501   if (loc->filenum == 0 || loc->line == 0)
502     return;
503
504   /* Don't emit sequences of line symbols for the same line when the
505      symbols apply to assembler code.  It is necessary to emit
506      duplicate line symbols when a compiler asks for them, because GDB
507      uses them to determine the end of the prologue.  */
508   if (debug_type == DEBUG_DWARF2
509       && line == loc->line && filenum == loc->filenum)
510     return;
511
512   line = loc->line;
513   filenum = loc->filenum;
514
515   if (linkrelax)
516     {
517       char name[120];
518
519       /* Use a non-fake name for the line number location,
520          so that it can be referred to by relocations.  */
521       sprintf (name, ".Loc.%u.%u", line, filenum);
522       sym = symbol_new (name, now_seg, ofs, frag_now);
523     }
524   else
525     sym = symbol_temp_new (now_seg, ofs, frag_now);
526   dwarf2_gen_line_info_1 (sym, loc);
527 }
528
529 /* Returns the current source information.  If .file directives have
530    been encountered, the info for the corresponding source file is
531    returned.  Otherwise, the info for the assembly source file is
532    returned.  */
533
534 void
535 dwarf2_where (struct dwarf2_line_info *line)
536 {
537   if (debug_type == DEBUG_DWARF2)
538     {
539       const char *filename;
540
541       memset (line, 0, sizeof (*line));
542       filename = as_where (&line->line);
543       line->filenum = get_filenum (filename, 0);
544       line->column = 0;
545       line->flags = DWARF2_FLAG_IS_STMT;
546       line->isa = current.isa;
547       line->discriminator = current.discriminator;
548       line->view = NULL;
549     }
550   else
551     *line = current;
552 }
553
554 /* A hook to allow the target backend to inform the line number state
555    machine of isa changes when assembler debug info is enabled.  */
556
557 void
558 dwarf2_set_isa (unsigned int isa)
559 {
560   current.isa = isa;
561 }
562
563 /* Called for each machine instruction, or relatively atomic group of
564    machine instructions (ie built-in macro).  The instruction or group
565    is SIZE bytes in length.  If dwarf2 line number generation is called
566    for, emit a line statement appropriately.  */
567
568 void
569 dwarf2_emit_insn (int size)
570 {
571   struct dwarf2_line_info loc;
572
573   if (debug_type != DEBUG_DWARF2
574       ? !dwarf2_loc_directive_seen
575       : !seen_at_least_1_file ())
576     return;
577
578   dwarf2_where (&loc);
579
580   dwarf2_gen_line_info (frag_now_fix () - size, &loc);
581   dwarf2_consume_line_info ();
582 }
583
584 /* Move all previously-emitted line entries for the current position by
585    DELTA bytes.  This function cannot be used to move the same entries
586    twice.  */
587
588 void
589 dwarf2_move_insn (int delta)
590 {
591   struct line_subseg *lss;
592   struct line_entry *e;
593   valueT now;
594
595   if (delta == 0)
596     return;
597
598   lss = get_line_subseg (now_seg, now_subseg, FALSE);
599   if (!lss)
600     return;
601
602   now = frag_now_fix ();
603   while ((e = *lss->pmove_tail))
604     {
605       if (S_GET_VALUE (e->label) == now)
606         S_SET_VALUE (e->label, now + delta);
607       lss->pmove_tail = &e->next;
608     }
609 }
610
611 /* Called after the current line information has been either used with
612    dwarf2_gen_line_info or saved with a machine instruction for later use.
613    This resets the state of the line number information to reflect that
614    it has been used.  */
615
616 void
617 dwarf2_consume_line_info (void)
618 {
619   /* Unless we generate DWARF2 debugging information for each
620      assembler line, we only emit one line symbol for one LOC.  */
621   dwarf2_loc_directive_seen = FALSE;
622
623   current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK
624                      | DWARF2_FLAG_PROLOGUE_END
625                      | DWARF2_FLAG_EPILOGUE_BEGIN);
626   current.discriminator = 0;
627 }
628
629 /* Called for each (preferably code) label.  If dwarf2_loc_mark_labels
630    is enabled, emit a basic block marker.  */
631
632 void
633 dwarf2_emit_label (symbolS *label)
634 {
635   struct dwarf2_line_info loc;
636
637   if (!dwarf2_loc_mark_labels)
638     return;
639   if (S_GET_SEGMENT (label) != now_seg)
640     return;
641   if (!(bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE))
642     return;
643   if (files_in_use == 0 && debug_type != DEBUG_DWARF2)
644     return;
645
646   dwarf2_where (&loc);
647
648   loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
649
650   dwarf2_gen_line_info_1 (label, &loc);
651   dwarf2_consume_line_info ();
652 }
653
654 /* Get a .debug_line file number for FILENAME.  If NUM is nonzero,
655    allocate it on that file table slot, otherwise return the first
656    empty one.  */
657
658 static unsigned int
659 get_filenum (const char *filename, unsigned int num)
660 {
661   static unsigned int last_used, last_used_dir_len;
662   const char *file;
663   size_t dir_len;
664   unsigned int i, dir;
665
666   if (num == 0 && last_used)
667     {
668       if (! files[last_used].dir
669           && filename_cmp (filename, files[last_used].filename) == 0)
670         return last_used;
671       if (files[last_used].dir
672           && filename_ncmp (filename, dirs[files[last_used].dir],
673                             last_used_dir_len) == 0
674           && IS_DIR_SEPARATOR (filename [last_used_dir_len])
675           && filename_cmp (filename + last_used_dir_len + 1,
676                            files[last_used].filename) == 0)
677         return last_used;
678     }
679
680   file = lbasename (filename);
681   /* Don't make empty string from / or A: from A:/ .  */
682 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
683   if (file <= filename + 3)
684     file = filename;
685 #else
686   if (file == filename + 1)
687     file = filename;
688 #endif
689   dir_len = file - filename;
690
691   dir = 0;
692   if (dir_len)
693     {
694 #ifndef DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
695       --dir_len;
696 #endif
697       for (dir = 1; dir < dirs_in_use; ++dir)
698         if (filename_ncmp (filename, dirs[dir], dir_len) == 0
699             && dirs[dir][dir_len] == '\0')
700           break;
701
702       if (dir >= dirs_in_use)
703         {
704           if (dir >= dirs_allocated)
705             {
706               dirs_allocated = dir + 32;
707               dirs = XRESIZEVEC (char *, dirs, dirs_allocated);
708             }
709
710           dirs[dir] = xmemdup0 (filename, dir_len);
711           dirs_in_use = dir + 1;
712         }
713     }
714
715   if (num == 0)
716     {
717       for (i = 1; i < files_in_use; ++i)
718         if (files[i].dir == dir
719             && files[i].filename
720             && filename_cmp (file, files[i].filename) == 0)
721           {
722             last_used = i;
723             last_used_dir_len = dir_len;
724             return i;
725           }
726     }
727   else
728     i = num;
729
730   if (i >= files_allocated)
731     {
732       unsigned int old = files_allocated;
733
734       files_allocated = i + 32;
735       files = XRESIZEVEC (struct file_entry, files, files_allocated);
736
737       memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
738     }
739
740   files[i].filename = num ? file : xstrdup (file);
741   files[i].dir = dir;
742   if (files_in_use < i + 1)
743     files_in_use = i + 1;
744   last_used = i;
745   last_used_dir_len = dir_len;
746
747   return i;
748 }
749
750 /* Handle two forms of .file directive:
751    - Pass .file "source.c" to s_app_file
752    - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
753
754    If an entry is added to the file table, return a pointer to the filename.  */
755
756 char *
757 dwarf2_directive_filename (void)
758 {
759   offsetT num;
760   char *filename;
761   int filename_len;
762
763   /* Continue to accept a bare string and pass it off.  */
764   SKIP_WHITESPACE ();
765   if (*input_line_pointer == '"')
766     {
767       s_app_file (0);
768       return NULL;
769     }
770
771   num = get_absolute_expression ();
772   filename = demand_copy_C_string (&filename_len);
773   if (filename == NULL)
774     return NULL;
775   demand_empty_rest_of_line ();
776
777   if (num < 1)
778     {
779       as_bad (_("file number less than one"));
780       return NULL;
781     }
782
783   /* A .file directive implies compiler generated debug information is
784      being supplied.  Turn off gas generated debug info.  */
785   debug_type = DEBUG_NONE;
786
787   if (num < (int) files_in_use && files[num].filename != 0)
788     {
789       as_bad (_("file number %ld already allocated"), (long) num);
790       return NULL;
791     }
792
793   get_filenum (filename, num);
794
795   return filename;
796 }
797
798 /* Calls dwarf2_directive_filename, but discards its result.
799    Used in pseudo-op tables where the function result is ignored.  */
800
801 void
802 dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED)
803 {
804   (void) dwarf2_directive_filename ();
805 }
806
807 void
808 dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
809 {
810   offsetT filenum, line;
811
812   /* If we see two .loc directives in a row, force the first one to be
813      output now.  */
814   if (dwarf2_loc_directive_seen)
815     dwarf2_emit_insn (0);
816
817   filenum = get_absolute_expression ();
818   SKIP_WHITESPACE ();
819   line = get_absolute_expression ();
820
821   if (filenum < 1)
822     {
823       as_bad (_("file number less than one"));
824       return;
825     }
826   if (filenum >= (int) files_in_use || files[filenum].filename == 0)
827     {
828       as_bad (_("unassigned file number %ld"), (long) filenum);
829       return;
830     }
831
832   current.filenum = filenum;
833   current.line = line;
834   current.discriminator = 0;
835
836 #ifndef NO_LISTING
837   if (listing)
838     {
839       if (files[filenum].dir)
840         {
841           size_t dir_len = strlen (dirs[files[filenum].dir]);
842           size_t file_len = strlen (files[filenum].filename);
843           char *cp = XNEWVEC (char, dir_len + 1 + file_len + 1);
844
845           memcpy (cp, dirs[files[filenum].dir], dir_len);
846           INSERT_DIR_SEPARATOR (cp, dir_len);
847           memcpy (cp + dir_len + 1, files[filenum].filename, file_len);
848           cp[dir_len + file_len + 1] = '\0';
849           listing_source_file (cp);
850           free (cp);
851         }
852       else
853         listing_source_file (files[filenum].filename);
854       listing_source_line (line);
855     }
856 #endif
857
858   SKIP_WHITESPACE ();
859   if (ISDIGIT (*input_line_pointer))
860     {
861       current.column = get_absolute_expression ();
862       SKIP_WHITESPACE ();
863     }
864
865   while (ISALPHA (*input_line_pointer))
866     {
867       char *p, c;
868       offsetT value;
869
870       c = get_symbol_name (& p);
871
872       if (strcmp (p, "basic_block") == 0)
873         {
874           current.flags |= DWARF2_FLAG_BASIC_BLOCK;
875           *input_line_pointer = c;
876         }
877       else if (strcmp (p, "prologue_end") == 0)
878         {
879           current.flags |= DWARF2_FLAG_PROLOGUE_END;
880           *input_line_pointer = c;
881         }
882       else if (strcmp (p, "epilogue_begin") == 0)
883         {
884           current.flags |= DWARF2_FLAG_EPILOGUE_BEGIN;
885           *input_line_pointer = c;
886         }
887       else if (strcmp (p, "is_stmt") == 0)
888         {
889           (void) restore_line_pointer (c);
890           value = get_absolute_expression ();
891           if (value == 0)
892             current.flags &= ~DWARF2_FLAG_IS_STMT;
893           else if (value == 1)
894             current.flags |= DWARF2_FLAG_IS_STMT;
895           else
896             {
897               as_bad (_("is_stmt value not 0 or 1"));
898               return;
899             }
900         }
901       else if (strcmp (p, "isa") == 0)
902         {
903           (void) restore_line_pointer (c);
904           value = get_absolute_expression ();
905           if (value >= 0)
906             current.isa = value;
907           else
908             {
909               as_bad (_("isa number less than zero"));
910               return;
911             }
912         }
913       else if (strcmp (p, "discriminator") == 0)
914         {
915           (void) restore_line_pointer (c);
916           value = get_absolute_expression ();
917           if (value >= 0)
918             current.discriminator = value;
919           else
920             {
921               as_bad (_("discriminator less than zero"));
922               return;
923             }
924         }
925       else if (strcmp (p, "view") == 0)
926         {
927           symbolS *sym;
928
929           (void) restore_line_pointer (c);
930           SKIP_WHITESPACE ();
931
932           if (ISDIGIT (*input_line_pointer)
933               || *input_line_pointer == '-')
934             {
935               bfd_boolean force_reset = *input_line_pointer == '-';
936
937               value = get_absolute_expression ();
938               if (value != 0)
939                 {
940                   as_bad (_("numeric view can only be asserted to zero"));
941                   return;
942                 }
943               if (force_reset && force_reset_view)
944                 sym = force_reset_view;
945               else
946                 {
947                   sym = symbol_temp_new (absolute_section, value,
948                                          &zero_address_frag);
949                   if (force_reset)
950                     force_reset_view = sym;
951                 }
952             }
953           else
954             {
955               char *name = read_symbol_name ();
956
957               if (!name)
958                 return;
959               sym = symbol_find_or_make (name);
960               if (S_IS_DEFINED (sym))
961                 {
962                   if (!S_CAN_BE_REDEFINED (sym))
963                     as_bad (_("symbol `%s' is already defined"), name);
964                   else
965                     sym = symbol_clone (sym, 1);
966                   S_SET_SEGMENT (sym, undefined_section);
967                   S_SET_VALUE (sym, 0);
968                   symbol_set_frag (sym, &zero_address_frag);
969                 }
970             }
971           current.view = sym;
972         }
973       else
974         {
975           as_bad (_("unknown .loc sub-directive `%s'"), p);
976           (void) restore_line_pointer (c);
977           return;
978         }
979
980       SKIP_WHITESPACE_AFTER_NAME ();
981     }
982
983   demand_empty_rest_of_line ();
984   dwarf2_loc_directive_seen = TRUE;
985   debug_type = DEBUG_NONE;
986
987   /* If we were given a view id, emit the row right away.  */
988   if (current.view)
989     dwarf2_emit_insn (0);
990 }
991
992 void
993 dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED)
994 {
995   offsetT value = get_absolute_expression ();
996
997   if (value != 0 && value != 1)
998     {
999       as_bad (_("expected 0 or 1"));
1000       ignore_rest_of_line ();
1001     }
1002   else
1003     {
1004       dwarf2_loc_mark_labels = value != 0;
1005       demand_empty_rest_of_line ();
1006     }
1007 }
1008 \f
1009 static struct frag *
1010 first_frag_for_seg (segT seg)
1011 {
1012   return seg_info (seg)->frchainP->frch_root;
1013 }
1014
1015 static struct frag *
1016 last_frag_for_seg (segT seg)
1017 {
1018   frchainS *f = seg_info (seg)->frchainP;
1019
1020   while (f->frch_next != NULL)
1021     f = f->frch_next;
1022
1023   return f->frch_last;
1024 }
1025 \f
1026 /* Emit a single byte into the current segment.  */
1027
1028 static inline void
1029 out_byte (int byte)
1030 {
1031   FRAG_APPEND_1_CHAR (byte);
1032 }
1033
1034 /* Emit a statement program opcode into the current segment.  */
1035
1036 static inline void
1037 out_opcode (int opc)
1038 {
1039   out_byte (opc);
1040 }
1041
1042 /* Emit a two-byte word into the current segment.  */
1043
1044 static inline void
1045 out_two (int data)
1046 {
1047   md_number_to_chars (frag_more (2), data, 2);
1048 }
1049
1050 /* Emit a four byte word into the current segment.  */
1051
1052 static inline void
1053 out_four (int data)
1054 {
1055   md_number_to_chars (frag_more (4), data, 4);
1056 }
1057
1058 /* Emit an unsigned "little-endian base 128" number.  */
1059
1060 static void
1061 out_uleb128 (addressT value)
1062 {
1063   output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
1064 }
1065
1066 /* Emit a signed "little-endian base 128" number.  */
1067
1068 static void
1069 out_leb128 (addressT value)
1070 {
1071   output_leb128 (frag_more (sizeof_leb128 (value, 1)), value, 1);
1072 }
1073
1074 /* Emit a tuple for .debug_abbrev.  */
1075
1076 static inline void
1077 out_abbrev (int name, int form)
1078 {
1079   out_uleb128 (name);
1080   out_uleb128 (form);
1081 }
1082
1083 /* Get the size of a fragment.  */
1084
1085 static offsetT
1086 get_frag_fix (fragS *frag, segT seg)
1087 {
1088   frchainS *fr;
1089
1090   if (frag->fr_next)
1091     return frag->fr_fix;
1092
1093   /* If a fragment is the last in the chain, special measures must be
1094      taken to find its size before relaxation, since it may be pending
1095      on some subsegment chain.  */
1096   for (fr = seg_info (seg)->frchainP; fr; fr = fr->frch_next)
1097     if (fr->frch_last == frag)
1098       return (char *) obstack_next_free (&fr->frch_obstack) - frag->fr_literal;
1099
1100   abort ();
1101 }
1102
1103 /* Set an absolute address (may result in a relocation entry).  */
1104
1105 static void
1106 out_set_addr (symbolS *sym)
1107 {
1108   expressionS exp;
1109
1110   out_opcode (DW_LNS_extended_op);
1111   out_uleb128 (sizeof_address + 1);
1112
1113   out_opcode (DW_LNE_set_address);
1114   exp.X_op = O_symbol;
1115   exp.X_add_symbol = sym;
1116   exp.X_add_number = 0;
1117   emit_expr (&exp, sizeof_address);
1118 }
1119
1120 static void scale_addr_delta (addressT *);
1121
1122 static void
1123 scale_addr_delta (addressT *addr_delta)
1124 {
1125   static int printed_this = 0;
1126   if (DWARF2_LINE_MIN_INSN_LENGTH > 1)
1127     {
1128       if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0  && !printed_this)
1129         {
1130           as_bad("unaligned opcodes detected in executable segment");
1131           printed_this = 1;
1132         }
1133       *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
1134     }
1135 }
1136
1137 /* Encode a pair of line and address skips as efficiently as possible.
1138    Note that the line skip is signed, whereas the address skip is unsigned.
1139
1140    The following two routines *must* be kept in sync.  This is
1141    enforced by making emit_inc_line_addr abort if we do not emit
1142    exactly the expected number of bytes.  */
1143
1144 static int
1145 size_inc_line_addr (int line_delta, addressT addr_delta)
1146 {
1147   unsigned int tmp, opcode;
1148   int len = 0;
1149
1150   /* Scale the address delta by the minimum instruction length.  */
1151   scale_addr_delta (&addr_delta);
1152
1153   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
1154      We cannot use special opcodes here, since we want the end_sequence
1155      to emit the matrix entry.  */
1156   if (line_delta == INT_MAX)
1157     {
1158       if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
1159         len = 1;
1160       else
1161         len = 1 + sizeof_leb128 (addr_delta, 0);
1162       return len + 3;
1163     }
1164
1165   /* Bias the line delta by the base.  */
1166   tmp = line_delta - DWARF2_LINE_BASE;
1167
1168   /* If the line increment is out of range of a special opcode, we
1169      must encode it with DW_LNS_advance_line.  */
1170   if (tmp >= DWARF2_LINE_RANGE)
1171     {
1172       len = 1 + sizeof_leb128 (line_delta, 1);
1173       line_delta = 0;
1174       tmp = 0 - DWARF2_LINE_BASE;
1175     }
1176
1177   /* Bias the opcode by the special opcode base.  */
1178   tmp += DWARF2_LINE_OPCODE_BASE;
1179
1180   /* Avoid overflow when addr_delta is large.  */
1181   if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
1182     {
1183       /* Try using a special opcode.  */
1184       opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
1185       if (opcode <= 255)
1186         return len + 1;
1187
1188       /* Try using DW_LNS_const_add_pc followed by special op.  */
1189       opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
1190       if (opcode <= 255)
1191         return len + 2;
1192     }
1193
1194   /* Otherwise use DW_LNS_advance_pc.  */
1195   len += 1 + sizeof_leb128 (addr_delta, 0);
1196
1197   /* DW_LNS_copy or special opcode.  */
1198   len += 1;
1199
1200   return len;
1201 }
1202
1203 static void
1204 emit_inc_line_addr (int line_delta, addressT addr_delta, char *p, int len)
1205 {
1206   unsigned int tmp, opcode;
1207   int need_copy = 0;
1208   char *end = p + len;
1209
1210   /* Line number sequences cannot go backward in addresses.  This means
1211      we've incorrectly ordered the statements in the sequence.  */
1212   gas_assert ((offsetT) addr_delta >= 0);
1213
1214   /* Scale the address delta by the minimum instruction length.  */
1215   scale_addr_delta (&addr_delta);
1216
1217   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
1218      We cannot use special opcodes here, since we want the end_sequence
1219      to emit the matrix entry.  */
1220   if (line_delta == INT_MAX)
1221     {
1222       if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
1223         *p++ = DW_LNS_const_add_pc;
1224       else
1225         {
1226           *p++ = DW_LNS_advance_pc;
1227           p += output_leb128 (p, addr_delta, 0);
1228         }
1229
1230       *p++ = DW_LNS_extended_op;
1231       *p++ = 1;
1232       *p++ = DW_LNE_end_sequence;
1233       goto done;
1234     }
1235
1236   /* Bias the line delta by the base.  */
1237   tmp = line_delta - DWARF2_LINE_BASE;
1238
1239   /* If the line increment is out of range of a special opcode, we
1240      must encode it with DW_LNS_advance_line.  */
1241   if (tmp >= DWARF2_LINE_RANGE)
1242     {
1243       *p++ = DW_LNS_advance_line;
1244       p += output_leb128 (p, line_delta, 1);
1245
1246       line_delta = 0;
1247       tmp = 0 - DWARF2_LINE_BASE;
1248       need_copy = 1;
1249     }
1250
1251   /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
1252      special opcode.  */
1253   if (line_delta == 0 && addr_delta == 0)
1254     {
1255       *p++ = DW_LNS_copy;
1256       goto done;
1257     }
1258
1259   /* Bias the opcode by the special opcode base.  */
1260   tmp += DWARF2_LINE_OPCODE_BASE;
1261
1262   /* Avoid overflow when addr_delta is large.  */
1263   if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
1264     {
1265       /* Try using a special opcode.  */
1266       opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
1267       if (opcode <= 255)
1268         {
1269           *p++ = opcode;
1270           goto done;
1271         }
1272
1273       /* Try using DW_LNS_const_add_pc followed by special op.  */
1274       opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
1275       if (opcode <= 255)
1276         {
1277           *p++ = DW_LNS_const_add_pc;
1278           *p++ = opcode;
1279           goto done;
1280         }
1281     }
1282
1283   /* Otherwise use DW_LNS_advance_pc.  */
1284   *p++ = DW_LNS_advance_pc;
1285   p += output_leb128 (p, addr_delta, 0);
1286
1287   if (need_copy)
1288     *p++ = DW_LNS_copy;
1289   else
1290     *p++ = tmp;
1291
1292  done:
1293   gas_assert (p == end);
1294 }
1295
1296 /* Handy routine to combine calls to the above two routines.  */
1297
1298 static void
1299 out_inc_line_addr (int line_delta, addressT addr_delta)
1300 {
1301   int len = size_inc_line_addr (line_delta, addr_delta);
1302   emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
1303 }
1304
1305 /* Write out an alternative form of line and address skips using
1306    DW_LNS_fixed_advance_pc opcodes.  This uses more space than the default
1307    line and address information, but it is required if linker relaxation
1308    could change the code offsets.  The following two routines *must* be
1309    kept in sync.  */
1310 #define ADDR_DELTA_LIMIT 50000
1311
1312 static int
1313 size_fixed_inc_line_addr (int line_delta, addressT addr_delta)
1314 {
1315   int len = 0;
1316
1317   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.  */
1318   if (line_delta != INT_MAX)
1319     len = 1 + sizeof_leb128 (line_delta, 1);
1320
1321   if (addr_delta > ADDR_DELTA_LIMIT)
1322     {
1323       /* DW_LNS_extended_op */
1324       len += 1 + sizeof_leb128 (sizeof_address + 1, 0);
1325       /* DW_LNE_set_address */
1326       len += 1 + sizeof_address;
1327     }
1328   else
1329     /* DW_LNS_fixed_advance_pc */
1330     len += 3;
1331
1332   if (line_delta == INT_MAX)
1333     /* DW_LNS_extended_op + DW_LNE_end_sequence */
1334     len += 3;
1335   else
1336     /* DW_LNS_copy */
1337     len += 1;
1338
1339   return len;
1340 }
1341
1342 static void
1343 emit_fixed_inc_line_addr (int line_delta, addressT addr_delta, fragS *frag,
1344                           char *p, int len)
1345 {
1346   expressionS *pexp;
1347   char *end = p + len;
1348
1349   /* Line number sequences cannot go backward in addresses.  This means
1350      we've incorrectly ordered the statements in the sequence.  */
1351   gas_assert ((offsetT) addr_delta >= 0);
1352
1353   /* Verify that we have kept in sync with size_fixed_inc_line_addr.  */
1354   gas_assert (len == size_fixed_inc_line_addr (line_delta, addr_delta));
1355
1356   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.  */
1357   if (line_delta != INT_MAX)
1358     {
1359       *p++ = DW_LNS_advance_line;
1360       p += output_leb128 (p, line_delta, 1);
1361     }
1362
1363   pexp = symbol_get_value_expression (frag->fr_symbol);
1364
1365   /* The DW_LNS_fixed_advance_pc opcode has a 2-byte operand so it can
1366      advance the address by at most 64K.  Linker relaxation (without
1367      which this function would not be used) could change the operand by
1368      an unknown amount.  If the address increment is getting close to
1369      the limit, just reset the address.  */
1370   if (addr_delta > ADDR_DELTA_LIMIT)
1371     {
1372       symbolS *to_sym;
1373       expressionS exp;
1374
1375       gas_assert (pexp->X_op == O_subtract);
1376       to_sym = pexp->X_add_symbol;
1377
1378       *p++ = DW_LNS_extended_op;
1379       p += output_leb128 (p, sizeof_address + 1, 0);
1380       *p++ = DW_LNE_set_address;
1381       exp.X_op = O_symbol;
1382       exp.X_add_symbol = to_sym;
1383       exp.X_add_number = 0;
1384       emit_expr_fix (&exp, sizeof_address, frag, p, TC_PARSE_CONS_RETURN_NONE);
1385       p += sizeof_address;
1386     }
1387   else
1388     {
1389       *p++ = DW_LNS_fixed_advance_pc;
1390       emit_expr_fix (pexp, 2, frag, p, TC_PARSE_CONS_RETURN_NONE);
1391       p += 2;
1392     }
1393
1394   if (line_delta == INT_MAX)
1395     {
1396       *p++ = DW_LNS_extended_op;
1397       *p++ = 1;
1398       *p++ = DW_LNE_end_sequence;
1399     }
1400   else
1401     *p++ = DW_LNS_copy;
1402
1403   gas_assert (p == end);
1404 }
1405
1406 /* Generate a variant frag that we can use to relax address/line
1407    increments between fragments of the target segment.  */
1408
1409 static void
1410 relax_inc_line_addr (int line_delta, symbolS *to_sym, symbolS *from_sym)
1411 {
1412   expressionS exp;
1413   int max_chars;
1414
1415   exp.X_op = O_subtract;
1416   exp.X_add_symbol = to_sym;
1417   exp.X_op_symbol = from_sym;
1418   exp.X_add_number = 0;
1419
1420   /* The maximum size of the frag is the line delta with a maximum
1421      sized address delta.  */
1422   if (DWARF2_USE_FIXED_ADVANCE_PC)
1423     max_chars = size_fixed_inc_line_addr (line_delta,
1424                                           -DWARF2_LINE_MIN_INSN_LENGTH);
1425   else
1426     max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
1427
1428   frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
1429             make_expr_symbol (&exp), line_delta, NULL);
1430 }
1431
1432 /* The function estimates the size of a rs_dwarf2dbg variant frag
1433    based on the current values of the symbols.  It is called before
1434    the relaxation loop.  We set fr_subtype to the expected length.  */
1435
1436 int
1437 dwarf2dbg_estimate_size_before_relax (fragS *frag)
1438 {
1439   offsetT addr_delta;
1440   int size;
1441
1442   addr_delta = resolve_symbol_value (frag->fr_symbol);
1443   if (DWARF2_USE_FIXED_ADVANCE_PC)
1444     size = size_fixed_inc_line_addr (frag->fr_offset, addr_delta);
1445   else
1446     size = size_inc_line_addr (frag->fr_offset, addr_delta);
1447
1448   frag->fr_subtype = size;
1449
1450   return size;
1451 }
1452
1453 /* This function relaxes a rs_dwarf2dbg variant frag based on the
1454    current values of the symbols.  fr_subtype is the current length
1455    of the frag.  This returns the change in frag length.  */
1456
1457 int
1458 dwarf2dbg_relax_frag (fragS *frag)
1459 {
1460   int old_size, new_size;
1461
1462   old_size = frag->fr_subtype;
1463   new_size = dwarf2dbg_estimate_size_before_relax (frag);
1464
1465   return new_size - old_size;
1466 }
1467
1468 /* This function converts a rs_dwarf2dbg variant frag into a normal
1469    fill frag.  This is called after all relaxation has been done.
1470    fr_subtype will be the desired length of the frag.  */
1471
1472 void
1473 dwarf2dbg_convert_frag (fragS *frag)
1474 {
1475   offsetT addr_diff;
1476
1477   if (DWARF2_USE_FIXED_ADVANCE_PC)
1478     {
1479       /* If linker relaxation is enabled then the distance between the two
1480          symbols in the frag->fr_symbol expression might change.  Hence we
1481          cannot rely upon the value computed by resolve_symbol_value.
1482          Instead we leave the expression unfinalized and allow
1483          emit_fixed_inc_line_addr to create a fixup (which later becomes a
1484          relocation) that will allow the linker to correctly compute the
1485          actual address difference.  We have to use a fixed line advance for
1486          this as we cannot (easily) relocate leb128 encoded values.  */
1487       int saved_finalize_syms = finalize_syms;
1488
1489       finalize_syms = 0;
1490       addr_diff = resolve_symbol_value (frag->fr_symbol);
1491       finalize_syms = saved_finalize_syms;
1492     }
1493   else
1494     addr_diff = resolve_symbol_value (frag->fr_symbol);
1495
1496   /* fr_var carries the max_chars that we created the fragment with.
1497      fr_subtype carries the current expected length.  We must, of
1498      course, have allocated enough memory earlier.  */
1499   gas_assert (frag->fr_var >= (int) frag->fr_subtype);
1500
1501   if (DWARF2_USE_FIXED_ADVANCE_PC)
1502     emit_fixed_inc_line_addr (frag->fr_offset, addr_diff, frag,
1503                               frag->fr_literal + frag->fr_fix,
1504                               frag->fr_subtype);
1505   else
1506     emit_inc_line_addr (frag->fr_offset, addr_diff,
1507                         frag->fr_literal + frag->fr_fix, frag->fr_subtype);
1508
1509   frag->fr_fix += frag->fr_subtype;
1510   frag->fr_type = rs_fill;
1511   frag->fr_var = 0;
1512   frag->fr_offset = 0;
1513 }
1514
1515 /* Generate .debug_line content for the chain of line number entries
1516    beginning at E, for segment SEG.  */
1517
1518 static void
1519 process_entries (segT seg, struct line_entry *e)
1520 {
1521   unsigned filenum = 1;
1522   unsigned line = 1;
1523   unsigned column = 0;
1524   unsigned isa = 0;
1525   unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
1526   fragS *last_frag = NULL, *frag;
1527   addressT last_frag_ofs = 0, frag_ofs;
1528   symbolS *last_lab = NULL, *lab;
1529   struct line_entry *next;
1530
1531   if (flag_dwarf_sections)
1532     {
1533       char * name;
1534       const char * sec_name;
1535
1536       /* Switch to the relevant sub-section before we start to emit
1537          the line number table.
1538
1539          FIXME: These sub-sections do not have a normal Line Number
1540          Program Header, thus strictly speaking they are not valid
1541          DWARF sections.  Unfortunately the DWARF standard assumes
1542          a one-to-one relationship between compilation units and
1543          line number tables.  Thus we have to have a .debug_line
1544          section, as well as our sub-sections, and we have to ensure
1545          that all of the sub-sections are merged into a proper
1546          .debug_line section before a debugger sees them.  */
1547
1548       sec_name = bfd_get_section_name (stdoutput, seg);
1549       if (strcmp (sec_name, ".text") != 0)
1550         {
1551           name = concat (".debug_line", sec_name, (char *) NULL);
1552           subseg_set (subseg_get (name, FALSE), 0);
1553         }
1554       else
1555         /* Don't create a .debug_line.text section -
1556            that is redundant.  Instead just switch back to the
1557            normal .debug_line section.  */
1558         subseg_set (subseg_get (".debug_line", FALSE), 0);
1559     }
1560
1561   do
1562     {
1563       int line_delta;
1564
1565       if (filenum != e->loc.filenum)
1566         {
1567           filenum = e->loc.filenum;
1568           out_opcode (DW_LNS_set_file);
1569           out_uleb128 (filenum);
1570         }
1571
1572       if (column != e->loc.column)
1573         {
1574           column = e->loc.column;
1575           out_opcode (DW_LNS_set_column);
1576           out_uleb128 (column);
1577         }
1578
1579       if (e->loc.discriminator != 0)
1580         {
1581           out_opcode (DW_LNS_extended_op);
1582           out_leb128 (1 + sizeof_leb128 (e->loc.discriminator, 0));
1583           out_opcode (DW_LNE_set_discriminator);
1584           out_uleb128 (e->loc.discriminator);
1585         }
1586
1587       if (isa != e->loc.isa)
1588         {
1589           isa = e->loc.isa;
1590           out_opcode (DW_LNS_set_isa);
1591           out_uleb128 (isa);
1592         }
1593
1594       if ((e->loc.flags ^ flags) & DWARF2_FLAG_IS_STMT)
1595         {
1596           flags = e->loc.flags;
1597           out_opcode (DW_LNS_negate_stmt);
1598         }
1599
1600       if (e->loc.flags & DWARF2_FLAG_BASIC_BLOCK)
1601         out_opcode (DW_LNS_set_basic_block);
1602
1603       if (e->loc.flags & DWARF2_FLAG_PROLOGUE_END)
1604         out_opcode (DW_LNS_set_prologue_end);
1605
1606       if (e->loc.flags & DWARF2_FLAG_EPILOGUE_BEGIN)
1607         out_opcode (DW_LNS_set_epilogue_begin);
1608
1609       /* Don't try to optimize away redundant entries; gdb wants two
1610          entries for a function where the code starts on the same line as
1611          the {, and there's no way to identify that case here.  Trust gcc
1612          to optimize appropriately.  */
1613       line_delta = e->loc.line - line;
1614       lab = e->label;
1615       frag = symbol_get_frag (lab);
1616       frag_ofs = S_GET_VALUE (lab);
1617
1618       if (last_frag == NULL
1619           || (e->loc.view == force_reset_view && force_reset_view
1620               /* If we're going to reset the view, but we know we're
1621                  advancing the PC, we don't have to force with
1622                  set_address.  We know we do when we're at the same
1623                  address of the same frag, and we know we might when
1624                  we're in the beginning of a frag, and we were at the
1625                  end of the previous frag.  */
1626               && (frag == last_frag
1627                   ? (last_frag_ofs == frag_ofs)
1628                   : (frag_ofs == 0
1629                      && ((offsetT)last_frag_ofs
1630                          >= get_frag_fix (last_frag, seg))))))
1631         {
1632           out_set_addr (lab);
1633           out_inc_line_addr (line_delta, 0);
1634         }
1635       else if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1636         out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
1637       else
1638         relax_inc_line_addr (line_delta, lab, last_lab);
1639
1640       line = e->loc.line;
1641       last_lab = lab;
1642       last_frag = frag;
1643       last_frag_ofs = frag_ofs;
1644
1645       next = e->next;
1646       free (e);
1647       e = next;
1648     }
1649   while (e);
1650
1651   /* Emit a DW_LNE_end_sequence for the end of the section.  */
1652   frag = last_frag_for_seg (seg);
1653   frag_ofs = get_frag_fix (frag, seg);
1654   if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1655     out_inc_line_addr (INT_MAX, frag_ofs - last_frag_ofs);
1656   else
1657     {
1658       lab = symbol_temp_new (seg, frag_ofs, frag);
1659       relax_inc_line_addr (INT_MAX, lab, last_lab);
1660     }
1661 }
1662
1663 /* Emit the directory and file tables for .debug_line.  */
1664
1665 static void
1666 out_file_list (void)
1667 {
1668   size_t size;
1669   const char *dir;
1670   char *cp;
1671   unsigned int i;
1672
1673   /* Emit directory list.  */
1674   for (i = 1; i < dirs_in_use; ++i)
1675     {
1676       dir = remap_debug_filename (dirs[i]);
1677       size = strlen (dir) + 1;
1678       cp = frag_more (size);
1679       memcpy (cp, dir, size);
1680     }
1681   /* Terminate it.  */
1682   out_byte ('\0');
1683
1684   for (i = 1; i < files_in_use; ++i)
1685     {
1686       const char *fullfilename;
1687
1688       if (files[i].filename == NULL)
1689         {
1690           as_bad (_("unassigned file number %ld"), (long) i);
1691           /* Prevent a crash later, particularly for file 1.  */
1692           files[i].filename = "";
1693           continue;
1694         }
1695
1696       fullfilename = DWARF2_FILE_NAME (files[i].filename,
1697                                        files[i].dir ? dirs [files [i].dir] : "");
1698       size = strlen (fullfilename) + 1;
1699       cp = frag_more (size);
1700       memcpy (cp, fullfilename, size);
1701
1702       out_uleb128 (files[i].dir);       /* directory number */
1703       /* Output the last modification timestamp.  */
1704       out_uleb128 (DWARF2_FILE_TIME_NAME (files[i].filename,
1705                                           files[i].dir ? dirs [files [i].dir] : ""));
1706       /* Output the filesize.  */
1707       out_uleb128 (DWARF2_FILE_SIZE_NAME (files[i].filename,
1708                                           files[i].dir ? dirs [files [i].dir] : ""));
1709     }
1710
1711   /* Terminate filename list.  */
1712   out_byte (0);
1713 }
1714
1715 /* Switch to SEC and output a header length field.  Return the size of
1716    offsets used in SEC.  The caller must set EXPR->X_add_symbol value
1717    to the end of the section.  EXPR->X_add_number will be set to the
1718    negative size of the header.  */
1719
1720 static int
1721 out_header (asection *sec, expressionS *exp)
1722 {
1723   symbolS *start_sym;
1724   symbolS *end_sym;
1725
1726   subseg_set (sec, 0);
1727
1728   if (flag_dwarf_sections)
1729     {
1730       /* If we are going to put the start and end symbols in different
1731          sections, then we need real symbols, not just fake, local ones.  */
1732       frag_now_fix ();
1733       start_sym = symbol_make (".Ldebug_line_start");
1734       end_sym = symbol_make (".Ldebug_line_end");
1735       symbol_set_value_now (start_sym);
1736     }
1737   else
1738     {
1739       start_sym = symbol_temp_new_now ();
1740       end_sym = symbol_temp_make ();
1741     }
1742
1743   /* Total length of the information.  */
1744   exp->X_op = O_subtract;
1745   exp->X_add_symbol = end_sym;
1746   exp->X_op_symbol = start_sym;
1747
1748   switch (DWARF2_FORMAT (sec))
1749     {
1750     case dwarf2_format_32bit:
1751       exp->X_add_number = -4;
1752       emit_expr (exp, 4);
1753       return 4;
1754
1755     case dwarf2_format_64bit:
1756       exp->X_add_number = -12;
1757       out_four (-1);
1758       emit_expr (exp, 8);
1759       return 8;
1760
1761     case dwarf2_format_64bit_irix:
1762       exp->X_add_number = -8;
1763       emit_expr (exp, 8);
1764       return 8;
1765     }
1766
1767   as_fatal (_("internal error: unknown dwarf2 format"));
1768   return 0;
1769 }
1770
1771 /* Emit the collected .debug_line data.  */
1772
1773 static void
1774 out_debug_line (segT line_seg)
1775 {
1776   expressionS exp;
1777   symbolS *prologue_start, *prologue_end;
1778   symbolS *line_end;
1779   struct line_seg *s;
1780   int sizeof_offset;
1781
1782   sizeof_offset = out_header (line_seg, &exp);
1783   line_end = exp.X_add_symbol;
1784
1785   /* Version.  */
1786   out_two (DWARF2_LINE_VERSION);
1787
1788   /* Length of the prologue following this length.  */
1789   prologue_start = symbol_temp_make ();
1790   prologue_end = symbol_temp_make ();
1791   exp.X_op = O_subtract;
1792   exp.X_add_symbol = prologue_end;
1793   exp.X_op_symbol = prologue_start;
1794   exp.X_add_number = 0;
1795   emit_expr (&exp, sizeof_offset);
1796   symbol_set_value_now (prologue_start);
1797
1798   /* Parameters of the state machine.  */
1799   out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
1800   out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
1801   out_byte (DWARF2_LINE_BASE);
1802   out_byte (DWARF2_LINE_RANGE);
1803   out_byte (DWARF2_LINE_OPCODE_BASE);
1804
1805   /* Standard opcode lengths.  */
1806   out_byte (0);                 /* DW_LNS_copy */
1807   out_byte (1);                 /* DW_LNS_advance_pc */
1808   out_byte (1);                 /* DW_LNS_advance_line */
1809   out_byte (1);                 /* DW_LNS_set_file */
1810   out_byte (1);                 /* DW_LNS_set_column */
1811   out_byte (0);                 /* DW_LNS_negate_stmt */
1812   out_byte (0);                 /* DW_LNS_set_basic_block */
1813   out_byte (0);                 /* DW_LNS_const_add_pc */
1814   out_byte (1);                 /* DW_LNS_fixed_advance_pc */
1815   out_byte (0);                 /* DW_LNS_set_prologue_end */
1816   out_byte (0);                 /* DW_LNS_set_epilogue_begin */
1817   out_byte (1);                 /* DW_LNS_set_isa */
1818
1819   out_file_list ();
1820
1821   symbol_set_value_now (prologue_end);
1822
1823   /* For each section, emit a statement program.  */
1824   for (s = all_segs; s; s = s->next)
1825     if (SEG_NORMAL (s->seg))
1826       process_entries (s->seg, s->head->head);
1827     else
1828       as_warn ("dwarf line number information for %s ignored",
1829                segment_name (s->seg));
1830
1831   if (flag_dwarf_sections)
1832     /* We have to switch to the special .debug_line_end section
1833        before emitting the end-of-debug_line symbol.  The linker
1834        script arranges for this section to be placed after all the
1835        (potentially garbage collected) .debug_line.<foo> sections.
1836        This section contains the line_end symbol which is used to
1837        compute the size of the linked .debug_line section, as seen
1838        in the DWARF Line Number header.  */
1839     subseg_set (subseg_get (".debug_line_end", FALSE), 0);
1840
1841   symbol_set_value_now (line_end);
1842 }
1843
1844 static void
1845 out_debug_ranges (segT ranges_seg)
1846 {
1847   unsigned int addr_size = sizeof_address;
1848   struct line_seg *s;
1849   expressionS exp;
1850   unsigned int i;
1851
1852   subseg_set (ranges_seg, 0);
1853
1854   /* Base Address Entry.  */
1855   for (i = 0; i < addr_size; i++)
1856     out_byte (0xff);
1857   for (i = 0; i < addr_size; i++)
1858     out_byte (0);
1859
1860   /* Range List Entry.  */
1861   for (s = all_segs; s; s = s->next)
1862     {
1863       fragS *frag;
1864       symbolS *beg, *end;
1865
1866       frag = first_frag_for_seg (s->seg);
1867       beg = symbol_temp_new (s->seg, 0, frag);
1868       s->text_start = beg;
1869
1870       frag = last_frag_for_seg (s->seg);
1871       end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1872       s->text_end = end;
1873
1874       exp.X_op = O_symbol;
1875       exp.X_add_symbol = beg;
1876       exp.X_add_number = 0;
1877       emit_expr (&exp, addr_size);
1878
1879       exp.X_op = O_symbol;
1880       exp.X_add_symbol = end;
1881       exp.X_add_number = 0;
1882       emit_expr (&exp, addr_size);
1883     }
1884
1885   /* End of Range Entry.   */
1886   for (i = 0; i < addr_size; i++)
1887     out_byte (0);
1888   for (i = 0; i < addr_size; i++)
1889     out_byte (0);
1890 }
1891
1892 /* Emit data for .debug_aranges.  */
1893
1894 static void
1895 out_debug_aranges (segT aranges_seg, segT info_seg)
1896 {
1897   unsigned int addr_size = sizeof_address;
1898   offsetT size;
1899   struct line_seg *s;
1900   expressionS exp;
1901   symbolS *aranges_end;
1902   char *p;
1903   int sizeof_offset;
1904
1905   sizeof_offset = out_header (aranges_seg, &exp);
1906   aranges_end = exp.X_add_symbol;
1907   size = -exp.X_add_number;
1908
1909   /* Version.  */
1910   out_two (DWARF2_ARANGES_VERSION);
1911   size += 2;
1912
1913   /* Offset to .debug_info.  */
1914   TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), sizeof_offset);
1915   size += sizeof_offset;
1916
1917   /* Size of an address (offset portion).  */
1918   out_byte (addr_size);
1919   size++;
1920
1921   /* Size of a segment descriptor.  */
1922   out_byte (0);
1923   size++;
1924
1925   /* Align the header.  */
1926   while ((size++ % (2 * addr_size)) > 0)
1927     out_byte (0);
1928
1929   for (s = all_segs; s; s = s->next)
1930     {
1931       fragS *frag;
1932       symbolS *beg, *end;
1933
1934       frag = first_frag_for_seg (s->seg);
1935       beg = symbol_temp_new (s->seg, 0, frag);
1936       s->text_start = beg;
1937
1938       frag = last_frag_for_seg (s->seg);
1939       end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1940       s->text_end = end;
1941
1942       exp.X_op = O_symbol;
1943       exp.X_add_symbol = beg;
1944       exp.X_add_number = 0;
1945       emit_expr (&exp, addr_size);
1946
1947       exp.X_op = O_subtract;
1948       exp.X_add_symbol = end;
1949       exp.X_op_symbol = beg;
1950       exp.X_add_number = 0;
1951       emit_expr (&exp, addr_size);
1952     }
1953
1954   p = frag_more (2 * addr_size);
1955   md_number_to_chars (p, 0, addr_size);
1956   md_number_to_chars (p + addr_size, 0, addr_size);
1957
1958   symbol_set_value_now (aranges_end);
1959 }
1960
1961 /* Emit data for .debug_abbrev.  Note that this must be kept in
1962    sync with out_debug_info below.  */
1963
1964 static void
1965 out_debug_abbrev (segT abbrev_seg,
1966                   segT info_seg ATTRIBUTE_UNUSED,
1967                   segT line_seg ATTRIBUTE_UNUSED)
1968 {
1969   subseg_set (abbrev_seg, 0);
1970
1971   out_uleb128 (1);
1972   out_uleb128 (DW_TAG_compile_unit);
1973   out_byte (DW_CHILDREN_no);
1974   if (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit)
1975     out_abbrev (DW_AT_stmt_list, DW_FORM_data4);
1976   else
1977     out_abbrev (DW_AT_stmt_list, DW_FORM_data8);
1978   if (all_segs->next == NULL)
1979     {
1980       out_abbrev (DW_AT_low_pc, DW_FORM_addr);
1981       if (DWARF2_VERSION < 4)
1982         out_abbrev (DW_AT_high_pc, DW_FORM_addr);
1983       else
1984         out_abbrev (DW_AT_high_pc, (sizeof_address == 4
1985                                     ? DW_FORM_data4 : DW_FORM_data8));
1986     }
1987   else
1988     {
1989       if (DWARF2_FORMAT (info_seg) == dwarf2_format_32bit)
1990         out_abbrev (DW_AT_ranges, DW_FORM_data4);
1991       else
1992         out_abbrev (DW_AT_ranges, DW_FORM_data8);
1993     }
1994   out_abbrev (DW_AT_name, DW_FORM_strp);
1995   out_abbrev (DW_AT_comp_dir, DW_FORM_strp);
1996   out_abbrev (DW_AT_producer, DW_FORM_strp);
1997   out_abbrev (DW_AT_language, DW_FORM_data2);
1998   out_abbrev (0, 0);
1999
2000   /* Terminate the abbreviations for this compilation unit.  */
2001   out_byte (0);
2002 }
2003
2004 /* Emit a description of this compilation unit for .debug_info.  */
2005
2006 static void
2007 out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT ranges_seg,
2008                 symbolS *name_sym, symbolS *comp_dir_sym, symbolS *producer_sym)
2009 {
2010   expressionS exp;
2011   symbolS *info_end;
2012   int sizeof_offset;
2013
2014   sizeof_offset = out_header (info_seg, &exp);
2015   info_end = exp.X_add_symbol;
2016
2017   /* DWARF version.  */
2018   out_two (DWARF2_VERSION);
2019
2020   /* .debug_abbrev offset */
2021   TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
2022
2023   /* Target address size.  */
2024   out_byte (sizeof_address);
2025
2026   /* DW_TAG_compile_unit DIE abbrev */
2027   out_uleb128 (1);
2028
2029   /* DW_AT_stmt_list */
2030   TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg),
2031                          (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit
2032                           ? 4 : 8));
2033
2034   /* These two attributes are emitted if all of the code is contiguous.  */
2035   if (all_segs->next == NULL)
2036     {
2037       /* DW_AT_low_pc */
2038       exp.X_op = O_symbol;
2039       exp.X_add_symbol = all_segs->text_start;
2040       exp.X_add_number = 0;
2041       emit_expr (&exp, sizeof_address);
2042
2043       /* DW_AT_high_pc */
2044       if (DWARF2_VERSION < 4)
2045         exp.X_op = O_symbol;
2046       else
2047         {
2048           exp.X_op = O_subtract;
2049           exp.X_op_symbol = all_segs->text_start;
2050         }
2051       exp.X_add_symbol = all_segs->text_end;
2052       exp.X_add_number = 0;
2053       emit_expr (&exp, sizeof_address);
2054     }
2055   else
2056     {
2057       /* This attribute is emitted if the code is disjoint.  */
2058       /* DW_AT_ranges.  */
2059       TC_DWARF2_EMIT_OFFSET (section_symbol (ranges_seg), sizeof_offset);
2060     }
2061
2062   /* DW_AT_name, DW_AT_comp_dir and DW_AT_producer.  Symbols in .debug_str
2063      setup in out_debug_str below.  */
2064   TC_DWARF2_EMIT_OFFSET (name_sym, sizeof_offset);
2065   TC_DWARF2_EMIT_OFFSET (comp_dir_sym, sizeof_offset);
2066   TC_DWARF2_EMIT_OFFSET (producer_sym, sizeof_offset);
2067
2068   /* DW_AT_language.  Yes, this is probably not really MIPS, but the
2069      dwarf2 draft has no standard code for assembler.  */
2070   out_two (DW_LANG_Mips_Assembler);
2071
2072   symbol_set_value_now (info_end);
2073 }
2074
2075 /* Emit the three debug strings needed in .debug_str and setup symbols
2076    to them for use in out_debug_info.  */
2077 static void
2078 out_debug_str (segT str_seg, symbolS **name_sym, symbolS **comp_dir_sym,
2079                symbolS **producer_sym)
2080 {
2081   char producer[128];
2082   const char *comp_dir;
2083   const char *dirname;
2084   char *p;
2085   int len;
2086
2087   subseg_set (str_seg, 0);
2088
2089   /* DW_AT_name.  We don't have the actual file name that was present
2090      on the command line, so assume files[1] is the main input file.
2091      We're not supposed to get called unless at least one line number
2092      entry was emitted, so this should always be defined.  */
2093   *name_sym = symbol_temp_new_now ();
2094   if (files_in_use == 0)
2095     abort ();
2096   if (files[1].dir)
2097     {
2098       dirname = remap_debug_filename (dirs[files[1].dir]);
2099       len = strlen (dirname);
2100 #ifdef TE_VMS
2101       /* Already has trailing slash.  */
2102       p = frag_more (len);
2103       memcpy (p, dirname, len);
2104 #else
2105       p = frag_more (len + 1);
2106       memcpy (p, dirname, len);
2107       INSERT_DIR_SEPARATOR (p, len);
2108 #endif
2109     }
2110   len = strlen (files[1].filename) + 1;
2111   p = frag_more (len);
2112   memcpy (p, files[1].filename, len);
2113
2114   /* DW_AT_comp_dir */
2115   *comp_dir_sym = symbol_temp_new_now ();
2116   comp_dir = remap_debug_filename (getpwd ());
2117   len = strlen (comp_dir) + 1;
2118   p = frag_more (len);
2119   memcpy (p, comp_dir, len);
2120
2121   /* DW_AT_producer */
2122   *producer_sym = symbol_temp_new_now ();
2123   sprintf (producer, "GNU AS %s", VERSION);
2124   len = strlen (producer) + 1;
2125   p = frag_more (len);
2126   memcpy (p, producer, len);
2127 }
2128
2129 void
2130 dwarf2_init (void)
2131 {
2132   last_seg_ptr = &all_segs;
2133 }
2134
2135
2136 /* Finish the dwarf2 debug sections.  We emit .debug.line if there
2137    were any .file/.loc directives, or --gdwarf2 was given, or if the
2138    file has a non-empty .debug_info section and an empty .debug_line
2139    section.  If we emit .debug_line, and the .debug_info section is
2140    empty, we also emit .debug_info, .debug_aranges and .debug_abbrev.
2141    ALL_SEGS will be non-null if there were any .file/.loc directives,
2142    or --gdwarf2 was given and there were any located instructions
2143    emitted.  */
2144
2145 void
2146 dwarf2_finish (void)
2147 {
2148   segT line_seg;
2149   struct line_seg *s;
2150   segT info_seg;
2151   int emit_other_sections = 0;
2152   int empty_debug_line = 0;
2153
2154   info_seg = bfd_get_section_by_name (stdoutput, ".debug_info");
2155   emit_other_sections = info_seg == NULL || !seg_not_empty_p (info_seg);
2156
2157   line_seg = bfd_get_section_by_name (stdoutput, ".debug_line");
2158   empty_debug_line = line_seg == NULL || !seg_not_empty_p (line_seg);
2159
2160   /* We can't construct a new debug_line section if we already have one.
2161      Give an error.  */
2162   if (all_segs && !empty_debug_line)
2163     as_fatal ("duplicate .debug_line sections");
2164
2165   if ((!all_segs && emit_other_sections)
2166       || (!emit_other_sections && !empty_debug_line))
2167     /* If there is no line information and no non-empty .debug_info
2168        section, or if there is both a non-empty .debug_info and a non-empty
2169        .debug_line, then we do nothing.  */
2170     return;
2171
2172   /* Calculate the size of an address for the target machine.  */
2173   sizeof_address = DWARF2_ADDR_SIZE (stdoutput);
2174
2175   /* Create and switch to the line number section.  */
2176   line_seg = subseg_new (".debug_line", 0);
2177   bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY | SEC_DEBUGGING);
2178
2179   /* For each subsection, chain the debug entries together.  */
2180   for (s = all_segs; s; s = s->next)
2181     {
2182       struct line_subseg *lss = s->head;
2183       struct line_entry **ptail = lss->ptail;
2184
2185       while ((lss = lss->next) != NULL)
2186         {
2187           *ptail = lss->head;
2188           ptail = lss->ptail;
2189         }
2190     }
2191
2192   out_debug_line (line_seg);
2193
2194   /* If this is assembler generated line info, and there is no
2195      debug_info already, we need .debug_info, .debug_abbrev and
2196      .debug_str sections as well.  */
2197   if (emit_other_sections)
2198     {
2199       segT abbrev_seg;
2200       segT aranges_seg;
2201       segT ranges_seg;
2202       segT str_seg;
2203       symbolS *name_sym, *comp_dir_sym, *producer_sym;
2204
2205       gas_assert (all_segs);
2206
2207       info_seg = subseg_new (".debug_info", 0);
2208       abbrev_seg = subseg_new (".debug_abbrev", 0);
2209       aranges_seg = subseg_new (".debug_aranges", 0);
2210       str_seg = subseg_new (".debug_str", 0);
2211
2212       bfd_set_section_flags (stdoutput, info_seg,
2213                              SEC_READONLY | SEC_DEBUGGING);
2214       bfd_set_section_flags (stdoutput, abbrev_seg,
2215                              SEC_READONLY | SEC_DEBUGGING);
2216       bfd_set_section_flags (stdoutput, aranges_seg,
2217                              SEC_READONLY | SEC_DEBUGGING);
2218       bfd_set_section_flags (stdoutput, str_seg,
2219                              (SEC_READONLY | SEC_DEBUGGING
2220                               | SEC_MERGE | SEC_STRINGS));
2221       str_seg->entsize = 1;
2222
2223       record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
2224
2225       if (all_segs->next == NULL)
2226         ranges_seg = NULL;
2227       else
2228         {
2229           ranges_seg = subseg_new (".debug_ranges", 0);
2230           bfd_set_section_flags (stdoutput, ranges_seg,
2231                                  SEC_READONLY | SEC_DEBUGGING);
2232           record_alignment (ranges_seg, ffs (2 * sizeof_address) - 1);
2233           out_debug_ranges (ranges_seg);
2234         }
2235
2236       out_debug_aranges (aranges_seg, info_seg);
2237       out_debug_abbrev (abbrev_seg, info_seg, line_seg);
2238       out_debug_str (str_seg, &name_sym, &comp_dir_sym, &producer_sym);
2239       out_debug_info (info_seg, abbrev_seg, line_seg, ranges_seg,
2240                       name_sym, comp_dir_sym, producer_sym);
2241     }
2242 }
2243
2244 /* Perform any deferred checks pertaining to debug information.  */
2245
2246 void
2247 dwarf2dbg_final_check (void)
2248 {
2249   /* Perform reset-view checks.  Don't evaluate view_assert_failed
2250      recursively: it could be very deep.  It's a chain of adds, with
2251      each chain element pointing to the next in X_add_symbol, and
2252      holding the check value in X_op_symbol.  */
2253   while (view_assert_failed)
2254     {
2255       expressionS *exp;
2256       symbolS *sym;
2257       offsetT failed;
2258
2259       gas_assert (!symbol_resolved_p (view_assert_failed));
2260
2261       exp = symbol_get_value_expression (view_assert_failed);
2262       sym = view_assert_failed;
2263
2264       /* If view_assert_failed looks like a compound check in the
2265          chain, break it up.  */
2266       if (exp->X_op == O_add && exp->X_add_number == 0 && exp->X_unsigned)
2267         {
2268           view_assert_failed = exp->X_add_symbol;
2269           sym = exp->X_op_symbol;
2270         }
2271       else
2272         view_assert_failed = NULL;
2273
2274       failed = resolve_symbol_value (sym);
2275       if (!symbol_resolved_p (sym) || failed)
2276         {
2277           as_bad (_("view number mismatch"));
2278           break;
2279         }
2280     }
2281 }