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>
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"
45 #include <filenames.h>
48 # define DWARF2_FORMAT() dwarf2_format_32bit
51 #ifndef DWARF2_ADDR_SIZE
52 # define DWARF2_ADDR_SIZE(bfd) (bfd_arch_bits_per_address (bfd) / 8);
55 #ifndef TC_DWARF2_EMIT_OFFSET
56 # define TC_DWARF2_EMIT_OFFSET generic_dwarf2_emit_offset
63 #include "elf/dwarf2.h"
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"). */
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
77 #define DWARF2_LINE_OPCODE_BASE 10
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
85 /* Range of line offsets in a special line info. opcode. */
86 #ifndef DWARF2_LINE_RANGE
87 # define DWARF2_LINE_RANGE 14
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
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
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)
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)
110 /* The maximum address skip amount that can be encoded with a special op. */
111 #define MAX_SPECIAL_ADDR_DELTA SPECIAL_ADDR(255)
114 struct line_entry
*next
;
117 struct dwarf2_line_info loc
;
121 struct line_subseg
*next
;
123 struct line_entry
*head
;
124 struct line_entry
**ptail
;
128 struct line_seg
*next
;
130 struct line_subseg
*head
;
135 /* Collects data for all line table entries during assembly. */
136 static struct line_seg
*all_segs
;
139 const char *filename
;
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
;
148 /* Table of directories used by .debug_line. */
150 static unsigned int dirs_in_use
;
151 static unsigned int dirs_allocated
;
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
;
157 /* Current location as indicated by the most recent .loc directive. */
158 static struct dwarf2_line_info current
;
160 /* Fake label name. */
161 static char const fake_label_name
[] = ".L0\001";
163 /* The size of an address on the target. */
164 static unsigned int sizeof_address
;
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
,
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
));
193 /* Create an offset to .dwarf2_*. */
196 generic_dwarf2_emit_offset (symbol
, size
)
202 expr
.X_op
= O_symbol
;
203 expr
.X_add_symbol
= symbol
;
204 expr
.X_add_number
= 0;
205 emit_expr (&expr
, size
);
208 /* Find or create an entry for SEG+SUBSEG in ALL_SEGS. */
210 static struct line_subseg
*
211 get_line_subseg (seg
, subseg
)
215 static segT last_seg
;
216 static subsegT last_subseg
;
217 static struct line_subseg
*last_line_subseg
;
220 struct line_subseg
**pss
, *ss
;
222 if (seg
== last_seg
&& subseg
== last_subseg
)
223 return last_line_subseg
;
225 for (s
= all_segs
; s
; s
= s
->next
)
229 s
= (struct line_seg
*) xmalloc (sizeof (*s
));
236 for (pss
= &s
->head
; (ss
= *pss
) != NULL
; pss
= &ss
->next
)
238 if (ss
->subseg
== subseg
)
240 if (ss
->subseg
> subseg
)
244 ss
= (struct line_subseg
*) xmalloc (sizeof (*ss
));
248 ss
->ptail
= &ss
->head
;
253 last_subseg
= subseg
;
254 last_line_subseg
= ss
;
259 /* Record an entry for LOC ocurring at OFS within the current fragment. */
262 dwarf2_gen_line_info (ofs
, loc
)
264 struct dwarf2_line_info
*loc
;
266 struct line_subseg
*ss
;
267 struct line_entry
*e
;
268 static unsigned int line
= -1;
269 static unsigned int filenum
= -1;
271 /* Early out for as-yet incomplete location information. */
272 if (loc
->filenum
== 0 || loc
->line
== 0)
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
)
284 filenum
= loc
->filenum
;
286 e
= (struct line_entry
*) xmalloc (sizeof (*e
));
292 ss
= get_line_subseg (now_seg
, now_subseg
);
294 ss
->ptail
= &e
->next
;
299 struct dwarf2_line_info
*line
;
301 if (debug_type
== DEBUG_DWARF2
)
304 as_where (&filename
, &line
->line
);
305 line
->filenum
= get_filenum (filename
, 0);
307 line
->flags
= DWARF2_FLAG_BEGIN_STMT
;
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. */
319 dwarf2_emit_insn (size
)
322 struct dwarf2_line_info loc
;
324 if (loc_directive_seen
)
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). */
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
;
338 else if (debug_type
!= DEBUG_DWARF2
)
341 dwarf2_where (& loc
);
343 dwarf2_gen_line_info (frag_now_fix () - size
, &loc
);
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
351 get_filenum (filename
, num
)
352 const char *filename
;
355 static unsigned int last_used
, last_used_dir_len
;
360 if (num
== 0 && last_used
)
362 if (! files
[last_used
].dir
363 && strcmp (filename
, files
[last_used
].filename
) == 0)
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)
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)
380 if (file
== filename
+ 1)
383 dir_len
= file
- filename
;
389 for (dir
= 1; dir
< dirs_in_use
; ++dir
)
390 if (memcmp (filename
, dirs
[dir
], dir_len
) == 0
391 && dirs
[dir
][dir_len
] == '\0')
394 if (dir
>= dirs_in_use
)
396 if (dir
>= dirs_allocated
)
398 dirs_allocated
= dir
+ 32;
400 xrealloc (dirs
, (dir
+ 32) * sizeof (const char *));
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;
412 for (i
= 1; i
< files_in_use
; ++i
)
413 if (files
[i
].dir
== dir
414 && strcmp (file
, files
[i
].filename
) == 0)
417 last_used_dir_len
= dir_len
;
424 if (i
>= files_allocated
)
426 unsigned int old
= files_allocated
;
428 files_allocated
= i
+ 32;
429 files
= (struct file_entry
*)
430 xrealloc (files
, (i
+ 32) * sizeof (struct file_entry
));
432 memset (files
+ old
, 0, (i
+ 32 - old
) * sizeof (struct file_entry
));
435 files
[i
].filename
= num
? file
: xstrdup (file
);
437 files_in_use
= i
+ 1;
439 last_used_dir_len
= dir_len
;
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
448 If an entry is added to the file table, return a pointer to the filename. */
451 dwarf2_directive_file (dummy
)
452 int dummy ATTRIBUTE_UNUSED
;
458 /* Continue to accept a bare string and pass it off. */
460 if (*input_line_pointer
== '"')
466 num
= get_absolute_expression ();
467 filename
= demand_copy_C_string (&filename_len
);
468 demand_empty_rest_of_line ();
472 as_bad (_("file number less than one"));
476 if (num
< (int) files_in_use
&& files
[num
].filename
!= 0)
478 as_bad (_("file number %ld already allocated"), (long) num
);
482 get_filenum (filename
, num
);
488 dwarf2_directive_loc (dummy
)
489 int dummy ATTRIBUTE_UNUSED
;
491 offsetT filenum
, line
, column
;
493 filenum
= get_absolute_expression ();
495 line
= get_absolute_expression ();
497 column
= get_absolute_expression ();
498 demand_empty_rest_of_line ();
502 as_bad (_("file number less than one"));
505 if (filenum
>= (int) files_in_use
|| files
[filenum
].filename
== 0)
507 as_bad (_("unassigned file number %ld"), (long) filenum
);
511 current
.filenum
= filenum
;
513 current
.column
= column
;
514 current
.flags
= DWARF2_FLAG_BEGIN_STMT
;
516 loc_directive_seen
= TRUE
;
521 if (files
[filenum
].dir
)
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);
527 memcpy (cp
, dirs
[files
[filenum
].dir
], 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
);
534 listing_source_file (files
[filenum
].filename
);
535 listing_source_line (line
);
541 first_frag_for_seg (seg
)
544 frchainS
*f
, *first
= NULL
;
546 for (f
= frchain_root
; f
; f
= f
->frch_next
)
547 if (f
->frch_seg
== seg
548 && (! first
|| first
->frch_subseg
> f
->frch_subseg
))
551 return first
? first
->frch_root
: NULL
;
555 last_frag_for_seg (seg
)
558 frchainS
*f
, *last
= NULL
;
560 for (f
= frchain_root
; f
; f
= f
->frch_next
)
561 if (f
->frch_seg
== seg
562 && (! last
|| last
->frch_subseg
< f
->frch_subseg
))
565 return last
? last
->frch_last
: NULL
;
568 /* Emit a single byte into the current segment. */
574 FRAG_APPEND_1_CHAR (byte
);
577 /* Emit a statement program opcode into the current segment. */
586 /* Emit a two-byte word into the current segment. */
592 md_number_to_chars (frag_more (2), data
, 2);
595 /* Emit a four byte word into the current segment. */
601 md_number_to_chars (frag_more (4), data
, 4);
604 /* Emit an unsigned "little-endian base 128" number. */
610 output_leb128 (frag_more (sizeof_leb128 (value
, 0)), value
, 0);
613 /* Emit a tuple for .debug_abbrev. */
616 out_abbrev (name
, form
)
623 /* Create a new fake symbol whose value is the current position. */
628 return symbol_new (fake_label_name
, now_seg
, frag_now_fix (), frag_now
);
631 /* Set the value of SYM to the current position in the current segment. */
634 set_symbol_value_now (sym
)
637 S_SET_SEGMENT (sym
, now_seg
);
638 S_SET_VALUE (sym
, frag_now_fix ());
639 symbol_set_frag (sym
, frag_now
);
642 /* Get the size of a fragment. */
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
)
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
;
667 /* Set an absolute address (may result in a relocation entry). */
670 out_set_addr (seg
, frag
, ofs
)
678 sym
= symbol_new (fake_label_name
, seg
, ofs
, frag
);
680 out_opcode (DW_LNS_extended_op
);
681 out_uleb128 (sizeof_address
+ 1);
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
);
690 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
691 static void scale_addr_delta
PARAMS ((addressT
*));
694 scale_addr_delta (addr_delta
)
695 addressT
*addr_delta
;
697 static int printed_this
= 0;
698 if (*addr_delta
% DWARF2_LINE_MIN_INSN_LENGTH
!= 0)
701 as_bad("unaligned opcodes detected in executable segment");
704 *addr_delta
/= DWARF2_LINE_MIN_INSN_LENGTH
;
707 #define scale_addr_delta(A)
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.
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. */
718 size_inc_line_addr (line_delta
, addr_delta
)
722 unsigned int tmp
, opcode
;
725 /* Scale the address delta by the minimum instruction length. */
726 scale_addr_delta (&addr_delta
);
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
)
733 if (addr_delta
== MAX_SPECIAL_ADDR_DELTA
)
736 len
= 1 + sizeof_leb128 (addr_delta
, 0);
740 /* Bias the line delta by the base. */
741 tmp
= line_delta
- DWARF2_LINE_BASE
;
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
)
747 len
= 1 + sizeof_leb128 (line_delta
, 1);
749 tmp
= 0 - DWARF2_LINE_BASE
;
752 /* Bias the opcode by the special opcode base. */
753 tmp
+= DWARF2_LINE_OPCODE_BASE
;
755 /* Avoid overflow when addr_delta is large. */
756 if (addr_delta
< 256 + MAX_SPECIAL_ADDR_DELTA
)
758 /* Try using a special opcode. */
759 opcode
= tmp
+ addr_delta
* DWARF2_LINE_RANGE
;
763 /* Try using DW_LNS_const_add_pc followed by special op. */
764 opcode
= tmp
+ (addr_delta
- MAX_SPECIAL_ADDR_DELTA
) * DWARF2_LINE_RANGE
;
769 /* Otherwise use DW_LNS_advance_pc. */
770 len
+= 1 + sizeof_leb128 (addr_delta
, 0);
772 /* DW_LNS_copy or special opcode. */
779 emit_inc_line_addr (line_delta
, addr_delta
, p
, len
)
785 unsigned int tmp
, opcode
;
789 /* Scale the address delta by the minimum instruction length. */
790 scale_addr_delta (&addr_delta
);
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
)
797 if (addr_delta
== MAX_SPECIAL_ADDR_DELTA
)
798 *p
++ = DW_LNS_const_add_pc
;
801 *p
++ = DW_LNS_advance_pc
;
802 p
+= output_leb128 (p
, addr_delta
, 0);
805 *p
++ = DW_LNS_extended_op
;
807 *p
++ = DW_LNE_end_sequence
;
811 /* Bias the line delta by the base. */
812 tmp
= line_delta
- DWARF2_LINE_BASE
;
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
)
818 *p
++ = DW_LNS_advance_line
;
819 p
+= output_leb128 (p
, line_delta
, 1);
821 /* Prettier, I think, to use DW_LNS_copy instead of a
822 "line +0, addr +0" special opcode. */
830 tmp
= 0 - DWARF2_LINE_BASE
;
834 /* Bias the opcode by the special opcode base. */
835 tmp
+= DWARF2_LINE_OPCODE_BASE
;
837 /* Avoid overflow when addr_delta is large. */
838 if (addr_delta
< 256 + MAX_SPECIAL_ADDR_DELTA
)
840 /* Try using a special opcode. */
841 opcode
= tmp
+ addr_delta
* DWARF2_LINE_RANGE
;
848 /* Try using DW_LNS_const_add_pc followed by special op. */
849 opcode
= tmp
+ (addr_delta
- MAX_SPECIAL_ADDR_DELTA
) * DWARF2_LINE_RANGE
;
852 *p
++ = DW_LNS_const_add_pc
;
858 /* Otherwise use DW_LNS_advance_pc. */
859 *p
++ = DW_LNS_advance_pc
;
860 p
+= output_leb128 (p
, addr_delta
, 0);
871 /* Handy routine to combine calls to the above two routines. */
874 out_inc_line_addr (line_delta
, addr_delta
)
878 int len
= size_inc_line_addr (line_delta
, addr_delta
);
879 emit_inc_line_addr (line_delta
, addr_delta
, frag_more (len
), len
);
882 /* Generate a variant frag that we can use to relax address/line
883 increments between fragments of the target segment. */
886 relax_inc_line_addr (line_delta
, seg
, to_frag
, to_ofs
, from_frag
, from_ofs
)
889 fragS
*to_frag
, *from_frag
;
890 addressT to_ofs
, from_ofs
;
892 symbolS
*to_sym
, *from_sym
;
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
);
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;
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
);
908 frag_var (rs_dwarf2dbg
, max_chars
, max_chars
, 1,
909 make_expr_symbol (&expr
), line_delta
, NULL
);
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. */
917 dwarf2dbg_estimate_size_before_relax (frag
)
923 addr_delta
= resolve_symbol_value (frag
->fr_symbol
);
924 size
= size_inc_line_addr (frag
->fr_offset
, addr_delta
);
926 frag
->fr_subtype
= size
;
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. */
936 dwarf2dbg_relax_frag (frag
)
939 int old_size
, new_size
;
941 old_size
= frag
->fr_subtype
;
942 new_size
= dwarf2dbg_estimate_size_before_relax (frag
);
944 return new_size
- old_size
;
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. */
952 dwarf2dbg_convert_frag (frag
)
957 addr_diff
= resolve_symbol_value (frag
->fr_symbol
);
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
);
964 emit_inc_line_addr (frag
->fr_offset
, addr_diff
,
965 frag
->fr_literal
+ frag
->fr_fix
, frag
->fr_subtype
);
967 frag
->fr_fix
+= frag
->fr_subtype
;
968 frag
->fr_type
= rs_fill
;
973 /* Generate .debug_line content for the chain of line number entries
974 beginning at E, for segment SEG. */
977 process_entries (seg
, e
)
979 struct line_entry
*e
;
981 unsigned filenum
= 1;
984 unsigned flags
= DWARF2_LINE_DEFAULT_IS_STMT
? DWARF2_FLAG_BEGIN_STMT
: 0;
987 addressT frag_ofs
= 0;
988 addressT last_frag_ofs
;
989 struct line_entry
*next
;
995 if (filenum
!= e
->loc
.filenum
)
997 filenum
= e
->loc
.filenum
;
998 out_opcode (DW_LNS_set_file
);
999 out_uleb128 (filenum
);
1003 if (column
!= e
->loc
.column
)
1005 column
= e
->loc
.column
;
1006 out_opcode (DW_LNS_set_column
);
1007 out_uleb128 (column
);
1011 if ((e
->loc
.flags
^ flags
) & DWARF2_FLAG_BEGIN_STMT
)
1013 flags
= e
->loc
.flags
;
1014 out_opcode (DW_LNS_negate_stmt
);
1018 if (e
->loc
.flags
& DWARF2_FLAG_BEGIN_BLOCK
)
1020 out_opcode (DW_LNS_set_basic_block
);
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 */)
1030 int line_delta
= e
->loc
.line
- line
;
1033 out_set_addr (seg
, e
->frag
, e
->frag_ofs
);
1034 out_inc_line_addr (line_delta
, 0);
1036 else if (frag
== e
->frag
)
1037 out_inc_line_addr (line_delta
, e
->frag_ofs
- frag_ofs
);
1039 relax_inc_line_addr (line_delta
, seg
, e
->frag
, e
->frag_ofs
,
1043 frag_ofs
= e
->frag_ofs
;
1046 else if (frag
== NULL
)
1048 out_set_addr (seg
, e
->frag
, e
->frag_ofs
);
1050 frag_ofs
= e
->frag_ofs
;
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
);
1064 relax_inc_line_addr (INT_MAX
, seg
, last_frag
, last_frag_ofs
,
1068 /* Emit the directory and file tables for .debug_line. */
1077 /* Emit directory list. */
1078 for (i
= 1; i
< dirs_in_use
; ++i
)
1080 size
= strlen (dirs
[i
]) + 1;
1081 cp
= frag_more (size
);
1082 memcpy (cp
, dirs
[i
], size
);
1087 for (i
= 1; i
< files_in_use
; ++i
)
1089 if (files
[i
].filename
== NULL
)
1091 as_bad (_("unassigned file number %ld"), (long) i
);
1095 size
= strlen (files
[i
].filename
) + 1;
1096 cp
= frag_more (size
);
1097 memcpy (cp
, files
[i
].filename
, size
);
1099 out_uleb128 (files
[i
].dir
); /* directory number */
1100 out_uleb128 (0); /* last modification timestamp */
1101 out_uleb128 (0); /* filesize */
1104 /* Terminate filename list. */
1108 /* Emit the collected .debug_line data. */
1111 out_debug_line (line_seg
)
1115 symbolS
*line_start
;
1116 symbolS
*prologue_end
;
1119 enum dwarf2_format d2f
;
1122 subseg_set (line_seg
, 0);
1124 line_start
= symbol_new_now ();
1125 prologue_end
= symbol_make (fake_label_name
);
1126 line_end
= symbol_make (fake_label_name
);
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
;
1133 d2f
= DWARF2_FORMAT ();
1134 if (d2f
== dwarf2_format_32bit
)
1136 expr
.X_add_number
= -4;
1137 emit_expr (&expr
, 4);
1140 else if (d2f
== dwarf2_format_64bit
)
1142 expr
.X_add_number
= -12;
1144 emit_expr (&expr
, 8);
1147 else if (d2f
== dwarf2_format_64bit_irix
)
1149 expr
.X_add_number
= -8;
1150 emit_expr (&expr
, 8);
1155 as_fatal (_("internal error: unknown dwarf2 format"));
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
);
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
);
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 */
1188 set_symbol_value_now (prologue_end
);
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
);
1194 set_symbol_value_now (line_end
);
1197 /* Emit data for .debug_aranges. */
1200 out_debug_aranges (aranges_seg
, info_seg
)
1204 unsigned int addr_size
= sizeof_address
;
1205 addressT size
, skip
;
1210 size
= 4 + 2 + 4 + 1 + 1;
1212 skip
= 2 * addr_size
- (size
& (2 * addr_size
- 1));
1213 if (skip
== 2 * addr_size
)
1217 for (s
= all_segs
; s
; s
= s
->next
)
1218 size
+= 2 * addr_size
;
1220 size
+= 2 * addr_size
;
1222 subseg_set (aranges_seg
, 0);
1224 /* Length of the compilation unit. */
1225 out_four (size
- 4);
1230 /* Offset to .debug_info. */
1231 /* ??? sizeof_offset */
1232 TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg
), 4);
1234 /* Size of an address (offset portion). */
1235 out_byte (addr_size
);
1237 /* Size of a segment descriptor. */
1240 /* Align the header. */
1242 frag_align (ffs (2 * addr_size
) - 1, 0, 0);
1244 for (s
= all_segs
; s
; s
= s
->next
)
1249 frag
= first_frag_for_seg (s
->seg
);
1250 beg
= symbol_new (fake_label_name
, s
->seg
, 0, frag
);
1251 s
->text_start
= beg
;
1253 frag
= last_frag_for_seg (s
->seg
);
1254 end
= symbol_new (fake_label_name
, s
->seg
, get_frag_fix (frag
), frag
);
1257 expr
.X_op
= O_symbol
;
1258 expr
.X_add_symbol
= beg
;
1259 expr
.X_add_number
= 0;
1260 emit_expr (&expr
, addr_size
);
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
);
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
);
1274 /* Emit data for .debug_abbrev. Note that this must be kept in
1275 sync with out_debug_info below. */
1278 out_debug_abbrev (abbrev_seg
)
1281 subseg_set (abbrev_seg
, 0);
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
)
1289 out_abbrev (DW_AT_low_pc
, DW_FORM_addr
);
1290 out_abbrev (DW_AT_high_pc
, DW_FORM_addr
);
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
);
1298 /* Terminate the abbreviations for this compilation unit. */
1302 /* Emit a description of this compilation unit for .debug_info. */
1305 out_debug_info (info_seg
, abbrev_seg
, line_seg
)
1313 symbolS
*info_start
;
1317 enum dwarf2_format d2f
;
1320 subseg_set (info_seg
, 0);
1322 info_start
= symbol_new_now ();
1323 info_end
= symbol_make (fake_label_name
);
1325 /* Compilation Unit length. */
1326 expr
.X_op
= O_subtract
;
1327 expr
.X_add_symbol
= info_end
;
1328 expr
.X_op_symbol
= info_start
;
1330 d2f
= DWARF2_FORMAT ();
1331 if (d2f
== dwarf2_format_32bit
)
1333 expr
.X_add_number
= -4;
1334 emit_expr (&expr
, 4);
1337 else if (d2f
== dwarf2_format_64bit
)
1339 expr
.X_add_number
= -12;
1341 emit_expr (&expr
, 8);
1344 else if (d2f
== dwarf2_format_64bit_irix
)
1346 expr
.X_add_number
= -8;
1347 emit_expr (&expr
, 8);
1352 as_fatal (_("internal error: unknown dwarf2 format"));
1355 /* DWARF version. */
1358 /* .debug_abbrev offset */
1359 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg
), sizeof_offset
);
1361 /* Target address size. */
1362 out_byte (sizeof_address
);
1364 /* DW_TAG_compile_unit DIE abbrev */
1367 /* DW_AT_stmt_list */
1368 /* ??? sizeof_offset */
1369 TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg
), 4);
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
)
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
);
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
);
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)
1396 len
= strlen (dirs
[files
[1].dir
]);
1397 p
= frag_more (len
+ 1);
1398 memcpy (p
, dirs
[files
[1].dir
], len
);
1401 len
= strlen (files
[1].filename
) + 1;
1402 p
= frag_more (len
);
1403 memcpy (p
, files
[1].filename
, len
);
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
);
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
);
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
);
1421 set_symbol_value_now (info_end
);
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
1436 if (all_segs
== NULL
1437 && debug_type
!= DEBUG_DWARF2
1438 && bfd_get_section_by_name (stdoutput
, ".debug_info") == NULL
)
1441 /* Calculate the size of an address for the target machine. */
1442 sizeof_address
= DWARF2_ADDR_SIZE (stdoutput
);
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
);
1448 /* For each subsection, chain the debug entries together. */
1449 for (s
= all_segs
; s
; s
= s
->next
)
1451 struct line_subseg
*ss
= s
->head
;
1452 struct line_entry
**ptail
= ss
->ptail
;
1454 while ((ss
= ss
->next
) != NULL
)
1461 out_debug_line (line_seg
);
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
)
1471 info_seg
= subseg_new (".debug_info", 0);
1472 abbrev_seg
= subseg_new (".debug_abbrev", 0);
1473 aranges_seg
= subseg_new (".debug_aranges", 0);
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
);
1479 record_alignment (aranges_seg
, ffs (2 * sizeof_address
) - 1);
1481 out_debug_aranges (aranges_seg
, info_seg
);
1482 out_debug_abbrev (abbrev_seg
);
1483 out_debug_info (info_seg
, abbrev_seg
, line_seg
);
1494 dwarf2dbg_estimate_size_before_relax (frag
)
1495 fragS
*frag ATTRIBUTE_UNUSED
;
1497 as_fatal (_("dwarf2 is not supported for this object file format"));
1502 dwarf2dbg_relax_frag (frag
)
1503 fragS
*frag ATTRIBUTE_UNUSED
;
1505 as_fatal (_("dwarf2 is not supported for this object file format"));
1510 dwarf2dbg_convert_frag (frag
)
1511 fragS
*frag ATTRIBUTE_UNUSED
;
1513 as_fatal (_("dwarf2 is not supported for this object file format"));
1517 dwarf2_emit_insn (size
)
1518 int size ATTRIBUTE_UNUSED
;
1523 dwarf2_directive_file (dummy
)
1524 int dummy ATTRIBUTE_UNUSED
;
1531 dwarf2_directive_loc (dummy
)
1532 int dummy ATTRIBUTE_UNUSED
;
1534 as_fatal (_("dwarf2 is not supported for this object file format"));
1536 #endif /* BFD_ASSEMBLER */