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