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