OSDN Git Service

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