gas TC_PARSE_CONS_EXPRESSION communication with TC_CONS_FIX_NEW
[deliverable/binutils-gdb.git] / gas / dwarf2dbg.c
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>
4
5 This file is part of GAS, the GNU Assembler.
6
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)
10 any later version.
11
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.
16
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
20 02110-1301, USA. */
21
22 /* Logical line numbers can be controlled by the compiler via the
23 following directives:
24
25 .file FILENO "file.c"
26 .loc FILENO LINENO [COLUMN] [basic_block] [prologue_end] \
27 [epilogue_begin] [is_stmt VALUE] [isa VALUE] \
28 [discriminator 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(SEC) 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 #ifndef DWARF2_FILE_NAME
80 #define DWARF2_FILE_NAME(FILENAME, DIRNAME) FILENAME
81 #endif
82
83 #ifndef DWARF2_FILE_TIME_NAME
84 #define DWARF2_FILE_TIME_NAME(FILENAME,DIRNAME) 0
85 #endif
86
87 #ifndef DWARF2_FILE_SIZE_NAME
88 #define DWARF2_FILE_SIZE_NAME(FILENAME,DIRNAME) 0
89 #endif
90
91 #ifndef DWARF2_VERSION
92 #define DWARF2_VERSION 2
93 #endif
94
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
98 #endif
99
100 /* This implementation output version 2 .debug_line information. */
101 #ifndef DWARF2_LINE_VERSION
102 #define DWARF2_LINE_VERSION 2
103 #endif
104
105 #include "subsegs.h"
106
107 #include "dwarf2.h"
108
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"). */
113 #define DL_PROLOG 0
114 #define DL_FILES 1
115 #define DL_BODY 2
116
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
122 #endif
123
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
127 out_debug_line(). */
128 #define DWARF2_LINE_OPCODE_BASE 13
129
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
134 #endif
135
136 /* Range of line offsets in a special line info. opcode. */
137 #ifndef DWARF2_LINE_RANGE
138 # define DWARF2_LINE_RANGE 14
139 #endif
140
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
145 #endif
146
147 /* Flag that indicates the initial value of the is_stmt_start flag. */
148 #define DWARF2_LINE_DEFAULT_IS_STMT 1
149
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)
153
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)
157
158 /* The maximum address skip amount that can be encoded with a special op. */
159 #define MAX_SPECIAL_ADDR_DELTA SPECIAL_ADDR(255)
160
161 #ifndef TC_PARSE_CONS_RETURN_NONE
162 #define TC_PARSE_CONS_RETURN_NONE BFD_RELOC_NONE
163 #endif
164
165 struct line_entry {
166 struct line_entry *next;
167 symbolS *label;
168 struct dwarf2_line_info loc;
169 };
170
171 struct line_subseg {
172 struct line_subseg *next;
173 subsegT subseg;
174 struct line_entry *head;
175 struct line_entry **ptail;
176 struct line_entry **pmove_tail;
177 };
178
179 struct line_seg {
180 struct line_seg *next;
181 segT seg;
182 struct line_subseg *head;
183 symbolS *text_start;
184 symbolS *text_end;
185 };
186
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;
193
194 struct file_entry {
195 const char *filename;
196 unsigned int dir;
197 };
198
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;
203
204 /* Table of directories used by .debug_line. */
205 static char **dirs;
206 static unsigned int dirs_in_use;
207 static unsigned int dirs_allocated;
208
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;
212
213 /* TRUE when we're supposed to set the basic block mark whenever a
214 label is seen. */
215 bfd_boolean dwarf2_loc_mark_labels;
216
217 /* Current location as indicated by the most recent .loc directive. */
218 static struct dwarf2_line_info current = {
219 1, 1, 0, 0,
220 DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0,
221 0
222 };
223
224 /* The size of an address on the target. */
225 static unsigned int sizeof_address;
226 \f
227 static unsigned int get_filenum (const char *, unsigned int);
228
229 #ifndef TC_DWARF2_EMIT_OFFSET
230 #define TC_DWARF2_EMIT_OFFSET generic_dwarf2_emit_offset
231
232 /* Create an offset to .dwarf2_*. */
233
234 static void
235 generic_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
236 {
237 expressionS exp;
238
239 exp.X_op = O_symbol;
240 exp.X_add_symbol = symbol;
241 exp.X_add_number = 0;
242 emit_expr (&exp, size);
243 }
244 #endif
245
246 /* Find or create (if CREATE_P) an entry for SEG+SUBSEG in ALL_SEGS. */
247
248 static struct line_subseg *
249 get_line_subseg (segT seg, subsegT subseg, bfd_boolean create_p)
250 {
251 static segT last_seg;
252 static subsegT last_subseg;
253 static struct line_subseg *last_line_subseg;
254
255 struct line_seg *s;
256 struct line_subseg **pss, *lss;
257
258 if (seg == last_seg && subseg == last_subseg)
259 return last_line_subseg;
260
261 s = (struct line_seg *) hash_find (all_segs_hash, seg->name);
262 if (s == NULL)
263 {
264 if (!create_p)
265 return NULL;
266
267 s = (struct line_seg *) xmalloc (sizeof (*s));
268 s->next = NULL;
269 s->seg = seg;
270 s->head = NULL;
271 *last_seg_ptr = s;
272 last_seg_ptr = &s->next;
273 hash_insert (all_segs_hash, seg->name, s);
274 }
275 gas_assert (seg == s->seg);
276
277 for (pss = &s->head; (lss = *pss) != NULL ; pss = &lss->next)
278 {
279 if (lss->subseg == subseg)
280 goto found_subseg;
281 if (lss->subseg > subseg)
282 break;
283 }
284
285 lss = (struct line_subseg *) xmalloc (sizeof (*lss));
286 lss->next = *pss;
287 lss->subseg = subseg;
288 lss->head = NULL;
289 lss->ptail = &lss->head;
290 lss->pmove_tail = &lss->head;
291 *pss = lss;
292
293 found_subseg:
294 last_seg = seg;
295 last_subseg = subseg;
296 last_line_subseg = lss;
297
298 return lss;
299 }
300
301 /* Record an entry for LOC occurring at LABEL. */
302
303 static void
304 dwarf2_gen_line_info_1 (symbolS *label, struct dwarf2_line_info *loc)
305 {
306 struct line_subseg *lss;
307 struct line_entry *e;
308
309 e = (struct line_entry *) xmalloc (sizeof (*e));
310 e->next = NULL;
311 e->label = label;
312 e->loc = *loc;
313
314 lss = get_line_subseg (now_seg, now_subseg, TRUE);
315 *lss->ptail = e;
316 lss->ptail = &e->next;
317 }
318
319 /* Record an entry for LOC occurring at OFS within the current fragment. */
320
321 void
322 dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc)
323 {
324 static unsigned int line = -1;
325 static unsigned int filenum = -1;
326
327 symbolS *sym;
328
329 /* Early out for as-yet incomplete location information. */
330 if (loc->filenum == 0 || loc->line == 0)
331 return;
332
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)
339 return;
340
341 line = loc->line;
342 filenum = loc->filenum;
343
344 if (linkrelax)
345 {
346 char name[120];
347
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);
352 }
353 else
354 sym = symbol_temp_new (now_seg, ofs, frag_now);
355 dwarf2_gen_line_info_1 (sym, loc);
356 }
357
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
361 returned. */
362
363 void
364 dwarf2_where (struct dwarf2_line_info *line)
365 {
366 if (debug_type == DEBUG_DWARF2)
367 {
368 char *filename;
369 as_where (&filename, &line->line);
370 line->filenum = get_filenum (filename, 0);
371 line->column = 0;
372 line->flags = DWARF2_FLAG_IS_STMT;
373 line->isa = current.isa;
374 line->discriminator = current.discriminator;
375 }
376 else
377 *line = current;
378 }
379
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. */
382
383 void
384 dwarf2_set_isa (unsigned int isa)
385 {
386 current.isa = isa;
387 }
388
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. */
393
394 void
395 dwarf2_emit_insn (int size)
396 {
397 struct dwarf2_line_info loc;
398
399 if (!dwarf2_loc_directive_seen && debug_type != DEBUG_DWARF2)
400 return;
401
402 dwarf2_where (&loc);
403
404 dwarf2_gen_line_info (frag_now_fix () - size, &loc);
405 dwarf2_consume_line_info ();
406 }
407
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
410 twice. */
411
412 void
413 dwarf2_move_insn (int delta)
414 {
415 struct line_subseg *lss;
416 struct line_entry *e;
417 valueT now;
418
419 if (delta == 0)
420 return;
421
422 lss = get_line_subseg (now_seg, now_subseg, FALSE);
423 if (!lss)
424 return;
425
426 now = frag_now_fix ();
427 while ((e = *lss->pmove_tail))
428 {
429 if (S_GET_VALUE (e->label) == now)
430 S_SET_VALUE (e->label, now + delta);
431 lss->pmove_tail = &e->next;
432 }
433 }
434
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
438 it has been used. */
439
440 void
441 dwarf2_consume_line_info (void)
442 {
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;
446
447 current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK
448 | DWARF2_FLAG_PROLOGUE_END
449 | DWARF2_FLAG_EPILOGUE_BEGIN);
450 current.discriminator = 0;
451 }
452
453 /* Called for each (preferably code) label. If dwarf2_loc_mark_labels
454 is enabled, emit a basic block marker. */
455
456 void
457 dwarf2_emit_label (symbolS *label)
458 {
459 struct dwarf2_line_info loc;
460
461 if (!dwarf2_loc_mark_labels)
462 return;
463 if (S_GET_SEGMENT (label) != now_seg)
464 return;
465 if (!(bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE))
466 return;
467 if (files_in_use == 0 && debug_type != DEBUG_DWARF2)
468 return;
469
470 dwarf2_where (&loc);
471
472 loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
473
474 dwarf2_gen_line_info_1 (label, &loc);
475 dwarf2_consume_line_info ();
476 }
477
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
480 empty one. */
481
482 static unsigned int
483 get_filenum (const char *filename, unsigned int num)
484 {
485 static unsigned int last_used, last_used_dir_len;
486 const char *file;
487 size_t dir_len;
488 unsigned int i, dir;
489
490 if (num == 0 && last_used)
491 {
492 if (! files[last_used].dir
493 && filename_cmp (filename, files[last_used].filename) == 0)
494 return last_used;
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)
501 return last_used;
502 }
503
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)
508 file = filename;
509 #else
510 if (file == filename + 1)
511 file = filename;
512 #endif
513 dir_len = file - filename;
514
515 dir = 0;
516 if (dir_len)
517 {
518 #ifndef DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
519 --dir_len;
520 #endif
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')
524 break;
525
526 if (dir >= dirs_in_use)
527 {
528 if (dir >= dirs_allocated)
529 {
530 dirs_allocated = dir + 32;
531 dirs = (char **)
532 xrealloc (dirs, (dir + 32) * sizeof (const char *));
533 }
534
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;
539 }
540 }
541
542 if (num == 0)
543 {
544 for (i = 1; i < files_in_use; ++i)
545 if (files[i].dir == dir
546 && files[i].filename
547 && filename_cmp (file, files[i].filename) == 0)
548 {
549 last_used = i;
550 last_used_dir_len = dir_len;
551 return i;
552 }
553 }
554 else
555 i = num;
556
557 if (i >= files_allocated)
558 {
559 unsigned int old = files_allocated;
560
561 files_allocated = i + 32;
562 files = (struct file_entry *)
563 xrealloc (files, (i + 32) * sizeof (struct file_entry));
564
565 memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
566 }
567
568 files[i].filename = num ? file : xstrdup (file);
569 files[i].dir = dir;
570 if (files_in_use < i + 1)
571 files_in_use = i + 1;
572 last_used = i;
573 last_used_dir_len = dir_len;
574
575 return i;
576 }
577
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
581
582 If an entry is added to the file table, return a pointer to the filename. */
583
584 char *
585 dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED)
586 {
587 offsetT num;
588 char *filename;
589 int filename_len;
590
591 /* Continue to accept a bare string and pass it off. */
592 SKIP_WHITESPACE ();
593 if (*input_line_pointer == '"')
594 {
595 s_app_file (0);
596 return NULL;
597 }
598
599 num = get_absolute_expression ();
600 filename = demand_copy_C_string (&filename_len);
601 if (filename == NULL)
602 return NULL;
603 demand_empty_rest_of_line ();
604
605 if (num < 1)
606 {
607 as_bad (_("file number less than one"));
608 return NULL;
609 }
610
611 /* A .file directive implies compiler generated debug information is
612 being supplied. Turn off gas generated debug info. */
613 debug_type = DEBUG_NONE;
614
615 if (num < (int) files_in_use && files[num].filename != 0)
616 {
617 as_bad (_("file number %ld already allocated"), (long) num);
618 return NULL;
619 }
620
621 get_filenum (filename, num);
622
623 return filename;
624 }
625
626 void
627 dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
628 {
629 offsetT filenum, line;
630
631 /* If we see two .loc directives in a row, force the first one to be
632 output now. */
633 if (dwarf2_loc_directive_seen)
634 dwarf2_emit_insn (0);
635
636 filenum = get_absolute_expression ();
637 SKIP_WHITESPACE ();
638 line = get_absolute_expression ();
639
640 if (filenum < 1)
641 {
642 as_bad (_("file number less than one"));
643 return;
644 }
645 if (filenum >= (int) files_in_use || files[filenum].filename == 0)
646 {
647 as_bad (_("unassigned file number %ld"), (long) filenum);
648 return;
649 }
650
651 current.filenum = filenum;
652 current.line = line;
653 current.discriminator = 0;
654
655 #ifndef NO_LISTING
656 if (listing)
657 {
658 if (files[filenum].dir)
659 {
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);
663
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);
669 }
670 else
671 listing_source_file (files[filenum].filename);
672 listing_source_line (line);
673 }
674 #endif
675
676 SKIP_WHITESPACE ();
677 if (ISDIGIT (*input_line_pointer))
678 {
679 current.column = get_absolute_expression ();
680 SKIP_WHITESPACE ();
681 }
682
683 while (ISALPHA (*input_line_pointer))
684 {
685 char *p, c;
686 offsetT value;
687
688 p = input_line_pointer;
689 c = get_symbol_end ();
690
691 if (strcmp (p, "basic_block") == 0)
692 {
693 current.flags |= DWARF2_FLAG_BASIC_BLOCK;
694 *input_line_pointer = c;
695 }
696 else if (strcmp (p, "prologue_end") == 0)
697 {
698 current.flags |= DWARF2_FLAG_PROLOGUE_END;
699 *input_line_pointer = c;
700 }
701 else if (strcmp (p, "epilogue_begin") == 0)
702 {
703 current.flags |= DWARF2_FLAG_EPILOGUE_BEGIN;
704 *input_line_pointer = c;
705 }
706 else if (strcmp (p, "is_stmt") == 0)
707 {
708 *input_line_pointer = c;
709 value = get_absolute_expression ();
710 if (value == 0)
711 current.flags &= ~DWARF2_FLAG_IS_STMT;
712 else if (value == 1)
713 current.flags |= DWARF2_FLAG_IS_STMT;
714 else
715 {
716 as_bad (_("is_stmt value not 0 or 1"));
717 return;
718 }
719 }
720 else if (strcmp (p, "isa") == 0)
721 {
722 *input_line_pointer = c;
723 value = get_absolute_expression ();
724 if (value >= 0)
725 current.isa = value;
726 else
727 {
728 as_bad (_("isa number less than zero"));
729 return;
730 }
731 }
732 else if (strcmp (p, "discriminator") == 0)
733 {
734 *input_line_pointer = c;
735 value = get_absolute_expression ();
736 if (value >= 0)
737 current.discriminator = value;
738 else
739 {
740 as_bad (_("discriminator less than zero"));
741 return;
742 }
743 }
744 else
745 {
746 as_bad (_("unknown .loc sub-directive `%s'"), p);
747 *input_line_pointer = c;
748 return;
749 }
750
751 SKIP_WHITESPACE ();
752 }
753
754 demand_empty_rest_of_line ();
755 dwarf2_loc_directive_seen = TRUE;
756 debug_type = DEBUG_NONE;
757 }
758
759 void
760 dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED)
761 {
762 offsetT value = get_absolute_expression ();
763
764 if (value != 0 && value != 1)
765 {
766 as_bad (_("expected 0 or 1"));
767 ignore_rest_of_line ();
768 }
769 else
770 {
771 dwarf2_loc_mark_labels = value != 0;
772 demand_empty_rest_of_line ();
773 }
774 }
775 \f
776 static struct frag *
777 first_frag_for_seg (segT seg)
778 {
779 return seg_info (seg)->frchainP->frch_root;
780 }
781
782 static struct frag *
783 last_frag_for_seg (segT seg)
784 {
785 frchainS *f = seg_info (seg)->frchainP;
786
787 while (f->frch_next != NULL)
788 f = f->frch_next;
789
790 return f->frch_last;
791 }
792 \f
793 /* Emit a single byte into the current segment. */
794
795 static inline void
796 out_byte (int byte)
797 {
798 FRAG_APPEND_1_CHAR (byte);
799 }
800
801 /* Emit a statement program opcode into the current segment. */
802
803 static inline void
804 out_opcode (int opc)
805 {
806 out_byte (opc);
807 }
808
809 /* Emit a two-byte word into the current segment. */
810
811 static inline void
812 out_two (int data)
813 {
814 md_number_to_chars (frag_more (2), data, 2);
815 }
816
817 /* Emit a four byte word into the current segment. */
818
819 static inline void
820 out_four (int data)
821 {
822 md_number_to_chars (frag_more (4), data, 4);
823 }
824
825 /* Emit an unsigned "little-endian base 128" number. */
826
827 static void
828 out_uleb128 (addressT value)
829 {
830 output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
831 }
832
833 /* Emit a signed "little-endian base 128" number. */
834
835 static void
836 out_leb128 (addressT value)
837 {
838 output_leb128 (frag_more (sizeof_leb128 (value, 1)), value, 1);
839 }
840
841 /* Emit a tuple for .debug_abbrev. */
842
843 static inline void
844 out_abbrev (int name, int form)
845 {
846 out_uleb128 (name);
847 out_uleb128 (form);
848 }
849
850 /* Get the size of a fragment. */
851
852 static offsetT
853 get_frag_fix (fragS *frag, segT seg)
854 {
855 frchainS *fr;
856
857 if (frag->fr_next)
858 return frag->fr_fix;
859
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;
866
867 abort ();
868 }
869
870 /* Set an absolute address (may result in a relocation entry). */
871
872 static void
873 out_set_addr (symbolS *sym)
874 {
875 expressionS exp;
876
877 out_opcode (DW_LNS_extended_op);
878 out_uleb128 (sizeof_address + 1);
879
880 out_opcode (DW_LNE_set_address);
881 exp.X_op = O_symbol;
882 exp.X_add_symbol = sym;
883 exp.X_add_number = 0;
884 emit_expr (&exp, sizeof_address);
885 }
886
887 static void scale_addr_delta (addressT *);
888
889 static void
890 scale_addr_delta (addressT *addr_delta)
891 {
892 static int printed_this = 0;
893 if (DWARF2_LINE_MIN_INSN_LENGTH > 1)
894 {
895 if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0 && !printed_this)
896 {
897 as_bad("unaligned opcodes detected in executable segment");
898 printed_this = 1;
899 }
900 *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
901 }
902 }
903
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.
906
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. */
910
911 static int
912 size_inc_line_addr (int line_delta, addressT addr_delta)
913 {
914 unsigned int tmp, opcode;
915 int len = 0;
916
917 /* Scale the address delta by the minimum instruction length. */
918 scale_addr_delta (&addr_delta);
919
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)
924 {
925 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
926 len = 1;
927 else
928 len = 1 + sizeof_leb128 (addr_delta, 0);
929 return len + 3;
930 }
931
932 /* Bias the line delta by the base. */
933 tmp = line_delta - DWARF2_LINE_BASE;
934
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)
938 {
939 len = 1 + sizeof_leb128 (line_delta, 1);
940 line_delta = 0;
941 tmp = 0 - DWARF2_LINE_BASE;
942 }
943
944 /* Bias the opcode by the special opcode base. */
945 tmp += DWARF2_LINE_OPCODE_BASE;
946
947 /* Avoid overflow when addr_delta is large. */
948 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
949 {
950 /* Try using a special opcode. */
951 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
952 if (opcode <= 255)
953 return len + 1;
954
955 /* Try using DW_LNS_const_add_pc followed by special op. */
956 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
957 if (opcode <= 255)
958 return len + 2;
959 }
960
961 /* Otherwise use DW_LNS_advance_pc. */
962 len += 1 + sizeof_leb128 (addr_delta, 0);
963
964 /* DW_LNS_copy or special opcode. */
965 len += 1;
966
967 return len;
968 }
969
970 static void
971 emit_inc_line_addr (int line_delta, addressT addr_delta, char *p, int len)
972 {
973 unsigned int tmp, opcode;
974 int need_copy = 0;
975 char *end = p + len;
976
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);
980
981 /* Scale the address delta by the minimum instruction length. */
982 scale_addr_delta (&addr_delta);
983
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)
988 {
989 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
990 *p++ = DW_LNS_const_add_pc;
991 else
992 {
993 *p++ = DW_LNS_advance_pc;
994 p += output_leb128 (p, addr_delta, 0);
995 }
996
997 *p++ = DW_LNS_extended_op;
998 *p++ = 1;
999 *p++ = DW_LNE_end_sequence;
1000 goto done;
1001 }
1002
1003 /* Bias the line delta by the base. */
1004 tmp = line_delta - DWARF2_LINE_BASE;
1005
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)
1009 {
1010 *p++ = DW_LNS_advance_line;
1011 p += output_leb128 (p, line_delta, 1);
1012
1013 line_delta = 0;
1014 tmp = 0 - DWARF2_LINE_BASE;
1015 need_copy = 1;
1016 }
1017
1018 /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
1019 special opcode. */
1020 if (line_delta == 0 && addr_delta == 0)
1021 {
1022 *p++ = DW_LNS_copy;
1023 goto done;
1024 }
1025
1026 /* Bias the opcode by the special opcode base. */
1027 tmp += DWARF2_LINE_OPCODE_BASE;
1028
1029 /* Avoid overflow when addr_delta is large. */
1030 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
1031 {
1032 /* Try using a special opcode. */
1033 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
1034 if (opcode <= 255)
1035 {
1036 *p++ = opcode;
1037 goto done;
1038 }
1039
1040 /* Try using DW_LNS_const_add_pc followed by special op. */
1041 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
1042 if (opcode <= 255)
1043 {
1044 *p++ = DW_LNS_const_add_pc;
1045 *p++ = opcode;
1046 goto done;
1047 }
1048 }
1049
1050 /* Otherwise use DW_LNS_advance_pc. */
1051 *p++ = DW_LNS_advance_pc;
1052 p += output_leb128 (p, addr_delta, 0);
1053
1054 if (need_copy)
1055 *p++ = DW_LNS_copy;
1056 else
1057 *p++ = tmp;
1058
1059 done:
1060 gas_assert (p == end);
1061 }
1062
1063 /* Handy routine to combine calls to the above two routines. */
1064
1065 static void
1066 out_inc_line_addr (int line_delta, addressT addr_delta)
1067 {
1068 int len = size_inc_line_addr (line_delta, addr_delta);
1069 emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
1070 }
1071
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
1076 kept in sync. */
1077 #define ADDR_DELTA_LIMIT 50000
1078
1079 static int
1080 size_fixed_inc_line_addr (int line_delta, addressT addr_delta)
1081 {
1082 int len = 0;
1083
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);
1087
1088 if (addr_delta > ADDR_DELTA_LIMIT)
1089 {
1090 /* DW_LNS_extended_op */
1091 len += 1 + sizeof_leb128 (sizeof_address + 1, 0);
1092 /* DW_LNE_set_address */
1093 len += 1 + sizeof_address;
1094 }
1095 else
1096 /* DW_LNS_fixed_advance_pc */
1097 len += 3;
1098
1099 if (line_delta == INT_MAX)
1100 /* DW_LNS_extended_op + DW_LNE_end_sequence */
1101 len += 3;
1102 else
1103 /* DW_LNS_copy */
1104 len += 1;
1105
1106 return len;
1107 }
1108
1109 static void
1110 emit_fixed_inc_line_addr (int line_delta, addressT addr_delta, fragS *frag,
1111 char *p, int len)
1112 {
1113 expressionS *pexp;
1114 char *end = p + len;
1115
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);
1119
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));
1122
1123 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1124 if (line_delta != INT_MAX)
1125 {
1126 *p++ = DW_LNS_advance_line;
1127 p += output_leb128 (p, line_delta, 1);
1128 }
1129
1130 pexp = symbol_get_value_expression (frag->fr_symbol);
1131
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)
1138 {
1139 symbolS *to_sym;
1140 expressionS exp;
1141
1142 gas_assert (pexp->X_op == O_subtract);
1143 to_sym = pexp->X_add_symbol;
1144
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;
1153 }
1154 else
1155 {
1156 *p++ = DW_LNS_fixed_advance_pc;
1157 emit_expr_fix (pexp, 2, frag, p, TC_PARSE_CONS_RETURN_NONE);
1158 p += 2;
1159 }
1160
1161 if (line_delta == INT_MAX)
1162 {
1163 *p++ = DW_LNS_extended_op;
1164 *p++ = 1;
1165 *p++ = DW_LNE_end_sequence;
1166 }
1167 else
1168 *p++ = DW_LNS_copy;
1169
1170 gas_assert (p == end);
1171 }
1172
1173 /* Generate a variant frag that we can use to relax address/line
1174 increments between fragments of the target segment. */
1175
1176 static void
1177 relax_inc_line_addr (int line_delta, symbolS *to_sym, symbolS *from_sym)
1178 {
1179 expressionS exp;
1180 int max_chars;
1181
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;
1186
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);
1192 else
1193 max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
1194
1195 frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
1196 make_expr_symbol (&exp), line_delta, NULL);
1197 }
1198
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. */
1202
1203 int
1204 dwarf2dbg_estimate_size_before_relax (fragS *frag)
1205 {
1206 offsetT addr_delta;
1207 int size;
1208
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);
1212 else
1213 size = size_inc_line_addr (frag->fr_offset, addr_delta);
1214
1215 frag->fr_subtype = size;
1216
1217 return size;
1218 }
1219
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. */
1223
1224 int
1225 dwarf2dbg_relax_frag (fragS *frag)
1226 {
1227 int old_size, new_size;
1228
1229 old_size = frag->fr_subtype;
1230 new_size = dwarf2dbg_estimate_size_before_relax (frag);
1231
1232 return new_size - old_size;
1233 }
1234
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. */
1238
1239 void
1240 dwarf2dbg_convert_frag (fragS *frag)
1241 {
1242 offsetT addr_diff;
1243
1244 if (DWARF2_USE_FIXED_ADVANCE_PC)
1245 {
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;
1255
1256 finalize_syms = 0;
1257 addr_diff = resolve_symbol_value (frag->fr_symbol);
1258 finalize_syms = saved_finalize_syms;
1259 }
1260 else
1261 addr_diff = resolve_symbol_value (frag->fr_symbol);
1262
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);
1267
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,
1271 frag->fr_subtype);
1272 else
1273 emit_inc_line_addr (frag->fr_offset, addr_diff,
1274 frag->fr_literal + frag->fr_fix, frag->fr_subtype);
1275
1276 frag->fr_fix += frag->fr_subtype;
1277 frag->fr_type = rs_fill;
1278 frag->fr_var = 0;
1279 frag->fr_offset = 0;
1280 }
1281
1282 /* Generate .debug_line content for the chain of line number entries
1283 beginning at E, for segment SEG. */
1284
1285 static void
1286 process_entries (segT seg, struct line_entry *e)
1287 {
1288 unsigned filenum = 1;
1289 unsigned line = 1;
1290 unsigned column = 0;
1291 unsigned isa = 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;
1297
1298 if (flag_dwarf_sections)
1299 {
1300 char * name;
1301 const char * sec_name;
1302
1303 /* Switch to the relevent sub-section before we start to emit
1304 the line number table.
1305
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. */
1314
1315 sec_name = bfd_get_section_name (stdoutput, seg);
1316 if (strcmp (sec_name, ".text") != 0)
1317 {
1318 unsigned int len;
1319
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);
1324 }
1325 else
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);
1330 }
1331
1332 do
1333 {
1334 int line_delta;
1335
1336 if (filenum != e->loc.filenum)
1337 {
1338 filenum = e->loc.filenum;
1339 out_opcode (DW_LNS_set_file);
1340 out_uleb128 (filenum);
1341 }
1342
1343 if (column != e->loc.column)
1344 {
1345 column = e->loc.column;
1346 out_opcode (DW_LNS_set_column);
1347 out_uleb128 (column);
1348 }
1349
1350 if (e->loc.discriminator != 0)
1351 {
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);
1356 }
1357
1358 if (isa != e->loc.isa)
1359 {
1360 isa = e->loc.isa;
1361 out_opcode (DW_LNS_set_isa);
1362 out_uleb128 (isa);
1363 }
1364
1365 if ((e->loc.flags ^ flags) & DWARF2_FLAG_IS_STMT)
1366 {
1367 flags = e->loc.flags;
1368 out_opcode (DW_LNS_negate_stmt);
1369 }
1370
1371 if (e->loc.flags & DWARF2_FLAG_BASIC_BLOCK)
1372 out_opcode (DW_LNS_set_basic_block);
1373
1374 if (e->loc.flags & DWARF2_FLAG_PROLOGUE_END)
1375 out_opcode (DW_LNS_set_prologue_end);
1376
1377 if (e->loc.flags & DWARF2_FLAG_EPILOGUE_BEGIN)
1378 out_opcode (DW_LNS_set_epilogue_begin);
1379
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;
1385 lab = e->label;
1386 frag = symbol_get_frag (lab);
1387 frag_ofs = S_GET_VALUE (lab);
1388
1389 if (last_frag == NULL)
1390 {
1391 out_set_addr (lab);
1392 out_inc_line_addr (line_delta, 0);
1393 }
1394 else if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1395 out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
1396 else
1397 relax_inc_line_addr (line_delta, lab, last_lab);
1398
1399 line = e->loc.line;
1400 last_lab = lab;
1401 last_frag = frag;
1402 last_frag_ofs = frag_ofs;
1403
1404 next = e->next;
1405 free (e);
1406 e = next;
1407 }
1408 while (e);
1409
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);
1415 else
1416 {
1417 lab = symbol_temp_new (seg, frag_ofs, frag);
1418 relax_inc_line_addr (INT_MAX, lab, last_lab);
1419 }
1420 }
1421
1422 /* Emit the directory and file tables for .debug_line. */
1423
1424 static void
1425 out_file_list (void)
1426 {
1427 size_t size;
1428 const char *dir;
1429 char *cp;
1430 unsigned int i;
1431
1432 /* Emit directory list. */
1433 for (i = 1; i < dirs_in_use; ++i)
1434 {
1435 dir = remap_debug_filename (dirs[i]);
1436 size = strlen (dir) + 1;
1437 cp = frag_more (size);
1438 memcpy (cp, dir, size);
1439 }
1440 /* Terminate it. */
1441 out_byte ('\0');
1442
1443 for (i = 1; i < files_in_use; ++i)
1444 {
1445 const char *fullfilename;
1446
1447 if (files[i].filename == NULL)
1448 {
1449 as_bad (_("unassigned file number %ld"), (long) i);
1450 /* Prevent a crash later, particularly for file 1. */
1451 files[i].filename = "";
1452 continue;
1453 }
1454
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);
1460
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] : ""));
1468 }
1469
1470 /* Terminate filename list. */
1471 out_byte (0);
1472 }
1473
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. */
1477
1478 static int
1479 out_header (asection *sec, expressionS *exp)
1480 {
1481 symbolS *start_sym;
1482 symbolS *end_sym;
1483
1484 subseg_set (sec, 0);
1485 start_sym = symbol_temp_new_now ();
1486 end_sym = symbol_temp_make ();
1487
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;
1492
1493 switch (DWARF2_FORMAT (sec))
1494 {
1495 case dwarf2_format_32bit:
1496 exp->X_add_number = -4;
1497 emit_expr (exp, 4);
1498 return 4;
1499
1500 case dwarf2_format_64bit:
1501 exp->X_add_number = -12;
1502 out_four (-1);
1503 emit_expr (exp, 8);
1504 return 8;
1505
1506 case dwarf2_format_64bit_irix:
1507 exp->X_add_number = -8;
1508 emit_expr (exp, 8);
1509 return 8;
1510 }
1511
1512 as_fatal (_("internal error: unknown dwarf2 format"));
1513 return 0;
1514 }
1515
1516 /* Emit the collected .debug_line data. */
1517
1518 static void
1519 out_debug_line (segT line_seg)
1520 {
1521 expressionS exp;
1522 symbolS *prologue_start, *prologue_end;
1523 symbolS *line_end;
1524 struct line_seg *s;
1525 int sizeof_offset;
1526
1527 sizeof_offset = out_header (line_seg, &exp);
1528 line_end = exp.X_add_symbol;
1529
1530 /* Version. */
1531 out_two (DWARF2_LINE_VERSION);
1532
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);
1542
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);
1549
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 */
1563
1564 out_file_list ();
1565
1566 symbol_set_value_now (prologue_end);
1567
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);
1572 else
1573 as_warn ("dwarf line number information for %s ignored",
1574 segment_name (s->seg));
1575
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);
1585
1586 symbol_set_value_now (line_end);
1587 }
1588
1589 static void
1590 out_debug_ranges (segT ranges_seg)
1591 {
1592 unsigned int addr_size = sizeof_address;
1593 struct line_seg *s;
1594 expressionS exp;
1595 unsigned int i;
1596
1597 subseg_set (ranges_seg, 0);
1598
1599 /* Base Address Entry. */
1600 for (i = 0; i < addr_size; i++)
1601 out_byte (0xff);
1602 for (i = 0; i < addr_size; i++)
1603 out_byte (0);
1604
1605 /* Range List Entry. */
1606 for (s = all_segs; s; s = s->next)
1607 {
1608 fragS *frag;
1609 symbolS *beg, *end;
1610
1611 frag = first_frag_for_seg (s->seg);
1612 beg = symbol_temp_new (s->seg, 0, frag);
1613 s->text_start = beg;
1614
1615 frag = last_frag_for_seg (s->seg);
1616 end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1617 s->text_end = end;
1618
1619 exp.X_op = O_symbol;
1620 exp.X_add_symbol = beg;
1621 exp.X_add_number = 0;
1622 emit_expr (&exp, addr_size);
1623
1624 exp.X_op = O_symbol;
1625 exp.X_add_symbol = end;
1626 exp.X_add_number = 0;
1627 emit_expr (&exp, addr_size);
1628 }
1629
1630 /* End of Range Entry. */
1631 for (i = 0; i < addr_size; i++)
1632 out_byte (0);
1633 for (i = 0; i < addr_size; i++)
1634 out_byte (0);
1635 }
1636
1637 /* Emit data for .debug_aranges. */
1638
1639 static void
1640 out_debug_aranges (segT aranges_seg, segT info_seg)
1641 {
1642 unsigned int addr_size = sizeof_address;
1643 struct line_seg *s;
1644 expressionS exp;
1645 symbolS *aranges_end;
1646 char *p;
1647 int sizeof_offset;
1648
1649 sizeof_offset = out_header (aranges_seg, &exp);
1650 aranges_end = exp.X_add_symbol;
1651
1652 /* Version. */
1653 out_two (DWARF2_ARANGES_VERSION);
1654
1655 /* Offset to .debug_info. */
1656 TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), sizeof_offset);
1657
1658 /* Size of an address (offset portion). */
1659 out_byte (addr_size);
1660
1661 /* Size of a segment descriptor. */
1662 out_byte (0);
1663
1664 /* Align the header. */
1665 frag_align (ffs (2 * addr_size) - 1, 0, 0);
1666
1667 for (s = all_segs; s; s = s->next)
1668 {
1669 fragS *frag;
1670 symbolS *beg, *end;
1671
1672 frag = first_frag_for_seg (s->seg);
1673 beg = symbol_temp_new (s->seg, 0, frag);
1674 s->text_start = beg;
1675
1676 frag = last_frag_for_seg (s->seg);
1677 end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1678 s->text_end = end;
1679
1680 exp.X_op = O_symbol;
1681 exp.X_add_symbol = beg;
1682 exp.X_add_number = 0;
1683 emit_expr (&exp, addr_size);
1684
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);
1690 }
1691
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);
1695
1696 symbol_set_value_now (aranges_end);
1697 }
1698
1699 /* Emit data for .debug_abbrev. Note that this must be kept in
1700 sync with out_debug_info below. */
1701
1702 static void
1703 out_debug_abbrev (segT abbrev_seg,
1704 segT info_seg ATTRIBUTE_UNUSED,
1705 segT line_seg ATTRIBUTE_UNUSED)
1706 {
1707 subseg_set (abbrev_seg, 0);
1708
1709 out_uleb128 (1);
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);
1714 else
1715 out_abbrev (DW_AT_stmt_list, DW_FORM_data8);
1716 if (all_segs->next == NULL)
1717 {
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);
1721 else
1722 out_abbrev (DW_AT_high_pc, (sizeof_address == 4
1723 ? DW_FORM_data4 : DW_FORM_data8));
1724 }
1725 else
1726 {
1727 if (DWARF2_FORMAT (info_seg) == dwarf2_format_32bit)
1728 out_abbrev (DW_AT_ranges, DW_FORM_data4);
1729 else
1730 out_abbrev (DW_AT_ranges, DW_FORM_data8);
1731 }
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);
1736 out_abbrev (0, 0);
1737
1738 /* Terminate the abbreviations for this compilation unit. */
1739 out_byte (0);
1740 }
1741
1742 /* Emit a description of this compilation unit for .debug_info. */
1743
1744 static void
1745 out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT ranges_seg)
1746 {
1747 char producer[128];
1748 const char *comp_dir;
1749 const char *dirname;
1750 expressionS exp;
1751 symbolS *info_end;
1752 char *p;
1753 int len;
1754 int sizeof_offset;
1755
1756 sizeof_offset = out_header (info_seg, &exp);
1757 info_end = exp.X_add_symbol;
1758
1759 /* DWARF version. */
1760 out_two (DWARF2_VERSION);
1761
1762 /* .debug_abbrev offset */
1763 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
1764
1765 /* Target address size. */
1766 out_byte (sizeof_address);
1767
1768 /* DW_TAG_compile_unit DIE abbrev */
1769 out_uleb128 (1);
1770
1771 /* DW_AT_stmt_list */
1772 TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg),
1773 (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit
1774 ? 4 : 8));
1775
1776 /* These two attributes are emitted if all of the code is contiguous. */
1777 if (all_segs->next == NULL)
1778 {
1779 /* DW_AT_low_pc */
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);
1784
1785 /* DW_AT_high_pc */
1786 if (DWARF2_VERSION < 4)
1787 exp.X_op = O_symbol;
1788 else
1789 {
1790 exp.X_op = O_subtract;
1791 exp.X_op_symbol = all_segs->text_start;
1792 }
1793 exp.X_add_symbol = all_segs->text_end;
1794 exp.X_add_number = 0;
1795 emit_expr (&exp, sizeof_address);
1796 }
1797 else
1798 {
1799 /* This attribute is emitted if the code is disjoint. */
1800 /* DW_AT_ranges. */
1801 TC_DWARF2_EMIT_OFFSET (section_symbol (ranges_seg), sizeof_offset);
1802 }
1803
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)
1809 abort ();
1810 if (files[1].dir)
1811 {
1812 dirname = remap_debug_filename (dirs[files[1].dir]);
1813 len = strlen (dirname);
1814 #ifdef TE_VMS
1815 /* Already has trailing slash. */
1816 p = frag_more (len);
1817 memcpy (p, dirname, len);
1818 #else
1819 p = frag_more (len + 1);
1820 memcpy (p, dirname, len);
1821 INSERT_DIR_SEPARATOR (p, len);
1822 #endif
1823 }
1824 len = strlen (files[1].filename) + 1;
1825 p = frag_more (len);
1826 memcpy (p, files[1].filename, len);
1827
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);
1833
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);
1839
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);
1843
1844 symbol_set_value_now (info_end);
1845 }
1846
1847 void
1848 dwarf2_init (void)
1849 {
1850 all_segs_hash = hash_new ();
1851 last_seg_ptr = &all_segs;
1852 }
1853
1854
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
1862 emitted. */
1863
1864 void
1865 dwarf2_finish (void)
1866 {
1867 segT line_seg;
1868 struct line_seg *s;
1869 segT info_seg;
1870 int emit_other_sections = 0;
1871 int empty_debug_line = 0;
1872
1873 info_seg = bfd_get_section_by_name (stdoutput, ".debug_info");
1874 emit_other_sections = info_seg == NULL || !seg_not_empty_p (info_seg);
1875
1876 line_seg = bfd_get_section_by_name (stdoutput, ".debug_line");
1877 empty_debug_line = line_seg == NULL || !seg_not_empty_p (line_seg);
1878
1879 /* We can't construct a new debug_line section if we already have one.
1880 Give an error. */
1881 if (all_segs && !empty_debug_line)
1882 as_fatal ("duplicate .debug_line sections");
1883
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. */
1889 return;
1890
1891 /* Calculate the size of an address for the target machine. */
1892 sizeof_address = DWARF2_ADDR_SIZE (stdoutput);
1893
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);
1897
1898 /* For each subsection, chain the debug entries together. */
1899 for (s = all_segs; s; s = s->next)
1900 {
1901 struct line_subseg *lss = s->head;
1902 struct line_entry **ptail = lss->ptail;
1903
1904 while ((lss = lss->next) != NULL)
1905 {
1906 *ptail = lss->head;
1907 ptail = lss->ptail;
1908 }
1909 }
1910
1911 out_debug_line (line_seg);
1912
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)
1917 {
1918 segT abbrev_seg;
1919 segT aranges_seg;
1920 segT ranges_seg;
1921
1922 gas_assert (all_segs);
1923
1924 info_seg = subseg_new (".debug_info", 0);
1925 abbrev_seg = subseg_new (".debug_abbrev", 0);
1926 aranges_seg = subseg_new (".debug_aranges", 0);
1927
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);
1934
1935 record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
1936
1937 if (all_segs->next == NULL)
1938 ranges_seg = NULL;
1939 else
1940 {
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);
1946 }
1947
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);
1951 }
1952 }
This page took 0.089684 seconds and 5 git commands to generate.