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