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