* subsegs.h (struct frchain): Delete frch_seg.
[external/binutils.git] / gas / dwarf2dbg.c
1 /* dwarf2dbg.c - DWARF2 debug support
2    Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
3    Free Software Foundation, Inc.
4    Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
5
6    This file is part of GAS, the GNU Assembler.
7
8    GAS is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2, or (at your option)
11    any later version.
12
13    GAS is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with GAS; see the file COPYING.  If not, write to the Free
20    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
21    02110-1301, USA.  */
22
23 /* Logical line numbers can be controlled by the compiler via the
24    following directives:
25
26         .file FILENO "file.c"
27         .loc  FILENO LINENO [COLUMN] [basic_block] [prologue_end] \
28               [epilogue_begin] [is_stmt VALUE] [isa VALUE]
29 */
30
31 #include "ansidecl.h"
32 #include "as.h"
33 #include "safe-ctype.h"
34
35 #ifdef HAVE_LIMITS_H
36 #include <limits.h>
37 #else
38 #ifdef HAVE_SYS_PARAM_H
39 #include <sys/param.h>
40 #endif
41 #ifndef INT_MAX
42 #define INT_MAX (int) (((unsigned) (-1)) >> 1)
43 #endif
44 #endif
45
46 #include "dwarf2dbg.h"
47 #include <filenames.h>
48
49 #ifndef DWARF2_FORMAT
50 # define DWARF2_FORMAT() dwarf2_format_32bit
51 #endif
52
53 #ifndef DWARF2_ADDR_SIZE
54 # define DWARF2_ADDR_SIZE(bfd) (bfd_arch_bits_per_address (bfd) / 8)
55 #endif
56
57 #include "subsegs.h"
58
59 #include "elf/dwarf2.h"
60
61 /* Since we can't generate the prolog until the body is complete, we
62    use three different subsegments for .debug_line: one holding the
63    prolog, one for the directory and filename info, and one for the
64    body ("statement program").  */
65 #define DL_PROLOG       0
66 #define DL_FILES        1
67 #define DL_BODY         2
68
69 /* First special line opcde - leave room for the standard opcodes.
70    Note: If you want to change this, you'll have to update the
71    "standard_opcode_lengths" table that is emitted below in
72    out_debug_line().  */
73 #define DWARF2_LINE_OPCODE_BASE         13
74
75 #ifndef DWARF2_LINE_BASE
76   /* Minimum line offset in a special line info. opcode.  This value
77      was chosen to give a reasonable range of values.  */
78 # define DWARF2_LINE_BASE               -5
79 #endif
80
81 /* Range of line offsets in a special line info. opcode.  */
82 #ifndef DWARF2_LINE_RANGE
83 # define DWARF2_LINE_RANGE              14
84 #endif
85
86 #ifndef DWARF2_LINE_MIN_INSN_LENGTH
87   /* Define the architecture-dependent minimum instruction length (in
88      bytes).  This value should be rather too small than too big.  */
89 # define DWARF2_LINE_MIN_INSN_LENGTH    1
90 #endif
91
92 /* Flag that indicates the initial value of the is_stmt_start flag.  */
93 #define DWARF2_LINE_DEFAULT_IS_STMT     1
94
95 /* Given a special op, return the line skip amount.  */
96 #define SPECIAL_LINE(op) \
97         (((op) - DWARF2_LINE_OPCODE_BASE)%DWARF2_LINE_RANGE + DWARF2_LINE_BASE)
98
99 /* Given a special op, return the address skip amount (in units of
100    DWARF2_LINE_MIN_INSN_LENGTH.  */
101 #define SPECIAL_ADDR(op) (((op) - DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)
102
103 /* The maximum address skip amount that can be encoded with a special op.  */
104 #define MAX_SPECIAL_ADDR_DELTA          SPECIAL_ADDR(255)
105
106 struct line_entry {
107   struct line_entry *next;
108   symbolS *label;
109   struct dwarf2_line_info loc;
110 };
111
112 struct line_subseg {
113   struct line_subseg *next;
114   subsegT subseg;
115   struct line_entry *head;
116   struct line_entry **ptail;
117 };
118
119 struct line_seg {
120   struct line_seg *next;
121   segT seg;
122   struct line_subseg *head;
123   symbolS *text_start;
124   symbolS *text_end;
125 };
126
127 /* Collects data for all line table entries during assembly.  */
128 static struct line_seg *all_segs;
129
130 struct file_entry {
131   const char *filename;
132   unsigned int dir;
133 };
134
135 /* Table of files used by .debug_line.  */
136 static struct file_entry *files;
137 static unsigned int files_in_use;
138 static unsigned int files_allocated;
139
140 /* Table of directories used by .debug_line.  */
141 static char **dirs;
142 static unsigned int dirs_in_use;
143 static unsigned int dirs_allocated;
144
145 /* TRUE when we've seen a .loc directive recently.  Used to avoid
146    doing work when there's nothing to do.  */
147 static bfd_boolean loc_directive_seen;
148
149 /* TRUE when we're supposed to set the basic block mark whenever a
150    label is seen.  */
151 bfd_boolean dwarf2_loc_mark_labels;
152
153 /* Current location as indicated by the most recent .loc directive.  */
154 static struct dwarf2_line_info current = {
155   1, 1, 0, 0,
156   DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0
157 };
158
159 /* The size of an address on the target.  */
160 static unsigned int sizeof_address;
161 \f
162 static struct line_subseg *get_line_subseg (segT, subsegT);
163 static unsigned int get_filenum (const char *, unsigned int);
164 static struct frag *first_frag_for_seg (segT);
165 static struct frag *last_frag_for_seg (segT);
166 static void out_byte (int);
167 static void out_opcode (int);
168 static void out_two (int);
169 static void out_four (int);
170 static void out_abbrev (int, int);
171 static void out_uleb128 (addressT);
172 static offsetT get_frag_fix (fragS *, segT);
173 static void out_set_addr (symbolS *);
174 static int size_inc_line_addr (int, addressT);
175 static void emit_inc_line_addr (int, addressT, char *, int);
176 static void out_inc_line_addr (int, addressT);
177 static void relax_inc_line_addr (int, symbolS *, symbolS *);
178 static void process_entries (segT, struct line_entry *);
179 static void out_file_list (void);
180 static void out_debug_line (segT);
181 static void out_debug_aranges (segT, segT);
182 static void out_debug_abbrev (segT);
183 static void out_debug_info (segT, segT, segT);
184 \f
185 #ifndef TC_DWARF2_EMIT_OFFSET
186 # define TC_DWARF2_EMIT_OFFSET  generic_dwarf2_emit_offset
187 static void generic_dwarf2_emit_offset (symbolS *, unsigned int);
188
189 /* Create an offset to .dwarf2_*.  */
190
191 static void
192 generic_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
193 {
194   expressionS expr;
195
196   expr.X_op = O_symbol;
197   expr.X_add_symbol = symbol;
198   expr.X_add_number = 0;
199   emit_expr (&expr, size);
200 }
201 #endif
202
203 /* Find or create an entry for SEG+SUBSEG in ALL_SEGS.  */
204
205 static struct line_subseg *
206 get_line_subseg (segT seg, subsegT subseg)
207 {
208   static segT last_seg;
209   static subsegT last_subseg;
210   static struct line_subseg *last_line_subseg;
211
212   struct line_seg **ps, *s;
213   struct line_subseg **pss, *ss;
214
215   if (seg == last_seg && subseg == last_subseg)
216     return last_line_subseg;
217
218   for (ps = &all_segs; (s = *ps) != NULL; ps = &s->next)
219     if (s->seg == seg)
220       goto found_seg;
221
222   s = (struct line_seg *) xmalloc (sizeof (*s));
223   s->next = NULL;
224   s->seg = seg;
225   s->head = NULL;
226   *ps = s;
227
228  found_seg:
229   for (pss = &s->head; (ss = *pss) != NULL ; pss = &ss->next)
230     {
231       if (ss->subseg == subseg)
232         goto found_subseg;
233       if (ss->subseg > subseg)
234         break;
235     }
236
237   ss = (struct line_subseg *) xmalloc (sizeof (*ss));
238   ss->next = *pss;
239   ss->subseg = subseg;
240   ss->head = NULL;
241   ss->ptail = &ss->head;
242   *pss = ss;
243
244  found_subseg:
245   last_seg = seg;
246   last_subseg = subseg;
247   last_line_subseg = ss;
248
249   return ss;
250 }
251
252 /* Record an entry for LOC occurring at LABEL.  */
253
254 static void
255 dwarf2_gen_line_info_1 (symbolS *label, struct dwarf2_line_info *loc)
256 {
257   struct line_subseg *ss;
258   struct line_entry *e;
259
260   e = (struct line_entry *) xmalloc (sizeof (*e));
261   e->next = NULL;
262   e->label = label;
263   e->loc = *loc;
264
265   ss = get_line_subseg (now_seg, now_subseg);
266   *ss->ptail = e;
267   ss->ptail = &e->next;
268 }
269
270 /* Record an entry for LOC occurring at OFS within the current fragment.  */
271
272 void
273 dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc)
274 {
275   static unsigned int line = -1;
276   static unsigned int filenum = -1;
277
278   symbolS *sym;
279
280   /* Early out for as-yet incomplete location information.  */
281   if (loc->filenum == 0 || loc->line == 0)
282     return;
283
284   /* Don't emit sequences of line symbols for the same line when the
285      symbols apply to assembler code.  It is necessary to emit
286      duplicate line symbols when a compiler asks for them, because GDB
287      uses them to determine the end of the prologue.  */
288   if (debug_type == DEBUG_DWARF2
289       && line == loc->line && filenum == loc->filenum)
290     return;
291
292   line = loc->line;
293   filenum = loc->filenum;
294
295   sym = symbol_temp_new (now_seg, ofs, frag_now);
296   dwarf2_gen_line_info_1 (sym, loc);
297 }
298
299 /* Returns the current source information.  If .file directives have
300    been encountered, the info for the corresponding source file is
301    returned.  Otherwise, the info for the assembly source file is
302    returned.  */
303
304 void
305 dwarf2_where (struct dwarf2_line_info *line)
306 {
307   if (debug_type == DEBUG_DWARF2)
308     {
309       char *filename;
310       as_where (&filename, &line->line);
311       line->filenum = get_filenum (filename, 0);
312       line->column = 0;
313       line->flags = DWARF2_FLAG_IS_STMT;
314       line->isa = current.isa;
315     }
316   else
317     *line = current;
318 }
319
320 /* A hook to allow the target backend to inform the line number state 
321    machine of isa changes when assembler debug info is enabled.  */
322
323 void
324 dwarf2_set_isa (unsigned int isa)
325 {
326   current.isa = isa;
327 }
328
329 /* Called for each machine instruction, or relatively atomic group of
330    machine instructions (ie built-in macro).  The instruction or group
331    is SIZE bytes in length.  If dwarf2 line number generation is called
332    for, emit a line statement appropriately.  */
333
334 void
335 dwarf2_emit_insn (int size)
336 {
337   struct dwarf2_line_info loc;
338
339   if (loc_directive_seen)
340     {
341       /* Use the last location established by a .loc directive, not
342          the value returned by dwarf2_where().  That calls as_where()
343          which will return either the logical input file name (foo.c)
344         or the physical input file name (foo.s) and not the file name
345         specified in the most recent .loc directive (eg foo.h).  */
346       loc = current;
347
348       /* Unless we generate DWARF2 debugging information for each
349          assembler line, we only emit one line symbol for one LOC.  */
350       if (debug_type != DEBUG_DWARF2)
351         loc_directive_seen = FALSE;
352     }
353   else if (debug_type != DEBUG_DWARF2)
354     return;
355   else
356     dwarf2_where (&loc);
357
358   dwarf2_gen_line_info (frag_now_fix () - size, &loc);
359
360   current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK
361                      | DWARF2_FLAG_PROLOGUE_END
362                      | DWARF2_FLAG_EPILOGUE_BEGIN);
363 }
364
365 /* Called for each (preferably code) label.  If dwarf2_loc_mark_labels
366    is enabled, emit a basic block marker.  */
367
368 void
369 dwarf2_emit_label (symbolS *label)
370 {
371   struct dwarf2_line_info loc;
372
373   if (!dwarf2_loc_mark_labels)
374     return;
375   if (S_GET_SEGMENT (label) != now_seg)
376     return;
377   if (!(bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE))
378     return;
379   
380   if (debug_type == DEBUG_DWARF2)
381     dwarf2_where (&loc);
382   else
383     {
384       loc = current;
385       loc_directive_seen = FALSE;
386     }
387
388   loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
389
390   current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK
391                      | DWARF2_FLAG_PROLOGUE_END
392                      | DWARF2_FLAG_EPILOGUE_BEGIN);
393
394   dwarf2_gen_line_info_1 (label, &loc);
395 }
396
397 /* Get a .debug_line file number for FILENAME.  If NUM is nonzero,
398    allocate it on that file table slot, otherwise return the first
399    empty one.  */
400
401 static unsigned int
402 get_filenum (const char *filename, unsigned int num)
403 {
404   static unsigned int last_used, last_used_dir_len;
405   const char *file;
406   size_t dir_len;
407   unsigned int i, dir;
408
409   if (num == 0 && last_used)
410     {
411       if (! files[last_used].dir
412           && strcmp (filename, files[last_used].filename) == 0)
413         return last_used;
414       if (files[last_used].dir
415           && strncmp (filename, dirs[files[last_used].dir],
416                       last_used_dir_len) == 0
417           && IS_DIR_SEPARATOR (filename [last_used_dir_len])
418           && strcmp (filename + last_used_dir_len + 1,
419                      files[last_used].filename) == 0)
420         return last_used;
421     }
422
423   file = lbasename (filename);
424   /* Don't make empty string from / or A: from A:/ .  */
425 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
426   if (file <= filename + 3)
427     file = filename;
428 #else
429   if (file == filename + 1)
430     file = filename;
431 #endif
432   dir_len = file - filename;
433
434   dir = 0;
435   if (dir_len)
436     {
437       --dir_len;
438       for (dir = 1; dir < dirs_in_use; ++dir)
439         if (strncmp (filename, dirs[dir], dir_len) == 0
440             && dirs[dir][dir_len] == '\0')
441           break;
442
443       if (dir >= dirs_in_use)
444         {
445           if (dir >= dirs_allocated)
446             {
447               dirs_allocated = dir + 32;
448               dirs = (char **)
449                      xrealloc (dirs, (dir + 32) * sizeof (const char *));
450             }
451
452           dirs[dir] = xmalloc (dir_len + 1);
453           memcpy (dirs[dir], filename, dir_len);
454           dirs[dir][dir_len] = '\0';
455           dirs_in_use = dir + 1;
456         }
457     }
458
459   if (num == 0)
460     {
461       for (i = 1; i < files_in_use; ++i)
462         if (files[i].dir == dir
463             && files[i].filename
464             && strcmp (file, files[i].filename) == 0)
465           {
466             last_used = i;
467             last_used_dir_len = dir_len;
468             return i;
469           }
470     }
471   else
472     i = num;
473
474   if (i >= files_allocated)
475     {
476       unsigned int old = files_allocated;
477
478       files_allocated = i + 32;
479       files = (struct file_entry *)
480         xrealloc (files, (i + 32) * sizeof (struct file_entry));
481
482       memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
483     }
484
485   files[i].filename = num ? file : xstrdup (file);
486   files[i].dir = dir;
487   if (files_in_use < i + 1)
488     files_in_use = i + 1;
489   last_used = i;
490   last_used_dir_len = dir_len;
491
492   return i;
493 }
494
495 /* Handle two forms of .file directive:
496    - Pass .file "source.c" to s_app_file
497    - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
498
499    If an entry is added to the file table, return a pointer to the filename. */
500
501 char *
502 dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED)
503 {
504   offsetT num;
505   char *filename;
506   int filename_len;
507
508   /* Continue to accept a bare string and pass it off.  */
509   SKIP_WHITESPACE ();
510   if (*input_line_pointer == '"')
511     {
512       s_app_file (0);
513       return NULL;
514     }
515
516   num = get_absolute_expression ();
517   filename = demand_copy_C_string (&filename_len);
518   if (filename == NULL)
519     return NULL;
520   demand_empty_rest_of_line ();
521
522   if (num < 1)
523     {
524       as_bad (_("file number less than one"));
525       return NULL;
526     }
527
528   if (num < (int) files_in_use && files[num].filename != 0)
529     {
530       as_bad (_("file number %ld already allocated"), (long) num);
531       return NULL;
532     }
533
534   get_filenum (filename, num);
535
536   return filename;
537 }
538
539 void
540 dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
541 {
542   offsetT filenum, line;
543
544   filenum = get_absolute_expression ();
545   SKIP_WHITESPACE ();
546   line = get_absolute_expression ();
547
548   if (filenum < 1)
549     {
550       as_bad (_("file number less than one"));
551       return;
552     }
553   if (filenum >= (int) files_in_use || files[filenum].filename == 0)
554     {
555       as_bad (_("unassigned file number %ld"), (long) filenum);
556       return;
557     }
558
559   current.filenum = filenum;
560   current.line = line;
561
562 #ifndef NO_LISTING
563   if (listing)
564     {
565       if (files[filenum].dir)
566         {
567           size_t dir_len = strlen (dirs[files[filenum].dir]);
568           size_t file_len = strlen (files[filenum].filename);
569           char *cp = (char *) alloca (dir_len + 1 + file_len + 1);
570
571           memcpy (cp, dirs[files[filenum].dir], dir_len);
572           cp[dir_len] = '/';
573           memcpy (cp + dir_len + 1, files[filenum].filename, file_len);
574           cp[dir_len + file_len + 1] = '\0';
575           listing_source_file (cp);
576         }
577       else
578         listing_source_file (files[filenum].filename);
579       listing_source_line (line);
580     }
581 #endif
582
583   SKIP_WHITESPACE ();
584   if (ISDIGIT (*input_line_pointer))
585     {
586       current.column = get_absolute_expression ();
587       SKIP_WHITESPACE ();
588     }
589
590   while (ISALPHA (*input_line_pointer))
591     {
592       char *p, c;
593       offsetT value;
594
595       p = input_line_pointer;
596       c = get_symbol_end ();
597
598       if (strcmp (p, "basic_block") == 0)
599         {
600           current.flags |= DWARF2_FLAG_BASIC_BLOCK;
601           *input_line_pointer = c;
602         }
603       else if (strcmp (p, "prologue_end") == 0)
604         {
605           current.flags |= DWARF2_FLAG_PROLOGUE_END;
606           *input_line_pointer = c;
607         }
608       else if (strcmp (p, "epilogue_begin") == 0)
609         {
610           current.flags |= DWARF2_FLAG_EPILOGUE_BEGIN;
611           *input_line_pointer = c;
612         }
613       else if (strcmp (p, "is_stmt") == 0)
614         {
615           *input_line_pointer = c;
616           value = get_absolute_expression ();
617           if (value == 0)
618             current.flags &= ~DWARF2_FLAG_IS_STMT;
619           else if (value == 1)
620             current.flags |= DWARF2_FLAG_IS_STMT;
621           else
622             {
623               as_bad (_("is_stmt value not 0 or 1"));
624               return;
625             }
626         }
627       else if (strcmp (p, "isa") == 0)
628         {
629           *input_line_pointer = c;
630           value = get_absolute_expression ();
631           if (value >= 0)
632             current.isa = value;
633           else
634             {
635               as_bad (_("isa number less than zero"));
636               return;
637             }
638         }
639       else
640         {
641           as_bad (_("unknown .loc sub-directive `%s'"), p);
642           *input_line_pointer = c;
643           return;
644         }
645
646       SKIP_WHITESPACE ();
647     }
648
649   demand_empty_rest_of_line ();
650   loc_directive_seen = TRUE;
651 }
652
653 void
654 dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED)
655 {
656   offsetT value = get_absolute_expression ();
657
658   if (value != 0 && value != 1)
659     {
660       as_bad (_("expected 0 or 1"));
661       ignore_rest_of_line ();
662     }
663   else
664     {
665       dwarf2_loc_mark_labels = value != 0;
666       demand_empty_rest_of_line ();
667     }
668 }
669 \f
670 static struct frag *
671 first_frag_for_seg (segT seg)
672 {
673   return seg_info (seg)->frchainP->frch_root;
674 }
675
676 static struct frag *
677 last_frag_for_seg (segT seg)
678 {
679   frchainS *f = seg_info (seg)->frchainP;
680
681   while (f->frch_next != NULL)
682     f = f->frch_next;
683
684   return f->frch_last;
685 }
686 \f
687 /* Emit a single byte into the current segment.  */
688
689 static inline void
690 out_byte (int byte)
691 {
692   FRAG_APPEND_1_CHAR (byte);
693 }
694
695 /* Emit a statement program opcode into the current segment.  */
696
697 static inline void
698 out_opcode (int opc)
699 {
700   out_byte (opc);
701 }
702
703 /* Emit a two-byte word into the current segment.  */
704
705 static inline void
706 out_two (int data)
707 {
708   md_number_to_chars (frag_more (2), data, 2);
709 }
710
711 /* Emit a four byte word into the current segment.  */
712
713 static inline void
714 out_four (int data)
715 {
716   md_number_to_chars (frag_more (4), data, 4);
717 }
718
719 /* Emit an unsigned "little-endian base 128" number.  */
720
721 static void
722 out_uleb128 (addressT value)
723 {
724   output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
725 }
726
727 /* Emit a tuple for .debug_abbrev.  */
728
729 static inline void
730 out_abbrev (int name, int form)
731 {
732   out_uleb128 (name);
733   out_uleb128 (form);
734 }
735
736 /* Get the size of a fragment.  */
737
738 static offsetT
739 get_frag_fix (fragS *frag, segT seg)
740 {
741   frchainS *fr;
742
743   if (frag->fr_next)
744     return frag->fr_fix;
745
746   /* If a fragment is the last in the chain, special measures must be
747      taken to find its size before relaxation, since it may be pending
748      on some subsegment chain.  */
749   for (fr = seg_info (seg)->frchainP; fr; fr = fr->frch_next)
750     if (fr->frch_last == frag)
751       return (char *) obstack_next_free (&fr->frch_obstack) - frag->fr_literal;
752
753   abort ();
754 }
755
756 /* Set an absolute address (may result in a relocation entry).  */
757
758 static void
759 out_set_addr (symbolS *sym)
760 {
761   expressionS expr;
762
763   out_opcode (DW_LNS_extended_op);
764   out_uleb128 (sizeof_address + 1);
765
766   out_opcode (DW_LNE_set_address);
767   expr.X_op = O_symbol;
768   expr.X_add_symbol = sym;
769   expr.X_add_number = 0;
770   emit_expr (&expr, sizeof_address);
771 }
772
773 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
774 static void scale_addr_delta (addressT *);
775
776 static void
777 scale_addr_delta (addressT *addr_delta)
778 {
779   static int printed_this = 0;
780   if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0)
781     {
782       if (!printed_this)
783         as_bad("unaligned opcodes detected in executable segment");
784       printed_this = 1;
785     }
786   *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
787 }
788 #else
789 #define scale_addr_delta(A)
790 #endif
791
792 /* Encode a pair of line and address skips as efficiently as possible.
793    Note that the line skip is signed, whereas the address skip is unsigned.
794
795    The following two routines *must* be kept in sync.  This is
796    enforced by making emit_inc_line_addr abort if we do not emit
797    exactly the expected number of bytes.  */
798
799 static int
800 size_inc_line_addr (int line_delta, addressT addr_delta)
801 {
802   unsigned int tmp, opcode;
803   int len = 0;
804
805   /* Scale the address delta by the minimum instruction length.  */
806   scale_addr_delta (&addr_delta);
807
808   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
809      We cannot use special opcodes here, since we want the end_sequence
810      to emit the matrix entry.  */
811   if (line_delta == INT_MAX)
812     {
813       if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
814         len = 1;
815       else
816         len = 1 + sizeof_leb128 (addr_delta, 0);
817       return len + 3;
818     }
819
820   /* Bias the line delta by the base.  */
821   tmp = line_delta - DWARF2_LINE_BASE;
822
823   /* If the line increment is out of range of a special opcode, we
824      must encode it with DW_LNS_advance_line.  */
825   if (tmp >= DWARF2_LINE_RANGE)
826     {
827       len = 1 + sizeof_leb128 (line_delta, 1);
828       line_delta = 0;
829       tmp = 0 - DWARF2_LINE_BASE;
830     }
831
832   /* Bias the opcode by the special opcode base.  */
833   tmp += DWARF2_LINE_OPCODE_BASE;
834
835   /* Avoid overflow when addr_delta is large.  */
836   if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
837     {
838       /* Try using a special opcode.  */
839       opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
840       if (opcode <= 255)
841         return len + 1;
842
843       /* Try using DW_LNS_const_add_pc followed by special op.  */
844       opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
845       if (opcode <= 255)
846         return len + 2;
847     }
848
849   /* Otherwise use DW_LNS_advance_pc.  */
850   len += 1 + sizeof_leb128 (addr_delta, 0);
851
852   /* DW_LNS_copy or special opcode.  */
853   len += 1;
854
855   return len;
856 }
857
858 static void
859 emit_inc_line_addr (int line_delta, addressT addr_delta, char *p, int len)
860 {
861   unsigned int tmp, opcode;
862   int need_copy = 0;
863   char *end = p + len;
864
865   /* Line number sequences cannot go backward in addresses.  This means
866      we've incorrectly ordered the statements in the sequence.  */
867   assert ((offsetT) addr_delta >= 0);
868
869   /* Scale the address delta by the minimum instruction length.  */
870   scale_addr_delta (&addr_delta);
871
872   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
873      We cannot use special opcodes here, since we want the end_sequence
874      to emit the matrix entry.  */
875   if (line_delta == INT_MAX)
876     {
877       if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
878         *p++ = DW_LNS_const_add_pc;
879       else
880         {
881           *p++ = DW_LNS_advance_pc;
882           p += output_leb128 (p, addr_delta, 0);
883         }
884
885       *p++ = DW_LNS_extended_op;
886       *p++ = 1;
887       *p++ = DW_LNE_end_sequence;
888       goto done;
889     }
890
891   /* Bias the line delta by the base.  */
892   tmp = line_delta - DWARF2_LINE_BASE;
893
894   /* If the line increment is out of range of a special opcode, we
895      must encode it with DW_LNS_advance_line.  */
896   if (tmp >= DWARF2_LINE_RANGE)
897     {
898       *p++ = DW_LNS_advance_line;
899       p += output_leb128 (p, line_delta, 1);
900
901       line_delta = 0;
902       tmp = 0 - DWARF2_LINE_BASE;
903       need_copy = 1;
904     }
905
906   /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
907      special opcode.  */
908   if (line_delta == 0 && addr_delta == 0)
909     {
910       *p++ = DW_LNS_copy;
911       goto done;
912     }
913
914   /* Bias the opcode by the special opcode base.  */
915   tmp += DWARF2_LINE_OPCODE_BASE;
916
917   /* Avoid overflow when addr_delta is large.  */
918   if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
919     {
920       /* Try using a special opcode.  */
921       opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
922       if (opcode <= 255)
923         {
924           *p++ = opcode;
925           goto done;
926         }
927
928       /* Try using DW_LNS_const_add_pc followed by special op.  */
929       opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
930       if (opcode <= 255)
931         {
932           *p++ = DW_LNS_const_add_pc;
933           *p++ = opcode;
934           goto done;
935         }
936     }
937
938   /* Otherwise use DW_LNS_advance_pc.  */
939   *p++ = DW_LNS_advance_pc;
940   p += output_leb128 (p, addr_delta, 0);
941
942   if (need_copy)
943     *p++ = DW_LNS_copy;
944   else
945     *p++ = tmp;
946
947  done:
948   assert (p == end);
949 }
950
951 /* Handy routine to combine calls to the above two routines.  */
952
953 static void
954 out_inc_line_addr (int line_delta, addressT addr_delta)
955 {
956   int len = size_inc_line_addr (line_delta, addr_delta);
957   emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
958 }
959
960 /* Generate a variant frag that we can use to relax address/line
961    increments between fragments of the target segment.  */
962
963 static void
964 relax_inc_line_addr (int line_delta, symbolS *to_sym, symbolS *from_sym)
965 {
966   expressionS expr;
967   int max_chars;
968
969   expr.X_op = O_subtract;
970   expr.X_add_symbol = to_sym;
971   expr.X_op_symbol = from_sym;
972   expr.X_add_number = 0;
973
974   /* The maximum size of the frag is the line delta with a maximum
975      sized address delta.  */
976   max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
977
978   frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
979             make_expr_symbol (&expr), line_delta, NULL);
980 }
981
982 /* The function estimates the size of a rs_dwarf2dbg variant frag
983    based on the current values of the symbols.  It is called before
984    the relaxation loop.  We set fr_subtype to the expected length.  */
985
986 int
987 dwarf2dbg_estimate_size_before_relax (fragS *frag)
988 {
989   offsetT addr_delta;
990   int size;
991
992   addr_delta = resolve_symbol_value (frag->fr_symbol);
993   size = size_inc_line_addr (frag->fr_offset, addr_delta);
994
995   frag->fr_subtype = size;
996
997   return size;
998 }
999
1000 /* This function relaxes a rs_dwarf2dbg variant frag based on the
1001    current values of the symbols.  fr_subtype is the current length
1002    of the frag.  This returns the change in frag length.  */
1003
1004 int
1005 dwarf2dbg_relax_frag (fragS *frag)
1006 {
1007   int old_size, new_size;
1008
1009   old_size = frag->fr_subtype;
1010   new_size = dwarf2dbg_estimate_size_before_relax (frag);
1011
1012   return new_size - old_size;
1013 }
1014
1015 /* This function converts a rs_dwarf2dbg variant frag into a normal
1016    fill frag.  This is called after all relaxation has been done.
1017    fr_subtype will be the desired length of the frag.  */
1018
1019 void
1020 dwarf2dbg_convert_frag (fragS *frag)
1021 {
1022   offsetT addr_diff;
1023
1024   addr_diff = resolve_symbol_value (frag->fr_symbol);
1025
1026   /* fr_var carries the max_chars that we created the fragment with.
1027      fr_subtype carries the current expected length.  We must, of
1028      course, have allocated enough memory earlier.  */
1029   assert (frag->fr_var >= (int) frag->fr_subtype);
1030
1031   emit_inc_line_addr (frag->fr_offset, addr_diff,
1032                       frag->fr_literal + frag->fr_fix, frag->fr_subtype);
1033
1034   frag->fr_fix += frag->fr_subtype;
1035   frag->fr_type = rs_fill;
1036   frag->fr_var = 0;
1037   frag->fr_offset = 0;
1038 }
1039
1040 /* Generate .debug_line content for the chain of line number entries
1041    beginning at E, for segment SEG.  */
1042
1043 static void
1044 process_entries (segT seg, struct line_entry *e)
1045 {
1046   unsigned filenum = 1;
1047   unsigned line = 1;
1048   unsigned column = 0;
1049   unsigned isa = 0;
1050   unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
1051   fragS *last_frag = NULL, *frag;
1052   addressT last_frag_ofs = 0, frag_ofs;
1053   symbolS *last_lab = NULL, *lab;
1054   struct line_entry *next;
1055
1056   do
1057     {
1058       int line_delta;
1059
1060       if (filenum != e->loc.filenum)
1061         {
1062           filenum = e->loc.filenum;
1063           out_opcode (DW_LNS_set_file);
1064           out_uleb128 (filenum);
1065         }
1066
1067       if (column != e->loc.column)
1068         {
1069           column = e->loc.column;
1070           out_opcode (DW_LNS_set_column);
1071           out_uleb128 (column);
1072         }
1073
1074       if (isa != e->loc.isa)
1075         {
1076           isa = e->loc.isa;
1077           out_opcode (DW_LNS_set_isa);
1078           out_uleb128 (isa);
1079         }
1080
1081       if ((e->loc.flags ^ flags) & DWARF2_FLAG_IS_STMT)
1082         {
1083           flags = e->loc.flags;
1084           out_opcode (DW_LNS_negate_stmt);
1085         }
1086
1087       if (e->loc.flags & DWARF2_FLAG_BASIC_BLOCK)
1088         out_opcode (DW_LNS_set_basic_block);
1089
1090       if (e->loc.flags & DWARF2_FLAG_PROLOGUE_END)
1091         out_opcode (DW_LNS_set_prologue_end);
1092
1093       if (e->loc.flags & DWARF2_FLAG_EPILOGUE_BEGIN)
1094         out_opcode (DW_LNS_set_epilogue_begin);
1095
1096       /* Don't try to optimize away redundant entries; gdb wants two
1097          entries for a function where the code starts on the same line as
1098          the {, and there's no way to identify that case here.  Trust gcc
1099          to optimize appropriately.  */
1100       line_delta = e->loc.line - line;
1101       lab = e->label;
1102       frag = symbol_get_frag (lab);
1103       frag_ofs = S_GET_VALUE (lab);
1104
1105       if (last_frag == NULL)
1106         {
1107           out_set_addr (lab);
1108           out_inc_line_addr (line_delta, 0);
1109         }
1110       else if (frag == last_frag)
1111         out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
1112       else
1113         relax_inc_line_addr (line_delta, lab, last_lab);
1114
1115       line = e->loc.line;
1116       last_lab = lab;
1117       last_frag = frag;
1118       last_frag_ofs = frag_ofs;
1119
1120       next = e->next;
1121       free (e);
1122       e = next;
1123     }
1124   while (e);
1125
1126   /* Emit a DW_LNE_end_sequence for the end of the section.  */
1127   frag = last_frag_for_seg (seg);
1128   frag_ofs = get_frag_fix (frag, seg);
1129   if (frag == last_frag)
1130     out_inc_line_addr (INT_MAX, frag_ofs - last_frag_ofs);
1131   else
1132     {
1133       lab = symbol_temp_new (seg, frag_ofs, frag);
1134       relax_inc_line_addr (INT_MAX, lab, last_lab);
1135     }
1136 }
1137
1138 /* Emit the directory and file tables for .debug_line.  */
1139
1140 static void
1141 out_file_list (void)
1142 {
1143   size_t size;
1144   char *cp;
1145   unsigned int i;
1146
1147   /* Emit directory list.  */
1148   for (i = 1; i < dirs_in_use; ++i)
1149     {
1150       size = strlen (dirs[i]) + 1;
1151       cp = frag_more (size);
1152       memcpy (cp, dirs[i], size);
1153     }
1154   /* Terminate it.  */
1155   out_byte ('\0');
1156
1157   for (i = 1; i < files_in_use; ++i)
1158     {
1159       if (files[i].filename == NULL)
1160         {
1161           as_bad (_("unassigned file number %ld"), (long) i);
1162           /* Prevent a crash later, particularly for file 1.  */
1163           files[i].filename = "";
1164           continue;
1165         }
1166
1167       size = strlen (files[i].filename) + 1;
1168       cp = frag_more (size);
1169       memcpy (cp, files[i].filename, size);
1170
1171       out_uleb128 (files[i].dir);       /* directory number */
1172       out_uleb128 (0);                  /* last modification timestamp */
1173       out_uleb128 (0);                  /* filesize */
1174     }
1175
1176   /* Terminate filename list.  */
1177   out_byte (0);
1178 }
1179
1180 /* Emit the collected .debug_line data.  */
1181
1182 static void
1183 out_debug_line (segT line_seg)
1184 {
1185   expressionS expr;
1186   symbolS *line_start;
1187   symbolS *prologue_end;
1188   symbolS *line_end;
1189   struct line_seg *s;
1190   enum dwarf2_format d2f;
1191   int sizeof_offset;
1192
1193   subseg_set (line_seg, 0);
1194
1195   line_start = symbol_temp_new_now ();
1196   prologue_end = symbol_temp_make ();
1197   line_end = symbol_temp_make ();
1198
1199   /* Total length of the information for this compilation unit.  */
1200   expr.X_op = O_subtract;
1201   expr.X_add_symbol = line_end;
1202   expr.X_op_symbol = line_start;
1203
1204   d2f = DWARF2_FORMAT ();
1205   if (d2f == dwarf2_format_32bit)
1206     {
1207       expr.X_add_number = -4;
1208       emit_expr (&expr, 4);
1209       sizeof_offset = 4;
1210     }
1211   else if (d2f == dwarf2_format_64bit)
1212     {
1213       expr.X_add_number = -12;
1214       out_four (-1);
1215       emit_expr (&expr, 8);
1216       sizeof_offset = 8;
1217     }
1218   else if (d2f == dwarf2_format_64bit_irix)
1219     {
1220       expr.X_add_number = -8;
1221       emit_expr (&expr, 8);
1222       sizeof_offset = 8;
1223     }
1224   else
1225     {
1226       as_fatal (_("internal error: unknown dwarf2 format"));
1227     }
1228
1229   /* Version.  */
1230   out_two (2);
1231
1232   /* Length of the prologue following this length.  */
1233   expr.X_op = O_subtract;
1234   expr.X_add_symbol = prologue_end;
1235   expr.X_op_symbol = line_start;
1236   expr.X_add_number = - (4 + 2 + 4);
1237   emit_expr (&expr, sizeof_offset);
1238
1239   /* Parameters of the state machine.  */
1240   out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
1241   out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
1242   out_byte (DWARF2_LINE_BASE);
1243   out_byte (DWARF2_LINE_RANGE);
1244   out_byte (DWARF2_LINE_OPCODE_BASE);
1245
1246   /* Standard opcode lengths.  */
1247   out_byte (0);                 /* DW_LNS_copy */
1248   out_byte (1);                 /* DW_LNS_advance_pc */
1249   out_byte (1);                 /* DW_LNS_advance_line */
1250   out_byte (1);                 /* DW_LNS_set_file */
1251   out_byte (1);                 /* DW_LNS_set_column */
1252   out_byte (0);                 /* DW_LNS_negate_stmt */
1253   out_byte (0);                 /* DW_LNS_set_basic_block */
1254   out_byte (0);                 /* DW_LNS_const_add_pc */
1255   out_byte (1);                 /* DW_LNS_fixed_advance_pc */
1256   out_byte (0);                 /* DW_LNS_set_prologue_end */
1257   out_byte (0);                 /* DW_LNS_set_epilogue_begin */
1258   out_byte (1);                 /* DW_LNS_set_isa */
1259
1260   out_file_list ();
1261
1262   symbol_set_value_now (prologue_end);
1263
1264   /* For each section, emit a statement program.  */
1265   for (s = all_segs; s; s = s->next)
1266     process_entries (s->seg, s->head->head);
1267
1268   symbol_set_value_now (line_end);
1269 }
1270
1271 /* Emit data for .debug_aranges.  */
1272
1273 static void
1274 out_debug_aranges (segT aranges_seg, segT info_seg)
1275 {
1276   unsigned int addr_size = sizeof_address;
1277   addressT size, skip;
1278   struct line_seg *s;
1279   expressionS expr;
1280   char *p;
1281
1282   size = 4 + 2 + 4 + 1 + 1;
1283
1284   skip = 2 * addr_size - (size & (2 * addr_size - 1));
1285   if (skip == 2 * addr_size)
1286     skip = 0;
1287   size += skip;
1288
1289   for (s = all_segs; s; s = s->next)
1290     size += 2 * addr_size;
1291
1292   size += 2 * addr_size;
1293
1294   subseg_set (aranges_seg, 0);
1295
1296   /* Length of the compilation unit.  */
1297   out_four (size - 4);
1298
1299   /* Version.  */
1300   out_two (2);
1301
1302   /* Offset to .debug_info.  */
1303   /* ??? sizeof_offset */
1304   TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), 4);
1305
1306   /* Size of an address (offset portion).  */
1307   out_byte (addr_size);
1308
1309   /* Size of a segment descriptor.  */
1310   out_byte (0);
1311
1312   /* Align the header.  */
1313   if (skip)
1314     frag_align (ffs (2 * addr_size) - 1, 0, 0);
1315
1316   for (s = all_segs; s; s = s->next)
1317     {
1318       fragS *frag;
1319       symbolS *beg, *end;
1320
1321       frag = first_frag_for_seg (s->seg);
1322       beg = symbol_temp_new (s->seg, 0, frag);
1323       s->text_start = beg;
1324
1325       frag = last_frag_for_seg (s->seg);
1326       end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1327       s->text_end = end;
1328
1329       expr.X_op = O_symbol;
1330       expr.X_add_symbol = beg;
1331       expr.X_add_number = 0;
1332       emit_expr (&expr, addr_size);
1333
1334       expr.X_op = O_subtract;
1335       expr.X_add_symbol = end;
1336       expr.X_op_symbol = beg;
1337       expr.X_add_number = 0;
1338       emit_expr (&expr, addr_size);
1339     }
1340
1341   p = frag_more (2 * addr_size);
1342   md_number_to_chars (p, 0, addr_size);
1343   md_number_to_chars (p + addr_size, 0, addr_size);
1344 }
1345
1346 /* Emit data for .debug_abbrev.  Note that this must be kept in
1347    sync with out_debug_info below.  */
1348
1349 static void
1350 out_debug_abbrev (segT abbrev_seg)
1351 {
1352   subseg_set (abbrev_seg, 0);
1353
1354   out_uleb128 (1);
1355   out_uleb128 (DW_TAG_compile_unit);
1356   out_byte (DW_CHILDREN_no);
1357   out_abbrev (DW_AT_stmt_list, DW_FORM_data4);
1358   if (all_segs->next == NULL)
1359     {
1360       out_abbrev (DW_AT_low_pc, DW_FORM_addr);
1361       out_abbrev (DW_AT_high_pc, DW_FORM_addr);
1362     }
1363   out_abbrev (DW_AT_name, DW_FORM_string);
1364   out_abbrev (DW_AT_comp_dir, DW_FORM_string);
1365   out_abbrev (DW_AT_producer, DW_FORM_string);
1366   out_abbrev (DW_AT_language, DW_FORM_data2);
1367   out_abbrev (0, 0);
1368
1369   /* Terminate the abbreviations for this compilation unit.  */
1370   out_byte (0);
1371 }
1372
1373 /* Emit a description of this compilation unit for .debug_info.  */
1374
1375 static void
1376 out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg)
1377 {
1378   char producer[128];
1379   char *comp_dir;
1380   expressionS expr;
1381   symbolS *info_start;
1382   symbolS *info_end;
1383   char *p;
1384   int len;
1385   enum dwarf2_format d2f;
1386   int sizeof_offset;
1387
1388   subseg_set (info_seg, 0);
1389
1390   info_start = symbol_temp_new_now ();
1391   info_end = symbol_temp_make ();
1392
1393   /* Compilation Unit length.  */
1394   expr.X_op = O_subtract;
1395   expr.X_add_symbol = info_end;
1396   expr.X_op_symbol = info_start;
1397
1398   d2f = DWARF2_FORMAT ();
1399   if (d2f == dwarf2_format_32bit)
1400     {
1401       expr.X_add_number = -4;
1402       emit_expr (&expr, 4);
1403       sizeof_offset = 4;
1404     }
1405   else if (d2f == dwarf2_format_64bit)
1406     {
1407       expr.X_add_number = -12;
1408       out_four (-1);
1409       emit_expr (&expr, 8);
1410       sizeof_offset = 8;
1411     }
1412   else if (d2f == dwarf2_format_64bit_irix)
1413     {
1414       expr.X_add_number = -8;
1415       emit_expr (&expr, 8);
1416       sizeof_offset = 8;
1417     }
1418   else
1419     {
1420       as_fatal (_("internal error: unknown dwarf2 format"));
1421     }
1422
1423   /* DWARF version.  */
1424   out_two (2);
1425
1426   /* .debug_abbrev offset */
1427   TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
1428
1429   /* Target address size.  */
1430   out_byte (sizeof_address);
1431
1432   /* DW_TAG_compile_unit DIE abbrev */
1433   out_uleb128 (1);
1434
1435   /* DW_AT_stmt_list */
1436   /* ??? sizeof_offset */
1437   TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg), 4);
1438
1439   /* These two attributes may only be emitted if all of the code is
1440      contiguous.  Multiple sections are not that.  */
1441   if (all_segs->next == NULL)
1442     {
1443       /* DW_AT_low_pc */
1444       expr.X_op = O_symbol;
1445       expr.X_add_symbol = all_segs->text_start;
1446       expr.X_add_number = 0;
1447       emit_expr (&expr, sizeof_address);
1448
1449       /* DW_AT_high_pc */
1450       expr.X_op = O_symbol;
1451       expr.X_add_symbol = all_segs->text_end;
1452       expr.X_add_number = 0;
1453       emit_expr (&expr, sizeof_address);
1454     }
1455
1456   /* DW_AT_name.  We don't have the actual file name that was present
1457      on the command line, so assume files[1] is the main input file.
1458      We're not supposed to get called unless at least one line number
1459      entry was emitted, so this should always be defined.  */
1460   if (!files || files_in_use < 1)
1461     abort ();
1462   if (files[1].dir)
1463     {
1464       len = strlen (dirs[files[1].dir]);
1465       p = frag_more (len + 1);
1466       memcpy (p, dirs[files[1].dir], len);
1467       p[len] = '/';
1468     }
1469   len = strlen (files[1].filename) + 1;
1470   p = frag_more (len);
1471   memcpy (p, files[1].filename, len);
1472
1473   /* DW_AT_comp_dir */
1474   comp_dir = getpwd ();
1475   len = strlen (comp_dir) + 1;
1476   p = frag_more (len);
1477   memcpy (p, comp_dir, len);
1478
1479   /* DW_AT_producer */
1480   sprintf (producer, "GNU AS %s", VERSION);
1481   len = strlen (producer) + 1;
1482   p = frag_more (len);
1483   memcpy (p, producer, len);
1484
1485   /* DW_AT_language.  Yes, this is probably not really MIPS, but the
1486      dwarf2 draft has no standard code for assembler.  */
1487   out_two (DW_LANG_Mips_Assembler);
1488
1489   symbol_set_value_now (info_end);
1490 }
1491
1492 /* Finish the dwarf2 debug sections.  We emit .debug.line if there
1493    were any .file/.loc directives, or --gdwarf2 was given, or if the
1494    file has a non-empty .debug_info section.  If we emit .debug_line,
1495    and the .debug_info section is empty, we also emit .debug_info,
1496    .debug_aranges and .debug_abbrev.  ALL_SEGS will be non-null if
1497    there were any .file/.loc directives, or --gdwarf2 was given and
1498    there were any located instructions emitted.  */
1499
1500 void
1501 dwarf2_finish (void)
1502 {
1503   segT line_seg;
1504   struct line_seg *s;
1505   segT info_seg;
1506   int emit_other_sections = 0;
1507
1508   info_seg = bfd_get_section_by_name (stdoutput, ".debug_info");
1509   emit_other_sections = info_seg == NULL || !seg_not_empty_p (info_seg);
1510
1511   if (!all_segs && emit_other_sections)
1512     /* There is no line information and no non-empty .debug_info
1513        section.  */
1514     return;
1515
1516   /* Calculate the size of an address for the target machine.  */
1517   sizeof_address = DWARF2_ADDR_SIZE (stdoutput);
1518
1519   /* Create and switch to the line number section.  */
1520   line_seg = subseg_new (".debug_line", 0);
1521   bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY | SEC_DEBUGGING);
1522
1523   /* For each subsection, chain the debug entries together.  */
1524   for (s = all_segs; s; s = s->next)
1525     {
1526       struct line_subseg *ss = s->head;
1527       struct line_entry **ptail = ss->ptail;
1528
1529       while ((ss = ss->next) != NULL)
1530         {
1531           *ptail = ss->head;
1532           ptail = ss->ptail;
1533         }
1534     }
1535
1536   out_debug_line (line_seg);
1537
1538   /* If this is assembler generated line info, and there is no
1539      debug_info already, we need .debug_info and .debug_abbrev
1540      sections as well.  */
1541   if (emit_other_sections)
1542     {
1543       segT abbrev_seg;
1544       segT aranges_seg;
1545
1546       assert (all_segs);
1547       
1548       info_seg = subseg_new (".debug_info", 0);
1549       abbrev_seg = subseg_new (".debug_abbrev", 0);
1550       aranges_seg = subseg_new (".debug_aranges", 0);
1551
1552       bfd_set_section_flags (stdoutput, info_seg,
1553                              SEC_READONLY | SEC_DEBUGGING);
1554       bfd_set_section_flags (stdoutput, abbrev_seg,
1555                              SEC_READONLY | SEC_DEBUGGING);
1556       bfd_set_section_flags (stdoutput, aranges_seg,
1557                              SEC_READONLY | SEC_DEBUGGING);
1558
1559       record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
1560
1561       out_debug_aranges (aranges_seg, info_seg);
1562       out_debug_abbrev (abbrev_seg);
1563       out_debug_info (info_seg, abbrev_seg, line_seg);
1564     }
1565 }