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