1 /* dwarf2dbg.c - DWARF2 debug support
2 Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
3 Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
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"
50 #include "elf/dwarf2.h"
52 /* Since we can't generate the prolog until the body is complete, we
53 use three different subsegments for .debug_line: one holding the
54 prolog, one for the directory and filename info, and one for the
55 body ("statement program"). */
60 /* First special line opcde - leave room for the standard opcodes.
61 Note: If you want to change this, you'll have to update the
62 "standard_opcode_lengths" table that is emitted below in
64 #define DWARF2_LINE_OPCODE_BASE 10
66 #ifndef DWARF2_LINE_BASE
67 /* Minimum line offset in a special line info. opcode. This value
68 was chosen to give a reasonable range of values. */
69 # define DWARF2_LINE_BASE -5
72 /* Range of line offsets in a special line info. opcode. */
73 #ifndef DWARF2_LINE_RANGE
74 # define DWARF2_LINE_RANGE 14
77 #ifndef DWARF2_LINE_MIN_INSN_LENGTH
78 /* Define the architecture-dependent minimum instruction length (in
79 bytes). This value should be rather too small than too big. */
80 # define DWARF2_LINE_MIN_INSN_LENGTH 1
83 /* Flag that indicates the initial value of the is_stmt_start flag.
84 In the present implementation, we do not mark any lines as
85 the beginning of a source statement, because that information
86 is not made available by the GCC front-end. */
87 #define DWARF2_LINE_DEFAULT_IS_STMT 1
89 /* Given a special op, return the line skip amount. */
90 #define SPECIAL_LINE(op) \
91 (((op) - DWARF2_LINE_OPCODE_BASE)%DWARF2_LINE_RANGE + DWARF2_LINE_BASE)
93 /* Given a special op, return the address skip amount (in units of
94 DWARF2_LINE_MIN_INSN_LENGTH. */
95 #define SPECIAL_ADDR(op) (((op) - DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)
97 /* The maximum address skip amount that can be encoded with a special op. */
98 #define MAX_SPECIAL_ADDR_DELTA SPECIAL_ADDR(255)
101 struct line_entry
*next
;
104 struct dwarf2_line_info loc
;
108 struct line_subseg
*next
;
110 struct line_entry
*head
;
111 struct line_entry
**ptail
;
115 struct line_seg
*next
;
117 struct line_subseg
*head
;
122 /* Collects data for all line table entries during assembly. */
123 static struct line_seg
*all_segs
;
130 /* Table of files used by .debug_line. */
131 static struct file_entry
*files
;
132 static unsigned int files_in_use
;
133 static unsigned int files_allocated
;
135 /* True when we've seen a .loc directive recently. Used to avoid
136 doing work when there's nothing to do. */
137 static boolean loc_directive_seen
;
139 /* Current location as indicated by the most recent .loc directive. */
140 static struct dwarf2_line_info current
;
142 /* Fake label name. */
143 static char const fake_label_name
[] = ".L0\001";
145 /* The size of an address on the target. */
146 static unsigned int sizeof_address
;
148 static struct line_subseg
*get_line_subseg
PARAMS ((segT
, subsegT
));
149 static unsigned int get_filenum
PARAMS ((const char *));
150 static struct frag
*first_frag_for_seg
PARAMS ((segT
));
151 static struct frag
*last_frag_for_seg
PARAMS ((segT
));
152 static void out_byte
PARAMS ((int));
153 static void out_opcode
PARAMS ((int));
154 static void out_two
PARAMS ((int));
155 static void out_four
PARAMS ((int));
156 static void out_abbrev
PARAMS ((int, int));
157 static void out_uleb128
PARAMS ((addressT
));
158 static symbolS
*symbol_new_now
PARAMS ((void));
159 static void set_symbol_value_now
PARAMS ((symbolS
*));
160 static offsetT get_frag_fix
PARAMS ((fragS
*));
161 static void out_set_addr
PARAMS ((segT
, fragS
*, addressT
));
162 static int size_inc_line_addr
PARAMS ((int, addressT
));
163 static void emit_inc_line_addr
PARAMS ((int, addressT
, char *, int));
164 static void out_inc_line_addr
PARAMS ((int, addressT
));
165 static void relax_inc_line_addr
PARAMS ((int, segT
, fragS
*, addressT
,
167 static void process_entries
PARAMS ((segT
, struct line_entry
*));
168 static void out_file_list
PARAMS ((void));
169 static void out_debug_line
PARAMS ((segT
));
170 static void out_debug_aranges
PARAMS ((segT
, segT
));
171 static void out_debug_abbrev
PARAMS ((segT
));
172 static void out_debug_info
PARAMS ((segT
, segT
, segT
));
174 /* Find or create an entry for SEG+SUBSEG in ALL_SEGS. */
176 static struct line_subseg
*
177 get_line_subseg (seg
, subseg
)
181 static segT last_seg
;
182 static subsegT last_subseg
;
183 static struct line_subseg
*last_line_subseg
;
186 struct line_subseg
**pss
, *ss
;
188 if (seg
== last_seg
&& subseg
== last_subseg
)
189 return last_line_subseg
;
191 for (s
= all_segs
; s
; s
= s
->next
)
195 s
= (struct line_seg
*) xmalloc (sizeof (*s
));
202 for (pss
= &s
->head
; (ss
= *pss
) != NULL
; pss
= &ss
->next
)
204 if (ss
->subseg
== subseg
)
206 if (ss
->subseg
> subseg
)
210 ss
= (struct line_subseg
*) xmalloc (sizeof (*ss
));
214 ss
->ptail
= &ss
->head
;
219 last_subseg
= subseg
;
220 last_line_subseg
= ss
;
225 /* Record an entry for LOC ocurring at OFS within the current fragment. */
228 dwarf2_gen_line_info (ofs
, loc
)
230 struct dwarf2_line_info
*loc
;
232 struct line_subseg
*ss
;
233 struct line_entry
*e
;
234 static unsigned int line
= -1;
235 static unsigned int filenum
= -1;
237 /* Early out for as-yet incomplete location information. */
238 if (loc
->filenum
== 0 || loc
->line
== 0)
241 /* Don't emit sequences of line symbols for the same line when the
242 symbols apply to assembler code. It is necessary to emit
243 duplicate line symbols when a compiler asks for them, because GDB
244 uses them to determine the end of the prologue. */
245 if (debug_type
== DEBUG_DWARF2
246 && line
== loc
->line
&& filenum
== loc
->filenum
)
250 filenum
= loc
->filenum
;
252 e
= (struct line_entry
*) xmalloc (sizeof (*e
));
258 ss
= get_line_subseg (now_seg
, now_subseg
);
260 ss
->ptail
= &e
->next
;
265 struct dwarf2_line_info
*line
;
267 if (debug_type
== DEBUG_DWARF2
)
270 as_where (&filename
, &line
->line
);
271 line
->filenum
= get_filenum (filename
);
273 line
->flags
= DWARF2_FLAG_BEGIN_STMT
;
279 /* Called for each machine instruction, or relatively atomic group of
280 machine instructions (ie built-in macro). The instruction or group
281 is SIZE bytes in length. If dwarf2 line number generation is called
282 for, emit a line statement appropriately. */
285 dwarf2_emit_insn (size
)
288 struct dwarf2_line_info loc
;
290 if (loc_directive_seen
)
292 /* Use the last location established by a .loc directive, not
293 the value returned by dwarf2_where(). That calls as_where()
294 which will return either the logical input file name (foo.c)
295 or the physical input file name (foo.s) and not the file name
296 specified in the most recent .loc directive (eg foo.h). */
299 /* Unless we generate DWARF2 debugging information for each
300 assembler line, we only emit one line symbol for one LOC. */
301 if (debug_type
!= DEBUG_DWARF2
)
302 loc_directive_seen
= false;
304 else if (debug_type
!= DEBUG_DWARF2
)
307 dwarf2_where (& loc
);
309 dwarf2_gen_line_info (frag_now_fix () - size
, &loc
);
312 /* Get a .debug_line file number for FILENAME. */
315 get_filenum (filename
)
316 const char *filename
;
318 static unsigned int last_used
;
322 if (strcmp (filename
, files
[last_used
].filename
) == 0)
325 for (i
= 1; i
< files_in_use
; ++i
)
326 if (strcmp (filename
, files
[i
].filename
) == 0)
329 if (i
>= files_allocated
)
331 unsigned int old
= files_allocated
;
333 files_allocated
= i
+ 32;
334 files
= (struct file_entry
*)
335 xrealloc (files
, (i
+ 32) * sizeof (struct file_entry
));
337 memset (files
+ old
, 0, (i
+ 32 - old
) * sizeof (struct file_entry
));
340 files
[i
].filename
= xstrdup (filename
);
342 files_in_use
= i
+ 1;
348 /* Handle two forms of .file directive:
349 - Pass .file "source.c" to s_app_file
350 - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
352 If an entry is added to the file table, return a pointer to the filename. */
355 dwarf2_directive_file (dummy
)
356 int dummy ATTRIBUTE_UNUSED
;
362 /* Continue to accept a bare string and pass it off. */
364 if (*input_line_pointer
== '"')
370 num
= get_absolute_expression ();
371 filename
= demand_copy_C_string (&filename_len
);
372 demand_empty_rest_of_line ();
376 as_bad (_("file number less than one"));
380 if (num
< (int) files_in_use
&& files
[num
].filename
!= 0)
382 as_bad (_("file number %ld already allocated"), (long) num
);
386 if (num
>= (int) files_allocated
)
388 unsigned int old
= files_allocated
;
390 files_allocated
= num
+ 16;
391 files
= (struct file_entry
*)
392 xrealloc (files
, (num
+ 16) * sizeof (struct file_entry
));
394 /* Zero the new memory. */
395 memset (files
+ old
, 0, (num
+ 16 - old
) * sizeof (struct file_entry
));
398 files
[num
].filename
= filename
;
400 files_in_use
= num
+ 1;
406 dwarf2_directive_loc (dummy
)
407 int dummy ATTRIBUTE_UNUSED
;
409 offsetT filenum
, line
, column
;
411 filenum
= get_absolute_expression ();
413 line
= get_absolute_expression ();
415 column
= get_absolute_expression ();
416 demand_empty_rest_of_line ();
420 as_bad (_("file number less than one"));
423 if (filenum
>= (int) files_in_use
|| files
[filenum
].filename
== 0)
425 as_bad (_("unassigned file number %ld"), (long) filenum
);
429 current
.filenum
= filenum
;
431 current
.column
= column
;
432 current
.flags
= DWARF2_FLAG_BEGIN_STMT
;
434 loc_directive_seen
= true;
439 listing_source_file (files
[filenum
].filename
);
440 listing_source_line (line
);
446 first_frag_for_seg (seg
)
449 frchainS
*f
, *first
= NULL
;
451 for (f
= frchain_root
; f
; f
= f
->frch_next
)
452 if (f
->frch_seg
== seg
453 && (! first
|| first
->frch_subseg
> f
->frch_subseg
))
456 return first
? first
->frch_root
: NULL
;
460 last_frag_for_seg (seg
)
463 frchainS
*f
, *last
= NULL
;
465 for (f
= frchain_root
; f
; f
= f
->frch_next
)
466 if (f
->frch_seg
== seg
467 && (! last
|| last
->frch_subseg
< f
->frch_subseg
))
470 return last
? last
->frch_last
: NULL
;
473 /* Emit a single byte into the current segment. */
479 FRAG_APPEND_1_CHAR (byte
);
482 /* Emit a statement program opcode into the current segment. */
491 /* Emit a two-byte word into the current segment. */
497 md_number_to_chars (frag_more (2), data
, 2);
500 /* Emit a four byte word into the current segment. */
506 md_number_to_chars (frag_more (4), data
, 4);
509 /* Emit an unsigned "little-endian base 128" number. */
515 output_leb128 (frag_more (sizeof_leb128 (value
, 0)), value
, 0);
518 /* Emit a tuple for .debug_abbrev. */
521 out_abbrev (name
, form
)
528 /* Create a new fake symbol whose value is the current position. */
533 return symbol_new (fake_label_name
, now_seg
, frag_now_fix (), frag_now
);
536 /* Set the value of SYM to the current position in the current segment. */
539 set_symbol_value_now (sym
)
542 S_SET_SEGMENT (sym
, now_seg
);
543 S_SET_VALUE (sym
, frag_now_fix ());
544 symbol_set_frag (sym
, frag_now
);
547 /* Get the size of a fragment. */
558 /* If a fragment is the last in the chain, special measures must be
559 taken to find its size before relaxation, since it may be pending
560 on some subsegment chain. */
561 for (fr
= frchain_root
; fr
; fr
= fr
->frch_next
)
562 if (fr
->frch_last
== frag
)
564 long align_mask
= -1 << get_recorded_alignment (fr
->frch_seg
);
565 return (((char *) obstack_next_free (&fr
->frch_obstack
)
566 - frag
->fr_literal
) + ~align_mask
) & align_mask
;
572 /* Set an absolute address (may result in a relocation entry). */
575 out_set_addr (seg
, frag
, ofs
)
583 sym
= symbol_new (fake_label_name
, seg
, ofs
, frag
);
585 out_opcode (DW_LNS_extended_op
);
586 out_uleb128 (sizeof_address
+ 1);
588 out_opcode (DW_LNE_set_address
);
589 expr
.X_op
= O_symbol
;
590 expr
.X_add_symbol
= sym
;
591 expr
.X_add_number
= 0;
592 emit_expr (&expr
, sizeof_address
);
595 /* Encode a pair of line and address skips as efficiently as possible.
596 Note that the line skip is signed, whereas the address skip is unsigned.
598 The following two routines *must* be kept in sync. This is
599 enforced by making emit_inc_line_addr abort if we do not emit
600 exactly the expected number of bytes. */
603 size_inc_line_addr (line_delta
, addr_delta
)
607 unsigned int tmp
, opcode
;
610 /* Scale the address delta by the minimum instruction length. */
611 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
612 assert (addr_delta
% DWARF2_LINE_MIN_INSN_LENGTH
== 0);
613 addr_delta
/= DWARF2_LINE_MIN_INSN_LENGTH
;
616 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
617 We cannot use special opcodes here, since we want the end_sequence
618 to emit the matrix entry. */
619 if (line_delta
== INT_MAX
)
621 if (addr_delta
== MAX_SPECIAL_ADDR_DELTA
)
624 len
= 1 + sizeof_leb128 (addr_delta
, 0);
628 /* Bias the line delta by the base. */
629 tmp
= line_delta
- DWARF2_LINE_BASE
;
631 /* If the line increment is out of range of a special opcode, we
632 must encode it with DW_LNS_advance_line. */
633 if (tmp
>= DWARF2_LINE_RANGE
)
635 len
= 1 + sizeof_leb128 (line_delta
, 1);
637 tmp
= 0 - DWARF2_LINE_BASE
;
640 /* Bias the opcode by the special opcode base. */
641 tmp
+= DWARF2_LINE_OPCODE_BASE
;
643 /* Avoid overflow when addr_delta is large. */
644 if (addr_delta
< 256 + MAX_SPECIAL_ADDR_DELTA
)
646 /* Try using a special opcode. */
647 opcode
= tmp
+ addr_delta
* DWARF2_LINE_RANGE
;
651 /* Try using DW_LNS_const_add_pc followed by special op. */
652 opcode
= tmp
+ (addr_delta
- MAX_SPECIAL_ADDR_DELTA
) * DWARF2_LINE_RANGE
;
657 /* Otherwise use DW_LNS_advance_pc. */
658 len
+= 1 + sizeof_leb128 (addr_delta
, 0);
660 /* DW_LNS_copy or special opcode. */
667 emit_inc_line_addr (line_delta
, addr_delta
, p
, len
)
673 unsigned int tmp
, opcode
;
677 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
678 /* Scale the address delta by the minimum instruction length. */
679 assert (addr_delta
% DWARF2_LINE_MIN_INSN_LENGTH
== 0);
680 addr_delta
/= DWARF2_LINE_MIN_INSN_LENGTH
;
682 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
683 We cannot use special opcodes here, since we want the end_sequence
684 to emit the matrix entry. */
685 if (line_delta
== INT_MAX
)
687 if (addr_delta
== MAX_SPECIAL_ADDR_DELTA
)
688 *p
++ = DW_LNS_const_add_pc
;
691 *p
++ = DW_LNS_advance_pc
;
692 p
+= output_leb128 (p
, addr_delta
, 0);
695 *p
++ = DW_LNS_extended_op
;
697 *p
++ = DW_LNE_end_sequence
;
701 /* Bias the line delta by the base. */
702 tmp
= line_delta
- DWARF2_LINE_BASE
;
704 /* If the line increment is out of range of a special opcode, we
705 must encode it with DW_LNS_advance_line. */
706 if (tmp
>= DWARF2_LINE_RANGE
)
708 *p
++ = DW_LNS_advance_line
;
709 p
+= output_leb128 (p
, line_delta
, 1);
711 /* Prettier, I think, to use DW_LNS_copy instead of a
712 "line +0, addr +0" special opcode. */
720 tmp
= 0 - DWARF2_LINE_BASE
;
724 /* Bias the opcode by the special opcode base. */
725 tmp
+= DWARF2_LINE_OPCODE_BASE
;
727 /* Avoid overflow when addr_delta is large. */
728 if (addr_delta
< 256 + MAX_SPECIAL_ADDR_DELTA
)
730 /* Try using a special opcode. */
731 opcode
= tmp
+ addr_delta
* DWARF2_LINE_RANGE
;
738 /* Try using DW_LNS_const_add_pc followed by special op. */
739 opcode
= tmp
+ (addr_delta
- MAX_SPECIAL_ADDR_DELTA
) * DWARF2_LINE_RANGE
;
742 *p
++ = DW_LNS_const_add_pc
;
748 /* Otherwise use DW_LNS_advance_pc. */
749 *p
++ = DW_LNS_advance_pc
;
750 p
+= output_leb128 (p
, addr_delta
, 0);
761 /* Handy routine to combine calls to the above two routines. */
764 out_inc_line_addr (line_delta
, addr_delta
)
768 int len
= size_inc_line_addr (line_delta
, addr_delta
);
769 emit_inc_line_addr (line_delta
, addr_delta
, frag_more (len
), len
);
772 /* Generate a variant frag that we can use to relax address/line
773 increments between fragments of the target segment. */
776 relax_inc_line_addr (line_delta
, seg
, to_frag
, to_ofs
, from_frag
, from_ofs
)
779 fragS
*to_frag
, *from_frag
;
780 addressT to_ofs
, from_ofs
;
782 symbolS
*to_sym
, *from_sym
;
786 to_sym
= symbol_new (fake_label_name
, seg
, to_ofs
, to_frag
);
787 from_sym
= symbol_new (fake_label_name
, seg
, from_ofs
, from_frag
);
789 expr
.X_op
= O_subtract
;
790 expr
.X_add_symbol
= to_sym
;
791 expr
.X_op_symbol
= from_sym
;
792 expr
.X_add_number
= 0;
794 /* The maximum size of the frag is the line delta with a maximum
795 sized address delta. */
796 max_chars
= size_inc_line_addr (line_delta
, -DWARF2_LINE_MIN_INSN_LENGTH
);
798 frag_var (rs_dwarf2dbg
, max_chars
, max_chars
, 1,
799 make_expr_symbol (&expr
), line_delta
, NULL
);
802 /* The function estimates the size of a rs_dwarf2dbg variant frag
803 based on the current values of the symbols. It is called before
804 the relaxation loop. We set fr_subtype to the expected length. */
807 dwarf2dbg_estimate_size_before_relax (frag
)
813 addr_delta
= resolve_symbol_value (frag
->fr_symbol
);
814 size
= size_inc_line_addr (frag
->fr_offset
, addr_delta
);
816 frag
->fr_subtype
= size
;
821 /* This function relaxes a rs_dwarf2dbg variant frag based on the
822 current values of the symbols. fr_subtype is the current length
823 of the frag. This returns the change in frag length. */
826 dwarf2dbg_relax_frag (frag
)
829 int old_size
, new_size
;
831 old_size
= frag
->fr_subtype
;
832 new_size
= dwarf2dbg_estimate_size_before_relax (frag
);
834 return new_size
- old_size
;
837 /* This function converts a rs_dwarf2dbg variant frag into a normal
838 fill frag. This is called after all relaxation has been done.
839 fr_subtype will be the desired length of the frag. */
842 dwarf2dbg_convert_frag (frag
)
847 addr_diff
= resolve_symbol_value (frag
->fr_symbol
);
849 /* fr_var carries the max_chars that we created the fragment with.
850 fr_subtype carries the current expected length. We must, of
851 course, have allocated enough memory earlier. */
852 assert (frag
->fr_var
>= (int) frag
->fr_subtype
);
854 emit_inc_line_addr (frag
->fr_offset
, addr_diff
,
855 frag
->fr_literal
+ frag
->fr_fix
, frag
->fr_subtype
);
857 frag
->fr_fix
+= frag
->fr_subtype
;
858 frag
->fr_type
= rs_fill
;
863 /* Generate .debug_line content for the chain of line number entries
864 beginning at E, for segment SEG. */
867 process_entries (seg
, e
)
869 struct line_entry
*e
;
871 unsigned filenum
= 1;
874 unsigned flags
= DWARF2_LINE_DEFAULT_IS_STMT
? DWARF2_FLAG_BEGIN_STMT
: 0;
877 addressT frag_ofs
= 0;
878 addressT last_frag_ofs
;
879 struct line_entry
*next
;
885 if (filenum
!= e
->loc
.filenum
)
887 filenum
= e
->loc
.filenum
;
888 out_opcode (DW_LNS_set_file
);
889 out_uleb128 (filenum
);
893 if (column
!= e
->loc
.column
)
895 column
= e
->loc
.column
;
896 out_opcode (DW_LNS_set_column
);
897 out_uleb128 (column
);
901 if ((e
->loc
.flags
^ flags
) & DWARF2_FLAG_BEGIN_STMT
)
903 flags
= e
->loc
.flags
;
904 out_opcode (DW_LNS_negate_stmt
);
908 if (e
->loc
.flags
& DWARF2_FLAG_BEGIN_BLOCK
)
910 out_opcode (DW_LNS_set_basic_block
);
914 /* Don't try to optimize away redundant entries; gdb wants two
915 entries for a function where the code starts on the same line as
916 the {, and there's no way to identify that case here. Trust gcc
917 to optimize appropriately. */
918 if (1 /* line != e->loc.line || changed */)
920 int line_delta
= e
->loc
.line
- line
;
923 out_set_addr (seg
, e
->frag
, e
->frag_ofs
);
924 out_inc_line_addr (line_delta
, 0);
926 else if (frag
== e
->frag
)
927 out_inc_line_addr (line_delta
, e
->frag_ofs
- frag_ofs
);
929 relax_inc_line_addr (line_delta
, seg
, e
->frag
, e
->frag_ofs
,
933 frag_ofs
= e
->frag_ofs
;
936 else if (frag
== NULL
)
938 out_set_addr (seg
, e
->frag
, e
->frag_ofs
);
940 frag_ofs
= e
->frag_ofs
;
948 /* Emit a DW_LNE_end_sequence for the end of the section. */
949 last_frag
= last_frag_for_seg (seg
);
950 last_frag_ofs
= get_frag_fix (last_frag
);
951 if (frag
== last_frag
)
952 out_inc_line_addr (INT_MAX
, last_frag_ofs
- frag_ofs
);
954 relax_inc_line_addr (INT_MAX
, seg
, last_frag
, last_frag_ofs
,
958 /* Emit the directory and file tables for .debug_line. */
967 /* Terminate directory list. */
970 for (i
= 1; i
< files_in_use
; ++i
)
972 if (files
[i
].filename
== NULL
)
974 as_bad (_("unassigned file number %ld"), (long) i
);
978 size
= strlen (files
[i
].filename
) + 1;
979 cp
= frag_more (size
);
980 memcpy (cp
, files
[i
].filename
, size
);
982 out_uleb128 (files
[i
].dir
); /* directory number */
983 out_uleb128 (0); /* last modification timestamp */
984 out_uleb128 (0); /* filesize */
987 /* Terminate filename list. */
991 /* Emit the collected .debug_line data. */
994 out_debug_line (line_seg
)
999 symbolS
*prologue_end
;
1003 subseg_set (line_seg
, 0);
1005 line_start
= symbol_new_now ();
1006 prologue_end
= symbol_make (fake_label_name
);
1007 line_end
= symbol_make (fake_label_name
);
1009 /* Total length of the information for this compilation unit. */
1010 expr
.X_op
= O_subtract
;
1011 expr
.X_add_symbol
= line_end
;
1012 expr
.X_op_symbol
= line_start
;
1013 expr
.X_add_number
= -4;
1014 emit_expr (&expr
, 4);
1019 /* Length of the prologue following this length. */
1020 expr
.X_op
= O_subtract
;
1021 expr
.X_add_symbol
= prologue_end
;
1022 expr
.X_op_symbol
= line_start
;
1023 expr
.X_add_number
= - (4 + 2 + 4);
1024 emit_expr (&expr
, 4);
1026 /* Parameters of the state machine. */
1027 out_byte (DWARF2_LINE_MIN_INSN_LENGTH
);
1028 out_byte (DWARF2_LINE_DEFAULT_IS_STMT
);
1029 out_byte (DWARF2_LINE_BASE
);
1030 out_byte (DWARF2_LINE_RANGE
);
1031 out_byte (DWARF2_LINE_OPCODE_BASE
);
1033 /* Standard opcode lengths. */
1034 out_byte (0); /* DW_LNS_copy */
1035 out_byte (1); /* DW_LNS_advance_pc */
1036 out_byte (1); /* DW_LNS_advance_line */
1037 out_byte (1); /* DW_LNS_set_file */
1038 out_byte (1); /* DW_LNS_set_column */
1039 out_byte (0); /* DW_LNS_negate_stmt */
1040 out_byte (0); /* DW_LNS_set_basic_block */
1041 out_byte (0); /* DW_LNS_const_add_pc */
1042 out_byte (1); /* DW_LNS_fixed_advance_pc */
1046 set_symbol_value_now (prologue_end
);
1048 /* For each section, emit a statement program. */
1049 for (s
= all_segs
; s
; s
= s
->next
)
1050 process_entries (s
->seg
, s
->head
->head
);
1052 set_symbol_value_now (line_end
);
1055 /* Emit data for .debug_aranges. */
1058 out_debug_aranges (aranges_seg
, info_seg
)
1062 unsigned int addr_size
= sizeof_address
;
1063 addressT size
, skip
;
1068 size
= 4 + 2 + 4 + 1 + 1;
1070 skip
= 2 * addr_size
- (size
& (2 * addr_size
- 1));
1071 if (skip
== 2 * addr_size
)
1075 for (s
= all_segs
; s
; s
= s
->next
)
1076 size
+= 2 * addr_size
;
1078 size
+= 2 * addr_size
;
1080 subseg_set (aranges_seg
, 0);
1082 /* Length of the compilation unit. */
1083 out_four (size
- 4);
1088 /* Offset to .debug_info. */
1089 expr
.X_op
= O_symbol
;
1090 expr
.X_add_symbol
= section_symbol (info_seg
);
1091 expr
.X_add_number
= 0;
1092 emit_expr (&expr
, 4);
1094 /* Size of an address (offset portion). */
1095 out_byte (addr_size
);
1097 /* Size of a segment descriptor. */
1100 /* Align the header. */
1102 frag_align (ffs (2 * addr_size
) - 1, 0, 0);
1104 for (s
= all_segs
; s
; s
= s
->next
)
1109 frag
= first_frag_for_seg (s
->seg
);
1110 beg
= symbol_new (fake_label_name
, s
->seg
, 0, frag
);
1111 s
->text_start
= beg
;
1113 frag
= last_frag_for_seg (s
->seg
);
1114 end
= symbol_new (fake_label_name
, s
->seg
, get_frag_fix (frag
), frag
);
1117 expr
.X_op
= O_symbol
;
1118 expr
.X_add_symbol
= beg
;
1119 expr
.X_add_number
= 0;
1120 emit_expr (&expr
, addr_size
);
1122 expr
.X_op
= O_subtract
;
1123 expr
.X_add_symbol
= end
;
1124 expr
.X_op_symbol
= beg
;
1125 expr
.X_add_number
= 0;
1126 emit_expr (&expr
, addr_size
);
1129 p
= frag_more (2 * addr_size
);
1130 md_number_to_chars (p
, 0, addr_size
);
1131 md_number_to_chars (p
+ addr_size
, 0, addr_size
);
1134 /* Emit data for .debug_abbrev. Note that this must be kept in
1135 sync with out_debug_info below. */
1138 out_debug_abbrev (abbrev_seg
)
1141 subseg_set (abbrev_seg
, 0);
1144 out_uleb128 (DW_TAG_compile_unit
);
1145 out_byte (DW_CHILDREN_no
);
1146 out_abbrev (DW_AT_stmt_list
, DW_FORM_data4
);
1147 if (all_segs
->next
== NULL
)
1149 out_abbrev (DW_AT_low_pc
, DW_FORM_addr
);
1150 out_abbrev (DW_AT_high_pc
, DW_FORM_addr
);
1152 out_abbrev (DW_AT_comp_dir
, DW_FORM_string
);
1153 out_abbrev (DW_AT_producer
, DW_FORM_string
);
1154 out_abbrev (DW_AT_language
, DW_FORM_data2
);
1157 /* Terminate the abbreviations for this compilation unit. */
1161 /* Emit a description of this compilation unit for .debug_info. */
1164 out_debug_info (info_seg
, abbrev_seg
, line_seg
)
1172 symbolS
*info_start
;
1177 subseg_set (info_seg
, 0);
1179 info_start
= symbol_new_now ();
1180 info_end
= symbol_make (fake_label_name
);
1182 /* Compilation Unit length. */
1183 expr
.X_op
= O_subtract
;
1184 expr
.X_add_symbol
= info_end
;
1185 expr
.X_op_symbol
= info_start
;
1186 expr
.X_add_number
= -4;
1187 emit_expr (&expr
, 4);
1189 /* DWARF version. */
1192 /* .debug_abbrev offset */
1193 expr
.X_op
= O_symbol
;
1194 expr
.X_add_symbol
= section_symbol (abbrev_seg
);
1195 expr
.X_add_number
= 0;
1196 emit_expr (&expr
, 4);
1198 /* Target address size. */
1199 out_byte (sizeof_address
);
1201 /* DW_TAG_compile_unit DIE abbrev */
1204 /* DW_AT_stmt_list */
1205 expr
.X_op
= O_symbol
;
1206 expr
.X_add_symbol
= section_symbol (line_seg
);
1207 expr
.X_add_number
= 0;
1208 emit_expr (&expr
, 4);
1210 /* These two attributes may only be emitted if all of the code is
1211 contiguous. Multiple sections are not that. */
1212 if (all_segs
->next
== NULL
)
1215 expr
.X_op
= O_symbol
;
1216 expr
.X_add_symbol
= all_segs
->text_start
;
1217 expr
.X_add_number
= 0;
1218 emit_expr (&expr
, sizeof_address
);
1221 expr
.X_op
= O_symbol
;
1222 expr
.X_add_symbol
= all_segs
->text_end
;
1223 expr
.X_add_number
= 0;
1224 emit_expr (&expr
, sizeof_address
);
1227 /* DW_AT_comp_dir */
1228 comp_dir
= getpwd ();
1229 len
= strlen (comp_dir
) + 1;
1230 p
= frag_more (len
);
1231 memcpy (p
, comp_dir
, len
);
1233 /* DW_AT_producer */
1234 sprintf (producer
, "GNU AS %s", VERSION
);
1235 len
= strlen (producer
) + 1;
1236 p
= frag_more (len
);
1237 memcpy (p
, producer
, len
);
1239 /* DW_AT_language. Yes, this is probably not really MIPS, but the
1240 dwarf2 draft has no standard code for assembler. */
1241 out_two (DW_LANG_Mips_Assembler
);
1243 set_symbol_value_now (info_end
);
1252 /* We don't need to do anything unless:
1253 - Some debug information was recorded via .file/.loc
1254 - or, we are generating DWARF2 information ourself (--gdwarf2)
1255 - or, there is a user-provided .debug_info section which could
1256 reference the file table in the .debug_line section we generate
1258 if (all_segs
== NULL
1259 && debug_type
!= DEBUG_DWARF2
1260 && bfd_get_section_by_name (stdoutput
, ".debug_info") == NULL
)
1263 /* Calculate the size of an address for the target machine. */
1264 sizeof_address
= bfd_arch_bits_per_address (stdoutput
) / 8;
1266 /* Create and switch to the line number section. */
1267 line_seg
= subseg_new (".debug_line", 0);
1268 bfd_set_section_flags (stdoutput
, line_seg
, SEC_READONLY
);
1270 /* For each subsection, chain the debug entries together. */
1271 for (s
= all_segs
; s
; s
= s
->next
)
1273 struct line_subseg
*ss
= s
->head
;
1274 struct line_entry
**ptail
= ss
->ptail
;
1276 while ((ss
= ss
->next
) != NULL
)
1283 out_debug_line (line_seg
);
1285 /* If this is assembler generated line info, we need .debug_info
1286 and .debug_abbrev sections as well. */
1287 if (all_segs
!= NULL
&& debug_type
== DEBUG_DWARF2
)
1293 info_seg
= subseg_new (".debug_info", 0);
1294 abbrev_seg
= subseg_new (".debug_abbrev", 0);
1295 aranges_seg
= subseg_new (".debug_aranges", 0);
1297 bfd_set_section_flags (stdoutput
, info_seg
, SEC_READONLY
);
1298 bfd_set_section_flags (stdoutput
, abbrev_seg
, SEC_READONLY
);
1299 bfd_set_section_flags (stdoutput
, aranges_seg
, SEC_READONLY
);
1301 record_alignment (aranges_seg
, ffs (2 * sizeof_address
) - 1);
1303 out_debug_aranges (aranges_seg
, info_seg
);
1304 out_debug_abbrev (abbrev_seg
);
1305 out_debug_info (info_seg
, abbrev_seg
, line_seg
);
1316 dwarf2dbg_estimate_size_before_relax (frag
)
1317 fragS
*frag ATTRIBUTE_UNUSED
;
1319 as_fatal (_("dwarf2 is not supported for this object file format"));
1324 dwarf2dbg_relax_frag (frag
)
1325 fragS
*frag ATTRIBUTE_UNUSED
;
1327 as_fatal (_("dwarf2 is not supported for this object file format"));
1332 dwarf2dbg_convert_frag (frag
)
1333 fragS
*frag ATTRIBUTE_UNUSED
;
1335 as_fatal (_("dwarf2 is not supported for this object file format"));
1339 dwarf2_emit_insn (size
)
1340 int size ATTRIBUTE_UNUSED
;
1345 dwarf2_directive_file (dummy
)
1346 int dummy ATTRIBUTE_UNUSED
;
1353 dwarf2_directive_loc (dummy
)
1354 int dummy ATTRIBUTE_UNUSED
;
1356 as_fatal (_("dwarf2 is not supported for this object file format"));
1358 #endif /* BFD_ASSEMBLER */