1 /* dwarf2dbg.c - DWARF2 debug support
2 Copyright 1999, 2000, 2001 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)
46 #include "dwarf2dbg.h"
49 #include "elf/dwarf2.h"
51 /* Since we can't generate the prolog until the body is complete, we
52 use three different subsegments for .debug_line: one holding the
53 prolog, one for the directory and filename info, and one for the
54 body ("statement program"). */
59 /* First special line opcde - leave room for the standard opcodes.
60 Note: If you want to change this, you'll have to update the
61 "standard_opcode_lengths" table that is emitted below in
63 #define DWARF2_LINE_OPCODE_BASE 10
65 #ifndef DWARF2_LINE_BASE
66 /* Minimum line offset in a special line info. opcode. This value
67 was chosen to give a reasonable range of values. */
68 # define DWARF2_LINE_BASE -5
71 /* Range of line offsets in a special line info. opcode. */
72 #ifndef DWARF2_LINE_RANGE
73 # define DWARF2_LINE_RANGE 14
76 #ifndef DWARF2_LINE_MIN_INSN_LENGTH
77 /* Define the architecture-dependent minimum instruction length (in
78 bytes). This value should be rather too small than too big. */
79 # define DWARF2_LINE_MIN_INSN_LENGTH 1
82 /* Flag that indicates the initial value of the is_stmt_start flag.
83 In the present implementation, we do not mark any lines as
84 the beginning of a source statement, because that information
85 is not made available by the GCC front-end. */
86 #define DWARF2_LINE_DEFAULT_IS_STMT 1
88 /* Given a special op, return the line skip amount. */
89 #define SPECIAL_LINE(op) \
90 (((op) - DWARF2_LINE_OPCODE_BASE)%DWARF2_LINE_RANGE + DWARF2_LINE_BASE)
92 /* Given a special op, return the address skip amount (in units of
93 DWARF2_LINE_MIN_INSN_LENGTH. */
94 #define SPECIAL_ADDR(op) (((op) - DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)
96 /* The maximum address skip amount that can be encoded with a special op. */
97 #define MAX_SPECIAL_ADDR_DELTA SPECIAL_ADDR(255)
100 struct line_entry
*next
;
103 struct dwarf2_line_info loc
;
107 struct line_subseg
*next
;
109 struct line_entry
*head
;
110 struct line_entry
**ptail
;
114 struct line_seg
*next
;
116 struct line_subseg
*head
;
121 /* Collects data for all line table entries during assembly. */
122 static struct line_seg
*all_segs
;
129 /* Table of files used by .debug_line. */
130 static struct file_entry
*files
;
131 static unsigned int files_in_use
;
132 static unsigned int files_allocated
;
134 /* True when we've seen a .loc directive recently. Used to avoid
135 doing work when there's nothing to do. */
136 static boolean loc_directive_seen
;
138 /* Current location as indicated by the most recent .loc directive. */
139 static struct dwarf2_line_info current
;
141 /* Fake label name. */
142 static char const fake_label_name
[] = ".L0\001";
144 /* The size of an address on the target. */
145 static unsigned int sizeof_address
;
147 static struct line_subseg
*get_line_subseg
PARAMS ((segT
, subsegT
));
148 static unsigned int get_filenum
PARAMS ((const char *));
149 static struct frag
*first_frag_for_seg
PARAMS ((segT
));
150 static struct frag
*last_frag_for_seg
PARAMS ((segT
));
151 static void out_byte
PARAMS ((int));
152 static void out_opcode
PARAMS ((int));
153 static void out_two
PARAMS ((int));
154 static void out_four
PARAMS ((int));
155 static void out_abbrev
PARAMS ((int, int));
156 static void out_uleb128
PARAMS ((addressT
));
157 static symbolS
*symbol_new_now
PARAMS ((void));
158 static void set_symbol_value_now
PARAMS ((symbolS
*));
159 static offsetT get_frag_fix
PARAMS ((fragS
*));
160 static void out_set_addr
PARAMS ((segT
, fragS
*, addressT
));
161 static int size_inc_line_addr
PARAMS ((int, addressT
));
162 static void emit_inc_line_addr
PARAMS ((int, addressT
, char *, int));
163 static void out_inc_line_addr
PARAMS ((int, addressT
));
164 static void relax_inc_line_addr
PARAMS ((int, segT
, fragS
*, addressT
,
166 static void process_entries
PARAMS ((segT
, struct line_entry
*));
167 static void out_file_list
PARAMS ((void));
168 static void out_debug_line
PARAMS ((segT
));
169 static void out_debug_aranges
PARAMS ((segT
, segT
));
170 static void out_debug_abbrev
PARAMS ((segT
));
171 static void out_debug_info
PARAMS ((segT
, segT
, segT
));
173 /* Find or create an entry for SEG+SUBSEG in ALL_SEGS. */
175 static struct line_subseg
*
176 get_line_subseg (seg
, subseg
)
180 static segT last_seg
;
181 static subsegT last_subseg
;
182 static struct line_subseg
*last_line_subseg
;
185 struct line_subseg
**pss
, *ss
;
187 if (seg
== last_seg
&& subseg
== last_subseg
)
188 return last_line_subseg
;
190 for (s
= all_segs
; s
; s
= s
->next
)
194 s
= (struct line_seg
*) xmalloc (sizeof (*s
));
201 for (pss
= &s
->head
; (ss
= *pss
) != NULL
; pss
= &ss
->next
)
203 if (ss
->subseg
== subseg
)
205 if (ss
->subseg
> subseg
)
209 ss
= (struct line_subseg
*) xmalloc (sizeof (*ss
));
213 ss
->ptail
= &ss
->head
;
218 last_subseg
= subseg
;
219 last_line_subseg
= ss
;
224 /* Record an entry for LOC ocurring at OFS within the current fragment. */
227 dwarf2_gen_line_info (ofs
, loc
)
229 struct dwarf2_line_info
*loc
;
231 struct line_subseg
*ss
;
232 struct line_entry
*e
;
233 static unsigned int line
= -1;
234 static unsigned int filenum
= -1;
236 /* Early out for as-yet incomplete location information. */
237 if (loc
->filenum
== 0 || loc
->line
== 0)
240 /* Don't emit sequences of line symbols for the same line when the
241 symbols apply to assembler code. It is necessary to emit
242 duplicate line symbols when a compiler asks for them, because GDB
243 uses them to determine the end of the prologue. */
244 if (debug_type
== DEBUG_DWARF2
245 && line
== loc
->line
&& filenum
== loc
->filenum
)
249 filenum
= loc
->filenum
;
251 e
= (struct line_entry
*) xmalloc (sizeof (*e
));
257 ss
= get_line_subseg (now_seg
, now_subseg
);
259 ss
->ptail
= &e
->next
;
264 struct dwarf2_line_info
*line
;
266 if (debug_type
== DEBUG_DWARF2
)
269 as_where (&filename
, &line
->line
);
270 line
->filenum
= get_filenum (filename
);
272 line
->flags
= DWARF2_FLAG_BEGIN_STMT
;
278 /* Called for each machine instruction, or relatively atomic group of
279 machine instructions (ie built-in macro). The instruction or group
280 is SIZE bytes in length. If dwarf2 line number generation is called
281 for, emit a line statement appropriately. */
284 dwarf2_emit_insn (size
)
287 struct dwarf2_line_info loc
;
289 if (loc_directive_seen
)
291 /* Use the last location established by a .loc directive, not
292 the value returned by dwarf2_where(). That calls as_where()
293 which will return either the logical input file name (foo.c)
294 or the physical input file name (foo.s) and not the file name
295 specified in the most recent .loc directive (eg foo.h). */
298 /* Unless we generate DWARF2 debugging information for each
299 assembler line, we only emit one line symbol for one LOC. */
300 if (debug_type
!= DEBUG_DWARF2
)
301 loc_directive_seen
= false;
303 else if (debug_type
!= DEBUG_DWARF2
)
306 dwarf2_where (& loc
);
308 dwarf2_gen_line_info (frag_now_fix () - size
, &loc
);
311 /* Get a .debug_line file number for FILENAME. */
314 get_filenum (filename
)
315 const char *filename
;
317 static unsigned int last_used
;
321 if (strcmp (filename
, files
[last_used
].filename
) == 0)
324 for (i
= 1; i
< files_in_use
; ++i
)
325 if (strcmp (filename
, files
[i
].filename
) == 0)
328 if (i
>= files_allocated
)
330 unsigned int old
= files_allocated
;
332 files_allocated
= i
+ 32;
333 files
= (struct file_entry
*)
334 xrealloc (files
, (i
+ 32) * sizeof (struct file_entry
));
336 memset (files
+ old
, 0, (i
+ 32 - old
) * sizeof (struct file_entry
));
339 files
[i
].filename
= xstrdup (filename
);
341 files_in_use
= i
+ 1;
347 /* Handle two forms of .file directive:
348 - Pass .file "source.c" to s_app_file
349 - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
351 If an entry is added to the file table, return a pointer to the filename. */
354 dwarf2_directive_file (dummy
)
355 int dummy ATTRIBUTE_UNUSED
;
361 /* Continue to accept a bare string and pass it off. */
363 if (*input_line_pointer
== '"')
369 num
= get_absolute_expression ();
370 filename
= demand_copy_C_string (&filename_len
);
371 demand_empty_rest_of_line ();
375 as_bad (_("file number less than one"));
379 if (num
< (int) files_in_use
&& files
[num
].filename
!= 0)
381 as_bad (_("file number %ld already allocated"), (long) num
);
385 if (num
>= (int) files_allocated
)
387 unsigned int old
= files_allocated
;
389 files_allocated
= num
+ 16;
390 files
= (struct file_entry
*)
391 xrealloc (files
, (num
+ 16) * sizeof (struct file_entry
));
393 /* Zero the new memory. */
394 memset (files
+ old
, 0, (num
+ 16 - old
) * sizeof (struct file_entry
));
397 files
[num
].filename
= filename
;
399 files_in_use
= num
+ 1;
405 dwarf2_directive_loc (dummy
)
406 int dummy ATTRIBUTE_UNUSED
;
408 offsetT filenum
, line
, column
;
410 filenum
= get_absolute_expression ();
412 line
= get_absolute_expression ();
414 column
= get_absolute_expression ();
415 demand_empty_rest_of_line ();
419 as_bad (_("file number less than one"));
422 if (filenum
>= (int) files_in_use
|| files
[filenum
].filename
== 0)
424 as_bad (_("unassigned file number %ld"), (long) filenum
);
428 current
.filenum
= filenum
;
430 current
.column
= column
;
431 current
.flags
= DWARF2_FLAG_BEGIN_STMT
;
433 loc_directive_seen
= true;
438 listing_source_file (files
[filenum
].filename
);
439 listing_source_line (line
);
445 first_frag_for_seg (seg
)
448 frchainS
*f
, *first
= NULL
;
450 for (f
= frchain_root
; f
; f
= f
->frch_next
)
451 if (f
->frch_seg
== seg
452 && (! first
|| first
->frch_subseg
> f
->frch_subseg
))
455 return first
? first
->frch_root
: NULL
;
459 last_frag_for_seg (seg
)
462 frchainS
*f
, *last
= NULL
;
464 for (f
= frchain_root
; f
; f
= f
->frch_next
)
465 if (f
->frch_seg
== seg
466 && (! last
|| last
->frch_subseg
< f
->frch_subseg
))
469 return last
? last
->frch_last
: NULL
;
472 /* Emit a single byte into the current segment. */
478 FRAG_APPEND_1_CHAR (byte
);
481 /* Emit a statement program opcode into the current segment. */
490 /* Emit a two-byte word into the current segment. */
496 md_number_to_chars (frag_more (2), data
, 2);
499 /* Emit a four byte word into the current segment. */
505 md_number_to_chars (frag_more (4), data
, 4);
508 /* Emit an unsigned "little-endian base 128" number. */
514 output_leb128 (frag_more (sizeof_leb128 (value
, 0)), value
, 0);
517 /* Emit a tuple for .debug_abbrev. */
520 out_abbrev (name
, form
)
527 /* Create a new fake symbol whose value is the current position. */
532 return symbol_new (fake_label_name
, now_seg
, frag_now_fix (), frag_now
);
535 /* Set the value of SYM to the current position in the current segment. */
538 set_symbol_value_now (sym
)
541 S_SET_SEGMENT (sym
, now_seg
);
542 S_SET_VALUE (sym
, frag_now_fix ());
543 symbol_set_frag (sym
, frag_now
);
546 /* Get the size of a fragment. */
557 /* If a fragment is the last in the chain, special measures must be
558 taken to find its size before relaxation, since it may be pending
559 on some subsegment chain. */
560 for (fr
= frchain_root
; fr
; fr
= fr
->frch_next
)
561 if (fr
->frch_last
== frag
)
563 long align_mask
= -1 << get_recorded_alignment (fr
->frch_seg
);
564 return (((char *) obstack_next_free (&fr
->frch_obstack
)
565 - frag
->fr_literal
) + ~align_mask
) & align_mask
;
571 /* Set an absolute address (may result in a relocation entry). */
574 out_set_addr (seg
, frag
, ofs
)
582 sym
= symbol_new (fake_label_name
, seg
, ofs
, frag
);
584 out_opcode (DW_LNS_extended_op
);
585 out_uleb128 (sizeof_address
+ 1);
587 out_opcode (DW_LNE_set_address
);
588 expr
.X_op
= O_symbol
;
589 expr
.X_add_symbol
= sym
;
590 expr
.X_add_number
= 0;
591 emit_expr (&expr
, sizeof_address
);
594 /* Encode a pair of line and address skips as efficiently as possible.
595 Note that the line skip is signed, whereas the address skip is unsigned.
597 The following two routines *must* be kept in sync. This is
598 enforced by making emit_inc_line_addr abort if we do not emit
599 exactly the expected number of bytes. */
602 size_inc_line_addr (line_delta
, addr_delta
)
606 unsigned int tmp
, opcode
;
609 /* Scale the address delta by the minimum instruction length. */
610 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
611 assert (addr_delta
% DWARF2_LINE_MIN_INSN_LENGTH
== 0);
612 addr_delta
/= DWARF2_LINE_MIN_INSN_LENGTH
;
615 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
616 We cannot use special opcodes here, since we want the end_sequence
617 to emit the matrix entry. */
618 if (line_delta
== INT_MAX
)
620 if (addr_delta
== MAX_SPECIAL_ADDR_DELTA
)
623 len
= 1 + sizeof_leb128 (addr_delta
, 0);
627 /* Bias the line delta by the base. */
628 tmp
= line_delta
- DWARF2_LINE_BASE
;
630 /* If the line increment is out of range of a special opcode, we
631 must encode it with DW_LNS_advance_line. */
632 if (tmp
>= DWARF2_LINE_RANGE
)
634 len
= 1 + sizeof_leb128 (line_delta
, 1);
636 tmp
= 0 - DWARF2_LINE_BASE
;
639 /* Bias the opcode by the special opcode base. */
640 tmp
+= DWARF2_LINE_OPCODE_BASE
;
642 /* Avoid overflow when addr_delta is large. */
643 if (addr_delta
< 256 + MAX_SPECIAL_ADDR_DELTA
)
645 /* Try using a special opcode. */
646 opcode
= tmp
+ addr_delta
* DWARF2_LINE_RANGE
;
650 /* Try using DW_LNS_const_add_pc followed by special op. */
651 opcode
= tmp
+ (addr_delta
- MAX_SPECIAL_ADDR_DELTA
) * DWARF2_LINE_RANGE
;
656 /* Otherwise use DW_LNS_advance_pc. */
657 len
+= 1 + sizeof_leb128 (addr_delta
, 0);
659 /* DW_LNS_copy or special opcode. */
666 emit_inc_line_addr (line_delta
, addr_delta
, p
, len
)
672 unsigned int tmp
, opcode
;
676 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
677 /* Scale the address delta by the minimum instruction length. */
678 assert (addr_delta
% DWARF2_LINE_MIN_INSN_LENGTH
== 0);
679 addr_delta
/= DWARF2_LINE_MIN_INSN_LENGTH
;
681 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
682 We cannot use special opcodes here, since we want the end_sequence
683 to emit the matrix entry. */
684 if (line_delta
== INT_MAX
)
686 if (addr_delta
== MAX_SPECIAL_ADDR_DELTA
)
687 *p
++ = DW_LNS_const_add_pc
;
690 *p
++ = DW_LNS_advance_pc
;
691 p
+= output_leb128 (p
, addr_delta
, 0);
694 *p
++ = DW_LNS_extended_op
;
696 *p
++ = DW_LNE_end_sequence
;
700 /* Bias the line delta by the base. */
701 tmp
= line_delta
- DWARF2_LINE_BASE
;
703 /* If the line increment is out of range of a special opcode, we
704 must encode it with DW_LNS_advance_line. */
705 if (tmp
>= DWARF2_LINE_RANGE
)
707 *p
++ = DW_LNS_advance_line
;
708 p
+= output_leb128 (p
, line_delta
, 1);
710 /* Prettier, I think, to use DW_LNS_copy instead of a
711 "line +0, addr +0" special opcode. */
719 tmp
= 0 - DWARF2_LINE_BASE
;
723 /* Bias the opcode by the special opcode base. */
724 tmp
+= DWARF2_LINE_OPCODE_BASE
;
726 /* Avoid overflow when addr_delta is large. */
727 if (addr_delta
< 256 + MAX_SPECIAL_ADDR_DELTA
)
729 /* Try using a special opcode. */
730 opcode
= tmp
+ addr_delta
* DWARF2_LINE_RANGE
;
737 /* Try using DW_LNS_const_add_pc followed by special op. */
738 opcode
= tmp
+ (addr_delta
- MAX_SPECIAL_ADDR_DELTA
) * DWARF2_LINE_RANGE
;
741 *p
++ = DW_LNS_const_add_pc
;
747 /* Otherwise use DW_LNS_advance_pc. */
748 *p
++ = DW_LNS_advance_pc
;
749 p
+= output_leb128 (p
, addr_delta
, 0);
760 /* Handy routine to combine calls to the above two routines. */
763 out_inc_line_addr (line_delta
, addr_delta
)
767 int len
= size_inc_line_addr (line_delta
, addr_delta
);
768 emit_inc_line_addr (line_delta
, addr_delta
, frag_more (len
), len
);
771 /* Generate a variant frag that we can use to relax address/line
772 increments between fragments of the target segment. */
775 relax_inc_line_addr (line_delta
, seg
, to_frag
, to_ofs
, from_frag
, from_ofs
)
778 fragS
*to_frag
, *from_frag
;
779 addressT to_ofs
, from_ofs
;
781 symbolS
*to_sym
, *from_sym
;
785 to_sym
= symbol_new (fake_label_name
, seg
, to_ofs
, to_frag
);
786 from_sym
= symbol_new (fake_label_name
, seg
, from_ofs
, from_frag
);
788 expr
.X_op
= O_subtract
;
789 expr
.X_add_symbol
= to_sym
;
790 expr
.X_op_symbol
= from_sym
;
791 expr
.X_add_number
= 0;
793 /* The maximum size of the frag is the line delta with a maximum
794 sized address delta. */
795 max_chars
= size_inc_line_addr (line_delta
, -DWARF2_LINE_MIN_INSN_LENGTH
);
797 frag_var (rs_dwarf2dbg
, max_chars
, max_chars
, 1,
798 make_expr_symbol (&expr
), line_delta
, NULL
);
801 /* The function estimates the size of a rs_dwarf2dbg variant frag
802 based on the current values of the symbols. It is called before
803 the relaxation loop. We set fr_subtype to the expected length. */
806 dwarf2dbg_estimate_size_before_relax (frag
)
812 addr_delta
= resolve_symbol_value (frag
->fr_symbol
);
813 size
= size_inc_line_addr (frag
->fr_offset
, addr_delta
);
815 frag
->fr_subtype
= size
;
820 /* This function relaxes a rs_dwarf2dbg variant frag based on the
821 current values of the symbols. fr_subtype is the current length
822 of the frag. This returns the change in frag length. */
825 dwarf2dbg_relax_frag (frag
)
828 int old_size
, new_size
;
830 old_size
= frag
->fr_subtype
;
831 new_size
= dwarf2dbg_estimate_size_before_relax (frag
);
833 return new_size
- old_size
;
836 /* This function converts a rs_dwarf2dbg variant frag into a normal
837 fill frag. This is called after all relaxation has been done.
838 fr_subtype will be the desired length of the frag. */
841 dwarf2dbg_convert_frag (frag
)
846 addr_diff
= resolve_symbol_value (frag
->fr_symbol
);
848 /* fr_var carries the max_chars that we created the fragment with.
849 fr_subtype carries the current expected length. We must, of
850 course, have allocated enough memory earlier. */
851 assert (frag
->fr_var
>= (int) frag
->fr_subtype
);
853 emit_inc_line_addr (frag
->fr_offset
, addr_diff
,
854 frag
->fr_literal
+ frag
->fr_fix
, frag
->fr_subtype
);
856 frag
->fr_fix
+= frag
->fr_subtype
;
857 frag
->fr_type
= rs_fill
;
862 /* Generate .debug_line content for the chain of line number entries
863 beginning at E, for segment SEG. */
866 process_entries (seg
, e
)
868 struct line_entry
*e
;
870 unsigned filenum
= 1;
873 unsigned flags
= DWARF2_LINE_DEFAULT_IS_STMT
? DWARF2_FLAG_BEGIN_STMT
: 0;
876 addressT frag_ofs
= 0;
877 addressT last_frag_ofs
;
878 struct line_entry
*next
;
884 if (filenum
!= e
->loc
.filenum
)
886 filenum
= e
->loc
.filenum
;
887 out_opcode (DW_LNS_set_file
);
888 out_uleb128 (filenum
);
892 if (column
!= e
->loc
.column
)
894 column
= e
->loc
.column
;
895 out_opcode (DW_LNS_set_column
);
896 out_uleb128 (column
);
900 if ((e
->loc
.flags
^ flags
) & DWARF2_FLAG_BEGIN_STMT
)
902 flags
= e
->loc
.flags
;
903 out_opcode (DW_LNS_negate_stmt
);
907 if (e
->loc
.flags
& DWARF2_FLAG_BEGIN_BLOCK
)
909 out_opcode (DW_LNS_set_basic_block
);
913 /* Don't try to optimize away redundant entries; gdb wants two
914 entries for a function where the code starts on the same line as
915 the {, and there's no way to identify that case here. Trust gcc
916 to optimize appropriately. */
917 if (1 /* line != e->loc.line || changed */)
919 int line_delta
= e
->loc
.line
- line
;
922 out_set_addr (seg
, e
->frag
, e
->frag_ofs
);
923 out_inc_line_addr (line_delta
, 0);
925 else if (frag
== e
->frag
)
926 out_inc_line_addr (line_delta
, e
->frag_ofs
- frag_ofs
);
928 relax_inc_line_addr (line_delta
, seg
, e
->frag
, e
->frag_ofs
,
932 frag_ofs
= e
->frag_ofs
;
935 else if (frag
== NULL
)
937 out_set_addr (seg
, e
->frag
, e
->frag_ofs
);
939 frag_ofs
= e
->frag_ofs
;
947 /* Emit a DW_LNE_end_sequence for the end of the section. */
948 last_frag
= last_frag_for_seg (seg
);
949 last_frag_ofs
= get_frag_fix (last_frag
);
950 if (frag
== last_frag
)
951 out_inc_line_addr (INT_MAX
, last_frag_ofs
- frag_ofs
);
953 relax_inc_line_addr (INT_MAX
, seg
, last_frag
, last_frag_ofs
,
957 /* Emit the directory and file tables for .debug_line. */
966 /* Terminate directory list. */
969 for (i
= 1; i
< files_in_use
; ++i
)
971 if (files
[i
].filename
== NULL
)
973 as_bad (_("unassigned file number %ld"), (long) i
);
977 size
= strlen (files
[i
].filename
) + 1;
978 cp
= frag_more (size
);
979 memcpy (cp
, files
[i
].filename
, size
);
981 out_uleb128 (files
[i
].dir
); /* directory number */
982 out_uleb128 (0); /* last modification timestamp */
983 out_uleb128 (0); /* filesize */
986 /* Terminate filename list. */
990 /* Emit the collected .debug_line data. */
993 out_debug_line (line_seg
)
998 symbolS
*prologue_end
;
1002 subseg_set (line_seg
, 0);
1004 line_start
= symbol_new_now ();
1005 prologue_end
= symbol_make (fake_label_name
);
1006 line_end
= symbol_make (fake_label_name
);
1008 /* Total length of the information for this compilation unit. */
1009 expr
.X_op
= O_subtract
;
1010 expr
.X_add_symbol
= line_end
;
1011 expr
.X_op_symbol
= line_start
;
1012 expr
.X_add_number
= -4;
1013 emit_expr (&expr
, 4);
1018 /* Length of the prologue following this length. */
1019 expr
.X_op
= O_subtract
;
1020 expr
.X_add_symbol
= prologue_end
;
1021 expr
.X_op_symbol
= line_start
;
1022 expr
.X_add_number
= - (4 + 2 + 4);
1023 emit_expr (&expr
, 4);
1025 /* Parameters of the state machine. */
1026 out_byte (DWARF2_LINE_MIN_INSN_LENGTH
);
1027 out_byte (DWARF2_LINE_DEFAULT_IS_STMT
);
1028 out_byte (DWARF2_LINE_BASE
);
1029 out_byte (DWARF2_LINE_RANGE
);
1030 out_byte (DWARF2_LINE_OPCODE_BASE
);
1032 /* Standard opcode lengths. */
1033 out_byte (0); /* DW_LNS_copy */
1034 out_byte (1); /* DW_LNS_advance_pc */
1035 out_byte (1); /* DW_LNS_advance_line */
1036 out_byte (1); /* DW_LNS_set_file */
1037 out_byte (1); /* DW_LNS_set_column */
1038 out_byte (0); /* DW_LNS_negate_stmt */
1039 out_byte (0); /* DW_LNS_set_basic_block */
1040 out_byte (0); /* DW_LNS_const_add_pc */
1041 out_byte (1); /* DW_LNS_fixed_advance_pc */
1045 set_symbol_value_now (prologue_end
);
1047 /* For each section, emit a statement program. */
1048 for (s
= all_segs
; s
; s
= s
->next
)
1049 process_entries (s
->seg
, s
->head
->head
);
1051 set_symbol_value_now (line_end
);
1054 /* Emit data for .debug_aranges. */
1057 out_debug_aranges (aranges_seg
, info_seg
)
1061 unsigned int addr_size
= sizeof_address
;
1062 addressT size
, skip
;
1067 size
= 4 + 2 + 4 + 1 + 1;
1069 skip
= 2 * addr_size
- (size
& (2 * addr_size
- 1));
1070 if (skip
== 2 * addr_size
)
1074 for (s
= all_segs
; s
; s
= s
->next
)
1075 size
+= 2 * addr_size
;
1077 size
+= 2 * addr_size
;
1079 subseg_set (aranges_seg
, 0);
1081 /* Length of the compilation unit. */
1082 out_four (size
- 4);
1087 /* Offset to .debug_info. */
1088 expr
.X_op
= O_symbol
;
1089 expr
.X_add_symbol
= section_symbol (info_seg
);
1090 expr
.X_add_number
= 0;
1091 emit_expr (&expr
, 4);
1093 /* Size of an address (offset portion). */
1094 out_byte (addr_size
);
1096 /* Size of a segment descriptor. */
1099 /* Align the header. */
1101 frag_align (ffs (2 * addr_size
) - 1, 0, 0);
1103 for (s
= all_segs
; s
; s
= s
->next
)
1108 frag
= first_frag_for_seg (s
->seg
);
1109 beg
= symbol_new (fake_label_name
, s
->seg
, 0, frag
);
1110 s
->text_start
= beg
;
1112 frag
= last_frag_for_seg (s
->seg
);
1113 end
= symbol_new (fake_label_name
, s
->seg
, get_frag_fix (frag
), frag
);
1116 expr
.X_op
= O_symbol
;
1117 expr
.X_add_symbol
= beg
;
1118 expr
.X_add_number
= 0;
1119 emit_expr (&expr
, addr_size
);
1121 expr
.X_op
= O_subtract
;
1122 expr
.X_add_symbol
= end
;
1123 expr
.X_op_symbol
= beg
;
1124 expr
.X_add_number
= 0;
1125 emit_expr (&expr
, addr_size
);
1128 p
= frag_more (2 * addr_size
);
1129 md_number_to_chars (p
, 0, addr_size
);
1130 md_number_to_chars (p
+ addr_size
, 0, addr_size
);
1133 /* Emit data for .debug_abbrev. Note that this must be kept in
1134 sync with out_debug_info below. */
1137 out_debug_abbrev (abbrev_seg
)
1140 subseg_set (abbrev_seg
, 0);
1143 out_uleb128 (DW_TAG_compile_unit
);
1144 out_byte (DW_CHILDREN_no
);
1145 out_abbrev (DW_AT_stmt_list
, DW_FORM_data4
);
1146 if (all_segs
->next
== NULL
)
1148 out_abbrev (DW_AT_low_pc
, DW_FORM_addr
);
1149 out_abbrev (DW_AT_high_pc
, DW_FORM_addr
);
1151 out_abbrev (DW_AT_comp_dir
, DW_FORM_string
);
1152 out_abbrev (DW_AT_producer
, DW_FORM_string
);
1153 out_abbrev (DW_AT_language
, DW_FORM_data2
);
1156 /* Terminate the abbreviations for this compilation unit. */
1160 /* Emit a description of this compilation unit for .debug_info. */
1163 out_debug_info (info_seg
, abbrev_seg
, line_seg
)
1171 symbolS
*info_start
;
1176 subseg_set (info_seg
, 0);
1178 info_start
= symbol_new_now ();
1179 info_end
= symbol_make (fake_label_name
);
1181 /* Compilation Unit length. */
1182 expr
.X_op
= O_subtract
;
1183 expr
.X_add_symbol
= info_end
;
1184 expr
.X_op_symbol
= info_start
;
1185 expr
.X_add_number
= -4;
1186 emit_expr (&expr
, 4);
1188 /* DWARF version. */
1191 /* .debug_abbrev offset */
1192 expr
.X_op
= O_symbol
;
1193 expr
.X_add_symbol
= section_symbol (abbrev_seg
);
1194 expr
.X_add_number
= 0;
1195 emit_expr (&expr
, 4);
1197 /* Target address size. */
1198 out_byte (sizeof_address
);
1200 /* DW_TAG_compile_unit DIE abbrev */
1203 /* DW_AT_stmt_list */
1204 expr
.X_op
= O_symbol
;
1205 expr
.X_add_symbol
= section_symbol (line_seg
);
1206 expr
.X_add_number
= 0;
1207 emit_expr (&expr
, 4);
1209 /* These two attributes may only be emitted if all of the code is
1210 contiguous. Multiple sections are not that. */
1211 if (all_segs
->next
== NULL
)
1214 expr
.X_op
= O_symbol
;
1215 expr
.X_add_symbol
= all_segs
->text_start
;
1216 expr
.X_add_number
= 0;
1217 emit_expr (&expr
, sizeof_address
);
1220 expr
.X_op
= O_symbol
;
1221 expr
.X_add_symbol
= all_segs
->text_end
;
1222 expr
.X_add_number
= 0;
1223 emit_expr (&expr
, sizeof_address
);
1226 /* DW_AT_comp_dir */
1227 comp_dir
= getpwd ();
1228 len
= strlen (comp_dir
) + 1;
1229 p
= frag_more (len
);
1230 memcpy (p
, comp_dir
, len
);
1232 /* DW_AT_producer */
1233 sprintf (producer
, "GNU AS %s", VERSION
);
1234 len
= strlen (producer
) + 1;
1235 p
= frag_more (len
);
1236 memcpy (p
, producer
, len
);
1238 /* DW_AT_language. Yes, this is probably not really MIPS, but the
1239 dwarf2 draft has no standard code for assembler. */
1240 out_two (DW_LANG_Mips_Assembler
);
1242 set_symbol_value_now (info_end
);
1251 /* We don't need to do anything unless:
1252 - Some debug information was recorded via .file/.loc
1253 - or, we are generating DWARF2 information ourself (--gdwarf2)
1254 - or, there is a user-provided .debug_info section which could
1255 reference the file table in the .debug_line section we generate
1257 if (all_segs
== NULL
1258 && debug_type
!= DEBUG_DWARF2
1259 && bfd_get_section_by_name (stdoutput
, ".debug_info") == NULL
)
1262 /* Calculate the size of an address for the target machine. */
1263 sizeof_address
= bfd_arch_bits_per_address (stdoutput
) / 8;
1265 /* Create and switch to the line number section. */
1266 line_seg
= subseg_new (".debug_line", 0);
1267 bfd_set_section_flags (stdoutput
, line_seg
, SEC_READONLY
);
1269 /* For each subsection, chain the debug entries together. */
1270 for (s
= all_segs
; s
; s
= s
->next
)
1272 struct line_subseg
*ss
= s
->head
;
1273 struct line_entry
**ptail
= ss
->ptail
;
1275 while ((ss
= ss
->next
) != NULL
)
1282 out_debug_line (line_seg
);
1284 /* If this is assembler generated line info, we need .debug_info
1285 and .debug_abbrev sections as well. */
1286 if (all_segs
!= NULL
&& debug_type
== DEBUG_DWARF2
)
1292 info_seg
= subseg_new (".debug_info", 0);
1293 abbrev_seg
= subseg_new (".debug_abbrev", 0);
1294 aranges_seg
= subseg_new (".debug_aranges", 0);
1296 bfd_set_section_flags (stdoutput
, info_seg
, SEC_READONLY
);
1297 bfd_set_section_flags (stdoutput
, abbrev_seg
, SEC_READONLY
);
1298 bfd_set_section_flags (stdoutput
, aranges_seg
, SEC_READONLY
);
1300 record_alignment (aranges_seg
, ffs (2 * sizeof_address
) - 1);
1302 out_debug_aranges (aranges_seg
, info_seg
);
1303 out_debug_abbrev (abbrev_seg
);
1304 out_debug_info (info_seg
, abbrev_seg
, line_seg
);
1315 dwarf2dbg_estimate_size_before_relax (frag
)
1316 fragS
*frag ATTRIBUTE_UNUSED
;
1318 as_fatal (_("dwarf2 is not supported for this object file format"));
1323 dwarf2dbg_relax_frag (frag
)
1324 fragS
*frag ATTRIBUTE_UNUSED
;
1326 as_fatal (_("dwarf2 is not supported for this object file format"));
1331 dwarf2dbg_convert_frag (frag
)
1332 fragS
*frag ATTRIBUTE_UNUSED
;
1334 as_fatal (_("dwarf2 is not supported for this object file format"));
1338 dwarf2_emit_insn (size
)
1339 int size ATTRIBUTE_UNUSED
;
1344 dwarf2_directive_file (dummy
)
1345 int dummy ATTRIBUTE_UNUSED
;
1351 dwarf2_directive_loc (dummy
)
1352 int dummy ATTRIBUTE_UNUSED
;
1354 as_fatal (_("dwarf2 is not supported for this object file format"));
1356 #endif /* BFD_ASSEMBLER */