1 /* dwarf2dbg.c - DWARF2 debug support
2 Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
5 This file is part of GAS, the GNU Assembler.
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)
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.
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
22 /* Logical line numbers can be controlled by the compiler via the
23 following two directives:
26 .loc FILENO LINENO [COLUMN]
28 FILENO is the filenumber. */
36 #ifdef HAVE_SYS_PARAM_H
37 #include <sys/param.h>
40 #define INT_MAX (int) (((unsigned) (-1)) >> 1)
44 #include "dwarf2dbg.h"
47 # define DWARF2_FORMAT() dwarf2_format_32bit
50 #ifndef DWARF2_ADDR_SIZE
51 # define DWARF2_ADDR_SIZE(bfd) (bfd_arch_bits_per_address (bfd) / 8);
59 #include "elf/dwarf2.h"
61 /* Since we can't generate the prolog until the body is complete, we
62 use three different subsegments for .debug_line: one holding the
63 prolog, one for the directory and filename info, and one for the
64 body ("statement program"). */
69 /* First special line opcde - leave room for the standard opcodes.
70 Note: If you want to change this, you'll have to update the
71 "standard_opcode_lengths" table that is emitted below in
73 #define DWARF2_LINE_OPCODE_BASE 10
75 #ifndef DWARF2_LINE_BASE
76 /* Minimum line offset in a special line info. opcode. This value
77 was chosen to give a reasonable range of values. */
78 # define DWARF2_LINE_BASE -5
81 /* Range of line offsets in a special line info. opcode. */
82 #ifndef DWARF2_LINE_RANGE
83 # define DWARF2_LINE_RANGE 14
86 #ifndef DWARF2_LINE_MIN_INSN_LENGTH
87 /* Define the architecture-dependent minimum instruction length (in
88 bytes). This value should be rather too small than too big. */
89 # define DWARF2_LINE_MIN_INSN_LENGTH 1
92 /* Flag that indicates the initial value of the is_stmt_start flag.
93 In the present implementation, we do not mark any lines as
94 the beginning of a source statement, because that information
95 is not made available by the GCC front-end. */
96 #define DWARF2_LINE_DEFAULT_IS_STMT 1
98 /* Given a special op, return the line skip amount. */
99 #define SPECIAL_LINE(op) \
100 (((op) - DWARF2_LINE_OPCODE_BASE)%DWARF2_LINE_RANGE + DWARF2_LINE_BASE)
102 /* Given a special op, return the address skip amount (in units of
103 DWARF2_LINE_MIN_INSN_LENGTH. */
104 #define SPECIAL_ADDR(op) (((op) - DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)
106 /* The maximum address skip amount that can be encoded with a special op. */
107 #define MAX_SPECIAL_ADDR_DELTA SPECIAL_ADDR(255)
110 struct line_entry *next;
113 struct dwarf2_line_info loc;
117 struct line_subseg *next;
119 struct line_entry *head;
120 struct line_entry **ptail;
124 struct line_seg *next;
126 struct line_subseg *head;
131 /* Collects data for all line table entries during assembly. */
132 static struct line_seg *all_segs;
139 /* Table of files used by .debug_line. */
140 static struct file_entry *files;
141 static unsigned int files_in_use;
142 static unsigned int files_allocated;
144 /* TRUE when we've seen a .loc directive recently. Used to avoid
145 doing work when there's nothing to do. */
146 static bfd_boolean loc_directive_seen;
148 /* Current location as indicated by the most recent .loc directive. */
149 static struct dwarf2_line_info current;
151 /* Fake label name. */
152 static char const fake_label_name[] = ".L0\001";
154 /* The size of an address on the target. */
155 static unsigned int sizeof_address;
157 static struct line_subseg *get_line_subseg PARAMS ((segT, subsegT));
158 static unsigned int get_filenum PARAMS ((const char *));
159 static struct frag *first_frag_for_seg PARAMS ((segT));
160 static struct frag *last_frag_for_seg PARAMS ((segT));
161 static void out_byte PARAMS ((int));
162 static void out_opcode PARAMS ((int));
163 static void out_two PARAMS ((int));
164 static void out_four PARAMS ((int));
165 static void out_abbrev PARAMS ((int, int));
166 static void out_uleb128 PARAMS ((addressT));
167 static symbolS *symbol_new_now PARAMS ((void));
168 static void set_symbol_value_now PARAMS ((symbolS *));
169 static offsetT get_frag_fix PARAMS ((fragS *));
170 static void out_set_addr PARAMS ((segT, fragS *, addressT));
171 static int size_inc_line_addr PARAMS ((int, addressT));
172 static void emit_inc_line_addr PARAMS ((int, addressT, char *, int));
173 static void out_inc_line_addr PARAMS ((int, addressT));
174 static void relax_inc_line_addr PARAMS ((int, segT, fragS *, addressT,
176 static void process_entries PARAMS ((segT, struct line_entry *));
177 static void out_file_list PARAMS ((void));
178 static void out_debug_line PARAMS ((segT));
179 static void out_debug_aranges PARAMS ((segT, segT));
180 static void out_debug_abbrev PARAMS ((segT));
181 static void out_debug_info PARAMS ((segT, segT, segT));
183 /* Find or create an entry for SEG+SUBSEG in ALL_SEGS. */
185 static struct line_subseg *
186 get_line_subseg (seg, subseg)
190 static segT last_seg;
191 static subsegT last_subseg;
192 static struct line_subseg *last_line_subseg;
195 struct line_subseg **pss, *ss;
197 if (seg == last_seg && subseg == last_subseg)
198 return last_line_subseg;
200 for (s = all_segs; s; s = s->next)
204 s = (struct line_seg *) xmalloc (sizeof (*s));
211 for (pss = &s->head; (ss = *pss) != NULL ; pss = &ss->next)
213 if (ss->subseg == subseg)
215 if (ss->subseg > subseg)
219 ss = (struct line_subseg *) xmalloc (sizeof (*ss));
223 ss->ptail = &ss->head;
228 last_subseg = subseg;
229 last_line_subseg = ss;
234 /* Record an entry for LOC ocurring at OFS within the current fragment. */
237 dwarf2_gen_line_info (ofs, loc)
239 struct dwarf2_line_info *loc;
241 struct line_subseg *ss;
242 struct line_entry *e;
243 static unsigned int line = -1;
244 static unsigned int filenum = -1;
246 /* Early out for as-yet incomplete location information. */
247 if (loc->filenum == 0 || loc->line == 0)
250 /* Don't emit sequences of line symbols for the same line when the
251 symbols apply to assembler code. It is necessary to emit
252 duplicate line symbols when a compiler asks for them, because GDB
253 uses them to determine the end of the prologue. */
254 if (debug_type == DEBUG_DWARF2
255 && line == loc->line && filenum == loc->filenum)
259 filenum = loc->filenum;
261 e = (struct line_entry *) xmalloc (sizeof (*e));
267 ss = get_line_subseg (now_seg, now_subseg);
269 ss->ptail = &e->next;
274 struct dwarf2_line_info *line;
276 if (debug_type == DEBUG_DWARF2)
279 as_where (&filename, &line->line);
280 line->filenum = get_filenum (filename);
282 line->flags = DWARF2_FLAG_BEGIN_STMT;
288 /* Called for each machine instruction, or relatively atomic group of
289 machine instructions (ie built-in macro). The instruction or group
290 is SIZE bytes in length. If dwarf2 line number generation is called
291 for, emit a line statement appropriately. */
294 dwarf2_emit_insn (size)
297 struct dwarf2_line_info loc;
299 if (loc_directive_seen)
301 /* Use the last location established by a .loc directive, not
302 the value returned by dwarf2_where(). That calls as_where()
303 which will return either the logical input file name (foo.c)
304 or the physical input file name (foo.s) and not the file name
305 specified in the most recent .loc directive (eg foo.h). */
308 /* Unless we generate DWARF2 debugging information for each
309 assembler line, we only emit one line symbol for one LOC. */
310 if (debug_type != DEBUG_DWARF2)
311 loc_directive_seen = FALSE;
313 else if (debug_type != DEBUG_DWARF2)
316 dwarf2_where (& loc);
318 dwarf2_gen_line_info (frag_now_fix () - size, &loc);
321 /* Get a .debug_line file number for FILENAME. */
324 get_filenum (filename)
325 const char *filename;
327 static unsigned int last_used;
331 if (strcmp (filename, files[last_used].filename) == 0)
334 for (i = 1; i < files_in_use; ++i)
335 if (strcmp (filename, files[i].filename) == 0)
338 if (i >= files_allocated)
340 unsigned int old = files_allocated;
342 files_allocated = i + 32;
343 files = (struct file_entry *)
344 xrealloc (files, (i + 32) * sizeof (struct file_entry));
346 memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
349 files[i].filename = xstrdup (filename);
351 files_in_use = i + 1;
357 /* Handle two forms of .file directive:
358 - Pass .file "source.c" to s_app_file
359 - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
361 If an entry is added to the file table, return a pointer to the filename. */
364 dwarf2_directive_file (dummy)
365 int dummy ATTRIBUTE_UNUSED;
371 /* Continue to accept a bare string and pass it off. */
373 if (*input_line_pointer == '"')
379 num = get_absolute_expression ();
380 filename = demand_copy_C_string (&filename_len);
381 demand_empty_rest_of_line ();
385 as_bad (_("file number less than one"));
389 if (num < (int) files_in_use && files[num].filename != 0)
391 as_bad (_("file number %ld already allocated"), (long) num);
395 if (num >= (int) files_allocated)
397 unsigned int old = files_allocated;
399 files_allocated = num + 16;
400 files = (struct file_entry *)
401 xrealloc (files, (num + 16) * sizeof (struct file_entry));
403 /* Zero the new memory. */
404 memset (files + old, 0, (num + 16 - old) * sizeof (struct file_entry));
407 files[num].filename = filename;
409 files_in_use = num + 1;
415 dwarf2_directive_loc (dummy)
416 int dummy ATTRIBUTE_UNUSED;
418 offsetT filenum, line, column;
420 filenum = get_absolute_expression ();
422 line = get_absolute_expression ();
424 column = get_absolute_expression ();
425 demand_empty_rest_of_line ();
429 as_bad (_("file number less than one"));
432 if (filenum >= (int) files_in_use || files[filenum].filename == 0)
434 as_bad (_("unassigned file number %ld"), (long) filenum);
438 current.filenum = filenum;
440 current.column = column;
441 current.flags = DWARF2_FLAG_BEGIN_STMT;
443 loc_directive_seen = TRUE;
448 listing_source_file (files[filenum].filename);
449 listing_source_line (line);
455 first_frag_for_seg (seg)
458 frchainS *f, *first = NULL;
460 for (f = frchain_root; f; f = f->frch_next)
461 if (f->frch_seg == seg
462 && (! first || first->frch_subseg > f->frch_subseg))
465 return first ? first->frch_root : NULL;
469 last_frag_for_seg (seg)
472 frchainS *f, *last = NULL;
474 for (f = frchain_root; f; f = f->frch_next)
475 if (f->frch_seg == seg
476 && (! last || last->frch_subseg < f->frch_subseg))
479 return last ? last->frch_last : NULL;
482 /* Emit a single byte into the current segment. */
488 FRAG_APPEND_1_CHAR (byte);
491 /* Emit a statement program opcode into the current segment. */
500 /* Emit a two-byte word into the current segment. */
506 md_number_to_chars (frag_more (2), data, 2);
509 /* Emit a four byte word into the current segment. */
515 md_number_to_chars (frag_more (4), data, 4);
518 /* Emit an unsigned "little-endian base 128" number. */
524 output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
527 /* Emit a tuple for .debug_abbrev. */
530 out_abbrev (name, form)
537 /* Create a new fake symbol whose value is the current position. */
542 return symbol_new (fake_label_name, now_seg, frag_now_fix (), frag_now);
545 /* Set the value of SYM to the current position in the current segment. */
548 set_symbol_value_now (sym)
551 S_SET_SEGMENT (sym, now_seg);
552 S_SET_VALUE (sym, frag_now_fix ());
553 symbol_set_frag (sym, frag_now);
556 /* Get the size of a fragment. */
567 /* If a fragment is the last in the chain, special measures must be
568 taken to find its size before relaxation, since it may be pending
569 on some subsegment chain. */
570 for (fr = frchain_root; fr; fr = fr->frch_next)
571 if (fr->frch_last == frag)
573 long align_mask = -1 << get_recorded_alignment (fr->frch_seg);
574 return (((char *) obstack_next_free (&fr->frch_obstack)
575 - frag->fr_literal) + ~align_mask) & align_mask;
581 /* Set an absolute address (may result in a relocation entry). */
584 out_set_addr (seg, frag, ofs)
592 sym = symbol_new (fake_label_name, seg, ofs, frag);
594 out_opcode (DW_LNS_extended_op);
595 out_uleb128 (sizeof_address + 1);
597 out_opcode (DW_LNE_set_address);
598 expr.X_op = O_symbol;
599 expr.X_add_symbol = sym;
600 expr.X_add_number = 0;
601 emit_expr (&expr, sizeof_address);
604 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
605 static void scale_addr_delta PARAMS ((addressT *));
608 scale_addr_delta (addr_delta)
609 addressT *addr_delta;
611 static int printed_this = 0;
612 if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0)
615 as_bad("unaligned opcodes detected in executable segment");
618 *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
621 #define scale_addr_delta(A)
624 /* Encode a pair of line and address skips as efficiently as possible.
625 Note that the line skip is signed, whereas the address skip is unsigned.
627 The following two routines *must* be kept in sync. This is
628 enforced by making emit_inc_line_addr abort if we do not emit
629 exactly the expected number of bytes. */
632 size_inc_line_addr (line_delta, addr_delta)
636 unsigned int tmp, opcode;
639 /* Scale the address delta by the minimum instruction length. */
640 scale_addr_delta (&addr_delta);
642 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
643 We cannot use special opcodes here, since we want the end_sequence
644 to emit the matrix entry. */
645 if (line_delta == INT_MAX)
647 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
650 len = 1 + sizeof_leb128 (addr_delta, 0);
654 /* Bias the line delta by the base. */
655 tmp = line_delta - DWARF2_LINE_BASE;
657 /* If the line increment is out of range of a special opcode, we
658 must encode it with DW_LNS_advance_line. */
659 if (tmp >= DWARF2_LINE_RANGE)
661 len = 1 + sizeof_leb128 (line_delta, 1);
663 tmp = 0 - DWARF2_LINE_BASE;
666 /* Bias the opcode by the special opcode base. */
667 tmp += DWARF2_LINE_OPCODE_BASE;
669 /* Avoid overflow when addr_delta is large. */
670 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
672 /* Try using a special opcode. */
673 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
677 /* Try using DW_LNS_const_add_pc followed by special op. */
678 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
683 /* Otherwise use DW_LNS_advance_pc. */
684 len += 1 + sizeof_leb128 (addr_delta, 0);
686 /* DW_LNS_copy or special opcode. */
693 emit_inc_line_addr (line_delta, addr_delta, p, len)
699 unsigned int tmp, opcode;
703 /* Scale the address delta by the minimum instruction length. */
704 scale_addr_delta (&addr_delta);
706 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
707 We cannot use special opcodes here, since we want the end_sequence
708 to emit the matrix entry. */
709 if (line_delta == INT_MAX)
711 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
712 *p++ = DW_LNS_const_add_pc;
715 *p++ = DW_LNS_advance_pc;
716 p += output_leb128 (p, addr_delta, 0);
719 *p++ = DW_LNS_extended_op;
721 *p++ = DW_LNE_end_sequence;
725 /* Bias the line delta by the base. */
726 tmp = line_delta - DWARF2_LINE_BASE;
728 /* If the line increment is out of range of a special opcode, we
729 must encode it with DW_LNS_advance_line. */
730 if (tmp >= DWARF2_LINE_RANGE)
732 *p++ = DW_LNS_advance_line;
733 p += output_leb128 (p, line_delta, 1);
735 /* Prettier, I think, to use DW_LNS_copy instead of a
736 "line +0, addr +0" special opcode. */
744 tmp = 0 - DWARF2_LINE_BASE;
748 /* Bias the opcode by the special opcode base. */
749 tmp += DWARF2_LINE_OPCODE_BASE;
751 /* Avoid overflow when addr_delta is large. */
752 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
754 /* Try using a special opcode. */
755 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
762 /* Try using DW_LNS_const_add_pc followed by special op. */
763 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
766 *p++ = DW_LNS_const_add_pc;
772 /* Otherwise use DW_LNS_advance_pc. */
773 *p++ = DW_LNS_advance_pc;
774 p += output_leb128 (p, addr_delta, 0);
785 /* Handy routine to combine calls to the above two routines. */
788 out_inc_line_addr (line_delta, addr_delta)
792 int len = size_inc_line_addr (line_delta, addr_delta);
793 emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
796 /* Generate a variant frag that we can use to relax address/line
797 increments between fragments of the target segment. */
800 relax_inc_line_addr (line_delta, seg, to_frag, to_ofs, from_frag, from_ofs)
803 fragS *to_frag, *from_frag;
804 addressT to_ofs, from_ofs;
806 symbolS *to_sym, *from_sym;
810 to_sym = symbol_new (fake_label_name, seg, to_ofs, to_frag);
811 from_sym = symbol_new (fake_label_name, seg, from_ofs, from_frag);
813 expr.X_op = O_subtract;
814 expr.X_add_symbol = to_sym;
815 expr.X_op_symbol = from_sym;
816 expr.X_add_number = 0;
818 /* The maximum size of the frag is the line delta with a maximum
819 sized address delta. */
820 max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
822 frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
823 make_expr_symbol (&expr), line_delta, NULL);
826 /* The function estimates the size of a rs_dwarf2dbg variant frag
827 based on the current values of the symbols. It is called before
828 the relaxation loop. We set fr_subtype to the expected length. */
831 dwarf2dbg_estimate_size_before_relax (frag)
837 addr_delta = resolve_symbol_value (frag->fr_symbol);
838 size = size_inc_line_addr (frag->fr_offset, addr_delta);
840 frag->fr_subtype = size;
845 /* This function relaxes a rs_dwarf2dbg variant frag based on the
846 current values of the symbols. fr_subtype is the current length
847 of the frag. This returns the change in frag length. */
850 dwarf2dbg_relax_frag (frag)
853 int old_size, new_size;
855 old_size = frag->fr_subtype;
856 new_size = dwarf2dbg_estimate_size_before_relax (frag);
858 return new_size - old_size;
861 /* This function converts a rs_dwarf2dbg variant frag into a normal
862 fill frag. This is called after all relaxation has been done.
863 fr_subtype will be the desired length of the frag. */
866 dwarf2dbg_convert_frag (frag)
871 addr_diff = resolve_symbol_value (frag->fr_symbol);
873 /* fr_var carries the max_chars that we created the fragment with.
874 fr_subtype carries the current expected length. We must, of
875 course, have allocated enough memory earlier. */
876 assert (frag->fr_var >= (int) frag->fr_subtype);
878 emit_inc_line_addr (frag->fr_offset, addr_diff,
879 frag->fr_literal + frag->fr_fix, frag->fr_subtype);
881 frag->fr_fix += frag->fr_subtype;
882 frag->fr_type = rs_fill;
887 /* Generate .debug_line content for the chain of line number entries
888 beginning at E, for segment SEG. */
891 process_entries (seg, e)
893 struct line_entry *e;
895 unsigned filenum = 1;
898 unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_BEGIN_STMT : 0;
901 addressT frag_ofs = 0;
902 addressT last_frag_ofs;
903 struct line_entry *next;
909 if (filenum != e->loc.filenum)
911 filenum = e->loc.filenum;
912 out_opcode (DW_LNS_set_file);
913 out_uleb128 (filenum);
917 if (column != e->loc.column)
919 column = e->loc.column;
920 out_opcode (DW_LNS_set_column);
921 out_uleb128 (column);
925 if ((e->loc.flags ^ flags) & DWARF2_FLAG_BEGIN_STMT)
927 flags = e->loc.flags;
928 out_opcode (DW_LNS_negate_stmt);
932 if (e->loc.flags & DWARF2_FLAG_BEGIN_BLOCK)
934 out_opcode (DW_LNS_set_basic_block);
938 /* Don't try to optimize away redundant entries; gdb wants two
939 entries for a function where the code starts on the same line as
940 the {, and there's no way to identify that case here. Trust gcc
941 to optimize appropriately. */
942 if (1 /* line != e->loc.line || changed */)
944 int line_delta = e->loc.line - line;
947 out_set_addr (seg, e->frag, e->frag_ofs);
948 out_inc_line_addr (line_delta, 0);
950 else if (frag == e->frag)
951 out_inc_line_addr (line_delta, e->frag_ofs - frag_ofs);
953 relax_inc_line_addr (line_delta, seg, e->frag, e->frag_ofs,
957 frag_ofs = e->frag_ofs;
960 else if (frag == NULL)
962 out_set_addr (seg, e->frag, e->frag_ofs);
964 frag_ofs = e->frag_ofs;
972 /* Emit a DW_LNE_end_sequence for the end of the section. */
973 last_frag = last_frag_for_seg (seg);
974 last_frag_ofs = get_frag_fix (last_frag);
975 if (frag == last_frag)
976 out_inc_line_addr (INT_MAX, last_frag_ofs - frag_ofs);
978 relax_inc_line_addr (INT_MAX, seg, last_frag, last_frag_ofs,
982 /* Emit the directory and file tables for .debug_line. */
991 /* Terminate directory list. */
994 for (i = 1; i < files_in_use; ++i)
996 if (files[i].filename == NULL)
998 as_bad (_("unassigned file number %ld"), (long) i);
1002 size = strlen (files[i].filename) + 1;
1003 cp = frag_more (size);
1004 memcpy (cp, files[i].filename, size);
1006 out_uleb128 (files[i].dir); /* directory number */
1007 out_uleb128 (0); /* last modification timestamp */
1008 out_uleb128 (0); /* filesize */
1011 /* Terminate filename list. */
1015 /* Emit the collected .debug_line data. */
1018 out_debug_line (line_seg)
1022 symbolS *line_start;
1023 symbolS *prologue_end;
1026 enum dwarf2_format d2f;
1029 subseg_set (line_seg, 0);
1031 line_start = symbol_new_now ();
1032 prologue_end = symbol_make (fake_label_name);
1033 line_end = symbol_make (fake_label_name);
1035 /* Total length of the information for this compilation unit. */
1036 expr.X_op = O_subtract;
1037 expr.X_add_symbol = line_end;
1038 expr.X_op_symbol = line_start;
1040 d2f = DWARF2_FORMAT ();
1041 if (d2f == dwarf2_format_32bit)
1043 expr.X_add_number = -4;
1044 emit_expr (&expr, 4);
1047 else if (d2f == dwarf2_format_64bit)
1049 expr.X_add_number = -12;
1051 emit_expr (&expr, 8);
1054 else if (d2f == dwarf2_format_64bit_irix)
1056 expr.X_add_number = -8;
1057 emit_expr (&expr, 8);
1062 as_fatal (_("internal error: unknown dwarf2 format"));
1068 /* Length of the prologue following this length. */
1069 expr.X_op = O_subtract;
1070 expr.X_add_symbol = prologue_end;
1071 expr.X_op_symbol = line_start;
1072 expr.X_add_number = - (4 + 2 + 4);
1073 emit_expr (&expr, sizeof_offset);
1075 /* Parameters of the state machine. */
1076 out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
1077 out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
1078 out_byte (DWARF2_LINE_BASE);
1079 out_byte (DWARF2_LINE_RANGE);
1080 out_byte (DWARF2_LINE_OPCODE_BASE);
1082 /* Standard opcode lengths. */
1083 out_byte (0); /* DW_LNS_copy */
1084 out_byte (1); /* DW_LNS_advance_pc */
1085 out_byte (1); /* DW_LNS_advance_line */
1086 out_byte (1); /* DW_LNS_set_file */
1087 out_byte (1); /* DW_LNS_set_column */
1088 out_byte (0); /* DW_LNS_negate_stmt */
1089 out_byte (0); /* DW_LNS_set_basic_block */
1090 out_byte (0); /* DW_LNS_const_add_pc */
1091 out_byte (1); /* DW_LNS_fixed_advance_pc */
1095 set_symbol_value_now (prologue_end);
1097 /* For each section, emit a statement program. */
1098 for (s = all_segs; s; s = s->next)
1099 process_entries (s->seg, s->head->head);
1101 set_symbol_value_now (line_end);
1104 /* Emit data for .debug_aranges. */
1107 out_debug_aranges (aranges_seg, info_seg)
1111 unsigned int addr_size = sizeof_address;
1112 addressT size, skip;
1117 size = 4 + 2 + 4 + 1 + 1;
1119 skip = 2 * addr_size - (size & (2 * addr_size - 1));
1120 if (skip == 2 * addr_size)
1124 for (s = all_segs; s; s = s->next)
1125 size += 2 * addr_size;
1127 size += 2 * addr_size;
1129 subseg_set (aranges_seg, 0);
1131 /* Length of the compilation unit. */
1132 out_four (size - 4);
1137 /* Offset to .debug_info. */
1138 expr.X_op = O_symbol;
1139 expr.X_add_symbol = section_symbol (info_seg);
1140 expr.X_add_number = 0;
1141 emit_expr (&expr, 4);
1143 /* Size of an address (offset portion). */
1144 out_byte (addr_size);
1146 /* Size of a segment descriptor. */
1149 /* Align the header. */
1151 frag_align (ffs (2 * addr_size) - 1, 0, 0);
1153 for (s = all_segs; s; s = s->next)
1158 frag = first_frag_for_seg (s->seg);
1159 beg = symbol_new (fake_label_name, s->seg, 0, frag);
1160 s->text_start = beg;
1162 frag = last_frag_for_seg (s->seg);
1163 end = symbol_new (fake_label_name, s->seg, get_frag_fix (frag), frag);
1166 expr.X_op = O_symbol;
1167 expr.X_add_symbol = beg;
1168 expr.X_add_number = 0;
1169 emit_expr (&expr, addr_size);
1171 expr.X_op = O_subtract;
1172 expr.X_add_symbol = end;
1173 expr.X_op_symbol = beg;
1174 expr.X_add_number = 0;
1175 emit_expr (&expr, addr_size);
1178 p = frag_more (2 * addr_size);
1179 md_number_to_chars (p, 0, addr_size);
1180 md_number_to_chars (p + addr_size, 0, addr_size);
1183 /* Emit data for .debug_abbrev. Note that this must be kept in
1184 sync with out_debug_info below. */
1187 out_debug_abbrev (abbrev_seg)
1190 subseg_set (abbrev_seg, 0);
1193 out_uleb128 (DW_TAG_compile_unit);
1194 out_byte (DW_CHILDREN_no);
1195 out_abbrev (DW_AT_stmt_list, DW_FORM_data4);
1196 if (all_segs->next == NULL)
1198 out_abbrev (DW_AT_low_pc, DW_FORM_addr);
1199 out_abbrev (DW_AT_high_pc, DW_FORM_addr);
1201 out_abbrev (DW_AT_name, DW_FORM_string);
1202 out_abbrev (DW_AT_comp_dir, DW_FORM_string);
1203 out_abbrev (DW_AT_producer, DW_FORM_string);
1204 out_abbrev (DW_AT_language, DW_FORM_data2);
1207 /* Terminate the abbreviations for this compilation unit. */
1211 /* Emit a description of this compilation unit for .debug_info. */
1214 out_debug_info (info_seg, abbrev_seg, line_seg)
1222 symbolS *info_start;
1226 enum dwarf2_format d2f;
1229 subseg_set (info_seg, 0);
1231 info_start = symbol_new_now ();
1232 info_end = symbol_make (fake_label_name);
1234 /* Compilation Unit length. */
1235 expr.X_op = O_subtract;
1236 expr.X_add_symbol = info_end;
1237 expr.X_op_symbol = info_start;
1239 d2f = DWARF2_FORMAT ();
1240 if (d2f == dwarf2_format_32bit)
1242 expr.X_add_number = -4;
1243 emit_expr (&expr, 4);
1246 else if (d2f == dwarf2_format_64bit)
1248 expr.X_add_number = -12;
1250 emit_expr (&expr, 8);
1253 else if (d2f == dwarf2_format_64bit_irix)
1255 expr.X_add_number = -8;
1256 emit_expr (&expr, 8);
1261 as_fatal (_("internal error: unknown dwarf2 format"));
1264 /* DWARF version. */
1267 /* .debug_abbrev offset */
1268 expr.X_op = O_symbol;
1269 expr.X_add_symbol = section_symbol (abbrev_seg);
1270 expr.X_add_number = 0;
1271 emit_expr (&expr, sizeof_offset);
1273 /* Target address size. */
1274 out_byte (sizeof_address);
1276 /* DW_TAG_compile_unit DIE abbrev */
1279 /* DW_AT_stmt_list */
1280 expr.X_op = O_symbol;
1281 expr.X_add_symbol = section_symbol (line_seg);
1282 expr.X_add_number = 0;
1283 emit_expr (&expr, 4);
1285 /* These two attributes may only be emitted if all of the code is
1286 contiguous. Multiple sections are not that. */
1287 if (all_segs->next == NULL)
1290 expr.X_op = O_symbol;
1291 expr.X_add_symbol = all_segs->text_start;
1292 expr.X_add_number = 0;
1293 emit_expr (&expr, sizeof_address);
1296 expr.X_op = O_symbol;
1297 expr.X_add_symbol = all_segs->text_end;
1298 expr.X_add_number = 0;
1299 emit_expr (&expr, sizeof_address);
1302 /* DW_AT_name. We don't have the actual file name that was present
1303 on the command line, so assume files[1] is the main input file.
1304 We're not supposed to get called unless at least one line number
1305 entry was emitted, so this should always be defined. */
1306 if (!files || files_in_use < 1)
1308 len = strlen (files[1].filename) + 1;
1309 p = frag_more (len);
1310 memcpy (p, files[1].filename, len);
1312 /* DW_AT_comp_dir */
1313 comp_dir = getpwd ();
1314 len = strlen (comp_dir) + 1;
1315 p = frag_more (len);
1316 memcpy (p, comp_dir, len);
1318 /* DW_AT_producer */
1319 sprintf (producer, "GNU AS %s", VERSION);
1320 len = strlen (producer) + 1;
1321 p = frag_more (len);
1322 memcpy (p, producer, len);
1324 /* DW_AT_language. Yes, this is probably not really MIPS, but the
1325 dwarf2 draft has no standard code for assembler. */
1326 out_two (DW_LANG_Mips_Assembler);
1328 set_symbol_value_now (info_end);
1337 /* We don't need to do anything unless:
1338 - Some debug information was recorded via .file/.loc
1339 - or, we are generating DWARF2 information ourself (--gdwarf2)
1340 - or, there is a user-provided .debug_info section which could
1341 reference the file table in the .debug_line section we generate
1343 if (all_segs == NULL
1344 && debug_type != DEBUG_DWARF2
1345 && bfd_get_section_by_name (stdoutput, ".debug_info") == NULL)
1348 /* Calculate the size of an address for the target machine. */
1349 sizeof_address = DWARF2_ADDR_SIZE (stdoutput);
1351 /* Create and switch to the line number section. */
1352 line_seg = subseg_new (".debug_line", 0);
1353 bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY);
1355 /* For each subsection, chain the debug entries together. */
1356 for (s = all_segs; s; s = s->next)
1358 struct line_subseg *ss = s->head;
1359 struct line_entry **ptail = ss->ptail;
1361 while ((ss = ss->next) != NULL)
1368 out_debug_line (line_seg);
1370 /* If this is assembler generated line info, we need .debug_info
1371 and .debug_abbrev sections as well. */
1372 if (all_segs != NULL && debug_type == DEBUG_DWARF2)
1378 info_seg = subseg_new (".debug_info", 0);
1379 abbrev_seg = subseg_new (".debug_abbrev", 0);
1380 aranges_seg = subseg_new (".debug_aranges", 0);
1382 bfd_set_section_flags (stdoutput, info_seg, SEC_READONLY);
1383 bfd_set_section_flags (stdoutput, abbrev_seg, SEC_READONLY);
1384 bfd_set_section_flags (stdoutput, aranges_seg, SEC_READONLY);
1386 record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
1388 out_debug_aranges (aranges_seg, info_seg);
1389 out_debug_abbrev (abbrev_seg);
1390 out_debug_info (info_seg, abbrev_seg, line_seg);
1401 dwarf2dbg_estimate_size_before_relax (frag)
1402 fragS *frag ATTRIBUTE_UNUSED;
1404 as_fatal (_("dwarf2 is not supported for this object file format"));
1409 dwarf2dbg_relax_frag (frag)
1410 fragS *frag ATTRIBUTE_UNUSED;
1412 as_fatal (_("dwarf2 is not supported for this object file format"));
1417 dwarf2dbg_convert_frag (frag)
1418 fragS *frag ATTRIBUTE_UNUSED;
1420 as_fatal (_("dwarf2 is not supported for this object file format"));
1424 dwarf2_emit_insn (size)
1425 int size ATTRIBUTE_UNUSED;
1430 dwarf2_directive_file (dummy)
1431 int dummy ATTRIBUTE_UNUSED;
1438 dwarf2_directive_loc (dummy)
1439 int dummy ATTRIBUTE_UNUSED;
1441 as_fatal (_("dwarf2 is not supported for this object file format"));
1443 #endif /* BFD_ASSEMBLER */