1 /* dwarf2dbg.c - DWARF2 debug support
2 Copyright (C) 1999-2016 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) 0
87 #ifndef DWARF2_FILE_SIZE_NAME
88 #define DWARF2_FILE_SIZE_NAME(FILENAME,DIRNAME) 0
91 #ifndef DWARF2_VERSION
92 #define DWARF2_VERSION 2
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 output version 2 .debug_line information. */
101 #ifndef DWARF2_LINE_VERSION
102 #define DWARF2_LINE_VERSION 2
109 /* Since we can't generate the prolog until the body is complete, we
110 use three different subsegments for .debug_line: one holding the
111 prolog, one for the directory and filename info, and one for the
112 body ("statement program"). */
117 /* If linker relaxation might change offsets in the code, the DWARF special
118 opcodes and variable-length operands cannot be used. If this macro is
119 nonzero, use the DW_LNS_fixed_advance_pc opcode instead. */
120 #ifndef DWARF2_USE_FIXED_ADVANCE_PC
121 # define DWARF2_USE_FIXED_ADVANCE_PC linkrelax
124 /* First special line opcde - leave room for the standard opcodes.
125 Note: If you want to change this, you'll have to update the
126 "standard_opcode_lengths" table that is emitted below in
128 #define DWARF2_LINE_OPCODE_BASE 13
130 #ifndef DWARF2_LINE_BASE
131 /* Minimum line offset in a special line info. opcode. This value
132 was chosen to give a reasonable range of values. */
133 # define DWARF2_LINE_BASE -5
136 /* Range of line offsets in a special line info. opcode. */
137 #ifndef DWARF2_LINE_RANGE
138 # define DWARF2_LINE_RANGE 14
141 #ifndef DWARF2_LINE_MIN_INSN_LENGTH
142 /* Define the architecture-dependent minimum instruction length (in
143 bytes). This value should be rather too small than too big. */
144 # define DWARF2_LINE_MIN_INSN_LENGTH 1
147 /* Flag that indicates the initial value of the is_stmt_start flag. */
148 #define DWARF2_LINE_DEFAULT_IS_STMT 1
150 /* Given a special op, return the line skip amount. */
151 #define SPECIAL_LINE(op) \
152 (((op) - DWARF2_LINE_OPCODE_BASE)%DWARF2_LINE_RANGE + DWARF2_LINE_BASE)
154 /* Given a special op, return the address skip amount (in units of
155 DWARF2_LINE_MIN_INSN_LENGTH. */
156 #define SPECIAL_ADDR(op) (((op) - DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)
158 /* The maximum address skip amount that can be encoded with a special op. */
159 #define MAX_SPECIAL_ADDR_DELTA SPECIAL_ADDR(255)
161 #ifndef TC_PARSE_CONS_RETURN_NONE
162 #define TC_PARSE_CONS_RETURN_NONE BFD_RELOC_NONE
166 struct line_entry *next;
168 struct dwarf2_line_info loc;
172 struct line_subseg *next;
174 struct line_entry *head;
175 struct line_entry **ptail;
176 struct line_entry **pmove_tail;
180 struct line_seg *next;
182 struct line_subseg *head;
187 /* Collects data for all line table entries during assembly. */
188 static struct line_seg *all_segs;
189 static struct line_seg **last_seg_ptr;
192 const char *filename;
196 /* Table of files used by .debug_line. */
197 static struct file_entry *files;
198 static unsigned int files_in_use;
199 static unsigned int files_allocated;
201 /* Table of directories used by .debug_line. */
203 static unsigned int dirs_in_use;
204 static unsigned int dirs_allocated;
206 /* TRUE when we've seen a .loc directive recently. Used to avoid
207 doing work when there's nothing to do. */
208 bfd_boolean dwarf2_loc_directive_seen;
210 /* TRUE when we're supposed to set the basic block mark whenever a
212 bfd_boolean dwarf2_loc_mark_labels;
214 /* Current location as indicated by the most recent .loc directive. */
215 static struct dwarf2_line_info current = {
217 DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0,
221 /* The size of an address on the target. */
222 static unsigned int sizeof_address;
224 static unsigned int get_filenum (const char *, unsigned int);
226 #ifndef TC_DWARF2_EMIT_OFFSET
227 #define TC_DWARF2_EMIT_OFFSET generic_dwarf2_emit_offset
229 /* Create an offset to .dwarf2_*. */
232 generic_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
237 exp.X_add_symbol = symbol;
238 exp.X_add_number = 0;
239 emit_expr (&exp, size);
243 /* Find or create (if CREATE_P) an entry for SEG+SUBSEG in ALL_SEGS. */
245 static struct line_subseg *
246 get_line_subseg (segT seg, subsegT subseg, bfd_boolean create_p)
248 struct line_seg *s = seg_info (seg)->dwarf2_line_seg;
249 struct line_subseg **pss, *lss;
256 s = (struct line_seg *) xmalloc (sizeof (*s));
261 last_seg_ptr = &s->next;
262 seg_info (seg)->dwarf2_line_seg = s;
264 gas_assert (seg == s->seg);
266 for (pss = &s->head; (lss = *pss) != NULL ; pss = &lss->next)
268 if (lss->subseg == subseg)
270 if (lss->subseg > subseg)
274 lss = (struct line_subseg *) xmalloc (sizeof (*lss));
276 lss->subseg = subseg;
278 lss->ptail = &lss->head;
279 lss->pmove_tail = &lss->head;
286 /* Record an entry for LOC occurring at LABEL. */
289 dwarf2_gen_line_info_1 (symbolS *label, struct dwarf2_line_info *loc)
291 struct line_subseg *lss;
292 struct line_entry *e;
294 e = (struct line_entry *) xmalloc (sizeof (*e));
299 lss = get_line_subseg (now_seg, now_subseg, TRUE);
301 lss->ptail = &e->next;
304 /* Record an entry for LOC occurring at OFS within the current fragment. */
307 dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc)
309 static unsigned int line = -1;
310 static unsigned int filenum = -1;
314 /* Early out for as-yet incomplete location information. */
315 if (loc->filenum == 0 || loc->line == 0)
318 /* Don't emit sequences of line symbols for the same line when the
319 symbols apply to assembler code. It is necessary to emit
320 duplicate line symbols when a compiler asks for them, because GDB
321 uses them to determine the end of the prologue. */
322 if (debug_type == DEBUG_DWARF2
323 && line == loc->line && filenum == loc->filenum)
327 filenum = loc->filenum;
333 /* Use a non-fake name for the line number location,
334 so that it can be referred to by relocations. */
335 sprintf (name, ".Loc.%u.%u", line, filenum);
336 sym = symbol_new (name, now_seg, ofs, frag_now);
339 sym = symbol_temp_new (now_seg, ofs, frag_now);
340 dwarf2_gen_line_info_1 (sym, loc);
343 /* Returns the current source information. If .file directives have
344 been encountered, the info for the corresponding source file is
345 returned. Otherwise, the info for the assembly source file is
349 dwarf2_where (struct dwarf2_line_info *line)
351 if (debug_type == DEBUG_DWARF2)
353 const char *filename = as_where (&line->line);
354 line->filenum = get_filenum (filename, 0);
356 line->flags = DWARF2_FLAG_IS_STMT;
357 line->isa = current.isa;
358 line->discriminator = current.discriminator;
364 /* A hook to allow the target backend to inform the line number state
365 machine of isa changes when assembler debug info is enabled. */
368 dwarf2_set_isa (unsigned int isa)
373 /* Called for each machine instruction, or relatively atomic group of
374 machine instructions (ie built-in macro). The instruction or group
375 is SIZE bytes in length. If dwarf2 line number generation is called
376 for, emit a line statement appropriately. */
379 dwarf2_emit_insn (int size)
381 struct dwarf2_line_info loc;
383 if (!dwarf2_loc_directive_seen && debug_type != DEBUG_DWARF2)
388 dwarf2_gen_line_info (frag_now_fix () - size, &loc);
389 dwarf2_consume_line_info ();
392 /* Move all previously-emitted line entries for the current position by
393 DELTA bytes. This function cannot be used to move the same entries
397 dwarf2_move_insn (int delta)
399 struct line_subseg *lss;
400 struct line_entry *e;
406 lss = get_line_subseg (now_seg, now_subseg, FALSE);
410 now = frag_now_fix ();
411 while ((e = *lss->pmove_tail))
413 if (S_GET_VALUE (e->label) == now)
414 S_SET_VALUE (e->label, now + delta);
415 lss->pmove_tail = &e->next;
419 /* Called after the current line information has been either used with
420 dwarf2_gen_line_info or saved with a machine instruction for later use.
421 This resets the state of the line number information to reflect that
425 dwarf2_consume_line_info (void)
427 /* Unless we generate DWARF2 debugging information for each
428 assembler line, we only emit one line symbol for one LOC. */
429 dwarf2_loc_directive_seen = FALSE;
431 current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK
432 | DWARF2_FLAG_PROLOGUE_END
433 | DWARF2_FLAG_EPILOGUE_BEGIN);
434 current.discriminator = 0;
437 /* Called for each (preferably code) label. If dwarf2_loc_mark_labels
438 is enabled, emit a basic block marker. */
441 dwarf2_emit_label (symbolS *label)
443 struct dwarf2_line_info loc;
445 if (!dwarf2_loc_mark_labels)
447 if (S_GET_SEGMENT (label) != now_seg)
449 if (!(bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE))
451 if (files_in_use == 0 && debug_type != DEBUG_DWARF2)
456 loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
458 dwarf2_gen_line_info_1 (label, &loc);
459 dwarf2_consume_line_info ();
462 /* Get a .debug_line file number for FILENAME. If NUM is nonzero,
463 allocate it on that file table slot, otherwise return the first
467 get_filenum (const char *filename, unsigned int num)
469 static unsigned int last_used, last_used_dir_len;
474 if (num == 0 && last_used)
476 if (! files[last_used].dir
477 && filename_cmp (filename, files[last_used].filename) == 0)
479 if (files[last_used].dir
480 && filename_ncmp (filename, dirs[files[last_used].dir],
481 last_used_dir_len) == 0
482 && IS_DIR_SEPARATOR (filename [last_used_dir_len])
483 && filename_cmp (filename + last_used_dir_len + 1,
484 files[last_used].filename) == 0)
488 file = lbasename (filename);
489 /* Don't make empty string from / or A: from A:/ . */
490 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
491 if (file <= filename + 3)
494 if (file == filename + 1)
497 dir_len = file - filename;
502 #ifndef DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
505 for (dir = 1; dir < dirs_in_use; ++dir)
506 if (filename_ncmp (filename, dirs[dir], dir_len) == 0
507 && dirs[dir][dir_len] == '\0')
510 if (dir >= dirs_in_use)
512 if (dir >= dirs_allocated)
514 dirs_allocated = dir + 32;
516 xrealloc (dirs, (dir + 32) * sizeof (const char *));
519 dirs[dir] = (char *) xmalloc (dir_len + 1);
520 memcpy (dirs[dir], filename, dir_len);
521 dirs[dir][dir_len] = '\0';
522 dirs_in_use = dir + 1;
528 for (i = 1; i < files_in_use; ++i)
529 if (files[i].dir == dir
531 && filename_cmp (file, files[i].filename) == 0)
534 last_used_dir_len = dir_len;
541 if (i >= files_allocated)
543 unsigned int old = files_allocated;
545 files_allocated = i + 32;
546 files = (struct file_entry *)
547 xrealloc (files, (i + 32) * sizeof (struct file_entry));
549 memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
552 files[i].filename = num ? file : xstrdup (file);
554 if (files_in_use < i + 1)
555 files_in_use = i + 1;
557 last_used_dir_len = dir_len;
562 /* Handle two forms of .file directive:
563 - Pass .file "source.c" to s_app_file
564 - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
566 If an entry is added to the file table, return a pointer to the filename. */
569 dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED)
575 /* Continue to accept a bare string and pass it off. */
577 if (*input_line_pointer == '"')
583 num = get_absolute_expression ();
584 filename = demand_copy_C_string (&filename_len);
585 if (filename == NULL)
587 demand_empty_rest_of_line ();
591 as_bad (_("file number less than one"));
595 /* A .file directive implies compiler generated debug information is
596 being supplied. Turn off gas generated debug info. */
597 debug_type = DEBUG_NONE;
599 if (num < (int) files_in_use && files[num].filename != 0)
601 as_bad (_("file number %ld already allocated"), (long) num);
605 get_filenum (filename, num);
611 dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
613 offsetT filenum, line;
615 /* If we see two .loc directives in a row, force the first one to be
617 if (dwarf2_loc_directive_seen)
618 dwarf2_emit_insn (0);
620 filenum = get_absolute_expression ();
622 line = get_absolute_expression ();
626 as_bad (_("file number less than one"));
629 if (filenum >= (int) files_in_use || files[filenum].filename == 0)
631 as_bad (_("unassigned file number %ld"), (long) filenum);
635 current.filenum = filenum;
637 current.discriminator = 0;
642 if (files[filenum].dir)
644 size_t dir_len = strlen (dirs[files[filenum].dir]);
645 size_t file_len = strlen (files[filenum].filename);
646 char *cp = (char *) alloca (dir_len + 1 + file_len + 1);
648 memcpy (cp, dirs[files[filenum].dir], dir_len);
649 INSERT_DIR_SEPARATOR (cp, dir_len);
650 memcpy (cp + dir_len + 1, files[filenum].filename, file_len);
651 cp[dir_len + file_len + 1] = '\0';
652 listing_source_file (cp);
655 listing_source_file (files[filenum].filename);
656 listing_source_line (line);
661 if (ISDIGIT (*input_line_pointer))
663 current.column = get_absolute_expression ();
667 while (ISALPHA (*input_line_pointer))
672 c = get_symbol_name (& p);
674 if (strcmp (p, "basic_block") == 0)
676 current.flags |= DWARF2_FLAG_BASIC_BLOCK;
677 *input_line_pointer = c;
679 else if (strcmp (p, "prologue_end") == 0)
681 current.flags |= DWARF2_FLAG_PROLOGUE_END;
682 *input_line_pointer = c;
684 else if (strcmp (p, "epilogue_begin") == 0)
686 current.flags |= DWARF2_FLAG_EPILOGUE_BEGIN;
687 *input_line_pointer = c;
689 else if (strcmp (p, "is_stmt") == 0)
691 (void) restore_line_pointer (c);
692 value = get_absolute_expression ();
694 current.flags &= ~DWARF2_FLAG_IS_STMT;
696 current.flags |= DWARF2_FLAG_IS_STMT;
699 as_bad (_("is_stmt value not 0 or 1"));
703 else if (strcmp (p, "isa") == 0)
705 (void) restore_line_pointer (c);
706 value = get_absolute_expression ();
711 as_bad (_("isa number less than zero"));
715 else if (strcmp (p, "discriminator") == 0)
717 (void) restore_line_pointer (c);
718 value = get_absolute_expression ();
720 current.discriminator = value;
723 as_bad (_("discriminator less than zero"));
729 as_bad (_("unknown .loc sub-directive `%s'"), p);
730 (void) restore_line_pointer (c);
734 SKIP_WHITESPACE_AFTER_NAME ();
737 demand_empty_rest_of_line ();
738 dwarf2_loc_directive_seen = TRUE;
739 debug_type = DEBUG_NONE;
743 dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED)
745 offsetT value = get_absolute_expression ();
747 if (value != 0 && value != 1)
749 as_bad (_("expected 0 or 1"));
750 ignore_rest_of_line ();
754 dwarf2_loc_mark_labels = value != 0;
755 demand_empty_rest_of_line ();
760 first_frag_for_seg (segT seg)
762 return seg_info (seg)->frchainP->frch_root;
766 last_frag_for_seg (segT seg)
768 frchainS *f = seg_info (seg)->frchainP;
770 while (f->frch_next != NULL)
776 /* Emit a single byte into the current segment. */
781 FRAG_APPEND_1_CHAR (byte);
784 /* Emit a statement program opcode into the current segment. */
792 /* Emit a two-byte word into the current segment. */
797 md_number_to_chars (frag_more (2), data, 2);
800 /* Emit a four byte word into the current segment. */
805 md_number_to_chars (frag_more (4), data, 4);
808 /* Emit an unsigned "little-endian base 128" number. */
811 out_uleb128 (addressT value)
813 output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
816 /* Emit a signed "little-endian base 128" number. */
819 out_leb128 (addressT value)
821 output_leb128 (frag_more (sizeof_leb128 (value, 1)), value, 1);
824 /* Emit a tuple for .debug_abbrev. */
827 out_abbrev (int name, int form)
833 /* Get the size of a fragment. */
836 get_frag_fix (fragS *frag, segT seg)
843 /* If a fragment is the last in the chain, special measures must be
844 taken to find its size before relaxation, since it may be pending
845 on some subsegment chain. */
846 for (fr = seg_info (seg)->frchainP; fr; fr = fr->frch_next)
847 if (fr->frch_last == frag)
848 return (char *) obstack_next_free (&fr->frch_obstack) - frag->fr_literal;
853 /* Set an absolute address (may result in a relocation entry). */
856 out_set_addr (symbolS *sym)
860 out_opcode (DW_LNS_extended_op);
861 out_uleb128 (sizeof_address + 1);
863 out_opcode (DW_LNE_set_address);
865 exp.X_add_symbol = sym;
866 exp.X_add_number = 0;
867 emit_expr (&exp, sizeof_address);
870 static void scale_addr_delta (addressT *);
873 scale_addr_delta (addressT *addr_delta)
875 static int printed_this = 0;
876 if (DWARF2_LINE_MIN_INSN_LENGTH > 1)
878 if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0 && !printed_this)
880 as_bad("unaligned opcodes detected in executable segment");
883 *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
887 /* Encode a pair of line and address skips as efficiently as possible.
888 Note that the line skip is signed, whereas the address skip is unsigned.
890 The following two routines *must* be kept in sync. This is
891 enforced by making emit_inc_line_addr abort if we do not emit
892 exactly the expected number of bytes. */
895 size_inc_line_addr (int line_delta, addressT addr_delta)
897 unsigned int tmp, opcode;
900 /* Scale the address delta by the minimum instruction length. */
901 scale_addr_delta (&addr_delta);
903 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
904 We cannot use special opcodes here, since we want the end_sequence
905 to emit the matrix entry. */
906 if (line_delta == INT_MAX)
908 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
911 len = 1 + sizeof_leb128 (addr_delta, 0);
915 /* Bias the line delta by the base. */
916 tmp = line_delta - DWARF2_LINE_BASE;
918 /* If the line increment is out of range of a special opcode, we
919 must encode it with DW_LNS_advance_line. */
920 if (tmp >= DWARF2_LINE_RANGE)
922 len = 1 + sizeof_leb128 (line_delta, 1);
924 tmp = 0 - DWARF2_LINE_BASE;
927 /* Bias the opcode by the special opcode base. */
928 tmp += DWARF2_LINE_OPCODE_BASE;
930 /* Avoid overflow when addr_delta is large. */
931 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
933 /* Try using a special opcode. */
934 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
938 /* Try using DW_LNS_const_add_pc followed by special op. */
939 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
944 /* Otherwise use DW_LNS_advance_pc. */
945 len += 1 + sizeof_leb128 (addr_delta, 0);
947 /* DW_LNS_copy or special opcode. */
954 emit_inc_line_addr (int line_delta, addressT addr_delta, char *p, int len)
956 unsigned int tmp, opcode;
960 /* Line number sequences cannot go backward in addresses. This means
961 we've incorrectly ordered the statements in the sequence. */
962 gas_assert ((offsetT) addr_delta >= 0);
964 /* Scale the address delta by the minimum instruction length. */
965 scale_addr_delta (&addr_delta);
967 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
968 We cannot use special opcodes here, since we want the end_sequence
969 to emit the matrix entry. */
970 if (line_delta == INT_MAX)
972 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
973 *p++ = DW_LNS_const_add_pc;
976 *p++ = DW_LNS_advance_pc;
977 p += output_leb128 (p, addr_delta, 0);
980 *p++ = DW_LNS_extended_op;
982 *p++ = DW_LNE_end_sequence;
986 /* Bias the line delta by the base. */
987 tmp = line_delta - DWARF2_LINE_BASE;
989 /* If the line increment is out of range of a special opcode, we
990 must encode it with DW_LNS_advance_line. */
991 if (tmp >= DWARF2_LINE_RANGE)
993 *p++ = DW_LNS_advance_line;
994 p += output_leb128 (p, line_delta, 1);
997 tmp = 0 - DWARF2_LINE_BASE;
1001 /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
1003 if (line_delta == 0 && addr_delta == 0)
1009 /* Bias the opcode by the special opcode base. */
1010 tmp += DWARF2_LINE_OPCODE_BASE;
1012 /* Avoid overflow when addr_delta is large. */
1013 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
1015 /* Try using a special opcode. */
1016 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
1023 /* Try using DW_LNS_const_add_pc followed by special op. */
1024 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
1027 *p++ = DW_LNS_const_add_pc;
1033 /* Otherwise use DW_LNS_advance_pc. */
1034 *p++ = DW_LNS_advance_pc;
1035 p += output_leb128 (p, addr_delta, 0);
1043 gas_assert (p == end);
1046 /* Handy routine to combine calls to the above two routines. */
1049 out_inc_line_addr (int line_delta, addressT addr_delta)
1051 int len = size_inc_line_addr (line_delta, addr_delta);
1052 emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
1055 /* Write out an alternative form of line and address skips using
1056 DW_LNS_fixed_advance_pc opcodes. This uses more space than the default
1057 line and address information, but it is required if linker relaxation
1058 could change the code offsets. The following two routines *must* be
1060 #define ADDR_DELTA_LIMIT 50000
1063 size_fixed_inc_line_addr (int line_delta, addressT addr_delta)
1067 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1068 if (line_delta != INT_MAX)
1069 len = 1 + sizeof_leb128 (line_delta, 1);
1071 if (addr_delta > ADDR_DELTA_LIMIT)
1073 /* DW_LNS_extended_op */
1074 len += 1 + sizeof_leb128 (sizeof_address + 1, 0);
1075 /* DW_LNE_set_address */
1076 len += 1 + sizeof_address;
1079 /* DW_LNS_fixed_advance_pc */
1082 if (line_delta == INT_MAX)
1083 /* DW_LNS_extended_op + DW_LNE_end_sequence */
1093 emit_fixed_inc_line_addr (int line_delta, addressT addr_delta, fragS *frag,
1097 char *end = p + len;
1099 /* Line number sequences cannot go backward in addresses. This means
1100 we've incorrectly ordered the statements in the sequence. */
1101 gas_assert ((offsetT) addr_delta >= 0);
1103 /* Verify that we have kept in sync with size_fixed_inc_line_addr. */
1104 gas_assert (len == size_fixed_inc_line_addr (line_delta, addr_delta));
1106 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1107 if (line_delta != INT_MAX)
1109 *p++ = DW_LNS_advance_line;
1110 p += output_leb128 (p, line_delta, 1);
1113 pexp = symbol_get_value_expression (frag->fr_symbol);
1115 /* The DW_LNS_fixed_advance_pc opcode has a 2-byte operand so it can
1116 advance the address by at most 64K. Linker relaxation (without
1117 which this function would not be used) could change the operand by
1118 an unknown amount. If the address increment is getting close to
1119 the limit, just reset the address. */
1120 if (addr_delta > ADDR_DELTA_LIMIT)
1125 gas_assert (pexp->X_op == O_subtract);
1126 to_sym = pexp->X_add_symbol;
1128 *p++ = DW_LNS_extended_op;
1129 p += output_leb128 (p, sizeof_address + 1, 0);
1130 *p++ = DW_LNE_set_address;
1131 exp.X_op = O_symbol;
1132 exp.X_add_symbol = to_sym;
1133 exp.X_add_number = 0;
1134 emit_expr_fix (&exp, sizeof_address, frag, p, TC_PARSE_CONS_RETURN_NONE);
1135 p += sizeof_address;
1139 *p++ = DW_LNS_fixed_advance_pc;
1140 emit_expr_fix (pexp, 2, frag, p, TC_PARSE_CONS_RETURN_NONE);
1144 if (line_delta == INT_MAX)
1146 *p++ = DW_LNS_extended_op;
1148 *p++ = DW_LNE_end_sequence;
1153 gas_assert (p == end);
1156 /* Generate a variant frag that we can use to relax address/line
1157 increments between fragments of the target segment. */
1160 relax_inc_line_addr (int line_delta, symbolS *to_sym, symbolS *from_sym)
1165 exp.X_op = O_subtract;
1166 exp.X_add_symbol = to_sym;
1167 exp.X_op_symbol = from_sym;
1168 exp.X_add_number = 0;
1170 /* The maximum size of the frag is the line delta with a maximum
1171 sized address delta. */
1172 if (DWARF2_USE_FIXED_ADVANCE_PC)
1173 max_chars = size_fixed_inc_line_addr (line_delta,
1174 -DWARF2_LINE_MIN_INSN_LENGTH);
1176 max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
1178 frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
1179 make_expr_symbol (&exp), line_delta, NULL);
1182 /* The function estimates the size of a rs_dwarf2dbg variant frag
1183 based on the current values of the symbols. It is called before
1184 the relaxation loop. We set fr_subtype to the expected length. */
1187 dwarf2dbg_estimate_size_before_relax (fragS *frag)
1192 addr_delta = resolve_symbol_value (frag->fr_symbol);
1193 if (DWARF2_USE_FIXED_ADVANCE_PC)
1194 size = size_fixed_inc_line_addr (frag->fr_offset, addr_delta);
1196 size = size_inc_line_addr (frag->fr_offset, addr_delta);
1198 frag->fr_subtype = size;
1203 /* This function relaxes a rs_dwarf2dbg variant frag based on the
1204 current values of the symbols. fr_subtype is the current length
1205 of the frag. This returns the change in frag length. */
1208 dwarf2dbg_relax_frag (fragS *frag)
1210 int old_size, new_size;
1212 old_size = frag->fr_subtype;
1213 new_size = dwarf2dbg_estimate_size_before_relax (frag);
1215 return new_size - old_size;
1218 /* This function converts a rs_dwarf2dbg variant frag into a normal
1219 fill frag. This is called after all relaxation has been done.
1220 fr_subtype will be the desired length of the frag. */
1223 dwarf2dbg_convert_frag (fragS *frag)
1227 if (DWARF2_USE_FIXED_ADVANCE_PC)
1229 /* If linker relaxation is enabled then the distance bewteen the two
1230 symbols in the frag->fr_symbol expression might change. Hence we
1231 cannot rely upon the value computed by resolve_symbol_value.
1232 Instead we leave the expression unfinalized and allow
1233 emit_fixed_inc_line_addr to create a fixup (which later becomes a
1234 relocation) that will allow the linker to correctly compute the
1235 actual address difference. We have to use a fixed line advance for
1236 this as we cannot (easily) relocate leb128 encoded values. */
1237 int saved_finalize_syms = finalize_syms;
1240 addr_diff = resolve_symbol_value (frag->fr_symbol);
1241 finalize_syms = saved_finalize_syms;
1244 addr_diff = resolve_symbol_value (frag->fr_symbol);
1246 /* fr_var carries the max_chars that we created the fragment with.
1247 fr_subtype carries the current expected length. We must, of
1248 course, have allocated enough memory earlier. */
1249 gas_assert (frag->fr_var >= (int) frag->fr_subtype);
1251 if (DWARF2_USE_FIXED_ADVANCE_PC)
1252 emit_fixed_inc_line_addr (frag->fr_offset, addr_diff, frag,
1253 frag->fr_literal + frag->fr_fix,
1256 emit_inc_line_addr (frag->fr_offset, addr_diff,
1257 frag->fr_literal + frag->fr_fix, frag->fr_subtype);
1259 frag->fr_fix += frag->fr_subtype;
1260 frag->fr_type = rs_fill;
1262 frag->fr_offset = 0;
1265 /* Generate .debug_line content for the chain of line number entries
1266 beginning at E, for segment SEG. */
1269 process_entries (segT seg, struct line_entry *e)
1271 unsigned filenum = 1;
1273 unsigned column = 0;
1275 unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
1276 fragS *last_frag = NULL, *frag;
1277 addressT last_frag_ofs = 0, frag_ofs;
1278 symbolS *last_lab = NULL, *lab;
1279 struct line_entry *next;
1281 if (flag_dwarf_sections)
1284 const char * sec_name;
1286 /* Switch to the relevent sub-section before we start to emit
1287 the line number table.
1289 FIXME: These sub-sections do not have a normal Line Number
1290 Program Header, thus strictly speaking they are not valid
1291 DWARF sections. Unfortunately the DWARF standard assumes
1292 a one-to-one relationship between compilation units and
1293 line number tables. Thus we have to have a .debug_line
1294 section, as well as our sub-sections, and we have to ensure
1295 that all of the sub-sections are merged into a proper
1296 .debug_line section before a debugger sees them. */
1298 sec_name = bfd_get_section_name (stdoutput, seg);
1299 if (strcmp (sec_name, ".text") != 0)
1303 len = strlen (sec_name);
1304 name = xmalloc (len + 11 + 2);
1305 sprintf (name, ".debug_line%s", sec_name);
1306 subseg_set (subseg_get (name, FALSE), 0);
1309 /* Don't create a .debug_line.text section -
1310 that is redundant. Instead just switch back to the
1311 normal .debug_line section. */
1312 subseg_set (subseg_get (".debug_line", FALSE), 0);
1319 if (filenum != e->loc.filenum)
1321 filenum = e->loc.filenum;
1322 out_opcode (DW_LNS_set_file);
1323 out_uleb128 (filenum);
1326 if (column != e->loc.column)
1328 column = e->loc.column;
1329 out_opcode (DW_LNS_set_column);
1330 out_uleb128 (column);
1333 if (e->loc.discriminator != 0)
1335 out_opcode (DW_LNS_extended_op);
1336 out_leb128 (1 + sizeof_leb128 (e->loc.discriminator, 0));
1337 out_opcode (DW_LNE_set_discriminator);
1338 out_uleb128 (e->loc.discriminator);
1341 if (isa != e->loc.isa)
1344 out_opcode (DW_LNS_set_isa);
1348 if ((e->loc.flags ^ flags) & DWARF2_FLAG_IS_STMT)
1350 flags = e->loc.flags;
1351 out_opcode (DW_LNS_negate_stmt);
1354 if (e->loc.flags & DWARF2_FLAG_BASIC_BLOCK)
1355 out_opcode (DW_LNS_set_basic_block);
1357 if (e->loc.flags & DWARF2_FLAG_PROLOGUE_END)
1358 out_opcode (DW_LNS_set_prologue_end);
1360 if (e->loc.flags & DWARF2_FLAG_EPILOGUE_BEGIN)
1361 out_opcode (DW_LNS_set_epilogue_begin);
1363 /* Don't try to optimize away redundant entries; gdb wants two
1364 entries for a function where the code starts on the same line as
1365 the {, and there's no way to identify that case here. Trust gcc
1366 to optimize appropriately. */
1367 line_delta = e->loc.line - line;
1369 frag = symbol_get_frag (lab);
1370 frag_ofs = S_GET_VALUE (lab);
1372 if (last_frag == NULL)
1375 out_inc_line_addr (line_delta, 0);
1377 else if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1378 out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
1380 relax_inc_line_addr (line_delta, lab, last_lab);
1385 last_frag_ofs = frag_ofs;
1393 /* Emit a DW_LNE_end_sequence for the end of the section. */
1394 frag = last_frag_for_seg (seg);
1395 frag_ofs = get_frag_fix (frag, seg);
1396 if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1397 out_inc_line_addr (INT_MAX, frag_ofs - last_frag_ofs);
1400 lab = symbol_temp_new (seg, frag_ofs, frag);
1401 relax_inc_line_addr (INT_MAX, lab, last_lab);
1405 /* Emit the directory and file tables for .debug_line. */
1408 out_file_list (void)
1415 /* Emit directory list. */
1416 for (i = 1; i < dirs_in_use; ++i)
1418 dir = remap_debug_filename (dirs[i]);
1419 size = strlen (dir) + 1;
1420 cp = frag_more (size);
1421 memcpy (cp, dir, size);
1426 for (i = 1; i < files_in_use; ++i)
1428 const char *fullfilename;
1430 if (files[i].filename == NULL)
1432 as_bad (_("unassigned file number %ld"), (long) i);
1433 /* Prevent a crash later, particularly for file 1. */
1434 files[i].filename = "";
1438 fullfilename = DWARF2_FILE_NAME (files[i].filename,
1439 files[i].dir ? dirs [files [i].dir] : "");
1440 size = strlen (fullfilename) + 1;
1441 cp = frag_more (size);
1442 memcpy (cp, fullfilename, size);
1444 out_uleb128 (files[i].dir); /* directory number */
1445 /* Output the last modification timestamp. */
1446 out_uleb128 (DWARF2_FILE_TIME_NAME (files[i].filename,
1447 files[i].dir ? dirs [files [i].dir] : ""));
1448 /* Output the filesize. */
1449 out_uleb128 (DWARF2_FILE_SIZE_NAME (files[i].filename,
1450 files[i].dir ? dirs [files [i].dir] : ""));
1453 /* Terminate filename list. */
1457 /* Switch to SEC and output a header length field. Return the size of
1458 offsets used in SEC. The caller must set EXPR->X_add_symbol value
1459 to the end of the section. EXPR->X_add_number will be set to the
1460 negative size of the header. */
1463 out_header (asection *sec, expressionS *exp)
1468 subseg_set (sec, 0);
1470 if (flag_dwarf_sections)
1472 /* If we are going to put the start and end symbols in different
1473 sections, then we need real symbols, not just fake, local ones. */
1475 start_sym = symbol_make (".Ldebug_line_start");
1476 end_sym = symbol_make (".Ldebug_line_end");
1477 symbol_set_value_now (start_sym);
1481 start_sym = symbol_temp_new_now ();
1482 end_sym = symbol_temp_make ();
1485 /* Total length of the information. */
1486 exp->X_op = O_subtract;
1487 exp->X_add_symbol = end_sym;
1488 exp->X_op_symbol = start_sym;
1490 switch (DWARF2_FORMAT (sec))
1492 case dwarf2_format_32bit:
1493 exp->X_add_number = -4;
1497 case dwarf2_format_64bit:
1498 exp->X_add_number = -12;
1503 case dwarf2_format_64bit_irix:
1504 exp->X_add_number = -8;
1509 as_fatal (_("internal error: unknown dwarf2 format"));
1513 /* Emit the collected .debug_line data. */
1516 out_debug_line (segT line_seg)
1519 symbolS *prologue_start, *prologue_end;
1524 sizeof_offset = out_header (line_seg, &exp);
1525 line_end = exp.X_add_symbol;
1528 out_two (DWARF2_LINE_VERSION);
1530 /* Length of the prologue following this length. */
1531 prologue_start = symbol_temp_make ();
1532 prologue_end = symbol_temp_make ();
1533 exp.X_op = O_subtract;
1534 exp.X_add_symbol = prologue_end;
1535 exp.X_op_symbol = prologue_start;
1536 exp.X_add_number = 0;
1537 emit_expr (&exp, sizeof_offset);
1538 symbol_set_value_now (prologue_start);
1540 /* Parameters of the state machine. */
1541 out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
1542 out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
1543 out_byte (DWARF2_LINE_BASE);
1544 out_byte (DWARF2_LINE_RANGE);
1545 out_byte (DWARF2_LINE_OPCODE_BASE);
1547 /* Standard opcode lengths. */
1548 out_byte (0); /* DW_LNS_copy */
1549 out_byte (1); /* DW_LNS_advance_pc */
1550 out_byte (1); /* DW_LNS_advance_line */
1551 out_byte (1); /* DW_LNS_set_file */
1552 out_byte (1); /* DW_LNS_set_column */
1553 out_byte (0); /* DW_LNS_negate_stmt */
1554 out_byte (0); /* DW_LNS_set_basic_block */
1555 out_byte (0); /* DW_LNS_const_add_pc */
1556 out_byte (1); /* DW_LNS_fixed_advance_pc */
1557 out_byte (0); /* DW_LNS_set_prologue_end */
1558 out_byte (0); /* DW_LNS_set_epilogue_begin */
1559 out_byte (1); /* DW_LNS_set_isa */
1563 symbol_set_value_now (prologue_end);
1565 /* For each section, emit a statement program. */
1566 for (s = all_segs; s; s = s->next)
1567 if (SEG_NORMAL (s->seg))
1568 process_entries (s->seg, s->head->head);
1570 as_warn ("dwarf line number information for %s ignored",
1571 segment_name (s->seg));
1573 if (flag_dwarf_sections)
1574 /* We have to switch to the special .debug_line_end section
1575 before emitting the end-of-debug_line symbol. The linker
1576 script arranges for this section to be placed after all the
1577 (potentially garbage collected) .debug_line.<foo> sections.
1578 This section contains the line_end symbol which is used to
1579 compute the size of the linked .debug_line section, as seen
1580 in the DWARF Line Number header. */
1581 subseg_set (subseg_get (".debug_line_end", FALSE), 0);
1583 symbol_set_value_now (line_end);
1587 out_debug_ranges (segT ranges_seg)
1589 unsigned int addr_size = sizeof_address;
1594 subseg_set (ranges_seg, 0);
1596 /* Base Address Entry. */
1597 for (i = 0; i < addr_size; i++)
1599 for (i = 0; i < addr_size; i++)
1602 /* Range List Entry. */
1603 for (s = all_segs; s; s = s->next)
1608 frag = first_frag_for_seg (s->seg);
1609 beg = symbol_temp_new (s->seg, 0, frag);
1610 s->text_start = beg;
1612 frag = last_frag_for_seg (s->seg);
1613 end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1616 exp.X_op = O_symbol;
1617 exp.X_add_symbol = beg;
1618 exp.X_add_number = 0;
1619 emit_expr (&exp, addr_size);
1621 exp.X_op = O_symbol;
1622 exp.X_add_symbol = end;
1623 exp.X_add_number = 0;
1624 emit_expr (&exp, addr_size);
1627 /* End of Range Entry. */
1628 for (i = 0; i < addr_size; i++)
1630 for (i = 0; i < addr_size; i++)
1634 /* Emit data for .debug_aranges. */
1637 out_debug_aranges (segT aranges_seg, segT info_seg)
1639 unsigned int addr_size = sizeof_address;
1643 symbolS *aranges_end;
1647 sizeof_offset = out_header (aranges_seg, &exp);
1648 aranges_end = exp.X_add_symbol;
1649 size = -exp.X_add_number;
1652 out_two (DWARF2_ARANGES_VERSION);
1655 /* Offset to .debug_info. */
1656 TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), sizeof_offset);
1657 size += sizeof_offset;
1659 /* Size of an address (offset portion). */
1660 out_byte (addr_size);
1663 /* Size of a segment descriptor. */
1667 /* Align the header. */
1668 while ((size++ % (2 * addr_size)) > 0)
1671 for (s = all_segs; s; s = s->next)
1676 frag = first_frag_for_seg (s->seg);
1677 beg = symbol_temp_new (s->seg, 0, frag);
1678 s->text_start = beg;
1680 frag = last_frag_for_seg (s->seg);
1681 end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1684 exp.X_op = O_symbol;
1685 exp.X_add_symbol = beg;
1686 exp.X_add_number = 0;
1687 emit_expr (&exp, addr_size);
1689 exp.X_op = O_subtract;
1690 exp.X_add_symbol = end;
1691 exp.X_op_symbol = beg;
1692 exp.X_add_number = 0;
1693 emit_expr (&exp, addr_size);
1696 p = frag_more (2 * addr_size);
1697 md_number_to_chars (p, 0, addr_size);
1698 md_number_to_chars (p + addr_size, 0, addr_size);
1700 symbol_set_value_now (aranges_end);
1703 /* Emit data for .debug_abbrev. Note that this must be kept in
1704 sync with out_debug_info below. */
1707 out_debug_abbrev (segT abbrev_seg,
1708 segT info_seg ATTRIBUTE_UNUSED,
1709 segT line_seg ATTRIBUTE_UNUSED)
1711 subseg_set (abbrev_seg, 0);
1714 out_uleb128 (DW_TAG_compile_unit);
1715 out_byte (DW_CHILDREN_no);
1716 if (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit)
1717 out_abbrev (DW_AT_stmt_list, DW_FORM_data4);
1719 out_abbrev (DW_AT_stmt_list, DW_FORM_data8);
1720 if (all_segs->next == NULL)
1722 out_abbrev (DW_AT_low_pc, DW_FORM_addr);
1723 if (DWARF2_VERSION < 4)
1724 out_abbrev (DW_AT_high_pc, DW_FORM_addr);
1726 out_abbrev (DW_AT_high_pc, (sizeof_address == 4
1727 ? DW_FORM_data4 : DW_FORM_data8));
1731 if (DWARF2_FORMAT (info_seg) == dwarf2_format_32bit)
1732 out_abbrev (DW_AT_ranges, DW_FORM_data4);
1734 out_abbrev (DW_AT_ranges, DW_FORM_data8);
1736 out_abbrev (DW_AT_name, DW_FORM_string);
1737 out_abbrev (DW_AT_comp_dir, DW_FORM_string);
1738 out_abbrev (DW_AT_producer, DW_FORM_string);
1739 out_abbrev (DW_AT_language, DW_FORM_data2);
1742 /* Terminate the abbreviations for this compilation unit. */
1746 /* Emit a description of this compilation unit for .debug_info. */
1749 out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT ranges_seg)
1752 const char *comp_dir;
1753 const char *dirname;
1760 sizeof_offset = out_header (info_seg, &exp);
1761 info_end = exp.X_add_symbol;
1763 /* DWARF version. */
1764 out_two (DWARF2_VERSION);
1766 /* .debug_abbrev offset */
1767 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
1769 /* Target address size. */
1770 out_byte (sizeof_address);
1772 /* DW_TAG_compile_unit DIE abbrev */
1775 /* DW_AT_stmt_list */
1776 TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg),
1777 (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit
1780 /* These two attributes are emitted if all of the code is contiguous. */
1781 if (all_segs->next == NULL)
1784 exp.X_op = O_symbol;
1785 exp.X_add_symbol = all_segs->text_start;
1786 exp.X_add_number = 0;
1787 emit_expr (&exp, sizeof_address);
1790 if (DWARF2_VERSION < 4)
1791 exp.X_op = O_symbol;
1794 exp.X_op = O_subtract;
1795 exp.X_op_symbol = all_segs->text_start;
1797 exp.X_add_symbol = all_segs->text_end;
1798 exp.X_add_number = 0;
1799 emit_expr (&exp, sizeof_address);
1803 /* This attribute is emitted if the code is disjoint. */
1805 TC_DWARF2_EMIT_OFFSET (section_symbol (ranges_seg), sizeof_offset);
1808 /* DW_AT_name. We don't have the actual file name that was present
1809 on the command line, so assume files[1] is the main input file.
1810 We're not supposed to get called unless at least one line number
1811 entry was emitted, so this should always be defined. */
1812 if (files_in_use == 0)
1816 dirname = remap_debug_filename (dirs[files[1].dir]);
1817 len = strlen (dirname);
1819 /* Already has trailing slash. */
1820 p = frag_more (len);
1821 memcpy (p, dirname, len);
1823 p = frag_more (len + 1);
1824 memcpy (p, dirname, len);
1825 INSERT_DIR_SEPARATOR (p, len);
1828 len = strlen (files[1].filename) + 1;
1829 p = frag_more (len);
1830 memcpy (p, files[1].filename, len);
1832 /* DW_AT_comp_dir */
1833 comp_dir = remap_debug_filename (getpwd ());
1834 len = strlen (comp_dir) + 1;
1835 p = frag_more (len);
1836 memcpy (p, comp_dir, len);
1838 /* DW_AT_producer */
1839 sprintf (producer, "GNU AS %s", VERSION);
1840 len = strlen (producer) + 1;
1841 p = frag_more (len);
1842 memcpy (p, producer, len);
1844 /* DW_AT_language. Yes, this is probably not really MIPS, but the
1845 dwarf2 draft has no standard code for assembler. */
1846 out_two (DW_LANG_Mips_Assembler);
1848 symbol_set_value_now (info_end);
1854 last_seg_ptr = &all_segs;
1858 /* Finish the dwarf2 debug sections. We emit .debug.line if there
1859 were any .file/.loc directives, or --gdwarf2 was given, or if the
1860 file has a non-empty .debug_info section and an empty .debug_line
1861 section. If we emit .debug_line, and the .debug_info section is
1862 empty, we also emit .debug_info, .debug_aranges and .debug_abbrev.
1863 ALL_SEGS will be non-null if there were any .file/.loc directives,
1864 or --gdwarf2 was given and there were any located instructions
1868 dwarf2_finish (void)
1873 int emit_other_sections = 0;
1874 int empty_debug_line = 0;
1876 info_seg = bfd_get_section_by_name (stdoutput, ".debug_info");
1877 emit_other_sections = info_seg == NULL || !seg_not_empty_p (info_seg);
1879 line_seg = bfd_get_section_by_name (stdoutput, ".debug_line");
1880 empty_debug_line = line_seg == NULL || !seg_not_empty_p (line_seg);
1882 /* We can't construct a new debug_line section if we already have one.
1884 if (all_segs && !empty_debug_line)
1885 as_fatal ("duplicate .debug_line sections");
1887 if ((!all_segs && emit_other_sections)
1888 || (!emit_other_sections && !empty_debug_line))
1889 /* If there is no line information and no non-empty .debug_info
1890 section, or if there is both a non-empty .debug_info and a non-empty
1891 .debug_line, then we do nothing. */
1894 /* Calculate the size of an address for the target machine. */
1895 sizeof_address = DWARF2_ADDR_SIZE (stdoutput);
1897 /* Create and switch to the line number section. */
1898 line_seg = subseg_new (".debug_line", 0);
1899 bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY | SEC_DEBUGGING);
1901 /* For each subsection, chain the debug entries together. */
1902 for (s = all_segs; s; s = s->next)
1904 struct line_subseg *lss = s->head;
1905 struct line_entry **ptail = lss->ptail;
1907 while ((lss = lss->next) != NULL)
1914 out_debug_line (line_seg);
1916 /* If this is assembler generated line info, and there is no
1917 debug_info already, we need .debug_info and .debug_abbrev
1918 sections as well. */
1919 if (emit_other_sections)
1925 gas_assert (all_segs);
1927 info_seg = subseg_new (".debug_info", 0);
1928 abbrev_seg = subseg_new (".debug_abbrev", 0);
1929 aranges_seg = subseg_new (".debug_aranges", 0);
1931 bfd_set_section_flags (stdoutput, info_seg,
1932 SEC_READONLY | SEC_DEBUGGING);
1933 bfd_set_section_flags (stdoutput, abbrev_seg,
1934 SEC_READONLY | SEC_DEBUGGING);
1935 bfd_set_section_flags (stdoutput, aranges_seg,
1936 SEC_READONLY | SEC_DEBUGGING);
1938 record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
1940 if (all_segs->next == NULL)
1944 ranges_seg = subseg_new (".debug_ranges", 0);
1945 bfd_set_section_flags (stdoutput, ranges_seg,
1946 SEC_READONLY | SEC_DEBUGGING);
1947 record_alignment (ranges_seg, ffs (2 * sizeof_address) - 1);
1948 out_debug_ranges (ranges_seg);
1951 out_debug_aranges (aranges_seg, info_seg);
1952 out_debug_abbrev (abbrev_seg, info_seg, line_seg);
1953 out_debug_info (info_seg, abbrev_seg, line_seg, ranges_seg);