* elfxx-target.h (bfd_elfNN_canonicalize_reloc): Make it
[binutils-gdb.git] / 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 && strcmp (file, files[i].filename) == 0)
415 {
416 last_used = i;
417 last_used_dir_len = dir_len;
418 return i;
419 }
420 }
421 else
422 i = num;
423
424 if (i >= files_allocated)
425 {
426 unsigned int old = files_allocated;
427
428 files_allocated = i + 32;
429 files = (struct file_entry *)
430 xrealloc (files, (i + 32) * sizeof (struct file_entry));
431
432 memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
433 }
434
435 files[i].filename = num ? file : xstrdup (file);
436 files[i].dir = dir;
437 files_in_use = i + 1;
438 last_used = i;
439 last_used_dir_len = dir_len;
440
441 return i;
442 }
443
444 /* Handle two forms of .file directive:
445 - Pass .file "source.c" to s_app_file
446 - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
447
448 If an entry is added to the file table, return a pointer to the filename. */
449
450 char *
451 dwarf2_directive_file (dummy)
452 int dummy ATTRIBUTE_UNUSED;
453 {
454 offsetT num;
455 char *filename;
456 int filename_len;
457
458 /* Continue to accept a bare string and pass it off. */
459 SKIP_WHITESPACE ();
460 if (*input_line_pointer == '"')
461 {
462 s_app_file (0);
463 return NULL;
464 }
465
466 num = get_absolute_expression ();
467 filename = demand_copy_C_string (&filename_len);
468 demand_empty_rest_of_line ();
469
470 if (num < 1)
471 {
472 as_bad (_("file number less than one"));
473 return NULL;
474 }
475
476 if (num < (int) files_in_use && files[num].filename != 0)
477 {
478 as_bad (_("file number %ld already allocated"), (long) num);
479 return NULL;
480 }
481
482 get_filenum (filename, num);
483
484 return filename;
485 }
486
487 void
488 dwarf2_directive_loc (dummy)
489 int dummy ATTRIBUTE_UNUSED;
490 {
491 offsetT filenum, line, column;
492
493 filenum = get_absolute_expression ();
494 SKIP_WHITESPACE ();
495 line = get_absolute_expression ();
496 SKIP_WHITESPACE ();
497 column = get_absolute_expression ();
498 demand_empty_rest_of_line ();
499
500 if (filenum < 1)
501 {
502 as_bad (_("file number less than one"));
503 return;
504 }
505 if (filenum >= (int) files_in_use || files[filenum].filename == 0)
506 {
507 as_bad (_("unassigned file number %ld"), (long) filenum);
508 return;
509 }
510
511 current.filenum = filenum;
512 current.line = line;
513 current.column = column;
514 current.flags = DWARF2_FLAG_BEGIN_STMT;
515
516 loc_directive_seen = TRUE;
517
518 #ifndef NO_LISTING
519 if (listing)
520 {
521 if (files[filenum].dir)
522 {
523 size_t dir_len = strlen (dirs[files[filenum].dir]);
524 size_t file_len = strlen (files[filenum].filename);
525 char *cp = (char *) alloca (dir_len + 1 + file_len + 1);
526
527 memcpy (cp, dirs[files[filenum].dir], dir_len);
528 cp[dir_len] = '/';
529 memcpy (cp + dir_len + 1, files[filenum].filename, file_len);
530 cp[dir_len + file_len + 1] = '\0';
531 listing_source_file (cp);
532 }
533 else
534 listing_source_file (files[filenum].filename);
535 listing_source_line (line);
536 }
537 #endif
538 }
539 \f
540 static struct frag *
541 first_frag_for_seg (seg)
542 segT seg;
543 {
544 frchainS *f, *first = NULL;
545
546 for (f = frchain_root; f; f = f->frch_next)
547 if (f->frch_seg == seg
548 && (! first || first->frch_subseg > f->frch_subseg))
549 first = f;
550
551 return first ? first->frch_root : NULL;
552 }
553
554 static struct frag *
555 last_frag_for_seg (seg)
556 segT seg;
557 {
558 frchainS *f, *last = NULL;
559
560 for (f = frchain_root; f; f = f->frch_next)
561 if (f->frch_seg == seg
562 && (! last || last->frch_subseg < f->frch_subseg))
563 last= f;
564
565 return last ? last->frch_last : NULL;
566 }
567 \f
568 /* Emit a single byte into the current segment. */
569
570 static inline void
571 out_byte (byte)
572 int byte;
573 {
574 FRAG_APPEND_1_CHAR (byte);
575 }
576
577 /* Emit a statement program opcode into the current segment. */
578
579 static inline void
580 out_opcode (opc)
581 int opc;
582 {
583 out_byte (opc);
584 }
585
586 /* Emit a two-byte word into the current segment. */
587
588 static inline void
589 out_two (data)
590 int data;
591 {
592 md_number_to_chars (frag_more (2), data, 2);
593 }
594
595 /* Emit a four byte word into the current segment. */
596
597 static inline void
598 out_four (data)
599 int data;
600 {
601 md_number_to_chars (frag_more (4), data, 4);
602 }
603
604 /* Emit an unsigned "little-endian base 128" number. */
605
606 static void
607 out_uleb128 (value)
608 addressT value;
609 {
610 output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
611 }
612
613 /* Emit a tuple for .debug_abbrev. */
614
615 static inline void
616 out_abbrev (name, form)
617 int name, form;
618 {
619 out_uleb128 (name);
620 out_uleb128 (form);
621 }
622
623 /* Create a new fake symbol whose value is the current position. */
624
625 static symbolS *
626 symbol_new_now ()
627 {
628 return symbol_new (fake_label_name, now_seg, frag_now_fix (), frag_now);
629 }
630
631 /* Set the value of SYM to the current position in the current segment. */
632
633 static void
634 set_symbol_value_now (sym)
635 symbolS *sym;
636 {
637 S_SET_SEGMENT (sym, now_seg);
638 S_SET_VALUE (sym, frag_now_fix ());
639 symbol_set_frag (sym, frag_now);
640 }
641
642 /* Get the size of a fragment. */
643
644 static offsetT
645 get_frag_fix (frag)
646 fragS *frag;
647 {
648 frchainS *fr;
649
650 if (frag->fr_next)
651 return frag->fr_fix;
652
653 /* If a fragment is the last in the chain, special measures must be
654 taken to find its size before relaxation, since it may be pending
655 on some subsegment chain. */
656 for (fr = frchain_root; fr; fr = fr->frch_next)
657 if (fr->frch_last == frag)
658 {
659 long align_mask = -1 << get_recorded_alignment (fr->frch_seg);
660 return (((char *) obstack_next_free (&fr->frch_obstack)
661 - frag->fr_literal) + ~align_mask) & align_mask;
662 }
663
664 abort ();
665 }
666
667 /* Set an absolute address (may result in a relocation entry). */
668
669 static void
670 out_set_addr (seg, frag, ofs)
671 segT seg;
672 fragS *frag;
673 addressT ofs;
674 {
675 expressionS expr;
676 symbolS *sym;
677
678 sym = symbol_new (fake_label_name, seg, ofs, frag);
679
680 out_opcode (DW_LNS_extended_op);
681 out_uleb128 (sizeof_address + 1);
682
683 out_opcode (DW_LNE_set_address);
684 expr.X_op = O_symbol;
685 expr.X_add_symbol = sym;
686 expr.X_add_number = 0;
687 emit_expr (&expr, sizeof_address);
688 }
689
690 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
691 static void scale_addr_delta PARAMS ((addressT *));
692
693 static void
694 scale_addr_delta (addr_delta)
695 addressT *addr_delta;
696 {
697 static int printed_this = 0;
698 if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0)
699 {
700 if (!printed_this)
701 as_bad("unaligned opcodes detected in executable segment");
702 printed_this = 1;
703 }
704 *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
705 }
706 #else
707 #define scale_addr_delta(A)
708 #endif
709
710 /* Encode a pair of line and address skips as efficiently as possible.
711 Note that the line skip is signed, whereas the address skip is unsigned.
712
713 The following two routines *must* be kept in sync. This is
714 enforced by making emit_inc_line_addr abort if we do not emit
715 exactly the expected number of bytes. */
716
717 static int
718 size_inc_line_addr (line_delta, addr_delta)
719 int line_delta;
720 addressT addr_delta;
721 {
722 unsigned int tmp, opcode;
723 int len = 0;
724
725 /* Scale the address delta by the minimum instruction length. */
726 scale_addr_delta (&addr_delta);
727
728 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
729 We cannot use special opcodes here, since we want the end_sequence
730 to emit the matrix entry. */
731 if (line_delta == INT_MAX)
732 {
733 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
734 len = 1;
735 else
736 len = 1 + sizeof_leb128 (addr_delta, 0);
737 return len + 3;
738 }
739
740 /* Bias the line delta by the base. */
741 tmp = line_delta - DWARF2_LINE_BASE;
742
743 /* If the line increment is out of range of a special opcode, we
744 must encode it with DW_LNS_advance_line. */
745 if (tmp >= DWARF2_LINE_RANGE)
746 {
747 len = 1 + sizeof_leb128 (line_delta, 1);
748 line_delta = 0;
749 tmp = 0 - DWARF2_LINE_BASE;
750 }
751
752 /* Bias the opcode by the special opcode base. */
753 tmp += DWARF2_LINE_OPCODE_BASE;
754
755 /* Avoid overflow when addr_delta is large. */
756 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
757 {
758 /* Try using a special opcode. */
759 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
760 if (opcode <= 255)
761 return len + 1;
762
763 /* Try using DW_LNS_const_add_pc followed by special op. */
764 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
765 if (opcode <= 255)
766 return len + 2;
767 }
768
769 /* Otherwise use DW_LNS_advance_pc. */
770 len += 1 + sizeof_leb128 (addr_delta, 0);
771
772 /* DW_LNS_copy or special opcode. */
773 len += 1;
774
775 return len;
776 }
777
778 static void
779 emit_inc_line_addr (line_delta, addr_delta, p, len)
780 int line_delta;
781 addressT addr_delta;
782 char *p;
783 int len;
784 {
785 unsigned int tmp, opcode;
786 int need_copy = 0;
787 char *end = p + len;
788
789 /* Scale the address delta by the minimum instruction length. */
790 scale_addr_delta (&addr_delta);
791
792 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
793 We cannot use special opcodes here, since we want the end_sequence
794 to emit the matrix entry. */
795 if (line_delta == INT_MAX)
796 {
797 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
798 *p++ = DW_LNS_const_add_pc;
799 else
800 {
801 *p++ = DW_LNS_advance_pc;
802 p += output_leb128 (p, addr_delta, 0);
803 }
804
805 *p++ = DW_LNS_extended_op;
806 *p++ = 1;
807 *p++ = DW_LNE_end_sequence;
808 goto done;
809 }
810
811 /* Bias the line delta by the base. */
812 tmp = line_delta - DWARF2_LINE_BASE;
813
814 /* If the line increment is out of range of a special opcode, we
815 must encode it with DW_LNS_advance_line. */
816 if (tmp >= DWARF2_LINE_RANGE)
817 {
818 *p++ = DW_LNS_advance_line;
819 p += output_leb128 (p, line_delta, 1);
820
821 /* Prettier, I think, to use DW_LNS_copy instead of a
822 "line +0, addr +0" special opcode. */
823 if (addr_delta == 0)
824 {
825 *p++ = DW_LNS_copy;
826 goto done;
827 }
828
829 line_delta = 0;
830 tmp = 0 - DWARF2_LINE_BASE;
831 need_copy = 1;
832 }
833
834 /* Bias the opcode by the special opcode base. */
835 tmp += DWARF2_LINE_OPCODE_BASE;
836
837 /* Avoid overflow when addr_delta is large. */
838 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
839 {
840 /* Try using a special opcode. */
841 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
842 if (opcode <= 255)
843 {
844 *p++ = opcode;
845 goto done;
846 }
847
848 /* Try using DW_LNS_const_add_pc followed by special op. */
849 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
850 if (opcode <= 255)
851 {
852 *p++ = DW_LNS_const_add_pc;
853 *p++ = opcode;
854 goto done;
855 }
856 }
857
858 /* Otherwise use DW_LNS_advance_pc. */
859 *p++ = DW_LNS_advance_pc;
860 p += output_leb128 (p, addr_delta, 0);
861
862 if (need_copy)
863 *p++ = DW_LNS_copy;
864 else
865 *p++ = tmp;
866
867 done:
868 assert (p == end);
869 }
870
871 /* Handy routine to combine calls to the above two routines. */
872
873 static void
874 out_inc_line_addr (line_delta, addr_delta)
875 int line_delta;
876 addressT addr_delta;
877 {
878 int len = size_inc_line_addr (line_delta, addr_delta);
879 emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
880 }
881
882 /* Generate a variant frag that we can use to relax address/line
883 increments between fragments of the target segment. */
884
885 static void
886 relax_inc_line_addr (line_delta, seg, to_frag, to_ofs, from_frag, from_ofs)
887 int line_delta;
888 segT seg;
889 fragS *to_frag, *from_frag;
890 addressT to_ofs, from_ofs;
891 {
892 symbolS *to_sym, *from_sym;
893 expressionS expr;
894 int max_chars;
895
896 to_sym = symbol_new (fake_label_name, seg, to_ofs, to_frag);
897 from_sym = symbol_new (fake_label_name, seg, from_ofs, from_frag);
898
899 expr.X_op = O_subtract;
900 expr.X_add_symbol = to_sym;
901 expr.X_op_symbol = from_sym;
902 expr.X_add_number = 0;
903
904 /* The maximum size of the frag is the line delta with a maximum
905 sized address delta. */
906 max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
907
908 frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
909 make_expr_symbol (&expr), line_delta, NULL);
910 }
911
912 /* The function estimates the size of a rs_dwarf2dbg variant frag
913 based on the current values of the symbols. It is called before
914 the relaxation loop. We set fr_subtype to the expected length. */
915
916 int
917 dwarf2dbg_estimate_size_before_relax (frag)
918 fragS *frag;
919 {
920 offsetT addr_delta;
921 int size;
922
923 addr_delta = resolve_symbol_value (frag->fr_symbol);
924 size = size_inc_line_addr (frag->fr_offset, addr_delta);
925
926 frag->fr_subtype = size;
927
928 return size;
929 }
930
931 /* This function relaxes a rs_dwarf2dbg variant frag based on the
932 current values of the symbols. fr_subtype is the current length
933 of the frag. This returns the change in frag length. */
934
935 int
936 dwarf2dbg_relax_frag (frag)
937 fragS *frag;
938 {
939 int old_size, new_size;
940
941 old_size = frag->fr_subtype;
942 new_size = dwarf2dbg_estimate_size_before_relax (frag);
943
944 return new_size - old_size;
945 }
946
947 /* This function converts a rs_dwarf2dbg variant frag into a normal
948 fill frag. This is called after all relaxation has been done.
949 fr_subtype will be the desired length of the frag. */
950
951 void
952 dwarf2dbg_convert_frag (frag)
953 fragS *frag;
954 {
955 offsetT addr_diff;
956
957 addr_diff = resolve_symbol_value (frag->fr_symbol);
958
959 /* fr_var carries the max_chars that we created the fragment with.
960 fr_subtype carries the current expected length. We must, of
961 course, have allocated enough memory earlier. */
962 assert (frag->fr_var >= (int) frag->fr_subtype);
963
964 emit_inc_line_addr (frag->fr_offset, addr_diff,
965 frag->fr_literal + frag->fr_fix, frag->fr_subtype);
966
967 frag->fr_fix += frag->fr_subtype;
968 frag->fr_type = rs_fill;
969 frag->fr_var = 0;
970 frag->fr_offset = 0;
971 }
972
973 /* Generate .debug_line content for the chain of line number entries
974 beginning at E, for segment SEG. */
975
976 static void
977 process_entries (seg, e)
978 segT seg;
979 struct line_entry *e;
980 {
981 unsigned filenum = 1;
982 unsigned line = 1;
983 unsigned column = 0;
984 unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_BEGIN_STMT : 0;
985 fragS *frag = NULL;
986 fragS *last_frag;
987 addressT frag_ofs = 0;
988 addressT last_frag_ofs;
989 struct line_entry *next;
990
991 while (e)
992 {
993 int changed = 0;
994
995 if (filenum != e->loc.filenum)
996 {
997 filenum = e->loc.filenum;
998 out_opcode (DW_LNS_set_file);
999 out_uleb128 (filenum);
1000 changed = 1;
1001 }
1002
1003 if (column != e->loc.column)
1004 {
1005 column = e->loc.column;
1006 out_opcode (DW_LNS_set_column);
1007 out_uleb128 (column);
1008 changed = 1;
1009 }
1010
1011 if ((e->loc.flags ^ flags) & DWARF2_FLAG_BEGIN_STMT)
1012 {
1013 flags = e->loc.flags;
1014 out_opcode (DW_LNS_negate_stmt);
1015 changed = 1;
1016 }
1017
1018 if (e->loc.flags & DWARF2_FLAG_BEGIN_BLOCK)
1019 {
1020 out_opcode (DW_LNS_set_basic_block);
1021 changed = 1;
1022 }
1023
1024 /* Don't try to optimize away redundant entries; gdb wants two
1025 entries for a function where the code starts on the same line as
1026 the {, and there's no way to identify that case here. Trust gcc
1027 to optimize appropriately. */
1028 if (1 /* line != e->loc.line || changed */)
1029 {
1030 int line_delta = e->loc.line - line;
1031 if (frag == NULL)
1032 {
1033 out_set_addr (seg, e->frag, e->frag_ofs);
1034 out_inc_line_addr (line_delta, 0);
1035 }
1036 else if (frag == e->frag)
1037 out_inc_line_addr (line_delta, e->frag_ofs - frag_ofs);
1038 else
1039 relax_inc_line_addr (line_delta, seg, e->frag, e->frag_ofs,
1040 frag, frag_ofs);
1041
1042 frag = e->frag;
1043 frag_ofs = e->frag_ofs;
1044 line = e->loc.line;
1045 }
1046 else if (frag == NULL)
1047 {
1048 out_set_addr (seg, e->frag, e->frag_ofs);
1049 frag = e->frag;
1050 frag_ofs = e->frag_ofs;
1051 }
1052
1053 next = e->next;
1054 free (e);
1055 e = next;
1056 }
1057
1058 /* Emit a DW_LNE_end_sequence for the end of the section. */
1059 last_frag = last_frag_for_seg (seg);
1060 last_frag_ofs = get_frag_fix (last_frag);
1061 if (frag == last_frag)
1062 out_inc_line_addr (INT_MAX, last_frag_ofs - frag_ofs);
1063 else
1064 relax_inc_line_addr (INT_MAX, seg, last_frag, last_frag_ofs,
1065 frag, frag_ofs);
1066 }
1067
1068 /* Emit the directory and file tables for .debug_line. */
1069
1070 static void
1071 out_file_list ()
1072 {
1073 size_t size;
1074 char *cp;
1075 unsigned int i;
1076
1077 /* Emit directory list. */
1078 for (i = 1; i < dirs_in_use; ++i)
1079 {
1080 size = strlen (dirs[i]) + 1;
1081 cp = frag_more (size);
1082 memcpy (cp, dirs[i], size);
1083 }
1084 /* Terminate it. */
1085 out_byte ('\0');
1086
1087 for (i = 1; i < files_in_use; ++i)
1088 {
1089 if (files[i].filename == NULL)
1090 {
1091 as_bad (_("unassigned file number %ld"), (long) i);
1092 continue;
1093 }
1094
1095 size = strlen (files[i].filename) + 1;
1096 cp = frag_more (size);
1097 memcpy (cp, files[i].filename, size);
1098
1099 out_uleb128 (files[i].dir); /* directory number */
1100 out_uleb128 (0); /* last modification timestamp */
1101 out_uleb128 (0); /* filesize */
1102 }
1103
1104 /* Terminate filename list. */
1105 out_byte (0);
1106 }
1107
1108 /* Emit the collected .debug_line data. */
1109
1110 static void
1111 out_debug_line (line_seg)
1112 segT line_seg;
1113 {
1114 expressionS expr;
1115 symbolS *line_start;
1116 symbolS *prologue_end;
1117 symbolS *line_end;
1118 struct line_seg *s;
1119 enum dwarf2_format d2f;
1120 int sizeof_offset;
1121
1122 subseg_set (line_seg, 0);
1123
1124 line_start = symbol_new_now ();
1125 prologue_end = symbol_make (fake_label_name);
1126 line_end = symbol_make (fake_label_name);
1127
1128 /* Total length of the information for this compilation unit. */
1129 expr.X_op = O_subtract;
1130 expr.X_add_symbol = line_end;
1131 expr.X_op_symbol = line_start;
1132
1133 d2f = DWARF2_FORMAT ();
1134 if (d2f == dwarf2_format_32bit)
1135 {
1136 expr.X_add_number = -4;
1137 emit_expr (&expr, 4);
1138 sizeof_offset = 4;
1139 }
1140 else if (d2f == dwarf2_format_64bit)
1141 {
1142 expr.X_add_number = -12;
1143 out_four (-1);
1144 emit_expr (&expr, 8);
1145 sizeof_offset = 8;
1146 }
1147 else if (d2f == dwarf2_format_64bit_irix)
1148 {
1149 expr.X_add_number = -8;
1150 emit_expr (&expr, 8);
1151 sizeof_offset = 8;
1152 }
1153 else
1154 {
1155 as_fatal (_("internal error: unknown dwarf2 format"));
1156 }
1157
1158 /* Version. */
1159 out_two (2);
1160
1161 /* Length of the prologue following this length. */
1162 expr.X_op = O_subtract;
1163 expr.X_add_symbol = prologue_end;
1164 expr.X_op_symbol = line_start;
1165 expr.X_add_number = - (4 + 2 + 4);
1166 emit_expr (&expr, sizeof_offset);
1167
1168 /* Parameters of the state machine. */
1169 out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
1170 out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
1171 out_byte (DWARF2_LINE_BASE);
1172 out_byte (DWARF2_LINE_RANGE);
1173 out_byte (DWARF2_LINE_OPCODE_BASE);
1174
1175 /* Standard opcode lengths. */
1176 out_byte (0); /* DW_LNS_copy */
1177 out_byte (1); /* DW_LNS_advance_pc */
1178 out_byte (1); /* DW_LNS_advance_line */
1179 out_byte (1); /* DW_LNS_set_file */
1180 out_byte (1); /* DW_LNS_set_column */
1181 out_byte (0); /* DW_LNS_negate_stmt */
1182 out_byte (0); /* DW_LNS_set_basic_block */
1183 out_byte (0); /* DW_LNS_const_add_pc */
1184 out_byte (1); /* DW_LNS_fixed_advance_pc */
1185
1186 out_file_list ();
1187
1188 set_symbol_value_now (prologue_end);
1189
1190 /* For each section, emit a statement program. */
1191 for (s = all_segs; s; s = s->next)
1192 process_entries (s->seg, s->head->head);
1193
1194 set_symbol_value_now (line_end);
1195 }
1196
1197 /* Emit data for .debug_aranges. */
1198
1199 static void
1200 out_debug_aranges (aranges_seg, info_seg)
1201 segT aranges_seg;
1202 segT info_seg;
1203 {
1204 unsigned int addr_size = sizeof_address;
1205 addressT size, skip;
1206 struct line_seg *s;
1207 expressionS expr;
1208 char *p;
1209
1210 size = 4 + 2 + 4 + 1 + 1;
1211
1212 skip = 2 * addr_size - (size & (2 * addr_size - 1));
1213 if (skip == 2 * addr_size)
1214 skip = 0;
1215 size += skip;
1216
1217 for (s = all_segs; s; s = s->next)
1218 size += 2 * addr_size;
1219
1220 size += 2 * addr_size;
1221
1222 subseg_set (aranges_seg, 0);
1223
1224 /* Length of the compilation unit. */
1225 out_four (size - 4);
1226
1227 /* Version. */
1228 out_two (2);
1229
1230 /* Offset to .debug_info. */
1231 /* ??? sizeof_offset */
1232 TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), 4);
1233
1234 /* Size of an address (offset portion). */
1235 out_byte (addr_size);
1236
1237 /* Size of a segment descriptor. */
1238 out_byte (0);
1239
1240 /* Align the header. */
1241 if (skip)
1242 frag_align (ffs (2 * addr_size) - 1, 0, 0);
1243
1244 for (s = all_segs; s; s = s->next)
1245 {
1246 fragS *frag;
1247 symbolS *beg, *end;
1248
1249 frag = first_frag_for_seg (s->seg);
1250 beg = symbol_new (fake_label_name, s->seg, 0, frag);
1251 s->text_start = beg;
1252
1253 frag = last_frag_for_seg (s->seg);
1254 end = symbol_new (fake_label_name, s->seg, get_frag_fix (frag), frag);
1255 s->text_end = end;
1256
1257 expr.X_op = O_symbol;
1258 expr.X_add_symbol = beg;
1259 expr.X_add_number = 0;
1260 emit_expr (&expr, addr_size);
1261
1262 expr.X_op = O_subtract;
1263 expr.X_add_symbol = end;
1264 expr.X_op_symbol = beg;
1265 expr.X_add_number = 0;
1266 emit_expr (&expr, addr_size);
1267 }
1268
1269 p = frag_more (2 * addr_size);
1270 md_number_to_chars (p, 0, addr_size);
1271 md_number_to_chars (p + addr_size, 0, addr_size);
1272 }
1273
1274 /* Emit data for .debug_abbrev. Note that this must be kept in
1275 sync with out_debug_info below. */
1276
1277 static void
1278 out_debug_abbrev (abbrev_seg)
1279 segT abbrev_seg;
1280 {
1281 subseg_set (abbrev_seg, 0);
1282
1283 out_uleb128 (1);
1284 out_uleb128 (DW_TAG_compile_unit);
1285 out_byte (DW_CHILDREN_no);
1286 out_abbrev (DW_AT_stmt_list, DW_FORM_data4);
1287 if (all_segs->next == NULL)
1288 {
1289 out_abbrev (DW_AT_low_pc, DW_FORM_addr);
1290 out_abbrev (DW_AT_high_pc, DW_FORM_addr);
1291 }
1292 out_abbrev (DW_AT_name, DW_FORM_string);
1293 out_abbrev (DW_AT_comp_dir, DW_FORM_string);
1294 out_abbrev (DW_AT_producer, DW_FORM_string);
1295 out_abbrev (DW_AT_language, DW_FORM_data2);
1296 out_abbrev (0, 0);
1297
1298 /* Terminate the abbreviations for this compilation unit. */
1299 out_byte (0);
1300 }
1301
1302 /* Emit a description of this compilation unit for .debug_info. */
1303
1304 static void
1305 out_debug_info (info_seg, abbrev_seg, line_seg)
1306 segT info_seg;
1307 segT abbrev_seg;
1308 segT line_seg;
1309 {
1310 char producer[128];
1311 char *comp_dir;
1312 expressionS expr;
1313 symbolS *info_start;
1314 symbolS *info_end;
1315 char *p;
1316 int len;
1317 enum dwarf2_format d2f;
1318 int sizeof_offset;
1319
1320 subseg_set (info_seg, 0);
1321
1322 info_start = symbol_new_now ();
1323 info_end = symbol_make (fake_label_name);
1324
1325 /* Compilation Unit length. */
1326 expr.X_op = O_subtract;
1327 expr.X_add_symbol = info_end;
1328 expr.X_op_symbol = info_start;
1329
1330 d2f = DWARF2_FORMAT ();
1331 if (d2f == dwarf2_format_32bit)
1332 {
1333 expr.X_add_number = -4;
1334 emit_expr (&expr, 4);
1335 sizeof_offset = 4;
1336 }
1337 else if (d2f == dwarf2_format_64bit)
1338 {
1339 expr.X_add_number = -12;
1340 out_four (-1);
1341 emit_expr (&expr, 8);
1342 sizeof_offset = 8;
1343 }
1344 else if (d2f == dwarf2_format_64bit_irix)
1345 {
1346 expr.X_add_number = -8;
1347 emit_expr (&expr, 8);
1348 sizeof_offset = 8;
1349 }
1350 else
1351 {
1352 as_fatal (_("internal error: unknown dwarf2 format"));
1353 }
1354
1355 /* DWARF version. */
1356 out_two (2);
1357
1358 /* .debug_abbrev offset */
1359 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
1360
1361 /* Target address size. */
1362 out_byte (sizeof_address);
1363
1364 /* DW_TAG_compile_unit DIE abbrev */
1365 out_uleb128 (1);
1366
1367 /* DW_AT_stmt_list */
1368 /* ??? sizeof_offset */
1369 TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg), 4);
1370
1371 /* These two attributes may only be emitted if all of the code is
1372 contiguous. Multiple sections are not that. */
1373 if (all_segs->next == NULL)
1374 {
1375 /* DW_AT_low_pc */
1376 expr.X_op = O_symbol;
1377 expr.X_add_symbol = all_segs->text_start;
1378 expr.X_add_number = 0;
1379 emit_expr (&expr, sizeof_address);
1380
1381 /* DW_AT_high_pc */
1382 expr.X_op = O_symbol;
1383 expr.X_add_symbol = all_segs->text_end;
1384 expr.X_add_number = 0;
1385 emit_expr (&expr, sizeof_address);
1386 }
1387
1388 /* DW_AT_name. We don't have the actual file name that was present
1389 on the command line, so assume files[1] is the main input file.
1390 We're not supposed to get called unless at least one line number
1391 entry was emitted, so this should always be defined. */
1392 if (!files || files_in_use < 1)
1393 abort ();
1394 if (files[1].dir)
1395 {
1396 len = strlen (dirs[files[1].dir]);
1397 p = frag_more (len + 1);
1398 memcpy (p, dirs[files[1].dir], len);
1399 p[len] = '/';
1400 }
1401 len = strlen (files[1].filename) + 1;
1402 p = frag_more (len);
1403 memcpy (p, files[1].filename, len);
1404
1405 /* DW_AT_comp_dir */
1406 comp_dir = getpwd ();
1407 len = strlen (comp_dir) + 1;
1408 p = frag_more (len);
1409 memcpy (p, comp_dir, len);
1410
1411 /* DW_AT_producer */
1412 sprintf (producer, "GNU AS %s", VERSION);
1413 len = strlen (producer) + 1;
1414 p = frag_more (len);
1415 memcpy (p, producer, len);
1416
1417 /* DW_AT_language. Yes, this is probably not really MIPS, but the
1418 dwarf2 draft has no standard code for assembler. */
1419 out_two (DW_LANG_Mips_Assembler);
1420
1421 set_symbol_value_now (info_end);
1422 }
1423
1424 void
1425 dwarf2_finish ()
1426 {
1427 segT line_seg;
1428 struct line_seg *s;
1429
1430 /* We don't need to do anything unless:
1431 - Some debug information was recorded via .file/.loc
1432 - or, we are generating DWARF2 information ourself (--gdwarf2)
1433 - or, there is a user-provided .debug_info section which could
1434 reference the file table in the .debug_line section we generate
1435 below. */
1436 if (all_segs == NULL
1437 && debug_type != DEBUG_DWARF2
1438 && bfd_get_section_by_name (stdoutput, ".debug_info") == NULL)
1439 return;
1440
1441 /* Calculate the size of an address for the target machine. */
1442 sizeof_address = DWARF2_ADDR_SIZE (stdoutput);
1443
1444 /* Create and switch to the line number section. */
1445 line_seg = subseg_new (".debug_line", 0);
1446 bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY);
1447
1448 /* For each subsection, chain the debug entries together. */
1449 for (s = all_segs; s; s = s->next)
1450 {
1451 struct line_subseg *ss = s->head;
1452 struct line_entry **ptail = ss->ptail;
1453
1454 while ((ss = ss->next) != NULL)
1455 {
1456 *ptail = ss->head;
1457 ptail = ss->ptail;
1458 }
1459 }
1460
1461 out_debug_line (line_seg);
1462
1463 /* If this is assembler generated line info, we need .debug_info
1464 and .debug_abbrev sections as well. */
1465 if (all_segs != NULL && debug_type == DEBUG_DWARF2)
1466 {
1467 segT abbrev_seg;
1468 segT info_seg;
1469 segT aranges_seg;
1470
1471 info_seg = subseg_new (".debug_info", 0);
1472 abbrev_seg = subseg_new (".debug_abbrev", 0);
1473 aranges_seg = subseg_new (".debug_aranges", 0);
1474
1475 bfd_set_section_flags (stdoutput, info_seg, SEC_READONLY);
1476 bfd_set_section_flags (stdoutput, abbrev_seg, SEC_READONLY);
1477 bfd_set_section_flags (stdoutput, aranges_seg, SEC_READONLY);
1478
1479 record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
1480
1481 out_debug_aranges (aranges_seg, info_seg);
1482 out_debug_abbrev (abbrev_seg);
1483 out_debug_info (info_seg, abbrev_seg, line_seg);
1484 }
1485 }
1486
1487 #else
1488 void
1489 dwarf2_finish ()
1490 {
1491 }
1492
1493 int
1494 dwarf2dbg_estimate_size_before_relax (frag)
1495 fragS *frag ATTRIBUTE_UNUSED;
1496 {
1497 as_fatal (_("dwarf2 is not supported for this object file format"));
1498 return 0;
1499 }
1500
1501 int
1502 dwarf2dbg_relax_frag (frag)
1503 fragS *frag ATTRIBUTE_UNUSED;
1504 {
1505 as_fatal (_("dwarf2 is not supported for this object file format"));
1506 return 0;
1507 }
1508
1509 void
1510 dwarf2dbg_convert_frag (frag)
1511 fragS *frag ATTRIBUTE_UNUSED;
1512 {
1513 as_fatal (_("dwarf2 is not supported for this object file format"));
1514 }
1515
1516 void
1517 dwarf2_emit_insn (size)
1518 int size ATTRIBUTE_UNUSED;
1519 {
1520 }
1521
1522 char *
1523 dwarf2_directive_file (dummy)
1524 int dummy ATTRIBUTE_UNUSED;
1525 {
1526 s_app_file (0);
1527 return NULL;
1528 }
1529
1530 void
1531 dwarf2_directive_loc (dummy)
1532 int dummy ATTRIBUTE_UNUSED;
1533 {
1534 as_fatal (_("dwarf2 is not supported for this object file format"));
1535 }
1536 #endif /* BFD_ASSEMBLER */