1 /* dwarf2dbg.c - DWARF2 debug support
2 Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
3 Free Software Foundation, Inc.
4 Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
6 This file is part of GAS, the GNU Assembler.
8 GAS is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
13 GAS is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GAS; see the file COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
23 /* Logical line numbers can be controlled by the compiler via the
27 .loc FILENO LINENO [COLUMN] [basic_block] [prologue_end] \
28 [epilogue_begin] [is_stmt VALUE] [isa VALUE] \
33 #include "safe-ctype.h"
38 #ifdef HAVE_SYS_PARAM_H
39 #include <sys/param.h>
42 #define INT_MAX (int) (((unsigned) (-1)) >> 1)
46 #include "dwarf2dbg.h"
47 #include <filenames.h>
49 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
50 /* We need to decide which character to use as a directory separator.
51 Just because HAVE_DOS_BASED_FILE_SYSTEM is defined, it does not
52 necessarily mean that the backslash character is the one to use.
53 Some environments, eg Cygwin, can support both naming conventions.
54 So we use the heuristic that we only need to use the backslash if
55 the path is an absolute path starting with a DOS style drive
56 selector. eg C: or D: */
57 # define INSERT_DIR_SEPARATOR(string, offset) \
62 && string[1] == ':') \
63 string [offset] = '\\'; \
65 string [offset] = '/'; \
69 # define INSERT_DIR_SEPARATOR(string, offset) string[offset] = '/'
73 # define DWARF2_FORMAT(SEC) dwarf2_format_32bit
76 #ifndef DWARF2_ADDR_SIZE
77 # define DWARF2_ADDR_SIZE(bfd) (bfd_arch_bits_per_address (bfd) / 8)
80 #ifndef DWARF2_FILE_NAME
81 #define DWARF2_FILE_NAME(FILENAME, DIRNAME) FILENAME
84 #ifndef DWARF2_FILE_TIME_NAME
85 #define DWARF2_FILE_TIME_NAME(FILENAME,DIRNAME) 0
88 #ifndef DWARF2_FILE_SIZE_NAME
89 #define DWARF2_FILE_SIZE_NAME(FILENAME,DIRNAME) 0
92 #ifndef DWARF2_VERSION
93 #define DWARF2_VERSION 2
100 /* Since we can't generate the prolog until the body is complete, we
101 use three different subsegments for .debug_line: one holding the
102 prolog, one for the directory and filename info, and one for the
103 body ("statement program"). */
108 /* If linker relaxation might change offsets in the code, the DWARF special
109 opcodes and variable-length operands cannot be used. If this macro is
110 nonzero, use the DW_LNS_fixed_advance_pc opcode instead. */
111 #ifndef DWARF2_USE_FIXED_ADVANCE_PC
112 # define DWARF2_USE_FIXED_ADVANCE_PC 0
115 /* First special line opcde - leave room for the standard opcodes.
116 Note: If you want to change this, you'll have to update the
117 "standard_opcode_lengths" table that is emitted below in
119 #define DWARF2_LINE_OPCODE_BASE 13
121 #ifndef DWARF2_LINE_BASE
122 /* Minimum line offset in a special line info. opcode. This value
123 was chosen to give a reasonable range of values. */
124 # define DWARF2_LINE_BASE -5
127 /* Range of line offsets in a special line info. opcode. */
128 #ifndef DWARF2_LINE_RANGE
129 # define DWARF2_LINE_RANGE 14
132 #ifndef DWARF2_LINE_MIN_INSN_LENGTH
133 /* Define the architecture-dependent minimum instruction length (in
134 bytes). This value should be rather too small than too big. */
135 # define DWARF2_LINE_MIN_INSN_LENGTH 1
138 /* Flag that indicates the initial value of the is_stmt_start flag. */
139 #define DWARF2_LINE_DEFAULT_IS_STMT 1
141 /* Given a special op, return the line skip amount. */
142 #define SPECIAL_LINE(op) \
143 (((op) - DWARF2_LINE_OPCODE_BASE)%DWARF2_LINE_RANGE + DWARF2_LINE_BASE)
145 /* Given a special op, return the address skip amount (in units of
146 DWARF2_LINE_MIN_INSN_LENGTH. */
147 #define SPECIAL_ADDR(op) (((op) - DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)
149 /* The maximum address skip amount that can be encoded with a special op. */
150 #define MAX_SPECIAL_ADDR_DELTA SPECIAL_ADDR(255)
153 struct line_entry
*next
;
155 struct dwarf2_line_info loc
;
159 struct line_subseg
*next
;
161 struct line_entry
*head
;
162 struct line_entry
**ptail
;
166 struct line_seg
*next
;
168 struct line_subseg
*head
;
173 /* Collects data for all line table entries during assembly. */
174 static struct line_seg
*all_segs
;
175 /* Hash used to quickly lookup a segment by name, avoiding the need to search
176 through the all_segs list. */
177 static struct hash_control
*all_segs_hash
;
178 static struct line_seg
**last_seg_ptr
;
181 const char *filename
;
185 /* Table of files used by .debug_line. */
186 static struct file_entry
*files
;
187 static unsigned int files_in_use
;
188 static unsigned int files_allocated
;
190 /* Table of directories used by .debug_line. */
192 static unsigned int dirs_in_use
;
193 static unsigned int dirs_allocated
;
195 /* TRUE when we've seen a .loc directive recently. Used to avoid
196 doing work when there's nothing to do. */
197 bfd_boolean dwarf2_loc_directive_seen
;
199 /* TRUE when we're supposed to set the basic block mark whenever a
201 bfd_boolean dwarf2_loc_mark_labels
;
203 /* Current location as indicated by the most recent .loc directive. */
204 static struct dwarf2_line_info current
= {
206 DWARF2_LINE_DEFAULT_IS_STMT
? DWARF2_FLAG_IS_STMT
: 0,
210 /* The size of an address on the target. */
211 static unsigned int sizeof_address
;
213 static unsigned int get_filenum (const char *, unsigned int);
215 #ifndef TC_DWARF2_EMIT_OFFSET
216 #define TC_DWARF2_EMIT_OFFSET generic_dwarf2_emit_offset
218 /* Create an offset to .dwarf2_*. */
221 generic_dwarf2_emit_offset (symbolS
*symbol
, unsigned int size
)
226 exp
.X_add_symbol
= symbol
;
227 exp
.X_add_number
= 0;
228 emit_expr (&exp
, size
);
232 /* Find or create an entry for SEG+SUBSEG in ALL_SEGS. */
234 static struct line_subseg
*
235 get_line_subseg (segT seg
, subsegT subseg
)
237 static segT last_seg
;
238 static subsegT last_subseg
;
239 static struct line_subseg
*last_line_subseg
;
242 struct line_subseg
**pss
, *lss
;
244 if (seg
== last_seg
&& subseg
== last_subseg
)
245 return last_line_subseg
;
247 s
= (struct line_seg
*) hash_find (all_segs_hash
, seg
->name
);
250 s
= (struct line_seg
*) xmalloc (sizeof (*s
));
255 last_seg_ptr
= &s
->next
;
256 hash_insert (all_segs_hash
, seg
->name
, s
);
258 gas_assert (seg
== s
->seg
);
260 for (pss
= &s
->head
; (lss
= *pss
) != NULL
; pss
= &lss
->next
)
262 if (lss
->subseg
== subseg
)
264 if (lss
->subseg
> subseg
)
268 lss
= (struct line_subseg
*) xmalloc (sizeof (*lss
));
270 lss
->subseg
= subseg
;
272 lss
->ptail
= &lss
->head
;
277 last_subseg
= subseg
;
278 last_line_subseg
= lss
;
283 /* Record an entry for LOC occurring at LABEL. */
286 dwarf2_gen_line_info_1 (symbolS
*label
, struct dwarf2_line_info
*loc
)
288 struct line_subseg
*lss
;
289 struct line_entry
*e
;
291 e
= (struct line_entry
*) xmalloc (sizeof (*e
));
296 lss
= get_line_subseg (now_seg
, now_subseg
);
298 lss
->ptail
= &e
->next
;
301 /* Record an entry for LOC occurring at OFS within the current fragment. */
304 dwarf2_gen_line_info (addressT ofs
, struct dwarf2_line_info
*loc
)
306 static unsigned int line
= -1;
307 static unsigned int filenum
= -1;
311 /* Early out for as-yet incomplete location information. */
312 if (loc
->filenum
== 0 || loc
->line
== 0)
315 /* Don't emit sequences of line symbols for the same line when the
316 symbols apply to assembler code. It is necessary to emit
317 duplicate line symbols when a compiler asks for them, because GDB
318 uses them to determine the end of the prologue. */
319 if (debug_type
== DEBUG_DWARF2
320 && line
== loc
->line
&& filenum
== loc
->filenum
)
324 filenum
= loc
->filenum
;
326 sym
= symbol_temp_new (now_seg
, ofs
, frag_now
);
327 dwarf2_gen_line_info_1 (sym
, loc
);
330 /* Returns the current source information. If .file directives have
331 been encountered, the info for the corresponding source file is
332 returned. Otherwise, the info for the assembly source file is
336 dwarf2_where (struct dwarf2_line_info
*line
)
338 if (debug_type
== DEBUG_DWARF2
)
341 as_where (&filename
, &line
->line
);
342 line
->filenum
= get_filenum (filename
, 0);
344 line
->flags
= DWARF2_FLAG_IS_STMT
;
345 line
->isa
= current
.isa
;
346 line
->discriminator
= current
.discriminator
;
352 /* A hook to allow the target backend to inform the line number state
353 machine of isa changes when assembler debug info is enabled. */
356 dwarf2_set_isa (unsigned int isa
)
361 /* Called for each machine instruction, or relatively atomic group of
362 machine instructions (ie built-in macro). The instruction or group
363 is SIZE bytes in length. If dwarf2 line number generation is called
364 for, emit a line statement appropriately. */
367 dwarf2_emit_insn (int size
)
369 struct dwarf2_line_info loc
;
371 if (!dwarf2_loc_directive_seen
&& debug_type
!= DEBUG_DWARF2
)
376 dwarf2_gen_line_info (frag_now_fix () - size
, &loc
);
377 dwarf2_consume_line_info ();
380 /* Called after the current line information has been either used with
381 dwarf2_gen_line_info or saved with a machine instruction for later use.
382 This resets the state of the line number information to reflect that
386 dwarf2_consume_line_info (void)
388 /* Unless we generate DWARF2 debugging information for each
389 assembler line, we only emit one line symbol for one LOC. */
390 dwarf2_loc_directive_seen
= FALSE
;
392 current
.flags
&= ~(DWARF2_FLAG_BASIC_BLOCK
393 | DWARF2_FLAG_PROLOGUE_END
394 | DWARF2_FLAG_EPILOGUE_BEGIN
);
395 current
.discriminator
= 0;
398 /* Called for each (preferably code) label. If dwarf2_loc_mark_labels
399 is enabled, emit a basic block marker. */
402 dwarf2_emit_label (symbolS
*label
)
404 struct dwarf2_line_info loc
;
406 if (!dwarf2_loc_mark_labels
)
408 if (S_GET_SEGMENT (label
) != now_seg
)
410 if (!(bfd_get_section_flags (stdoutput
, now_seg
) & SEC_CODE
))
412 if (files_in_use
== 0 && debug_type
!= DEBUG_DWARF2
)
417 loc
.flags
|= DWARF2_FLAG_BASIC_BLOCK
;
419 dwarf2_gen_line_info_1 (label
, &loc
);
420 dwarf2_consume_line_info ();
423 /* Get a .debug_line file number for FILENAME. If NUM is nonzero,
424 allocate it on that file table slot, otherwise return the first
428 get_filenum (const char *filename
, unsigned int num
)
430 static unsigned int last_used
, last_used_dir_len
;
435 if (num
== 0 && last_used
)
437 if (! files
[last_used
].dir
438 && filename_cmp (filename
, files
[last_used
].filename
) == 0)
440 if (files
[last_used
].dir
441 && filename_ncmp (filename
, dirs
[files
[last_used
].dir
],
442 last_used_dir_len
) == 0
443 && IS_DIR_SEPARATOR (filename
[last_used_dir_len
])
444 && filename_cmp (filename
+ last_used_dir_len
+ 1,
445 files
[last_used
].filename
) == 0)
449 file
= lbasename (filename
);
450 /* Don't make empty string from / or A: from A:/ . */
451 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
452 if (file
<= filename
+ 3)
455 if (file
== filename
+ 1)
458 dir_len
= file
- filename
;
463 #ifndef DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
466 for (dir
= 1; dir
< dirs_in_use
; ++dir
)
467 if (filename_ncmp (filename
, dirs
[dir
], dir_len
) == 0
468 && dirs
[dir
][dir_len
] == '\0')
471 if (dir
>= dirs_in_use
)
473 if (dir
>= dirs_allocated
)
475 dirs_allocated
= dir
+ 32;
477 xrealloc (dirs
, (dir
+ 32) * sizeof (const char *));
480 dirs
[dir
] = (char *) xmalloc (dir_len
+ 1);
481 memcpy (dirs
[dir
], filename
, dir_len
);
482 dirs
[dir
][dir_len
] = '\0';
483 dirs_in_use
= dir
+ 1;
489 for (i
= 1; i
< files_in_use
; ++i
)
490 if (files
[i
].dir
== dir
492 && filename_cmp (file
, files
[i
].filename
) == 0)
495 last_used_dir_len
= dir_len
;
502 if (i
>= files_allocated
)
504 unsigned int old
= files_allocated
;
506 files_allocated
= i
+ 32;
507 files
= (struct file_entry
*)
508 xrealloc (files
, (i
+ 32) * sizeof (struct file_entry
));
510 memset (files
+ old
, 0, (i
+ 32 - old
) * sizeof (struct file_entry
));
513 files
[i
].filename
= num
? file
: xstrdup (file
);
515 if (files_in_use
< i
+ 1)
516 files_in_use
= i
+ 1;
518 last_used_dir_len
= dir_len
;
523 /* Handle two forms of .file directive:
524 - Pass .file "source.c" to s_app_file
525 - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
527 If an entry is added to the file table, return a pointer to the filename. */
530 dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED
)
536 /* Continue to accept a bare string and pass it off. */
538 if (*input_line_pointer
== '"')
544 num
= get_absolute_expression ();
545 filename
= demand_copy_C_string (&filename_len
);
546 if (filename
== NULL
)
548 demand_empty_rest_of_line ();
552 as_bad (_("file number less than one"));
556 /* A .file directive implies compiler generated debug information is
557 being supplied. Turn off gas generated debug info. */
558 debug_type
= DEBUG_NONE
;
560 if (num
< (int) files_in_use
&& files
[num
].filename
!= 0)
562 as_bad (_("file number %ld already allocated"), (long) num
);
566 get_filenum (filename
, num
);
572 dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED
)
574 offsetT filenum
, line
;
576 /* If we see two .loc directives in a row, force the first one to be
578 if (dwarf2_loc_directive_seen
)
579 dwarf2_emit_insn (0);
581 filenum
= get_absolute_expression ();
583 line
= get_absolute_expression ();
587 as_bad (_("file number less than one"));
590 if (filenum
>= (int) files_in_use
|| files
[filenum
].filename
== 0)
592 as_bad (_("unassigned file number %ld"), (long) filenum
);
596 current
.filenum
= filenum
;
598 current
.discriminator
= 0;
603 if (files
[filenum
].dir
)
605 size_t dir_len
= strlen (dirs
[files
[filenum
].dir
]);
606 size_t file_len
= strlen (files
[filenum
].filename
);
607 char *cp
= (char *) alloca (dir_len
+ 1 + file_len
+ 1);
609 memcpy (cp
, dirs
[files
[filenum
].dir
], dir_len
);
610 INSERT_DIR_SEPARATOR (cp
, dir_len
);
611 memcpy (cp
+ dir_len
+ 1, files
[filenum
].filename
, file_len
);
612 cp
[dir_len
+ file_len
+ 1] = '\0';
613 listing_source_file (cp
);
616 listing_source_file (files
[filenum
].filename
);
617 listing_source_line (line
);
622 if (ISDIGIT (*input_line_pointer
))
624 current
.column
= get_absolute_expression ();
628 while (ISALPHA (*input_line_pointer
))
633 p
= input_line_pointer
;
634 c
= get_symbol_end ();
636 if (strcmp (p
, "basic_block") == 0)
638 current
.flags
|= DWARF2_FLAG_BASIC_BLOCK
;
639 *input_line_pointer
= c
;
641 else if (strcmp (p
, "prologue_end") == 0)
643 current
.flags
|= DWARF2_FLAG_PROLOGUE_END
;
644 *input_line_pointer
= c
;
646 else if (strcmp (p
, "epilogue_begin") == 0)
648 current
.flags
|= DWARF2_FLAG_EPILOGUE_BEGIN
;
649 *input_line_pointer
= c
;
651 else if (strcmp (p
, "is_stmt") == 0)
653 *input_line_pointer
= c
;
654 value
= get_absolute_expression ();
656 current
.flags
&= ~DWARF2_FLAG_IS_STMT
;
658 current
.flags
|= DWARF2_FLAG_IS_STMT
;
661 as_bad (_("is_stmt value not 0 or 1"));
665 else if (strcmp (p
, "isa") == 0)
667 *input_line_pointer
= c
;
668 value
= get_absolute_expression ();
673 as_bad (_("isa number less than zero"));
677 else if (strcmp (p
, "discriminator") == 0)
679 *input_line_pointer
= c
;
680 value
= get_absolute_expression ();
682 current
.discriminator
= value
;
685 as_bad (_("discriminator less than zero"));
691 as_bad (_("unknown .loc sub-directive `%s'"), p
);
692 *input_line_pointer
= c
;
699 demand_empty_rest_of_line ();
700 dwarf2_loc_directive_seen
= TRUE
;
701 debug_type
= DEBUG_NONE
;
705 dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED
)
707 offsetT value
= get_absolute_expression ();
709 if (value
!= 0 && value
!= 1)
711 as_bad (_("expected 0 or 1"));
712 ignore_rest_of_line ();
716 dwarf2_loc_mark_labels
= value
!= 0;
717 demand_empty_rest_of_line ();
722 first_frag_for_seg (segT seg
)
724 return seg_info (seg
)->frchainP
->frch_root
;
728 last_frag_for_seg (segT seg
)
730 frchainS
*f
= seg_info (seg
)->frchainP
;
732 while (f
->frch_next
!= NULL
)
738 /* Emit a single byte into the current segment. */
743 FRAG_APPEND_1_CHAR (byte
);
746 /* Emit a statement program opcode into the current segment. */
754 /* Emit a two-byte word into the current segment. */
759 md_number_to_chars (frag_more (2), data
, 2);
762 /* Emit a four byte word into the current segment. */
767 md_number_to_chars (frag_more (4), data
, 4);
770 /* Emit an unsigned "little-endian base 128" number. */
773 out_uleb128 (addressT value
)
775 output_leb128 (frag_more (sizeof_leb128 (value
, 0)), value
, 0);
778 /* Emit a signed "little-endian base 128" number. */
781 out_leb128 (addressT value
)
783 output_leb128 (frag_more (sizeof_leb128 (value
, 1)), value
, 1);
786 /* Emit a tuple for .debug_abbrev. */
789 out_abbrev (int name
, int form
)
795 /* Get the size of a fragment. */
798 get_frag_fix (fragS
*frag
, segT seg
)
805 /* If a fragment is the last in the chain, special measures must be
806 taken to find its size before relaxation, since it may be pending
807 on some subsegment chain. */
808 for (fr
= seg_info (seg
)->frchainP
; fr
; fr
= fr
->frch_next
)
809 if (fr
->frch_last
== frag
)
810 return (char *) obstack_next_free (&fr
->frch_obstack
) - frag
->fr_literal
;
815 /* Set an absolute address (may result in a relocation entry). */
818 out_set_addr (symbolS
*sym
)
822 out_opcode (DW_LNS_extended_op
);
823 out_uleb128 (sizeof_address
+ 1);
825 out_opcode (DW_LNE_set_address
);
827 exp
.X_add_symbol
= sym
;
828 exp
.X_add_number
= 0;
829 emit_expr (&exp
, sizeof_address
);
832 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
833 static void scale_addr_delta (addressT
*);
836 scale_addr_delta (addressT
*addr_delta
)
838 static int printed_this
= 0;
839 if (*addr_delta
% DWARF2_LINE_MIN_INSN_LENGTH
!= 0)
842 as_bad("unaligned opcodes detected in executable segment");
845 *addr_delta
/= DWARF2_LINE_MIN_INSN_LENGTH
;
848 #define scale_addr_delta(A)
851 /* Encode a pair of line and address skips as efficiently as possible.
852 Note that the line skip is signed, whereas the address skip is unsigned.
854 The following two routines *must* be kept in sync. This is
855 enforced by making emit_inc_line_addr abort if we do not emit
856 exactly the expected number of bytes. */
859 size_inc_line_addr (int line_delta
, addressT addr_delta
)
861 unsigned int tmp
, opcode
;
864 /* Scale the address delta by the minimum instruction length. */
865 scale_addr_delta (&addr_delta
);
867 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
868 We cannot use special opcodes here, since we want the end_sequence
869 to emit the matrix entry. */
870 if (line_delta
== INT_MAX
)
872 if (addr_delta
== MAX_SPECIAL_ADDR_DELTA
)
875 len
= 1 + sizeof_leb128 (addr_delta
, 0);
879 /* Bias the line delta by the base. */
880 tmp
= line_delta
- DWARF2_LINE_BASE
;
882 /* If the line increment is out of range of a special opcode, we
883 must encode it with DW_LNS_advance_line. */
884 if (tmp
>= DWARF2_LINE_RANGE
)
886 len
= 1 + sizeof_leb128 (line_delta
, 1);
888 tmp
= 0 - DWARF2_LINE_BASE
;
891 /* Bias the opcode by the special opcode base. */
892 tmp
+= DWARF2_LINE_OPCODE_BASE
;
894 /* Avoid overflow when addr_delta is large. */
895 if (addr_delta
< 256 + MAX_SPECIAL_ADDR_DELTA
)
897 /* Try using a special opcode. */
898 opcode
= tmp
+ addr_delta
* DWARF2_LINE_RANGE
;
902 /* Try using DW_LNS_const_add_pc followed by special op. */
903 opcode
= tmp
+ (addr_delta
- MAX_SPECIAL_ADDR_DELTA
) * DWARF2_LINE_RANGE
;
908 /* Otherwise use DW_LNS_advance_pc. */
909 len
+= 1 + sizeof_leb128 (addr_delta
, 0);
911 /* DW_LNS_copy or special opcode. */
918 emit_inc_line_addr (int line_delta
, addressT addr_delta
, char *p
, int len
)
920 unsigned int tmp
, opcode
;
924 /* Line number sequences cannot go backward in addresses. This means
925 we've incorrectly ordered the statements in the sequence. */
926 gas_assert ((offsetT
) addr_delta
>= 0);
928 /* Scale the address delta by the minimum instruction length. */
929 scale_addr_delta (&addr_delta
);
931 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
932 We cannot use special opcodes here, since we want the end_sequence
933 to emit the matrix entry. */
934 if (line_delta
== INT_MAX
)
936 if (addr_delta
== MAX_SPECIAL_ADDR_DELTA
)
937 *p
++ = DW_LNS_const_add_pc
;
940 *p
++ = DW_LNS_advance_pc
;
941 p
+= output_leb128 (p
, addr_delta
, 0);
944 *p
++ = DW_LNS_extended_op
;
946 *p
++ = DW_LNE_end_sequence
;
950 /* Bias the line delta by the base. */
951 tmp
= line_delta
- DWARF2_LINE_BASE
;
953 /* If the line increment is out of range of a special opcode, we
954 must encode it with DW_LNS_advance_line. */
955 if (tmp
>= DWARF2_LINE_RANGE
)
957 *p
++ = DW_LNS_advance_line
;
958 p
+= output_leb128 (p
, line_delta
, 1);
961 tmp
= 0 - DWARF2_LINE_BASE
;
965 /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
967 if (line_delta
== 0 && addr_delta
== 0)
973 /* Bias the opcode by the special opcode base. */
974 tmp
+= DWARF2_LINE_OPCODE_BASE
;
976 /* Avoid overflow when addr_delta is large. */
977 if (addr_delta
< 256 + MAX_SPECIAL_ADDR_DELTA
)
979 /* Try using a special opcode. */
980 opcode
= tmp
+ addr_delta
* DWARF2_LINE_RANGE
;
987 /* Try using DW_LNS_const_add_pc followed by special op. */
988 opcode
= tmp
+ (addr_delta
- MAX_SPECIAL_ADDR_DELTA
) * DWARF2_LINE_RANGE
;
991 *p
++ = DW_LNS_const_add_pc
;
997 /* Otherwise use DW_LNS_advance_pc. */
998 *p
++ = DW_LNS_advance_pc
;
999 p
+= output_leb128 (p
, addr_delta
, 0);
1007 gas_assert (p
== end
);
1010 /* Handy routine to combine calls to the above two routines. */
1013 out_inc_line_addr (int line_delta
, addressT addr_delta
)
1015 int len
= size_inc_line_addr (line_delta
, addr_delta
);
1016 emit_inc_line_addr (line_delta
, addr_delta
, frag_more (len
), len
);
1019 /* Write out an alternative form of line and address skips using
1020 DW_LNS_fixed_advance_pc opcodes. This uses more space than the default
1021 line and address information, but it is required if linker relaxation
1022 could change the code offsets. The following two routines *must* be
1026 size_fixed_inc_line_addr (int line_delta
, addressT addr_delta
)
1030 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1031 if (line_delta
!= INT_MAX
)
1032 len
= 1 + sizeof_leb128 (line_delta
, 1);
1034 if (addr_delta
> 50000)
1036 /* DW_LNS_extended_op */
1037 len
+= 1 + sizeof_leb128 (sizeof_address
+ 1, 0);
1038 /* DW_LNE_set_address */
1039 len
+= 1 + sizeof_address
;
1042 /* DW_LNS_fixed_advance_pc */
1045 if (line_delta
== INT_MAX
)
1046 /* DW_LNS_extended_op + DW_LNE_end_sequence */
1056 emit_fixed_inc_line_addr (int line_delta
, addressT addr_delta
, fragS
*frag
,
1061 char *end
= p
+ len
;
1063 /* Line number sequences cannot go backward in addresses. This means
1064 we've incorrectly ordered the statements in the sequence. */
1065 gas_assert ((offsetT
) addr_delta
>= 0);
1067 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1068 if (line_delta
!= INT_MAX
)
1070 *p
++ = DW_LNS_advance_line
;
1071 p
+= output_leb128 (p
, line_delta
, 1);
1074 pexp
= symbol_get_value_expression (frag
->fr_symbol
);
1075 line_seg
= subseg_get (".debug_line", 0);
1077 /* The DW_LNS_fixed_advance_pc opcode has a 2-byte operand so it can
1078 advance the address by at most 64K. Linker relaxation (without
1079 which this function would not be used) could change the operand by
1080 an unknown amount. If the address increment is getting close to
1081 the limit, just reset the address. */
1082 if (addr_delta
> 50000)
1087 gas_assert (pexp
->X_op
== O_subtract
);
1088 to_sym
= pexp
->X_add_symbol
;
1090 *p
++ = DW_LNS_extended_op
;
1091 p
+= output_leb128 (p
, sizeof_address
+ 1, 0);
1092 *p
++ = DW_LNE_set_address
;
1093 exp
.X_op
= O_symbol
;
1094 exp
.X_add_symbol
= to_sym
;
1095 exp
.X_add_number
= 0;
1096 subseg_change (line_seg
, 0);
1097 emit_expr_fix (&exp
, sizeof_address
, frag
, p
);
1098 p
+= sizeof_address
;
1102 *p
++ = DW_LNS_fixed_advance_pc
;
1103 subseg_change (line_seg
, 0);
1104 emit_expr_fix (pexp
, 2, frag
, p
);
1108 if (line_delta
== INT_MAX
)
1110 *p
++ = DW_LNS_extended_op
;
1112 *p
++ = DW_LNE_end_sequence
;
1117 gas_assert (p
== end
);
1120 /* Generate a variant frag that we can use to relax address/line
1121 increments between fragments of the target segment. */
1124 relax_inc_line_addr (int line_delta
, symbolS
*to_sym
, symbolS
*from_sym
)
1129 exp
.X_op
= O_subtract
;
1130 exp
.X_add_symbol
= to_sym
;
1131 exp
.X_op_symbol
= from_sym
;
1132 exp
.X_add_number
= 0;
1134 /* The maximum size of the frag is the line delta with a maximum
1135 sized address delta. */
1136 if (DWARF2_USE_FIXED_ADVANCE_PC
)
1137 max_chars
= size_fixed_inc_line_addr (line_delta
,
1138 -DWARF2_LINE_MIN_INSN_LENGTH
);
1140 max_chars
= size_inc_line_addr (line_delta
, -DWARF2_LINE_MIN_INSN_LENGTH
);
1142 frag_var (rs_dwarf2dbg
, max_chars
, max_chars
, 1,
1143 make_expr_symbol (&exp
), line_delta
, NULL
);
1146 /* The function estimates the size of a rs_dwarf2dbg variant frag
1147 based on the current values of the symbols. It is called before
1148 the relaxation loop. We set fr_subtype to the expected length. */
1151 dwarf2dbg_estimate_size_before_relax (fragS
*frag
)
1156 addr_delta
= resolve_symbol_value (frag
->fr_symbol
);
1157 if (DWARF2_USE_FIXED_ADVANCE_PC
)
1158 size
= size_fixed_inc_line_addr (frag
->fr_offset
, addr_delta
);
1160 size
= size_inc_line_addr (frag
->fr_offset
, addr_delta
);
1162 frag
->fr_subtype
= size
;
1167 /* This function relaxes a rs_dwarf2dbg variant frag based on the
1168 current values of the symbols. fr_subtype is the current length
1169 of the frag. This returns the change in frag length. */
1172 dwarf2dbg_relax_frag (fragS
*frag
)
1174 int old_size
, new_size
;
1176 old_size
= frag
->fr_subtype
;
1177 new_size
= dwarf2dbg_estimate_size_before_relax (frag
);
1179 return new_size
- old_size
;
1182 /* This function converts a rs_dwarf2dbg variant frag into a normal
1183 fill frag. This is called after all relaxation has been done.
1184 fr_subtype will be the desired length of the frag. */
1187 dwarf2dbg_convert_frag (fragS
*frag
)
1191 addr_diff
= resolve_symbol_value (frag
->fr_symbol
);
1193 /* fr_var carries the max_chars that we created the fragment with.
1194 fr_subtype carries the current expected length. We must, of
1195 course, have allocated enough memory earlier. */
1196 gas_assert (frag
->fr_var
>= (int) frag
->fr_subtype
);
1198 if (DWARF2_USE_FIXED_ADVANCE_PC
)
1199 emit_fixed_inc_line_addr (frag
->fr_offset
, addr_diff
, frag
,
1200 frag
->fr_literal
+ frag
->fr_fix
,
1203 emit_inc_line_addr (frag
->fr_offset
, addr_diff
,
1204 frag
->fr_literal
+ frag
->fr_fix
, frag
->fr_subtype
);
1206 frag
->fr_fix
+= frag
->fr_subtype
;
1207 frag
->fr_type
= rs_fill
;
1209 frag
->fr_offset
= 0;
1212 /* Generate .debug_line content for the chain of line number entries
1213 beginning at E, for segment SEG. */
1216 process_entries (segT seg
, struct line_entry
*e
)
1218 unsigned filenum
= 1;
1220 unsigned column
= 0;
1222 unsigned flags
= DWARF2_LINE_DEFAULT_IS_STMT
? DWARF2_FLAG_IS_STMT
: 0;
1223 fragS
*last_frag
= NULL
, *frag
;
1224 addressT last_frag_ofs
= 0, frag_ofs
;
1225 symbolS
*last_lab
= NULL
, *lab
;
1226 struct line_entry
*next
;
1232 if (filenum
!= e
->loc
.filenum
)
1234 filenum
= e
->loc
.filenum
;
1235 out_opcode (DW_LNS_set_file
);
1236 out_uleb128 (filenum
);
1239 if (column
!= e
->loc
.column
)
1241 column
= e
->loc
.column
;
1242 out_opcode (DW_LNS_set_column
);
1243 out_uleb128 (column
);
1246 if (e
->loc
.discriminator
!= 0)
1248 out_opcode (DW_LNS_extended_op
);
1249 out_leb128 (1 + sizeof_leb128 (e
->loc
.discriminator
, 0));
1250 out_opcode (DW_LNE_set_discriminator
);
1251 out_uleb128 (e
->loc
.discriminator
);
1254 if (isa
!= e
->loc
.isa
)
1257 out_opcode (DW_LNS_set_isa
);
1261 if ((e
->loc
.flags
^ flags
) & DWARF2_FLAG_IS_STMT
)
1263 flags
= e
->loc
.flags
;
1264 out_opcode (DW_LNS_negate_stmt
);
1267 if (e
->loc
.flags
& DWARF2_FLAG_BASIC_BLOCK
)
1268 out_opcode (DW_LNS_set_basic_block
);
1270 if (e
->loc
.flags
& DWARF2_FLAG_PROLOGUE_END
)
1271 out_opcode (DW_LNS_set_prologue_end
);
1273 if (e
->loc
.flags
& DWARF2_FLAG_EPILOGUE_BEGIN
)
1274 out_opcode (DW_LNS_set_epilogue_begin
);
1276 /* Don't try to optimize away redundant entries; gdb wants two
1277 entries for a function where the code starts on the same line as
1278 the {, and there's no way to identify that case here. Trust gcc
1279 to optimize appropriately. */
1280 line_delta
= e
->loc
.line
- line
;
1282 frag
= symbol_get_frag (lab
);
1283 frag_ofs
= S_GET_VALUE (lab
);
1285 if (last_frag
== NULL
)
1288 out_inc_line_addr (line_delta
, 0);
1290 else if (frag
== last_frag
&& ! DWARF2_USE_FIXED_ADVANCE_PC
)
1291 out_inc_line_addr (line_delta
, frag_ofs
- last_frag_ofs
);
1293 relax_inc_line_addr (line_delta
, lab
, last_lab
);
1298 last_frag_ofs
= frag_ofs
;
1306 /* Emit a DW_LNE_end_sequence for the end of the section. */
1307 frag
= last_frag_for_seg (seg
);
1308 frag_ofs
= get_frag_fix (frag
, seg
);
1309 if (frag
== last_frag
&& ! DWARF2_USE_FIXED_ADVANCE_PC
)
1310 out_inc_line_addr (INT_MAX
, frag_ofs
- last_frag_ofs
);
1313 lab
= symbol_temp_new (seg
, frag_ofs
, frag
);
1314 relax_inc_line_addr (INT_MAX
, lab
, last_lab
);
1318 /* Emit the directory and file tables for .debug_line. */
1321 out_file_list (void)
1328 /* Emit directory list. */
1329 for (i
= 1; i
< dirs_in_use
; ++i
)
1331 dir
= remap_debug_filename (dirs
[i
]);
1332 size
= strlen (dir
) + 1;
1333 cp
= frag_more (size
);
1334 memcpy (cp
, dir
, size
);
1339 for (i
= 1; i
< files_in_use
; ++i
)
1341 const char *fullfilename
;
1343 if (files
[i
].filename
== NULL
)
1345 as_bad (_("unassigned file number %ld"), (long) i
);
1346 /* Prevent a crash later, particularly for file 1. */
1347 files
[i
].filename
= "";
1351 fullfilename
= DWARF2_FILE_NAME (files
[i
].filename
,
1352 files
[i
].dir
? dirs
[files
[i
].dir
] : "");
1353 size
= strlen (fullfilename
) + 1;
1354 cp
= frag_more (size
);
1355 memcpy (cp
, fullfilename
, size
);
1357 out_uleb128 (files
[i
].dir
); /* directory number */
1358 /* Output the last modification timestamp. */
1359 out_uleb128 (DWARF2_FILE_TIME_NAME (files
[i
].filename
,
1360 files
[i
].dir
? dirs
[files
[i
].dir
] : ""));
1361 /* Output the filesize. */
1362 out_uleb128 (DWARF2_FILE_SIZE_NAME (files
[i
].filename
,
1363 files
[i
].dir
? dirs
[files
[i
].dir
] : ""));
1366 /* Terminate filename list. */
1370 /* Switch to SEC and output a header length field. Return the size of
1371 offsets used in SEC. The caller must set EXPR->X_add_symbol value
1372 to the end of the section. */
1375 out_header (asection
*sec
, expressionS
*exp
)
1380 subseg_set (sec
, 0);
1381 start_sym
= symbol_temp_new_now ();;
1382 end_sym
= symbol_temp_make ();
1384 /* Total length of the information. */
1385 exp
->X_op
= O_subtract
;
1386 exp
->X_add_symbol
= end_sym
;
1387 exp
->X_op_symbol
= start_sym
;
1389 switch (DWARF2_FORMAT (sec
))
1391 case dwarf2_format_32bit
:
1392 exp
->X_add_number
= -4;
1396 case dwarf2_format_64bit
:
1397 exp
->X_add_number
= -12;
1402 case dwarf2_format_64bit_irix
:
1403 exp
->X_add_number
= -8;
1408 as_fatal (_("internal error: unknown dwarf2 format"));
1412 /* Emit the collected .debug_line data. */
1415 out_debug_line (segT line_seg
)
1418 symbolS
*prologue_end
;
1423 sizeof_offset
= out_header (line_seg
, &exp
);
1424 line_end
= exp
.X_add_symbol
;
1427 out_two (DWARF2_VERSION
);
1429 /* Length of the prologue following this length. */
1430 prologue_end
= symbol_temp_make ();
1431 exp
.X_add_symbol
= prologue_end
;
1432 exp
.X_add_number
= - (4 + 2 + 4);
1433 emit_expr (&exp
, sizeof_offset
);
1435 /* Parameters of the state machine. */
1436 out_byte (DWARF2_LINE_MIN_INSN_LENGTH
);
1437 out_byte (DWARF2_LINE_DEFAULT_IS_STMT
);
1438 out_byte (DWARF2_LINE_BASE
);
1439 out_byte (DWARF2_LINE_RANGE
);
1440 out_byte (DWARF2_LINE_OPCODE_BASE
);
1442 /* Standard opcode lengths. */
1443 out_byte (0); /* DW_LNS_copy */
1444 out_byte (1); /* DW_LNS_advance_pc */
1445 out_byte (1); /* DW_LNS_advance_line */
1446 out_byte (1); /* DW_LNS_set_file */
1447 out_byte (1); /* DW_LNS_set_column */
1448 out_byte (0); /* DW_LNS_negate_stmt */
1449 out_byte (0); /* DW_LNS_set_basic_block */
1450 out_byte (0); /* DW_LNS_const_add_pc */
1451 out_byte (1); /* DW_LNS_fixed_advance_pc */
1452 out_byte (0); /* DW_LNS_set_prologue_end */
1453 out_byte (0); /* DW_LNS_set_epilogue_begin */
1454 out_byte (1); /* DW_LNS_set_isa */
1458 symbol_set_value_now (prologue_end
);
1460 /* For each section, emit a statement program. */
1461 for (s
= all_segs
; s
; s
= s
->next
)
1462 process_entries (s
->seg
, s
->head
->head
);
1464 symbol_set_value_now (line_end
);
1468 out_debug_ranges (segT ranges_seg
)
1470 unsigned int addr_size
= sizeof_address
;
1475 subseg_set (ranges_seg
, 0);
1477 /* Base Address Entry. */
1478 for (i
= 0; i
< addr_size
; i
++)
1480 for (i
= 0; i
< addr_size
; i
++)
1483 /* Range List Entry. */
1484 for (s
= all_segs
; s
; s
= s
->next
)
1489 frag
= first_frag_for_seg (s
->seg
);
1490 beg
= symbol_temp_new (s
->seg
, 0, frag
);
1491 s
->text_start
= beg
;
1493 frag
= last_frag_for_seg (s
->seg
);
1494 end
= symbol_temp_new (s
->seg
, get_frag_fix (frag
, s
->seg
), frag
);
1497 exp
.X_op
= O_symbol
;
1498 exp
.X_add_symbol
= beg
;
1499 exp
.X_add_number
= 0;
1500 emit_expr (&exp
, addr_size
);
1502 exp
.X_op
= O_symbol
;
1503 exp
.X_add_symbol
= end
;
1504 exp
.X_add_number
= 0;
1505 emit_expr (&exp
, addr_size
);
1508 /* End of Range Entry. */
1509 for (i
= 0; i
< addr_size
; i
++)
1511 for (i
= 0; i
< addr_size
; i
++)
1515 /* Emit data for .debug_aranges. */
1518 out_debug_aranges (segT aranges_seg
, segT info_seg
)
1520 unsigned int addr_size
= sizeof_address
;
1523 symbolS
*aranges_end
;
1527 sizeof_offset
= out_header (aranges_seg
, &exp
);
1528 aranges_end
= exp
.X_add_symbol
;
1531 out_two (DWARF2_VERSION
);
1533 /* Offset to .debug_info. */
1534 TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg
), sizeof_offset
);
1536 /* Size of an address (offset portion). */
1537 out_byte (addr_size
);
1539 /* Size of a segment descriptor. */
1542 /* Align the header. */
1543 frag_align (ffs (2 * addr_size
) - 1, 0, 0);
1545 for (s
= all_segs
; s
; s
= s
->next
)
1550 frag
= first_frag_for_seg (s
->seg
);
1551 beg
= symbol_temp_new (s
->seg
, 0, frag
);
1552 s
->text_start
= beg
;
1554 frag
= last_frag_for_seg (s
->seg
);
1555 end
= symbol_temp_new (s
->seg
, get_frag_fix (frag
, s
->seg
), frag
);
1558 exp
.X_op
= O_symbol
;
1559 exp
.X_add_symbol
= beg
;
1560 exp
.X_add_number
= 0;
1561 emit_expr (&exp
, addr_size
);
1563 exp
.X_op
= O_subtract
;
1564 exp
.X_add_symbol
= end
;
1565 exp
.X_op_symbol
= beg
;
1566 exp
.X_add_number
= 0;
1567 emit_expr (&exp
, addr_size
);
1570 p
= frag_more (2 * addr_size
);
1571 md_number_to_chars (p
, 0, addr_size
);
1572 md_number_to_chars (p
+ addr_size
, 0, addr_size
);
1574 symbol_set_value_now (aranges_end
);
1577 /* Emit data for .debug_abbrev. Note that this must be kept in
1578 sync with out_debug_info below. */
1581 out_debug_abbrev (segT abbrev_seg
,
1582 segT info_seg ATTRIBUTE_UNUSED
,
1583 segT line_seg ATTRIBUTE_UNUSED
)
1585 subseg_set (abbrev_seg
, 0);
1588 out_uleb128 (DW_TAG_compile_unit
);
1589 out_byte (DW_CHILDREN_no
);
1590 if (DWARF2_FORMAT (line_seg
) == dwarf2_format_32bit
)
1591 out_abbrev (DW_AT_stmt_list
, DW_FORM_data4
);
1593 out_abbrev (DW_AT_stmt_list
, DW_FORM_data8
);
1594 if (all_segs
->next
== NULL
)
1596 out_abbrev (DW_AT_low_pc
, DW_FORM_addr
);
1597 out_abbrev (DW_AT_high_pc
, DW_FORM_addr
);
1601 if (DWARF2_FORMAT (info_seg
) == dwarf2_format_32bit
)
1602 out_abbrev (DW_AT_ranges
, DW_FORM_data4
);
1604 out_abbrev (DW_AT_ranges
, DW_FORM_data8
);
1606 out_abbrev (DW_AT_name
, DW_FORM_string
);
1607 out_abbrev (DW_AT_comp_dir
, DW_FORM_string
);
1608 out_abbrev (DW_AT_producer
, DW_FORM_string
);
1609 out_abbrev (DW_AT_language
, DW_FORM_data2
);
1612 /* Terminate the abbreviations for this compilation unit. */
1616 /* Emit a description of this compilation unit for .debug_info. */
1619 out_debug_info (segT info_seg
, segT abbrev_seg
, segT line_seg
, segT ranges_seg
)
1622 const char *comp_dir
;
1623 const char *dirname
;
1630 sizeof_offset
= out_header (info_seg
, &exp
);
1631 info_end
= exp
.X_add_symbol
;
1633 /* DWARF version. */
1634 out_two (DWARF2_VERSION
);
1636 /* .debug_abbrev offset */
1637 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg
), sizeof_offset
);
1639 /* Target address size. */
1640 out_byte (sizeof_address
);
1642 /* DW_TAG_compile_unit DIE abbrev */
1645 /* DW_AT_stmt_list */
1646 TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg
),
1647 (DWARF2_FORMAT (line_seg
) == dwarf2_format_32bit
1650 /* These two attributes are emitted if all of the code is contiguous. */
1651 if (all_segs
->next
== NULL
)
1654 exp
.X_op
= O_symbol
;
1655 exp
.X_add_symbol
= all_segs
->text_start
;
1656 exp
.X_add_number
= 0;
1657 emit_expr (&exp
, sizeof_address
);
1660 exp
.X_op
= O_symbol
;
1661 exp
.X_add_symbol
= all_segs
->text_end
;
1662 exp
.X_add_number
= 0;
1663 emit_expr (&exp
, sizeof_address
);
1667 /* This attribute is emitted if the code is disjoint. */
1669 TC_DWARF2_EMIT_OFFSET (section_symbol (ranges_seg
), sizeof_offset
);
1672 /* DW_AT_name. We don't have the actual file name that was present
1673 on the command line, so assume files[1] is the main input file.
1674 We're not supposed to get called unless at least one line number
1675 entry was emitted, so this should always be defined. */
1676 if (files_in_use
== 0)
1680 dirname
= remap_debug_filename (dirs
[files
[1].dir
]);
1681 len
= strlen (dirname
);
1683 /* Already has trailing slash. */
1684 p
= frag_more (len
);
1685 memcpy (p
, dirname
, len
);
1687 p
= frag_more (len
+ 1);
1688 memcpy (p
, dirname
, len
);
1689 INSERT_DIR_SEPARATOR (p
, len
);
1692 len
= strlen (files
[1].filename
) + 1;
1693 p
= frag_more (len
);
1694 memcpy (p
, files
[1].filename
, len
);
1696 /* DW_AT_comp_dir */
1697 comp_dir
= remap_debug_filename (getpwd ());
1698 len
= strlen (comp_dir
) + 1;
1699 p
= frag_more (len
);
1700 memcpy (p
, comp_dir
, len
);
1702 /* DW_AT_producer */
1703 sprintf (producer
, "GNU AS %s", VERSION
);
1704 len
= strlen (producer
) + 1;
1705 p
= frag_more (len
);
1706 memcpy (p
, producer
, len
);
1708 /* DW_AT_language. Yes, this is probably not really MIPS, but the
1709 dwarf2 draft has no standard code for assembler. */
1710 out_two (DW_LANG_Mips_Assembler
);
1712 symbol_set_value_now (info_end
);
1718 all_segs_hash
= hash_new ();
1719 last_seg_ptr
= &all_segs
;
1723 /* Finish the dwarf2 debug sections. We emit .debug.line if there
1724 were any .file/.loc directives, or --gdwarf2 was given, or if the
1725 file has a non-empty .debug_info section and an empty .debug_line
1726 section. If we emit .debug_line, and the .debug_info section is
1727 empty, we also emit .debug_info, .debug_aranges and .debug_abbrev.
1728 ALL_SEGS will be non-null if there were any .file/.loc directives,
1729 or --gdwarf2 was given and there were any located instructions
1733 dwarf2_finish (void)
1738 int emit_other_sections
= 0;
1739 int empty_debug_line
= 0;
1741 info_seg
= bfd_get_section_by_name (stdoutput
, ".debug_info");
1742 emit_other_sections
= info_seg
== NULL
|| !seg_not_empty_p (info_seg
);
1744 line_seg
= bfd_get_section_by_name (stdoutput
, ".debug_line");
1745 empty_debug_line
= line_seg
== NULL
|| !seg_not_empty_p (line_seg
);
1747 /* We can't construct a new debug_line section if we already have one.
1749 if (all_segs
&& !empty_debug_line
)
1750 as_fatal ("duplicate .debug_line sections");
1752 if ((!all_segs
&& emit_other_sections
)
1753 || (!emit_other_sections
&& !empty_debug_line
))
1754 /* If there is no line information and no non-empty .debug_info
1755 section, or if there is both a non-empty .debug_info and a non-empty
1756 .debug_line, then we do nothing. */
1759 /* Calculate the size of an address for the target machine. */
1760 sizeof_address
= DWARF2_ADDR_SIZE (stdoutput
);
1762 /* Create and switch to the line number section. */
1763 line_seg
= subseg_new (".debug_line", 0);
1764 bfd_set_section_flags (stdoutput
, line_seg
, SEC_READONLY
| SEC_DEBUGGING
);
1766 /* For each subsection, chain the debug entries together. */
1767 for (s
= all_segs
; s
; s
= s
->next
)
1769 struct line_subseg
*lss
= s
->head
;
1770 struct line_entry
**ptail
= lss
->ptail
;
1772 while ((lss
= lss
->next
) != NULL
)
1779 out_debug_line (line_seg
);
1781 /* If this is assembler generated line info, and there is no
1782 debug_info already, we need .debug_info and .debug_abbrev
1783 sections as well. */
1784 if (emit_other_sections
)
1790 gas_assert (all_segs
);
1792 info_seg
= subseg_new (".debug_info", 0);
1793 abbrev_seg
= subseg_new (".debug_abbrev", 0);
1794 aranges_seg
= subseg_new (".debug_aranges", 0);
1796 bfd_set_section_flags (stdoutput
, info_seg
,
1797 SEC_READONLY
| SEC_DEBUGGING
);
1798 bfd_set_section_flags (stdoutput
, abbrev_seg
,
1799 SEC_READONLY
| SEC_DEBUGGING
);
1800 bfd_set_section_flags (stdoutput
, aranges_seg
,
1801 SEC_READONLY
| SEC_DEBUGGING
);
1803 record_alignment (aranges_seg
, ffs (2 * sizeof_address
) - 1);
1805 if (all_segs
->next
== NULL
)
1809 ranges_seg
= subseg_new (".debug_ranges", 0);
1810 bfd_set_section_flags (stdoutput
, ranges_seg
,
1811 SEC_READONLY
| SEC_DEBUGGING
);
1812 record_alignment (ranges_seg
, ffs (2 * sizeof_address
) - 1);
1813 out_debug_ranges (ranges_seg
);
1816 out_debug_aranges (aranges_seg
, info_seg
);
1817 out_debug_abbrev (abbrev_seg
, info_seg
, line_seg
);
1818 out_debug_info (info_seg
, abbrev_seg
, line_seg
, ranges_seg
);