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