1 /* dwarf2dbg.c - DWARF2 debug support
2 Copyright (C) 1999-2024 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] \
28 [discriminator VALUE] [view VALUE]
32 #include "safe-ctype.h"
34 #include "dwarf2dbg.h"
35 #include <filenames.h>
37 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
38 /* We need to decide which character to use as a directory separator.
39 Just because HAVE_DOS_BASED_FILE_SYSTEM is defined, it does not
40 necessarily mean that the backslash character is the one to use.
41 Some environments, eg Cygwin, can support both naming conventions.
42 So we use the heuristic that we only need to use the backslash if
43 the path is an absolute path starting with a DOS style drive
44 selector. eg C: or D: */
45 # define INSERT_DIR_SEPARATOR(string, offset) \
50 && string[1] == ':') \
51 string [offset] = '\\'; \
53 string [offset] = '/'; \
57 # define INSERT_DIR_SEPARATOR(string, offset) string[offset] = '/'
61 # define DWARF2_FORMAT(SEC) dwarf2_format_32bit
64 #ifndef DWARF2_ADDR_SIZE
65 # define DWARF2_ADDR_SIZE(bfd) (bfd_arch_bits_per_address (bfd) / 8)
68 #ifndef DWARF2_FILE_NAME
69 #define DWARF2_FILE_NAME(FILENAME, DIRNAME) FILENAME
72 #ifndef DWARF2_FILE_TIME_NAME
73 #define DWARF2_FILE_TIME_NAME(FILENAME,DIRNAME) -1
76 #ifndef DWARF2_FILE_SIZE_NAME
77 #define DWARF2_FILE_SIZE_NAME(FILENAME,DIRNAME) -1
80 #ifndef DWARF2_VERSION
81 #define DWARF2_VERSION dwarf_level
84 /* The .debug_aranges version has been 2 in DWARF version 2, 3 and 4. */
85 #ifndef DWARF2_ARANGES_VERSION
86 #define DWARF2_ARANGES_VERSION 2
89 /* The .debug_line version is the same as the .debug_info version. */
90 #ifndef DWARF2_LINE_VERSION
91 #define DWARF2_LINE_VERSION DWARF2_VERSION
94 /* The .debug_rnglists has only been in DWARF version 5. */
95 #ifndef DWARF2_RNGLISTS_VERSION
96 #define DWARF2_RNGLISTS_VERSION 5
103 /* Since we can't generate the prolog until the body is complete, we
104 use three different subsegments for .debug_line: one holding the
105 prolog, one for the directory and filename info, and one for the
106 body ("statement program"). */
111 /* If linker relaxation might change offsets in the code, the DWARF special
112 opcodes and variable-length operands cannot be used. If this macro is
113 nonzero, use the DW_LNS_fixed_advance_pc opcode instead. */
114 #ifndef DWARF2_USE_FIXED_ADVANCE_PC
115 # define DWARF2_USE_FIXED_ADVANCE_PC linkrelax
118 /* First special line opcode - leave room for the standard opcodes.
119 Note: If you want to change this, you'll have to update the
120 "standard_opcode_lengths" table that is emitted below in
122 #define DWARF2_LINE_OPCODE_BASE (DWARF2_LINE_VERSION == 2 ? 10 : 13)
124 #ifndef DWARF2_LINE_BASE
125 /* Minimum line offset in a special line info. opcode. This value
126 was chosen to give a reasonable range of values. */
127 # define DWARF2_LINE_BASE -5
130 /* Range of line offsets in a special line info. opcode. */
131 #ifndef DWARF2_LINE_RANGE
132 # define DWARF2_LINE_RANGE 14
135 #ifndef DWARF2_LINE_MIN_INSN_LENGTH
136 /* Define the architecture-dependent minimum instruction length (in
137 bytes). This value should be rather too small than too big. */
138 # define DWARF2_LINE_MIN_INSN_LENGTH 1
141 /* Flag that indicates the initial value of the is_stmt_start flag. */
142 #define DWARF2_LINE_DEFAULT_IS_STMT 1
144 #ifndef DWARF2_LINE_MAX_OPS_PER_INSN
145 #define DWARF2_LINE_MAX_OPS_PER_INSN 1
148 /* Given a special op, return the line skip amount. */
149 #define SPECIAL_LINE(op) \
150 (((op) - DWARF2_LINE_OPCODE_BASE)%DWARF2_LINE_RANGE + DWARF2_LINE_BASE)
152 /* Given a special op, return the address skip amount (in units of
153 DWARF2_LINE_MIN_INSN_LENGTH. */
154 #define SPECIAL_ADDR(op) (((op) - DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)
156 /* The maximum address skip amount that can be encoded with a special op. */
157 #define MAX_SPECIAL_ADDR_DELTA SPECIAL_ADDR(255)
159 #ifndef TC_PARSE_CONS_RETURN_NONE
160 #define TC_PARSE_CONS_RETURN_NONE BFD_RELOC_NONE
163 #define GAS_ABBREV_COMP_UNIT 1
164 #define GAS_ABBREV_SUBPROG 2
165 #define GAS_ABBREV_NO_TYPE 3
169 struct line_entry
*next
;
171 struct dwarf2_line_info loc
;
174 /* Don't change the offset of next in line_entry. set_or_check_view
175 calls in dwarf2_gen_line_info_1 depend on it. */
176 static char unused
[offsetof(struct line_entry
, next
) ? -1 : 1]
181 struct line_subseg
*next
;
183 struct line_entry
*head
;
184 struct line_entry
**ptail
;
185 struct line_entry
**pmove_tail
;
190 struct line_seg
*next
;
192 struct line_subseg
*head
;
197 /* Collects data for all line table entries during assembly. */
198 static struct line_seg
*all_segs
;
199 static struct line_seg
**last_seg_ptr
;
201 #define NUM_MD5_BYTES 16
205 const char * filename
;
207 unsigned char md5
[NUM_MD5_BYTES
];
210 /* Table of files used by .debug_line. */
211 static struct file_entry
*files
;
212 static unsigned int files_in_use
;
213 static unsigned int files_allocated
;
215 /* Table of directories used by .debug_line. */
217 static unsigned int dirs_in_use
;
218 static unsigned int dirs_allocated
;
220 /* TRUE when we've seen a .loc directive recently. Used to avoid
221 doing work when there's nothing to do. Will be reset by
222 dwarf2_consume_line_info. */
223 bool dwarf2_loc_directive_seen
;
225 /* TRUE when we've seen any .loc directive at any time during parsing.
226 Indicates the user wants us to generate a .debug_line section.
227 Used in dwarf2_finish as sanity check. */
228 static bool dwarf2_any_loc_directive_seen
;
230 /* TRUE when we're supposed to set the basic block mark whenever a
232 bool dwarf2_loc_mark_labels
;
234 /* Current location as indicated by the most recent .loc directive. */
235 static struct dwarf2_line_info current
;
237 /* This symbol is used to recognize view number forced resets in loc
239 static symbolS
*force_reset_view
;
241 /* This symbol evaluates to an expression that, if nonzero, indicates
242 some view assert check failed. */
243 static symbolS
*view_assert_failed
;
245 /* The size of an address on the target. */
246 static unsigned int sizeof_address
;
248 #ifndef TC_DWARF2_EMIT_OFFSET
249 #define TC_DWARF2_EMIT_OFFSET generic_dwarf2_emit_offset
251 /* Create an offset to .dwarf2_*. */
254 generic_dwarf2_emit_offset (symbolS
*symbol
, unsigned int size
)
258 memset (&exp
, 0, sizeof exp
);
260 exp
.X_add_symbol
= symbol
;
261 exp
.X_add_number
= 0;
262 emit_expr (&exp
, size
);
266 /* Find or create (if CREATE_P) an entry for SEG+SUBSEG in ALL_SEGS. */
268 static struct line_subseg
*
269 get_line_subseg (segT seg
, subsegT subseg
, bool create_p
)
271 struct line_seg
*s
= seg_info (seg
)->dwarf2_line_seg
;
272 struct line_subseg
**pss
, *lss
;
279 s
= XNEW (struct line_seg
);
284 last_seg_ptr
= &s
->next
;
285 seg_info (seg
)->dwarf2_line_seg
= s
;
288 gas_assert (seg
== s
->seg
);
290 for (pss
= &s
->head
; (lss
= *pss
) != NULL
; pss
= &lss
->next
)
292 if (lss
->subseg
== subseg
)
294 if (lss
->subseg
> subseg
)
298 lss
= XNEW (struct line_subseg
);
300 lss
->subseg
= subseg
;
302 lss
->ptail
= &lss
->head
;
303 lss
->pmove_tail
= &lss
->head
;
310 /* (Un)reverse the line_entry list starting from H. */
312 static struct line_entry
*
313 reverse_line_entry_list (struct line_entry
*h
)
315 struct line_entry
*p
= NULL
, *e
, *n
;
317 for (e
= h
; e
; e
= n
)
326 /* Compute the view for E based on the previous entry P. If we
327 introduce an (undefined) view symbol for P, and H is given (P must
328 be the tail in this case), introduce view symbols for earlier list
329 entries as well, until one of them is constant. */
332 set_or_check_view (struct line_entry
*e
, struct line_entry
*p
,
333 struct line_entry
*h
)
337 memset (&viewx
, 0, sizeof (viewx
));
338 viewx
.X_unsigned
= 1;
340 /* First, compute !(E->label > P->label), to tell whether or not
341 we're to reset the view number. If we can't resolve it to a
342 constant, keep it symbolic. */
343 if (!p
|| (e
->loc
.u
.view
== force_reset_view
&& force_reset_view
))
345 viewx
.X_op
= O_constant
;
346 viewx
.X_add_number
= 0;
347 viewx
.X_add_symbol
= NULL
;
348 viewx
.X_op_symbol
= NULL
;
353 viewx
.X_add_number
= 0;
354 viewx
.X_add_symbol
= e
->label
;
355 viewx
.X_op_symbol
= p
->label
;
356 resolve_expression (&viewx
);
357 if (viewx
.X_op
== O_constant
)
358 viewx
.X_add_number
= !viewx
.X_add_number
;
361 viewx
.X_add_symbol
= make_expr_symbol (&viewx
);
362 viewx
.X_add_number
= 0;
363 viewx
.X_op_symbol
= NULL
;
364 viewx
.X_op
= O_logical_not
;
368 if (S_IS_DEFINED (e
->loc
.u
.view
) && symbol_constant_p (e
->loc
.u
.view
))
370 expressionS
*value
= symbol_get_value_expression (e
->loc
.u
.view
);
371 /* We can't compare the view numbers at this point, because in
372 VIEWX we've only determined whether we're to reset it so
374 if (viewx
.X_op
== O_constant
)
376 if (!value
->X_add_number
!= !viewx
.X_add_number
)
377 as_bad (_("view number mismatch"));
379 /* Record the expression to check it later. It is the result of
380 a logical not, thus 0 or 1. We just add up all such deferred
381 expressions, and resolve it at the end. */
382 else if (!value
->X_add_number
)
384 symbolS
*deferred
= make_expr_symbol (&viewx
);
385 if (view_assert_failed
)
389 memset (&chk
, 0, sizeof (chk
));
392 chk
.X_add_number
= 0;
393 chk
.X_add_symbol
= view_assert_failed
;
394 chk
.X_op_symbol
= deferred
;
395 deferred
= make_expr_symbol (&chk
);
397 view_assert_failed
= deferred
;
401 if (viewx
.X_op
!= O_constant
|| viewx
.X_add_number
)
407 p
->loc
.u
.view
= symbol_temp_make ();
409 memset (&incv
, 0, sizeof (incv
));
411 incv
.X_op
= O_symbol
;
412 incv
.X_add_symbol
= p
->loc
.u
.view
;
413 incv
.X_add_number
= 1;
414 p_view
= symbol_get_value_expression (p
->loc
.u
.view
);
415 if (p_view
->X_op
== O_constant
|| p_view
->X_op
== O_symbol
)
417 /* If we can, constant fold increments so that a chain of
418 expressions v + 1 + 1 ... + 1 is not created.
419 resolve_expression isn't ideal for this purpose. The
420 base v might not be resolvable until later. */
421 incv
.X_op
= p_view
->X_op
;
422 incv
.X_add_symbol
= p_view
->X_add_symbol
;
423 incv
.X_add_number
= p_view
->X_add_number
+ 1;
426 if (viewx
.X_op
== O_constant
)
428 gas_assert (viewx
.X_add_number
== 1);
433 viewx
.X_add_symbol
= make_expr_symbol (&viewx
);
434 viewx
.X_add_number
= 0;
435 viewx
.X_op_symbol
= make_expr_symbol (&incv
);
436 viewx
.X_op
= O_multiply
;
440 if (!S_IS_DEFINED (e
->loc
.u
.view
))
442 symbol_set_value_expression (e
->loc
.u
.view
, &viewx
);
443 S_SET_SEGMENT (e
->loc
.u
.view
, expr_section
);
444 symbol_set_frag (e
->loc
.u
.view
, &zero_address_frag
);
447 /* Define and attempt to simplify any earlier views needed to
449 if (h
&& p
&& p
->loc
.u
.view
&& !S_IS_DEFINED (p
->loc
.u
.view
))
451 struct line_entry
*h2
;
452 /* Reverse the list to avoid quadratic behavior going backwards
453 in a single-linked list. */
454 struct line_entry
*r
= reverse_line_entry_list (h
);
457 /* Set or check views until we find a defined or absent view. */
460 /* Do not define the head of a (sub?)segment view while
461 handling others. It would be defined too early, without
462 regard to the last view of other subsegments.
463 set_or_check_view will be called for every head segment
467 set_or_check_view (r
, r
->next
, NULL
);
470 && r
->next
->loc
.u
.view
471 && !S_IS_DEFINED (r
->next
->loc
.u
.view
)
474 /* Unreverse the list, so that we can go forward again. */
475 h2
= reverse_line_entry_list (p
);
476 gas_assert (h2
== h
);
478 /* Starting from the last view we just defined, attempt to
479 simplify the view expressions, until we do so to P. */
482 /* The head view of a subsegment may remain undefined while
483 handling other elements, before it is linked to the last
484 view of the previous subsegment. */
487 gas_assert (S_IS_DEFINED (r
->loc
.u
.view
));
488 resolve_expression (symbol_get_value_expression (r
->loc
.u
.view
));
490 while (r
!= p
&& (r
= r
->next
));
492 /* Now that we've defined and computed all earlier views that might
493 be needed to compute E's, attempt to simplify it. */
494 resolve_expression (symbol_get_value_expression (e
->loc
.u
.view
));
498 /* Record an entry for LOC occurring at LABEL. */
501 dwarf2_gen_line_info_1 (symbolS
*label
, struct dwarf2_line_info
*loc
)
503 struct line_subseg
*lss
;
504 struct line_entry
*e
;
505 flagword need_flags
= SEC_LOAD
| SEC_CODE
;
507 /* PR 26850: Do not record LOCs in non-executable or non-loaded
508 sections. SEC_ALLOC isn't tested for non-ELF because obj-coff.c
509 obj_coff_section is careless in setting SEC_ALLOC. */
511 need_flags
|= SEC_ALLOC
;
512 if ((now_seg
->flags
& need_flags
) != need_flags
)
514 /* FIXME: Add code to suppress multiple warnings ? */
515 if (debug_type
!= DEBUG_DWARF2
)
516 as_warn ("dwarf line number information for %s ignored",
517 segment_name (now_seg
));
521 e
= XNEW (struct line_entry
);
526 lss
= get_line_subseg (now_seg
, now_subseg
, true);
528 /* Subseg heads are chained to previous subsegs in
530 if (loc
->filenum
!= -1u && loc
->u
.view
&& lss
->head
)
531 set_or_check_view (e
, (struct line_entry
*) lss
->ptail
, lss
->head
);
534 lss
->ptail
= &e
->next
;
537 /* Record an entry for LOC occurring at OFS within the current fragment. */
539 static unsigned int dw2_line
;
540 static const char *dw2_filename
;
541 static int label_num
;
544 dwarf2_gen_line_info (addressT ofs
, struct dwarf2_line_info
*loc
)
548 /* Early out for as-yet incomplete location information. */
551 if (loc
->filenum
== 0)
555 if (DWARF2_LINE_VERSION
< 5)
559 /* Don't emit sequences of line symbols for the same line when the
560 symbols apply to assembler code. It is necessary to emit
561 duplicate line symbols when a compiler asks for them, because GDB
562 uses them to determine the end of the prologue. */
563 if (debug_type
== DEBUG_DWARF2
)
565 if (dw2_line
== loc
->line
)
567 if (dw2_filename
== loc
->u
.filename
)
569 if (filename_cmp (dw2_filename
, loc
->u
.filename
) == 0)
571 dw2_filename
= loc
->u
.filename
;
576 dw2_line
= loc
->line
;
577 dw2_filename
= loc
->u
.filename
;
584 /* Use a non-fake name for the line number location,
585 so that it can be referred to by relocations. */
586 sprintf (name
, ".Loc.%u", label_num
);
588 sym
= symbol_new (name
, now_seg
, frag_now
, ofs
);
591 sym
= symbol_temp_new (now_seg
, frag_now
, ofs
);
592 dwarf2_gen_line_info_1 (sym
, loc
);
596 get_basename (const char * pathname
)
600 file
= lbasename (pathname
);
601 /* Don't make empty string from / or A: from A:/ . */
602 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
603 if (file
<= pathname
+ 3)
606 if (file
== pathname
+ 1)
613 get_directory_table_entry (const char *dirname
,
614 const char *file0_dirname
,
623 #ifndef DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
624 if (IS_DIR_SEPARATOR (dirname
[dirlen
- 1]))
632 for (d
= 0; d
< dirs_in_use
; ++d
)
635 && filename_ncmp (dirname
, dirs
[d
], dirlen
) == 0
636 && dirs
[d
][dirlen
] == '\0')
642 if (dirs
== NULL
|| dirs
[0] == NULL
)
644 const char * pwd
= file0_dirname
? file0_dirname
: getpwd ();
646 if (dwarf_level
>= 5 && filename_cmp (dirname
, pwd
) != 0)
648 /* In DWARF-5 the 0 entry in the directory table is
649 expected to be the same as the DW_AT_comp_dir (which
650 is set to the current build directory). Since we are
651 about to create a directory entry that is not the
652 same, allocate the current directory first. */
653 (void) get_directory_table_entry (pwd
, file0_dirname
,
664 if (d
>= dirs_allocated
)
666 unsigned int old
= dirs_allocated
;
667 #define DIR_TABLE_INCREMENT 32
668 dirs_allocated
= d
+ DIR_TABLE_INCREMENT
;
669 dirs
= XRESIZEVEC (char *, dirs
, dirs_allocated
);
670 memset (dirs
+ old
, 0, (dirs_allocated
- old
) * sizeof (char *));
673 dirs
[d
] = xmemdup0 (dirname
, dirlen
);
674 if (dirs_in_use
<= d
)
681 assign_file_to_slot (unsigned int i
, const char *file
, unsigned int dir
)
683 if (i
>= files_allocated
)
685 unsigned int want
= i
+ 32;
687 /* Catch wraparound. */
688 if (want
< files_allocated
690 || want
> UINT_MAX
/ sizeof (struct file_entry
))
692 as_bad (_("file number %u is too big"), i
);
696 files
= XRESIZEVEC (struct file_entry
, files
, want
);
697 memset (files
+ files_allocated
, 0,
698 (want
- files_allocated
) * sizeof (struct file_entry
));
699 files_allocated
= want
;
702 files
[i
].filename
= file
;
704 memset (files
[i
].md5
, 0, NUM_MD5_BYTES
);
706 if (files_in_use
< i
+ 1)
707 files_in_use
= i
+ 1;
712 /* Get a .debug_line file number for PATHNAME. If there is a
713 directory component to PATHNAME, then this will be stored
714 in the directory table, if it is not already present.
715 Returns the slot number allocated to that filename or -1
716 if there was a problem. */
718 static int last_used
;
719 static int last_used_dir_len
;
722 allocate_filenum (const char * pathname
)
728 /* Short circuit the common case of adding the same pathname
732 const char * dirname
= NULL
;
735 dirname
= dirs
[files
[last_used
].dir
];
739 if (filename_cmp (pathname
, files
[last_used
].filename
) == 0)
744 if (filename_ncmp (pathname
, dirname
, last_used_dir_len
- 1) == 0
745 && IS_DIR_SEPARATOR (pathname
[last_used_dir_len
- 1])
746 && filename_cmp (pathname
+ last_used_dir_len
,
747 files
[last_used
].filename
) == 0)
752 file
= get_basename (pathname
);
753 dir_len
= file
- pathname
;
755 dir
= get_directory_table_entry (pathname
, NULL
, dir_len
, false);
757 /* Do not use slot-0. That is specifically reserved for use by
758 the '.file 0 "name"' directive. */
759 for (i
= 1; i
< files_in_use
; ++i
)
760 if (files
[i
].dir
== dir
762 && filename_cmp (file
, files
[i
].filename
) == 0)
765 last_used_dir_len
= dir_len
;
769 if (!assign_file_to_slot (i
, file
, dir
))
773 last_used_dir_len
= dir_len
;
778 /* Run through the list of line entries starting at E, allocating
779 file entries for gas generated debug. */
782 do_allocate_filenum (struct line_entry
*e
)
786 if (e
->loc
.filenum
== -1u)
788 e
->loc
.filenum
= allocate_filenum (e
->loc
.u
.filename
);
789 e
->loc
.u
.view
= NULL
;
796 /* Remove any generated line entries. These don't live comfortably
797 with compiler generated line info. If THELOT then remove
798 everything, freeing all list entries we have created. */
801 purge_generated_debug (bool thelot
)
803 struct line_seg
*s
, *nexts
;
805 for (s
= all_segs
; s
; s
= nexts
)
807 struct line_subseg
*lss
, *nextlss
;
809 for (lss
= s
->head
; lss
; lss
= nextlss
)
811 struct line_entry
*e
, *next
;
813 for (e
= lss
->head
; e
; e
= next
)
816 know (e
->loc
.filenum
== -1u);
822 lss
->ptail
= &lss
->head
;
823 lss
->pmove_tail
= &lss
->head
;
831 seg_info (s
->seg
)->dwarf2_line_seg
= NULL
;
837 /* Allocate slot NUM in the .debug_line file table to FILENAME.
838 If DIRNAME is not NULL or there is a directory component to FILENAME
839 then this will be stored in the directory table, if not already present.
840 if WITH_MD5 is TRUE then there is a md5 value in generic_bignum.
841 Returns TRUE if allocation succeeded, FALSE otherwise. */
844 allocate_filename_to_slot (const char *dirname
,
845 const char *filename
,
852 const char *file0_dirname
;
854 /* Short circuit the common case of adding the same pathname
856 if (num
< files_allocated
&& files
[num
].filename
!= NULL
)
858 const char * dir
= NULL
;
861 dir
= dirs
[files
[num
].dir
];
864 && memcmp (generic_bignum
, files
[num
].md5
, NUM_MD5_BYTES
) != 0)
869 if (dir
!= NULL
&& filename_cmp (dir
, dirname
) != 0)
872 if (filename_cmp (filename
, files
[num
].filename
) != 0)
875 /* If the filenames match, but the directory table entry was
876 empty, then fill it with the provided directory name. */
881 dirs_allocated
= files
[num
].dir
+ DIR_TABLE_INCREMENT
;
882 dirs
= XCNEWVEC (char *, dirs_allocated
);
885 dirs
[files
[num
].dir
] = xmemdup0 (dirname
, strlen (dirname
));
890 else if (dir
!= NULL
)
892 dirlen
= strlen (dir
);
893 if (filename_ncmp (filename
, dir
, dirlen
) == 0
894 && IS_DIR_SEPARATOR (filename
[dirlen
])
895 && filename_cmp (filename
+ dirlen
+ 1, files
[num
].filename
) == 0)
898 else /* dir == NULL */
900 file
= get_basename (filename
);
901 if (filename_cmp (file
, files
[num
].filename
) == 0)
903 /* The filenames match, but the directory table entry is empty.
904 Fill it with the provided directory name. */
909 dirs_allocated
= files
[num
].dir
+ DIR_TABLE_INCREMENT
;
910 dirs
= XCNEWVEC (char *, dirs_allocated
);
913 dirs
[files
[num
].dir
] = xmemdup0 (filename
, file
- filename
);
920 as_bad (_("file table slot %u is already occupied by a different file (%s%s%s vs %s%s%s)"),
922 dir
== NULL
? "" : dir
,
923 dir
== NULL
? "" : "/",
925 dirname
== NULL
? "" : dirname
,
926 dirname
== NULL
? "" : "/",
931 /* For file .0, the directory name is the current directory and the file
932 may be in another directory contained in the file name. */
935 file0_dirname
= dirname
;
937 file
= get_basename (filename
);
939 if (dirname
&& file
== filename
)
940 dirlen
= strlen (dirname
);
944 dirlen
= file
- filename
;
949 file0_dirname
= NULL
;
954 file
= get_basename (filename
);
955 dirlen
= file
- filename
;
959 dirlen
= strlen (dirname
);
964 d
= get_directory_table_entry (dirname
, file0_dirname
, dirlen
, num
== 0);
967 if (! assign_file_to_slot (i
, file
, d
))
972 if (target_big_endian
)
974 /* md5's are stored in litte endian format. */
975 unsigned int bits_remaining
= NUM_MD5_BYTES
* BITS_PER_CHAR
;
976 unsigned int byte
= NUM_MD5_BYTES
;
977 unsigned int bignum_index
= 0;
979 while (bits_remaining
)
981 unsigned int bignum_bits_remaining
= LITTLENUM_NUMBER_OF_BITS
;
982 valueT bignum_value
= generic_bignum
[bignum_index
];
985 while (bignum_bits_remaining
)
987 files
[i
].md5
[--byte
] = bignum_value
& 0xff;
989 bignum_bits_remaining
-= 8;
996 unsigned int bits_remaining
= NUM_MD5_BYTES
* BITS_PER_CHAR
;
997 unsigned int byte
= 0;
998 unsigned int bignum_index
= 0;
1000 while (bits_remaining
)
1002 unsigned int bignum_bits_remaining
= LITTLENUM_NUMBER_OF_BITS
;
1003 valueT bignum_value
= generic_bignum
[bignum_index
];
1007 while (bignum_bits_remaining
)
1009 files
[i
].md5
[byte
++] = bignum_value
& 0xff;
1011 bignum_bits_remaining
-= 8;
1012 bits_remaining
-= 8;
1018 memset (files
[i
].md5
, 0, NUM_MD5_BYTES
);
1023 /* Returns the current source information. If .file directives have
1024 been encountered, the info for the corresponding source file is
1025 returned. Otherwise, the info for the assembly source file is
1029 dwarf2_where (struct dwarf2_line_info
*line
)
1031 if (debug_type
== DEBUG_DWARF2
)
1033 line
->u
.filename
= as_where (&line
->line
);
1034 line
->filenum
= -1u;
1036 line
->flags
= DWARF2_FLAG_IS_STMT
;
1037 line
->isa
= current
.isa
;
1038 line
->discriminator
= current
.discriminator
;
1044 /* A hook to allow the target backend to inform the line number state
1045 machine of isa changes when assembler debug info is enabled. */
1048 dwarf2_set_isa (unsigned int isa
)
1053 /* Called for each machine instruction, or relatively atomic group of
1054 machine instructions (ie built-in macro). The instruction or group
1055 is SIZE bytes in length. If dwarf2 line number generation is called
1056 for, emit a line statement appropriately. */
1059 dwarf2_emit_insn (int size
)
1061 struct dwarf2_line_info loc
;
1063 if (debug_type
!= DEBUG_DWARF2
1064 ? !dwarf2_loc_directive_seen
1065 : !seen_at_least_1_file ())
1068 dwarf2_where (&loc
);
1070 dwarf2_gen_line_info ((frag_now_fix_octets () - size
) / OCTETS_PER_BYTE
, &loc
);
1071 dwarf2_consume_line_info ();
1074 /* Move all previously-emitted line entries for the current position by
1075 DELTA bytes. This function cannot be used to move the same entries
1079 dwarf2_move_insn (int delta
)
1081 struct line_subseg
*lss
;
1082 struct line_entry
*e
;
1088 lss
= get_line_subseg (now_seg
, now_subseg
, false);
1092 now
= frag_now_fix ();
1093 while ((e
= *lss
->pmove_tail
))
1095 if (S_GET_VALUE (e
->label
) == now
)
1096 S_SET_VALUE (e
->label
, now
+ delta
);
1097 lss
->pmove_tail
= &e
->next
;
1101 /* Called after the current line information has been either used with
1102 dwarf2_gen_line_info or saved with a machine instruction for later use.
1103 This resets the state of the line number information to reflect that
1104 it has been used. */
1107 dwarf2_consume_line_info (void)
1109 /* Unless we generate DWARF2 debugging information for each
1110 assembler line, we only emit one line symbol for one LOC. */
1111 dwarf2_loc_directive_seen
= false;
1113 current
.flags
&= ~(DWARF2_FLAG_BASIC_BLOCK
1114 | DWARF2_FLAG_PROLOGUE_END
1115 | DWARF2_FLAG_EPILOGUE_BEGIN
);
1116 current
.discriminator
= 0;
1117 current
.u
.view
= NULL
;
1120 /* Called for each (preferably code) label. If dwarf2_loc_mark_labels
1121 is enabled, emit a basic block marker. */
1124 dwarf2_emit_label (symbolS
*label
)
1126 struct dwarf2_line_info loc
;
1128 if (!dwarf2_loc_mark_labels
)
1130 if (S_GET_SEGMENT (label
) != now_seg
)
1132 if (!(bfd_section_flags (now_seg
) & SEC_CODE
))
1134 if (files_in_use
== 0 && debug_type
!= DEBUG_DWARF2
)
1137 dwarf2_where (&loc
);
1139 loc
.flags
|= DWARF2_FLAG_BASIC_BLOCK
;
1141 dwarf2_gen_line_info_1 (label
, &loc
);
1142 dwarf2_consume_line_info ();
1145 /* Handle two forms of .file directive:
1146 - Pass .file "source.c" to s_file
1147 - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
1149 If an entry is added to the file table, return a pointer to the filename. */
1152 dwarf2_directive_filename (void)
1154 bool with_md5
= false;
1157 const char * dirname
= NULL
;
1160 /* Continue to accept a bare string and pass it off. */
1162 if (*input_line_pointer
== '"')
1168 num
= get_absolute_expression ();
1170 if ((offsetT
) num
< 1)
1172 if (num
== 0 && dwarf_level
< 5)
1174 if ((offsetT
) num
< 0 || DWARF2_LINE_VERSION
< 5)
1176 as_bad (_("file number less than one"));
1177 ignore_rest_of_line ();
1182 /* FIXME: Should we allow ".file <N>\n" as an expression meaning
1183 "switch back to the already allocated file <N> as the current
1186 filename
= demand_copy_C_string (&filename_len
);
1187 if (filename
== NULL
)
1188 /* demand_copy_C_string will have already generated an error message. */
1191 /* For DWARF-5 support we also accept:
1192 .file <NUM> ["<dir>"] "<file>" [md5 <NUM>] */
1193 if (DWARF2_LINE_VERSION
> 4)
1196 if (*input_line_pointer
== '"')
1199 filename
= demand_copy_C_string (&filename_len
);
1200 if (filename
== NULL
)
1205 if (startswith (input_line_pointer
, "md5"))
1207 input_line_pointer
+= 3;
1211 expression_and_evaluate (& exp
);
1212 if (exp
.X_op
!= O_big
)
1213 as_bad (_("md5 value too small or not a constant"));
1219 demand_empty_rest_of_line ();
1221 /* A .file directive implies compiler generated debug information is
1222 being supplied. Turn off gas generated debug info. */
1223 if (debug_type
== DEBUG_DWARF2
)
1224 purge_generated_debug (false);
1225 debug_type
= DEBUG_NONE
;
1227 if (num
!= (unsigned int) num
1228 || num
>= (size_t) -1 / sizeof (struct file_entry
) - 32)
1230 as_bad (_("file number %lu is too big"), (unsigned long) num
);
1234 if (! allocate_filename_to_slot (dirname
, filename
, (unsigned int) num
,
1241 /* Calls dwarf2_directive_filename, but discards its result.
1242 Used in pseudo-op tables where the function result is ignored. */
1245 dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED
)
1247 (void) dwarf2_directive_filename ();
1251 dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED
)
1253 offsetT filenum
, line
;
1255 /* If we see two .loc directives in a row, force the first one to be
1257 if (dwarf2_loc_directive_seen
)
1258 dwarf2_emit_insn (0);
1260 filenum
= get_absolute_expression ();
1262 line
= get_absolute_expression ();
1266 if (filenum
== 0 && dwarf_level
< 5)
1268 if (filenum
< 0 || DWARF2_LINE_VERSION
< 5)
1270 as_bad (_("file number less than one"));
1275 if ((valueT
) filenum
>= files_in_use
|| files
[filenum
].filename
== NULL
)
1277 as_bad (_("unassigned file number %ld"), (long) filenum
);
1281 /* debug_type will be turned off by dwarf2_directive_filename, and
1282 if we don't have a dwarf style .file then files_in_use will be
1283 zero and the above error will trigger. */
1284 gas_assert (debug_type
== DEBUG_NONE
);
1286 current
.filenum
= filenum
;
1287 current
.line
= line
;
1288 current
.discriminator
= 0;
1293 if (files
[filenum
].dir
)
1295 size_t dir_len
= strlen (dirs
[files
[filenum
].dir
]);
1296 size_t file_len
= strlen (files
[filenum
].filename
);
1297 char *cp
= XNEWVEC (char, dir_len
+ 1 + file_len
+ 1);
1299 memcpy (cp
, dirs
[files
[filenum
].dir
], dir_len
);
1300 INSERT_DIR_SEPARATOR (cp
, dir_len
);
1301 memcpy (cp
+ dir_len
+ 1, files
[filenum
].filename
, file_len
);
1302 cp
[dir_len
+ file_len
+ 1] = '\0';
1303 listing_source_file (cp
);
1307 listing_source_file (files
[filenum
].filename
);
1308 listing_source_line (line
);
1313 if (ISDIGIT (*input_line_pointer
))
1315 current
.column
= get_absolute_expression ();
1319 while (ISALPHA (*input_line_pointer
))
1324 c
= get_symbol_name (& p
);
1326 if (strcmp (p
, "basic_block") == 0)
1328 current
.flags
|= DWARF2_FLAG_BASIC_BLOCK
;
1329 restore_line_pointer (c
);
1331 else if (strcmp (p
, "prologue_end") == 0)
1333 if (dwarf_level
< 3)
1335 current
.flags
|= DWARF2_FLAG_PROLOGUE_END
;
1336 restore_line_pointer (c
);
1338 else if (strcmp (p
, "epilogue_begin") == 0)
1340 if (dwarf_level
< 3)
1342 current
.flags
|= DWARF2_FLAG_EPILOGUE_BEGIN
;
1343 restore_line_pointer (c
);
1345 else if (strcmp (p
, "is_stmt") == 0)
1347 (void) restore_line_pointer (c
);
1348 value
= get_absolute_expression ();
1350 current
.flags
&= ~DWARF2_FLAG_IS_STMT
;
1351 else if (value
== 1)
1352 current
.flags
|= DWARF2_FLAG_IS_STMT
;
1355 as_bad (_("is_stmt value not 0 or 1"));
1359 else if (strcmp (p
, "isa") == 0)
1361 if (dwarf_level
< 3)
1363 (void) restore_line_pointer (c
);
1364 value
= get_absolute_expression ();
1366 current
.isa
= value
;
1369 as_bad (_("isa number less than zero"));
1373 else if (strcmp (p
, "discriminator") == 0)
1375 (void) restore_line_pointer (c
);
1376 value
= get_absolute_expression ();
1378 current
.discriminator
= value
;
1381 as_bad (_("discriminator less than zero"));
1385 else if (strcmp (p
, "view") == 0)
1389 (void) restore_line_pointer (c
);
1392 if (ISDIGIT (*input_line_pointer
)
1393 || *input_line_pointer
== '-')
1395 bool force_reset
= *input_line_pointer
== '-';
1397 value
= get_absolute_expression ();
1400 as_bad (_("numeric view can only be asserted to zero"));
1403 if (force_reset
&& force_reset_view
)
1404 sym
= force_reset_view
;
1407 sym
= symbol_temp_new (absolute_section
, &zero_address_frag
,
1410 force_reset_view
= sym
;
1415 char *name
= read_symbol_name ();
1419 sym
= symbol_find_or_make (name
);
1421 if (S_IS_DEFINED (sym
) || symbol_equated_p (sym
))
1423 if (S_IS_VOLATILE (sym
))
1424 sym
= symbol_clone (sym
, 1);
1425 else if (!S_CAN_BE_REDEFINED (sym
))
1427 as_bad (_("symbol `%s' is already defined"),
1432 S_SET_SEGMENT (sym
, undefined_section
);
1433 S_SET_VALUE (sym
, 0);
1434 symbol_set_frag (sym
, &zero_address_frag
);
1436 current
.u
.view
= sym
;
1440 as_bad (_("unknown .loc sub-directive `%s'"), p
);
1441 (void) restore_line_pointer (c
);
1448 demand_empty_rest_of_line ();
1449 dwarf2_any_loc_directive_seen
= dwarf2_loc_directive_seen
= true;
1451 /* If we were given a view id, emit the row right away. */
1453 dwarf2_emit_insn (0);
1457 dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED
)
1459 offsetT value
= get_absolute_expression ();
1461 if (value
!= 0 && value
!= 1)
1463 as_bad (_("expected 0 or 1"));
1464 ignore_rest_of_line ();
1468 dwarf2_loc_mark_labels
= value
!= 0;
1469 demand_empty_rest_of_line ();
1473 static struct frag
*
1474 first_frag_for_seg (segT seg
)
1476 return seg_info (seg
)->frchainP
->frch_root
;
1479 static struct frag
*
1480 last_frag_for_seg (segT seg
)
1482 frchainS
*f
= seg_info (seg
)->frchainP
;
1484 while (f
->frch_next
!= NULL
)
1487 return f
->frch_last
;
1490 /* Emit a single byte into the current segment. */
1495 FRAG_APPEND_1_CHAR (byte
);
1498 /* Emit a statement program opcode into the current segment. */
1501 out_opcode (int opc
)
1506 /* Emit a two-byte word into the current segment. */
1511 md_number_to_chars (frag_more (2), data
, 2);
1514 /* Emit a four byte word into the current segment. */
1519 md_number_to_chars (frag_more (4), data
, 4);
1522 /* Emit an unsigned "little-endian base 128" number. */
1525 out_uleb128 (addressT value
)
1527 output_leb128 (frag_more (sizeof_leb128 (value
, 0)), value
, 0);
1530 /* Emit a signed "little-endian base 128" number. */
1533 out_leb128 (addressT value
)
1535 output_leb128 (frag_more (sizeof_leb128 (value
, 1)), value
, 1);
1538 /* Emit a tuple for .debug_abbrev. */
1541 out_abbrev (int name
, int form
)
1547 /* Get the size of a fragment. */
1550 get_frag_fix (fragS
*frag
, segT seg
)
1555 return frag
->fr_fix
;
1557 /* If a fragment is the last in the chain, special measures must be
1558 taken to find its size before relaxation, since it may be pending
1559 on some subsegment chain. */
1560 for (fr
= seg_info (seg
)->frchainP
; fr
; fr
= fr
->frch_next
)
1561 if (fr
->frch_last
== frag
)
1562 return (char *) obstack_next_free (&fr
->frch_obstack
) - frag
->fr_literal
;
1567 /* Set an absolute address (may result in a relocation entry). */
1570 out_set_addr (symbolS
*sym
)
1574 memset (&exp
, 0, sizeof exp
);
1575 out_opcode (DW_LNS_extended_op
);
1576 out_uleb128 (sizeof_address
+ 1);
1578 out_opcode (DW_LNE_set_address
);
1579 exp
.X_op
= O_symbol
;
1580 exp
.X_add_symbol
= sym
;
1581 exp
.X_add_number
= 0;
1582 emit_expr (&exp
, sizeof_address
);
1586 scale_addr_delta (int line_delta
, addressT
*addr_delta
)
1588 static int printed_this
= 0;
1589 if (DWARF2_LINE_MIN_INSN_LENGTH
> 1)
1591 /* Don't error on non-instruction bytes at end of section. */
1592 if (line_delta
!= INT_MAX
1593 && *addr_delta
% DWARF2_LINE_MIN_INSN_LENGTH
!= 0 && !printed_this
)
1595 as_bad("unaligned opcodes detected in executable segment");
1598 *addr_delta
/= DWARF2_LINE_MIN_INSN_LENGTH
;
1602 /* Encode a pair of line and address skips as efficiently as possible.
1603 Note that the line skip is signed, whereas the address skip is unsigned.
1605 The following two routines *must* be kept in sync. This is
1606 enforced by making emit_inc_line_addr abort if we do not emit
1607 exactly the expected number of bytes. */
1610 size_inc_line_addr (int line_delta
, addressT addr_delta
)
1612 unsigned int tmp
, opcode
;
1615 /* Scale the address delta by the minimum instruction length. */
1616 scale_addr_delta (line_delta
, &addr_delta
);
1618 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
1619 We cannot use special opcodes here, since we want the end_sequence
1620 to emit the matrix entry. */
1621 if (line_delta
== INT_MAX
)
1623 if (addr_delta
== MAX_SPECIAL_ADDR_DELTA
)
1625 else if (addr_delta
)
1626 len
= 1 + sizeof_leb128 (addr_delta
, 0);
1630 /* Bias the line delta by the base. */
1631 tmp
= line_delta
- DWARF2_LINE_BASE
;
1633 /* If the line increment is out of range of a special opcode, we
1634 must encode it with DW_LNS_advance_line. */
1635 if (tmp
>= DWARF2_LINE_RANGE
)
1637 len
= 1 + sizeof_leb128 (line_delta
, 1);
1639 tmp
= 0 - DWARF2_LINE_BASE
;
1642 /* Bias the opcode by the special opcode base. */
1643 tmp
+= DWARF2_LINE_OPCODE_BASE
;
1645 /* Avoid overflow when addr_delta is large. */
1646 if (addr_delta
< 256U + MAX_SPECIAL_ADDR_DELTA
)
1648 /* Try using a special opcode. */
1649 opcode
= tmp
+ addr_delta
* DWARF2_LINE_RANGE
;
1653 /* Try using DW_LNS_const_add_pc followed by special op. */
1654 opcode
= tmp
+ (addr_delta
- MAX_SPECIAL_ADDR_DELTA
) * DWARF2_LINE_RANGE
;
1659 /* Otherwise use DW_LNS_advance_pc. */
1660 len
+= 1 + sizeof_leb128 (addr_delta
, 0);
1662 /* DW_LNS_copy or special opcode. */
1669 emit_inc_line_addr (int line_delta
, addressT addr_delta
, char *p
, int len
)
1671 unsigned int tmp
, opcode
;
1673 char *end
= p
+ len
;
1675 /* Line number sequences cannot go backward in addresses. This means
1676 we've incorrectly ordered the statements in the sequence. */
1677 gas_assert ((offsetT
) addr_delta
>= 0);
1679 /* Scale the address delta by the minimum instruction length. */
1680 scale_addr_delta (line_delta
, &addr_delta
);
1682 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
1683 We cannot use special opcodes here, since we want the end_sequence
1684 to emit the matrix entry. */
1685 if (line_delta
== INT_MAX
)
1687 if (addr_delta
== MAX_SPECIAL_ADDR_DELTA
)
1688 *p
++ = DW_LNS_const_add_pc
;
1689 else if (addr_delta
)
1691 *p
++ = DW_LNS_advance_pc
;
1692 p
+= output_leb128 (p
, addr_delta
, 0);
1695 *p
++ = DW_LNS_extended_op
;
1697 *p
++ = DW_LNE_end_sequence
;
1701 /* Bias the line delta by the base. */
1702 tmp
= line_delta
- DWARF2_LINE_BASE
;
1704 /* If the line increment is out of range of a special opcode, we
1705 must encode it with DW_LNS_advance_line. */
1706 if (tmp
>= DWARF2_LINE_RANGE
)
1708 *p
++ = DW_LNS_advance_line
;
1709 p
+= output_leb128 (p
, line_delta
, 1);
1712 tmp
= 0 - DWARF2_LINE_BASE
;
1716 /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
1718 if (line_delta
== 0 && addr_delta
== 0)
1724 /* Bias the opcode by the special opcode base. */
1725 tmp
+= DWARF2_LINE_OPCODE_BASE
;
1727 /* Avoid overflow when addr_delta is large. */
1728 if (addr_delta
< 256U + MAX_SPECIAL_ADDR_DELTA
)
1730 /* Try using a special opcode. */
1731 opcode
= tmp
+ addr_delta
* DWARF2_LINE_RANGE
;
1738 /* Try using DW_LNS_const_add_pc followed by special op. */
1739 opcode
= tmp
+ (addr_delta
- MAX_SPECIAL_ADDR_DELTA
) * DWARF2_LINE_RANGE
;
1742 *p
++ = DW_LNS_const_add_pc
;
1748 /* Otherwise use DW_LNS_advance_pc. */
1749 *p
++ = DW_LNS_advance_pc
;
1750 p
+= output_leb128 (p
, addr_delta
, 0);
1758 gas_assert (p
== end
);
1761 /* Handy routine to combine calls to the above two routines. */
1764 out_inc_line_addr (int line_delta
, addressT addr_delta
)
1766 int len
= size_inc_line_addr (line_delta
, addr_delta
);
1767 emit_inc_line_addr (line_delta
, addr_delta
, frag_more (len
), len
);
1770 /* Write out an alternative form of line and address skips using
1771 DW_LNS_fixed_advance_pc opcodes. This uses more space than the default
1772 line and address information, but it is required if linker relaxation
1773 could change the code offsets. The following two routines *must* be
1775 #define ADDR_DELTA_LIMIT 50000
1778 size_fixed_inc_line_addr (int line_delta
, addressT addr_delta
)
1782 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1783 if (line_delta
!= INT_MAX
)
1784 len
= 1 + sizeof_leb128 (line_delta
, 1);
1786 if (addr_delta
> ADDR_DELTA_LIMIT
)
1788 /* DW_LNS_extended_op */
1789 len
+= 1 + sizeof_leb128 (sizeof_address
+ 1, 0);
1790 /* DW_LNE_set_address */
1791 len
+= 1 + sizeof_address
;
1794 /* DW_LNS_fixed_advance_pc */
1797 if (line_delta
== INT_MAX
)
1798 /* DW_LNS_extended_op + DW_LNE_end_sequence */
1808 emit_fixed_inc_line_addr (int line_delta
, addressT addr_delta
, fragS
*frag
,
1812 char *end
= p
+ len
;
1814 /* Line number sequences cannot go backward in addresses. This means
1815 we've incorrectly ordered the statements in the sequence. */
1816 gas_assert ((offsetT
) addr_delta
>= 0);
1818 /* Verify that we have kept in sync with size_fixed_inc_line_addr. */
1819 gas_assert (len
== size_fixed_inc_line_addr (line_delta
, addr_delta
));
1821 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1822 if (line_delta
!= INT_MAX
)
1824 *p
++ = DW_LNS_advance_line
;
1825 p
+= output_leb128 (p
, line_delta
, 1);
1828 pexp
= symbol_get_value_expression (frag
->fr_symbol
);
1830 /* The DW_LNS_fixed_advance_pc opcode has a 2-byte operand so it can
1831 advance the address by at most 64K. Linker relaxation (without
1832 which this function would not be used) could change the operand by
1833 an unknown amount. If the address increment is getting close to
1834 the limit, just reset the address. */
1835 if (addr_delta
> ADDR_DELTA_LIMIT
)
1840 memset (&exp
, 0, sizeof exp
);
1841 gas_assert (pexp
->X_op
== O_subtract
);
1842 to_sym
= pexp
->X_add_symbol
;
1844 *p
++ = DW_LNS_extended_op
;
1845 p
+= output_leb128 (p
, sizeof_address
+ 1, 0);
1846 *p
++ = DW_LNE_set_address
;
1847 exp
.X_op
= O_symbol
;
1848 exp
.X_add_symbol
= to_sym
;
1849 exp
.X_add_number
= 0;
1850 emit_expr_fix (&exp
, sizeof_address
, frag
, p
, TC_PARSE_CONS_RETURN_NONE
);
1851 p
+= sizeof_address
;
1855 *p
++ = DW_LNS_fixed_advance_pc
;
1856 emit_expr_fix (pexp
, 2, frag
, p
, TC_PARSE_CONS_RETURN_NONE
);
1860 if (line_delta
== INT_MAX
)
1862 *p
++ = DW_LNS_extended_op
;
1864 *p
++ = DW_LNE_end_sequence
;
1869 gas_assert (p
== end
);
1872 /* Generate a variant frag that we can use to relax address/line
1873 increments between fragments of the target segment. */
1876 relax_inc_line_addr (int line_delta
, symbolS
*to_sym
, symbolS
*from_sym
)
1881 memset (&exp
, 0, sizeof exp
);
1882 exp
.X_op
= O_subtract
;
1883 exp
.X_add_symbol
= to_sym
;
1884 exp
.X_op_symbol
= from_sym
;
1885 exp
.X_add_number
= 0;
1887 /* The maximum size of the frag is the line delta with a maximum
1888 sized address delta. */
1889 if (DWARF2_USE_FIXED_ADVANCE_PC
)
1890 max_chars
= size_fixed_inc_line_addr (line_delta
,
1891 -DWARF2_LINE_MIN_INSN_LENGTH
);
1893 max_chars
= size_inc_line_addr (line_delta
, -DWARF2_LINE_MIN_INSN_LENGTH
);
1895 frag_var (rs_dwarf2dbg
, max_chars
, max_chars
, 1,
1896 make_expr_symbol (&exp
), line_delta
, NULL
);
1899 /* The function estimates the size of a rs_dwarf2dbg variant frag
1900 based on the current values of the symbols. It is called before
1901 the relaxation loop. We set fr_subtype to the expected length. */
1904 dwarf2dbg_estimate_size_before_relax (fragS
*frag
)
1909 addr_delta
= resolve_symbol_value (frag
->fr_symbol
);
1910 if (DWARF2_USE_FIXED_ADVANCE_PC
)
1911 size
= size_fixed_inc_line_addr (frag
->fr_offset
, addr_delta
);
1913 size
= size_inc_line_addr (frag
->fr_offset
, addr_delta
);
1915 frag
->fr_subtype
= size
;
1920 /* This function relaxes a rs_dwarf2dbg variant frag based on the
1921 current values of the symbols. fr_subtype is the current length
1922 of the frag. This returns the change in frag length. */
1925 dwarf2dbg_relax_frag (fragS
*frag
)
1927 int old_size
, new_size
;
1929 old_size
= frag
->fr_subtype
;
1930 new_size
= dwarf2dbg_estimate_size_before_relax (frag
);
1932 return new_size
- old_size
;
1935 /* This function converts a rs_dwarf2dbg variant frag into a normal
1936 fill frag. This is called after all relaxation has been done.
1937 fr_subtype will be the desired length of the frag. */
1940 dwarf2dbg_convert_frag (fragS
*frag
)
1944 if (DWARF2_USE_FIXED_ADVANCE_PC
)
1946 /* If linker relaxation is enabled then the distance between the two
1947 symbols in the frag->fr_symbol expression might change. Hence we
1948 cannot rely upon the value computed by resolve_symbol_value.
1949 Instead we leave the expression unfinalized and allow
1950 emit_fixed_inc_line_addr to create a fixup (which later becomes a
1951 relocation) that will allow the linker to correctly compute the
1952 actual address difference. We have to use a fixed line advance for
1953 this as we cannot (easily) relocate leb128 encoded values. */
1954 int saved_finalize_syms
= finalize_syms
;
1957 addr_diff
= resolve_symbol_value (frag
->fr_symbol
);
1958 finalize_syms
= saved_finalize_syms
;
1961 addr_diff
= resolve_symbol_value (frag
->fr_symbol
);
1963 /* fr_var carries the max_chars that we created the fragment with.
1964 fr_subtype carries the current expected length. We must, of
1965 course, have allocated enough memory earlier. */
1966 gas_assert (frag
->fr_var
>= (int) frag
->fr_subtype
);
1968 if (DWARF2_USE_FIXED_ADVANCE_PC
)
1969 emit_fixed_inc_line_addr (frag
->fr_offset
, addr_diff
, frag
,
1970 frag
->fr_literal
+ frag
->fr_fix
,
1973 emit_inc_line_addr (frag
->fr_offset
, addr_diff
,
1974 frag
->fr_literal
+ frag
->fr_fix
, frag
->fr_subtype
);
1976 frag
->fr_fix
+= frag
->fr_subtype
;
1977 frag
->fr_type
= rs_fill
;
1979 frag
->fr_offset
= 0;
1982 /* Generate .debug_line content for the chain of line number entries
1983 beginning at E, for segment SEG. */
1986 process_entries (segT seg
, struct line_entry
*e
)
1988 unsigned filenum
= 1;
1990 unsigned column
= 0;
1992 unsigned flags
= DWARF2_LINE_DEFAULT_IS_STMT
? DWARF2_FLAG_IS_STMT
: 0;
1993 fragS
*last_frag
= NULL
, *frag
;
1994 addressT last_frag_ofs
= 0, frag_ofs
;
1995 symbolS
*last_lab
= NULL
, *lab
;
1997 if (flag_dwarf_sections
)
2000 const char * sec_name
;
2002 /* Switch to the relevant sub-section before we start to emit
2003 the line number table.
2005 FIXME: These sub-sections do not have a normal Line Number
2006 Program Header, thus strictly speaking they are not valid
2007 DWARF sections. Unfortunately the DWARF standard assumes
2008 a one-to-one relationship between compilation units and
2009 line number tables. Thus we have to have a .debug_line
2010 section, as well as our sub-sections, and we have to ensure
2011 that all of the sub-sections are merged into a proper
2012 .debug_line section before a debugger sees them. */
2014 sec_name
= bfd_section_name (seg
);
2015 if (strcmp (sec_name
, ".text") != 0)
2017 name
= concat (".debug_line", sec_name
, (char *) NULL
);
2018 subseg_set (subseg_get (name
, false), 0);
2021 /* Don't create a .debug_line.text section -
2022 that is redundant. Instead just switch back to the
2023 normal .debug_line section. */
2024 subseg_set (subseg_get (".debug_line", false), 0);
2031 if (filenum
!= e
->loc
.filenum
)
2033 filenum
= e
->loc
.filenum
;
2034 out_opcode (DW_LNS_set_file
);
2035 out_uleb128 (filenum
);
2038 if (column
!= e
->loc
.column
)
2040 column
= e
->loc
.column
;
2041 out_opcode (DW_LNS_set_column
);
2042 out_uleb128 (column
);
2045 if (e
->loc
.discriminator
!= 0)
2047 out_opcode (DW_LNS_extended_op
);
2048 out_leb128 (1 + sizeof_leb128 (e
->loc
.discriminator
, 0));
2049 out_opcode (DW_LNE_set_discriminator
);
2050 out_uleb128 (e
->loc
.discriminator
);
2053 if (isa
!= e
->loc
.isa
)
2056 out_opcode (DW_LNS_set_isa
);
2060 if ((e
->loc
.flags
^ flags
) & DWARF2_FLAG_IS_STMT
)
2062 flags
= e
->loc
.flags
;
2063 out_opcode (DW_LNS_negate_stmt
);
2066 if (e
->loc
.flags
& DWARF2_FLAG_BASIC_BLOCK
)
2067 out_opcode (DW_LNS_set_basic_block
);
2069 if (e
->loc
.flags
& DWARF2_FLAG_PROLOGUE_END
)
2070 out_opcode (DW_LNS_set_prologue_end
);
2072 if (e
->loc
.flags
& DWARF2_FLAG_EPILOGUE_BEGIN
)
2073 out_opcode (DW_LNS_set_epilogue_begin
);
2075 /* Don't try to optimize away redundant entries; gdb wants two
2076 entries for a function where the code starts on the same line as
2077 the {, and there's no way to identify that case here. Trust gcc
2078 to optimize appropriately. */
2079 line_delta
= e
->loc
.line
- line
;
2081 frag
= symbol_get_frag (lab
);
2082 frag_ofs
= S_GET_VALUE (lab
);
2084 if (last_frag
== NULL
2085 || (e
->loc
.u
.view
== force_reset_view
&& force_reset_view
2086 /* If we're going to reset the view, but we know we're
2087 advancing the PC, we don't have to force with
2088 set_address. We know we do when we're at the same
2089 address of the same frag, and we know we might when
2090 we're in the beginning of a frag, and we were at the
2091 end of the previous frag. */
2092 && (frag
== last_frag
2093 ? (last_frag_ofs
== frag_ofs
)
2095 && ((offsetT
)last_frag_ofs
2096 >= get_frag_fix (last_frag
, seg
))))))
2099 out_inc_line_addr (line_delta
, 0);
2101 else if (frag
== last_frag
&& ! DWARF2_USE_FIXED_ADVANCE_PC
)
2102 out_inc_line_addr (line_delta
, frag_ofs
- last_frag_ofs
);
2104 relax_inc_line_addr (line_delta
, lab
, last_lab
);
2109 last_frag_ofs
= frag_ofs
;
2115 /* Emit a DW_LNE_end_sequence for the end of the section. */
2116 frag
= last_frag_for_seg (seg
);
2117 frag_ofs
= get_frag_fix (frag
, seg
);
2118 if (frag
== last_frag
&& ! DWARF2_USE_FIXED_ADVANCE_PC
)
2119 out_inc_line_addr (INT_MAX
, frag_ofs
- last_frag_ofs
);
2122 lab
= symbol_temp_new (seg
, frag
, frag_ofs
);
2123 relax_inc_line_addr (INT_MAX
, lab
, last_lab
);
2127 /* Switch to LINE_STR_SEG and output the given STR. Return the
2128 symbol pointing to the new string in the section. */
2131 add_line_strp (segT line_str_seg
, const char *str
)
2137 subseg_set (line_str_seg
, 0);
2139 sym
= symbol_temp_new_now_octets ();
2141 size
= strlen (str
) + 1;
2142 cp
= frag_more (size
);
2143 memcpy (cp
, str
, size
);
2149 /* Emit the directory and file tables for .debug_line. */
2152 out_dir_and_file_list (segT line_seg
, int sizeof_offset
)
2158 bool emit_md5
= false;
2159 bool emit_timestamps
= true;
2160 bool emit_filesize
= true;
2161 segT line_str_seg
= NULL
;
2162 symbolS
*line_strp
, *file0_strp
= NULL
;
2164 /* Output the Directory Table. */
2165 if (DWARF2_LINE_VERSION
>= 5)
2167 /* We only have one column in the directory table. */
2170 /* Describe the purpose and format of the column. */
2171 out_uleb128 (DW_LNCT_path
);
2172 /* Store these strings in the .debug_line_str section so they
2174 out_uleb128 (DW_FORM_line_strp
);
2176 /* Now state how many rows there are in the table. We need at
2177 least 1 if there is one or more file names to store the
2178 "working directory". */
2179 if (dirs_in_use
== 0 && files_in_use
> 0)
2182 out_uleb128 (dirs_in_use
);
2185 /* Emit directory list. */
2186 if (DWARF2_LINE_VERSION
>= 5 && (dirs_in_use
> 0 || files_in_use
> 0))
2188 line_str_seg
= subseg_new (".debug_line_str", 0);
2189 bfd_set_section_flags (line_str_seg
,
2190 SEC_READONLY
| SEC_DEBUGGING
| SEC_OCTETS
2191 | SEC_MERGE
| SEC_STRINGS
);
2192 line_str_seg
->entsize
= 1;
2194 /* DWARF5 uses slot zero, but that is only set explicitly
2195 using a .file 0 directive. Otherwise use pwd as main file
2197 if (dirs_in_use
> 0 && dirs
[0] != NULL
)
2198 dir
= remap_debug_filename (dirs
[0]);
2200 dir
= remap_debug_filename (getpwd ());
2202 line_strp
= add_line_strp (line_str_seg
, dir
);
2204 subseg_set (line_seg
, 0);
2205 TC_DWARF2_EMIT_OFFSET (line_strp
, sizeof_offset
);
2207 for (i
= 1; i
< dirs_in_use
; ++i
)
2209 dir
= remap_debug_filename (dirs
[i
]);
2210 if (DWARF2_LINE_VERSION
< 5)
2212 size
= strlen (dir
) + 1;
2213 cp
= frag_more (size
);
2214 memcpy (cp
, dir
, size
);
2218 line_strp
= add_line_strp (line_str_seg
, dir
);
2219 subseg_set (line_seg
, 0);
2220 TC_DWARF2_EMIT_OFFSET (line_strp
, sizeof_offset
);
2225 if (DWARF2_LINE_VERSION
< 5)
2229 /* Output the File Name Table. */
2230 if (DWARF2_LINE_VERSION
>= 5)
2232 unsigned int columns
= 4;
2234 if (((unsigned long) DWARF2_FILE_TIME_NAME ("", "")) == -1UL)
2236 emit_timestamps
= false;
2240 if (DWARF2_FILE_SIZE_NAME ("", "") == -1)
2242 emit_filesize
= false;
2246 for (i
= 0; i
< files_in_use
; ++i
)
2247 if (files
[i
].md5
[0] != 0)
2249 if (i
< files_in_use
)
2255 /* The number of format entries to follow. */
2257 /* The format of the file name. */
2258 out_uleb128 (DW_LNCT_path
);
2259 /* Store these strings in the .debug_line_str section so they
2261 out_uleb128 (DW_FORM_line_strp
);
2263 /* The format of the directory index. */
2264 out_uleb128 (DW_LNCT_directory_index
);
2265 out_uleb128 (DW_FORM_udata
);
2267 if (emit_timestamps
)
2269 /* The format of the timestamp. */
2270 out_uleb128 (DW_LNCT_timestamp
);
2271 out_uleb128 (DW_FORM_udata
);
2276 /* The format of the file size. */
2277 out_uleb128 (DW_LNCT_size
);
2278 out_uleb128 (DW_FORM_udata
);
2283 /* The format of the MD5 sum. */
2284 out_uleb128 (DW_LNCT_MD5
);
2285 out_uleb128 (DW_FORM_data16
);
2288 /* The number of entries in the table. */
2289 out_uleb128 (files_in_use
);
2292 for (i
= DWARF2_LINE_VERSION
> 4 ? 0 : 1; i
< files_in_use
; ++i
)
2294 const char *fullfilename
;
2296 if (files
[i
].filename
== NULL
)
2298 if (DWARF2_LINE_VERSION
< 5 || i
!= 0)
2300 as_bad (_("unassigned file number %ld"), (long) i
);
2303 /* DWARF5 uses slot zero, but that is only set explicitly using
2304 a .file 0 directive. If that isn't used, but file 1 is, then
2305 use that as main file name. */
2306 if (files_in_use
> 1 && files
[1].filename
!= NULL
)
2308 files
[0].filename
= files
[1].filename
;
2309 files
[0].dir
= files
[1].dir
;
2311 for (j
= 0; j
< NUM_MD5_BYTES
; ++j
)
2312 files
[0].md5
[j
] = files
[1].md5
[j
];
2315 files
[0].filename
= "";
2318 fullfilename
= DWARF2_FILE_NAME (files
[i
].filename
,
2319 files
[i
].dir
? dirs
[files
[i
].dir
] : "");
2320 if (DWARF2_LINE_VERSION
< 5)
2322 size
= strlen (fullfilename
) + 1;
2323 cp
= frag_more (size
);
2324 memcpy (cp
, fullfilename
, size
);
2329 line_strp
= add_line_strp (line_str_seg
, fullfilename
);
2331 line_strp
= file0_strp
;
2332 subseg_set (line_seg
, 0);
2333 TC_DWARF2_EMIT_OFFSET (line_strp
, sizeof_offset
);
2334 if (i
== 0 && files_in_use
> 1
2335 && files
[0].filename
== files
[1].filename
)
2336 file0_strp
= line_strp
;
2341 /* Directory number. */
2342 out_uleb128 (files
[i
].dir
);
2344 /* Output the last modification timestamp. */
2345 if (emit_timestamps
)
2349 timestamp
= DWARF2_FILE_TIME_NAME (files
[i
].filename
,
2350 files
[i
].dir
? dirs
[files
[i
].dir
] : "");
2351 if (timestamp
== -1)
2353 out_uleb128 (timestamp
);
2356 /* Output the filesize. */
2360 filesize
= DWARF2_FILE_SIZE_NAME (files
[i
].filename
,
2361 files
[i
].dir
? dirs
[files
[i
].dir
] : "");
2364 out_uleb128 (filesize
);
2367 /* Output the md5 sum. */
2372 for (b
= 0; b
< NUM_MD5_BYTES
; b
++)
2373 out_byte (files
[i
].md5
[b
]);
2377 if (DWARF2_LINE_VERSION
< 5)
2378 /* Terminate filename list. */
2382 /* Switch to SEC and output a header length field. Return the size of
2383 offsets used in SEC. The caller must set EXPR->X_add_symbol value
2384 to the end of the section. EXPR->X_add_number will be set to the
2385 negative size of the header. */
2388 out_header (asection
*sec
, expressionS
*exp
)
2393 subseg_set (sec
, 0);
2395 if (flag_dwarf_sections
)
2397 /* If we are going to put the start and end symbols in different
2398 sections, then we need real symbols, not just fake, local ones. */
2400 start_sym
= symbol_make (".Ldebug_line_start");
2401 end_sym
= symbol_make (".Ldebug_line_end");
2402 symbol_set_value_now (start_sym
);
2406 start_sym
= symbol_temp_new_now_octets ();
2407 end_sym
= symbol_temp_make ();
2410 /* Total length of the information. */
2411 exp
->X_op
= O_subtract
;
2412 exp
->X_add_symbol
= end_sym
;
2413 exp
->X_op_symbol
= start_sym
;
2415 switch (DWARF2_FORMAT (sec
))
2417 case dwarf2_format_32bit
:
2418 exp
->X_add_number
= -4;
2422 case dwarf2_format_64bit
:
2423 exp
->X_add_number
= -12;
2428 case dwarf2_format_64bit_irix
:
2429 exp
->X_add_number
= -8;
2434 as_fatal (_("internal error: unknown dwarf2 format"));
2438 /* Emit the collected .debug_line data. */
2441 out_debug_line (segT line_seg
)
2444 symbolS
*prologue_start
, *prologue_end
;
2449 memset (&exp
, 0, sizeof exp
);
2450 sizeof_offset
= out_header (line_seg
, &exp
);
2451 line_end
= exp
.X_add_symbol
;
2454 out_two (DWARF2_LINE_VERSION
);
2456 if (DWARF2_LINE_VERSION
>= 5)
2458 out_byte (sizeof_address
);
2459 out_byte (0); /* Segment Selector size. */
2461 /* Length of the prologue following this length. */
2462 prologue_start
= symbol_temp_make ();
2463 prologue_end
= symbol_temp_make ();
2464 exp
.X_op
= O_subtract
;
2465 exp
.X_add_symbol
= prologue_end
;
2466 exp
.X_op_symbol
= prologue_start
;
2467 exp
.X_add_number
= 0;
2468 emit_expr (&exp
, sizeof_offset
);
2469 symbol_set_value_now (prologue_start
);
2471 /* Parameters of the state machine. */
2472 out_byte (DWARF2_LINE_MIN_INSN_LENGTH
);
2473 if (DWARF2_LINE_VERSION
>= 4)
2474 out_byte (DWARF2_LINE_MAX_OPS_PER_INSN
);
2475 out_byte (DWARF2_LINE_DEFAULT_IS_STMT
);
2476 out_byte (DWARF2_LINE_BASE
);
2477 out_byte (DWARF2_LINE_RANGE
);
2478 out_byte (DWARF2_LINE_OPCODE_BASE
);
2480 /* Standard opcode lengths. */
2481 out_byte (0); /* DW_LNS_copy */
2482 out_byte (1); /* DW_LNS_advance_pc */
2483 out_byte (1); /* DW_LNS_advance_line */
2484 out_byte (1); /* DW_LNS_set_file */
2485 out_byte (1); /* DW_LNS_set_column */
2486 out_byte (0); /* DW_LNS_negate_stmt */
2487 out_byte (0); /* DW_LNS_set_basic_block */
2488 out_byte (0); /* DW_LNS_const_add_pc */
2489 out_byte (1); /* DW_LNS_fixed_advance_pc */
2490 if (DWARF2_LINE_VERSION
>= 3)
2492 out_byte (0); /* DW_LNS_set_prologue_end */
2493 out_byte (0); /* DW_LNS_set_epilogue_begin */
2494 out_byte (1); /* DW_LNS_set_isa */
2495 /* We have emitted 12 opcode lengths, so make that this
2496 matches up to the opcode base value we have been using. */
2497 gas_assert (DWARF2_LINE_OPCODE_BASE
== 13);
2500 gas_assert (DWARF2_LINE_OPCODE_BASE
== 10);
2502 out_dir_and_file_list (line_seg
, sizeof_offset
);
2504 symbol_set_value_now (prologue_end
);
2506 /* For each section, emit a statement program. */
2507 for (s
= all_segs
; s
; s
= s
->next
)
2508 /* Paranoia - this check should have already have
2509 been handled in dwarf2_gen_line_info_1(). */
2510 if (s
->head
->head
&& SEG_NORMAL (s
->seg
))
2511 process_entries (s
->seg
, s
->head
->head
);
2513 if (flag_dwarf_sections
)
2514 /* We have to switch to the special .debug_line_end section
2515 before emitting the end-of-debug_line symbol. The linker
2516 script arranges for this section to be placed after all the
2517 (potentially garbage collected) .debug_line.<foo> sections.
2518 This section contains the line_end symbol which is used to
2519 compute the size of the linked .debug_line section, as seen
2520 in the DWARF Line Number header. */
2521 subseg_set (subseg_get (".debug_line_end", false), 0);
2523 symbol_set_value_now (line_end
);
2527 out_debug_ranges (segT ranges_seg
, symbolS
**ranges_sym
)
2529 unsigned int addr_size
= sizeof_address
;
2534 memset (&exp
, 0, sizeof exp
);
2535 subseg_set (ranges_seg
, 0);
2537 /* For DW_AT_ranges to point at (there is no header, so really start
2538 of section, but see out_debug_rnglists). */
2539 *ranges_sym
= symbol_temp_new_now_octets ();
2541 /* Base Address Entry. */
2542 for (i
= 0; i
< addr_size
; i
++)
2544 for (i
= 0; i
< addr_size
; i
++)
2547 /* Range List Entry. */
2548 for (s
= all_segs
; s
; s
= s
->next
)
2553 frag
= first_frag_for_seg (s
->seg
);
2554 beg
= symbol_temp_new (s
->seg
, frag
, 0);
2555 s
->text_start
= beg
;
2557 frag
= last_frag_for_seg (s
->seg
);
2558 end
= symbol_temp_new (s
->seg
, frag
, get_frag_fix (frag
, s
->seg
));
2561 exp
.X_op
= O_symbol
;
2562 exp
.X_add_symbol
= beg
;
2563 exp
.X_add_number
= 0;
2564 emit_expr (&exp
, addr_size
);
2566 exp
.X_op
= O_symbol
;
2567 exp
.X_add_symbol
= end
;
2568 exp
.X_add_number
= 0;
2569 emit_expr (&exp
, addr_size
);
2572 /* End of Range Entry. */
2573 for (i
= 0; i
< addr_size
; i
++)
2575 for (i
= 0; i
< addr_size
; i
++)
2580 out_debug_rnglists (segT ranges_seg
, symbolS
**ranges_sym
)
2583 symbolS
*ranges_end
;
2587 memset (&exp
, 0, sizeof exp
);
2588 out_header (ranges_seg
, &exp
);
2589 ranges_end
= exp
.X_add_symbol
;
2591 out_two (DWARF2_RNGLISTS_VERSION
);
2592 out_byte (sizeof_address
);
2593 out_byte (0); /* Segment Selector size. */
2594 out_four (0); /* Offset entry count. */
2596 /* For DW_AT_ranges to point at (must be after the header). */
2597 *ranges_sym
= symbol_temp_new_now_octets ();
2599 for (s
= all_segs
; s
; s
= s
->next
)
2604 out_byte (DW_RLE_start_length
);
2606 frag
= first_frag_for_seg (s
->seg
);
2607 beg
= symbol_temp_new (s
->seg
, frag
, 0);
2608 s
->text_start
= beg
;
2610 frag
= last_frag_for_seg (s
->seg
);
2611 end
= symbol_temp_new (s
->seg
, frag
, get_frag_fix (frag
, s
->seg
));
2614 exp
.X_op
= O_symbol
;
2615 exp
.X_add_symbol
= beg
;
2616 exp
.X_add_number
= 0;
2617 emit_expr (&exp
, sizeof_address
);
2619 exp
.X_op
= O_symbol
;
2620 exp
.X_add_symbol
= end
;
2621 exp
.X_add_number
= 0;
2622 emit_leb128_expr (&exp
, 0);
2625 out_byte (DW_RLE_end_of_list
);
2627 symbol_set_value_now (ranges_end
);
2630 /* Emit data for .debug_aranges. */
2633 out_debug_aranges (segT aranges_seg
, segT info_seg
)
2635 unsigned int addr_size
= sizeof_address
;
2639 symbolS
*aranges_end
;
2643 memset (&exp
, 0, sizeof exp
);
2644 sizeof_offset
= out_header (aranges_seg
, &exp
);
2645 aranges_end
= exp
.X_add_symbol
;
2646 size
= -exp
.X_add_number
;
2649 out_two (DWARF2_ARANGES_VERSION
);
2652 /* Offset to .debug_info. */
2653 TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg
), sizeof_offset
);
2654 size
+= sizeof_offset
;
2656 /* Size of an address (offset portion). */
2657 out_byte (addr_size
);
2660 /* Size of a segment descriptor. */
2664 /* Align the header. */
2665 while ((size
++ % (2 * addr_size
)) > 0)
2668 for (s
= all_segs
; s
; s
= s
->next
)
2673 frag
= first_frag_for_seg (s
->seg
);
2674 beg
= symbol_temp_new (s
->seg
, frag
, 0);
2675 s
->text_start
= beg
;
2677 frag
= last_frag_for_seg (s
->seg
);
2678 end
= symbol_temp_new (s
->seg
, frag
, get_frag_fix (frag
, s
->seg
));
2681 exp
.X_op
= O_symbol
;
2682 exp
.X_add_symbol
= beg
;
2683 exp
.X_add_number
= 0;
2684 emit_expr (&exp
, addr_size
);
2686 exp
.X_op
= O_subtract
;
2687 exp
.X_add_symbol
= end
;
2688 exp
.X_op_symbol
= beg
;
2689 exp
.X_add_number
= 0;
2690 emit_expr (&exp
, addr_size
);
2693 p
= frag_more (2 * addr_size
);
2694 md_number_to_chars (p
, 0, addr_size
);
2695 md_number_to_chars (p
+ addr_size
, 0, addr_size
);
2697 symbol_set_value_now (aranges_end
);
2700 /* Emit data for .debug_abbrev. Note that this must be kept in
2701 sync with out_debug_info below. */
2704 out_debug_abbrev (segT abbrev_seg
,
2705 segT info_seg ATTRIBUTE_UNUSED
,
2706 segT line_seg ATTRIBUTE_UNUSED
,
2707 unsigned char *func_formP
)
2710 bool have_efunc
= false, have_lfunc
= false;
2712 /* Check the symbol table for function symbols which also have their size
2718 for (symp
= symbol_rootP
; symp
; symp
= symbol_next (symp
))
2720 /* A warning construct is a warning symbol followed by the
2721 symbol warned about. Skip this and the following symbol. */
2722 if (symbol_get_bfdsym (symp
)->flags
& BSF_WARNING
)
2724 symp
= symbol_next (symp
);
2730 if (!S_IS_DEFINED (symp
) || !S_IS_FUNCTION (symp
))
2733 #if defined (OBJ_ELF) /* || defined (OBJ_MAYBE_ELF) */
2734 if (S_GET_SIZE (symp
) == 0)
2736 if (!IS_ELF
|| symbol_get_obj (symp
)->size
== NULL
)
2743 if (S_IS_EXTERNAL (symp
))
2750 subseg_set (abbrev_seg
, 0);
2752 out_uleb128 (GAS_ABBREV_COMP_UNIT
);
2753 out_uleb128 (DW_TAG_compile_unit
);
2754 out_byte (have_efunc
|| have_lfunc
? DW_CHILDREN_yes
: DW_CHILDREN_no
);
2755 if (DWARF2_VERSION
< 4)
2757 if (DWARF2_FORMAT (line_seg
) == dwarf2_format_32bit
)
2758 secoff_form
= DW_FORM_data4
;
2760 secoff_form
= DW_FORM_data8
;
2763 secoff_form
= DW_FORM_sec_offset
;
2764 out_abbrev (DW_AT_stmt_list
, secoff_form
);
2765 if (all_segs
->next
== NULL
)
2767 out_abbrev (DW_AT_low_pc
, DW_FORM_addr
);
2768 if (DWARF2_VERSION
< 4)
2769 out_abbrev (DW_AT_high_pc
, DW_FORM_addr
);
2771 out_abbrev (DW_AT_high_pc
, DW_FORM_udata
);
2774 out_abbrev (DW_AT_ranges
, secoff_form
);
2775 out_abbrev (DW_AT_name
, DW_FORM_strp
);
2776 out_abbrev (DW_AT_comp_dir
, DW_FORM_strp
);
2777 out_abbrev (DW_AT_producer
, DW_FORM_strp
);
2778 out_abbrev (DW_AT_language
, DW_FORM_data2
);
2781 if (have_efunc
|| have_lfunc
)
2783 out_uleb128 (GAS_ABBREV_SUBPROG
);
2784 out_uleb128 (DW_TAG_subprogram
);
2785 out_byte (DW_CHILDREN_no
);
2786 out_abbrev (DW_AT_name
, DW_FORM_strp
);
2789 if (have_lfunc
|| DWARF2_VERSION
< 4)
2790 *func_formP
= DW_FORM_flag
;
2792 *func_formP
= DW_FORM_flag_present
;
2793 out_abbrev (DW_AT_external
, *func_formP
);
2796 /* Any non-zero value other than DW_FORM_flag will do. */
2797 *func_formP
= DW_FORM_block
;
2799 /* PR 29517: Provide a return type for the function. */
2800 if (DWARF2_VERSION
> 2)
2801 out_abbrev (DW_AT_type
, DW_FORM_ref_udata
);
2803 out_abbrev (DW_AT_low_pc
, DW_FORM_addr
);
2804 out_abbrev (DW_AT_high_pc
,
2805 DWARF2_VERSION
< 4 ? DW_FORM_addr
: DW_FORM_udata
);
2808 if (DWARF2_VERSION
> 2)
2810 /* PR 29517: We do not actually know the return type of these
2811 functions, so provide an abbrev that uses DWARF's unspecified
2813 out_uleb128 (GAS_ABBREV_NO_TYPE
);
2814 out_uleb128 (DW_TAG_unspecified_type
);
2815 out_byte (DW_CHILDREN_no
);
2820 /* Terminate the abbreviations for this compilation unit. */
2824 /* Emit a description of this compilation unit for .debug_info. */
2827 out_debug_info (segT info_seg
, segT abbrev_seg
, segT line_seg
, segT str_seg
,
2828 symbolS
*ranges_sym
, symbolS
*name_sym
,
2829 symbolS
*comp_dir_sym
, symbolS
*producer_sym
,
2830 unsigned char func_form
)
2836 memset (&exp
, 0, sizeof exp
);
2837 sizeof_offset
= out_header (info_seg
, &exp
);
2838 info_end
= exp
.X_add_symbol
;
2840 /* DWARF version. */
2841 out_two (DWARF2_VERSION
);
2843 if (DWARF2_VERSION
< 5)
2845 /* .debug_abbrev offset */
2846 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg
), sizeof_offset
);
2850 /* unit (header) type */
2851 out_byte (DW_UT_compile
);
2854 /* Target address size. */
2855 out_byte (sizeof_address
);
2857 if (DWARF2_VERSION
>= 5)
2859 /* .debug_abbrev offset */
2860 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg
), sizeof_offset
);
2863 /* DW_TAG_compile_unit DIE abbrev */
2864 out_uleb128 (GAS_ABBREV_COMP_UNIT
);
2866 /* DW_AT_stmt_list */
2867 TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg
),
2868 (DWARF2_FORMAT (line_seg
) == dwarf2_format_32bit
2871 /* These two attributes are emitted if all of the code is contiguous. */
2872 if (all_segs
->next
== NULL
)
2875 exp
.X_op
= O_symbol
;
2876 exp
.X_add_symbol
= all_segs
->text_start
;
2877 exp
.X_add_number
= 0;
2878 emit_expr (&exp
, sizeof_address
);
2881 if (DWARF2_VERSION
< 4)
2882 exp
.X_op
= O_symbol
;
2885 exp
.X_op
= O_subtract
;
2886 exp
.X_op_symbol
= all_segs
->text_start
;
2888 exp
.X_add_symbol
= all_segs
->text_end
;
2889 exp
.X_add_number
= 0;
2890 if (DWARF2_VERSION
< 4)
2891 emit_expr (&exp
, sizeof_address
);
2893 emit_leb128_expr (&exp
, 0);
2897 /* This attribute is emitted if the code is disjoint. */
2899 TC_DWARF2_EMIT_OFFSET (ranges_sym
, sizeof_offset
);
2902 /* DW_AT_name, DW_AT_comp_dir and DW_AT_producer. Symbols in .debug_str
2903 setup in out_debug_str below. */
2904 TC_DWARF2_EMIT_OFFSET (name_sym
, sizeof_offset
);
2905 TC_DWARF2_EMIT_OFFSET (comp_dir_sym
, sizeof_offset
);
2906 TC_DWARF2_EMIT_OFFSET (producer_sym
, sizeof_offset
);
2908 /* DW_AT_language. Yes, this is probably not really MIPS, but the
2909 dwarf2 draft has no standard code for assembler. */
2910 out_two (DW_LANG_Mips_Assembler
);
2915 symbolS
*no_type_tag
;
2917 if (DWARF2_VERSION
> 2)
2918 no_type_tag
= symbol_make (".Ldebug_no_type_tag");
2922 for (symp
= symbol_rootP
; symp
; symp
= symbol_next (symp
))
2926 expressionS size
= { .X_op
= O_constant
};
2928 /* Skip warning constructs (see above). */
2929 if (symbol_get_bfdsym (symp
)->flags
& BSF_WARNING
)
2931 symp
= symbol_next (symp
);
2937 if (!S_IS_DEFINED (symp
) || !S_IS_FUNCTION (symp
))
2940 #if defined (OBJ_ELF) /* || defined (OBJ_MAYBE_ELF) */
2941 size
.X_add_number
= S_GET_SIZE (symp
);
2942 if (size
.X_add_number
== 0 && IS_ELF
2943 && symbol_get_obj (symp
)->size
!= NULL
)
2946 size
.X_op_symbol
= make_expr_symbol (symbol_get_obj (symp
)->size
);
2949 if (size
.X_op
== O_constant
&& size
.X_add_number
== 0)
2952 subseg_set (str_seg
, 0);
2953 name_sym
= symbol_temp_new_now_octets ();
2954 name
= S_GET_NAME (symp
);
2955 len
= strlen (name
) + 1;
2956 memcpy (frag_more (len
), name
, len
);
2958 subseg_set (info_seg
, 0);
2960 /* DW_TAG_subprogram DIE abbrev */
2961 out_uleb128 (GAS_ABBREV_SUBPROG
);
2964 TC_DWARF2_EMIT_OFFSET (name_sym
, sizeof_offset
);
2966 /* DW_AT_external. */
2967 if (func_form
== DW_FORM_flag
)
2968 out_byte (S_IS_EXTERNAL (symp
));
2970 /* PR 29517: Let consumers know that we do not have
2971 return type information for this function. */
2972 if (DWARF2_VERSION
> 2)
2974 exp
.X_op
= O_symbol
;
2975 exp
.X_add_symbol
= no_type_tag
;
2976 exp
.X_add_number
= 0;
2977 emit_leb128_expr (&exp
, 0);
2981 exp
.X_op
= O_symbol
;
2982 exp
.X_add_symbol
= symp
;
2983 exp
.X_add_number
= 0;
2984 emit_expr (&exp
, sizeof_address
);
2987 if (DWARF2_VERSION
< 4)
2989 if (size
.X_op
== O_constant
)
2990 size
.X_op
= O_symbol
;
2991 size
.X_add_symbol
= symp
;
2992 emit_expr (&size
, sizeof_address
);
2994 else if (size
.X_op
== O_constant
)
2995 out_uleb128 (size
.X_add_number
);
2997 emit_leb128_expr (symbol_get_value_expression (size
.X_op_symbol
), 0);
3000 if (DWARF2_VERSION
> 2)
3002 /* PR 29517: Generate a DIE for the unspecified type abbrev.
3003 We do it here because it cannot be part of the top level DIE. */
3004 subseg_set (info_seg
, 0);
3005 symbol_set_value_now (no_type_tag
);
3006 out_uleb128 (GAS_ABBREV_NO_TYPE
);
3009 /* End of children. */
3013 symbol_set_value_now (info_end
);
3016 /* Emit the three debug strings needed in .debug_str and setup symbols
3017 to them for use in out_debug_info. */
3019 out_debug_str (segT str_seg
, symbolS
**name_sym
, symbolS
**comp_dir_sym
,
3020 symbolS
**producer_sym
)
3025 int first_file
= DWARF2_LINE_VERSION
> 4 ? 0 : 1;
3027 subseg_set (str_seg
, 0);
3029 /* DW_AT_name. We don't have the actual file name that was present
3030 on the command line, so assume files[first_file] is the main input file.
3031 We're not supposed to get called unless at least one line number
3032 entry was emitted, so this should always be defined. */
3033 *name_sym
= symbol_temp_new_now_octets ();
3034 if (files_in_use
== 0)
3036 if (files
[first_file
].dir
)
3038 char *dirname
= remap_debug_filename (dirs
[files
[first_file
].dir
]);
3039 len
= strlen (dirname
);
3041 /* Already has trailing slash. */
3042 p
= frag_more (len
);
3043 memcpy (p
, dirname
, len
);
3045 p
= frag_more (len
+ 1);
3046 memcpy (p
, dirname
, len
);
3047 INSERT_DIR_SEPARATOR (p
, len
);
3051 len
= strlen (files
[first_file
].filename
) + 1;
3052 p
= frag_more (len
);
3053 memcpy (p
, files
[first_file
].filename
, len
);
3055 /* DW_AT_comp_dir */
3056 *comp_dir_sym
= symbol_temp_new_now_octets ();
3057 char *comp_dir
= remap_debug_filename (getpwd ());
3058 len
= strlen (comp_dir
) + 1;
3059 p
= frag_more (len
);
3060 memcpy (p
, comp_dir
, len
);
3063 /* DW_AT_producer */
3064 *producer_sym
= symbol_temp_new_now_octets ();
3065 sprintf (producer
, "GNU AS %s", VERSION
);
3066 len
= strlen (producer
) + 1;
3067 p
= frag_more (len
);
3068 memcpy (p
, producer
, len
);
3075 last_seg_ptr
= &all_segs
;
3078 files_allocated
= 0;
3082 dwarf2_loc_directive_seen
= false;
3083 dwarf2_any_loc_directive_seen
= false;
3084 dwarf2_loc_mark_labels
= false;
3085 current
.filenum
= 1;
3089 current
.flags
= DWARF2_LINE_DEFAULT_IS_STMT
? DWARF2_FLAG_IS_STMT
: 0;
3090 current
.discriminator
= 0;
3091 current
.u
.view
= NULL
;
3092 force_reset_view
= NULL
;
3093 view_assert_failed
= NULL
;
3095 dw2_filename
= NULL
;
3099 /* Select the default CIE version to produce here. The global
3100 starts with a value of -1 and will be modified to a valid value
3101 either by the user providing a command line option, or some
3102 targets will select their own default in md_after_parse_args. If
3103 we get here and the global still contains -1 then it is up to us
3104 to pick a sane default. The default we choose is 1, this is the
3105 CIE version gas has produced for a long time, and there seems no
3106 reason to change it yet. */
3107 if (flag_dwarf_cie_version
== -1)
3108 flag_dwarf_cie_version
= 1;
3112 dwarf2_cleanup (void)
3114 purge_generated_debug (true);
3116 for (unsigned int i
= 0; i
< dirs_in_use
; i
++)
3121 /* Finish the dwarf2 debug sections. We emit .debug.line if there
3122 were any .file/.loc directives, or --gdwarf2 was given, and if the
3123 file has a non-empty .debug_info section and an empty .debug_line
3124 section. If we emit .debug_line, and the .debug_info section is
3125 empty, we also emit .debug_info, .debug_aranges and .debug_abbrev.
3126 ALL_SEGS will be non-null if there were any .file/.loc directives,
3127 or --gdwarf2 was given and there were any located instructions
3131 dwarf2_finish (void)
3136 int emit_other_sections
= 0;
3137 int empty_debug_line
= 0;
3139 info_seg
= bfd_get_section_by_name (stdoutput
, ".debug_info");
3140 emit_other_sections
= info_seg
== NULL
|| !seg_not_empty_p (info_seg
);
3142 line_seg
= bfd_get_section_by_name (stdoutput
, ".debug_line");
3143 empty_debug_line
= line_seg
== NULL
|| !seg_not_empty_p (line_seg
);
3145 /* We can't construct a new debug_line section if we already have one.
3146 Give an error if we have seen any .loc, otherwise trust the user
3147 knows what they are doing and want to generate the .debug_line
3148 (and all other debug sections) themselves. */
3149 if (all_segs
&& !empty_debug_line
&& dwarf2_any_loc_directive_seen
)
3150 as_fatal ("duplicate .debug_line sections");
3152 if ((!all_segs
&& emit_other_sections
)
3153 || (!emit_other_sections
&& !empty_debug_line
))
3154 /* If there is no line information and no non-empty .debug_info
3155 section, or if there is both a non-empty .debug_info and a non-empty
3156 .debug_line, then we do nothing. */
3162 /* Calculate the size of an address for the target machine. */
3163 sizeof_address
= DWARF2_ADDR_SIZE (stdoutput
);
3165 /* Create and switch to the line number section. */
3166 if (empty_debug_line
)
3168 line_seg
= subseg_new (".debug_line", 0);
3169 bfd_set_section_flags (line_seg
,
3170 SEC_READONLY
| SEC_DEBUGGING
| SEC_OCTETS
);
3173 for (s
= all_segs
; s
; s
= s
->next
)
3175 struct line_subseg
*lss
;
3177 for (lss
= s
->head
; lss
; lss
= lss
->next
)
3179 do_allocate_filenum (lss
->head
);
3182 /* For each subsection, chain the debug entries together. */
3183 for (s
= all_segs
; s
; s
= s
->next
)
3185 struct line_subseg
*lss
= s
->head
;
3186 struct line_entry
**ptail
= lss
->ptail
;
3188 /* Reset the initial view of the first subsection of the
3190 if (lss
->head
&& lss
->head
->loc
.u
.view
)
3191 set_or_check_view (lss
->head
, NULL
, NULL
);
3193 while ((lss
= lss
->next
) != NULL
)
3195 /* Link the first view of subsequent subsections to the
3197 if (lss
->head
&& lss
->head
->loc
.u
.view
)
3198 set_or_check_view (lss
->head
,
3199 !s
->head
? NULL
: (struct line_entry
*)ptail
,
3200 s
->head
? s
->head
->head
: NULL
);
3207 if (empty_debug_line
)
3208 out_debug_line (line_seg
);
3210 /* If this is assembler generated line info, and there is no
3211 debug_info already, we need .debug_info, .debug_abbrev and
3212 .debug_str sections as well. */
3213 if (emit_other_sections
)
3218 symbolS
*name_sym
, *comp_dir_sym
, *producer_sym
, *ranges_sym
;
3219 unsigned char func_form
= 0;
3221 gas_assert (all_segs
);
3223 info_seg
= subseg_new (".debug_info", 0);
3224 abbrev_seg
= subseg_new (".debug_abbrev", 0);
3225 aranges_seg
= subseg_new (".debug_aranges", 0);
3226 str_seg
= subseg_new (".debug_str", 0);
3228 bfd_set_section_flags (info_seg
,
3229 SEC_READONLY
| SEC_DEBUGGING
| SEC_OCTETS
);
3230 bfd_set_section_flags (abbrev_seg
,
3231 SEC_READONLY
| SEC_DEBUGGING
| SEC_OCTETS
);
3232 bfd_set_section_flags (aranges_seg
,
3233 SEC_READONLY
| SEC_DEBUGGING
| SEC_OCTETS
);
3234 bfd_set_section_flags (str_seg
,
3235 SEC_READONLY
| SEC_DEBUGGING
| SEC_OCTETS
3236 | SEC_MERGE
| SEC_STRINGS
);
3237 str_seg
->entsize
= 1;
3239 record_alignment (aranges_seg
, ffs (2 * sizeof_address
) - 1);
3241 if (all_segs
->next
== NULL
)
3245 if (DWARF2_VERSION
< 5)
3247 segT ranges_seg
= subseg_new (".debug_ranges", 0);
3248 bfd_set_section_flags (ranges_seg
, (SEC_READONLY
3251 record_alignment (ranges_seg
, ffs (2 * sizeof_address
) - 1);
3252 out_debug_ranges (ranges_seg
, &ranges_sym
);
3256 segT rnglists_seg
= subseg_new (".debug_rnglists", 0);
3257 bfd_set_section_flags (rnglists_seg
, (SEC_READONLY
3260 out_debug_rnglists (rnglists_seg
, &ranges_sym
);
3264 out_debug_aranges (aranges_seg
, info_seg
);
3265 out_debug_abbrev (abbrev_seg
, info_seg
, line_seg
, &func_form
);
3266 out_debug_str (str_seg
, &name_sym
, &comp_dir_sym
, &producer_sym
);
3267 out_debug_info (info_seg
, abbrev_seg
, line_seg
, str_seg
,
3268 ranges_sym
, name_sym
, comp_dir_sym
, producer_sym
,
3274 /* Perform any deferred checks pertaining to debug information. */
3277 dwarf2dbg_final_check (void)
3279 /* Perform reset-view checks. Don't evaluate view_assert_failed
3280 recursively: it could be very deep. It's a chain of adds, with
3281 each chain element pointing to the next in X_add_symbol, and
3282 holding the check value in X_op_symbol. */
3283 while (view_assert_failed
)
3289 gas_assert (!symbol_resolved_p (view_assert_failed
));
3291 exp
= symbol_get_value_expression (view_assert_failed
);
3292 sym
= view_assert_failed
;
3294 /* If view_assert_failed looks like a compound check in the
3295 chain, break it up. */
3296 if (exp
->X_op
== O_add
&& exp
->X_add_number
== 0 && exp
->X_unsigned
)
3298 view_assert_failed
= exp
->X_add_symbol
;
3299 sym
= exp
->X_op_symbol
;
3302 view_assert_failed
= NULL
;
3304 failed
= resolve_symbol_value (sym
);
3305 if (!symbol_resolved_p (sym
) || failed
)
3307 as_bad (_("view number mismatch"));