* alpha-tdep.h (struct gdbarch_tdep): Add return_in_memory.
[binutils-gdb.git] / gas / dwarf2dbg.c
1 /* dwarf2dbg.c - DWARF2 debug support
2 Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
3 Free Software Foundation, Inc.
4 Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
5
6 This file is part of GAS, the GNU Assembler.
7
8 GAS is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GAS is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GAS; see the file COPYING. If not, write to the Free
20 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
21 02110-1301, USA. */
22
23 /* Logical line numbers can be controlled by the compiler via the
24 following directives:
25
26 .file FILENO "file.c"
27 .loc FILENO LINENO [COLUMN] [basic_block] [prologue_end] \
28 [epilogue_begin] [is_stmt VALUE] [isa VALUE]
29 */
30
31 #include "as.h"
32 #include "safe-ctype.h"
33
34 #ifdef HAVE_LIMITS_H
35 #include <limits.h>
36 #else
37 #ifdef HAVE_SYS_PARAM_H
38 #include <sys/param.h>
39 #endif
40 #ifndef INT_MAX
41 #define INT_MAX (int) (((unsigned) (-1)) >> 1)
42 #endif
43 #endif
44
45 #include "dwarf2dbg.h"
46 #include <filenames.h>
47
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) \
57 do \
58 { \
59 if (offset > 1 \
60 && string[0] != 0 \
61 && string[1] == ':') \
62 string [offset] = '\\'; \
63 else \
64 string [offset] = '/'; \
65 } \
66 while (0)
67 #else
68 # define INSERT_DIR_SEPARATOR(string, offset) string[offset] = '/'
69 #endif
70
71 #ifndef DWARF2_FORMAT
72 # define DWARF2_FORMAT() dwarf2_format_32bit
73 #endif
74
75 #ifndef DWARF2_ADDR_SIZE
76 # define DWARF2_ADDR_SIZE(bfd) (bfd_arch_bits_per_address (bfd) / 8)
77 #endif
78
79 #include "subsegs.h"
80
81 #include "elf/dwarf2.h"
82
83 /* Since we can't generate the prolog until the body is complete, we
84 use three different subsegments for .debug_line: one holding the
85 prolog, one for the directory and filename info, and one for the
86 body ("statement program"). */
87 #define DL_PROLOG 0
88 #define DL_FILES 1
89 #define DL_BODY 2
90
91 /* First special line opcde - leave room for the standard opcodes.
92 Note: If you want to change this, you'll have to update the
93 "standard_opcode_lengths" table that is emitted below in
94 out_debug_line(). */
95 #define DWARF2_LINE_OPCODE_BASE 13
96
97 #ifndef DWARF2_LINE_BASE
98 /* Minimum line offset in a special line info. opcode. This value
99 was chosen to give a reasonable range of values. */
100 # define DWARF2_LINE_BASE -5
101 #endif
102
103 /* Range of line offsets in a special line info. opcode. */
104 #ifndef DWARF2_LINE_RANGE
105 # define DWARF2_LINE_RANGE 14
106 #endif
107
108 #ifndef DWARF2_LINE_MIN_INSN_LENGTH
109 /* Define the architecture-dependent minimum instruction length (in
110 bytes). This value should be rather too small than too big. */
111 # define DWARF2_LINE_MIN_INSN_LENGTH 1
112 #endif
113
114 /* Flag that indicates the initial value of the is_stmt_start flag. */
115 #define DWARF2_LINE_DEFAULT_IS_STMT 1
116
117 /* Given a special op, return the line skip amount. */
118 #define SPECIAL_LINE(op) \
119 (((op) - DWARF2_LINE_OPCODE_BASE)%DWARF2_LINE_RANGE + DWARF2_LINE_BASE)
120
121 /* Given a special op, return the address skip amount (in units of
122 DWARF2_LINE_MIN_INSN_LENGTH. */
123 #define SPECIAL_ADDR(op) (((op) - DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)
124
125 /* The maximum address skip amount that can be encoded with a special op. */
126 #define MAX_SPECIAL_ADDR_DELTA SPECIAL_ADDR(255)
127
128 struct line_entry {
129 struct line_entry *next;
130 symbolS *label;
131 struct dwarf2_line_info loc;
132 };
133
134 struct line_subseg {
135 struct line_subseg *next;
136 subsegT subseg;
137 struct line_entry *head;
138 struct line_entry **ptail;
139 };
140
141 struct line_seg {
142 struct line_seg *next;
143 segT seg;
144 struct line_subseg *head;
145 symbolS *text_start;
146 symbolS *text_end;
147 };
148
149 /* Collects data for all line table entries during assembly. */
150 static struct line_seg *all_segs;
151
152 struct file_entry {
153 const char *filename;
154 unsigned int dir;
155 };
156
157 /* Table of files used by .debug_line. */
158 static struct file_entry *files;
159 static unsigned int files_in_use;
160 static unsigned int files_allocated;
161
162 /* Table of directories used by .debug_line. */
163 static char **dirs;
164 static unsigned int dirs_in_use;
165 static unsigned int dirs_allocated;
166
167 /* TRUE when we've seen a .loc directive recently. Used to avoid
168 doing work when there's nothing to do. */
169 static bfd_boolean loc_directive_seen;
170
171 /* TRUE when we're supposed to set the basic block mark whenever a
172 label is seen. */
173 bfd_boolean dwarf2_loc_mark_labels;
174
175 /* Current location as indicated by the most recent .loc directive. */
176 static struct dwarf2_line_info current = {
177 1, 1, 0, 0,
178 DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0
179 };
180
181 /* The size of an address on the target. */
182 static unsigned int sizeof_address;
183 \f
184 static struct line_subseg *get_line_subseg (segT, subsegT);
185 static unsigned int get_filenum (const char *, unsigned int);
186 static struct frag *first_frag_for_seg (segT);
187 static struct frag *last_frag_for_seg (segT);
188 static void out_byte (int);
189 static void out_opcode (int);
190 static void out_two (int);
191 static void out_four (int);
192 static void out_abbrev (int, int);
193 static void out_uleb128 (addressT);
194 static offsetT get_frag_fix (fragS *, segT);
195 static void out_set_addr (symbolS *);
196 static int size_inc_line_addr (int, addressT);
197 static void emit_inc_line_addr (int, addressT, char *, int);
198 static void out_inc_line_addr (int, addressT);
199 static void relax_inc_line_addr (int, symbolS *, symbolS *);
200 static void process_entries (segT, struct line_entry *);
201 static void out_file_list (void);
202 static void out_debug_line (segT);
203 static void out_debug_aranges (segT, segT);
204 static void out_debug_abbrev (segT);
205 static void out_debug_info (segT, segT, segT);
206 \f
207 #ifndef TC_DWARF2_EMIT_OFFSET
208 # define TC_DWARF2_EMIT_OFFSET generic_dwarf2_emit_offset
209 static void generic_dwarf2_emit_offset (symbolS *, unsigned int);
210
211 /* Create an offset to .dwarf2_*. */
212
213 static void
214 generic_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
215 {
216 expressionS expr;
217
218 expr.X_op = O_symbol;
219 expr.X_add_symbol = symbol;
220 expr.X_add_number = 0;
221 emit_expr (&expr, size);
222 }
223 #endif
224
225 /* Find or create an entry for SEG+SUBSEG in ALL_SEGS. */
226
227 static struct line_subseg *
228 get_line_subseg (segT seg, subsegT subseg)
229 {
230 static segT last_seg;
231 static subsegT last_subseg;
232 static struct line_subseg *last_line_subseg;
233
234 struct line_seg **ps, *s;
235 struct line_subseg **pss, *ss;
236
237 if (seg == last_seg && subseg == last_subseg)
238 return last_line_subseg;
239
240 for (ps = &all_segs; (s = *ps) != NULL; ps = &s->next)
241 if (s->seg == seg)
242 goto found_seg;
243
244 s = (struct line_seg *) xmalloc (sizeof (*s));
245 s->next = NULL;
246 s->seg = seg;
247 s->head = NULL;
248 *ps = s;
249
250 found_seg:
251 for (pss = &s->head; (ss = *pss) != NULL ; pss = &ss->next)
252 {
253 if (ss->subseg == subseg)
254 goto found_subseg;
255 if (ss->subseg > subseg)
256 break;
257 }
258
259 ss = (struct line_subseg *) xmalloc (sizeof (*ss));
260 ss->next = *pss;
261 ss->subseg = subseg;
262 ss->head = NULL;
263 ss->ptail = &ss->head;
264 *pss = ss;
265
266 found_subseg:
267 last_seg = seg;
268 last_subseg = subseg;
269 last_line_subseg = ss;
270
271 return ss;
272 }
273
274 /* Record an entry for LOC occurring at LABEL. */
275
276 static void
277 dwarf2_gen_line_info_1 (symbolS *label, struct dwarf2_line_info *loc)
278 {
279 struct line_subseg *ss;
280 struct line_entry *e;
281
282 e = (struct line_entry *) xmalloc (sizeof (*e));
283 e->next = NULL;
284 e->label = label;
285 e->loc = *loc;
286
287 ss = get_line_subseg (now_seg, now_subseg);
288 *ss->ptail = e;
289 ss->ptail = &e->next;
290 }
291
292 /* Record an entry for LOC occurring at OFS within the current fragment. */
293
294 void
295 dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc)
296 {
297 static unsigned int line = -1;
298 static unsigned int filenum = -1;
299
300 symbolS *sym;
301
302 /* Early out for as-yet incomplete location information. */
303 if (loc->filenum == 0 || loc->line == 0)
304 return;
305
306 /* Don't emit sequences of line symbols for the same line when the
307 symbols apply to assembler code. It is necessary to emit
308 duplicate line symbols when a compiler asks for them, because GDB
309 uses them to determine the end of the prologue. */
310 if (debug_type == DEBUG_DWARF2
311 && line == loc->line && filenum == loc->filenum)
312 return;
313
314 line = loc->line;
315 filenum = loc->filenum;
316
317 sym = symbol_temp_new (now_seg, ofs, frag_now);
318 dwarf2_gen_line_info_1 (sym, loc);
319 }
320
321 /* Returns the current source information. If .file directives have
322 been encountered, the info for the corresponding source file is
323 returned. Otherwise, the info for the assembly source file is
324 returned. */
325
326 void
327 dwarf2_where (struct dwarf2_line_info *line)
328 {
329 if (debug_type == DEBUG_DWARF2)
330 {
331 char *filename;
332 as_where (&filename, &line->line);
333 line->filenum = get_filenum (filename, 0);
334 line->column = 0;
335 line->flags = DWARF2_FLAG_IS_STMT;
336 line->isa = current.isa;
337 }
338 else
339 *line = current;
340 }
341
342 /* A hook to allow the target backend to inform the line number state
343 machine of isa changes when assembler debug info is enabled. */
344
345 void
346 dwarf2_set_isa (unsigned int isa)
347 {
348 current.isa = isa;
349 }
350
351 /* Called for each machine instruction, or relatively atomic group of
352 machine instructions (ie built-in macro). The instruction or group
353 is SIZE bytes in length. If dwarf2 line number generation is called
354 for, emit a line statement appropriately. */
355
356 void
357 dwarf2_emit_insn (int size)
358 {
359 struct dwarf2_line_info loc;
360
361 if (loc_directive_seen)
362 {
363 /* Use the last location established by a .loc directive, not
364 the value returned by dwarf2_where(). That calls as_where()
365 which will return either the logical input file name (foo.c)
366 or the physical input file name (foo.s) and not the file name
367 specified in the most recent .loc directive (eg foo.h). */
368 loc = current;
369
370 /* Unless we generate DWARF2 debugging information for each
371 assembler line, we only emit one line symbol for one LOC. */
372 if (debug_type != DEBUG_DWARF2)
373 loc_directive_seen = FALSE;
374 }
375 else if (debug_type != DEBUG_DWARF2)
376 return;
377 else
378 dwarf2_where (&loc);
379
380 dwarf2_gen_line_info (frag_now_fix () - size, &loc);
381
382 current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK
383 | DWARF2_FLAG_PROLOGUE_END
384 | DWARF2_FLAG_EPILOGUE_BEGIN);
385 }
386
387 /* Called for each (preferably code) label. If dwarf2_loc_mark_labels
388 is enabled, emit a basic block marker. */
389
390 void
391 dwarf2_emit_label (symbolS *label)
392 {
393 struct dwarf2_line_info loc;
394
395 if (!dwarf2_loc_mark_labels)
396 return;
397 if (S_GET_SEGMENT (label) != now_seg)
398 return;
399 if (!(bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE))
400 return;
401
402 if (debug_type == DEBUG_DWARF2)
403 dwarf2_where (&loc);
404 else
405 {
406 loc = current;
407 loc_directive_seen = FALSE;
408 }
409
410 loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
411
412 current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK
413 | DWARF2_FLAG_PROLOGUE_END
414 | DWARF2_FLAG_EPILOGUE_BEGIN);
415
416 dwarf2_gen_line_info_1 (label, &loc);
417 }
418
419 /* Get a .debug_line file number for FILENAME. If NUM is nonzero,
420 allocate it on that file table slot, otherwise return the first
421 empty one. */
422
423 static unsigned int
424 get_filenum (const char *filename, unsigned int num)
425 {
426 static unsigned int last_used, last_used_dir_len;
427 const char *file;
428 size_t dir_len;
429 unsigned int i, dir;
430
431 if (num == 0 && last_used)
432 {
433 if (! files[last_used].dir
434 && strcmp (filename, files[last_used].filename) == 0)
435 return last_used;
436 if (files[last_used].dir
437 && strncmp (filename, dirs[files[last_used].dir],
438 last_used_dir_len) == 0
439 && IS_DIR_SEPARATOR (filename [last_used_dir_len])
440 && strcmp (filename + last_used_dir_len + 1,
441 files[last_used].filename) == 0)
442 return last_used;
443 }
444
445 file = lbasename (filename);
446 /* Don't make empty string from / or A: from A:/ . */
447 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
448 if (file <= filename + 3)
449 file = filename;
450 #else
451 if (file == filename + 1)
452 file = filename;
453 #endif
454 dir_len = file - filename;
455
456 dir = 0;
457 if (dir_len)
458 {
459 --dir_len;
460 for (dir = 1; dir < dirs_in_use; ++dir)
461 if (strncmp (filename, dirs[dir], dir_len) == 0
462 && dirs[dir][dir_len] == '\0')
463 break;
464
465 if (dir >= dirs_in_use)
466 {
467 if (dir >= dirs_allocated)
468 {
469 dirs_allocated = dir + 32;
470 dirs = (char **)
471 xrealloc (dirs, (dir + 32) * sizeof (const char *));
472 }
473
474 dirs[dir] = xmalloc (dir_len + 1);
475 memcpy (dirs[dir], filename, dir_len);
476 dirs[dir][dir_len] = '\0';
477 dirs_in_use = dir + 1;
478 }
479 }
480
481 if (num == 0)
482 {
483 for (i = 1; i < files_in_use; ++i)
484 if (files[i].dir == dir
485 && files[i].filename
486 && strcmp (file, files[i].filename) == 0)
487 {
488 last_used = i;
489 last_used_dir_len = dir_len;
490 return i;
491 }
492 }
493 else
494 i = num;
495
496 if (i >= files_allocated)
497 {
498 unsigned int old = files_allocated;
499
500 files_allocated = i + 32;
501 files = (struct file_entry *)
502 xrealloc (files, (i + 32) * sizeof (struct file_entry));
503
504 memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
505 }
506
507 files[i].filename = num ? file : xstrdup (file);
508 files[i].dir = dir;
509 if (files_in_use < i + 1)
510 files_in_use = i + 1;
511 last_used = i;
512 last_used_dir_len = dir_len;
513
514 return i;
515 }
516
517 /* Handle two forms of .file directive:
518 - Pass .file "source.c" to s_app_file
519 - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
520
521 If an entry is added to the file table, return a pointer to the filename. */
522
523 char *
524 dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED)
525 {
526 offsetT num;
527 char *filename;
528 int filename_len;
529
530 /* Continue to accept a bare string and pass it off. */
531 SKIP_WHITESPACE ();
532 if (*input_line_pointer == '"')
533 {
534 s_app_file (0);
535 return NULL;
536 }
537
538 num = get_absolute_expression ();
539 filename = demand_copy_C_string (&filename_len);
540 if (filename == NULL)
541 return NULL;
542 demand_empty_rest_of_line ();
543
544 if (num < 1)
545 {
546 as_bad (_("file number less than one"));
547 return NULL;
548 }
549
550 if (num < (int) files_in_use && files[num].filename != 0)
551 {
552 as_bad (_("file number %ld already allocated"), (long) num);
553 return NULL;
554 }
555
556 get_filenum (filename, num);
557
558 return filename;
559 }
560
561 void
562 dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
563 {
564 offsetT filenum, line;
565
566 filenum = get_absolute_expression ();
567 SKIP_WHITESPACE ();
568 line = get_absolute_expression ();
569
570 if (filenum < 1)
571 {
572 as_bad (_("file number less than one"));
573 return;
574 }
575 if (filenum >= (int) files_in_use || files[filenum].filename == 0)
576 {
577 as_bad (_("unassigned file number %ld"), (long) filenum);
578 return;
579 }
580
581 current.filenum = filenum;
582 current.line = line;
583
584 #ifndef NO_LISTING
585 if (listing)
586 {
587 if (files[filenum].dir)
588 {
589 size_t dir_len = strlen (dirs[files[filenum].dir]);
590 size_t file_len = strlen (files[filenum].filename);
591 char *cp = (char *) alloca (dir_len + 1 + file_len + 1);
592
593 memcpy (cp, dirs[files[filenum].dir], dir_len);
594 INSERT_DIR_SEPARATOR (cp, dir_len);
595 memcpy (cp + dir_len + 1, files[filenum].filename, file_len);
596 cp[dir_len + file_len + 1] = '\0';
597 listing_source_file (cp);
598 }
599 else
600 listing_source_file (files[filenum].filename);
601 listing_source_line (line);
602 }
603 #endif
604
605 SKIP_WHITESPACE ();
606 if (ISDIGIT (*input_line_pointer))
607 {
608 current.column = get_absolute_expression ();
609 SKIP_WHITESPACE ();
610 }
611
612 while (ISALPHA (*input_line_pointer))
613 {
614 char *p, c;
615 offsetT value;
616
617 p = input_line_pointer;
618 c = get_symbol_end ();
619
620 if (strcmp (p, "basic_block") == 0)
621 {
622 current.flags |= DWARF2_FLAG_BASIC_BLOCK;
623 *input_line_pointer = c;
624 }
625 else if (strcmp (p, "prologue_end") == 0)
626 {
627 current.flags |= DWARF2_FLAG_PROLOGUE_END;
628 *input_line_pointer = c;
629 }
630 else if (strcmp (p, "epilogue_begin") == 0)
631 {
632 current.flags |= DWARF2_FLAG_EPILOGUE_BEGIN;
633 *input_line_pointer = c;
634 }
635 else if (strcmp (p, "is_stmt") == 0)
636 {
637 *input_line_pointer = c;
638 value = get_absolute_expression ();
639 if (value == 0)
640 current.flags &= ~DWARF2_FLAG_IS_STMT;
641 else if (value == 1)
642 current.flags |= DWARF2_FLAG_IS_STMT;
643 else
644 {
645 as_bad (_("is_stmt value not 0 or 1"));
646 return;
647 }
648 }
649 else if (strcmp (p, "isa") == 0)
650 {
651 *input_line_pointer = c;
652 value = get_absolute_expression ();
653 if (value >= 0)
654 current.isa = value;
655 else
656 {
657 as_bad (_("isa number less than zero"));
658 return;
659 }
660 }
661 else
662 {
663 as_bad (_("unknown .loc sub-directive `%s'"), p);
664 *input_line_pointer = c;
665 return;
666 }
667
668 SKIP_WHITESPACE ();
669 }
670
671 demand_empty_rest_of_line ();
672 loc_directive_seen = TRUE;
673 }
674
675 void
676 dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED)
677 {
678 offsetT value = get_absolute_expression ();
679
680 if (value != 0 && value != 1)
681 {
682 as_bad (_("expected 0 or 1"));
683 ignore_rest_of_line ();
684 }
685 else
686 {
687 dwarf2_loc_mark_labels = value != 0;
688 demand_empty_rest_of_line ();
689 }
690 }
691 \f
692 static struct frag *
693 first_frag_for_seg (segT seg)
694 {
695 return seg_info (seg)->frchainP->frch_root;
696 }
697
698 static struct frag *
699 last_frag_for_seg (segT seg)
700 {
701 frchainS *f = seg_info (seg)->frchainP;
702
703 while (f->frch_next != NULL)
704 f = f->frch_next;
705
706 return f->frch_last;
707 }
708 \f
709 /* Emit a single byte into the current segment. */
710
711 static inline void
712 out_byte (int byte)
713 {
714 FRAG_APPEND_1_CHAR (byte);
715 }
716
717 /* Emit a statement program opcode into the current segment. */
718
719 static inline void
720 out_opcode (int opc)
721 {
722 out_byte (opc);
723 }
724
725 /* Emit a two-byte word into the current segment. */
726
727 static inline void
728 out_two (int data)
729 {
730 md_number_to_chars (frag_more (2), data, 2);
731 }
732
733 /* Emit a four byte word into the current segment. */
734
735 static inline void
736 out_four (int data)
737 {
738 md_number_to_chars (frag_more (4), data, 4);
739 }
740
741 /* Emit an unsigned "little-endian base 128" number. */
742
743 static void
744 out_uleb128 (addressT value)
745 {
746 output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
747 }
748
749 /* Emit a tuple for .debug_abbrev. */
750
751 static inline void
752 out_abbrev (int name, int form)
753 {
754 out_uleb128 (name);
755 out_uleb128 (form);
756 }
757
758 /* Get the size of a fragment. */
759
760 static offsetT
761 get_frag_fix (fragS *frag, segT seg)
762 {
763 frchainS *fr;
764
765 if (frag->fr_next)
766 return frag->fr_fix;
767
768 /* If a fragment is the last in the chain, special measures must be
769 taken to find its size before relaxation, since it may be pending
770 on some subsegment chain. */
771 for (fr = seg_info (seg)->frchainP; fr; fr = fr->frch_next)
772 if (fr->frch_last == frag)
773 return (char *) obstack_next_free (&fr->frch_obstack) - frag->fr_literal;
774
775 abort ();
776 }
777
778 /* Set an absolute address (may result in a relocation entry). */
779
780 static void
781 out_set_addr (symbolS *sym)
782 {
783 expressionS expr;
784
785 out_opcode (DW_LNS_extended_op);
786 out_uleb128 (sizeof_address + 1);
787
788 out_opcode (DW_LNE_set_address);
789 expr.X_op = O_symbol;
790 expr.X_add_symbol = sym;
791 expr.X_add_number = 0;
792 emit_expr (&expr, sizeof_address);
793 }
794
795 #if DWARF2_LINE_MIN_INSN_LENGTH > 1
796 static void scale_addr_delta (addressT *);
797
798 static void
799 scale_addr_delta (addressT *addr_delta)
800 {
801 static int printed_this = 0;
802 if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0)
803 {
804 if (!printed_this)
805 as_bad("unaligned opcodes detected in executable segment");
806 printed_this = 1;
807 }
808 *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
809 }
810 #else
811 #define scale_addr_delta(A)
812 #endif
813
814 /* Encode a pair of line and address skips as efficiently as possible.
815 Note that the line skip is signed, whereas the address skip is unsigned.
816
817 The following two routines *must* be kept in sync. This is
818 enforced by making emit_inc_line_addr abort if we do not emit
819 exactly the expected number of bytes. */
820
821 static int
822 size_inc_line_addr (int line_delta, addressT addr_delta)
823 {
824 unsigned int tmp, opcode;
825 int len = 0;
826
827 /* Scale the address delta by the minimum instruction length. */
828 scale_addr_delta (&addr_delta);
829
830 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
831 We cannot use special opcodes here, since we want the end_sequence
832 to emit the matrix entry. */
833 if (line_delta == INT_MAX)
834 {
835 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
836 len = 1;
837 else
838 len = 1 + sizeof_leb128 (addr_delta, 0);
839 return len + 3;
840 }
841
842 /* Bias the line delta by the base. */
843 tmp = line_delta - DWARF2_LINE_BASE;
844
845 /* If the line increment is out of range of a special opcode, we
846 must encode it with DW_LNS_advance_line. */
847 if (tmp >= DWARF2_LINE_RANGE)
848 {
849 len = 1 + sizeof_leb128 (line_delta, 1);
850 line_delta = 0;
851 tmp = 0 - DWARF2_LINE_BASE;
852 }
853
854 /* Bias the opcode by the special opcode base. */
855 tmp += DWARF2_LINE_OPCODE_BASE;
856
857 /* Avoid overflow when addr_delta is large. */
858 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
859 {
860 /* Try using a special opcode. */
861 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
862 if (opcode <= 255)
863 return len + 1;
864
865 /* Try using DW_LNS_const_add_pc followed by special op. */
866 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
867 if (opcode <= 255)
868 return len + 2;
869 }
870
871 /* Otherwise use DW_LNS_advance_pc. */
872 len += 1 + sizeof_leb128 (addr_delta, 0);
873
874 /* DW_LNS_copy or special opcode. */
875 len += 1;
876
877 return len;
878 }
879
880 static void
881 emit_inc_line_addr (int line_delta, addressT addr_delta, char *p, int len)
882 {
883 unsigned int tmp, opcode;
884 int need_copy = 0;
885 char *end = p + len;
886
887 /* Line number sequences cannot go backward in addresses. This means
888 we've incorrectly ordered the statements in the sequence. */
889 assert ((offsetT) addr_delta >= 0);
890
891 /* Scale the address delta by the minimum instruction length. */
892 scale_addr_delta (&addr_delta);
893
894 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
895 We cannot use special opcodes here, since we want the end_sequence
896 to emit the matrix entry. */
897 if (line_delta == INT_MAX)
898 {
899 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
900 *p++ = DW_LNS_const_add_pc;
901 else
902 {
903 *p++ = DW_LNS_advance_pc;
904 p += output_leb128 (p, addr_delta, 0);
905 }
906
907 *p++ = DW_LNS_extended_op;
908 *p++ = 1;
909 *p++ = DW_LNE_end_sequence;
910 goto done;
911 }
912
913 /* Bias the line delta by the base. */
914 tmp = line_delta - DWARF2_LINE_BASE;
915
916 /* If the line increment is out of range of a special opcode, we
917 must encode it with DW_LNS_advance_line. */
918 if (tmp >= DWARF2_LINE_RANGE)
919 {
920 *p++ = DW_LNS_advance_line;
921 p += output_leb128 (p, line_delta, 1);
922
923 line_delta = 0;
924 tmp = 0 - DWARF2_LINE_BASE;
925 need_copy = 1;
926 }
927
928 /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
929 special opcode. */
930 if (line_delta == 0 && addr_delta == 0)
931 {
932 *p++ = DW_LNS_copy;
933 goto done;
934 }
935
936 /* Bias the opcode by the special opcode base. */
937 tmp += DWARF2_LINE_OPCODE_BASE;
938
939 /* Avoid overflow when addr_delta is large. */
940 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
941 {
942 /* Try using a special opcode. */
943 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
944 if (opcode <= 255)
945 {
946 *p++ = opcode;
947 goto done;
948 }
949
950 /* Try using DW_LNS_const_add_pc followed by special op. */
951 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
952 if (opcode <= 255)
953 {
954 *p++ = DW_LNS_const_add_pc;
955 *p++ = opcode;
956 goto done;
957 }
958 }
959
960 /* Otherwise use DW_LNS_advance_pc. */
961 *p++ = DW_LNS_advance_pc;
962 p += output_leb128 (p, addr_delta, 0);
963
964 if (need_copy)
965 *p++ = DW_LNS_copy;
966 else
967 *p++ = tmp;
968
969 done:
970 assert (p == end);
971 }
972
973 /* Handy routine to combine calls to the above two routines. */
974
975 static void
976 out_inc_line_addr (int line_delta, addressT addr_delta)
977 {
978 int len = size_inc_line_addr (line_delta, addr_delta);
979 emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
980 }
981
982 /* Generate a variant frag that we can use to relax address/line
983 increments between fragments of the target segment. */
984
985 static void
986 relax_inc_line_addr (int line_delta, symbolS *to_sym, symbolS *from_sym)
987 {
988 expressionS expr;
989 int max_chars;
990
991 expr.X_op = O_subtract;
992 expr.X_add_symbol = to_sym;
993 expr.X_op_symbol = from_sym;
994 expr.X_add_number = 0;
995
996 /* The maximum size of the frag is the line delta with a maximum
997 sized address delta. */
998 max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
999
1000 frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
1001 make_expr_symbol (&expr), line_delta, NULL);
1002 }
1003
1004 /* The function estimates the size of a rs_dwarf2dbg variant frag
1005 based on the current values of the symbols. It is called before
1006 the relaxation loop. We set fr_subtype to the expected length. */
1007
1008 int
1009 dwarf2dbg_estimate_size_before_relax (fragS *frag)
1010 {
1011 offsetT addr_delta;
1012 int size;
1013
1014 addr_delta = resolve_symbol_value (frag->fr_symbol);
1015 size = size_inc_line_addr (frag->fr_offset, addr_delta);
1016
1017 frag->fr_subtype = size;
1018
1019 return size;
1020 }
1021
1022 /* This function relaxes a rs_dwarf2dbg variant frag based on the
1023 current values of the symbols. fr_subtype is the current length
1024 of the frag. This returns the change in frag length. */
1025
1026 int
1027 dwarf2dbg_relax_frag (fragS *frag)
1028 {
1029 int old_size, new_size;
1030
1031 old_size = frag->fr_subtype;
1032 new_size = dwarf2dbg_estimate_size_before_relax (frag);
1033
1034 return new_size - old_size;
1035 }
1036
1037 /* This function converts a rs_dwarf2dbg variant frag into a normal
1038 fill frag. This is called after all relaxation has been done.
1039 fr_subtype will be the desired length of the frag. */
1040
1041 void
1042 dwarf2dbg_convert_frag (fragS *frag)
1043 {
1044 offsetT addr_diff;
1045
1046 addr_diff = resolve_symbol_value (frag->fr_symbol);
1047
1048 /* fr_var carries the max_chars that we created the fragment with.
1049 fr_subtype carries the current expected length. We must, of
1050 course, have allocated enough memory earlier. */
1051 assert (frag->fr_var >= (int) frag->fr_subtype);
1052
1053 emit_inc_line_addr (frag->fr_offset, addr_diff,
1054 frag->fr_literal + frag->fr_fix, frag->fr_subtype);
1055
1056 frag->fr_fix += frag->fr_subtype;
1057 frag->fr_type = rs_fill;
1058 frag->fr_var = 0;
1059 frag->fr_offset = 0;
1060 }
1061
1062 /* Generate .debug_line content for the chain of line number entries
1063 beginning at E, for segment SEG. */
1064
1065 static void
1066 process_entries (segT seg, struct line_entry *e)
1067 {
1068 unsigned filenum = 1;
1069 unsigned line = 1;
1070 unsigned column = 0;
1071 unsigned isa = 0;
1072 unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
1073 fragS *last_frag = NULL, *frag;
1074 addressT last_frag_ofs = 0, frag_ofs;
1075 symbolS *last_lab = NULL, *lab;
1076 struct line_entry *next;
1077
1078 do
1079 {
1080 int line_delta;
1081
1082 if (filenum != e->loc.filenum)
1083 {
1084 filenum = e->loc.filenum;
1085 out_opcode (DW_LNS_set_file);
1086 out_uleb128 (filenum);
1087 }
1088
1089 if (column != e->loc.column)
1090 {
1091 column = e->loc.column;
1092 out_opcode (DW_LNS_set_column);
1093 out_uleb128 (column);
1094 }
1095
1096 if (isa != e->loc.isa)
1097 {
1098 isa = e->loc.isa;
1099 out_opcode (DW_LNS_set_isa);
1100 out_uleb128 (isa);
1101 }
1102
1103 if ((e->loc.flags ^ flags) & DWARF2_FLAG_IS_STMT)
1104 {
1105 flags = e->loc.flags;
1106 out_opcode (DW_LNS_negate_stmt);
1107 }
1108
1109 if (e->loc.flags & DWARF2_FLAG_BASIC_BLOCK)
1110 out_opcode (DW_LNS_set_basic_block);
1111
1112 if (e->loc.flags & DWARF2_FLAG_PROLOGUE_END)
1113 out_opcode (DW_LNS_set_prologue_end);
1114
1115 if (e->loc.flags & DWARF2_FLAG_EPILOGUE_BEGIN)
1116 out_opcode (DW_LNS_set_epilogue_begin);
1117
1118 /* Don't try to optimize away redundant entries; gdb wants two
1119 entries for a function where the code starts on the same line as
1120 the {, and there's no way to identify that case here. Trust gcc
1121 to optimize appropriately. */
1122 line_delta = e->loc.line - line;
1123 lab = e->label;
1124 frag = symbol_get_frag (lab);
1125 frag_ofs = S_GET_VALUE (lab);
1126
1127 if (last_frag == NULL)
1128 {
1129 out_set_addr (lab);
1130 out_inc_line_addr (line_delta, 0);
1131 }
1132 else if (frag == last_frag)
1133 out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
1134 else
1135 relax_inc_line_addr (line_delta, lab, last_lab);
1136
1137 line = e->loc.line;
1138 last_lab = lab;
1139 last_frag = frag;
1140 last_frag_ofs = frag_ofs;
1141
1142 next = e->next;
1143 free (e);
1144 e = next;
1145 }
1146 while (e);
1147
1148 /* Emit a DW_LNE_end_sequence for the end of the section. */
1149 frag = last_frag_for_seg (seg);
1150 frag_ofs = get_frag_fix (frag, seg);
1151 if (frag == last_frag)
1152 out_inc_line_addr (INT_MAX, frag_ofs - last_frag_ofs);
1153 else
1154 {
1155 lab = symbol_temp_new (seg, frag_ofs, frag);
1156 relax_inc_line_addr (INT_MAX, lab, last_lab);
1157 }
1158 }
1159
1160 /* Emit the directory and file tables for .debug_line. */
1161
1162 static void
1163 out_file_list (void)
1164 {
1165 size_t size;
1166 char *cp;
1167 unsigned int i;
1168
1169 /* Emit directory list. */
1170 for (i = 1; i < dirs_in_use; ++i)
1171 {
1172 size = strlen (dirs[i]) + 1;
1173 cp = frag_more (size);
1174 memcpy (cp, dirs[i], size);
1175 }
1176 /* Terminate it. */
1177 out_byte ('\0');
1178
1179 for (i = 1; i < files_in_use; ++i)
1180 {
1181 if (files[i].filename == NULL)
1182 {
1183 as_bad (_("unassigned file number %ld"), (long) i);
1184 /* Prevent a crash later, particularly for file 1. */
1185 files[i].filename = "";
1186 continue;
1187 }
1188
1189 size = strlen (files[i].filename) + 1;
1190 cp = frag_more (size);
1191 memcpy (cp, files[i].filename, size);
1192
1193 out_uleb128 (files[i].dir); /* directory number */
1194 out_uleb128 (0); /* last modification timestamp */
1195 out_uleb128 (0); /* filesize */
1196 }
1197
1198 /* Terminate filename list. */
1199 out_byte (0);
1200 }
1201
1202 /* Emit the collected .debug_line data. */
1203
1204 static void
1205 out_debug_line (segT line_seg)
1206 {
1207 expressionS expr;
1208 symbolS *line_start;
1209 symbolS *prologue_end;
1210 symbolS *line_end;
1211 struct line_seg *s;
1212 enum dwarf2_format d2f;
1213 int sizeof_offset;
1214
1215 subseg_set (line_seg, 0);
1216
1217 line_start = symbol_temp_new_now ();
1218 prologue_end = symbol_temp_make ();
1219 line_end = symbol_temp_make ();
1220
1221 /* Total length of the information for this compilation unit. */
1222 expr.X_op = O_subtract;
1223 expr.X_add_symbol = line_end;
1224 expr.X_op_symbol = line_start;
1225
1226 d2f = DWARF2_FORMAT ();
1227 if (d2f == dwarf2_format_32bit)
1228 {
1229 expr.X_add_number = -4;
1230 emit_expr (&expr, 4);
1231 sizeof_offset = 4;
1232 }
1233 else if (d2f == dwarf2_format_64bit)
1234 {
1235 expr.X_add_number = -12;
1236 out_four (-1);
1237 emit_expr (&expr, 8);
1238 sizeof_offset = 8;
1239 }
1240 else if (d2f == dwarf2_format_64bit_irix)
1241 {
1242 expr.X_add_number = -8;
1243 emit_expr (&expr, 8);
1244 sizeof_offset = 8;
1245 }
1246 else
1247 {
1248 as_fatal (_("internal error: unknown dwarf2 format"));
1249 }
1250
1251 /* Version. */
1252 out_two (2);
1253
1254 /* Length of the prologue following this length. */
1255 expr.X_op = O_subtract;
1256 expr.X_add_symbol = prologue_end;
1257 expr.X_op_symbol = line_start;
1258 expr.X_add_number = - (4 + 2 + 4);
1259 emit_expr (&expr, sizeof_offset);
1260
1261 /* Parameters of the state machine. */
1262 out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
1263 out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
1264 out_byte (DWARF2_LINE_BASE);
1265 out_byte (DWARF2_LINE_RANGE);
1266 out_byte (DWARF2_LINE_OPCODE_BASE);
1267
1268 /* Standard opcode lengths. */
1269 out_byte (0); /* DW_LNS_copy */
1270 out_byte (1); /* DW_LNS_advance_pc */
1271 out_byte (1); /* DW_LNS_advance_line */
1272 out_byte (1); /* DW_LNS_set_file */
1273 out_byte (1); /* DW_LNS_set_column */
1274 out_byte (0); /* DW_LNS_negate_stmt */
1275 out_byte (0); /* DW_LNS_set_basic_block */
1276 out_byte (0); /* DW_LNS_const_add_pc */
1277 out_byte (1); /* DW_LNS_fixed_advance_pc */
1278 out_byte (0); /* DW_LNS_set_prologue_end */
1279 out_byte (0); /* DW_LNS_set_epilogue_begin */
1280 out_byte (1); /* DW_LNS_set_isa */
1281
1282 out_file_list ();
1283
1284 symbol_set_value_now (prologue_end);
1285
1286 /* For each section, emit a statement program. */
1287 for (s = all_segs; s; s = s->next)
1288 process_entries (s->seg, s->head->head);
1289
1290 symbol_set_value_now (line_end);
1291 }
1292
1293 /* Emit data for .debug_aranges. */
1294
1295 static void
1296 out_debug_aranges (segT aranges_seg, segT info_seg)
1297 {
1298 unsigned int addr_size = sizeof_address;
1299 addressT size, skip;
1300 struct line_seg *s;
1301 expressionS expr;
1302 char *p;
1303
1304 size = 4 + 2 + 4 + 1 + 1;
1305
1306 skip = 2 * addr_size - (size & (2 * addr_size - 1));
1307 if (skip == 2 * addr_size)
1308 skip = 0;
1309 size += skip;
1310
1311 for (s = all_segs; s; s = s->next)
1312 size += 2 * addr_size;
1313
1314 size += 2 * addr_size;
1315
1316 subseg_set (aranges_seg, 0);
1317
1318 /* Length of the compilation unit. */
1319 out_four (size - 4);
1320
1321 /* Version. */
1322 out_two (2);
1323
1324 /* Offset to .debug_info. */
1325 /* ??? sizeof_offset */
1326 TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), 4);
1327
1328 /* Size of an address (offset portion). */
1329 out_byte (addr_size);
1330
1331 /* Size of a segment descriptor. */
1332 out_byte (0);
1333
1334 /* Align the header. */
1335 if (skip)
1336 frag_align (ffs (2 * addr_size) - 1, 0, 0);
1337
1338 for (s = all_segs; s; s = s->next)
1339 {
1340 fragS *frag;
1341 symbolS *beg, *end;
1342
1343 frag = first_frag_for_seg (s->seg);
1344 beg = symbol_temp_new (s->seg, 0, frag);
1345 s->text_start = beg;
1346
1347 frag = last_frag_for_seg (s->seg);
1348 end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1349 s->text_end = end;
1350
1351 expr.X_op = O_symbol;
1352 expr.X_add_symbol = beg;
1353 expr.X_add_number = 0;
1354 emit_expr (&expr, addr_size);
1355
1356 expr.X_op = O_subtract;
1357 expr.X_add_symbol = end;
1358 expr.X_op_symbol = beg;
1359 expr.X_add_number = 0;
1360 emit_expr (&expr, addr_size);
1361 }
1362
1363 p = frag_more (2 * addr_size);
1364 md_number_to_chars (p, 0, addr_size);
1365 md_number_to_chars (p + addr_size, 0, addr_size);
1366 }
1367
1368 /* Emit data for .debug_abbrev. Note that this must be kept in
1369 sync with out_debug_info below. */
1370
1371 static void
1372 out_debug_abbrev (segT abbrev_seg)
1373 {
1374 subseg_set (abbrev_seg, 0);
1375
1376 out_uleb128 (1);
1377 out_uleb128 (DW_TAG_compile_unit);
1378 out_byte (DW_CHILDREN_no);
1379 out_abbrev (DW_AT_stmt_list, DW_FORM_data4);
1380 if (all_segs->next == NULL)
1381 {
1382 out_abbrev (DW_AT_low_pc, DW_FORM_addr);
1383 out_abbrev (DW_AT_high_pc, DW_FORM_addr);
1384 }
1385 out_abbrev (DW_AT_name, DW_FORM_string);
1386 out_abbrev (DW_AT_comp_dir, DW_FORM_string);
1387 out_abbrev (DW_AT_producer, DW_FORM_string);
1388 out_abbrev (DW_AT_language, DW_FORM_data2);
1389 out_abbrev (0, 0);
1390
1391 /* Terminate the abbreviations for this compilation unit. */
1392 out_byte (0);
1393 }
1394
1395 /* Emit a description of this compilation unit for .debug_info. */
1396
1397 static void
1398 out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg)
1399 {
1400 char producer[128];
1401 char *comp_dir;
1402 expressionS expr;
1403 symbolS *info_start;
1404 symbolS *info_end;
1405 char *p;
1406 int len;
1407 enum dwarf2_format d2f;
1408 int sizeof_offset;
1409
1410 subseg_set (info_seg, 0);
1411
1412 info_start = symbol_temp_new_now ();
1413 info_end = symbol_temp_make ();
1414
1415 /* Compilation Unit length. */
1416 expr.X_op = O_subtract;
1417 expr.X_add_symbol = info_end;
1418 expr.X_op_symbol = info_start;
1419
1420 d2f = DWARF2_FORMAT ();
1421 if (d2f == dwarf2_format_32bit)
1422 {
1423 expr.X_add_number = -4;
1424 emit_expr (&expr, 4);
1425 sizeof_offset = 4;
1426 }
1427 else if (d2f == dwarf2_format_64bit)
1428 {
1429 expr.X_add_number = -12;
1430 out_four (-1);
1431 emit_expr (&expr, 8);
1432 sizeof_offset = 8;
1433 }
1434 else if (d2f == dwarf2_format_64bit_irix)
1435 {
1436 expr.X_add_number = -8;
1437 emit_expr (&expr, 8);
1438 sizeof_offset = 8;
1439 }
1440 else
1441 {
1442 as_fatal (_("internal error: unknown dwarf2 format"));
1443 }
1444
1445 /* DWARF version. */
1446 out_two (2);
1447
1448 /* .debug_abbrev offset */
1449 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
1450
1451 /* Target address size. */
1452 out_byte (sizeof_address);
1453
1454 /* DW_TAG_compile_unit DIE abbrev */
1455 out_uleb128 (1);
1456
1457 /* DW_AT_stmt_list */
1458 /* ??? sizeof_offset */
1459 TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg), 4);
1460
1461 /* These two attributes may only be emitted if all of the code is
1462 contiguous. Multiple sections are not that. */
1463 if (all_segs->next == NULL)
1464 {
1465 /* DW_AT_low_pc */
1466 expr.X_op = O_symbol;
1467 expr.X_add_symbol = all_segs->text_start;
1468 expr.X_add_number = 0;
1469 emit_expr (&expr, sizeof_address);
1470
1471 /* DW_AT_high_pc */
1472 expr.X_op = O_symbol;
1473 expr.X_add_symbol = all_segs->text_end;
1474 expr.X_add_number = 0;
1475 emit_expr (&expr, sizeof_address);
1476 }
1477
1478 /* DW_AT_name. We don't have the actual file name that was present
1479 on the command line, so assume files[1] is the main input file.
1480 We're not supposed to get called unless at least one line number
1481 entry was emitted, so this should always be defined. */
1482 if (!files || files_in_use < 1)
1483 abort ();
1484 if (files[1].dir)
1485 {
1486 len = strlen (dirs[files[1].dir]);
1487 p = frag_more (len + 1);
1488 memcpy (p, dirs[files[1].dir], len);
1489 INSERT_DIR_SEPARATOR (p, len);
1490 }
1491 len = strlen (files[1].filename) + 1;
1492 p = frag_more (len);
1493 memcpy (p, files[1].filename, len);
1494
1495 /* DW_AT_comp_dir */
1496 comp_dir = getpwd ();
1497 len = strlen (comp_dir) + 1;
1498 p = frag_more (len);
1499 memcpy (p, comp_dir, len);
1500
1501 /* DW_AT_producer */
1502 sprintf (producer, "GNU AS %s", VERSION);
1503 len = strlen (producer) + 1;
1504 p = frag_more (len);
1505 memcpy (p, producer, len);
1506
1507 /* DW_AT_language. Yes, this is probably not really MIPS, but the
1508 dwarf2 draft has no standard code for assembler. */
1509 out_two (DW_LANG_Mips_Assembler);
1510
1511 symbol_set_value_now (info_end);
1512 }
1513
1514 /* Finish the dwarf2 debug sections. We emit .debug.line if there
1515 were any .file/.loc directives, or --gdwarf2 was given, or if the
1516 file has a non-empty .debug_info section. If we emit .debug_line,
1517 and the .debug_info section is empty, we also emit .debug_info,
1518 .debug_aranges and .debug_abbrev. ALL_SEGS will be non-null if
1519 there were any .file/.loc directives, or --gdwarf2 was given and
1520 there were any located instructions emitted. */
1521
1522 void
1523 dwarf2_finish (void)
1524 {
1525 segT line_seg;
1526 struct line_seg *s;
1527 segT info_seg;
1528 int emit_other_sections = 0;
1529
1530 info_seg = bfd_get_section_by_name (stdoutput, ".debug_info");
1531 emit_other_sections = info_seg == NULL || !seg_not_empty_p (info_seg);
1532
1533 if (!all_segs && emit_other_sections)
1534 /* There is no line information and no non-empty .debug_info
1535 section. */
1536 return;
1537
1538 /* Calculate the size of an address for the target machine. */
1539 sizeof_address = DWARF2_ADDR_SIZE (stdoutput);
1540
1541 /* Create and switch to the line number section. */
1542 line_seg = subseg_new (".debug_line", 0);
1543 bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY | SEC_DEBUGGING);
1544
1545 /* For each subsection, chain the debug entries together. */
1546 for (s = all_segs; s; s = s->next)
1547 {
1548 struct line_subseg *ss = s->head;
1549 struct line_entry **ptail = ss->ptail;
1550
1551 while ((ss = ss->next) != NULL)
1552 {
1553 *ptail = ss->head;
1554 ptail = ss->ptail;
1555 }
1556 }
1557
1558 out_debug_line (line_seg);
1559
1560 /* If this is assembler generated line info, and there is no
1561 debug_info already, we need .debug_info and .debug_abbrev
1562 sections as well. */
1563 if (emit_other_sections)
1564 {
1565 segT abbrev_seg;
1566 segT aranges_seg;
1567
1568 assert (all_segs);
1569
1570 info_seg = subseg_new (".debug_info", 0);
1571 abbrev_seg = subseg_new (".debug_abbrev", 0);
1572 aranges_seg = subseg_new (".debug_aranges", 0);
1573
1574 bfd_set_section_flags (stdoutput, info_seg,
1575 SEC_READONLY | SEC_DEBUGGING);
1576 bfd_set_section_flags (stdoutput, abbrev_seg,
1577 SEC_READONLY | SEC_DEBUGGING);
1578 bfd_set_section_flags (stdoutput, aranges_seg,
1579 SEC_READONLY | SEC_DEBUGGING);
1580
1581 record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
1582
1583 out_debug_aranges (aranges_seg, info_seg);
1584 out_debug_abbrev (abbrev_seg);
1585 out_debug_info (info_seg, abbrev_seg, line_seg);
1586 }
1587 }