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