Minor reorganization of fetch_registers/store_registers in windows-nat.c
[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   current.view = NULL;
628 }
629
630 /* Called for each (preferably code) label.  If dwarf2_loc_mark_labels
631    is enabled, emit a basic block marker.  */
632
633 void
634 dwarf2_emit_label (symbolS *label)
635 {
636   struct dwarf2_line_info loc;
637
638   if (!dwarf2_loc_mark_labels)
639     return;
640   if (S_GET_SEGMENT (label) != now_seg)
641     return;
642   if (!(bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE))
643     return;
644   if (files_in_use == 0 && debug_type != DEBUG_DWARF2)
645     return;
646
647   dwarf2_where (&loc);
648
649   loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
650
651   dwarf2_gen_line_info_1 (label, &loc);
652   dwarf2_consume_line_info ();
653 }
654
655 /* Get a .debug_line file number for FILENAME.  If NUM is nonzero,
656    allocate it on that file table slot, otherwise return the first
657    empty one.  */
658
659 static unsigned int
660 get_filenum (const char *filename, unsigned int num)
661 {
662   static unsigned int last_used, last_used_dir_len;
663   const char *file;
664   size_t dir_len;
665   unsigned int i, dir;
666
667   if (num == 0 && last_used)
668     {
669       if (! files[last_used].dir
670           && filename_cmp (filename, files[last_used].filename) == 0)
671         return last_used;
672       if (files[last_used].dir
673           && filename_ncmp (filename, dirs[files[last_used].dir],
674                             last_used_dir_len) == 0
675           && IS_DIR_SEPARATOR (filename [last_used_dir_len])
676           && filename_cmp (filename + last_used_dir_len + 1,
677                            files[last_used].filename) == 0)
678         return last_used;
679     }
680
681   file = lbasename (filename);
682   /* Don't make empty string from / or A: from A:/ .  */
683 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
684   if (file <= filename + 3)
685     file = filename;
686 #else
687   if (file == filename + 1)
688     file = filename;
689 #endif
690   dir_len = file - filename;
691
692   dir = 0;
693   if (dir_len)
694     {
695 #ifndef DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
696       --dir_len;
697 #endif
698       for (dir = 1; dir < dirs_in_use; ++dir)
699         if (filename_ncmp (filename, dirs[dir], dir_len) == 0
700             && dirs[dir][dir_len] == '\0')
701           break;
702
703       if (dir >= dirs_in_use)
704         {
705           if (dir >= dirs_allocated)
706             {
707               dirs_allocated = dir + 32;
708               dirs = XRESIZEVEC (char *, dirs, dirs_allocated);
709             }
710
711           dirs[dir] = xmemdup0 (filename, dir_len);
712           dirs_in_use = dir + 1;
713         }
714     }
715
716   if (num == 0)
717     {
718       for (i = 1; i < files_in_use; ++i)
719         if (files[i].dir == dir
720             && files[i].filename
721             && filename_cmp (file, files[i].filename) == 0)
722           {
723             last_used = i;
724             last_used_dir_len = dir_len;
725             return i;
726           }
727     }
728   else
729     i = num;
730
731   if (i >= files_allocated)
732     {
733       unsigned int old = files_allocated;
734
735       files_allocated = i + 32;
736       files = XRESIZEVEC (struct file_entry, files, files_allocated);
737
738       memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
739     }
740
741   files[i].filename = num ? file : xstrdup (file);
742   files[i].dir = dir;
743   if (files_in_use < i + 1)
744     files_in_use = i + 1;
745   last_used = i;
746   last_used_dir_len = dir_len;
747
748   return i;
749 }
750
751 /* Handle two forms of .file directive:
752    - Pass .file "source.c" to s_app_file
753    - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
754
755    If an entry is added to the file table, return a pointer to the filename.  */
756
757 char *
758 dwarf2_directive_filename (void)
759 {
760   offsetT num;
761   char *filename;
762   int filename_len;
763
764   /* Continue to accept a bare string and pass it off.  */
765   SKIP_WHITESPACE ();
766   if (*input_line_pointer == '"')
767     {
768       s_app_file (0);
769       return NULL;
770     }
771
772   num = get_absolute_expression ();
773   filename = demand_copy_C_string (&filename_len);
774   if (filename == NULL)
775     return NULL;
776   demand_empty_rest_of_line ();
777
778   if (num < 1)
779     {
780       as_bad (_("file number less than one"));
781       return NULL;
782     }
783
784   /* A .file directive implies compiler generated debug information is
785      being supplied.  Turn off gas generated debug info.  */
786   debug_type = DEBUG_NONE;
787
788   if (num < (int) files_in_use && files[num].filename != 0)
789     {
790       as_bad (_("file number %ld already allocated"), (long) num);
791       return NULL;
792     }
793
794   get_filenum (filename, num);
795
796   return filename;
797 }
798
799 /* Calls dwarf2_directive_filename, but discards its result.
800    Used in pseudo-op tables where the function result is ignored.  */
801
802 void
803 dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED)
804 {
805   (void) dwarf2_directive_filename ();
806 }
807
808 void
809 dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
810 {
811   offsetT filenum, line;
812
813   /* If we see two .loc directives in a row, force the first one to be
814      output now.  */
815   if (dwarf2_loc_directive_seen)
816     dwarf2_emit_insn (0);
817
818   filenum = get_absolute_expression ();
819   SKIP_WHITESPACE ();
820   line = get_absolute_expression ();
821
822   if (filenum < 1)
823     {
824       as_bad (_("file number less than one"));
825       return;
826     }
827   if (filenum >= (int) files_in_use || files[filenum].filename == 0)
828     {
829       as_bad (_("unassigned file number %ld"), (long) filenum);
830       return;
831     }
832
833   current.filenum = filenum;
834   current.line = line;
835   current.discriminator = 0;
836
837 #ifndef NO_LISTING
838   if (listing)
839     {
840       if (files[filenum].dir)
841         {
842           size_t dir_len = strlen (dirs[files[filenum].dir]);
843           size_t file_len = strlen (files[filenum].filename);
844           char *cp = XNEWVEC (char, dir_len + 1 + file_len + 1);
845
846           memcpy (cp, dirs[files[filenum].dir], dir_len);
847           INSERT_DIR_SEPARATOR (cp, dir_len);
848           memcpy (cp + dir_len + 1, files[filenum].filename, file_len);
849           cp[dir_len + file_len + 1] = '\0';
850           listing_source_file (cp);
851           free (cp);
852         }
853       else
854         listing_source_file (files[filenum].filename);
855       listing_source_line (line);
856     }
857 #endif
858
859   SKIP_WHITESPACE ();
860   if (ISDIGIT (*input_line_pointer))
861     {
862       current.column = get_absolute_expression ();
863       SKIP_WHITESPACE ();
864     }
865
866   while (ISALPHA (*input_line_pointer))
867     {
868       char *p, c;
869       offsetT value;
870
871       c = get_symbol_name (& p);
872
873       if (strcmp (p, "basic_block") == 0)
874         {
875           current.flags |= DWARF2_FLAG_BASIC_BLOCK;
876           *input_line_pointer = c;
877         }
878       else if (strcmp (p, "prologue_end") == 0)
879         {
880           current.flags |= DWARF2_FLAG_PROLOGUE_END;
881           *input_line_pointer = c;
882         }
883       else if (strcmp (p, "epilogue_begin") == 0)
884         {
885           current.flags |= DWARF2_FLAG_EPILOGUE_BEGIN;
886           *input_line_pointer = c;
887         }
888       else if (strcmp (p, "is_stmt") == 0)
889         {
890           (void) restore_line_pointer (c);
891           value = get_absolute_expression ();
892           if (value == 0)
893             current.flags &= ~DWARF2_FLAG_IS_STMT;
894           else if (value == 1)
895             current.flags |= DWARF2_FLAG_IS_STMT;
896           else
897             {
898               as_bad (_("is_stmt value not 0 or 1"));
899               return;
900             }
901         }
902       else if (strcmp (p, "isa") == 0)
903         {
904           (void) restore_line_pointer (c);
905           value = get_absolute_expression ();
906           if (value >= 0)
907             current.isa = value;
908           else
909             {
910               as_bad (_("isa number less than zero"));
911               return;
912             }
913         }
914       else if (strcmp (p, "discriminator") == 0)
915         {
916           (void) restore_line_pointer (c);
917           value = get_absolute_expression ();
918           if (value >= 0)
919             current.discriminator = value;
920           else
921             {
922               as_bad (_("discriminator less than zero"));
923               return;
924             }
925         }
926       else if (strcmp (p, "view") == 0)
927         {
928           symbolS *sym;
929
930           (void) restore_line_pointer (c);
931           SKIP_WHITESPACE ();
932
933           if (ISDIGIT (*input_line_pointer)
934               || *input_line_pointer == '-')
935             {
936               bfd_boolean force_reset = *input_line_pointer == '-';
937
938               value = get_absolute_expression ();
939               if (value != 0)
940                 {
941                   as_bad (_("numeric view can only be asserted to zero"));
942                   return;
943                 }
944               if (force_reset && force_reset_view)
945                 sym = force_reset_view;
946               else
947                 {
948                   sym = symbol_temp_new (absolute_section, value,
949                                          &zero_address_frag);
950                   if (force_reset)
951                     force_reset_view = sym;
952                 }
953             }
954           else
955             {
956               char *name = read_symbol_name ();
957
958               if (!name)
959                 return;
960               sym = symbol_find_or_make (name);
961               if (S_IS_DEFINED (sym))
962                 {
963                   if (!S_CAN_BE_REDEFINED (sym))
964                     as_bad (_("symbol `%s' is already defined"), name);
965                   else
966                     sym = symbol_clone (sym, 1);
967                   S_SET_SEGMENT (sym, undefined_section);
968                   S_SET_VALUE (sym, 0);
969                   symbol_set_frag (sym, &zero_address_frag);
970                 }
971             }
972           current.view = sym;
973         }
974       else
975         {
976           as_bad (_("unknown .loc sub-directive `%s'"), p);
977           (void) restore_line_pointer (c);
978           return;
979         }
980
981       SKIP_WHITESPACE_AFTER_NAME ();
982     }
983
984   demand_empty_rest_of_line ();
985   dwarf2_loc_directive_seen = TRUE;
986   debug_type = DEBUG_NONE;
987
988   /* If we were given a view id, emit the row right away.  */
989   if (current.view)
990     dwarf2_emit_insn (0);
991 }
992
993 void
994 dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED)
995 {
996   offsetT value = get_absolute_expression ();
997
998   if (value != 0 && value != 1)
999     {
1000       as_bad (_("expected 0 or 1"));
1001       ignore_rest_of_line ();
1002     }
1003   else
1004     {
1005       dwarf2_loc_mark_labels = value != 0;
1006       demand_empty_rest_of_line ();
1007     }
1008 }
1009 \f
1010 static struct frag *
1011 first_frag_for_seg (segT seg)
1012 {
1013   return seg_info (seg)->frchainP->frch_root;
1014 }
1015
1016 static struct frag *
1017 last_frag_for_seg (segT seg)
1018 {
1019   frchainS *f = seg_info (seg)->frchainP;
1020
1021   while (f->frch_next != NULL)
1022     f = f->frch_next;
1023
1024   return f->frch_last;
1025 }
1026 \f
1027 /* Emit a single byte into the current segment.  */
1028
1029 static inline void
1030 out_byte (int byte)
1031 {
1032   FRAG_APPEND_1_CHAR (byte);
1033 }
1034
1035 /* Emit a statement program opcode into the current segment.  */
1036
1037 static inline void
1038 out_opcode (int opc)
1039 {
1040   out_byte (opc);
1041 }
1042
1043 /* Emit a two-byte word into the current segment.  */
1044
1045 static inline void
1046 out_two (int data)
1047 {
1048   md_number_to_chars (frag_more (2), data, 2);
1049 }
1050
1051 /* Emit a four byte word into the current segment.  */
1052
1053 static inline void
1054 out_four (int data)
1055 {
1056   md_number_to_chars (frag_more (4), data, 4);
1057 }
1058
1059 /* Emit an unsigned "little-endian base 128" number.  */
1060
1061 static void
1062 out_uleb128 (addressT value)
1063 {
1064   output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
1065 }
1066
1067 /* Emit a signed "little-endian base 128" number.  */
1068
1069 static void
1070 out_leb128 (addressT value)
1071 {
1072   output_leb128 (frag_more (sizeof_leb128 (value, 1)), value, 1);
1073 }
1074
1075 /* Emit a tuple for .debug_abbrev.  */
1076
1077 static inline void
1078 out_abbrev (int name, int form)
1079 {
1080   out_uleb128 (name);
1081   out_uleb128 (form);
1082 }
1083
1084 /* Get the size of a fragment.  */
1085
1086 static offsetT
1087 get_frag_fix (fragS *frag, segT seg)
1088 {
1089   frchainS *fr;
1090
1091   if (frag->fr_next)
1092     return frag->fr_fix;
1093
1094   /* If a fragment is the last in the chain, special measures must be
1095      taken to find its size before relaxation, since it may be pending
1096      on some subsegment chain.  */
1097   for (fr = seg_info (seg)->frchainP; fr; fr = fr->frch_next)
1098     if (fr->frch_last == frag)
1099       return (char *) obstack_next_free (&fr->frch_obstack) - frag->fr_literal;
1100
1101   abort ();
1102 }
1103
1104 /* Set an absolute address (may result in a relocation entry).  */
1105
1106 static void
1107 out_set_addr (symbolS *sym)
1108 {
1109   expressionS exp;
1110
1111   out_opcode (DW_LNS_extended_op);
1112   out_uleb128 (sizeof_address + 1);
1113
1114   out_opcode (DW_LNE_set_address);
1115   exp.X_op = O_symbol;
1116   exp.X_add_symbol = sym;
1117   exp.X_add_number = 0;
1118   emit_expr (&exp, sizeof_address);
1119 }
1120
1121 static void scale_addr_delta (addressT *);
1122
1123 static void
1124 scale_addr_delta (addressT *addr_delta)
1125 {
1126   static int printed_this = 0;
1127   if (DWARF2_LINE_MIN_INSN_LENGTH > 1)
1128     {
1129       if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0  && !printed_this)
1130         {
1131           as_bad("unaligned opcodes detected in executable segment");
1132           printed_this = 1;
1133         }
1134       *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
1135     }
1136 }
1137
1138 /* Encode a pair of line and address skips as efficiently as possible.
1139    Note that the line skip is signed, whereas the address skip is unsigned.
1140
1141    The following two routines *must* be kept in sync.  This is
1142    enforced by making emit_inc_line_addr abort if we do not emit
1143    exactly the expected number of bytes.  */
1144
1145 static int
1146 size_inc_line_addr (int line_delta, addressT addr_delta)
1147 {
1148   unsigned int tmp, opcode;
1149   int len = 0;
1150
1151   /* Scale the address delta by the minimum instruction length.  */
1152   scale_addr_delta (&addr_delta);
1153
1154   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
1155      We cannot use special opcodes here, since we want the end_sequence
1156      to emit the matrix entry.  */
1157   if (line_delta == INT_MAX)
1158     {
1159       if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
1160         len = 1;
1161       else
1162         len = 1 + sizeof_leb128 (addr_delta, 0);
1163       return len + 3;
1164     }
1165
1166   /* Bias the line delta by the base.  */
1167   tmp = line_delta - DWARF2_LINE_BASE;
1168
1169   /* If the line increment is out of range of a special opcode, we
1170      must encode it with DW_LNS_advance_line.  */
1171   if (tmp >= DWARF2_LINE_RANGE)
1172     {
1173       len = 1 + sizeof_leb128 (line_delta, 1);
1174       line_delta = 0;
1175       tmp = 0 - DWARF2_LINE_BASE;
1176     }
1177
1178   /* Bias the opcode by the special opcode base.  */
1179   tmp += DWARF2_LINE_OPCODE_BASE;
1180
1181   /* Avoid overflow when addr_delta is large.  */
1182   if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
1183     {
1184       /* Try using a special opcode.  */
1185       opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
1186       if (opcode <= 255)
1187         return len + 1;
1188
1189       /* Try using DW_LNS_const_add_pc followed by special op.  */
1190       opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
1191       if (opcode <= 255)
1192         return len + 2;
1193     }
1194
1195   /* Otherwise use DW_LNS_advance_pc.  */
1196   len += 1 + sizeof_leb128 (addr_delta, 0);
1197
1198   /* DW_LNS_copy or special opcode.  */
1199   len += 1;
1200
1201   return len;
1202 }
1203
1204 static void
1205 emit_inc_line_addr (int line_delta, addressT addr_delta, char *p, int len)
1206 {
1207   unsigned int tmp, opcode;
1208   int need_copy = 0;
1209   char *end = p + len;
1210
1211   /* Line number sequences cannot go backward in addresses.  This means
1212      we've incorrectly ordered the statements in the sequence.  */
1213   gas_assert ((offsetT) addr_delta >= 0);
1214
1215   /* Scale the address delta by the minimum instruction length.  */
1216   scale_addr_delta (&addr_delta);
1217
1218   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
1219      We cannot use special opcodes here, since we want the end_sequence
1220      to emit the matrix entry.  */
1221   if (line_delta == INT_MAX)
1222     {
1223       if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
1224         *p++ = DW_LNS_const_add_pc;
1225       else
1226         {
1227           *p++ = DW_LNS_advance_pc;
1228           p += output_leb128 (p, addr_delta, 0);
1229         }
1230
1231       *p++ = DW_LNS_extended_op;
1232       *p++ = 1;
1233       *p++ = DW_LNE_end_sequence;
1234       goto done;
1235     }
1236
1237   /* Bias the line delta by the base.  */
1238   tmp = line_delta - DWARF2_LINE_BASE;
1239
1240   /* If the line increment is out of range of a special opcode, we
1241      must encode it with DW_LNS_advance_line.  */
1242   if (tmp >= DWARF2_LINE_RANGE)
1243     {
1244       *p++ = DW_LNS_advance_line;
1245       p += output_leb128 (p, line_delta, 1);
1246
1247       line_delta = 0;
1248       tmp = 0 - DWARF2_LINE_BASE;
1249       need_copy = 1;
1250     }
1251
1252   /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
1253      special opcode.  */
1254   if (line_delta == 0 && addr_delta == 0)
1255     {
1256       *p++ = DW_LNS_copy;
1257       goto done;
1258     }
1259
1260   /* Bias the opcode by the special opcode base.  */
1261   tmp += DWARF2_LINE_OPCODE_BASE;
1262
1263   /* Avoid overflow when addr_delta is large.  */
1264   if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
1265     {
1266       /* Try using a special opcode.  */
1267       opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
1268       if (opcode <= 255)
1269         {
1270           *p++ = opcode;
1271           goto done;
1272         }
1273
1274       /* Try using DW_LNS_const_add_pc followed by special op.  */
1275       opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
1276       if (opcode <= 255)
1277         {
1278           *p++ = DW_LNS_const_add_pc;
1279           *p++ = opcode;
1280           goto done;
1281         }
1282     }
1283
1284   /* Otherwise use DW_LNS_advance_pc.  */
1285   *p++ = DW_LNS_advance_pc;
1286   p += output_leb128 (p, addr_delta, 0);
1287
1288   if (need_copy)
1289     *p++ = DW_LNS_copy;
1290   else
1291     *p++ = tmp;
1292
1293  done:
1294   gas_assert (p == end);
1295 }
1296
1297 /* Handy routine to combine calls to the above two routines.  */
1298
1299 static void
1300 out_inc_line_addr (int line_delta, addressT addr_delta)
1301 {
1302   int len = size_inc_line_addr (line_delta, addr_delta);
1303   emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
1304 }
1305
1306 /* Write out an alternative form of line and address skips using
1307    DW_LNS_fixed_advance_pc opcodes.  This uses more space than the default
1308    line and address information, but it is required if linker relaxation
1309    could change the code offsets.  The following two routines *must* be
1310    kept in sync.  */
1311 #define ADDR_DELTA_LIMIT 50000
1312
1313 static int
1314 size_fixed_inc_line_addr (int line_delta, addressT addr_delta)
1315 {
1316   int len = 0;
1317
1318   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.  */
1319   if (line_delta != INT_MAX)
1320     len = 1 + sizeof_leb128 (line_delta, 1);
1321
1322   if (addr_delta > ADDR_DELTA_LIMIT)
1323     {
1324       /* DW_LNS_extended_op */
1325       len += 1 + sizeof_leb128 (sizeof_address + 1, 0);
1326       /* DW_LNE_set_address */
1327       len += 1 + sizeof_address;
1328     }
1329   else
1330     /* DW_LNS_fixed_advance_pc */
1331     len += 3;
1332
1333   if (line_delta == INT_MAX)
1334     /* DW_LNS_extended_op + DW_LNE_end_sequence */
1335     len += 3;
1336   else
1337     /* DW_LNS_copy */
1338     len += 1;
1339
1340   return len;
1341 }
1342
1343 static void
1344 emit_fixed_inc_line_addr (int line_delta, addressT addr_delta, fragS *frag,
1345                           char *p, int len)
1346 {
1347   expressionS *pexp;
1348   char *end = p + len;
1349
1350   /* Line number sequences cannot go backward in addresses.  This means
1351      we've incorrectly ordered the statements in the sequence.  */
1352   gas_assert ((offsetT) addr_delta >= 0);
1353
1354   /* Verify that we have kept in sync with size_fixed_inc_line_addr.  */
1355   gas_assert (len == size_fixed_inc_line_addr (line_delta, addr_delta));
1356
1357   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.  */
1358   if (line_delta != INT_MAX)
1359     {
1360       *p++ = DW_LNS_advance_line;
1361       p += output_leb128 (p, line_delta, 1);
1362     }
1363
1364   pexp = symbol_get_value_expression (frag->fr_symbol);
1365
1366   /* The DW_LNS_fixed_advance_pc opcode has a 2-byte operand so it can
1367      advance the address by at most 64K.  Linker relaxation (without
1368      which this function would not be used) could change the operand by
1369      an unknown amount.  If the address increment is getting close to
1370      the limit, just reset the address.  */
1371   if (addr_delta > ADDR_DELTA_LIMIT)
1372     {
1373       symbolS *to_sym;
1374       expressionS exp;
1375
1376       gas_assert (pexp->X_op == O_subtract);
1377       to_sym = pexp->X_add_symbol;
1378
1379       *p++ = DW_LNS_extended_op;
1380       p += output_leb128 (p, sizeof_address + 1, 0);
1381       *p++ = DW_LNE_set_address;
1382       exp.X_op = O_symbol;
1383       exp.X_add_symbol = to_sym;
1384       exp.X_add_number = 0;
1385       emit_expr_fix (&exp, sizeof_address, frag, p, TC_PARSE_CONS_RETURN_NONE);
1386       p += sizeof_address;
1387     }
1388   else
1389     {
1390       *p++ = DW_LNS_fixed_advance_pc;
1391       emit_expr_fix (pexp, 2, frag, p, TC_PARSE_CONS_RETURN_NONE);
1392       p += 2;
1393     }
1394
1395   if (line_delta == INT_MAX)
1396     {
1397       *p++ = DW_LNS_extended_op;
1398       *p++ = 1;
1399       *p++ = DW_LNE_end_sequence;
1400     }
1401   else
1402     *p++ = DW_LNS_copy;
1403
1404   gas_assert (p == end);
1405 }
1406
1407 /* Generate a variant frag that we can use to relax address/line
1408    increments between fragments of the target segment.  */
1409
1410 static void
1411 relax_inc_line_addr (int line_delta, symbolS *to_sym, symbolS *from_sym)
1412 {
1413   expressionS exp;
1414   int max_chars;
1415
1416   exp.X_op = O_subtract;
1417   exp.X_add_symbol = to_sym;
1418   exp.X_op_symbol = from_sym;
1419   exp.X_add_number = 0;
1420
1421   /* The maximum size of the frag is the line delta with a maximum
1422      sized address delta.  */
1423   if (DWARF2_USE_FIXED_ADVANCE_PC)
1424     max_chars = size_fixed_inc_line_addr (line_delta,
1425                                           -DWARF2_LINE_MIN_INSN_LENGTH);
1426   else
1427     max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
1428
1429   frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
1430             make_expr_symbol (&exp), line_delta, NULL);
1431 }
1432
1433 /* The function estimates the size of a rs_dwarf2dbg variant frag
1434    based on the current values of the symbols.  It is called before
1435    the relaxation loop.  We set fr_subtype to the expected length.  */
1436
1437 int
1438 dwarf2dbg_estimate_size_before_relax (fragS *frag)
1439 {
1440   offsetT addr_delta;
1441   int size;
1442
1443   addr_delta = resolve_symbol_value (frag->fr_symbol);
1444   if (DWARF2_USE_FIXED_ADVANCE_PC)
1445     size = size_fixed_inc_line_addr (frag->fr_offset, addr_delta);
1446   else
1447     size = size_inc_line_addr (frag->fr_offset, addr_delta);
1448
1449   frag->fr_subtype = size;
1450
1451   return size;
1452 }
1453
1454 /* This function relaxes a rs_dwarf2dbg variant frag based on the
1455    current values of the symbols.  fr_subtype is the current length
1456    of the frag.  This returns the change in frag length.  */
1457
1458 int
1459 dwarf2dbg_relax_frag (fragS *frag)
1460 {
1461   int old_size, new_size;
1462
1463   old_size = frag->fr_subtype;
1464   new_size = dwarf2dbg_estimate_size_before_relax (frag);
1465
1466   return new_size - old_size;
1467 }
1468
1469 /* This function converts a rs_dwarf2dbg variant frag into a normal
1470    fill frag.  This is called after all relaxation has been done.
1471    fr_subtype will be the desired length of the frag.  */
1472
1473 void
1474 dwarf2dbg_convert_frag (fragS *frag)
1475 {
1476   offsetT addr_diff;
1477
1478   if (DWARF2_USE_FIXED_ADVANCE_PC)
1479     {
1480       /* If linker relaxation is enabled then the distance between the two
1481          symbols in the frag->fr_symbol expression might change.  Hence we
1482          cannot rely upon the value computed by resolve_symbol_value.
1483          Instead we leave the expression unfinalized and allow
1484          emit_fixed_inc_line_addr to create a fixup (which later becomes a
1485          relocation) that will allow the linker to correctly compute the
1486          actual address difference.  We have to use a fixed line advance for
1487          this as we cannot (easily) relocate leb128 encoded values.  */
1488       int saved_finalize_syms = finalize_syms;
1489
1490       finalize_syms = 0;
1491       addr_diff = resolve_symbol_value (frag->fr_symbol);
1492       finalize_syms = saved_finalize_syms;
1493     }
1494   else
1495     addr_diff = resolve_symbol_value (frag->fr_symbol);
1496
1497   /* fr_var carries the max_chars that we created the fragment with.
1498      fr_subtype carries the current expected length.  We must, of
1499      course, have allocated enough memory earlier.  */
1500   gas_assert (frag->fr_var >= (int) frag->fr_subtype);
1501
1502   if (DWARF2_USE_FIXED_ADVANCE_PC)
1503     emit_fixed_inc_line_addr (frag->fr_offset, addr_diff, frag,
1504                               frag->fr_literal + frag->fr_fix,
1505                               frag->fr_subtype);
1506   else
1507     emit_inc_line_addr (frag->fr_offset, addr_diff,
1508                         frag->fr_literal + frag->fr_fix, frag->fr_subtype);
1509
1510   frag->fr_fix += frag->fr_subtype;
1511   frag->fr_type = rs_fill;
1512   frag->fr_var = 0;
1513   frag->fr_offset = 0;
1514 }
1515
1516 /* Generate .debug_line content for the chain of line number entries
1517    beginning at E, for segment SEG.  */
1518
1519 static void
1520 process_entries (segT seg, struct line_entry *e)
1521 {
1522   unsigned filenum = 1;
1523   unsigned line = 1;
1524   unsigned column = 0;
1525   unsigned isa = 0;
1526   unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
1527   fragS *last_frag = NULL, *frag;
1528   addressT last_frag_ofs = 0, frag_ofs;
1529   symbolS *last_lab = NULL, *lab;
1530   struct line_entry *next;
1531
1532   if (flag_dwarf_sections)
1533     {
1534       char * name;
1535       const char * sec_name;
1536
1537       /* Switch to the relevant sub-section before we start to emit
1538          the line number table.
1539
1540          FIXME: These sub-sections do not have a normal Line Number
1541          Program Header, thus strictly speaking they are not valid
1542          DWARF sections.  Unfortunately the DWARF standard assumes
1543          a one-to-one relationship between compilation units and
1544          line number tables.  Thus we have to have a .debug_line
1545          section, as well as our sub-sections, and we have to ensure
1546          that all of the sub-sections are merged into a proper
1547          .debug_line section before a debugger sees them.  */
1548
1549       sec_name = bfd_get_section_name (stdoutput, seg);
1550       if (strcmp (sec_name, ".text") != 0)
1551         {
1552           name = concat (".debug_line", sec_name, (char *) NULL);
1553           subseg_set (subseg_get (name, FALSE), 0);
1554         }
1555       else
1556         /* Don't create a .debug_line.text section -
1557            that is redundant.  Instead just switch back to the
1558            normal .debug_line section.  */
1559         subseg_set (subseg_get (".debug_line", FALSE), 0);
1560     }
1561
1562   do
1563     {
1564       int line_delta;
1565
1566       if (filenum != e->loc.filenum)
1567         {
1568           filenum = e->loc.filenum;
1569           out_opcode (DW_LNS_set_file);
1570           out_uleb128 (filenum);
1571         }
1572
1573       if (column != e->loc.column)
1574         {
1575           column = e->loc.column;
1576           out_opcode (DW_LNS_set_column);
1577           out_uleb128 (column);
1578         }
1579
1580       if (e->loc.discriminator != 0)
1581         {
1582           out_opcode (DW_LNS_extended_op);
1583           out_leb128 (1 + sizeof_leb128 (e->loc.discriminator, 0));
1584           out_opcode (DW_LNE_set_discriminator);
1585           out_uleb128 (e->loc.discriminator);
1586         }
1587
1588       if (isa != e->loc.isa)
1589         {
1590           isa = e->loc.isa;
1591           out_opcode (DW_LNS_set_isa);
1592           out_uleb128 (isa);
1593         }
1594
1595       if ((e->loc.flags ^ flags) & DWARF2_FLAG_IS_STMT)
1596         {
1597           flags = e->loc.flags;
1598           out_opcode (DW_LNS_negate_stmt);
1599         }
1600
1601       if (e->loc.flags & DWARF2_FLAG_BASIC_BLOCK)
1602         out_opcode (DW_LNS_set_basic_block);
1603
1604       if (e->loc.flags & DWARF2_FLAG_PROLOGUE_END)
1605         out_opcode (DW_LNS_set_prologue_end);
1606
1607       if (e->loc.flags & DWARF2_FLAG_EPILOGUE_BEGIN)
1608         out_opcode (DW_LNS_set_epilogue_begin);
1609
1610       /* Don't try to optimize away redundant entries; gdb wants two
1611          entries for a function where the code starts on the same line as
1612          the {, and there's no way to identify that case here.  Trust gcc
1613          to optimize appropriately.  */
1614       line_delta = e->loc.line - line;
1615       lab = e->label;
1616       frag = symbol_get_frag (lab);
1617       frag_ofs = S_GET_VALUE (lab);
1618
1619       if (last_frag == NULL
1620           || (e->loc.view == force_reset_view && force_reset_view
1621               /* If we're going to reset the view, but we know we're
1622                  advancing the PC, we don't have to force with
1623                  set_address.  We know we do when we're at the same
1624                  address of the same frag, and we know we might when
1625                  we're in the beginning of a frag, and we were at the
1626                  end of the previous frag.  */
1627               && (frag == last_frag
1628                   ? (last_frag_ofs == frag_ofs)
1629                   : (frag_ofs == 0
1630                      && ((offsetT)last_frag_ofs
1631                          >= get_frag_fix (last_frag, seg))))))
1632         {
1633           out_set_addr (lab);
1634           out_inc_line_addr (line_delta, 0);
1635         }
1636       else if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1637         out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
1638       else
1639         relax_inc_line_addr (line_delta, lab, last_lab);
1640
1641       line = e->loc.line;
1642       last_lab = lab;
1643       last_frag = frag;
1644       last_frag_ofs = frag_ofs;
1645
1646       next = e->next;
1647       free (e);
1648       e = next;
1649     }
1650   while (e);
1651
1652   /* Emit a DW_LNE_end_sequence for the end of the section.  */
1653   frag = last_frag_for_seg (seg);
1654   frag_ofs = get_frag_fix (frag, seg);
1655   if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1656     out_inc_line_addr (INT_MAX, frag_ofs - last_frag_ofs);
1657   else
1658     {
1659       lab = symbol_temp_new (seg, frag_ofs, frag);
1660       relax_inc_line_addr (INT_MAX, lab, last_lab);
1661     }
1662 }
1663
1664 /* Emit the directory and file tables for .debug_line.  */
1665
1666 static void
1667 out_file_list (void)
1668 {
1669   size_t size;
1670   const char *dir;
1671   char *cp;
1672   unsigned int i;
1673
1674   /* Emit directory list.  */
1675   for (i = 1; i < dirs_in_use; ++i)
1676     {
1677       dir = remap_debug_filename (dirs[i]);
1678       size = strlen (dir) + 1;
1679       cp = frag_more (size);
1680       memcpy (cp, dir, size);
1681     }
1682   /* Terminate it.  */
1683   out_byte ('\0');
1684
1685   for (i = 1; i < files_in_use; ++i)
1686     {
1687       const char *fullfilename;
1688
1689       if (files[i].filename == NULL)
1690         {
1691           as_bad (_("unassigned file number %ld"), (long) i);
1692           /* Prevent a crash later, particularly for file 1.  */
1693           files[i].filename = "";
1694           continue;
1695         }
1696
1697       fullfilename = DWARF2_FILE_NAME (files[i].filename,
1698                                        files[i].dir ? dirs [files [i].dir] : "");
1699       size = strlen (fullfilename) + 1;
1700       cp = frag_more (size);
1701       memcpy (cp, fullfilename, size);
1702
1703       out_uleb128 (files[i].dir);       /* directory number */
1704       /* Output the last modification timestamp.  */
1705       out_uleb128 (DWARF2_FILE_TIME_NAME (files[i].filename,
1706                                           files[i].dir ? dirs [files [i].dir] : ""));
1707       /* Output the filesize.  */
1708       out_uleb128 (DWARF2_FILE_SIZE_NAME (files[i].filename,
1709                                           files[i].dir ? dirs [files [i].dir] : ""));
1710     }
1711
1712   /* Terminate filename list.  */
1713   out_byte (0);
1714 }
1715
1716 /* Switch to SEC and output a header length field.  Return the size of
1717    offsets used in SEC.  The caller must set EXPR->X_add_symbol value
1718    to the end of the section.  EXPR->X_add_number will be set to the
1719    negative size of the header.  */
1720
1721 static int
1722 out_header (asection *sec, expressionS *exp)
1723 {
1724   symbolS *start_sym;
1725   symbolS *end_sym;
1726
1727   subseg_set (sec, 0);
1728
1729   if (flag_dwarf_sections)
1730     {
1731       /* If we are going to put the start and end symbols in different
1732          sections, then we need real symbols, not just fake, local ones.  */
1733       frag_now_fix ();
1734       start_sym = symbol_make (".Ldebug_line_start");
1735       end_sym = symbol_make (".Ldebug_line_end");
1736       symbol_set_value_now (start_sym);
1737     }
1738   else
1739     {
1740       start_sym = symbol_temp_new_now ();
1741       end_sym = symbol_temp_make ();
1742     }
1743
1744   /* Total length of the information.  */
1745   exp->X_op = O_subtract;
1746   exp->X_add_symbol = end_sym;
1747   exp->X_op_symbol = start_sym;
1748
1749   switch (DWARF2_FORMAT (sec))
1750     {
1751     case dwarf2_format_32bit:
1752       exp->X_add_number = -4;
1753       emit_expr (exp, 4);
1754       return 4;
1755
1756     case dwarf2_format_64bit:
1757       exp->X_add_number = -12;
1758       out_four (-1);
1759       emit_expr (exp, 8);
1760       return 8;
1761
1762     case dwarf2_format_64bit_irix:
1763       exp->X_add_number = -8;
1764       emit_expr (exp, 8);
1765       return 8;
1766     }
1767
1768   as_fatal (_("internal error: unknown dwarf2 format"));
1769   return 0;
1770 }
1771
1772 /* Emit the collected .debug_line data.  */
1773
1774 static void
1775 out_debug_line (segT line_seg)
1776 {
1777   expressionS exp;
1778   symbolS *prologue_start, *prologue_end;
1779   symbolS *line_end;
1780   struct line_seg *s;
1781   int sizeof_offset;
1782
1783   sizeof_offset = out_header (line_seg, &exp);
1784   line_end = exp.X_add_symbol;
1785
1786   /* Version.  */
1787   out_two (DWARF2_LINE_VERSION);
1788
1789   /* Length of the prologue following this length.  */
1790   prologue_start = symbol_temp_make ();
1791   prologue_end = symbol_temp_make ();
1792   exp.X_op = O_subtract;
1793   exp.X_add_symbol = prologue_end;
1794   exp.X_op_symbol = prologue_start;
1795   exp.X_add_number = 0;
1796   emit_expr (&exp, sizeof_offset);
1797   symbol_set_value_now (prologue_start);
1798
1799   /* Parameters of the state machine.  */
1800   out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
1801   out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
1802   out_byte (DWARF2_LINE_BASE);
1803   out_byte (DWARF2_LINE_RANGE);
1804   out_byte (DWARF2_LINE_OPCODE_BASE);
1805
1806   /* Standard opcode lengths.  */
1807   out_byte (0);                 /* DW_LNS_copy */
1808   out_byte (1);                 /* DW_LNS_advance_pc */
1809   out_byte (1);                 /* DW_LNS_advance_line */
1810   out_byte (1);                 /* DW_LNS_set_file */
1811   out_byte (1);                 /* DW_LNS_set_column */
1812   out_byte (0);                 /* DW_LNS_negate_stmt */
1813   out_byte (0);                 /* DW_LNS_set_basic_block */
1814   out_byte (0);                 /* DW_LNS_const_add_pc */
1815   out_byte (1);                 /* DW_LNS_fixed_advance_pc */
1816   out_byte (0);                 /* DW_LNS_set_prologue_end */
1817   out_byte (0);                 /* DW_LNS_set_epilogue_begin */
1818   out_byte (1);                 /* DW_LNS_set_isa */
1819
1820   out_file_list ();
1821
1822   symbol_set_value_now (prologue_end);
1823
1824   /* For each section, emit a statement program.  */
1825   for (s = all_segs; s; s = s->next)
1826     if (SEG_NORMAL (s->seg))
1827       process_entries (s->seg, s->head->head);
1828     else
1829       as_warn ("dwarf line number information for %s ignored",
1830                segment_name (s->seg));
1831
1832   if (flag_dwarf_sections)
1833     /* We have to switch to the special .debug_line_end section
1834        before emitting the end-of-debug_line symbol.  The linker
1835        script arranges for this section to be placed after all the
1836        (potentially garbage collected) .debug_line.<foo> sections.
1837        This section contains the line_end symbol which is used to
1838        compute the size of the linked .debug_line section, as seen
1839        in the DWARF Line Number header.  */
1840     subseg_set (subseg_get (".debug_line_end", FALSE), 0);
1841
1842   symbol_set_value_now (line_end);
1843 }
1844
1845 static void
1846 out_debug_ranges (segT ranges_seg)
1847 {
1848   unsigned int addr_size = sizeof_address;
1849   struct line_seg *s;
1850   expressionS exp;
1851   unsigned int i;
1852
1853   subseg_set (ranges_seg, 0);
1854
1855   /* Base Address Entry.  */
1856   for (i = 0; i < addr_size; i++)
1857     out_byte (0xff);
1858   for (i = 0; i < addr_size; i++)
1859     out_byte (0);
1860
1861   /* Range List Entry.  */
1862   for (s = all_segs; s; s = s->next)
1863     {
1864       fragS *frag;
1865       symbolS *beg, *end;
1866
1867       frag = first_frag_for_seg (s->seg);
1868       beg = symbol_temp_new (s->seg, 0, frag);
1869       s->text_start = beg;
1870
1871       frag = last_frag_for_seg (s->seg);
1872       end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1873       s->text_end = end;
1874
1875       exp.X_op = O_symbol;
1876       exp.X_add_symbol = beg;
1877       exp.X_add_number = 0;
1878       emit_expr (&exp, addr_size);
1879
1880       exp.X_op = O_symbol;
1881       exp.X_add_symbol = end;
1882       exp.X_add_number = 0;
1883       emit_expr (&exp, addr_size);
1884     }
1885
1886   /* End of Range Entry.   */
1887   for (i = 0; i < addr_size; i++)
1888     out_byte (0);
1889   for (i = 0; i < addr_size; i++)
1890     out_byte (0);
1891 }
1892
1893 /* Emit data for .debug_aranges.  */
1894
1895 static void
1896 out_debug_aranges (segT aranges_seg, segT info_seg)
1897 {
1898   unsigned int addr_size = sizeof_address;
1899   offsetT size;
1900   struct line_seg *s;
1901   expressionS exp;
1902   symbolS *aranges_end;
1903   char *p;
1904   int sizeof_offset;
1905
1906   sizeof_offset = out_header (aranges_seg, &exp);
1907   aranges_end = exp.X_add_symbol;
1908   size = -exp.X_add_number;
1909
1910   /* Version.  */
1911   out_two (DWARF2_ARANGES_VERSION);
1912   size += 2;
1913
1914   /* Offset to .debug_info.  */
1915   TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), sizeof_offset);
1916   size += sizeof_offset;
1917
1918   /* Size of an address (offset portion).  */
1919   out_byte (addr_size);
1920   size++;
1921
1922   /* Size of a segment descriptor.  */
1923   out_byte (0);
1924   size++;
1925
1926   /* Align the header.  */
1927   while ((size++ % (2 * addr_size)) > 0)
1928     out_byte (0);
1929
1930   for (s = all_segs; s; s = s->next)
1931     {
1932       fragS *frag;
1933       symbolS *beg, *end;
1934
1935       frag = first_frag_for_seg (s->seg);
1936       beg = symbol_temp_new (s->seg, 0, frag);
1937       s->text_start = beg;
1938
1939       frag = last_frag_for_seg (s->seg);
1940       end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1941       s->text_end = end;
1942
1943       exp.X_op = O_symbol;
1944       exp.X_add_symbol = beg;
1945       exp.X_add_number = 0;
1946       emit_expr (&exp, addr_size);
1947
1948       exp.X_op = O_subtract;
1949       exp.X_add_symbol = end;
1950       exp.X_op_symbol = beg;
1951       exp.X_add_number = 0;
1952       emit_expr (&exp, addr_size);
1953     }
1954
1955   p = frag_more (2 * addr_size);
1956   md_number_to_chars (p, 0, addr_size);
1957   md_number_to_chars (p + addr_size, 0, addr_size);
1958
1959   symbol_set_value_now (aranges_end);
1960 }
1961
1962 /* Emit data for .debug_abbrev.  Note that this must be kept in
1963    sync with out_debug_info below.  */
1964
1965 static void
1966 out_debug_abbrev (segT abbrev_seg,
1967                   segT info_seg ATTRIBUTE_UNUSED,
1968                   segT line_seg ATTRIBUTE_UNUSED)
1969 {
1970   subseg_set (abbrev_seg, 0);
1971
1972   out_uleb128 (1);
1973   out_uleb128 (DW_TAG_compile_unit);
1974   out_byte (DW_CHILDREN_no);
1975   if (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit)
1976     out_abbrev (DW_AT_stmt_list, DW_FORM_data4);
1977   else
1978     out_abbrev (DW_AT_stmt_list, DW_FORM_data8);
1979   if (all_segs->next == NULL)
1980     {
1981       out_abbrev (DW_AT_low_pc, DW_FORM_addr);
1982       if (DWARF2_VERSION < 4)
1983         out_abbrev (DW_AT_high_pc, DW_FORM_addr);
1984       else
1985         out_abbrev (DW_AT_high_pc, (sizeof_address == 4
1986                                     ? DW_FORM_data4 : DW_FORM_data8));
1987     }
1988   else
1989     {
1990       if (DWARF2_FORMAT (info_seg) == dwarf2_format_32bit)
1991         out_abbrev (DW_AT_ranges, DW_FORM_data4);
1992       else
1993         out_abbrev (DW_AT_ranges, DW_FORM_data8);
1994     }
1995   out_abbrev (DW_AT_name, DW_FORM_strp);
1996   out_abbrev (DW_AT_comp_dir, DW_FORM_strp);
1997   out_abbrev (DW_AT_producer, DW_FORM_strp);
1998   out_abbrev (DW_AT_language, DW_FORM_data2);
1999   out_abbrev (0, 0);
2000
2001   /* Terminate the abbreviations for this compilation unit.  */
2002   out_byte (0);
2003 }
2004
2005 /* Emit a description of this compilation unit for .debug_info.  */
2006
2007 static void
2008 out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT ranges_seg,
2009                 symbolS *name_sym, symbolS *comp_dir_sym, symbolS *producer_sym)
2010 {
2011   expressionS exp;
2012   symbolS *info_end;
2013   int sizeof_offset;
2014
2015   sizeof_offset = out_header (info_seg, &exp);
2016   info_end = exp.X_add_symbol;
2017
2018   /* DWARF version.  */
2019   out_two (DWARF2_VERSION);
2020
2021   /* .debug_abbrev offset */
2022   TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
2023
2024   /* Target address size.  */
2025   out_byte (sizeof_address);
2026
2027   /* DW_TAG_compile_unit DIE abbrev */
2028   out_uleb128 (1);
2029
2030   /* DW_AT_stmt_list */
2031   TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg),
2032                          (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit
2033                           ? 4 : 8));
2034
2035   /* These two attributes are emitted if all of the code is contiguous.  */
2036   if (all_segs->next == NULL)
2037     {
2038       /* DW_AT_low_pc */
2039       exp.X_op = O_symbol;
2040       exp.X_add_symbol = all_segs->text_start;
2041       exp.X_add_number = 0;
2042       emit_expr (&exp, sizeof_address);
2043
2044       /* DW_AT_high_pc */
2045       if (DWARF2_VERSION < 4)
2046         exp.X_op = O_symbol;
2047       else
2048         {
2049           exp.X_op = O_subtract;
2050           exp.X_op_symbol = all_segs->text_start;
2051         }
2052       exp.X_add_symbol = all_segs->text_end;
2053       exp.X_add_number = 0;
2054       emit_expr (&exp, sizeof_address);
2055     }
2056   else
2057     {
2058       /* This attribute is emitted if the code is disjoint.  */
2059       /* DW_AT_ranges.  */
2060       TC_DWARF2_EMIT_OFFSET (section_symbol (ranges_seg), sizeof_offset);
2061     }
2062
2063   /* DW_AT_name, DW_AT_comp_dir and DW_AT_producer.  Symbols in .debug_str
2064      setup in out_debug_str below.  */
2065   TC_DWARF2_EMIT_OFFSET (name_sym, sizeof_offset);
2066   TC_DWARF2_EMIT_OFFSET (comp_dir_sym, sizeof_offset);
2067   TC_DWARF2_EMIT_OFFSET (producer_sym, sizeof_offset);
2068
2069   /* DW_AT_language.  Yes, this is probably not really MIPS, but the
2070      dwarf2 draft has no standard code for assembler.  */
2071   out_two (DW_LANG_Mips_Assembler);
2072
2073   symbol_set_value_now (info_end);
2074 }
2075
2076 /* Emit the three debug strings needed in .debug_str and setup symbols
2077    to them for use in out_debug_info.  */
2078 static void
2079 out_debug_str (segT str_seg, symbolS **name_sym, symbolS **comp_dir_sym,
2080                symbolS **producer_sym)
2081 {
2082   char producer[128];
2083   const char *comp_dir;
2084   const char *dirname;
2085   char *p;
2086   int len;
2087
2088   subseg_set (str_seg, 0);
2089
2090   /* DW_AT_name.  We don't have the actual file name that was present
2091      on the command line, so assume files[1] is the main input file.
2092      We're not supposed to get called unless at least one line number
2093      entry was emitted, so this should always be defined.  */
2094   *name_sym = symbol_temp_new_now ();
2095   if (files_in_use == 0)
2096     abort ();
2097   if (files[1].dir)
2098     {
2099       dirname = remap_debug_filename (dirs[files[1].dir]);
2100       len = strlen (dirname);
2101 #ifdef TE_VMS
2102       /* Already has trailing slash.  */
2103       p = frag_more (len);
2104       memcpy (p, dirname, len);
2105 #else
2106       p = frag_more (len + 1);
2107       memcpy (p, dirname, len);
2108       INSERT_DIR_SEPARATOR (p, len);
2109 #endif
2110     }
2111   len = strlen (files[1].filename) + 1;
2112   p = frag_more (len);
2113   memcpy (p, files[1].filename, len);
2114
2115   /* DW_AT_comp_dir */
2116   *comp_dir_sym = symbol_temp_new_now ();
2117   comp_dir = remap_debug_filename (getpwd ());
2118   len = strlen (comp_dir) + 1;
2119   p = frag_more (len);
2120   memcpy (p, comp_dir, len);
2121
2122   /* DW_AT_producer */
2123   *producer_sym = symbol_temp_new_now ();
2124   sprintf (producer, "GNU AS %s", VERSION);
2125   len = strlen (producer) + 1;
2126   p = frag_more (len);
2127   memcpy (p, producer, len);
2128 }
2129
2130 void
2131 dwarf2_init (void)
2132 {
2133   last_seg_ptr = &all_segs;
2134 }
2135
2136
2137 /* Finish the dwarf2 debug sections.  We emit .debug.line if there
2138    were any .file/.loc directives, or --gdwarf2 was given, or if the
2139    file has a non-empty .debug_info section and an empty .debug_line
2140    section.  If we emit .debug_line, and the .debug_info section is
2141    empty, we also emit .debug_info, .debug_aranges and .debug_abbrev.
2142    ALL_SEGS will be non-null if there were any .file/.loc directives,
2143    or --gdwarf2 was given and there were any located instructions
2144    emitted.  */
2145
2146 void
2147 dwarf2_finish (void)
2148 {
2149   segT line_seg;
2150   struct line_seg *s;
2151   segT info_seg;
2152   int emit_other_sections = 0;
2153   int empty_debug_line = 0;
2154
2155   info_seg = bfd_get_section_by_name (stdoutput, ".debug_info");
2156   emit_other_sections = info_seg == NULL || !seg_not_empty_p (info_seg);
2157
2158   line_seg = bfd_get_section_by_name (stdoutput, ".debug_line");
2159   empty_debug_line = line_seg == NULL || !seg_not_empty_p (line_seg);
2160
2161   /* We can't construct a new debug_line section if we already have one.
2162      Give an error.  */
2163   if (all_segs && !empty_debug_line)
2164     as_fatal ("duplicate .debug_line sections");
2165
2166   if ((!all_segs && emit_other_sections)
2167       || (!emit_other_sections && !empty_debug_line))
2168     /* If there is no line information and no non-empty .debug_info
2169        section, or if there is both a non-empty .debug_info and a non-empty
2170        .debug_line, then we do nothing.  */
2171     return;
2172
2173   /* Calculate the size of an address for the target machine.  */
2174   sizeof_address = DWARF2_ADDR_SIZE (stdoutput);
2175
2176   /* Create and switch to the line number section.  */
2177   line_seg = subseg_new (".debug_line", 0);
2178   bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY | SEC_DEBUGGING);
2179
2180   /* For each subsection, chain the debug entries together.  */
2181   for (s = all_segs; s; s = s->next)
2182     {
2183       struct line_subseg *lss = s->head;
2184       struct line_entry **ptail = lss->ptail;
2185
2186       while ((lss = lss->next) != NULL)
2187         {
2188           *ptail = lss->head;
2189           ptail = lss->ptail;
2190         }
2191     }
2192
2193   out_debug_line (line_seg);
2194
2195   /* If this is assembler generated line info, and there is no
2196      debug_info already, we need .debug_info, .debug_abbrev and
2197      .debug_str sections as well.  */
2198   if (emit_other_sections)
2199     {
2200       segT abbrev_seg;
2201       segT aranges_seg;
2202       segT ranges_seg;
2203       segT str_seg;
2204       symbolS *name_sym, *comp_dir_sym, *producer_sym;
2205
2206       gas_assert (all_segs);
2207
2208       info_seg = subseg_new (".debug_info", 0);
2209       abbrev_seg = subseg_new (".debug_abbrev", 0);
2210       aranges_seg = subseg_new (".debug_aranges", 0);
2211       str_seg = subseg_new (".debug_str", 0);
2212
2213       bfd_set_section_flags (stdoutput, info_seg,
2214                              SEC_READONLY | SEC_DEBUGGING);
2215       bfd_set_section_flags (stdoutput, abbrev_seg,
2216                              SEC_READONLY | SEC_DEBUGGING);
2217       bfd_set_section_flags (stdoutput, aranges_seg,
2218                              SEC_READONLY | SEC_DEBUGGING);
2219       bfd_set_section_flags (stdoutput, str_seg,
2220                              (SEC_READONLY | SEC_DEBUGGING
2221                               | SEC_MERGE | SEC_STRINGS));
2222       str_seg->entsize = 1;
2223
2224       record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
2225
2226       if (all_segs->next == NULL)
2227         ranges_seg = NULL;
2228       else
2229         {
2230           ranges_seg = subseg_new (".debug_ranges", 0);
2231           bfd_set_section_flags (stdoutput, ranges_seg,
2232                                  SEC_READONLY | SEC_DEBUGGING);
2233           record_alignment (ranges_seg, ffs (2 * sizeof_address) - 1);
2234           out_debug_ranges (ranges_seg);
2235         }
2236
2237       out_debug_aranges (aranges_seg, info_seg);
2238       out_debug_abbrev (abbrev_seg, info_seg, line_seg);
2239       out_debug_str (str_seg, &name_sym, &comp_dir_sym, &producer_sym);
2240       out_debug_info (info_seg, abbrev_seg, line_seg, ranges_seg,
2241                       name_sym, comp_dir_sym, producer_sym);
2242     }
2243 }
2244
2245 /* Perform any deferred checks pertaining to debug information.  */
2246
2247 void
2248 dwarf2dbg_final_check (void)
2249 {
2250   /* Perform reset-view checks.  Don't evaluate view_assert_failed
2251      recursively: it could be very deep.  It's a chain of adds, with
2252      each chain element pointing to the next in X_add_symbol, and
2253      holding the check value in X_op_symbol.  */
2254   while (view_assert_failed)
2255     {
2256       expressionS *exp;
2257       symbolS *sym;
2258       offsetT failed;
2259
2260       gas_assert (!symbol_resolved_p (view_assert_failed));
2261
2262       exp = symbol_get_value_expression (view_assert_failed);
2263       sym = view_assert_failed;
2264
2265       /* If view_assert_failed looks like a compound check in the
2266          chain, break it up.  */
2267       if (exp->X_op == O_add && exp->X_add_number == 0 && exp->X_unsigned)
2268         {
2269           view_assert_failed = exp->X_add_symbol;
2270           sym = exp->X_op_symbol;
2271         }
2272       else
2273         view_assert_failed = NULL;
2274
2275       failed = resolve_symbol_value (sym);
2276       if (!symbol_resolved_p (sym) || failed)
2277         {
2278           as_bad (_("view number mismatch"));
2279           break;
2280         }
2281     }
2282 }