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