1 /* dwarf2dbg.c - DWARF2 debug support
2 Copyright (C) 1999-2021 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 3, 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, 51 Franklin Street - Fifth Floor, Boston, MA
22 /* Logical line numbers can be controlled by the compiler via the
26 .loc FILENO LINENO [COLUMN] [basic_block] [prologue_end] \
27 [epilogue_begin] [is_stmt VALUE] [isa VALUE] \
32 #include "safe-ctype.h"
37 #ifdef HAVE_SYS_PARAM_H
38 #include <sys/param.h>
41 #define INT_MAX (int) (((unsigned) (-1)) >> 1)
45 #include "dwarf2dbg.h"
46 #include <filenames.h>
48 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
49 /* We need to decide which character to use as a directory separator.
50 Just because HAVE_DOS_BASED_FILE_SYSTEM is defined, it does not
51 necessarily mean that the backslash character is the one to use.
52 Some environments, eg Cygwin, can support both naming conventions.
53 So we use the heuristic that we only need to use the backslash if
54 the path is an absolute path starting with a DOS style drive
55 selector. eg C: or D: */
56 # define INSERT_DIR_SEPARATOR(string, offset) \
61 && string[1] == ':') \
62 string [offset] = '\\'; \
64 string [offset] = '/'; \
68 # define INSERT_DIR_SEPARATOR(string, offset) string[offset] = '/'
72 # define DWARF2_FORMAT(SEC) dwarf2_format_32bit
75 #ifndef DWARF2_ADDR_SIZE
76 # define DWARF2_ADDR_SIZE(bfd) (bfd_arch_bits_per_address (bfd) / 8)
79 #ifndef DWARF2_FILE_NAME
80 #define DWARF2_FILE_NAME(FILENAME, DIRNAME) FILENAME
83 #ifndef DWARF2_FILE_TIME_NAME
84 #define DWARF2_FILE_TIME_NAME(FILENAME,DIRNAME) -1
87 #ifndef DWARF2_FILE_SIZE_NAME
88 #define DWARF2_FILE_SIZE_NAME(FILENAME,DIRNAME) -1
91 #ifndef DWARF2_VERSION
92 #define DWARF2_VERSION dwarf_level
95 /* The .debug_aranges version has been 2 in DWARF version 2, 3 and 4. */
96 #ifndef DWARF2_ARANGES_VERSION
97 #define DWARF2_ARANGES_VERSION 2
100 /* This implementation outputs version 3 .debug_line information. */
101 #ifndef DWARF2_LINE_VERSION
102 #define DWARF2_LINE_VERSION (dwarf_level > 3 ? dwarf_level : 3)
105 /* The .debug_rnglists has only been in DWARF version 5. */
106 #ifndef DWARF2_RNGLISTS_VERSION
107 #define DWARF2_RNGLISTS_VERSION 5
114 /* Since we can't generate the prolog until the body is complete, we
115 use three different subsegments for .debug_line: one holding the
116 prolog, one for the directory and filename info, and one for the
117 body ("statement program"). */
122 /* If linker relaxation might change offsets in the code, the DWARF special
123 opcodes and variable-length operands cannot be used. If this macro is
124 nonzero, use the DW_LNS_fixed_advance_pc opcode instead. */
125 #ifndef DWARF2_USE_FIXED_ADVANCE_PC
126 # define DWARF2_USE_FIXED_ADVANCE_PC linkrelax
129 /* First special line opcode - leave room for the standard opcodes.
130 Note: If you want to change this, you'll have to update the
131 "standard_opcode_lengths" table that is emitted below in
133 #define DWARF2_LINE_OPCODE_BASE 13
135 #ifndef DWARF2_LINE_BASE
136 /* Minimum line offset in a special line info. opcode. This value
137 was chosen to give a reasonable range of values. */
138 # define DWARF2_LINE_BASE -5
141 /* Range of line offsets in a special line info. opcode. */
142 #ifndef DWARF2_LINE_RANGE
143 # define DWARF2_LINE_RANGE 14
146 #ifndef DWARF2_LINE_MIN_INSN_LENGTH
147 /* Define the architecture-dependent minimum instruction length (in
148 bytes). This value should be rather too small than too big. */
149 # define DWARF2_LINE_MIN_INSN_LENGTH 1
152 /* Flag that indicates the initial value of the is_stmt_start flag. */
153 #define DWARF2_LINE_DEFAULT_IS_STMT 1
155 #ifndef DWARF2_LINE_MAX_OPS_PER_INSN
156 #define DWARF2_LINE_MAX_OPS_PER_INSN 1
159 /* Given a special op, return the line skip amount. */
160 #define SPECIAL_LINE(op) \
161 (((op) - DWARF2_LINE_OPCODE_BASE)%DWARF2_LINE_RANGE + DWARF2_LINE_BASE)
163 /* Given a special op, return the address skip amount (in units of
164 DWARF2_LINE_MIN_INSN_LENGTH. */
165 #define SPECIAL_ADDR(op) (((op) - DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)
167 /* The maximum address skip amount that can be encoded with a special op. */
168 #define MAX_SPECIAL_ADDR_DELTA SPECIAL_ADDR(255)
170 #ifndef TC_PARSE_CONS_RETURN_NONE
171 #define TC_PARSE_CONS_RETURN_NONE BFD_RELOC_NONE
176 struct line_entry
*next
;
178 struct dwarf2_line_info loc
;
181 /* Don't change the offset of next in line_entry. set_or_check_view
182 calls in dwarf2_gen_line_info_1 depend on it. */
183 static char unused
[offsetof(struct line_entry
, next
) ? -1 : 1]
188 struct line_subseg
*next
;
190 struct line_entry
*head
;
191 struct line_entry
**ptail
;
192 struct line_entry
**pmove_tail
;
197 struct line_seg
*next
;
199 struct line_subseg
*head
;
204 /* Collects data for all line table entries during assembly. */
205 static struct line_seg
*all_segs
;
206 static struct line_seg
**last_seg_ptr
;
208 #define NUM_MD5_BYTES 16
212 const char * filename
;
214 unsigned char md5
[NUM_MD5_BYTES
];
217 /* Table of files used by .debug_line. */
218 static struct file_entry
*files
;
219 static unsigned int files_in_use
;
220 static unsigned int files_allocated
;
221 static unsigned int num_of_auto_assigned
;
223 /* Table of directories used by .debug_line. */
224 static char ** dirs
= NULL
;
225 static unsigned int dirs_in_use
= 0;
226 static unsigned int dirs_allocated
= 0;
228 /* TRUE when we've seen a .loc directive recently. Used to avoid
229 doing work when there's nothing to do. Will be reset by
230 dwarf2_consume_line_info. */
231 bfd_boolean dwarf2_loc_directive_seen
;
233 /* TRUE when we've seen any .loc directive at any time during parsing.
234 Indicates the user wants us to generate a .debug_line section.
235 Used in dwarf2_finish as sanity check. */
236 static bfd_boolean dwarf2_any_loc_directive_seen
;
238 /* TRUE when we're supposed to set the basic block mark whenever a
240 bfd_boolean dwarf2_loc_mark_labels
;
242 /* Current location as indicated by the most recent .loc directive. */
243 static struct dwarf2_line_info current
=
246 DWARF2_LINE_DEFAULT_IS_STMT
? DWARF2_FLAG_IS_STMT
: 0,
250 /* This symbol is used to recognize view number forced resets in loc
252 static symbolS
*force_reset_view
;
254 /* This symbol evaluates to an expression that, if nonzero, indicates
255 some view assert check failed. */
256 static symbolS
*view_assert_failed
;
258 /* The size of an address on the target. */
259 static unsigned int sizeof_address
;
261 #ifndef TC_DWARF2_EMIT_OFFSET
262 #define TC_DWARF2_EMIT_OFFSET generic_dwarf2_emit_offset
264 /* Create an offset to .dwarf2_*. */
267 generic_dwarf2_emit_offset (symbolS
*symbol
, unsigned int size
)
271 memset (&exp
, 0, sizeof exp
);
273 exp
.X_add_symbol
= symbol
;
274 exp
.X_add_number
= 0;
275 emit_expr (&exp
, size
);
279 /* Find or create (if CREATE_P) an entry for SEG+SUBSEG in ALL_SEGS. */
281 static struct line_subseg
*
282 get_line_subseg (segT seg
, subsegT subseg
, bfd_boolean create_p
)
284 struct line_seg
*s
= seg_info (seg
)->dwarf2_line_seg
;
285 struct line_subseg
**pss
, *lss
;
292 s
= XNEW (struct line_seg
);
297 last_seg_ptr
= &s
->next
;
298 seg_info (seg
)->dwarf2_line_seg
= s
;
301 gas_assert (seg
== s
->seg
);
303 for (pss
= &s
->head
; (lss
= *pss
) != NULL
; pss
= &lss
->next
)
305 if (lss
->subseg
== subseg
)
307 if (lss
->subseg
> subseg
)
311 lss
= XNEW (struct line_subseg
);
313 lss
->subseg
= subseg
;
315 lss
->ptail
= &lss
->head
;
316 lss
->pmove_tail
= &lss
->head
;
323 /* (Un)reverse the line_entry list starting from H. */
325 static struct line_entry
*
326 reverse_line_entry_list (struct line_entry
*h
)
328 struct line_entry
*p
= NULL
, *e
, *n
;
330 for (e
= h
; e
; e
= n
)
339 /* Compute the view for E based on the previous entry P. If we
340 introduce an (undefined) view symbol for P, and H is given (P must
341 be the tail in this case), introduce view symbols for earlier list
342 entries as well, until one of them is constant. */
345 set_or_check_view (struct line_entry
*e
, struct line_entry
*p
,
346 struct line_entry
*h
)
350 memset (&viewx
, 0, sizeof (viewx
));
351 viewx
.X_unsigned
= 1;
353 /* First, compute !(E->label > P->label), to tell whether or not
354 we're to reset the view number. If we can't resolve it to a
355 constant, keep it symbolic. */
356 if (!p
|| (e
->loc
.view
== force_reset_view
&& force_reset_view
))
358 viewx
.X_op
= O_constant
;
359 viewx
.X_add_number
= 0;
360 viewx
.X_add_symbol
= NULL
;
361 viewx
.X_op_symbol
= NULL
;
366 viewx
.X_add_number
= 0;
367 viewx
.X_add_symbol
= e
->label
;
368 viewx
.X_op_symbol
= p
->label
;
369 resolve_expression (&viewx
);
370 if (viewx
.X_op
== O_constant
)
371 viewx
.X_add_number
= !viewx
.X_add_number
;
374 viewx
.X_add_symbol
= make_expr_symbol (&viewx
);
375 viewx
.X_add_number
= 0;
376 viewx
.X_op_symbol
= NULL
;
377 viewx
.X_op
= O_logical_not
;
381 if (S_IS_DEFINED (e
->loc
.view
) && symbol_constant_p (e
->loc
.view
))
383 expressionS
*value
= symbol_get_value_expression (e
->loc
.view
);
384 /* We can't compare the view numbers at this point, because in
385 VIEWX we've only determined whether we're to reset it so
387 if (viewx
.X_op
== O_constant
)
389 if (!value
->X_add_number
!= !viewx
.X_add_number
)
390 as_bad (_("view number mismatch"));
392 /* Record the expression to check it later. It is the result of
393 a logical not, thus 0 or 1. We just add up all such deferred
394 expressions, and resolve it at the end. */
395 else if (!value
->X_add_number
)
397 symbolS
*deferred
= make_expr_symbol (&viewx
);
398 if (view_assert_failed
)
402 memset (&chk
, 0, sizeof (chk
));
405 chk
.X_add_number
= 0;
406 chk
.X_add_symbol
= view_assert_failed
;
407 chk
.X_op_symbol
= deferred
;
408 deferred
= make_expr_symbol (&chk
);
410 view_assert_failed
= deferred
;
414 if (viewx
.X_op
!= O_constant
|| viewx
.X_add_number
)
420 p
->loc
.view
= symbol_temp_make ();
421 gas_assert (!S_IS_DEFINED (p
->loc
.view
));
424 memset (&incv
, 0, sizeof (incv
));
426 incv
.X_op
= O_symbol
;
427 incv
.X_add_symbol
= p
->loc
.view
;
428 incv
.X_add_number
= 1;
430 if (viewx
.X_op
== O_constant
)
432 gas_assert (viewx
.X_add_number
== 1);
437 viewx
.X_add_symbol
= make_expr_symbol (&viewx
);
438 viewx
.X_add_number
= 0;
439 viewx
.X_op_symbol
= make_expr_symbol (&incv
);
440 viewx
.X_op
= O_multiply
;
444 if (!S_IS_DEFINED (e
->loc
.view
))
446 symbol_set_value_expression (e
->loc
.view
, &viewx
);
447 S_SET_SEGMENT (e
->loc
.view
, expr_section
);
448 symbol_set_frag (e
->loc
.view
, &zero_address_frag
);
451 /* Define and attempt to simplify any earlier views needed to
453 if (h
&& p
&& p
->loc
.view
&& !S_IS_DEFINED (p
->loc
.view
))
455 struct line_entry
*h2
;
456 /* Reverse the list to avoid quadratic behavior going backwards
457 in a single-linked list. */
458 struct line_entry
*r
= reverse_line_entry_list (h
);
461 /* Set or check views until we find a defined or absent view. */
464 /* Do not define the head of a (sub?)segment view while
465 handling others. It would be defined too early, without
466 regard to the last view of other subsegments.
467 set_or_check_view will be called for every head segment
471 set_or_check_view (r
, r
->next
, NULL
);
473 while (r
->next
&& r
->next
->loc
.view
&& !S_IS_DEFINED (r
->next
->loc
.view
)
476 /* Unreverse the list, so that we can go forward again. */
477 h2
= reverse_line_entry_list (p
);
478 gas_assert (h2
== h
);
480 /* Starting from the last view we just defined, attempt to
481 simplify the view expressions, until we do so to P. */
484 /* The head view of a subsegment may remain undefined while
485 handling other elements, before it is linked to the last
486 view of the previous subsegment. */
489 gas_assert (S_IS_DEFINED (r
->loc
.view
));
490 resolve_expression (symbol_get_value_expression (r
->loc
.view
));
492 while (r
!= p
&& (r
= r
->next
));
494 /* Now that we've defined and computed all earlier views that might
495 be needed to compute E's, attempt to simplify it. */
496 resolve_expression (symbol_get_value_expression (e
->loc
.view
));
500 /* Record an entry for LOC occurring at LABEL. */
503 dwarf2_gen_line_info_1 (symbolS
*label
, struct dwarf2_line_info
*loc
)
505 struct line_subseg
*lss
;
506 struct line_entry
*e
;
507 flagword need_flags
= SEC_LOAD
| SEC_CODE
;
509 /* PR 26850: Do not record LOCs in non-executable or non-loaded
510 sections. SEC_ALLOC isn't tested for non-ELF because obj-coff.c
511 obj_coff_section is careless in setting SEC_ALLOC. */
513 need_flags
|= SEC_ALLOC
;
514 if ((now_seg
->flags
& need_flags
) != need_flags
)
516 /* FIXME: Add code to suppress multiple warnings ? */
517 as_warn ("dwarf line number information for %s ignored",
518 segment_name (now_seg
));
522 e
= XNEW (struct line_entry
);
527 lss
= get_line_subseg (now_seg
, now_subseg
, TRUE
);
529 /* Subseg heads are chained to previous subsegs in
531 if (loc
->view
&& lss
->head
)
532 set_or_check_view (e
,
533 (struct line_entry
*)lss
->ptail
,
537 lss
->ptail
= &e
->next
;
540 /* Record an entry for LOC occurring at OFS within the current fragment. */
543 dwarf2_gen_line_info (addressT ofs
, struct dwarf2_line_info
*loc
)
545 static unsigned int line
= -1;
546 static unsigned int filenum
= -1;
550 /* Early out for as-yet incomplete location information. */
553 if (loc
->filenum
== 0 && DWARF2_LINE_VERSION
< 5)
556 /* Don't emit sequences of line symbols for the same line when the
557 symbols apply to assembler code. It is necessary to emit
558 duplicate line symbols when a compiler asks for them, because GDB
559 uses them to determine the end of the prologue. */
560 if (debug_type
== DEBUG_DWARF2
561 && line
== loc
->line
&& filenum
== loc
->filenum
)
565 filenum
= loc
->filenum
;
571 /* Use a non-fake name for the line number location,
572 so that it can be referred to by relocations. */
573 sprintf (name
, ".Loc.%u.%u", line
, filenum
);
574 sym
= symbol_new (name
, now_seg
, frag_now
, ofs
);
577 sym
= symbol_temp_new (now_seg
, frag_now
, ofs
);
578 dwarf2_gen_line_info_1 (sym
, loc
);
582 get_basename (const char * pathname
)
586 file
= lbasename (pathname
);
587 /* Don't make empty string from / or A: from A:/ . */
588 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
589 if (file
<= pathname
+ 3)
592 if (file
== pathname
+ 1)
599 get_directory_table_entry (const char * dirname
,
601 bfd_boolean can_use_zero
)
608 #ifndef DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
609 if (IS_DIR_SEPARATOR (dirname
[dirlen
- 1]))
617 for (d
= 0; d
< dirs_in_use
; ++d
)
620 && filename_ncmp (dirname
, dirs
[d
], dirlen
) == 0
621 && dirs
[d
][dirlen
] == '\0')
627 if (dirs
== NULL
|| dirs
[0] == NULL
)
633 if (d
>= dirs_allocated
)
635 unsigned int old
= dirs_allocated
;
637 dirs_allocated
= d
+ 32;
638 dirs
= XRESIZEVEC (char *, dirs
, dirs_allocated
);
639 memset (dirs
+ old
, 0, (dirs_allocated
- old
) * sizeof (char *));
642 dirs
[d
] = xmemdup0 (dirname
, dirlen
);
643 if (dirs_in_use
<= d
)
650 assign_file_to_slot (unsigned long i
, const char *file
, unsigned int dir
)
652 if (i
>= files_allocated
)
654 unsigned int old
= files_allocated
;
656 files_allocated
= i
+ 32;
657 /* Catch wraparound. */
658 if (files_allocated
<= old
)
660 as_bad (_("file number %lu is too big"), (unsigned long) i
);
664 files
= XRESIZEVEC (struct file_entry
, files
, files_allocated
);
665 memset (files
+ old
, 0, (i
+ 32 - old
) * sizeof (struct file_entry
));
668 files
[i
].filename
= file
;
670 memset (files
[i
].md5
, 0, NUM_MD5_BYTES
);
672 if (files_in_use
< i
+ 1)
673 files_in_use
= i
+ 1;
678 /* Get a .debug_line file number for PATHNAME. If there is a
679 directory component to PATHNAME, then this will be stored
680 in the directory table, if it is not already present.
681 Returns the slot number allocated to that filename or -1
682 if there was a problem. */
685 allocate_filenum (const char * pathname
)
687 static signed int last_used
= -1, last_used_dir_len
= 0;
692 /* Short circuit the common case of adding the same pathname
696 const char * dirname
= NULL
;
699 dirname
= dirs
[files
[last_used
].dir
];
703 if (filename_cmp (pathname
, files
[last_used
].filename
) == 0)
708 if (filename_ncmp (pathname
, dirname
, last_used_dir_len
) == 0
709 && IS_DIR_SEPARATOR (pathname
[last_used_dir_len
])
710 && filename_cmp (pathname
+ last_used_dir_len
+ 1,
711 files
[last_used
].filename
) == 0)
716 file
= get_basename (pathname
);
717 dir_len
= file
- pathname
;
719 dir
= get_directory_table_entry (pathname
, dir_len
, FALSE
);
721 /* Do not use slot-0. That is specifically reserved for use by
722 the '.file 0 "name"' directive. */
723 for (i
= 1; i
< files_in_use
; ++i
)
724 if (files
[i
].dir
== dir
726 && filename_cmp (file
, files
[i
].filename
) == 0)
729 last_used_dir_len
= dir_len
;
733 if (!assign_file_to_slot (i
, file
, dir
))
736 num_of_auto_assigned
++;
739 last_used_dir_len
= dir_len
;
744 /* Allocate slot NUM in the .debug_line file table to FILENAME.
745 If DIRNAME is not NULL or there is a directory component to FILENAME
746 then this will be stored in the directory table, if not already present.
747 if WITH_MD5 is TRUE then there is a md5 value in generic_bignum.
748 Returns TRUE if allocation succeeded, FALSE otherwise. */
751 allocate_filename_to_slot (const char * dirname
,
752 const char * filename
,
754 bfd_boolean with_md5
)
760 /* Short circuit the common case of adding the same pathname
762 if (num
< files_allocated
&& files
[num
].filename
!= NULL
)
764 const char * dir
= NULL
;
767 dir
= dirs
[files
[num
].dir
];
770 && memcmp (generic_bignum
, files
[num
].md5
, NUM_MD5_BYTES
) != 0)
775 if (dir
!= NULL
&& filename_cmp (dir
, dirname
) != 0)
778 if (filename_cmp (filename
, files
[num
].filename
) != 0)
781 /* If the filenames match, but the directory table entry was
782 empty, then fill it with the provided directory name. */
784 dirs
[files
[num
].dir
] = xmemdup0 (dirname
, strlen (dirname
));
788 else if (dir
!= NULL
)
790 dirlen
= strlen (dir
);
791 if (filename_ncmp (filename
, dir
, dirlen
) == 0
792 && IS_DIR_SEPARATOR (filename
[dirlen
])
793 && filename_cmp (filename
+ dirlen
+ 1, files
[num
].filename
) == 0)
796 else /* dir == NULL */
798 file
= get_basename (filename
);
799 if (filename_cmp (file
, files
[num
].filename
) == 0)
802 /* The filenames match, but the directory table entry is empty.
803 Fill it with the provided directory name. */
804 dirs
[files
[num
].dir
] = xmemdup0 (filename
, file
- filename
);
810 as_bad (_("file table slot %u is already occupied by a different file (%s%s%s vs %s%s%s)"),
812 dir
== NULL
? "" : dir
,
813 dir
== NULL
? "" : "/",
815 dirname
== NULL
? "" : dirname
,
816 dirname
== NULL
? "" : "/",
824 file
= get_basename (filename
);
825 dirlen
= file
- filename
;
829 dirlen
= strlen (dirname
);
833 d
= get_directory_table_entry (dirname
, dirlen
, num
== 0);
836 if (! assign_file_to_slot (i
, file
, d
))
841 if (target_big_endian
)
843 /* md5's are stored in litte endian format. */
844 unsigned int bits_remaining
= NUM_MD5_BYTES
* BITS_PER_CHAR
;
845 unsigned int byte
= NUM_MD5_BYTES
;
846 unsigned int bignum_index
= 0;
848 while (bits_remaining
)
850 unsigned int bignum_bits_remaining
= LITTLENUM_NUMBER_OF_BITS
;
851 valueT bignum_value
= generic_bignum
[bignum_index
];
854 while (bignum_bits_remaining
)
856 files
[i
].md5
[--byte
] = bignum_value
& 0xff;
858 bignum_bits_remaining
-= 8;
865 unsigned int bits_remaining
= NUM_MD5_BYTES
* BITS_PER_CHAR
;
866 unsigned int byte
= 0;
867 unsigned int bignum_index
= 0;
869 while (bits_remaining
)
871 unsigned int bignum_bits_remaining
= LITTLENUM_NUMBER_OF_BITS
;
872 valueT bignum_value
= generic_bignum
[bignum_index
];
876 while (bignum_bits_remaining
)
878 files
[i
].md5
[byte
++] = bignum_value
& 0xff;
880 bignum_bits_remaining
-= 8;
887 memset (files
[i
].md5
, 0, NUM_MD5_BYTES
);
892 /* Returns the current source information. If .file directives have
893 been encountered, the info for the corresponding source file is
894 returned. Otherwise, the info for the assembly source file is
898 dwarf2_where (struct dwarf2_line_info
*line
)
900 if (debug_type
== DEBUG_DWARF2
)
902 const char *filename
;
904 memset (line
, 0, sizeof (*line
));
905 filename
= as_where (&line
->line
);
906 line
->filenum
= allocate_filenum (filename
);
907 /* FIXME: We should check the return value from allocate_filenum. */
909 line
->flags
= DWARF2_FLAG_IS_STMT
;
910 line
->isa
= current
.isa
;
911 line
->discriminator
= current
.discriminator
;
918 /* A hook to allow the target backend to inform the line number state
919 machine of isa changes when assembler debug info is enabled. */
922 dwarf2_set_isa (unsigned int isa
)
927 /* Called for each machine instruction, or relatively atomic group of
928 machine instructions (ie built-in macro). The instruction or group
929 is SIZE bytes in length. If dwarf2 line number generation is called
930 for, emit a line statement appropriately. */
933 dwarf2_emit_insn (int size
)
935 struct dwarf2_line_info loc
;
937 if (debug_type
!= DEBUG_DWARF2
938 ? !dwarf2_loc_directive_seen
939 : !seen_at_least_1_file ())
944 dwarf2_gen_line_info ((frag_now_fix_octets () - size
) / OCTETS_PER_BYTE
, &loc
);
945 dwarf2_consume_line_info ();
948 /* Move all previously-emitted line entries for the current position by
949 DELTA bytes. This function cannot be used to move the same entries
953 dwarf2_move_insn (int delta
)
955 struct line_subseg
*lss
;
956 struct line_entry
*e
;
962 lss
= get_line_subseg (now_seg
, now_subseg
, FALSE
);
966 now
= frag_now_fix ();
967 while ((e
= *lss
->pmove_tail
))
969 if (S_GET_VALUE (e
->label
) == now
)
970 S_SET_VALUE (e
->label
, now
+ delta
);
971 lss
->pmove_tail
= &e
->next
;
975 /* Called after the current line information has been either used with
976 dwarf2_gen_line_info or saved with a machine instruction for later use.
977 This resets the state of the line number information to reflect that
981 dwarf2_consume_line_info (void)
983 /* Unless we generate DWARF2 debugging information for each
984 assembler line, we only emit one line symbol for one LOC. */
985 dwarf2_loc_directive_seen
= FALSE
;
987 current
.flags
&= ~(DWARF2_FLAG_BASIC_BLOCK
988 | DWARF2_FLAG_PROLOGUE_END
989 | DWARF2_FLAG_EPILOGUE_BEGIN
);
990 current
.discriminator
= 0;
994 /* Called for each (preferably code) label. If dwarf2_loc_mark_labels
995 is enabled, emit a basic block marker. */
998 dwarf2_emit_label (symbolS
*label
)
1000 struct dwarf2_line_info loc
;
1002 if (!dwarf2_loc_mark_labels
)
1004 if (S_GET_SEGMENT (label
) != now_seg
)
1006 if (!(bfd_section_flags (now_seg
) & SEC_CODE
))
1008 if (files_in_use
== 0 && debug_type
!= DEBUG_DWARF2
)
1011 dwarf2_where (&loc
);
1013 loc
.flags
|= DWARF2_FLAG_BASIC_BLOCK
;
1015 dwarf2_gen_line_info_1 (label
, &loc
);
1016 dwarf2_consume_line_info ();
1019 /* Handle two forms of .file directive:
1020 - Pass .file "source.c" to s_app_file
1021 - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
1023 If an entry is added to the file table, return a pointer to the filename. */
1026 dwarf2_directive_filename (void)
1028 bfd_boolean with_md5
= FALSE
;
1031 const char * dirname
= NULL
;
1035 /* Continue to accept a bare string and pass it off. */
1037 if (*input_line_pointer
== '"')
1043 num
= get_absolute_expression ();
1045 if ((offsetT
) num
< 1 && DWARF2_LINE_VERSION
< 5)
1047 as_bad (_("file number less than one"));
1048 ignore_rest_of_line ();
1052 /* FIXME: Should we allow ".file <N>\n" as an expression meaning
1053 "switch back to the already allocated file <N> as the current
1056 filename
= demand_copy_C_string (&filename_len
);
1057 if (filename
== NULL
)
1058 /* demand_copy_C_string will have already generated an error message. */
1061 /* For DWARF-5 support we also accept:
1062 .file <NUM> ["<dir>"] "<file>" [md5 <NUM>] */
1063 if (DWARF2_LINE_VERSION
> 4)
1066 if (*input_line_pointer
== '"')
1069 filename
= demand_copy_C_string (&filename_len
);
1073 if (strncmp (input_line_pointer
, "md5", 3) == 0)
1075 input_line_pointer
+= 3;
1079 expression_and_evaluate (& exp
);
1080 if (exp
.X_op
!= O_big
)
1081 as_bad (_("md5 value too small or not a constant"));
1087 demand_empty_rest_of_line ();
1089 /* A .file directive implies compiler generated debug information is
1090 being supplied. Turn off gas generated debug info. */
1091 debug_type
= DEBUG_NONE
;
1093 if (num
!= (unsigned int) num
1094 || num
>= (size_t) -1 / sizeof (struct file_entry
) - 32)
1096 as_bad (_("file number %lu is too big"), (unsigned long) num
);
1100 if (num_of_auto_assigned
)
1102 /* Clear slots auto-assigned before the first .file <NUMBER>
1103 directive was seen. */
1104 if (files_in_use
!= (num_of_auto_assigned
+ 1))
1106 for (i
= 1; i
< files_in_use
; i
++)
1107 files
[i
].filename
= NULL
;
1109 num_of_auto_assigned
= 0;
1112 if (! allocate_filename_to_slot (dirname
, filename
, (unsigned int) num
,
1119 /* Calls dwarf2_directive_filename, but discards its result.
1120 Used in pseudo-op tables where the function result is ignored. */
1123 dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED
)
1125 (void) dwarf2_directive_filename ();
1129 dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED
)
1131 offsetT filenum
, line
;
1133 /* If we see two .loc directives in a row, force the first one to be
1135 if (dwarf2_loc_directive_seen
)
1136 dwarf2_emit_insn (0);
1138 filenum
= get_absolute_expression ();
1140 line
= get_absolute_expression ();
1144 if (filenum
!= 0 || DWARF2_LINE_VERSION
< 5)
1146 as_bad (_("file number less than one"));
1151 if (filenum
>= (int) files_in_use
|| files
[filenum
].filename
== NULL
)
1153 as_bad (_("unassigned file number %ld"), (long) filenum
);
1157 current
.filenum
= filenum
;
1158 current
.line
= line
;
1159 current
.discriminator
= 0;
1164 if (files
[filenum
].dir
)
1166 size_t dir_len
= strlen (dirs
[files
[filenum
].dir
]);
1167 size_t file_len
= strlen (files
[filenum
].filename
);
1168 char *cp
= XNEWVEC (char, dir_len
+ 1 + file_len
+ 1);
1170 memcpy (cp
, dirs
[files
[filenum
].dir
], dir_len
);
1171 INSERT_DIR_SEPARATOR (cp
, dir_len
);
1172 memcpy (cp
+ dir_len
+ 1, files
[filenum
].filename
, file_len
);
1173 cp
[dir_len
+ file_len
+ 1] = '\0';
1174 listing_source_file (cp
);
1178 listing_source_file (files
[filenum
].filename
);
1179 listing_source_line (line
);
1184 if (ISDIGIT (*input_line_pointer
))
1186 current
.column
= get_absolute_expression ();
1190 while (ISALPHA (*input_line_pointer
))
1195 c
= get_symbol_name (& p
);
1197 if (strcmp (p
, "basic_block") == 0)
1199 current
.flags
|= DWARF2_FLAG_BASIC_BLOCK
;
1200 *input_line_pointer
= c
;
1202 else if (strcmp (p
, "prologue_end") == 0)
1204 current
.flags
|= DWARF2_FLAG_PROLOGUE_END
;
1205 *input_line_pointer
= c
;
1207 else if (strcmp (p
, "epilogue_begin") == 0)
1209 current
.flags
|= DWARF2_FLAG_EPILOGUE_BEGIN
;
1210 *input_line_pointer
= c
;
1212 else if (strcmp (p
, "is_stmt") == 0)
1214 (void) restore_line_pointer (c
);
1215 value
= get_absolute_expression ();
1217 current
.flags
&= ~DWARF2_FLAG_IS_STMT
;
1218 else if (value
== 1)
1219 current
.flags
|= DWARF2_FLAG_IS_STMT
;
1222 as_bad (_("is_stmt value not 0 or 1"));
1226 else if (strcmp (p
, "isa") == 0)
1228 (void) restore_line_pointer (c
);
1229 value
= get_absolute_expression ();
1231 current
.isa
= value
;
1234 as_bad (_("isa number less than zero"));
1238 else if (strcmp (p
, "discriminator") == 0)
1240 (void) restore_line_pointer (c
);
1241 value
= get_absolute_expression ();
1243 current
.discriminator
= value
;
1246 as_bad (_("discriminator less than zero"));
1250 else if (strcmp (p
, "view") == 0)
1254 (void) restore_line_pointer (c
);
1257 if (ISDIGIT (*input_line_pointer
)
1258 || *input_line_pointer
== '-')
1260 bfd_boolean force_reset
= *input_line_pointer
== '-';
1262 value
= get_absolute_expression ();
1265 as_bad (_("numeric view can only be asserted to zero"));
1268 if (force_reset
&& force_reset_view
)
1269 sym
= force_reset_view
;
1272 sym
= symbol_temp_new (absolute_section
, &zero_address_frag
,
1275 force_reset_view
= sym
;
1280 char *name
= read_symbol_name ();
1284 sym
= symbol_find_or_make (name
);
1285 if (S_IS_DEFINED (sym
) || symbol_equated_p (sym
))
1287 if (S_IS_VOLATILE (sym
))
1288 sym
= symbol_clone (sym
, 1);
1289 else if (!S_CAN_BE_REDEFINED (sym
))
1291 as_bad (_("symbol `%s' is already defined"), name
);
1295 S_SET_SEGMENT (sym
, undefined_section
);
1296 S_SET_VALUE (sym
, 0);
1297 symbol_set_frag (sym
, &zero_address_frag
);
1303 as_bad (_("unknown .loc sub-directive `%s'"), p
);
1304 (void) restore_line_pointer (c
);
1308 SKIP_WHITESPACE_AFTER_NAME ();
1311 demand_empty_rest_of_line ();
1312 dwarf2_any_loc_directive_seen
= dwarf2_loc_directive_seen
= TRUE
;
1313 debug_type
= DEBUG_NONE
;
1315 /* If we were given a view id, emit the row right away. */
1317 dwarf2_emit_insn (0);
1321 dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED
)
1323 offsetT value
= get_absolute_expression ();
1325 if (value
!= 0 && value
!= 1)
1327 as_bad (_("expected 0 or 1"));
1328 ignore_rest_of_line ();
1332 dwarf2_loc_mark_labels
= value
!= 0;
1333 demand_empty_rest_of_line ();
1337 static struct frag
*
1338 first_frag_for_seg (segT seg
)
1340 return seg_info (seg
)->frchainP
->frch_root
;
1343 static struct frag
*
1344 last_frag_for_seg (segT seg
)
1346 frchainS
*f
= seg_info (seg
)->frchainP
;
1348 while (f
->frch_next
!= NULL
)
1351 return f
->frch_last
;
1354 /* Emit a single byte into the current segment. */
1359 FRAG_APPEND_1_CHAR (byte
);
1362 /* Emit a statement program opcode into the current segment. */
1365 out_opcode (int opc
)
1370 /* Emit a two-byte word into the current segment. */
1375 md_number_to_chars (frag_more (2), data
, 2);
1378 /* Emit a four byte word into the current segment. */
1383 md_number_to_chars (frag_more (4), data
, 4);
1386 /* Emit an unsigned "little-endian base 128" number. */
1389 out_uleb128 (addressT value
)
1391 output_leb128 (frag_more (sizeof_leb128 (value
, 0)), value
, 0);
1394 /* Emit a signed "little-endian base 128" number. */
1397 out_leb128 (addressT value
)
1399 output_leb128 (frag_more (sizeof_leb128 (value
, 1)), value
, 1);
1402 /* Emit a tuple for .debug_abbrev. */
1405 out_abbrev (int name
, int form
)
1411 /* Get the size of a fragment. */
1414 get_frag_fix (fragS
*frag
, segT seg
)
1419 return frag
->fr_fix
;
1421 /* If a fragment is the last in the chain, special measures must be
1422 taken to find its size before relaxation, since it may be pending
1423 on some subsegment chain. */
1424 for (fr
= seg_info (seg
)->frchainP
; fr
; fr
= fr
->frch_next
)
1425 if (fr
->frch_last
== frag
)
1426 return (char *) obstack_next_free (&fr
->frch_obstack
) - frag
->fr_literal
;
1431 /* Set an absolute address (may result in a relocation entry). */
1434 out_set_addr (symbolS
*sym
)
1438 memset (&exp
, 0, sizeof exp
);
1439 out_opcode (DW_LNS_extended_op
);
1440 out_uleb128 (sizeof_address
+ 1);
1442 out_opcode (DW_LNE_set_address
);
1443 exp
.X_op
= O_symbol
;
1444 exp
.X_add_symbol
= sym
;
1445 exp
.X_add_number
= 0;
1446 emit_expr (&exp
, sizeof_address
);
1449 static void scale_addr_delta (addressT
*);
1452 scale_addr_delta (addressT
*addr_delta
)
1454 static int printed_this
= 0;
1455 if (DWARF2_LINE_MIN_INSN_LENGTH
> 1)
1457 if (*addr_delta
% DWARF2_LINE_MIN_INSN_LENGTH
!= 0 && !printed_this
)
1459 as_bad("unaligned opcodes detected in executable segment");
1462 *addr_delta
/= DWARF2_LINE_MIN_INSN_LENGTH
;
1466 /* Encode a pair of line and address skips as efficiently as possible.
1467 Note that the line skip is signed, whereas the address skip is unsigned.
1469 The following two routines *must* be kept in sync. This is
1470 enforced by making emit_inc_line_addr abort if we do not emit
1471 exactly the expected number of bytes. */
1474 size_inc_line_addr (int line_delta
, addressT addr_delta
)
1476 unsigned int tmp
, opcode
;
1479 /* Scale the address delta by the minimum instruction length. */
1480 scale_addr_delta (&addr_delta
);
1482 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
1483 We cannot use special opcodes here, since we want the end_sequence
1484 to emit the matrix entry. */
1485 if (line_delta
== INT_MAX
)
1487 if (addr_delta
== MAX_SPECIAL_ADDR_DELTA
)
1489 else if (addr_delta
)
1490 len
= 1 + sizeof_leb128 (addr_delta
, 0);
1494 /* Bias the line delta by the base. */
1495 tmp
= line_delta
- DWARF2_LINE_BASE
;
1497 /* If the line increment is out of range of a special opcode, we
1498 must encode it with DW_LNS_advance_line. */
1499 if (tmp
>= DWARF2_LINE_RANGE
)
1501 len
= 1 + sizeof_leb128 (line_delta
, 1);
1503 tmp
= 0 - DWARF2_LINE_BASE
;
1506 /* Bias the opcode by the special opcode base. */
1507 tmp
+= DWARF2_LINE_OPCODE_BASE
;
1509 /* Avoid overflow when addr_delta is large. */
1510 if (addr_delta
< 256 + MAX_SPECIAL_ADDR_DELTA
)
1512 /* Try using a special opcode. */
1513 opcode
= tmp
+ addr_delta
* DWARF2_LINE_RANGE
;
1517 /* Try using DW_LNS_const_add_pc followed by special op. */
1518 opcode
= tmp
+ (addr_delta
- MAX_SPECIAL_ADDR_DELTA
) * DWARF2_LINE_RANGE
;
1523 /* Otherwise use DW_LNS_advance_pc. */
1524 len
+= 1 + sizeof_leb128 (addr_delta
, 0);
1526 /* DW_LNS_copy or special opcode. */
1533 emit_inc_line_addr (int line_delta
, addressT addr_delta
, char *p
, int len
)
1535 unsigned int tmp
, opcode
;
1537 char *end
= p
+ len
;
1539 /* Line number sequences cannot go backward in addresses. This means
1540 we've incorrectly ordered the statements in the sequence. */
1541 gas_assert ((offsetT
) addr_delta
>= 0);
1543 /* Scale the address delta by the minimum instruction length. */
1544 scale_addr_delta (&addr_delta
);
1546 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
1547 We cannot use special opcodes here, since we want the end_sequence
1548 to emit the matrix entry. */
1549 if (line_delta
== INT_MAX
)
1551 if (addr_delta
== MAX_SPECIAL_ADDR_DELTA
)
1552 *p
++ = DW_LNS_const_add_pc
;
1553 else if (addr_delta
)
1555 *p
++ = DW_LNS_advance_pc
;
1556 p
+= output_leb128 (p
, addr_delta
, 0);
1559 *p
++ = DW_LNS_extended_op
;
1561 *p
++ = DW_LNE_end_sequence
;
1565 /* Bias the line delta by the base. */
1566 tmp
= line_delta
- DWARF2_LINE_BASE
;
1568 /* If the line increment is out of range of a special opcode, we
1569 must encode it with DW_LNS_advance_line. */
1570 if (tmp
>= DWARF2_LINE_RANGE
)
1572 *p
++ = DW_LNS_advance_line
;
1573 p
+= output_leb128 (p
, line_delta
, 1);
1576 tmp
= 0 - DWARF2_LINE_BASE
;
1580 /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
1582 if (line_delta
== 0 && addr_delta
== 0)
1588 /* Bias the opcode by the special opcode base. */
1589 tmp
+= DWARF2_LINE_OPCODE_BASE
;
1591 /* Avoid overflow when addr_delta is large. */
1592 if (addr_delta
< 256 + MAX_SPECIAL_ADDR_DELTA
)
1594 /* Try using a special opcode. */
1595 opcode
= tmp
+ addr_delta
* DWARF2_LINE_RANGE
;
1602 /* Try using DW_LNS_const_add_pc followed by special op. */
1603 opcode
= tmp
+ (addr_delta
- MAX_SPECIAL_ADDR_DELTA
) * DWARF2_LINE_RANGE
;
1606 *p
++ = DW_LNS_const_add_pc
;
1612 /* Otherwise use DW_LNS_advance_pc. */
1613 *p
++ = DW_LNS_advance_pc
;
1614 p
+= output_leb128 (p
, addr_delta
, 0);
1622 gas_assert (p
== end
);
1625 /* Handy routine to combine calls to the above two routines. */
1628 out_inc_line_addr (int line_delta
, addressT addr_delta
)
1630 int len
= size_inc_line_addr (line_delta
, addr_delta
);
1631 emit_inc_line_addr (line_delta
, addr_delta
, frag_more (len
), len
);
1634 /* Write out an alternative form of line and address skips using
1635 DW_LNS_fixed_advance_pc opcodes. This uses more space than the default
1636 line and address information, but it is required if linker relaxation
1637 could change the code offsets. The following two routines *must* be
1639 #define ADDR_DELTA_LIMIT 50000
1642 size_fixed_inc_line_addr (int line_delta
, addressT addr_delta
)
1646 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1647 if (line_delta
!= INT_MAX
)
1648 len
= 1 + sizeof_leb128 (line_delta
, 1);
1650 if (addr_delta
> ADDR_DELTA_LIMIT
)
1652 /* DW_LNS_extended_op */
1653 len
+= 1 + sizeof_leb128 (sizeof_address
+ 1, 0);
1654 /* DW_LNE_set_address */
1655 len
+= 1 + sizeof_address
;
1658 /* DW_LNS_fixed_advance_pc */
1661 if (line_delta
== INT_MAX
)
1662 /* DW_LNS_extended_op + DW_LNE_end_sequence */
1672 emit_fixed_inc_line_addr (int line_delta
, addressT addr_delta
, fragS
*frag
,
1676 char *end
= p
+ len
;
1678 /* Line number sequences cannot go backward in addresses. This means
1679 we've incorrectly ordered the statements in the sequence. */
1680 gas_assert ((offsetT
) addr_delta
>= 0);
1682 /* Verify that we have kept in sync with size_fixed_inc_line_addr. */
1683 gas_assert (len
== size_fixed_inc_line_addr (line_delta
, addr_delta
));
1685 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1686 if (line_delta
!= INT_MAX
)
1688 *p
++ = DW_LNS_advance_line
;
1689 p
+= output_leb128 (p
, line_delta
, 1);
1692 pexp
= symbol_get_value_expression (frag
->fr_symbol
);
1694 /* The DW_LNS_fixed_advance_pc opcode has a 2-byte operand so it can
1695 advance the address by at most 64K. Linker relaxation (without
1696 which this function would not be used) could change the operand by
1697 an unknown amount. If the address increment is getting close to
1698 the limit, just reset the address. */
1699 if (addr_delta
> ADDR_DELTA_LIMIT
)
1704 memset (&exp
, 0, sizeof exp
);
1705 gas_assert (pexp
->X_op
== O_subtract
);
1706 to_sym
= pexp
->X_add_symbol
;
1708 *p
++ = DW_LNS_extended_op
;
1709 p
+= output_leb128 (p
, sizeof_address
+ 1, 0);
1710 *p
++ = DW_LNE_set_address
;
1711 exp
.X_op
= O_symbol
;
1712 exp
.X_add_symbol
= to_sym
;
1713 exp
.X_add_number
= 0;
1714 emit_expr_fix (&exp
, sizeof_address
, frag
, p
, TC_PARSE_CONS_RETURN_NONE
);
1715 p
+= sizeof_address
;
1719 *p
++ = DW_LNS_fixed_advance_pc
;
1720 emit_expr_fix (pexp
, 2, frag
, p
, TC_PARSE_CONS_RETURN_NONE
);
1724 if (line_delta
== INT_MAX
)
1726 *p
++ = DW_LNS_extended_op
;
1728 *p
++ = DW_LNE_end_sequence
;
1733 gas_assert (p
== end
);
1736 /* Generate a variant frag that we can use to relax address/line
1737 increments between fragments of the target segment. */
1740 relax_inc_line_addr (int line_delta
, symbolS
*to_sym
, symbolS
*from_sym
)
1745 memset (&exp
, 0, sizeof exp
);
1746 exp
.X_op
= O_subtract
;
1747 exp
.X_add_symbol
= to_sym
;
1748 exp
.X_op_symbol
= from_sym
;
1749 exp
.X_add_number
= 0;
1751 /* The maximum size of the frag is the line delta with a maximum
1752 sized address delta. */
1753 if (DWARF2_USE_FIXED_ADVANCE_PC
)
1754 max_chars
= size_fixed_inc_line_addr (line_delta
,
1755 -DWARF2_LINE_MIN_INSN_LENGTH
);
1757 max_chars
= size_inc_line_addr (line_delta
, -DWARF2_LINE_MIN_INSN_LENGTH
);
1759 frag_var (rs_dwarf2dbg
, max_chars
, max_chars
, 1,
1760 make_expr_symbol (&exp
), line_delta
, NULL
);
1763 /* The function estimates the size of a rs_dwarf2dbg variant frag
1764 based on the current values of the symbols. It is called before
1765 the relaxation loop. We set fr_subtype to the expected length. */
1768 dwarf2dbg_estimate_size_before_relax (fragS
*frag
)
1773 addr_delta
= resolve_symbol_value (frag
->fr_symbol
);
1774 if (DWARF2_USE_FIXED_ADVANCE_PC
)
1775 size
= size_fixed_inc_line_addr (frag
->fr_offset
, addr_delta
);
1777 size
= size_inc_line_addr (frag
->fr_offset
, addr_delta
);
1779 frag
->fr_subtype
= size
;
1784 /* This function relaxes a rs_dwarf2dbg variant frag based on the
1785 current values of the symbols. fr_subtype is the current length
1786 of the frag. This returns the change in frag length. */
1789 dwarf2dbg_relax_frag (fragS
*frag
)
1791 int old_size
, new_size
;
1793 old_size
= frag
->fr_subtype
;
1794 new_size
= dwarf2dbg_estimate_size_before_relax (frag
);
1796 return new_size
- old_size
;
1799 /* This function converts a rs_dwarf2dbg variant frag into a normal
1800 fill frag. This is called after all relaxation has been done.
1801 fr_subtype will be the desired length of the frag. */
1804 dwarf2dbg_convert_frag (fragS
*frag
)
1808 if (DWARF2_USE_FIXED_ADVANCE_PC
)
1810 /* If linker relaxation is enabled then the distance between the two
1811 symbols in the frag->fr_symbol expression might change. Hence we
1812 cannot rely upon the value computed by resolve_symbol_value.
1813 Instead we leave the expression unfinalized and allow
1814 emit_fixed_inc_line_addr to create a fixup (which later becomes a
1815 relocation) that will allow the linker to correctly compute the
1816 actual address difference. We have to use a fixed line advance for
1817 this as we cannot (easily) relocate leb128 encoded values. */
1818 int saved_finalize_syms
= finalize_syms
;
1821 addr_diff
= resolve_symbol_value (frag
->fr_symbol
);
1822 finalize_syms
= saved_finalize_syms
;
1825 addr_diff
= resolve_symbol_value (frag
->fr_symbol
);
1827 /* fr_var carries the max_chars that we created the fragment with.
1828 fr_subtype carries the current expected length. We must, of
1829 course, have allocated enough memory earlier. */
1830 gas_assert (frag
->fr_var
>= (int) frag
->fr_subtype
);
1832 if (DWARF2_USE_FIXED_ADVANCE_PC
)
1833 emit_fixed_inc_line_addr (frag
->fr_offset
, addr_diff
, frag
,
1834 frag
->fr_literal
+ frag
->fr_fix
,
1837 emit_inc_line_addr (frag
->fr_offset
, addr_diff
,
1838 frag
->fr_literal
+ frag
->fr_fix
, frag
->fr_subtype
);
1840 frag
->fr_fix
+= frag
->fr_subtype
;
1841 frag
->fr_type
= rs_fill
;
1843 frag
->fr_offset
= 0;
1846 /* Generate .debug_line content for the chain of line number entries
1847 beginning at E, for segment SEG. */
1850 process_entries (segT seg
, struct line_entry
*e
)
1852 unsigned filenum
= 1;
1854 unsigned column
= 0;
1856 unsigned flags
= DWARF2_LINE_DEFAULT_IS_STMT
? DWARF2_FLAG_IS_STMT
: 0;
1857 fragS
*last_frag
= NULL
, *frag
;
1858 addressT last_frag_ofs
= 0, frag_ofs
;
1859 symbolS
*last_lab
= NULL
, *lab
;
1860 struct line_entry
*next
;
1862 if (flag_dwarf_sections
)
1865 const char * sec_name
;
1867 /* Switch to the relevant sub-section before we start to emit
1868 the line number table.
1870 FIXME: These sub-sections do not have a normal Line Number
1871 Program Header, thus strictly speaking they are not valid
1872 DWARF sections. Unfortunately the DWARF standard assumes
1873 a one-to-one relationship between compilation units and
1874 line number tables. Thus we have to have a .debug_line
1875 section, as well as our sub-sections, and we have to ensure
1876 that all of the sub-sections are merged into a proper
1877 .debug_line section before a debugger sees them. */
1879 sec_name
= bfd_section_name (seg
);
1880 if (strcmp (sec_name
, ".text") != 0)
1882 name
= concat (".debug_line", sec_name
, (char *) NULL
);
1883 subseg_set (subseg_get (name
, FALSE
), 0);
1886 /* Don't create a .debug_line.text section -
1887 that is redundant. Instead just switch back to the
1888 normal .debug_line section. */
1889 subseg_set (subseg_get (".debug_line", FALSE
), 0);
1896 if (filenum
!= e
->loc
.filenum
)
1898 filenum
= e
->loc
.filenum
;
1899 out_opcode (DW_LNS_set_file
);
1900 out_uleb128 (filenum
);
1903 if (column
!= e
->loc
.column
)
1905 column
= e
->loc
.column
;
1906 out_opcode (DW_LNS_set_column
);
1907 out_uleb128 (column
);
1910 if (e
->loc
.discriminator
!= 0)
1912 out_opcode (DW_LNS_extended_op
);
1913 out_leb128 (1 + sizeof_leb128 (e
->loc
.discriminator
, 0));
1914 out_opcode (DW_LNE_set_discriminator
);
1915 out_uleb128 (e
->loc
.discriminator
);
1918 if (isa
!= e
->loc
.isa
)
1921 out_opcode (DW_LNS_set_isa
);
1925 if ((e
->loc
.flags
^ flags
) & DWARF2_FLAG_IS_STMT
)
1927 flags
= e
->loc
.flags
;
1928 out_opcode (DW_LNS_negate_stmt
);
1931 if (e
->loc
.flags
& DWARF2_FLAG_BASIC_BLOCK
)
1932 out_opcode (DW_LNS_set_basic_block
);
1934 if (e
->loc
.flags
& DWARF2_FLAG_PROLOGUE_END
)
1935 out_opcode (DW_LNS_set_prologue_end
);
1937 if (e
->loc
.flags
& DWARF2_FLAG_EPILOGUE_BEGIN
)
1938 out_opcode (DW_LNS_set_epilogue_begin
);
1940 /* Don't try to optimize away redundant entries; gdb wants two
1941 entries for a function where the code starts on the same line as
1942 the {, and there's no way to identify that case here. Trust gcc
1943 to optimize appropriately. */
1944 line_delta
= e
->loc
.line
- line
;
1946 frag
= symbol_get_frag (lab
);
1947 frag_ofs
= S_GET_VALUE (lab
);
1949 if (last_frag
== NULL
1950 || (e
->loc
.view
== force_reset_view
&& force_reset_view
1951 /* If we're going to reset the view, but we know we're
1952 advancing the PC, we don't have to force with
1953 set_address. We know we do when we're at the same
1954 address of the same frag, and we know we might when
1955 we're in the beginning of a frag, and we were at the
1956 end of the previous frag. */
1957 && (frag
== last_frag
1958 ? (last_frag_ofs
== frag_ofs
)
1960 && ((offsetT
)last_frag_ofs
1961 >= get_frag_fix (last_frag
, seg
))))))
1964 out_inc_line_addr (line_delta
, 0);
1966 else if (frag
== last_frag
&& ! DWARF2_USE_FIXED_ADVANCE_PC
)
1967 out_inc_line_addr (line_delta
, frag_ofs
- last_frag_ofs
);
1969 relax_inc_line_addr (line_delta
, lab
, last_lab
);
1974 last_frag_ofs
= frag_ofs
;
1982 /* Emit a DW_LNE_end_sequence for the end of the section. */
1983 frag
= last_frag_for_seg (seg
);
1984 frag_ofs
= get_frag_fix (frag
, seg
);
1985 if (frag
== last_frag
&& ! DWARF2_USE_FIXED_ADVANCE_PC
)
1986 out_inc_line_addr (INT_MAX
, frag_ofs
- last_frag_ofs
);
1989 lab
= symbol_temp_new (seg
, frag
, frag_ofs
);
1990 relax_inc_line_addr (INT_MAX
, lab
, last_lab
);
1994 /* Switch to LINE_STR_SEG and output the given STR. Return the
1995 symbol pointing to the new string in the section. */
1998 add_line_strp (segT line_str_seg
, const char *str
)
2004 subseg_set (line_str_seg
, 0);
2006 sym
= symbol_temp_new_now_octets ();
2008 size
= strlen (str
) + 1;
2009 cp
= frag_more (size
);
2010 memcpy (cp
, str
, size
);
2016 /* Emit the directory and file tables for .debug_line. */
2019 out_dir_and_file_list (segT line_seg
, int sizeof_offset
)
2025 bfd_boolean emit_md5
= FALSE
;
2026 bfd_boolean emit_timestamps
= TRUE
;
2027 bfd_boolean emit_filesize
= TRUE
;
2028 segT line_str_seg
= NULL
;
2031 /* Output the Directory Table. */
2032 if (DWARF2_LINE_VERSION
>= 5)
2034 /* We only have one column in the directory table. */
2037 /* Describe the purpose and format of the column. */
2038 out_uleb128 (DW_LNCT_path
);
2039 /* Store these strings in the .debug_line_str section so they
2041 out_uleb128 (DW_FORM_line_strp
);
2043 /* Now state how many rows there are in the table. We need at
2044 least 1 if there is one or more file names to store the
2045 "working directory". */
2046 if (dirs_in_use
== 0 && files_in_use
> 0)
2049 out_uleb128 (dirs_in_use
);
2052 /* Emit directory list. */
2053 if (DWARF2_LINE_VERSION
>= 5 && (dirs_in_use
> 0 || files_in_use
> 0))
2055 line_str_seg
= subseg_new (".debug_line_str", 0);
2056 bfd_set_section_flags (line_str_seg
,
2057 SEC_READONLY
| SEC_DEBUGGING
| SEC_OCTETS
2058 | SEC_MERGE
| SEC_STRINGS
);
2059 line_str_seg
->entsize
= 1;
2061 /* DWARF5 uses slot zero, but that is only set explicitly
2062 using a .file 0 directive. If that isn't used, but dir
2063 one is used, then use that as main file directory.
2064 Otherwise use pwd as main file directory. */
2065 if (dirs_in_use
> 0 && dirs
!= NULL
&& dirs
[0] != NULL
)
2066 dir
= remap_debug_filename (dirs
[0]);
2067 else if (dirs_in_use
> 1 && dirs
!= NULL
&& dirs
[1] != NULL
)
2068 dir
= remap_debug_filename (dirs
[1]);
2070 dir
= remap_debug_filename (getpwd ());
2072 line_strp
= add_line_strp (line_str_seg
, dir
);
2073 subseg_set (line_seg
, 0);
2074 TC_DWARF2_EMIT_OFFSET (line_strp
, sizeof_offset
);
2076 for (i
= 1; i
< dirs_in_use
; ++i
)
2078 dir
= remap_debug_filename (dirs
[i
]);
2079 if (DWARF2_LINE_VERSION
< 5)
2081 size
= strlen (dir
) + 1;
2082 cp
= frag_more (size
);
2083 memcpy (cp
, dir
, size
);
2087 line_strp
= add_line_strp (line_str_seg
, dir
);
2088 subseg_set (line_seg
, 0);
2089 TC_DWARF2_EMIT_OFFSET (line_strp
, sizeof_offset
);
2093 if (DWARF2_LINE_VERSION
< 5)
2097 /* Output the File Name Table. */
2098 if (DWARF2_LINE_VERSION
>= 5)
2100 unsigned int columns
= 4;
2102 if (((unsigned long) DWARF2_FILE_TIME_NAME ("", "")) == -1UL)
2104 emit_timestamps
= FALSE
;
2108 if (DWARF2_FILE_SIZE_NAME ("", "") == -1)
2110 emit_filesize
= FALSE
;
2114 for (i
= 0; i
< files_in_use
; ++i
)
2115 if (files
[i
].md5
[0] != 0)
2117 if (i
< files_in_use
)
2123 /* The number of format entries to follow. */
2125 /* The format of the file name. */
2126 out_uleb128 (DW_LNCT_path
);
2127 /* Store these strings in the .debug_line_str section so they
2129 out_uleb128 (DW_FORM_line_strp
);
2131 /* The format of the directory index. */
2132 out_uleb128 (DW_LNCT_directory_index
);
2133 out_uleb128 (DW_FORM_udata
);
2135 if (emit_timestamps
)
2137 /* The format of the timestamp. */
2138 out_uleb128 (DW_LNCT_timestamp
);
2139 out_uleb128 (DW_FORM_udata
);
2144 /* The format of the file size. */
2145 out_uleb128 (DW_LNCT_size
);
2146 out_uleb128 (DW_FORM_udata
);
2151 /* The format of the MD5 sum. */
2152 out_uleb128 (DW_LNCT_MD5
);
2153 out_uleb128 (DW_FORM_data16
);
2156 /* The number of entries in the table. */
2157 out_uleb128 (files_in_use
);
2160 for (i
= DWARF2_LINE_VERSION
> 4 ? 0 : 1; i
< files_in_use
; ++i
)
2162 const char *fullfilename
;
2164 if (files
[i
].filename
== NULL
)
2166 /* Prevent a crash later, particularly for file 1. DWARF5
2167 uses slot zero, but that is only set explicitly using a
2168 .file 0 directive. If that isn't used, but file 1 is,
2169 then use that as main file name. */
2170 if (DWARF2_LINE_VERSION
>= 5 && i
== 0 && files_in_use
>= 1)
2171 files
[0].filename
= files
[1].filename
;
2173 files
[i
].filename
= "";
2174 if (DWARF2_LINE_VERSION
< 5 || i
!= 0)
2176 as_bad (_("unassigned file number %ld"), (long) i
);
2181 fullfilename
= DWARF2_FILE_NAME (files
[i
].filename
,
2182 files
[i
].dir
? dirs
[files
[i
].dir
] : "");
2183 if (DWARF2_LINE_VERSION
< 5)
2185 size
= strlen (fullfilename
) + 1;
2186 cp
= frag_more (size
);
2187 memcpy (cp
, fullfilename
, size
);
2191 line_strp
= add_line_strp (line_str_seg
, fullfilename
);
2192 subseg_set (line_seg
, 0);
2193 TC_DWARF2_EMIT_OFFSET (line_strp
, sizeof_offset
);
2196 /* Directory number. */
2197 out_uleb128 (files
[i
].dir
);
2199 /* Output the last modification timestamp. */
2200 if (emit_timestamps
)
2204 timestamp
= DWARF2_FILE_TIME_NAME (files
[i
].filename
,
2205 files
[i
].dir
? dirs
[files
[i
].dir
] : "");
2206 if (timestamp
== -1)
2208 out_uleb128 (timestamp
);
2211 /* Output the filesize. */
2215 filesize
= DWARF2_FILE_SIZE_NAME (files
[i
].filename
,
2216 files
[i
].dir
? dirs
[files
[i
].dir
] : "");
2219 out_uleb128 (filesize
);
2222 /* Output the md5 sum. */
2227 for (b
= 0; b
< NUM_MD5_BYTES
; b
++)
2228 out_byte (files
[i
].md5
[b
]);
2232 if (DWARF2_LINE_VERSION
< 5)
2233 /* Terminate filename list. */
2237 /* Switch to SEC and output a header length field. Return the size of
2238 offsets used in SEC. The caller must set EXPR->X_add_symbol value
2239 to the end of the section. EXPR->X_add_number will be set to the
2240 negative size of the header. */
2243 out_header (asection
*sec
, expressionS
*exp
)
2248 subseg_set (sec
, 0);
2250 if (flag_dwarf_sections
)
2252 /* If we are going to put the start and end symbols in different
2253 sections, then we need real symbols, not just fake, local ones. */
2255 start_sym
= symbol_make (".Ldebug_line_start");
2256 end_sym
= symbol_make (".Ldebug_line_end");
2257 symbol_set_value_now (start_sym
);
2261 start_sym
= symbol_temp_new_now_octets ();
2262 end_sym
= symbol_temp_make ();
2265 /* Total length of the information. */
2266 exp
->X_op
= O_subtract
;
2267 exp
->X_add_symbol
= end_sym
;
2268 exp
->X_op_symbol
= start_sym
;
2270 switch (DWARF2_FORMAT (sec
))
2272 case dwarf2_format_32bit
:
2273 exp
->X_add_number
= -4;
2277 case dwarf2_format_64bit
:
2278 exp
->X_add_number
= -12;
2283 case dwarf2_format_64bit_irix
:
2284 exp
->X_add_number
= -8;
2289 as_fatal (_("internal error: unknown dwarf2 format"));
2293 /* Emit the collected .debug_line data. */
2296 out_debug_line (segT line_seg
)
2299 symbolS
*prologue_start
, *prologue_end
;
2304 memset (&exp
, 0, sizeof exp
);
2305 sizeof_offset
= out_header (line_seg
, &exp
);
2306 line_end
= exp
.X_add_symbol
;
2309 out_two (DWARF2_LINE_VERSION
);
2311 if (DWARF2_LINE_VERSION
>= 5)
2313 out_byte (sizeof_address
);
2314 out_byte (0); /* Segment Selector size. */
2316 /* Length of the prologue following this length. */
2317 prologue_start
= symbol_temp_make ();
2318 prologue_end
= symbol_temp_make ();
2319 exp
.X_op
= O_subtract
;
2320 exp
.X_add_symbol
= prologue_end
;
2321 exp
.X_op_symbol
= prologue_start
;
2322 exp
.X_add_number
= 0;
2323 emit_expr (&exp
, sizeof_offset
);
2324 symbol_set_value_now (prologue_start
);
2326 /* Parameters of the state machine. */
2327 out_byte (DWARF2_LINE_MIN_INSN_LENGTH
);
2328 if (DWARF2_LINE_VERSION
>= 4)
2329 out_byte (DWARF2_LINE_MAX_OPS_PER_INSN
);
2330 out_byte (DWARF2_LINE_DEFAULT_IS_STMT
);
2331 out_byte (DWARF2_LINE_BASE
);
2332 out_byte (DWARF2_LINE_RANGE
);
2333 out_byte (DWARF2_LINE_OPCODE_BASE
);
2335 /* Standard opcode lengths. */
2336 out_byte (0); /* DW_LNS_copy */
2337 out_byte (1); /* DW_LNS_advance_pc */
2338 out_byte (1); /* DW_LNS_advance_line */
2339 out_byte (1); /* DW_LNS_set_file */
2340 out_byte (1); /* DW_LNS_set_column */
2341 out_byte (0); /* DW_LNS_negate_stmt */
2342 out_byte (0); /* DW_LNS_set_basic_block */
2343 out_byte (0); /* DW_LNS_const_add_pc */
2344 out_byte (1); /* DW_LNS_fixed_advance_pc */
2345 out_byte (0); /* DW_LNS_set_prologue_end */
2346 out_byte (0); /* DW_LNS_set_epilogue_begin */
2347 out_byte (1); /* DW_LNS_set_isa */
2348 /* We have emitted 12 opcode lengths, so make that this
2349 matches up to the opcode base value we have been using. */
2350 gas_assert (DWARF2_LINE_OPCODE_BASE
== 13);
2352 out_dir_and_file_list (line_seg
, sizeof_offset
);
2354 symbol_set_value_now (prologue_end
);
2356 /* For each section, emit a statement program. */
2357 for (s
= all_segs
; s
; s
= s
->next
)
2358 /* Paranoia - this check should have already have
2359 been handled in dwarf2_gen_line_info_1(). */
2360 if (SEG_NORMAL (s
->seg
))
2361 process_entries (s
->seg
, s
->head
->head
);
2363 if (flag_dwarf_sections
)
2364 /* We have to switch to the special .debug_line_end section
2365 before emitting the end-of-debug_line symbol. The linker
2366 script arranges for this section to be placed after all the
2367 (potentially garbage collected) .debug_line.<foo> sections.
2368 This section contains the line_end symbol which is used to
2369 compute the size of the linked .debug_line section, as seen
2370 in the DWARF Line Number header. */
2371 subseg_set (subseg_get (".debug_line_end", FALSE
), 0);
2373 symbol_set_value_now (line_end
);
2377 out_debug_ranges (segT ranges_seg
, symbolS
**ranges_sym
)
2379 unsigned int addr_size
= sizeof_address
;
2384 memset (&exp
, 0, sizeof exp
);
2385 subseg_set (ranges_seg
, 0);
2387 /* For DW_AT_ranges to point at (there is no header, so really start
2388 of section, but see out_debug_rnglists). */
2389 *ranges_sym
= symbol_temp_new_now_octets ();
2391 /* Base Address Entry. */
2392 for (i
= 0; i
< addr_size
; i
++)
2394 for (i
= 0; i
< addr_size
; i
++)
2397 /* Range List Entry. */
2398 for (s
= all_segs
; s
; s
= s
->next
)
2403 frag
= first_frag_for_seg (s
->seg
);
2404 beg
= symbol_temp_new (s
->seg
, frag
, 0);
2405 s
->text_start
= beg
;
2407 frag
= last_frag_for_seg (s
->seg
);
2408 end
= symbol_temp_new (s
->seg
, frag
, get_frag_fix (frag
, s
->seg
));
2411 exp
.X_op
= O_symbol
;
2412 exp
.X_add_symbol
= beg
;
2413 exp
.X_add_number
= 0;
2414 emit_expr (&exp
, addr_size
);
2416 exp
.X_op
= O_symbol
;
2417 exp
.X_add_symbol
= end
;
2418 exp
.X_add_number
= 0;
2419 emit_expr (&exp
, addr_size
);
2422 /* End of Range Entry. */
2423 for (i
= 0; i
< addr_size
; i
++)
2425 for (i
= 0; i
< addr_size
; i
++)
2430 out_debug_rnglists (segT ranges_seg
, symbolS
**ranges_sym
)
2433 symbolS
*ranges_end
;
2437 memset (&exp
, 0, sizeof exp
);
2438 out_header (ranges_seg
, &exp
);
2439 ranges_end
= exp
.X_add_symbol
;
2441 out_two (DWARF2_RNGLISTS_VERSION
);
2442 out_byte (sizeof_address
);
2443 out_byte (0); /* Segment Selector size. */
2444 out_four (0); /* Offset entry count. */
2446 /* For DW_AT_ranges to point at (must be after the header). */
2447 *ranges_sym
= symbol_temp_new_now_octets ();
2449 for (s
= all_segs
; s
; s
= s
->next
)
2454 out_byte (DW_RLE_start_length
);
2456 frag
= first_frag_for_seg (s
->seg
);
2457 beg
= symbol_temp_new (s
->seg
, frag
, 0);
2458 s
->text_start
= beg
;
2460 frag
= last_frag_for_seg (s
->seg
);
2461 end
= symbol_temp_new (s
->seg
, frag
, get_frag_fix (frag
, s
->seg
));
2464 exp
.X_op
= O_symbol
;
2465 exp
.X_add_symbol
= beg
;
2466 exp
.X_add_number
= 0;
2467 emit_expr (&exp
, sizeof_address
);
2469 exp
.X_op
= O_symbol
;
2470 exp
.X_add_symbol
= end
;
2471 exp
.X_add_number
= 0;
2472 emit_leb128_expr (&exp
, 0);
2475 out_byte (DW_RLE_end_of_list
);
2477 symbol_set_value_now (ranges_end
);
2480 /* Emit data for .debug_aranges. */
2483 out_debug_aranges (segT aranges_seg
, segT info_seg
)
2485 unsigned int addr_size
= sizeof_address
;
2489 symbolS
*aranges_end
;
2493 memset (&exp
, 0, sizeof exp
);
2494 sizeof_offset
= out_header (aranges_seg
, &exp
);
2495 aranges_end
= exp
.X_add_symbol
;
2496 size
= -exp
.X_add_number
;
2499 out_two (DWARF2_ARANGES_VERSION
);
2502 /* Offset to .debug_info. */
2503 TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg
), sizeof_offset
);
2504 size
+= sizeof_offset
;
2506 /* Size of an address (offset portion). */
2507 out_byte (addr_size
);
2510 /* Size of a segment descriptor. */
2514 /* Align the header. */
2515 while ((size
++ % (2 * addr_size
)) > 0)
2518 for (s
= all_segs
; s
; s
= s
->next
)
2523 frag
= first_frag_for_seg (s
->seg
);
2524 beg
= symbol_temp_new (s
->seg
, frag
, 0);
2525 s
->text_start
= beg
;
2527 frag
= last_frag_for_seg (s
->seg
);
2528 end
= symbol_temp_new (s
->seg
, frag
, get_frag_fix (frag
, s
->seg
));
2531 exp
.X_op
= O_symbol
;
2532 exp
.X_add_symbol
= beg
;
2533 exp
.X_add_number
= 0;
2534 emit_expr (&exp
, addr_size
);
2536 exp
.X_op
= O_subtract
;
2537 exp
.X_add_symbol
= end
;
2538 exp
.X_op_symbol
= beg
;
2539 exp
.X_add_number
= 0;
2540 emit_expr (&exp
, addr_size
);
2543 p
= frag_more (2 * addr_size
);
2544 md_number_to_chars (p
, 0, addr_size
);
2545 md_number_to_chars (p
+ addr_size
, 0, addr_size
);
2547 symbol_set_value_now (aranges_end
);
2550 /* Emit data for .debug_abbrev. Note that this must be kept in
2551 sync with out_debug_info below. */
2554 out_debug_abbrev (segT abbrev_seg
,
2555 segT info_seg ATTRIBUTE_UNUSED
,
2556 segT line_seg ATTRIBUTE_UNUSED
)
2559 subseg_set (abbrev_seg
, 0);
2562 out_uleb128 (DW_TAG_compile_unit
);
2563 out_byte (DW_CHILDREN_no
);
2564 if (DWARF2_VERSION
< 4)
2566 if (DWARF2_FORMAT (line_seg
) == dwarf2_format_32bit
)
2567 secoff_form
= DW_FORM_data4
;
2569 secoff_form
= DW_FORM_data8
;
2572 secoff_form
= DW_FORM_sec_offset
;
2573 out_abbrev (DW_AT_stmt_list
, secoff_form
);
2574 if (all_segs
->next
== NULL
)
2576 out_abbrev (DW_AT_low_pc
, DW_FORM_addr
);
2577 if (DWARF2_VERSION
< 4)
2578 out_abbrev (DW_AT_high_pc
, DW_FORM_addr
);
2580 out_abbrev (DW_AT_high_pc
, DW_FORM_udata
);
2583 out_abbrev (DW_AT_ranges
, secoff_form
);
2584 out_abbrev (DW_AT_name
, DW_FORM_strp
);
2585 out_abbrev (DW_AT_comp_dir
, DW_FORM_strp
);
2586 out_abbrev (DW_AT_producer
, DW_FORM_strp
);
2587 out_abbrev (DW_AT_language
, DW_FORM_data2
);
2590 /* Terminate the abbreviations for this compilation unit. */
2594 /* Emit a description of this compilation unit for .debug_info. */
2597 out_debug_info (segT info_seg
, segT abbrev_seg
, segT line_seg
,
2598 symbolS
*ranges_sym
, symbolS
*name_sym
,
2599 symbolS
*comp_dir_sym
, symbolS
*producer_sym
)
2605 memset (&exp
, 0, sizeof exp
);
2606 sizeof_offset
= out_header (info_seg
, &exp
);
2607 info_end
= exp
.X_add_symbol
;
2609 /* DWARF version. */
2610 out_two (DWARF2_VERSION
);
2612 if (DWARF2_VERSION
< 5)
2614 /* .debug_abbrev offset */
2615 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg
), sizeof_offset
);
2619 /* unit (header) type */
2620 out_byte (DW_UT_compile
);
2623 /* Target address size. */
2624 out_byte (sizeof_address
);
2626 if (DWARF2_VERSION
>= 5)
2628 /* .debug_abbrev offset */
2629 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg
), sizeof_offset
);
2632 /* DW_TAG_compile_unit DIE abbrev */
2635 /* DW_AT_stmt_list */
2636 TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg
),
2637 (DWARF2_FORMAT (line_seg
) == dwarf2_format_32bit
2640 /* These two attributes are emitted if all of the code is contiguous. */
2641 if (all_segs
->next
== NULL
)
2644 exp
.X_op
= O_symbol
;
2645 exp
.X_add_symbol
= all_segs
->text_start
;
2646 exp
.X_add_number
= 0;
2647 emit_expr (&exp
, sizeof_address
);
2650 if (DWARF2_VERSION
< 4)
2651 exp
.X_op
= O_symbol
;
2654 exp
.X_op
= O_subtract
;
2655 exp
.X_op_symbol
= all_segs
->text_start
;
2657 exp
.X_add_symbol
= all_segs
->text_end
;
2658 exp
.X_add_number
= 0;
2659 if (DWARF2_VERSION
< 4)
2660 emit_expr (&exp
, sizeof_address
);
2662 emit_leb128_expr (&exp
, 0);
2666 /* This attribute is emitted if the code is disjoint. */
2668 TC_DWARF2_EMIT_OFFSET (ranges_sym
, sizeof_offset
);
2671 /* DW_AT_name, DW_AT_comp_dir and DW_AT_producer. Symbols in .debug_str
2672 setup in out_debug_str below. */
2673 TC_DWARF2_EMIT_OFFSET (name_sym
, sizeof_offset
);
2674 TC_DWARF2_EMIT_OFFSET (comp_dir_sym
, sizeof_offset
);
2675 TC_DWARF2_EMIT_OFFSET (producer_sym
, sizeof_offset
);
2677 /* DW_AT_language. Yes, this is probably not really MIPS, but the
2678 dwarf2 draft has no standard code for assembler. */
2679 out_two (DW_LANG_Mips_Assembler
);
2681 symbol_set_value_now (info_end
);
2684 /* Emit the three debug strings needed in .debug_str and setup symbols
2685 to them for use in out_debug_info. */
2687 out_debug_str (segT str_seg
, symbolS
**name_sym
, symbolS
**comp_dir_sym
,
2688 symbolS
**producer_sym
)
2691 const char *comp_dir
;
2692 const char *dirname
;
2695 int first_file
= DWARF2_LINE_VERSION
> 4 ? 0 : 1;
2697 subseg_set (str_seg
, 0);
2699 /* DW_AT_name. We don't have the actual file name that was present
2700 on the command line, so assume files[first_file] is the main input file.
2701 We're not supposed to get called unless at least one line number
2702 entry was emitted, so this should always be defined. */
2703 *name_sym
= symbol_temp_new_now_octets ();
2704 if (files_in_use
== 0)
2706 if (files
[first_file
].dir
)
2708 dirname
= remap_debug_filename (dirs
[files
[first_file
].dir
]);
2709 len
= strlen (dirname
);
2711 /* Already has trailing slash. */
2712 p
= frag_more (len
);
2713 memcpy (p
, dirname
, len
);
2715 p
= frag_more (len
+ 1);
2716 memcpy (p
, dirname
, len
);
2717 INSERT_DIR_SEPARATOR (p
, len
);
2720 len
= strlen (files
[first_file
].filename
) + 1;
2721 p
= frag_more (len
);
2722 memcpy (p
, files
[first_file
].filename
, len
);
2724 /* DW_AT_comp_dir */
2725 *comp_dir_sym
= symbol_temp_new_now_octets ();
2726 comp_dir
= remap_debug_filename (getpwd ());
2727 len
= strlen (comp_dir
) + 1;
2728 p
= frag_more (len
);
2729 memcpy (p
, comp_dir
, len
);
2731 /* DW_AT_producer */
2732 *producer_sym
= symbol_temp_new_now_octets ();
2733 sprintf (producer
, "GNU AS %s", VERSION
);
2734 len
= strlen (producer
) + 1;
2735 p
= frag_more (len
);
2736 memcpy (p
, producer
, len
);
2742 last_seg_ptr
= &all_segs
;
2744 /* Select the default CIE version to produce here. The global
2745 starts with a value of -1 and will be modified to a valid value
2746 either by the user providing a command line option, or some
2747 targets will select their own default in md_after_parse_args. If
2748 we get here and the global still contains -1 then it is up to us
2749 to pick a sane default. The default we choose is 1, this is the
2750 CIE version gas has produced for a long time, and there seems no
2751 reason to change it yet. */
2752 if (flag_dwarf_cie_version
== -1)
2753 flag_dwarf_cie_version
= 1;
2756 /* Finish the dwarf2 debug sections. We emit .debug.line if there
2757 were any .file/.loc directives, or --gdwarf2 was given, and if the
2758 file has a non-empty .debug_info section and an empty .debug_line
2759 section. If we emit .debug_line, and the .debug_info section is
2760 empty, we also emit .debug_info, .debug_aranges and .debug_abbrev.
2761 ALL_SEGS will be non-null if there were any .file/.loc directives,
2762 or --gdwarf2 was given and there were any located instructions
2766 dwarf2_finish (void)
2771 int emit_other_sections
= 0;
2772 int empty_debug_line
= 0;
2774 info_seg
= bfd_get_section_by_name (stdoutput
, ".debug_info");
2775 emit_other_sections
= info_seg
== NULL
|| !seg_not_empty_p (info_seg
);
2777 line_seg
= bfd_get_section_by_name (stdoutput
, ".debug_line");
2778 empty_debug_line
= line_seg
== NULL
|| !seg_not_empty_p (line_seg
);
2780 /* We can't construct a new debug_line section if we already have one.
2781 Give an error if we have seen any .loc, otherwise trust the user
2782 knows what they are doing and want to generate the .debug_line
2783 (and all other debug sections) themselves. */
2784 if (all_segs
&& !empty_debug_line
&& dwarf2_any_loc_directive_seen
)
2785 as_fatal ("duplicate .debug_line sections");
2787 if ((!all_segs
&& emit_other_sections
)
2788 || (!emit_other_sections
&& !empty_debug_line
))
2789 /* If there is no line information and no non-empty .debug_info
2790 section, or if there is both a non-empty .debug_info and a non-empty
2791 .debug_line, then we do nothing. */
2794 /* Calculate the size of an address for the target machine. */
2795 sizeof_address
= DWARF2_ADDR_SIZE (stdoutput
);
2797 /* Create and switch to the line number section. */
2798 if (empty_debug_line
)
2800 line_seg
= subseg_new (".debug_line", 0);
2801 bfd_set_section_flags (line_seg
,
2802 SEC_READONLY
| SEC_DEBUGGING
| SEC_OCTETS
);
2805 /* For each subsection, chain the debug entries together. */
2806 for (s
= all_segs
; s
; s
= s
->next
)
2808 struct line_subseg
*lss
= s
->head
;
2809 struct line_entry
**ptail
= lss
->ptail
;
2811 /* Reset the initial view of the first subsection of the
2813 if (lss
->head
&& lss
->head
->loc
.view
)
2814 set_or_check_view (lss
->head
, NULL
, NULL
);
2816 while ((lss
= lss
->next
) != NULL
)
2818 /* Link the first view of subsequent subsections to the
2820 if (lss
->head
&& lss
->head
->loc
.view
)
2821 set_or_check_view (lss
->head
,
2822 !s
->head
? NULL
: (struct line_entry
*)ptail
,
2823 s
->head
? s
->head
->head
: NULL
);
2829 if (empty_debug_line
)
2830 out_debug_line (line_seg
);
2832 /* If this is assembler generated line info, and there is no
2833 debug_info already, we need .debug_info, .debug_abbrev and
2834 .debug_str sections as well. */
2835 if (emit_other_sections
)
2840 symbolS
*name_sym
, *comp_dir_sym
, *producer_sym
, *ranges_sym
;
2842 gas_assert (all_segs
);
2844 info_seg
= subseg_new (".debug_info", 0);
2845 abbrev_seg
= subseg_new (".debug_abbrev", 0);
2846 aranges_seg
= subseg_new (".debug_aranges", 0);
2847 str_seg
= subseg_new (".debug_str", 0);
2849 bfd_set_section_flags (info_seg
,
2850 SEC_READONLY
| SEC_DEBUGGING
| SEC_OCTETS
);
2851 bfd_set_section_flags (abbrev_seg
,
2852 SEC_READONLY
| SEC_DEBUGGING
| SEC_OCTETS
);
2853 bfd_set_section_flags (aranges_seg
,
2854 SEC_READONLY
| SEC_DEBUGGING
| SEC_OCTETS
);
2855 bfd_set_section_flags (str_seg
,
2856 SEC_READONLY
| SEC_DEBUGGING
| SEC_OCTETS
2857 | SEC_MERGE
| SEC_STRINGS
);
2858 str_seg
->entsize
= 1;
2860 record_alignment (aranges_seg
, ffs (2 * sizeof_address
) - 1);
2862 if (all_segs
->next
== NULL
)
2866 if (DWARF2_VERSION
< 5)
2868 segT ranges_seg
= subseg_new (".debug_ranges", 0);
2869 bfd_set_section_flags (ranges_seg
, (SEC_READONLY
2872 record_alignment (ranges_seg
, ffs (2 * sizeof_address
) - 1);
2873 out_debug_ranges (ranges_seg
, &ranges_sym
);
2877 segT rnglists_seg
= subseg_new (".debug_rnglists", 0);
2878 bfd_set_section_flags (rnglists_seg
, (SEC_READONLY
2881 out_debug_rnglists (rnglists_seg
, &ranges_sym
);
2885 out_debug_aranges (aranges_seg
, info_seg
);
2886 out_debug_abbrev (abbrev_seg
, info_seg
, line_seg
);
2887 out_debug_str (str_seg
, &name_sym
, &comp_dir_sym
, &producer_sym
);
2888 out_debug_info (info_seg
, abbrev_seg
, line_seg
, ranges_sym
,
2889 name_sym
, comp_dir_sym
, producer_sym
);
2893 /* Perform any deferred checks pertaining to debug information. */
2896 dwarf2dbg_final_check (void)
2898 /* Perform reset-view checks. Don't evaluate view_assert_failed
2899 recursively: it could be very deep. It's a chain of adds, with
2900 each chain element pointing to the next in X_add_symbol, and
2901 holding the check value in X_op_symbol. */
2902 while (view_assert_failed
)
2908 gas_assert (!symbol_resolved_p (view_assert_failed
));
2910 exp
= symbol_get_value_expression (view_assert_failed
);
2911 sym
= view_assert_failed
;
2913 /* If view_assert_failed looks like a compound check in the
2914 chain, break it up. */
2915 if (exp
->X_op
== O_add
&& exp
->X_add_number
== 0 && exp
->X_unsigned
)
2917 view_assert_failed
= exp
->X_add_symbol
;
2918 sym
= exp
->X_op_symbol
;
2921 view_assert_failed
= NULL
;
2923 failed
= resolve_symbol_value (sym
);
2924 if (!symbol_resolved_p (sym
) || failed
)
2926 as_bad (_("view number mismatch"));