Use the 'current' struct filled by dwarf2_directive_loc, instead of calling
[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 (debug_type != DEBUG_DWARF2 && ! loc_directive_seen)
290     return;
291   loc_directive_seen = false;
292
293   /* Use the last location established by a .loc directive, not
294      the value returned by dwarf2_where().  That calls as_where()
295      which will return either the logical input file name (foo.c)
296      or the physical input file name (foo.s) and not the file name
297      specified in the most recent .loc directive (eg foo.h).  */
298   loc = current;
299   dwarf2_gen_line_info (frag_now_fix () - size, &loc);
300 }
301
302 /* Get a .debug_line file number for FILENAME.  */
303
304 static unsigned int
305 get_filenum (filename)
306      const char *filename;
307 {
308   static unsigned int last_used;
309   unsigned int i;
310
311   if (last_used)
312     if (strcmp (filename, files[last_used].filename) == 0)
313       return last_used;
314
315   for (i = 1; i < files_in_use; ++i)
316     if (strcmp (filename, files[i].filename) == 0)
317       return i;
318
319   if (i >= files_allocated)
320     {
321       unsigned int old = files_allocated;
322
323       files_allocated = i + 32;
324       files = (struct file_entry *)
325         xrealloc (files, (i + 32) * sizeof (struct file_entry));
326
327       memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
328     }
329
330   files[i].filename = xstrdup (filename);
331   files[i].dir = 0;
332   files_in_use = i + 1;
333   last_used = i;
334
335   return i;
336 }
337
338 /* Handle the .file directive.  */
339
340 void
341 dwarf2_directive_file (dummy)
342      int dummy ATTRIBUTE_UNUSED;
343 {
344   offsetT num;
345   char *filename;
346   int filename_len;
347
348   /* Continue to accept a bare string and pass it off.  */
349   SKIP_WHITESPACE ();
350   if (*input_line_pointer == '"')
351     {
352       s_app_file (0);
353       return;
354     }
355
356   num = get_absolute_expression ();
357   filename = demand_copy_C_string (&filename_len);
358   demand_empty_rest_of_line ();
359
360   if (num < 1)
361     {
362       as_bad (_("file number less than one"));
363       return;
364     }
365
366   if (num < (int) files_in_use && files[num].filename != 0)
367     {
368       as_bad (_("file number %ld already allocated"), (long) num);
369       return;
370     }
371
372   if (num >= (int) files_allocated)
373     {
374       unsigned int old = files_allocated;
375
376       files_allocated = num + 16;
377       files = (struct file_entry *)
378         xrealloc (files, (num + 16) * sizeof (struct file_entry));
379
380       /* Zero the new memory.  */
381       memset (files + old, 0, (num + 16 - old) * sizeof (struct file_entry));
382     }
383
384   files[num].filename = filename;
385   files[num].dir = 0;
386   files_in_use = num + 1;
387 }
388
389 void
390 dwarf2_directive_loc (dummy)
391      int dummy ATTRIBUTE_UNUSED;
392 {
393   offsetT filenum, line, column;
394
395   filenum = get_absolute_expression ();
396   SKIP_WHITESPACE ();
397   line = get_absolute_expression ();
398   SKIP_WHITESPACE ();
399   column = get_absolute_expression ();
400   demand_empty_rest_of_line ();
401
402   if (filenum < 1)
403     {
404       as_bad (_("file number less than one"));
405       return;
406     }
407   if (filenum >= (int) files_in_use || files[filenum].filename == 0)
408     {
409       as_bad (_("unassigned file number %ld"), (long) filenum);
410       return;
411     }
412
413   current.filenum = filenum;
414   current.line = line;
415   current.column = column;
416   current.flags = DWARF2_FLAG_BEGIN_STMT;
417
418   loc_directive_seen = true;
419
420 #ifndef NO_LISTING
421   if (listing)
422     listing_source_line (line);
423 #endif
424 }
425 \f
426 static struct frag *
427 first_frag_for_seg (seg)
428      segT seg;
429 {
430   frchainS *f, *first = NULL;
431
432   for (f = frchain_root; f; f = f->frch_next)
433     if (f->frch_seg == seg
434         && (! first || first->frch_subseg > f->frch_subseg))
435       first = f;
436
437   return first ? first->frch_root : NULL;
438 }
439
440 static struct frag *
441 last_frag_for_seg (seg)
442      segT seg;
443 {
444   frchainS *f, *last = NULL;
445
446   for (f = frchain_root; f; f = f->frch_next)
447     if (f->frch_seg == seg
448         && (! last || last->frch_subseg < f->frch_subseg))
449       last= f;
450
451   return last ? last->frch_last : NULL;
452 }
453 \f
454 /* Emit a single byte into the current segment.  */
455
456 static inline void
457 out_byte (byte)
458      int byte;
459 {
460   FRAG_APPEND_1_CHAR (byte);
461 }
462
463 /* Emit a statement program opcode into the current segment.  */
464
465 static inline void
466 out_opcode (opc)
467      int opc;
468 {
469   out_byte (opc);
470 }
471
472 /* Emit a two-byte word into the current segment.  */
473
474 static inline void
475 out_two (data)
476      int data;
477 {
478   md_number_to_chars (frag_more (2), data, 2);
479 }
480
481 /* Emit a four byte word into the current segment.  */
482
483 static inline void
484 out_four (data)
485      int data;
486 {
487   md_number_to_chars (frag_more (4), data, 4);
488 }
489
490 /* Emit an unsigned "little-endian base 128" number.  */
491
492 static void
493 out_uleb128 (value)
494      addressT value;
495 {
496   output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
497 }
498
499 /* Emit a tuple for .debug_abbrev.  */
500
501 static inline void
502 out_abbrev (name, form)
503      int name, form;
504 {
505   out_uleb128 (name);
506   out_uleb128 (form);
507 }
508
509 /* Create a new fake symbol whose value is the current position.  */
510
511 static symbolS *
512 symbol_new_now ()
513 {
514   return symbol_new (fake_label_name, now_seg, frag_now_fix (), frag_now);
515 }
516
517 /* Set the value of SYM to the current position in the current segment.  */
518
519 static void
520 set_symbol_value_now (sym)
521      symbolS *sym;
522 {
523   S_SET_SEGMENT (sym, now_seg);
524   S_SET_VALUE (sym, frag_now_fix ());
525   symbol_set_frag (sym, frag_now);
526 }
527
528 /* Get the size of a fragment.  */
529
530 static offsetT
531 get_frag_fix (frag)
532      fragS *frag;
533 {
534   frchainS *fr;
535
536   if (frag->fr_next)
537     return frag->fr_fix;
538
539   /* If a fragment is the last in the chain, special measures must be
540      taken to find its size before relaxation, since it may be pending
541      on some subsegment chain.  */
542   for (fr = frchain_root; fr; fr = fr->frch_next)
543     if (fr->frch_last == frag)
544       {
545         long align_mask = -1 << get_recorded_alignment (fr->frch_seg);
546         return (((char *) obstack_next_free (&fr->frch_obstack)
547                  - frag->fr_literal) + ~align_mask) & align_mask;
548       }
549
550   abort ();
551 }
552
553 /* Set an absolute address (may result in a relocation entry).  */
554
555 static void
556 out_set_addr (seg, frag, ofs)
557      segT seg;
558      fragS *frag;
559      addressT ofs;
560 {
561   expressionS expr;
562   symbolS *sym;
563
564   sym = symbol_new (fake_label_name, seg, ofs, frag);
565
566   out_opcode (DW_LNS_extended_op);
567   out_uleb128 (sizeof_address + 1);
568
569   out_opcode (DW_LNE_set_address);
570   expr.X_op = O_symbol;
571   expr.X_add_symbol = sym;
572   expr.X_add_number = 0;
573   emit_expr (&expr, sizeof_address);
574 }
575
576 /* Encode a pair of line and address skips as efficiently as possible.
577    Note that the line skip is signed, whereas the address skip is unsigned.
578
579    The following two routines *must* be kept in sync.  This is
580    enforced by making emit_inc_line_addr abort if we do not emit
581    exactly the expected number of bytes.  */
582
583 static int
584 size_inc_line_addr (line_delta, addr_delta)
585      int line_delta;
586      addressT addr_delta;
587 {
588   unsigned int tmp, opcode;
589   int len = 0;
590
591   /* Scale the address delta by the minimum instruction length.  */
592 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
593   assert (addr_delta % DWARF2_LINE_MIN_INSN_LENGTH == 0);
594   addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
595 #endif
596
597   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
598      We cannot use special opcodes here, since we want the end_sequence
599      to emit the matrix entry.  */
600   if (line_delta == INT_MAX)
601     {
602       if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
603         len = 1;
604       else
605         len = 1 + sizeof_leb128 (addr_delta, 0);
606       return len + 3;
607     }
608
609   /* Bias the line delta by the base.  */
610   tmp = line_delta - DWARF2_LINE_BASE;
611
612   /* If the line increment is out of range of a special opcode, we
613      must encode it with DW_LNS_advance_line.  */
614   if (tmp >= DWARF2_LINE_RANGE)
615     {
616       len = 1 + sizeof_leb128 (line_delta, 1);
617       line_delta = 0;
618       tmp = 0 - DWARF2_LINE_BASE;
619     }
620
621   /* Bias the opcode by the special opcode base.  */
622   tmp += DWARF2_LINE_OPCODE_BASE;
623
624   /* Avoid overflow when addr_delta is large.  */
625   if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
626     {
627       /* Try using a special opcode.  */
628       opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
629       if (opcode <= 255)
630         return len + 1;
631
632       /* Try using DW_LNS_const_add_pc followed by special op.  */
633       opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
634       if (opcode <= 255)
635         return len + 2;
636     }
637
638   /* Otherwise use DW_LNS_advance_pc.  */
639   len += 1 + sizeof_leb128 (addr_delta, 0);
640
641   /* DW_LNS_copy or special opcode.  */
642   len += 1;
643
644   return len;
645 }
646
647 static void
648 emit_inc_line_addr (line_delta, addr_delta, p, len)
649      int line_delta;
650      addressT addr_delta;
651      char *p;
652      int len;
653 {
654   unsigned int tmp, opcode;
655   int need_copy = 0;
656   char *end = p + len;
657
658 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
659   /* Scale the address delta by the minimum instruction length.  */
660   assert (addr_delta % DWARF2_LINE_MIN_INSN_LENGTH == 0);
661   addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
662 #endif
663   /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
664      We cannot use special opcodes here, since we want the end_sequence
665      to emit the matrix entry.  */
666   if (line_delta == INT_MAX)
667     {
668       if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
669         *p++ = DW_LNS_const_add_pc;
670       else
671         {
672           *p++ = DW_LNS_advance_pc;
673           p += output_leb128 (p, addr_delta, 0);
674         }
675
676       *p++ = DW_LNS_extended_op;
677       *p++ = 1;
678       *p++ = DW_LNE_end_sequence;
679       goto done;
680     }
681
682   /* Bias the line delta by the base.  */
683   tmp = line_delta - DWARF2_LINE_BASE;
684
685   /* If the line increment is out of range of a special opcode, we
686      must encode it with DW_LNS_advance_line.  */
687   if (tmp >= DWARF2_LINE_RANGE)
688     {
689       *p++ = DW_LNS_advance_line;
690       p += output_leb128 (p, line_delta, 1);
691
692       /* Prettier, I think, to use DW_LNS_copy instead of a
693          "line +0, addr +0" special opcode.  */
694       if (addr_delta == 0)
695         {
696           *p++ = DW_LNS_copy;
697           goto done;
698         }
699
700       line_delta = 0;
701       tmp = 0 - DWARF2_LINE_BASE;
702       need_copy = 1;
703     }
704
705   /* Bias the opcode by the special opcode base.  */
706   tmp += DWARF2_LINE_OPCODE_BASE;
707
708   /* Avoid overflow when addr_delta is large.  */
709   if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
710     {
711       /* Try using a special opcode.  */
712       opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
713       if (opcode <= 255)
714         {
715           *p++ = opcode;
716           goto done;
717         }
718
719       /* Try using DW_LNS_const_add_pc followed by special op.  */
720       opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
721       if (opcode <= 255)
722         {
723           *p++ = DW_LNS_const_add_pc;
724           *p++ = opcode;
725           goto done;
726         }
727     }
728
729   /* Otherwise use DW_LNS_advance_pc.  */
730   *p++ = DW_LNS_advance_pc;
731   p += output_leb128 (p, addr_delta, 0);
732
733   if (need_copy)
734     *p++ = DW_LNS_copy;
735   else
736     *p++ = tmp;
737
738  done:
739   assert (p == end);
740 }
741
742 /* Handy routine to combine calls to the above two routines.  */
743
744 static void
745 out_inc_line_addr (line_delta, addr_delta)
746      int line_delta;
747      addressT addr_delta;
748 {
749   int len = size_inc_line_addr (line_delta, addr_delta);
750   emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
751 }
752
753 /* Generate a variant frag that we can use to relax address/line
754    increments between fragments of the target segment.  */
755
756 static void
757 relax_inc_line_addr (line_delta, seg, to_frag, to_ofs, from_frag, from_ofs)
758      int line_delta;
759      segT seg;
760      fragS *to_frag, *from_frag;
761      addressT to_ofs, from_ofs;
762 {
763   symbolS *to_sym, *from_sym;
764   expressionS expr;
765   int max_chars;
766
767   to_sym = symbol_new (fake_label_name, seg, to_ofs, to_frag);
768   from_sym = symbol_new (fake_label_name, seg, from_ofs, from_frag);
769
770   expr.X_op = O_subtract;
771   expr.X_add_symbol = to_sym;
772   expr.X_op_symbol = from_sym;
773   expr.X_add_number = 0;
774
775   /* The maximum size of the frag is the line delta with a maximum
776      sized address delta.  */
777   max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
778
779   frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
780             make_expr_symbol (&expr), line_delta, NULL);
781 }
782
783 /* The function estimates the size of a rs_dwarf2dbg variant frag
784    based on the current values of the symbols.  It is called before
785    the relaxation loop.  We set fr_subtype to the expected length.  */
786
787 int
788 dwarf2dbg_estimate_size_before_relax (frag)
789      fragS *frag;
790 {
791   offsetT addr_delta;
792   int size;
793
794   addr_delta = resolve_symbol_value (frag->fr_symbol);
795   size = size_inc_line_addr (frag->fr_offset, addr_delta);
796
797   frag->fr_subtype = size;
798
799   return size;
800 }
801
802 /* This function relaxes a rs_dwarf2dbg variant frag based on the
803    current values of the symbols.  fr_subtype is the current length
804    of the frag.  This returns the change in frag length.  */
805
806 int
807 dwarf2dbg_relax_frag (frag)
808      fragS *frag;
809 {
810   int old_size, new_size;
811
812   old_size = frag->fr_subtype;
813   new_size = dwarf2dbg_estimate_size_before_relax (frag);
814
815   return new_size - old_size;
816 }
817
818 /* This function converts a rs_dwarf2dbg variant frag into a normal
819    fill frag.  This is called after all relaxation has been done.
820    fr_subtype will be the desired length of the frag.  */
821
822 void
823 dwarf2dbg_convert_frag (frag)
824      fragS *frag;
825 {
826   offsetT addr_diff;
827
828   addr_diff = resolve_symbol_value (frag->fr_symbol);
829
830   /* fr_var carries the max_chars that we created the fragment with.
831      fr_subtype carries the current expected length.  We must, of
832      course, have allocated enough memory earlier.  */
833   assert (frag->fr_var >= (int) frag->fr_subtype);
834
835   emit_inc_line_addr (frag->fr_offset, addr_diff,
836                       frag->fr_literal + frag->fr_fix, frag->fr_subtype);
837
838   frag->fr_fix += frag->fr_subtype;
839   frag->fr_type = rs_fill;
840   frag->fr_var = 0;
841   frag->fr_offset = 0;
842 }
843
844 /* Generate .debug_line content for the chain of line number entries
845    beginning at E, for segment SEG.  */
846
847 static void
848 process_entries (seg, e)
849      segT seg;
850      struct line_entry *e;
851 {
852   unsigned filenum = 1;
853   unsigned line = 1;
854   unsigned column = 0;
855   unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_BEGIN_STMT : 0;
856   fragS *frag = NULL;
857   fragS *last_frag;
858   addressT frag_ofs = 0;
859   addressT last_frag_ofs;
860   struct line_entry *next;
861
862   while (e)
863     {
864       int changed = 0;
865
866       if (filenum != e->loc.filenum)
867         {
868           filenum = e->loc.filenum;
869           out_opcode (DW_LNS_set_file);
870           out_uleb128 (filenum);
871           changed = 1;
872         }
873
874       if (column != e->loc.column)
875         {
876           column = e->loc.column;
877           out_opcode (DW_LNS_set_column);
878           out_uleb128 (column);
879           changed = 1;
880         }
881
882       if ((e->loc.flags ^ flags) & DWARF2_FLAG_BEGIN_STMT)
883         {
884           flags = e->loc.flags;
885           out_opcode (DW_LNS_negate_stmt);
886           changed = 1;
887         }
888
889       if (e->loc.flags & DWARF2_FLAG_BEGIN_BLOCK)
890         {
891           out_opcode (DW_LNS_set_basic_block);
892           changed = 1;
893         }
894
895       /* Don't try to optimize away redundant entries; gdb wants two
896          entries for a function where the code starts on the same line as
897          the {, and there's no way to identify that case here.  Trust gcc
898          to optimize appropriately.  */
899       if (1 /* line != e->loc.line || changed */)
900         {
901           int line_delta = e->loc.line - line;
902           if (frag == NULL)
903             {
904               out_set_addr (seg, e->frag, e->frag_ofs);
905               out_inc_line_addr (line_delta, 0);
906             }
907           else if (frag == e->frag)
908             out_inc_line_addr (line_delta, e->frag_ofs - frag_ofs);
909           else
910             relax_inc_line_addr (line_delta, seg, e->frag, e->frag_ofs,
911                                  frag, frag_ofs);
912
913           frag = e->frag;
914           frag_ofs = e->frag_ofs;
915           line = e->loc.line;
916         }
917       else if (frag == NULL)
918         {
919           out_set_addr (seg, e->frag, e->frag_ofs);
920           frag = e->frag;
921           frag_ofs = e->frag_ofs;
922         }
923
924       next = e->next;
925       free (e);
926       e = next;
927     }
928
929   /* Emit a DW_LNE_end_sequence for the end of the section.  */
930   last_frag = last_frag_for_seg (seg);
931   last_frag_ofs = get_frag_fix (last_frag);
932   if (frag == last_frag)
933     out_inc_line_addr (INT_MAX, last_frag_ofs - frag_ofs);
934   else
935     relax_inc_line_addr (INT_MAX, seg, last_frag, last_frag_ofs,
936                          frag, frag_ofs);
937 }
938
939 /* Emit the directory and file tables for .debug_line.  */
940
941 static void
942 out_file_list ()
943 {
944   size_t size;
945   char *cp;
946   unsigned int i;
947
948   /* Terminate directory list.  */
949   out_byte ('\0');
950
951   for (i = 1; i < files_in_use; ++i)
952     {
953       if (files[i].filename == NULL)
954         {
955           as_bad (_("unassigned file number %ld"), (long) i);
956           continue;
957         }
958
959       size = strlen (files[i].filename) + 1;
960       cp = frag_more (size);
961       memcpy (cp, files[i].filename, size);
962
963       out_uleb128 (files[i].dir);       /* directory number */
964       out_uleb128 (0);                  /* last modification timestamp */
965       out_uleb128 (0);                  /* filesize */
966     }
967
968   /* Terminate filename list.  */
969   out_byte (0);
970 }
971
972 /* Emit the collected .debug_line data.  */
973
974 static void
975 out_debug_line (line_seg)
976      segT line_seg;
977 {
978   expressionS expr;
979   symbolS *line_start;
980   symbolS *prologue_end;
981   symbolS *line_end;
982   struct line_seg *s;
983
984   subseg_set (line_seg, 0);
985
986   line_start = symbol_new_now ();
987   prologue_end = symbol_make (fake_label_name);
988   line_end = symbol_make (fake_label_name);
989
990   /* Total length of the information for this compilation unit.  */
991   expr.X_op = O_subtract;
992   expr.X_add_symbol = line_end;
993   expr.X_op_symbol = line_start;
994   expr.X_add_number = -4;
995   emit_expr (&expr, 4);
996
997   /* Version.  */
998   out_two (2);
999
1000   /* Length of the prologue following this length.  */
1001   expr.X_op = O_subtract;
1002   expr.X_add_symbol = prologue_end;
1003   expr.X_op_symbol = line_start;
1004   expr.X_add_number = - (4 + 2 + 4);
1005   emit_expr (&expr, 4);
1006
1007   /* Parameters of the state machine.  */
1008   out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
1009   out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
1010   out_byte (DWARF2_LINE_BASE);
1011   out_byte (DWARF2_LINE_RANGE);
1012   out_byte (DWARF2_LINE_OPCODE_BASE);
1013
1014   /* Standard opcode lengths.  */
1015   out_byte (0);                 /* DW_LNS_copy */
1016   out_byte (1);                 /* DW_LNS_advance_pc */
1017   out_byte (1);                 /* DW_LNS_advance_line */
1018   out_byte (1);                 /* DW_LNS_set_file */
1019   out_byte (1);                 /* DW_LNS_set_column */
1020   out_byte (0);                 /* DW_LNS_negate_stmt */
1021   out_byte (0);                 /* DW_LNS_set_basic_block */
1022   out_byte (0);                 /* DW_LNS_const_add_pc */
1023   out_byte (1);                 /* DW_LNS_fixed_advance_pc */
1024
1025   out_file_list ();
1026
1027   set_symbol_value_now (prologue_end);
1028
1029   /* For each section, emit a statement program.  */
1030   for (s = all_segs; s; s = s->next)
1031     process_entries (s->seg, s->head->head);
1032
1033   set_symbol_value_now (line_end);
1034 }
1035
1036 /* Emit data for .debug_aranges.  */
1037
1038 static void
1039 out_debug_aranges (aranges_seg, info_seg)
1040      segT aranges_seg;
1041      segT info_seg;
1042 {
1043   unsigned int addr_size = sizeof_address;
1044   addressT size, skip;
1045   struct line_seg *s;
1046   expressionS expr;
1047   char *p;
1048
1049   size = 4 + 2 + 4 + 1 + 1;
1050
1051   skip = 2 * addr_size - (size & (2 * addr_size - 1));
1052   if (skip == 2 * addr_size)
1053     skip = 0;
1054   size += skip;
1055
1056   for (s = all_segs; s; s = s->next)
1057     size += 2 * addr_size;
1058
1059   size += 2 * addr_size;
1060
1061   subseg_set (aranges_seg, 0);
1062
1063   /* Length of the compilation unit.  */
1064   out_four (size - 4);
1065
1066   /* Version.  */
1067   out_two (2);
1068
1069   /* Offset to .debug_info.  */
1070   expr.X_op = O_symbol;
1071   expr.X_add_symbol = section_symbol (info_seg);
1072   expr.X_add_number = 0;
1073   emit_expr (&expr, 4);
1074
1075   /* Size of an address (offset portion).  */
1076   out_byte (addr_size);
1077
1078   /* Size of a segment descriptor.  */
1079   out_byte (0);
1080
1081   /* Align the header.  */
1082   if (skip)
1083     frag_align (ffs (2 * addr_size) - 1, 0, 0);
1084
1085   for (s = all_segs; s; s = s->next)
1086     {
1087       fragS *frag;
1088       symbolS *beg, *end;
1089
1090       frag = first_frag_for_seg (s->seg);
1091       beg = symbol_new (fake_label_name, s->seg, 0, frag);
1092       s->text_start = beg;
1093
1094       frag = last_frag_for_seg (s->seg);
1095       end = symbol_new (fake_label_name, s->seg, get_frag_fix (frag), frag);
1096       s->text_end = end;
1097
1098       expr.X_op = O_symbol;
1099       expr.X_add_symbol = beg;
1100       expr.X_add_number = 0;
1101       emit_expr (&expr, addr_size);
1102
1103       expr.X_op = O_subtract;
1104       expr.X_add_symbol = end;
1105       expr.X_op_symbol = beg;
1106       expr.X_add_number = 0;
1107       emit_expr (&expr, addr_size);
1108     }
1109
1110   p = frag_more (2 * addr_size);
1111   md_number_to_chars (p, 0, addr_size);
1112   md_number_to_chars (p + addr_size, 0, addr_size);
1113 }
1114
1115 /* Emit data for .debug_abbrev.  Note that this must be kept in
1116    sync with out_debug_info below.  */
1117
1118 static void
1119 out_debug_abbrev (abbrev_seg)
1120      segT abbrev_seg;
1121 {
1122   subseg_set (abbrev_seg, 0);
1123
1124   out_uleb128 (1);
1125   out_uleb128 (DW_TAG_compile_unit);
1126   out_byte (DW_CHILDREN_no);
1127   out_abbrev (DW_AT_stmt_list, DW_FORM_data4);
1128   if (all_segs->next == NULL)
1129     {
1130       out_abbrev (DW_AT_low_pc, DW_FORM_addr);
1131       out_abbrev (DW_AT_high_pc, DW_FORM_addr);
1132     }
1133   out_abbrev (DW_AT_comp_dir, DW_FORM_string);
1134   out_abbrev (DW_AT_producer, DW_FORM_string);
1135   out_abbrev (DW_AT_language, DW_FORM_data2);
1136   out_abbrev (0, 0);
1137
1138   /* Terminate the abbreviations for this compilation unit.  */
1139   out_byte (0);
1140 }
1141
1142 /* Emit a description of this compilation unit for .debug_info.  */
1143
1144 static void
1145 out_debug_info (info_seg, abbrev_seg, line_seg)
1146      segT info_seg;
1147      segT abbrev_seg;
1148      segT line_seg;
1149 {
1150   char producer[128];
1151   char *comp_dir;
1152   expressionS expr;
1153   symbolS *info_start;
1154   symbolS *info_end;
1155   char *p;
1156   int len;
1157
1158   subseg_set (info_seg, 0);
1159
1160   info_start = symbol_new_now ();
1161   info_end = symbol_make (fake_label_name);
1162
1163   /* Compilation Unit length.  */
1164   expr.X_op = O_subtract;
1165   expr.X_add_symbol = info_end;
1166   expr.X_op_symbol = info_start;
1167   expr.X_add_number = -4;
1168   emit_expr (&expr, 4);
1169
1170   /* DWARF version.  */
1171   out_two (2);
1172
1173   /* .debug_abbrev offset */
1174   expr.X_op = O_symbol;
1175   expr.X_add_symbol = section_symbol (abbrev_seg);
1176   expr.X_add_number = 0;
1177   emit_expr (&expr, 4);
1178
1179   /* Target address size.  */
1180   out_byte (sizeof_address);
1181
1182   /* DW_TAG_compile_unit DIE abbrev */
1183   out_uleb128 (1);
1184
1185   /* DW_AT_stmt_list */
1186   expr.X_op = O_symbol;
1187   expr.X_add_symbol = section_symbol (line_seg);
1188   expr.X_add_number = 0;
1189   emit_expr (&expr, 4);
1190
1191   /* These two attributes may only be emitted if all of the code is
1192      contiguous.  Multiple sections are not that.  */
1193   if (all_segs->next == NULL)
1194     {
1195       /* DW_AT_low_pc */
1196       expr.X_op = O_symbol;
1197       expr.X_add_symbol = all_segs->text_start;
1198       expr.X_add_number = 0;
1199       emit_expr (&expr, sizeof_address);
1200
1201       /* DW_AT_high_pc */
1202       expr.X_op = O_symbol;
1203       expr.X_add_symbol = all_segs->text_end;
1204       expr.X_add_number = 0;
1205       emit_expr (&expr, sizeof_address);
1206     }
1207
1208   /* DW_AT_comp_dir */
1209   comp_dir = getpwd ();
1210   len = strlen (comp_dir) + 1;
1211   p = frag_more (len);
1212   memcpy (p, comp_dir, len);
1213
1214   /* DW_AT_producer */
1215   sprintf (producer, "GNU AS %s", VERSION);
1216   len = strlen (producer) + 1;
1217   p = frag_more (len);
1218   memcpy (p, producer, len);
1219
1220   /* DW_AT_language.  Yes, this is probably not really MIPS, but the
1221      dwarf2 draft has no standard code for assembler.  */
1222   out_two (DW_LANG_Mips_Assembler);
1223
1224   set_symbol_value_now (info_end);
1225 }
1226
1227 void
1228 dwarf2_finish ()
1229 {
1230   segT line_seg;
1231   struct line_seg *s;
1232
1233   /* If no debug information was recorded, nothing to do.  */
1234   if (all_segs == NULL && files_in_use <= 1)
1235     return;
1236
1237   /* Calculate the size of an address for the target machine.  */
1238   sizeof_address = bfd_arch_bits_per_address (stdoutput) / 8;
1239
1240   /* Create and switch to the line number section.  */
1241   line_seg = subseg_new (".debug_line", 0);
1242   bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY);
1243
1244   /* For each subsection, chain the debug entries together.  */
1245   for (s = all_segs; s; s = s->next)
1246     {
1247       struct line_subseg *ss = s->head;
1248       struct line_entry **ptail = ss->ptail;
1249
1250       while ((ss = ss->next) != NULL)
1251         {
1252           *ptail = ss->head;
1253           ptail = ss->ptail;
1254         }
1255     }
1256
1257   out_debug_line (line_seg);
1258
1259   /* If this is assembler generated line info, we need .debug_info
1260      and .debug_abbrev sections as well.  */
1261   if (all_segs != NULL && debug_type == DEBUG_DWARF2)
1262     {
1263       segT abbrev_seg;
1264       segT info_seg;
1265       segT aranges_seg;
1266
1267       info_seg = subseg_new (".debug_info", 0);
1268       abbrev_seg = subseg_new (".debug_abbrev", 0);
1269       aranges_seg = subseg_new (".debug_aranges", 0);
1270
1271       bfd_set_section_flags (stdoutput, info_seg, SEC_READONLY);
1272       bfd_set_section_flags (stdoutput, abbrev_seg, SEC_READONLY);
1273       bfd_set_section_flags (stdoutput, aranges_seg, SEC_READONLY);
1274
1275       record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
1276
1277       out_debug_aranges (aranges_seg, info_seg);
1278       out_debug_abbrev (abbrev_seg);
1279       out_debug_info (info_seg, abbrev_seg, line_seg);
1280     }
1281 }
1282
1283 #else
1284 void
1285 dwarf2_finish ()
1286 {
1287 }
1288
1289 int
1290 dwarf2dbg_estimate_size_before_relax (frag)
1291      fragS *frag ATTRIBUTE_UNUSED;
1292 {
1293   as_fatal (_("dwarf2 is not supported for this object file format"));
1294   return 0;
1295 }
1296
1297 int
1298 dwarf2dbg_relax_frag (frag)
1299      fragS *frag ATTRIBUTE_UNUSED;
1300 {
1301   as_fatal (_("dwarf2 is not supported for this object file format"));
1302   return 0;
1303 }
1304
1305 void
1306 dwarf2dbg_convert_frag (frag)
1307      fragS *frag ATTRIBUTE_UNUSED;
1308 {
1309   as_fatal (_("dwarf2 is not supported for this object file format"));
1310 }
1311
1312 void
1313 dwarf2_emit_insn (size)
1314      int size ATTRIBUTE_UNUSED;
1315 {
1316 }
1317
1318 void
1319 dwarf2_directive_file (dummy)
1320      int dummy ATTRIBUTE_UNUSED;
1321 {
1322   s_app_file (0);
1323 }
1324
1325 void
1326 dwarf2_directive_loc (dummy)
1327      int dummy ATTRIBUTE_UNUSED;
1328 {
1329   as_fatal (_("dwarf2 is not supported for this object file format"));
1330 }
1331 #endif /* BFD_ASSEMBLER */