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