Do not reset loc_directive_seen in dwarf2_emit_insn.
[external/binutils.git] / gas / dwarf2dbg.c
1 /* dwarf2dbg.c - DWARF2 debug support
2    Copyright 1999, 2000, 2001 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 2, 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, 59 Temple Place - Suite 330, Boston, MA
20    02111-1307, USA.  */
21
22 /* Logical line numbers can be controlled by the compiler via the
23    following two directives:
24
25         .file FILENO "file.c"
26         .loc  FILENO LINENO [COLUMN]
27
28    FILENO is the filenumber.  */
29
30 #include "ansidecl.h"
31 #include "as.h"
32
33 #ifdef HAVE_LIMITS_H
34 #include <limits.h>
35 #else
36 #ifdef HAVE_SYS_PARAM_H
37 #include <sys/param.h>
38 #endif
39 #ifndef INT_MAX
40 #define INT_MAX (int) (((unsigned) (-1)) >> 1)
41 #endif
42 #endif
43
44 #ifdef BFD_ASSEMBLER
45
46 #include "dwarf2dbg.h"
47 #include "subsegs.h"
48
49 #include "elf/dwarf2.h"
50
51 /* Since we can't generate the prolog until the body is complete, we
52    use three different subsegments for .debug_line: one holding the
53    prolog, one for the directory and filename info, and one for the
54    body ("statement program").  */
55 #define DL_PROLOG       0
56 #define DL_FILES        1
57 #define DL_BODY         2
58
59 /* First special line opcde - leave room for the standard opcodes.
60    Note: If you want to change this, you'll have to update the
61    "standard_opcode_lengths" table that is emitted below in
62    dwarf2_finish().  */
63 #define DWARF2_LINE_OPCODE_BASE         10
64
65 #ifndef DWARF2_LINE_BASE
66   /* Minimum line offset in a special line info. opcode.  This value
67      was chosen to give a reasonable range of values.  */
68 # define DWARF2_LINE_BASE               -5
69 #endif
70
71 /* Range of line offsets in a special line info. opcode.  */
72 #ifndef DWARF2_LINE_RANGE
73 # define DWARF2_LINE_RANGE              14
74 #endif
75
76 #ifndef DWARF2_LINE_MIN_INSN_LENGTH
77   /* Define the architecture-dependent minimum instruction length (in
78      bytes).  This value should be rather too small than too big.  */
79 # define DWARF2_LINE_MIN_INSN_LENGTH    1
80 #endif
81
82 /* Flag that indicates the initial value of the is_stmt_start flag.
83    In the present implementation, we do not mark any lines as
84    the beginning of a source statement, because that information
85    is not made available by the GCC front-end.  */
86 #define DWARF2_LINE_DEFAULT_IS_STMT     1
87
88 /* Given a special op, return the line skip amount.  */
89 #define SPECIAL_LINE(op) \
90         (((op) - DWARF2_LINE_OPCODE_BASE)%DWARF2_LINE_RANGE + DWARF2_LINE_BASE)
91
92 /* Given a special op, return the address skip amount (in units of
93    DWARF2_LINE_MIN_INSN_LENGTH.  */
94 #define SPECIAL_ADDR(op) (((op) - DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)
95
96 /* The maximum address skip amount that can be encoded with a special op.  */
97 #define MAX_SPECIAL_ADDR_DELTA          SPECIAL_ADDR(255)
98
99 struct line_entry {
100   struct line_entry *next;
101   fragS *frag;
102   addressT frag_ofs;
103   struct dwarf2_line_info loc;
104 };
105
106 struct line_subseg {
107   struct line_subseg *next;
108   subsegT subseg;
109   struct line_entry *head;
110   struct line_entry **ptail;
111 };
112
113 struct line_seg {
114   struct line_seg *next;
115   segT seg;
116   struct line_subseg *head;
117   symbolS *text_start;
118   symbolS *text_end;
119 };
120
121 /* Collects data for all line table entries during assembly.  */
122 static struct line_seg *all_segs;
123
124 struct file_entry {
125   char *filename;
126   unsigned int dir;
127 };
128
129 /* Table of files used by .debug_line.  */
130 static struct file_entry *files;
131 static unsigned int files_in_use;
132 static unsigned int files_allocated;
133
134 /* True when we've seen a .loc directive recently.  Used to avoid
135    doing work when there's nothing to do.  */
136 static boolean loc_directive_seen;
137
138 /* Current location as indicated by the most recent .loc directive.  */
139 static struct dwarf2_line_info current;
140
141 /* Fake label name.  */
142 static char const fake_label_name[] = ".L0\001";
143
144 /* The size of an address on the target.  */
145 static unsigned int sizeof_address;
146 \f
147 static struct line_subseg *get_line_subseg PARAMS ((segT, subsegT));
148 static unsigned int get_filenum PARAMS ((const char *));
149 static struct frag *first_frag_for_seg PARAMS ((segT));
150 static struct frag *last_frag_for_seg PARAMS ((segT));
151 static void out_byte PARAMS ((int));
152 static void out_opcode PARAMS ((int));
153 static void out_two PARAMS ((int));
154 static void out_four PARAMS ((int));
155 static void out_abbrev PARAMS ((int, int));
156 static void out_uleb128 PARAMS ((addressT));
157 static symbolS *symbol_new_now PARAMS ((void));
158 static void set_symbol_value_now PARAMS ((symbolS *));
159 static offsetT get_frag_fix PARAMS ((fragS *));
160 static void out_set_addr PARAMS ((segT, fragS *, addressT));
161 static int size_inc_line_addr PARAMS ((int, addressT));
162 static void emit_inc_line_addr PARAMS ((int, addressT, char *, int));
163 static void out_inc_line_addr PARAMS ((int, addressT));
164 static void relax_inc_line_addr PARAMS ((int, segT, fragS *, addressT,
165                                          fragS *, addressT));
166 static void process_entries PARAMS ((segT, struct line_entry *));
167 static void out_file_list PARAMS ((void));
168 static void out_debug_line PARAMS ((segT));
169 static void out_debug_aranges PARAMS ((segT, segT));
170 static void out_debug_abbrev PARAMS ((segT));
171 static void out_debug_info PARAMS ((segT, segT, segT));
172 \f
173 /* Find or create an entry for SEG+SUBSEG in ALL_SEGS.  */
174
175 static struct line_subseg *
176 get_line_subseg (seg, subseg)
177      segT seg;
178      subsegT subseg;
179 {
180   static segT last_seg;
181   static subsegT last_subseg;
182   static struct line_subseg *last_line_subseg;
183
184   struct line_seg *s;
185   struct line_subseg **pss, *ss;
186
187   if (seg == last_seg && subseg == last_subseg)
188     return last_line_subseg;
189
190   for (s = all_segs; s; s = s->next)
191     if (s->seg == seg)
192       goto found_seg;
193
194   s = (struct line_seg *) xmalloc (sizeof (*s));
195   s->next = all_segs;
196   s->seg = seg;
197   s->head = NULL;
198   all_segs = s;
199
200  found_seg:
201   for (pss = &s->head; (ss = *pss) != NULL ; pss = &ss->next)
202     {
203       if (ss->subseg == subseg)
204         goto found_subseg;
205       if (ss->subseg > subseg)
206         break;
207     }
208
209   ss = (struct line_subseg *) xmalloc (sizeof (*ss));
210   ss->next = *pss;
211   ss->subseg = subseg;
212   ss->head = NULL;
213   ss->ptail = &ss->head;
214   *pss = ss;
215
216  found_subseg:
217   last_seg = seg;
218   last_subseg = subseg;
219   last_line_subseg = ss;
220
221   return ss;
222 }
223
224 /* Record an entry for LOC ocurring at OFS within the current fragment.  */
225
226 void
227 dwarf2_gen_line_info (ofs, loc)
228      addressT ofs;
229      struct dwarf2_line_info *loc;
230 {
231   struct line_subseg *ss;
232   struct line_entry *e;
233   static unsigned int line = -1;
234   static unsigned int filenum = -1;
235
236   /* Early out for as-yet incomplete location information.  */
237   if (loc->filenum == 0 || loc->line == 0)
238     return;
239
240   /* Don't emit sequences of line symbols for the same line when the
241      symbols apply to assembler code.  It is necessary to emit
242      duplicate line symbols when a compiler asks for them, because GDB
243      uses them to determine the end of the prologue.  */
244   if (debug_type == DEBUG_DWARF2
245       && line == loc->line && filenum == loc->filenum)
246     return;
247
248   line = loc->line;
249   filenum = loc->filenum;
250
251   e = (struct line_entry *) xmalloc (sizeof (*e));
252   e->next = NULL;
253   e->frag = frag_now;
254   e->frag_ofs = ofs;
255   e->loc = *loc;
256
257   ss = get_line_subseg (now_seg, now_subseg);
258   *ss->ptail = e;
259   ss->ptail = &e->next;
260 }
261
262 void
263 dwarf2_where (line)
264      struct dwarf2_line_info *line;
265 {
266   if (debug_type == DEBUG_DWARF2)
267     {
268       char *filename;
269       as_where (&filename, &line->line);
270       line->filenum = get_filenum (filename);
271       line->column = 0;
272       line->flags = DWARF2_FLAG_BEGIN_STMT;
273     }
274   else
275     *line = current;
276 }
277
278 /* Called for each machine instruction, or relatively atomic group of
279    machine instructions (ie built-in macro).  The instruction or group
280    is SIZE bytes in length.  If dwarf2 line number generation is called
281    for, emit a line statement appropriately.  */
282
283 void
284 dwarf2_emit_insn (size)
285      int size;
286 {
287   struct dwarf2_line_info loc;
288
289   if (loc_directive_seen)
290     /* Use the last location established by a .loc directive, not
291        the value returned by dwarf2_where().  That calls as_where()
292        which will return either the logical input file name (foo.c)
293        or the physical input file name (foo.s) and not the file name
294        specified in the most recent .loc directive (eg foo.h).  */
295     loc = current;
296   else if (debug_type != DEBUG_DWARF2)
297     return;
298   else
299     dwarf2_where (& loc);
300
301   dwarf2_gen_line_info (frag_now_fix () - size, &loc);
302 }
303
304 /* Get a .debug_line file number for FILENAME.  */
305
306 static unsigned int
307 get_filenum (filename)
308      const char *filename;
309 {
310   static unsigned int last_used;
311   unsigned int i;
312
313   if (last_used)
314     if (strcmp (filename, files[last_used].filename) == 0)
315       return last_used;
316
317   for (i = 1; i < files_in_use; ++i)
318     if (strcmp (filename, files[i].filename) == 0)
319       return i;
320
321   if (i >= files_allocated)
322     {
323       unsigned int old = files_allocated;
324
325       files_allocated = i + 32;
326       files = (struct file_entry *)
327         xrealloc (files, (i + 32) * sizeof (struct file_entry));
328
329       memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
330     }
331
332   files[i].filename = xstrdup (filename);
333   files[i].dir = 0;
334   files_in_use = i + 1;
335   last_used = i;
336
337   return i;
338 }
339
340 /* Handle the .file directive.  */
341
342 void
343 dwarf2_directive_file (dummy)
344      int dummy ATTRIBUTE_UNUSED;
345 {
346   offsetT num;
347   char *filename;
348   int filename_len;
349
350   /* Continue to accept a bare string and pass it off.  */
351   SKIP_WHITESPACE ();
352   if (*input_line_pointer == '"')
353     {
354       s_app_file (0);
355       return;
356     }
357
358   num = get_absolute_expression ();
359   filename = demand_copy_C_string (&filename_len);
360   demand_empty_rest_of_line ();
361
362   if (num < 1)
363     {
364       as_bad (_("file number less than one"));
365       return;
366     }
367
368   if (num < (int) files_in_use && files[num].filename != 0)
369     {
370       as_bad (_("file number %ld already allocated"), (long) num);
371       return;
372     }
373
374   if (num >= (int) files_allocated)
375     {
376       unsigned int old = files_allocated;
377
378       files_allocated = num + 16;
379       files = (struct file_entry *)
380         xrealloc (files, (num + 16) * sizeof (struct file_entry));
381
382       /* Zero the new memory.  */
383       memset (files + old, 0, (num + 16 - old) * sizeof (struct file_entry));
384     }
385
386   files[num].filename = filename;
387   files[num].dir = 0;
388   files_in_use = num + 1;
389 }
390
391 void
392 dwarf2_directive_loc (dummy)
393      int dummy ATTRIBUTE_UNUSED;
394 {
395   offsetT filenum, line, column;
396
397   filenum = get_absolute_expression ();
398   SKIP_WHITESPACE ();
399   line = get_absolute_expression ();
400   SKIP_WHITESPACE ();
401   column = get_absolute_expression ();
402   demand_empty_rest_of_line ();
403
404   if (filenum < 1)
405     {
406       as_bad (_("file number less than one"));
407       return;
408     }
409   if (filenum >= (int) files_in_use || files[filenum].filename == 0)
410     {
411       as_bad (_("unassigned file number %ld"), (long) filenum);
412       return;
413     }
414
415   current.filenum = filenum;
416   current.line = line;
417   current.column = column;
418   current.flags = DWARF2_FLAG_BEGIN_STMT;
419
420   loc_directive_seen = true;
421
422 #ifndef NO_LISTING
423   if (listing)
424     listing_source_line (line);
425 #endif
426 }
427 \f
428 static struct frag *
429 first_frag_for_seg (seg)
430      segT seg;
431 {
432   frchainS *f, *first = NULL;
433
434   for (f = frchain_root; f; f = f->frch_next)
435     if (f->frch_seg == seg
436         && (! first || first->frch_subseg > f->frch_subseg))
437       first = f;
438
439   return first ? first->frch_root : NULL;
440 }
441
442 static struct frag *
443 last_frag_for_seg (seg)
444      segT seg;
445 {
446   frchainS *f, *last = NULL;
447
448   for (f = frchain_root; f; f = f->frch_next)
449     if (f->frch_seg == seg
450         && (! last || last->frch_subseg < f->frch_subseg))
451       last= f;
452
453   return last ? last->frch_last : NULL;
454 }
455 \f
456 /* Emit a single byte into the current segment.  */
457
458 static inline void
459 out_byte (byte)
460      int byte;
461 {
462   FRAG_APPEND_1_CHAR (byte);
463 }
464
465 /* Emit a statement program opcode into the current segment.  */
466
467 static inline void
468 out_opcode (opc)
469      int opc;
470 {
471   out_byte (opc);
472 }
473
474 /* Emit a two-byte word into the current segment.  */
475
476 static inline void
477 out_two (data)
478      int data;
479 {
480   md_number_to_chars (frag_more (2), data, 2);
481 }
482
483 /* Emit a four byte word into the current segment.  */
484
485 static inline void
486 out_four (data)
487      int data;
488 {
489   md_number_to_chars (frag_more (4), data, 4);
490 }
491
492 /* Emit an unsigned "little-endian base 128" number.  */
493
494 static void
495 out_uleb128 (value)
496      addressT value;
497 {
498   output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
499 }
500
501 /* Emit a tuple for .debug_abbrev.  */
502
503 static inline void
504 out_abbrev (name, form)
505      int name, form;
506 {
507   out_uleb128 (name);
508   out_uleb128 (form);
509 }
510
511 /* Create a new fake symbol whose value is the current position.  */
512
513 static symbolS *
514 symbol_new_now ()
515 {
516   return symbol_new (fake_label_name, now_seg, frag_now_fix (), frag_now);
517 }
518
519 /* Set the value of SYM to the current position in the current segment.  */
520
521 static void
522 set_symbol_value_now (sym)
523      symbolS *sym;
524 {
525   S_SET_SEGMENT (sym, now_seg);
526   S_SET_VALUE (sym, frag_now_fix ());
527   symbol_set_frag (sym, frag_now);
528 }
529
530 /* Get the size of a fragment.  */
531
532 static offsetT
533 get_frag_fix (frag)
534      fragS *frag;
535 {
536   frchainS *fr;
537
538   if (frag->fr_next)
539     return frag->fr_fix;
540
541   /* If a fragment is the last in the chain, special measures must be
542      taken to find its size before relaxation, since it may be pending
543      on some subsegment chain.  */
544   for (fr = frchain_root; fr; fr = fr->frch_next)
545     if (fr->frch_last == frag)
546       {
547         long align_mask = -1 << get_recorded_alignment (fr->frch_seg);
548         return (((char *) obstack_next_free (&fr->frch_obstack)
549                  - frag->fr_literal) + ~align_mask) & align_mask;
550       }
551
552   abort ();
553 }
554
555 /* Set an absolute address (may result in a relocation entry).  */
556
557 static void
558 out_set_addr (seg, frag, ofs)
559      segT seg;
560      fragS *frag;
561      addressT ofs;
562 {
563   expressionS expr;
564   symbolS *sym;
565
566   sym = symbol_new (fake_label_name, seg, ofs, frag);
567
568   out_opcode (DW_LNS_extended_op);
569   out_uleb128 (sizeof_address + 1);
570
571   out_opcode (DW_LNE_set_address);
572   expr.X_op = O_symbol;
573   expr.X_add_symbol = sym;
574   expr.X_add_number = 0;
575   emit_expr (&expr, sizeof_address);
576 }
577
578 /* Encode a pair of line and address skips as efficiently as possible.
579    Note that the line skip is signed, whereas the address skip is unsigned.
580
581    The following two routines *must* be kept in sync.  This is
582    enforced by making emit_inc_line_addr abort if we do not emit
583    exactly the expected number of bytes.  */
584
585 static int
586 size_inc_line_addr (line_delta, addr_delta)
587      int line_delta;
588      addressT addr_delta;
589 {
590   unsigned int tmp, opcode;
591   int len = 0;
592
593   /* Scale the address delta by the minimum instruction length.  */
594 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
595   assert (addr_delta % DWARF2_LINE_MIN_INSN_LENGTH == 0);
596   addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
597 #endif
598
599   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
600      We cannot use special opcodes here, since we want the end_sequence
601      to emit the matrix entry.  */
602   if (line_delta == INT_MAX)
603     {
604       if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
605         len = 1;
606       else
607         len = 1 + sizeof_leb128 (addr_delta, 0);
608       return len + 3;
609     }
610
611   /* Bias the line delta by the base.  */
612   tmp = line_delta - DWARF2_LINE_BASE;
613
614   /* If the line increment is out of range of a special opcode, we
615      must encode it with DW_LNS_advance_line.  */
616   if (tmp >= DWARF2_LINE_RANGE)
617     {
618       len = 1 + sizeof_leb128 (line_delta, 1);
619       line_delta = 0;
620       tmp = 0 - DWARF2_LINE_BASE;
621     }
622
623   /* Bias the opcode by the special opcode base.  */
624   tmp += DWARF2_LINE_OPCODE_BASE;
625
626   /* Avoid overflow when addr_delta is large.  */
627   if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
628     {
629       /* Try using a special opcode.  */
630       opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
631       if (opcode <= 255)
632         return len + 1;
633
634       /* Try using DW_LNS_const_add_pc followed by special op.  */
635       opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
636       if (opcode <= 255)
637         return len + 2;
638     }
639
640   /* Otherwise use DW_LNS_advance_pc.  */
641   len += 1 + sizeof_leb128 (addr_delta, 0);
642
643   /* DW_LNS_copy or special opcode.  */
644   len += 1;
645
646   return len;
647 }
648
649 static void
650 emit_inc_line_addr (line_delta, addr_delta, p, len)
651      int line_delta;
652      addressT addr_delta;
653      char *p;
654      int len;
655 {
656   unsigned int tmp, opcode;
657   int need_copy = 0;
658   char *end = p + len;
659
660 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
661   /* Scale the address delta by the minimum instruction length.  */
662   assert (addr_delta % DWARF2_LINE_MIN_INSN_LENGTH == 0);
663   addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
664 #endif
665   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
666      We cannot use special opcodes here, since we want the end_sequence
667      to emit the matrix entry.  */
668   if (line_delta == INT_MAX)
669     {
670       if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
671         *p++ = DW_LNS_const_add_pc;
672       else
673         {
674           *p++ = DW_LNS_advance_pc;
675           p += output_leb128 (p, addr_delta, 0);
676         }
677
678       *p++ = DW_LNS_extended_op;
679       *p++ = 1;
680       *p++ = DW_LNE_end_sequence;
681       goto done;
682     }
683
684   /* Bias the line delta by the base.  */
685   tmp = line_delta - DWARF2_LINE_BASE;
686
687   /* If the line increment is out of range of a special opcode, we
688      must encode it with DW_LNS_advance_line.  */
689   if (tmp >= DWARF2_LINE_RANGE)
690     {
691       *p++ = DW_LNS_advance_line;
692       p += output_leb128 (p, line_delta, 1);
693
694       /* Prettier, I think, to use DW_LNS_copy instead of a
695          "line +0, addr +0" special opcode.  */
696       if (addr_delta == 0)
697         {
698           *p++ = DW_LNS_copy;
699           goto done;
700         }
701
702       line_delta = 0;
703       tmp = 0 - DWARF2_LINE_BASE;
704       need_copy = 1;
705     }
706
707   /* Bias the opcode by the special opcode base.  */
708   tmp += DWARF2_LINE_OPCODE_BASE;
709
710   /* Avoid overflow when addr_delta is large.  */
711   if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
712     {
713       /* Try using a special opcode.  */
714       opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
715       if (opcode <= 255)
716         {
717           *p++ = opcode;
718           goto done;
719         }
720
721       /* Try using DW_LNS_const_add_pc followed by special op.  */
722       opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
723       if (opcode <= 255)
724         {
725           *p++ = DW_LNS_const_add_pc;
726           *p++ = opcode;
727           goto done;
728         }
729     }
730
731   /* Otherwise use DW_LNS_advance_pc.  */
732   *p++ = DW_LNS_advance_pc;
733   p += output_leb128 (p, addr_delta, 0);
734
735   if (need_copy)
736     *p++ = DW_LNS_copy;
737   else
738     *p++ = tmp;
739
740  done:
741   assert (p == end);
742 }
743
744 /* Handy routine to combine calls to the above two routines.  */
745
746 static void
747 out_inc_line_addr (line_delta, addr_delta)
748      int line_delta;
749      addressT addr_delta;
750 {
751   int len = size_inc_line_addr (line_delta, addr_delta);
752   emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
753 }
754
755 /* Generate a variant frag that we can use to relax address/line
756    increments between fragments of the target segment.  */
757
758 static void
759 relax_inc_line_addr (line_delta, seg, to_frag, to_ofs, from_frag, from_ofs)
760      int line_delta;
761      segT seg;
762      fragS *to_frag, *from_frag;
763      addressT to_ofs, from_ofs;
764 {
765   symbolS *to_sym, *from_sym;
766   expressionS expr;
767   int max_chars;
768
769   to_sym = symbol_new (fake_label_name, seg, to_ofs, to_frag);
770   from_sym = symbol_new (fake_label_name, seg, from_ofs, from_frag);
771
772   expr.X_op = O_subtract;
773   expr.X_add_symbol = to_sym;
774   expr.X_op_symbol = from_sym;
775   expr.X_add_number = 0;
776
777   /* The maximum size of the frag is the line delta with a maximum
778      sized address delta.  */
779   max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
780
781   frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
782             make_expr_symbol (&expr), line_delta, NULL);
783 }
784
785 /* The function estimates the size of a rs_dwarf2dbg variant frag
786    based on the current values of the symbols.  It is called before
787    the relaxation loop.  We set fr_subtype to the expected length.  */
788
789 int
790 dwarf2dbg_estimate_size_before_relax (frag)
791      fragS *frag;
792 {
793   offsetT addr_delta;
794   int size;
795
796   addr_delta = resolve_symbol_value (frag->fr_symbol);
797   size = size_inc_line_addr (frag->fr_offset, addr_delta);
798
799   frag->fr_subtype = size;
800
801   return size;
802 }
803
804 /* This function relaxes a rs_dwarf2dbg variant frag based on the
805    current values of the symbols.  fr_subtype is the current length
806    of the frag.  This returns the change in frag length.  */
807
808 int
809 dwarf2dbg_relax_frag (frag)
810      fragS *frag;
811 {
812   int old_size, new_size;
813
814   old_size = frag->fr_subtype;
815   new_size = dwarf2dbg_estimate_size_before_relax (frag);
816
817   return new_size - old_size;
818 }
819
820 /* This function converts a rs_dwarf2dbg variant frag into a normal
821    fill frag.  This is called after all relaxation has been done.
822    fr_subtype will be the desired length of the frag.  */
823
824 void
825 dwarf2dbg_convert_frag (frag)
826      fragS *frag;
827 {
828   offsetT addr_diff;
829
830   addr_diff = resolve_symbol_value (frag->fr_symbol);
831
832   /* fr_var carries the max_chars that we created the fragment with.
833      fr_subtype carries the current expected length.  We must, of
834      course, have allocated enough memory earlier.  */
835   assert (frag->fr_var >= (int) frag->fr_subtype);
836
837   emit_inc_line_addr (frag->fr_offset, addr_diff,
838                       frag->fr_literal + frag->fr_fix, frag->fr_subtype);
839
840   frag->fr_fix += frag->fr_subtype;
841   frag->fr_type = rs_fill;
842   frag->fr_var = 0;
843   frag->fr_offset = 0;
844 }
845
846 /* Generate .debug_line content for the chain of line number entries
847    beginning at E, for segment SEG.  */
848
849 static void
850 process_entries (seg, e)
851      segT seg;
852      struct line_entry *e;
853 {
854   unsigned filenum = 1;
855   unsigned line = 1;
856   unsigned column = 0;
857   unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_BEGIN_STMT : 0;
858   fragS *frag = NULL;
859   fragS *last_frag;
860   addressT frag_ofs = 0;
861   addressT last_frag_ofs;
862   struct line_entry *next;
863
864   while (e)
865     {
866       int changed = 0;
867
868       if (filenum != e->loc.filenum)
869         {
870           filenum = e->loc.filenum;
871           out_opcode (DW_LNS_set_file);
872           out_uleb128 (filenum);
873           changed = 1;
874         }
875
876       if (column != e->loc.column)
877         {
878           column = e->loc.column;
879           out_opcode (DW_LNS_set_column);
880           out_uleb128 (column);
881           changed = 1;
882         }
883
884       if ((e->loc.flags ^ flags) & DWARF2_FLAG_BEGIN_STMT)
885         {
886           flags = e->loc.flags;
887           out_opcode (DW_LNS_negate_stmt);
888           changed = 1;
889         }
890
891       if (e->loc.flags & DWARF2_FLAG_BEGIN_BLOCK)
892         {
893           out_opcode (DW_LNS_set_basic_block);
894           changed = 1;
895         }
896
897       /* Don't try to optimize away redundant entries; gdb wants two
898          entries for a function where the code starts on the same line as
899          the {, and there's no way to identify that case here.  Trust gcc
900          to optimize appropriately.  */
901       if (1 /* line != e->loc.line || changed */)
902         {
903           int line_delta = e->loc.line - line;
904           if (frag == NULL)
905             {
906               out_set_addr (seg, e->frag, e->frag_ofs);
907               out_inc_line_addr (line_delta, 0);
908             }
909           else if (frag == e->frag)
910             out_inc_line_addr (line_delta, e->frag_ofs - frag_ofs);
911           else
912             relax_inc_line_addr (line_delta, seg, e->frag, e->frag_ofs,
913                                  frag, frag_ofs);
914
915           frag = e->frag;
916           frag_ofs = e->frag_ofs;
917           line = e->loc.line;
918         }
919       else if (frag == NULL)
920         {
921           out_set_addr (seg, e->frag, e->frag_ofs);
922           frag = e->frag;
923           frag_ofs = e->frag_ofs;
924         }
925
926       next = e->next;
927       free (e);
928       e = next;
929     }
930
931   /* Emit a DW_LNE_end_sequence for the end of the section.  */
932   last_frag = last_frag_for_seg (seg);
933   last_frag_ofs = get_frag_fix (last_frag);
934   if (frag == last_frag)
935     out_inc_line_addr (INT_MAX, last_frag_ofs - frag_ofs);
936   else
937     relax_inc_line_addr (INT_MAX, seg, last_frag, last_frag_ofs,
938                          frag, frag_ofs);
939 }
940
941 /* Emit the directory and file tables for .debug_line.  */
942
943 static void
944 out_file_list ()
945 {
946   size_t size;
947   char *cp;
948   unsigned int i;
949
950   /* Terminate directory list.  */
951   out_byte ('\0');
952
953   for (i = 1; i < files_in_use; ++i)
954     {
955       if (files[i].filename == NULL)
956         {
957           as_bad (_("unassigned file number %ld"), (long) i);
958           continue;
959         }
960
961       size = strlen (files[i].filename) + 1;
962       cp = frag_more (size);
963       memcpy (cp, files[i].filename, size);
964
965       out_uleb128 (files[i].dir);       /* directory number */
966       out_uleb128 (0);                  /* last modification timestamp */
967       out_uleb128 (0);                  /* filesize */
968     }
969
970   /* Terminate filename list.  */
971   out_byte (0);
972 }
973
974 /* Emit the collected .debug_line data.  */
975
976 static void
977 out_debug_line (line_seg)
978      segT line_seg;
979 {
980   expressionS expr;
981   symbolS *line_start;
982   symbolS *prologue_end;
983   symbolS *line_end;
984   struct line_seg *s;
985
986   subseg_set (line_seg, 0);
987
988   line_start = symbol_new_now ();
989   prologue_end = symbol_make (fake_label_name);
990   line_end = symbol_make (fake_label_name);
991
992   /* Total length of the information for this compilation unit.  */
993   expr.X_op = O_subtract;
994   expr.X_add_symbol = line_end;
995   expr.X_op_symbol = line_start;
996   expr.X_add_number = -4;
997   emit_expr (&expr, 4);
998
999   /* Version.  */
1000   out_two (2);
1001
1002   /* Length of the prologue following this length.  */
1003   expr.X_op = O_subtract;
1004   expr.X_add_symbol = prologue_end;
1005   expr.X_op_symbol = line_start;
1006   expr.X_add_number = - (4 + 2 + 4);
1007   emit_expr (&expr, 4);
1008
1009   /* Parameters of the state machine.  */
1010   out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
1011   out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
1012   out_byte (DWARF2_LINE_BASE);
1013   out_byte (DWARF2_LINE_RANGE);
1014   out_byte (DWARF2_LINE_OPCODE_BASE);
1015
1016   /* Standard opcode lengths.  */
1017   out_byte (0);                 /* DW_LNS_copy */
1018   out_byte (1);                 /* DW_LNS_advance_pc */
1019   out_byte (1);                 /* DW_LNS_advance_line */
1020   out_byte (1);                 /* DW_LNS_set_file */
1021   out_byte (1);                 /* DW_LNS_set_column */
1022   out_byte (0);                 /* DW_LNS_negate_stmt */
1023   out_byte (0);                 /* DW_LNS_set_basic_block */
1024   out_byte (0);                 /* DW_LNS_const_add_pc */
1025   out_byte (1);                 /* DW_LNS_fixed_advance_pc */
1026
1027   out_file_list ();
1028
1029   set_symbol_value_now (prologue_end);
1030
1031   /* For each section, emit a statement program.  */
1032   for (s = all_segs; s; s = s->next)
1033     process_entries (s->seg, s->head->head);
1034
1035   set_symbol_value_now (line_end);
1036 }
1037
1038 /* Emit data for .debug_aranges.  */
1039
1040 static void
1041 out_debug_aranges (aranges_seg, info_seg)
1042      segT aranges_seg;
1043      segT info_seg;
1044 {
1045   unsigned int addr_size = sizeof_address;
1046   addressT size, skip;
1047   struct line_seg *s;
1048   expressionS expr;
1049   char *p;
1050
1051   size = 4 + 2 + 4 + 1 + 1;
1052
1053   skip = 2 * addr_size - (size & (2 * addr_size - 1));
1054   if (skip == 2 * addr_size)
1055     skip = 0;
1056   size += skip;
1057
1058   for (s = all_segs; s; s = s->next)
1059     size += 2 * addr_size;
1060
1061   size += 2 * addr_size;
1062
1063   subseg_set (aranges_seg, 0);
1064
1065   /* Length of the compilation unit.  */
1066   out_four (size - 4);
1067
1068   /* Version.  */
1069   out_two (2);
1070
1071   /* Offset to .debug_info.  */
1072   expr.X_op = O_symbol;
1073   expr.X_add_symbol = section_symbol (info_seg);
1074   expr.X_add_number = 0;
1075   emit_expr (&expr, 4);
1076
1077   /* Size of an address (offset portion).  */
1078   out_byte (addr_size);
1079
1080   /* Size of a segment descriptor.  */
1081   out_byte (0);
1082
1083   /* Align the header.  */
1084   if (skip)
1085     frag_align (ffs (2 * addr_size) - 1, 0, 0);
1086
1087   for (s = all_segs; s; s = s->next)
1088     {
1089       fragS *frag;
1090       symbolS *beg, *end;
1091
1092       frag = first_frag_for_seg (s->seg);
1093       beg = symbol_new (fake_label_name, s->seg, 0, frag);
1094       s->text_start = beg;
1095
1096       frag = last_frag_for_seg (s->seg);
1097       end = symbol_new (fake_label_name, s->seg, get_frag_fix (frag), frag);
1098       s->text_end = end;
1099
1100       expr.X_op = O_symbol;
1101       expr.X_add_symbol = beg;
1102       expr.X_add_number = 0;
1103       emit_expr (&expr, addr_size);
1104
1105       expr.X_op = O_subtract;
1106       expr.X_add_symbol = end;
1107       expr.X_op_symbol = beg;
1108       expr.X_add_number = 0;
1109       emit_expr (&expr, addr_size);
1110     }
1111
1112   p = frag_more (2 * addr_size);
1113   md_number_to_chars (p, 0, addr_size);
1114   md_number_to_chars (p + addr_size, 0, addr_size);
1115 }
1116
1117 /* Emit data for .debug_abbrev.  Note that this must be kept in
1118    sync with out_debug_info below.  */
1119
1120 static void
1121 out_debug_abbrev (abbrev_seg)
1122      segT abbrev_seg;
1123 {
1124   subseg_set (abbrev_seg, 0);
1125
1126   out_uleb128 (1);
1127   out_uleb128 (DW_TAG_compile_unit);
1128   out_byte (DW_CHILDREN_no);
1129   out_abbrev (DW_AT_stmt_list, DW_FORM_data4);
1130   if (all_segs->next == NULL)
1131     {
1132       out_abbrev (DW_AT_low_pc, DW_FORM_addr);
1133       out_abbrev (DW_AT_high_pc, DW_FORM_addr);
1134     }
1135   out_abbrev (DW_AT_comp_dir, DW_FORM_string);
1136   out_abbrev (DW_AT_producer, DW_FORM_string);
1137   out_abbrev (DW_AT_language, DW_FORM_data2);
1138   out_abbrev (0, 0);
1139
1140   /* Terminate the abbreviations for this compilation unit.  */
1141   out_byte (0);
1142 }
1143
1144 /* Emit a description of this compilation unit for .debug_info.  */
1145
1146 static void
1147 out_debug_info (info_seg, abbrev_seg, line_seg)
1148      segT info_seg;
1149      segT abbrev_seg;
1150      segT line_seg;
1151 {
1152   char producer[128];
1153   char *comp_dir;
1154   expressionS expr;
1155   symbolS *info_start;
1156   symbolS *info_end;
1157   char *p;
1158   int len;
1159
1160   subseg_set (info_seg, 0);
1161
1162   info_start = symbol_new_now ();
1163   info_end = symbol_make (fake_label_name);
1164
1165   /* Compilation Unit length.  */
1166   expr.X_op = O_subtract;
1167   expr.X_add_symbol = info_end;
1168   expr.X_op_symbol = info_start;
1169   expr.X_add_number = -4;
1170   emit_expr (&expr, 4);
1171
1172   /* DWARF version.  */
1173   out_two (2);
1174
1175   /* .debug_abbrev offset */
1176   expr.X_op = O_symbol;
1177   expr.X_add_symbol = section_symbol (abbrev_seg);
1178   expr.X_add_number = 0;
1179   emit_expr (&expr, 4);
1180
1181   /* Target address size.  */
1182   out_byte (sizeof_address);
1183
1184   /* DW_TAG_compile_unit DIE abbrev */
1185   out_uleb128 (1);
1186
1187   /* DW_AT_stmt_list */
1188   expr.X_op = O_symbol;
1189   expr.X_add_symbol = section_symbol (line_seg);
1190   expr.X_add_number = 0;
1191   emit_expr (&expr, 4);
1192
1193   /* These two attributes may only be emitted if all of the code is
1194      contiguous.  Multiple sections are not that.  */
1195   if (all_segs->next == NULL)
1196     {
1197       /* DW_AT_low_pc */
1198       expr.X_op = O_symbol;
1199       expr.X_add_symbol = all_segs->text_start;
1200       expr.X_add_number = 0;
1201       emit_expr (&expr, sizeof_address);
1202
1203       /* DW_AT_high_pc */
1204       expr.X_op = O_symbol;
1205       expr.X_add_symbol = all_segs->text_end;
1206       expr.X_add_number = 0;
1207       emit_expr (&expr, sizeof_address);
1208     }
1209
1210   /* DW_AT_comp_dir */
1211   comp_dir = getpwd ();
1212   len = strlen (comp_dir) + 1;
1213   p = frag_more (len);
1214   memcpy (p, comp_dir, len);
1215
1216   /* DW_AT_producer */
1217   sprintf (producer, "GNU AS %s", VERSION);
1218   len = strlen (producer) + 1;
1219   p = frag_more (len);
1220   memcpy (p, producer, len);
1221
1222   /* DW_AT_language.  Yes, this is probably not really MIPS, but the
1223      dwarf2 draft has no standard code for assembler.  */
1224   out_two (DW_LANG_Mips_Assembler);
1225
1226   set_symbol_value_now (info_end);
1227 }
1228
1229 void
1230 dwarf2_finish ()
1231 {
1232   segT line_seg;
1233   struct line_seg *s;
1234
1235   /* If no debug information was recorded, nothing to do.  */
1236   if (all_segs == NULL && files_in_use <= 1)
1237     return;
1238
1239   /* Calculate the size of an address for the target machine.  */
1240   sizeof_address = bfd_arch_bits_per_address (stdoutput) / 8;
1241
1242   /* Create and switch to the line number section.  */
1243   line_seg = subseg_new (".debug_line", 0);
1244   bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY);
1245
1246   /* For each subsection, chain the debug entries together.  */
1247   for (s = all_segs; s; s = s->next)
1248     {
1249       struct line_subseg *ss = s->head;
1250       struct line_entry **ptail = ss->ptail;
1251
1252       while ((ss = ss->next) != NULL)
1253         {
1254           *ptail = ss->head;
1255           ptail = ss->ptail;
1256         }
1257     }
1258
1259   out_debug_line (line_seg);
1260
1261   /* If this is assembler generated line info, we need .debug_info
1262      and .debug_abbrev sections as well.  */
1263   if (all_segs != NULL && debug_type == DEBUG_DWARF2)
1264     {
1265       segT abbrev_seg;
1266       segT info_seg;
1267       segT aranges_seg;
1268
1269       info_seg = subseg_new (".debug_info", 0);
1270       abbrev_seg = subseg_new (".debug_abbrev", 0);
1271       aranges_seg = subseg_new (".debug_aranges", 0);
1272
1273       bfd_set_section_flags (stdoutput, info_seg, SEC_READONLY);
1274       bfd_set_section_flags (stdoutput, abbrev_seg, SEC_READONLY);
1275       bfd_set_section_flags (stdoutput, aranges_seg, SEC_READONLY);
1276
1277       record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
1278
1279       out_debug_aranges (aranges_seg, info_seg);
1280       out_debug_abbrev (abbrev_seg);
1281       out_debug_info (info_seg, abbrev_seg, line_seg);
1282     }
1283 }
1284
1285 #else
1286 void
1287 dwarf2_finish ()
1288 {
1289 }
1290
1291 int
1292 dwarf2dbg_estimate_size_before_relax (frag)
1293      fragS *frag ATTRIBUTE_UNUSED;
1294 {
1295   as_fatal (_("dwarf2 is not supported for this object file format"));
1296   return 0;
1297 }
1298
1299 int
1300 dwarf2dbg_relax_frag (frag)
1301      fragS *frag ATTRIBUTE_UNUSED;
1302 {
1303   as_fatal (_("dwarf2 is not supported for this object file format"));
1304   return 0;
1305 }
1306
1307 void
1308 dwarf2dbg_convert_frag (frag)
1309      fragS *frag ATTRIBUTE_UNUSED;
1310 {
1311   as_fatal (_("dwarf2 is not supported for this object file format"));
1312 }
1313
1314 void
1315 dwarf2_emit_insn (size)
1316      int size ATTRIBUTE_UNUSED;
1317 {
1318 }
1319
1320 void
1321 dwarf2_directive_file (dummy)
1322      int dummy ATTRIBUTE_UNUSED;
1323 {
1324   s_app_file (0);
1325 }
1326
1327 void
1328 dwarf2_directive_loc (dummy)
1329      int dummy ATTRIBUTE_UNUSED;
1330 {
1331   as_fatal (_("dwarf2 is not supported for this object file format"));
1332 }
1333 #endif /* BFD_ASSEMBLER */