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