1 /* dwarf2dbg.c - DWARF2 debug support
2 Copyright (C) 1999-2014 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 /* Hash used to quickly lookup a segment by name, avoiding the need to search
190 through the all_segs list. */
191 static struct hash_control *all_segs_hash;
192 static struct line_seg **last_seg_ptr;
195 const char *filename;
199 /* Table of files used by .debug_line. */
200 static struct file_entry *files;
201 static unsigned int files_in_use;
202 static unsigned int files_allocated;
204 /* Table of directories used by .debug_line. */
206 static unsigned int dirs_in_use;
207 static unsigned int dirs_allocated;
209 /* TRUE when we've seen a .loc directive recently. Used to avoid
210 doing work when there's nothing to do. */
211 bfd_boolean dwarf2_loc_directive_seen;
213 /* TRUE when we're supposed to set the basic block mark whenever a
215 bfd_boolean dwarf2_loc_mark_labels;
217 /* Current location as indicated by the most recent .loc directive. */
218 static struct dwarf2_line_info current = {
220 DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0,
224 /* The size of an address on the target. */
225 static unsigned int sizeof_address;
227 static unsigned int get_filenum (const char *, unsigned int);
229 #ifndef TC_DWARF2_EMIT_OFFSET
230 #define TC_DWARF2_EMIT_OFFSET generic_dwarf2_emit_offset
232 /* Create an offset to .dwarf2_*. */
235 generic_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
240 exp.X_add_symbol = symbol;
241 exp.X_add_number = 0;
242 emit_expr (&exp, size);
246 /* Find or create (if CREATE_P) an entry for SEG+SUBSEG in ALL_SEGS. */
248 static struct line_subseg *
249 get_line_subseg (segT seg, subsegT subseg, bfd_boolean create_p)
251 static segT last_seg;
252 static subsegT last_subseg;
253 static struct line_subseg *last_line_subseg;
256 struct line_subseg **pss, *lss;
258 if (seg == last_seg && subseg == last_subseg)
259 return last_line_subseg;
261 s = (struct line_seg *) hash_find (all_segs_hash, seg->name);
267 s = (struct line_seg *) xmalloc (sizeof (*s));
272 last_seg_ptr = &s->next;
273 hash_insert (all_segs_hash, seg->name, s);
275 gas_assert (seg == s->seg);
277 for (pss = &s->head; (lss = *pss) != NULL ; pss = &lss->next)
279 if (lss->subseg == subseg)
281 if (lss->subseg > subseg)
285 lss = (struct line_subseg *) xmalloc (sizeof (*lss));
287 lss->subseg = subseg;
289 lss->ptail = &lss->head;
290 lss->pmove_tail = &lss->head;
295 last_subseg = subseg;
296 last_line_subseg = lss;
301 /* Record an entry for LOC occurring at LABEL. */
304 dwarf2_gen_line_info_1 (symbolS *label, struct dwarf2_line_info *loc)
306 struct line_subseg *lss;
307 struct line_entry *e;
309 e = (struct line_entry *) xmalloc (sizeof (*e));
314 lss = get_line_subseg (now_seg, now_subseg, TRUE);
316 lss->ptail = &e->next;
319 /* Record an entry for LOC occurring at OFS within the current fragment. */
322 dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc)
324 static unsigned int line = -1;
325 static unsigned int filenum = -1;
329 /* Early out for as-yet incomplete location information. */
330 if (loc->filenum == 0 || loc->line == 0)
333 /* Don't emit sequences of line symbols for the same line when the
334 symbols apply to assembler code. It is necessary to emit
335 duplicate line symbols when a compiler asks for them, because GDB
336 uses them to determine the end of the prologue. */
337 if (debug_type == DEBUG_DWARF2
338 && line == loc->line && filenum == loc->filenum)
342 filenum = loc->filenum;
348 /* Use a non-fake name for the line number location,
349 so that it can be referred to by relocations. */
350 sprintf (name, ".Loc.%u.%u", line, filenum);
351 sym = symbol_new (name, now_seg, ofs, frag_now);
354 sym = symbol_temp_new (now_seg, ofs, frag_now);
355 dwarf2_gen_line_info_1 (sym, loc);
358 /* Returns the current source information. If .file directives have
359 been encountered, the info for the corresponding source file is
360 returned. Otherwise, the info for the assembly source file is
364 dwarf2_where (struct dwarf2_line_info *line)
366 if (debug_type == DEBUG_DWARF2)
369 as_where (&filename, &line->line);
370 line->filenum = get_filenum (filename, 0);
372 line->flags = DWARF2_FLAG_IS_STMT;
373 line->isa = current.isa;
374 line->discriminator = current.discriminator;
380 /* A hook to allow the target backend to inform the line number state
381 machine of isa changes when assembler debug info is enabled. */
384 dwarf2_set_isa (unsigned int isa)
389 /* Called for each machine instruction, or relatively atomic group of
390 machine instructions (ie built-in macro). The instruction or group
391 is SIZE bytes in length. If dwarf2 line number generation is called
392 for, emit a line statement appropriately. */
395 dwarf2_emit_insn (int size)
397 struct dwarf2_line_info loc;
399 if (!dwarf2_loc_directive_seen && debug_type != DEBUG_DWARF2)
404 dwarf2_gen_line_info (frag_now_fix () - size, &loc);
405 dwarf2_consume_line_info ();
408 /* Move all previously-emitted line entries for the current position by
409 DELTA bytes. This function cannot be used to move the same entries
413 dwarf2_move_insn (int delta)
415 struct line_subseg *lss;
416 struct line_entry *e;
422 lss = get_line_subseg (now_seg, now_subseg, FALSE);
426 now = frag_now_fix ();
427 while ((e = *lss->pmove_tail))
429 if (S_GET_VALUE (e->label) == now)
430 S_SET_VALUE (e->label, now + delta);
431 lss->pmove_tail = &e->next;
435 /* Called after the current line information has been either used with
436 dwarf2_gen_line_info or saved with a machine instruction for later use.
437 This resets the state of the line number information to reflect that
441 dwarf2_consume_line_info (void)
443 /* Unless we generate DWARF2 debugging information for each
444 assembler line, we only emit one line symbol for one LOC. */
445 dwarf2_loc_directive_seen = FALSE;
447 current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK
448 | DWARF2_FLAG_PROLOGUE_END
449 | DWARF2_FLAG_EPILOGUE_BEGIN);
450 current.discriminator = 0;
453 /* Called for each (preferably code) label. If dwarf2_loc_mark_labels
454 is enabled, emit a basic block marker. */
457 dwarf2_emit_label (symbolS *label)
459 struct dwarf2_line_info loc;
461 if (!dwarf2_loc_mark_labels)
463 if (S_GET_SEGMENT (label) != now_seg)
465 if (!(bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE))
467 if (files_in_use == 0 && debug_type != DEBUG_DWARF2)
472 loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
474 dwarf2_gen_line_info_1 (label, &loc);
475 dwarf2_consume_line_info ();
478 /* Get a .debug_line file number for FILENAME. If NUM is nonzero,
479 allocate it on that file table slot, otherwise return the first
483 get_filenum (const char *filename, unsigned int num)
485 static unsigned int last_used, last_used_dir_len;
490 if (num == 0 && last_used)
492 if (! files[last_used].dir
493 && filename_cmp (filename, files[last_used].filename) == 0)
495 if (files[last_used].dir
496 && filename_ncmp (filename, dirs[files[last_used].dir],
497 last_used_dir_len) == 0
498 && IS_DIR_SEPARATOR (filename [last_used_dir_len])
499 && filename_cmp (filename + last_used_dir_len + 1,
500 files[last_used].filename) == 0)
504 file = lbasename (filename);
505 /* Don't make empty string from / or A: from A:/ . */
506 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
507 if (file <= filename + 3)
510 if (file == filename + 1)
513 dir_len = file - filename;
518 #ifndef DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
521 for (dir = 1; dir < dirs_in_use; ++dir)
522 if (filename_ncmp (filename, dirs[dir], dir_len) == 0
523 && dirs[dir][dir_len] == '\0')
526 if (dir >= dirs_in_use)
528 if (dir >= dirs_allocated)
530 dirs_allocated = dir + 32;
532 xrealloc (dirs, (dir + 32) * sizeof (const char *));
535 dirs[dir] = (char *) xmalloc (dir_len + 1);
536 memcpy (dirs[dir], filename, dir_len);
537 dirs[dir][dir_len] = '\0';
538 dirs_in_use = dir + 1;
544 for (i = 1; i < files_in_use; ++i)
545 if (files[i].dir == dir
547 && filename_cmp (file, files[i].filename) == 0)
550 last_used_dir_len = dir_len;
557 if (i >= files_allocated)
559 unsigned int old = files_allocated;
561 files_allocated = i + 32;
562 files = (struct file_entry *)
563 xrealloc (files, (i + 32) * sizeof (struct file_entry));
565 memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
568 files[i].filename = num ? file : xstrdup (file);
570 if (files_in_use < i + 1)
571 files_in_use = i + 1;
573 last_used_dir_len = dir_len;
578 /* Handle two forms of .file directive:
579 - Pass .file "source.c" to s_app_file
580 - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
582 If an entry is added to the file table, return a pointer to the filename. */
585 dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED)
591 /* Continue to accept a bare string and pass it off. */
593 if (*input_line_pointer == '"')
599 num = get_absolute_expression ();
600 filename = demand_copy_C_string (&filename_len);
601 if (filename == NULL)
603 demand_empty_rest_of_line ();
607 as_bad (_("file number less than one"));
611 /* A .file directive implies compiler generated debug information is
612 being supplied. Turn off gas generated debug info. */
613 debug_type = DEBUG_NONE;
615 if (num < (int) files_in_use && files[num].filename != 0)
617 as_bad (_("file number %ld already allocated"), (long) num);
621 get_filenum (filename, num);
627 dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
629 offsetT filenum, line;
631 /* If we see two .loc directives in a row, force the first one to be
633 if (dwarf2_loc_directive_seen)
634 dwarf2_emit_insn (0);
636 filenum = get_absolute_expression ();
638 line = get_absolute_expression ();
642 as_bad (_("file number less than one"));
645 if (filenum >= (int) files_in_use || files[filenum].filename == 0)
647 as_bad (_("unassigned file number %ld"), (long) filenum);
651 current.filenum = filenum;
653 current.discriminator = 0;
658 if (files[filenum].dir)
660 size_t dir_len = strlen (dirs[files[filenum].dir]);
661 size_t file_len = strlen (files[filenum].filename);
662 char *cp = (char *) alloca (dir_len + 1 + file_len + 1);
664 memcpy (cp, dirs[files[filenum].dir], dir_len);
665 INSERT_DIR_SEPARATOR (cp, dir_len);
666 memcpy (cp + dir_len + 1, files[filenum].filename, file_len);
667 cp[dir_len + file_len + 1] = '\0';
668 listing_source_file (cp);
671 listing_source_file (files[filenum].filename);
672 listing_source_line (line);
677 if (ISDIGIT (*input_line_pointer))
679 current.column = get_absolute_expression ();
683 while (ISALPHA (*input_line_pointer))
688 p = input_line_pointer;
689 c = get_symbol_end ();
691 if (strcmp (p, "basic_block") == 0)
693 current.flags |= DWARF2_FLAG_BASIC_BLOCK;
694 *input_line_pointer = c;
696 else if (strcmp (p, "prologue_end") == 0)
698 current.flags |= DWARF2_FLAG_PROLOGUE_END;
699 *input_line_pointer = c;
701 else if (strcmp (p, "epilogue_begin") == 0)
703 current.flags |= DWARF2_FLAG_EPILOGUE_BEGIN;
704 *input_line_pointer = c;
706 else if (strcmp (p, "is_stmt") == 0)
708 *input_line_pointer = c;
709 value = get_absolute_expression ();
711 current.flags &= ~DWARF2_FLAG_IS_STMT;
713 current.flags |= DWARF2_FLAG_IS_STMT;
716 as_bad (_("is_stmt value not 0 or 1"));
720 else if (strcmp (p, "isa") == 0)
722 *input_line_pointer = c;
723 value = get_absolute_expression ();
728 as_bad (_("isa number less than zero"));
732 else if (strcmp (p, "discriminator") == 0)
734 *input_line_pointer = c;
735 value = get_absolute_expression ();
737 current.discriminator = value;
740 as_bad (_("discriminator less than zero"));
746 as_bad (_("unknown .loc sub-directive `%s'"), p);
747 *input_line_pointer = c;
754 demand_empty_rest_of_line ();
755 dwarf2_loc_directive_seen = TRUE;
756 debug_type = DEBUG_NONE;
760 dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED)
762 offsetT value = get_absolute_expression ();
764 if (value != 0 && value != 1)
766 as_bad (_("expected 0 or 1"));
767 ignore_rest_of_line ();
771 dwarf2_loc_mark_labels = value != 0;
772 demand_empty_rest_of_line ();
777 first_frag_for_seg (segT seg)
779 return seg_info (seg)->frchainP->frch_root;
783 last_frag_for_seg (segT seg)
785 frchainS *f = seg_info (seg)->frchainP;
787 while (f->frch_next != NULL)
793 /* Emit a single byte into the current segment. */
798 FRAG_APPEND_1_CHAR (byte);
801 /* Emit a statement program opcode into the current segment. */
809 /* Emit a two-byte word into the current segment. */
814 md_number_to_chars (frag_more (2), data, 2);
817 /* Emit a four byte word into the current segment. */
822 md_number_to_chars (frag_more (4), data, 4);
825 /* Emit an unsigned "little-endian base 128" number. */
828 out_uleb128 (addressT value)
830 output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
833 /* Emit a signed "little-endian base 128" number. */
836 out_leb128 (addressT value)
838 output_leb128 (frag_more (sizeof_leb128 (value, 1)), value, 1);
841 /* Emit a tuple for .debug_abbrev. */
844 out_abbrev (int name, int form)
850 /* Get the size of a fragment. */
853 get_frag_fix (fragS *frag, segT seg)
860 /* If a fragment is the last in the chain, special measures must be
861 taken to find its size before relaxation, since it may be pending
862 on some subsegment chain. */
863 for (fr = seg_info (seg)->frchainP; fr; fr = fr->frch_next)
864 if (fr->frch_last == frag)
865 return (char *) obstack_next_free (&fr->frch_obstack) - frag->fr_literal;
870 /* Set an absolute address (may result in a relocation entry). */
873 out_set_addr (symbolS *sym)
877 out_opcode (DW_LNS_extended_op);
878 out_uleb128 (sizeof_address + 1);
880 out_opcode (DW_LNE_set_address);
882 exp.X_add_symbol = sym;
883 exp.X_add_number = 0;
884 emit_expr (&exp, sizeof_address);
887 static void scale_addr_delta (addressT *);
890 scale_addr_delta (addressT *addr_delta)
892 static int printed_this = 0;
893 if (DWARF2_LINE_MIN_INSN_LENGTH > 1)
895 if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0 && !printed_this)
897 as_bad("unaligned opcodes detected in executable segment");
900 *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
904 /* Encode a pair of line and address skips as efficiently as possible.
905 Note that the line skip is signed, whereas the address skip is unsigned.
907 The following two routines *must* be kept in sync. This is
908 enforced by making emit_inc_line_addr abort if we do not emit
909 exactly the expected number of bytes. */
912 size_inc_line_addr (int line_delta, addressT addr_delta)
914 unsigned int tmp, opcode;
917 /* Scale the address delta by the minimum instruction length. */
918 scale_addr_delta (&addr_delta);
920 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
921 We cannot use special opcodes here, since we want the end_sequence
922 to emit the matrix entry. */
923 if (line_delta == INT_MAX)
925 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
928 len = 1 + sizeof_leb128 (addr_delta, 0);
932 /* Bias the line delta by the base. */
933 tmp = line_delta - DWARF2_LINE_BASE;
935 /* If the line increment is out of range of a special opcode, we
936 must encode it with DW_LNS_advance_line. */
937 if (tmp >= DWARF2_LINE_RANGE)
939 len = 1 + sizeof_leb128 (line_delta, 1);
941 tmp = 0 - DWARF2_LINE_BASE;
944 /* Bias the opcode by the special opcode base. */
945 tmp += DWARF2_LINE_OPCODE_BASE;
947 /* Avoid overflow when addr_delta is large. */
948 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
950 /* Try using a special opcode. */
951 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
955 /* Try using DW_LNS_const_add_pc followed by special op. */
956 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
961 /* Otherwise use DW_LNS_advance_pc. */
962 len += 1 + sizeof_leb128 (addr_delta, 0);
964 /* DW_LNS_copy or special opcode. */
971 emit_inc_line_addr (int line_delta, addressT addr_delta, char *p, int len)
973 unsigned int tmp, opcode;
977 /* Line number sequences cannot go backward in addresses. This means
978 we've incorrectly ordered the statements in the sequence. */
979 gas_assert ((offsetT) addr_delta >= 0);
981 /* Scale the address delta by the minimum instruction length. */
982 scale_addr_delta (&addr_delta);
984 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
985 We cannot use special opcodes here, since we want the end_sequence
986 to emit the matrix entry. */
987 if (line_delta == INT_MAX)
989 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
990 *p++ = DW_LNS_const_add_pc;
993 *p++ = DW_LNS_advance_pc;
994 p += output_leb128 (p, addr_delta, 0);
997 *p++ = DW_LNS_extended_op;
999 *p++ = DW_LNE_end_sequence;
1003 /* Bias the line delta by the base. */
1004 tmp = line_delta - DWARF2_LINE_BASE;
1006 /* If the line increment is out of range of a special opcode, we
1007 must encode it with DW_LNS_advance_line. */
1008 if (tmp >= DWARF2_LINE_RANGE)
1010 *p++ = DW_LNS_advance_line;
1011 p += output_leb128 (p, line_delta, 1);
1014 tmp = 0 - DWARF2_LINE_BASE;
1018 /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
1020 if (line_delta == 0 && addr_delta == 0)
1026 /* Bias the opcode by the special opcode base. */
1027 tmp += DWARF2_LINE_OPCODE_BASE;
1029 /* Avoid overflow when addr_delta is large. */
1030 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
1032 /* Try using a special opcode. */
1033 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
1040 /* Try using DW_LNS_const_add_pc followed by special op. */
1041 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
1044 *p++ = DW_LNS_const_add_pc;
1050 /* Otherwise use DW_LNS_advance_pc. */
1051 *p++ = DW_LNS_advance_pc;
1052 p += output_leb128 (p, addr_delta, 0);
1060 gas_assert (p == end);
1063 /* Handy routine to combine calls to the above two routines. */
1066 out_inc_line_addr (int line_delta, addressT addr_delta)
1068 int len = size_inc_line_addr (line_delta, addr_delta);
1069 emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
1072 /* Write out an alternative form of line and address skips using
1073 DW_LNS_fixed_advance_pc opcodes. This uses more space than the default
1074 line and address information, but it is required if linker relaxation
1075 could change the code offsets. The following two routines *must* be
1077 #define ADDR_DELTA_LIMIT 50000
1080 size_fixed_inc_line_addr (int line_delta, addressT addr_delta)
1084 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1085 if (line_delta != INT_MAX)
1086 len = 1 + sizeof_leb128 (line_delta, 1);
1088 if (addr_delta > ADDR_DELTA_LIMIT)
1090 /* DW_LNS_extended_op */
1091 len += 1 + sizeof_leb128 (sizeof_address + 1, 0);
1092 /* DW_LNE_set_address */
1093 len += 1 + sizeof_address;
1096 /* DW_LNS_fixed_advance_pc */
1099 if (line_delta == INT_MAX)
1100 /* DW_LNS_extended_op + DW_LNE_end_sequence */
1110 emit_fixed_inc_line_addr (int line_delta, addressT addr_delta, fragS *frag,
1114 char *end = p + len;
1116 /* Line number sequences cannot go backward in addresses. This means
1117 we've incorrectly ordered the statements in the sequence. */
1118 gas_assert ((offsetT) addr_delta >= 0);
1120 /* Verify that we have kept in sync with size_fixed_inc_line_addr. */
1121 gas_assert (len == size_fixed_inc_line_addr (line_delta, addr_delta));
1123 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1124 if (line_delta != INT_MAX)
1126 *p++ = DW_LNS_advance_line;
1127 p += output_leb128 (p, line_delta, 1);
1130 pexp = symbol_get_value_expression (frag->fr_symbol);
1132 /* The DW_LNS_fixed_advance_pc opcode has a 2-byte operand so it can
1133 advance the address by at most 64K. Linker relaxation (without
1134 which this function would not be used) could change the operand by
1135 an unknown amount. If the address increment is getting close to
1136 the limit, just reset the address. */
1137 if (addr_delta > ADDR_DELTA_LIMIT)
1142 gas_assert (pexp->X_op == O_subtract);
1143 to_sym = pexp->X_add_symbol;
1145 *p++ = DW_LNS_extended_op;
1146 p += output_leb128 (p, sizeof_address + 1, 0);
1147 *p++ = DW_LNE_set_address;
1148 exp.X_op = O_symbol;
1149 exp.X_add_symbol = to_sym;
1150 exp.X_add_number = 0;
1151 emit_expr_fix (&exp, sizeof_address, frag, p, TC_PARSE_CONS_RETURN_NONE);
1152 p += sizeof_address;
1156 *p++ = DW_LNS_fixed_advance_pc;
1157 emit_expr_fix (pexp, 2, frag, p, TC_PARSE_CONS_RETURN_NONE);
1161 if (line_delta == INT_MAX)
1163 *p++ = DW_LNS_extended_op;
1165 *p++ = DW_LNE_end_sequence;
1170 gas_assert (p == end);
1173 /* Generate a variant frag that we can use to relax address/line
1174 increments between fragments of the target segment. */
1177 relax_inc_line_addr (int line_delta, symbolS *to_sym, symbolS *from_sym)
1182 exp.X_op = O_subtract;
1183 exp.X_add_symbol = to_sym;
1184 exp.X_op_symbol = from_sym;
1185 exp.X_add_number = 0;
1187 /* The maximum size of the frag is the line delta with a maximum
1188 sized address delta. */
1189 if (DWARF2_USE_FIXED_ADVANCE_PC)
1190 max_chars = size_fixed_inc_line_addr (line_delta,
1191 -DWARF2_LINE_MIN_INSN_LENGTH);
1193 max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
1195 frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
1196 make_expr_symbol (&exp), line_delta, NULL);
1199 /* The function estimates the size of a rs_dwarf2dbg variant frag
1200 based on the current values of the symbols. It is called before
1201 the relaxation loop. We set fr_subtype to the expected length. */
1204 dwarf2dbg_estimate_size_before_relax (fragS *frag)
1209 addr_delta = resolve_symbol_value (frag->fr_symbol);
1210 if (DWARF2_USE_FIXED_ADVANCE_PC)
1211 size = size_fixed_inc_line_addr (frag->fr_offset, addr_delta);
1213 size = size_inc_line_addr (frag->fr_offset, addr_delta);
1215 frag->fr_subtype = size;
1220 /* This function relaxes a rs_dwarf2dbg variant frag based on the
1221 current values of the symbols. fr_subtype is the current length
1222 of the frag. This returns the change in frag length. */
1225 dwarf2dbg_relax_frag (fragS *frag)
1227 int old_size, new_size;
1229 old_size = frag->fr_subtype;
1230 new_size = dwarf2dbg_estimate_size_before_relax (frag);
1232 return new_size - old_size;
1235 /* This function converts a rs_dwarf2dbg variant frag into a normal
1236 fill frag. This is called after all relaxation has been done.
1237 fr_subtype will be the desired length of the frag. */
1240 dwarf2dbg_convert_frag (fragS *frag)
1244 if (DWARF2_USE_FIXED_ADVANCE_PC)
1246 /* If linker relaxation is enabled then the distance bewteen the two
1247 symbols in the frag->fr_symbol expression might change. Hence we
1248 cannot rely upon the value computed by resolve_symbol_value.
1249 Instead we leave the expression unfinalized and allow
1250 emit_fixed_inc_line_addr to create a fixup (which later becomes a
1251 relocation) that will allow the linker to correctly compute the
1252 actual address difference. We have to use a fixed line advance for
1253 this as we cannot (easily) relocate leb128 encoded values. */
1254 int saved_finalize_syms = finalize_syms;
1257 addr_diff = resolve_symbol_value (frag->fr_symbol);
1258 finalize_syms = saved_finalize_syms;
1261 addr_diff = resolve_symbol_value (frag->fr_symbol);
1263 /* fr_var carries the max_chars that we created the fragment with.
1264 fr_subtype carries the current expected length. We must, of
1265 course, have allocated enough memory earlier. */
1266 gas_assert (frag->fr_var >= (int) frag->fr_subtype);
1268 if (DWARF2_USE_FIXED_ADVANCE_PC)
1269 emit_fixed_inc_line_addr (frag->fr_offset, addr_diff, frag,
1270 frag->fr_literal + frag->fr_fix,
1273 emit_inc_line_addr (frag->fr_offset, addr_diff,
1274 frag->fr_literal + frag->fr_fix, frag->fr_subtype);
1276 frag->fr_fix += frag->fr_subtype;
1277 frag->fr_type = rs_fill;
1279 frag->fr_offset = 0;
1282 /* Generate .debug_line content for the chain of line number entries
1283 beginning at E, for segment SEG. */
1286 process_entries (segT seg, struct line_entry *e)
1288 unsigned filenum = 1;
1290 unsigned column = 0;
1292 unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
1293 fragS *last_frag = NULL, *frag;
1294 addressT last_frag_ofs = 0, frag_ofs;
1295 symbolS *last_lab = NULL, *lab;
1296 struct line_entry *next;
1298 if (flag_dwarf_sections)
1301 const char * sec_name;
1303 /* Switch to the relevent sub-section before we start to emit
1304 the line number table.
1306 FIXME: These sub-sections do not have a normal Line Number
1307 Program Header, thus strictly speaking they are not valid
1308 DWARF sections. Unfortunately the DWARF standard assumes
1309 a one-to-one relationship between compilation units and
1310 line number tables. Thus we have to have a .debug_line
1311 section, as well as our sub-sections, and we have to ensure
1312 that all of the sub-sections are merged into a proper
1313 .debug_line section before a debugger sees them. */
1315 sec_name = bfd_get_section_name (stdoutput, seg);
1316 if (strcmp (sec_name, ".text") != 0)
1320 len = strlen (sec_name);
1321 name = xmalloc (len + 11 + 2);
1322 sprintf (name, ".debug_line%s", sec_name);
1323 subseg_set (subseg_get (name, FALSE), 0);
1326 /* Don't create a .debug_line.text section -
1327 that is redundant. Instead just switch back to the
1328 normal .debug_line section. */
1329 subseg_set (subseg_get (".debug_line", FALSE), 0);
1336 if (filenum != e->loc.filenum)
1338 filenum = e->loc.filenum;
1339 out_opcode (DW_LNS_set_file);
1340 out_uleb128 (filenum);
1343 if (column != e->loc.column)
1345 column = e->loc.column;
1346 out_opcode (DW_LNS_set_column);
1347 out_uleb128 (column);
1350 if (e->loc.discriminator != 0)
1352 out_opcode (DW_LNS_extended_op);
1353 out_leb128 (1 + sizeof_leb128 (e->loc.discriminator, 0));
1354 out_opcode (DW_LNE_set_discriminator);
1355 out_uleb128 (e->loc.discriminator);
1358 if (isa != e->loc.isa)
1361 out_opcode (DW_LNS_set_isa);
1365 if ((e->loc.flags ^ flags) & DWARF2_FLAG_IS_STMT)
1367 flags = e->loc.flags;
1368 out_opcode (DW_LNS_negate_stmt);
1371 if (e->loc.flags & DWARF2_FLAG_BASIC_BLOCK)
1372 out_opcode (DW_LNS_set_basic_block);
1374 if (e->loc.flags & DWARF2_FLAG_PROLOGUE_END)
1375 out_opcode (DW_LNS_set_prologue_end);
1377 if (e->loc.flags & DWARF2_FLAG_EPILOGUE_BEGIN)
1378 out_opcode (DW_LNS_set_epilogue_begin);
1380 /* Don't try to optimize away redundant entries; gdb wants two
1381 entries for a function where the code starts on the same line as
1382 the {, and there's no way to identify that case here. Trust gcc
1383 to optimize appropriately. */
1384 line_delta = e->loc.line - line;
1386 frag = symbol_get_frag (lab);
1387 frag_ofs = S_GET_VALUE (lab);
1389 if (last_frag == NULL)
1392 out_inc_line_addr (line_delta, 0);
1394 else if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1395 out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
1397 relax_inc_line_addr (line_delta, lab, last_lab);
1402 last_frag_ofs = frag_ofs;
1410 /* Emit a DW_LNE_end_sequence for the end of the section. */
1411 frag = last_frag_for_seg (seg);
1412 frag_ofs = get_frag_fix (frag, seg);
1413 if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1414 out_inc_line_addr (INT_MAX, frag_ofs - last_frag_ofs);
1417 lab = symbol_temp_new (seg, frag_ofs, frag);
1418 relax_inc_line_addr (INT_MAX, lab, last_lab);
1422 /* Emit the directory and file tables for .debug_line. */
1425 out_file_list (void)
1432 /* Emit directory list. */
1433 for (i = 1; i < dirs_in_use; ++i)
1435 dir = remap_debug_filename (dirs[i]);
1436 size = strlen (dir) + 1;
1437 cp = frag_more (size);
1438 memcpy (cp, dir, size);
1443 for (i = 1; i < files_in_use; ++i)
1445 const char *fullfilename;
1447 if (files[i].filename == NULL)
1449 as_bad (_("unassigned file number %ld"), (long) i);
1450 /* Prevent a crash later, particularly for file 1. */
1451 files[i].filename = "";
1455 fullfilename = DWARF2_FILE_NAME (files[i].filename,
1456 files[i].dir ? dirs [files [i].dir] : "");
1457 size = strlen (fullfilename) + 1;
1458 cp = frag_more (size);
1459 memcpy (cp, fullfilename, size);
1461 out_uleb128 (files[i].dir); /* directory number */
1462 /* Output the last modification timestamp. */
1463 out_uleb128 (DWARF2_FILE_TIME_NAME (files[i].filename,
1464 files[i].dir ? dirs [files [i].dir] : ""));
1465 /* Output the filesize. */
1466 out_uleb128 (DWARF2_FILE_SIZE_NAME (files[i].filename,
1467 files[i].dir ? dirs [files [i].dir] : ""));
1470 /* Terminate filename list. */
1474 /* Switch to SEC and output a header length field. Return the size of
1475 offsets used in SEC. The caller must set EXPR->X_add_symbol value
1476 to the end of the section. */
1479 out_header (asection *sec, expressionS *exp)
1484 subseg_set (sec, 0);
1485 start_sym = symbol_temp_new_now ();
1486 end_sym = symbol_temp_make ();
1488 /* Total length of the information. */
1489 exp->X_op = O_subtract;
1490 exp->X_add_symbol = end_sym;
1491 exp->X_op_symbol = start_sym;
1493 switch (DWARF2_FORMAT (sec))
1495 case dwarf2_format_32bit:
1496 exp->X_add_number = -4;
1500 case dwarf2_format_64bit:
1501 exp->X_add_number = -12;
1506 case dwarf2_format_64bit_irix:
1507 exp->X_add_number = -8;
1512 as_fatal (_("internal error: unknown dwarf2 format"));
1516 /* Emit the collected .debug_line data. */
1519 out_debug_line (segT line_seg)
1522 symbolS *prologue_start, *prologue_end;
1527 sizeof_offset = out_header (line_seg, &exp);
1528 line_end = exp.X_add_symbol;
1531 out_two (DWARF2_LINE_VERSION);
1533 /* Length of the prologue following this length. */
1534 prologue_start = symbol_temp_make ();
1535 prologue_end = symbol_temp_make ();
1536 exp.X_op = O_subtract;
1537 exp.X_add_symbol = prologue_end;
1538 exp.X_op_symbol = prologue_start;
1539 exp.X_add_number = 0;
1540 emit_expr (&exp, sizeof_offset);
1541 symbol_set_value_now (prologue_start);
1543 /* Parameters of the state machine. */
1544 out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
1545 out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
1546 out_byte (DWARF2_LINE_BASE);
1547 out_byte (DWARF2_LINE_RANGE);
1548 out_byte (DWARF2_LINE_OPCODE_BASE);
1550 /* Standard opcode lengths. */
1551 out_byte (0); /* DW_LNS_copy */
1552 out_byte (1); /* DW_LNS_advance_pc */
1553 out_byte (1); /* DW_LNS_advance_line */
1554 out_byte (1); /* DW_LNS_set_file */
1555 out_byte (1); /* DW_LNS_set_column */
1556 out_byte (0); /* DW_LNS_negate_stmt */
1557 out_byte (0); /* DW_LNS_set_basic_block */
1558 out_byte (0); /* DW_LNS_const_add_pc */
1559 out_byte (1); /* DW_LNS_fixed_advance_pc */
1560 out_byte (0); /* DW_LNS_set_prologue_end */
1561 out_byte (0); /* DW_LNS_set_epilogue_begin */
1562 out_byte (1); /* DW_LNS_set_isa */
1566 symbol_set_value_now (prologue_end);
1568 /* For each section, emit a statement program. */
1569 for (s = all_segs; s; s = s->next)
1570 if (SEG_NORMAL (s->seg))
1571 process_entries (s->seg, s->head->head);
1573 as_warn ("dwarf line number information for %s ignored",
1574 segment_name (s->seg));
1576 if (flag_dwarf_sections)
1577 /* We have to switch to the special .debug_line_end section
1578 before emitting the end-of-debug_line symbol. The linker
1579 script arranges for this section to be placed after all the
1580 (potentially garbage collected) .debug_line.<foo> sections.
1581 This section contains the line_end symbol which is used to
1582 compute the size of the linked .debug_line section, as seen
1583 in the DWARF Line Number header. */
1584 subseg_set (subseg_get (".debug_line_end", FALSE), 0);
1586 symbol_set_value_now (line_end);
1590 out_debug_ranges (segT ranges_seg)
1592 unsigned int addr_size = sizeof_address;
1597 subseg_set (ranges_seg, 0);
1599 /* Base Address Entry. */
1600 for (i = 0; i < addr_size; i++)
1602 for (i = 0; i < addr_size; i++)
1605 /* Range List Entry. */
1606 for (s = all_segs; s; s = s->next)
1611 frag = first_frag_for_seg (s->seg);
1612 beg = symbol_temp_new (s->seg, 0, frag);
1613 s->text_start = beg;
1615 frag = last_frag_for_seg (s->seg);
1616 end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1619 exp.X_op = O_symbol;
1620 exp.X_add_symbol = beg;
1621 exp.X_add_number = 0;
1622 emit_expr (&exp, addr_size);
1624 exp.X_op = O_symbol;
1625 exp.X_add_symbol = end;
1626 exp.X_add_number = 0;
1627 emit_expr (&exp, addr_size);
1630 /* End of Range Entry. */
1631 for (i = 0; i < addr_size; i++)
1633 for (i = 0; i < addr_size; i++)
1637 /* Emit data for .debug_aranges. */
1640 out_debug_aranges (segT aranges_seg, segT info_seg)
1642 unsigned int addr_size = sizeof_address;
1645 symbolS *aranges_end;
1649 sizeof_offset = out_header (aranges_seg, &exp);
1650 aranges_end = exp.X_add_symbol;
1653 out_two (DWARF2_ARANGES_VERSION);
1655 /* Offset to .debug_info. */
1656 TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), sizeof_offset);
1658 /* Size of an address (offset portion). */
1659 out_byte (addr_size);
1661 /* Size of a segment descriptor. */
1664 /* Align the header. */
1665 frag_align (ffs (2 * addr_size) - 1, 0, 0);
1667 for (s = all_segs; s; s = s->next)
1672 frag = first_frag_for_seg (s->seg);
1673 beg = symbol_temp_new (s->seg, 0, frag);
1674 s->text_start = beg;
1676 frag = last_frag_for_seg (s->seg);
1677 end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1680 exp.X_op = O_symbol;
1681 exp.X_add_symbol = beg;
1682 exp.X_add_number = 0;
1683 emit_expr (&exp, addr_size);
1685 exp.X_op = O_subtract;
1686 exp.X_add_symbol = end;
1687 exp.X_op_symbol = beg;
1688 exp.X_add_number = 0;
1689 emit_expr (&exp, addr_size);
1692 p = frag_more (2 * addr_size);
1693 md_number_to_chars (p, 0, addr_size);
1694 md_number_to_chars (p + addr_size, 0, addr_size);
1696 symbol_set_value_now (aranges_end);
1699 /* Emit data for .debug_abbrev. Note that this must be kept in
1700 sync with out_debug_info below. */
1703 out_debug_abbrev (segT abbrev_seg,
1704 segT info_seg ATTRIBUTE_UNUSED,
1705 segT line_seg ATTRIBUTE_UNUSED)
1707 subseg_set (abbrev_seg, 0);
1710 out_uleb128 (DW_TAG_compile_unit);
1711 out_byte (DW_CHILDREN_no);
1712 if (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit)
1713 out_abbrev (DW_AT_stmt_list, DW_FORM_data4);
1715 out_abbrev (DW_AT_stmt_list, DW_FORM_data8);
1716 if (all_segs->next == NULL)
1718 out_abbrev (DW_AT_low_pc, DW_FORM_addr);
1719 if (DWARF2_VERSION < 4)
1720 out_abbrev (DW_AT_high_pc, DW_FORM_addr);
1722 out_abbrev (DW_AT_high_pc, (sizeof_address == 4
1723 ? DW_FORM_data4 : DW_FORM_data8));
1727 if (DWARF2_FORMAT (info_seg) == dwarf2_format_32bit)
1728 out_abbrev (DW_AT_ranges, DW_FORM_data4);
1730 out_abbrev (DW_AT_ranges, DW_FORM_data8);
1732 out_abbrev (DW_AT_name, DW_FORM_string);
1733 out_abbrev (DW_AT_comp_dir, DW_FORM_string);
1734 out_abbrev (DW_AT_producer, DW_FORM_string);
1735 out_abbrev (DW_AT_language, DW_FORM_data2);
1738 /* Terminate the abbreviations for this compilation unit. */
1742 /* Emit a description of this compilation unit for .debug_info. */
1745 out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT ranges_seg)
1748 const char *comp_dir;
1749 const char *dirname;
1756 sizeof_offset = out_header (info_seg, &exp);
1757 info_end = exp.X_add_symbol;
1759 /* DWARF version. */
1760 out_two (DWARF2_VERSION);
1762 /* .debug_abbrev offset */
1763 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
1765 /* Target address size. */
1766 out_byte (sizeof_address);
1768 /* DW_TAG_compile_unit DIE abbrev */
1771 /* DW_AT_stmt_list */
1772 TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg),
1773 (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit
1776 /* These two attributes are emitted if all of the code is contiguous. */
1777 if (all_segs->next == NULL)
1780 exp.X_op = O_symbol;
1781 exp.X_add_symbol = all_segs->text_start;
1782 exp.X_add_number = 0;
1783 emit_expr (&exp, sizeof_address);
1786 if (DWARF2_VERSION < 4)
1787 exp.X_op = O_symbol;
1790 exp.X_op = O_subtract;
1791 exp.X_op_symbol = all_segs->text_start;
1793 exp.X_add_symbol = all_segs->text_end;
1794 exp.X_add_number = 0;
1795 emit_expr (&exp, sizeof_address);
1799 /* This attribute is emitted if the code is disjoint. */
1801 TC_DWARF2_EMIT_OFFSET (section_symbol (ranges_seg), sizeof_offset);
1804 /* DW_AT_name. We don't have the actual file name that was present
1805 on the command line, so assume files[1] is the main input file.
1806 We're not supposed to get called unless at least one line number
1807 entry was emitted, so this should always be defined. */
1808 if (files_in_use == 0)
1812 dirname = remap_debug_filename (dirs[files[1].dir]);
1813 len = strlen (dirname);
1815 /* Already has trailing slash. */
1816 p = frag_more (len);
1817 memcpy (p, dirname, len);
1819 p = frag_more (len + 1);
1820 memcpy (p, dirname, len);
1821 INSERT_DIR_SEPARATOR (p, len);
1824 len = strlen (files[1].filename) + 1;
1825 p = frag_more (len);
1826 memcpy (p, files[1].filename, len);
1828 /* DW_AT_comp_dir */
1829 comp_dir = remap_debug_filename (getpwd ());
1830 len = strlen (comp_dir) + 1;
1831 p = frag_more (len);
1832 memcpy (p, comp_dir, len);
1834 /* DW_AT_producer */
1835 sprintf (producer, "GNU AS %s", VERSION);
1836 len = strlen (producer) + 1;
1837 p = frag_more (len);
1838 memcpy (p, producer, len);
1840 /* DW_AT_language. Yes, this is probably not really MIPS, but the
1841 dwarf2 draft has no standard code for assembler. */
1842 out_two (DW_LANG_Mips_Assembler);
1844 symbol_set_value_now (info_end);
1850 all_segs_hash = hash_new ();
1851 last_seg_ptr = &all_segs;
1855 /* Finish the dwarf2 debug sections. We emit .debug.line if there
1856 were any .file/.loc directives, or --gdwarf2 was given, or if the
1857 file has a non-empty .debug_info section and an empty .debug_line
1858 section. If we emit .debug_line, and the .debug_info section is
1859 empty, we also emit .debug_info, .debug_aranges and .debug_abbrev.
1860 ALL_SEGS will be non-null if there were any .file/.loc directives,
1861 or --gdwarf2 was given and there were any located instructions
1865 dwarf2_finish (void)
1870 int emit_other_sections = 0;
1871 int empty_debug_line = 0;
1873 info_seg = bfd_get_section_by_name (stdoutput, ".debug_info");
1874 emit_other_sections = info_seg == NULL || !seg_not_empty_p (info_seg);
1876 line_seg = bfd_get_section_by_name (stdoutput, ".debug_line");
1877 empty_debug_line = line_seg == NULL || !seg_not_empty_p (line_seg);
1879 /* We can't construct a new debug_line section if we already have one.
1881 if (all_segs && !empty_debug_line)
1882 as_fatal ("duplicate .debug_line sections");
1884 if ((!all_segs && emit_other_sections)
1885 || (!emit_other_sections && !empty_debug_line))
1886 /* If there is no line information and no non-empty .debug_info
1887 section, or if there is both a non-empty .debug_info and a non-empty
1888 .debug_line, then we do nothing. */
1891 /* Calculate the size of an address for the target machine. */
1892 sizeof_address = DWARF2_ADDR_SIZE (stdoutput);
1894 /* Create and switch to the line number section. */
1895 line_seg = subseg_new (".debug_line", 0);
1896 bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY | SEC_DEBUGGING);
1898 /* For each subsection, chain the debug entries together. */
1899 for (s = all_segs; s; s = s->next)
1901 struct line_subseg *lss = s->head;
1902 struct line_entry **ptail = lss->ptail;
1904 while ((lss = lss->next) != NULL)
1911 out_debug_line (line_seg);
1913 /* If this is assembler generated line info, and there is no
1914 debug_info already, we need .debug_info and .debug_abbrev
1915 sections as well. */
1916 if (emit_other_sections)
1922 gas_assert (all_segs);
1924 info_seg = subseg_new (".debug_info", 0);
1925 abbrev_seg = subseg_new (".debug_abbrev", 0);
1926 aranges_seg = subseg_new (".debug_aranges", 0);
1928 bfd_set_section_flags (stdoutput, info_seg,
1929 SEC_READONLY | SEC_DEBUGGING);
1930 bfd_set_section_flags (stdoutput, abbrev_seg,
1931 SEC_READONLY | SEC_DEBUGGING);
1932 bfd_set_section_flags (stdoutput, aranges_seg,
1933 SEC_READONLY | SEC_DEBUGGING);
1935 record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
1937 if (all_segs->next == NULL)
1941 ranges_seg = subseg_new (".debug_ranges", 0);
1942 bfd_set_section_flags (stdoutput, ranges_seg,
1943 SEC_READONLY | SEC_DEBUGGING);
1944 record_alignment (ranges_seg, ffs (2 * sizeof_address) - 1);
1945 out_debug_ranges (ranges_seg);
1948 out_debug_aranges (aranges_seg, info_seg);
1949 out_debug_abbrev (abbrev_seg, info_seg, line_seg);
1950 out_debug_info (info_seg, abbrev_seg, line_seg, ranges_seg);