Add more const type qualifiers to GAS sources.
[deliverable/binutils-gdb.git] / gas / dwarf2dbg.c
1 /* dwarf2dbg.c - DWARF2 debug support
2 Copyright (C) 1999-2016 Free Software Foundation, Inc.
3 Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
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 static struct line_seg **last_seg_ptr;
190
191 struct file_entry {
192 const char *filename;
193 unsigned int dir;
194 };
195
196 /* Table of files used by .debug_line. */
197 static struct file_entry *files;
198 static unsigned int files_in_use;
199 static unsigned int files_allocated;
200
201 /* Table of directories used by .debug_line. */
202 static char **dirs;
203 static unsigned int dirs_in_use;
204 static unsigned int dirs_allocated;
205
206 /* TRUE when we've seen a .loc directive recently. Used to avoid
207 doing work when there's nothing to do. */
208 bfd_boolean dwarf2_loc_directive_seen;
209
210 /* TRUE when we're supposed to set the basic block mark whenever a
211 label is seen. */
212 bfd_boolean dwarf2_loc_mark_labels;
213
214 /* Current location as indicated by the most recent .loc directive. */
215 static struct dwarf2_line_info current = {
216 1, 1, 0, 0,
217 DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0,
218 0
219 };
220
221 /* The size of an address on the target. */
222 static unsigned int sizeof_address;
223 \f
224 static unsigned int get_filenum (const char *, unsigned int);
225
226 #ifndef TC_DWARF2_EMIT_OFFSET
227 #define TC_DWARF2_EMIT_OFFSET generic_dwarf2_emit_offset
228
229 /* Create an offset to .dwarf2_*. */
230
231 static void
232 generic_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
233 {
234 expressionS exp;
235
236 exp.X_op = O_symbol;
237 exp.X_add_symbol = symbol;
238 exp.X_add_number = 0;
239 emit_expr (&exp, size);
240 }
241 #endif
242
243 /* Find or create (if CREATE_P) an entry for SEG+SUBSEG in ALL_SEGS. */
244
245 static struct line_subseg *
246 get_line_subseg (segT seg, subsegT subseg, bfd_boolean create_p)
247 {
248 struct line_seg *s = seg_info (seg)->dwarf2_line_seg;
249 struct line_subseg **pss, *lss;
250
251 if (s == NULL)
252 {
253 if (!create_p)
254 return NULL;
255
256 s = (struct line_seg *) xmalloc (sizeof (*s));
257 s->next = NULL;
258 s->seg = seg;
259 s->head = NULL;
260 *last_seg_ptr = s;
261 last_seg_ptr = &s->next;
262 seg_info (seg)->dwarf2_line_seg = s;
263 }
264 gas_assert (seg == s->seg);
265
266 for (pss = &s->head; (lss = *pss) != NULL ; pss = &lss->next)
267 {
268 if (lss->subseg == subseg)
269 goto found_subseg;
270 if (lss->subseg > subseg)
271 break;
272 }
273
274 lss = (struct line_subseg *) xmalloc (sizeof (*lss));
275 lss->next = *pss;
276 lss->subseg = subseg;
277 lss->head = NULL;
278 lss->ptail = &lss->head;
279 lss->pmove_tail = &lss->head;
280 *pss = lss;
281
282 found_subseg:
283 return lss;
284 }
285
286 /* Record an entry for LOC occurring at LABEL. */
287
288 static void
289 dwarf2_gen_line_info_1 (symbolS *label, struct dwarf2_line_info *loc)
290 {
291 struct line_subseg *lss;
292 struct line_entry *e;
293
294 e = (struct line_entry *) xmalloc (sizeof (*e));
295 e->next = NULL;
296 e->label = label;
297 e->loc = *loc;
298
299 lss = get_line_subseg (now_seg, now_subseg, TRUE);
300 *lss->ptail = e;
301 lss->ptail = &e->next;
302 }
303
304 /* Record an entry for LOC occurring at OFS within the current fragment. */
305
306 void
307 dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc)
308 {
309 static unsigned int line = -1;
310 static unsigned int filenum = -1;
311
312 symbolS *sym;
313
314 /* Early out for as-yet incomplete location information. */
315 if (loc->filenum == 0 || loc->line == 0)
316 return;
317
318 /* Don't emit sequences of line symbols for the same line when the
319 symbols apply to assembler code. It is necessary to emit
320 duplicate line symbols when a compiler asks for them, because GDB
321 uses them to determine the end of the prologue. */
322 if (debug_type == DEBUG_DWARF2
323 && line == loc->line && filenum == loc->filenum)
324 return;
325
326 line = loc->line;
327 filenum = loc->filenum;
328
329 if (linkrelax)
330 {
331 char name[120];
332
333 /* Use a non-fake name for the line number location,
334 so that it can be referred to by relocations. */
335 sprintf (name, ".Loc.%u.%u", line, filenum);
336 sym = symbol_new (name, now_seg, ofs, frag_now);
337 }
338 else
339 sym = symbol_temp_new (now_seg, ofs, frag_now);
340 dwarf2_gen_line_info_1 (sym, loc);
341 }
342
343 /* Returns the current source information. If .file directives have
344 been encountered, the info for the corresponding source file is
345 returned. Otherwise, the info for the assembly source file is
346 returned. */
347
348 void
349 dwarf2_where (struct dwarf2_line_info *line)
350 {
351 if (debug_type == DEBUG_DWARF2)
352 {
353 const char *filename = as_where (&line->line);
354 line->filenum = get_filenum (filename, 0);
355 line->column = 0;
356 line->flags = DWARF2_FLAG_IS_STMT;
357 line->isa = current.isa;
358 line->discriminator = current.discriminator;
359 }
360 else
361 *line = current;
362 }
363
364 /* A hook to allow the target backend to inform the line number state
365 machine of isa changes when assembler debug info is enabled. */
366
367 void
368 dwarf2_set_isa (unsigned int isa)
369 {
370 current.isa = isa;
371 }
372
373 /* Called for each machine instruction, or relatively atomic group of
374 machine instructions (ie built-in macro). The instruction or group
375 is SIZE bytes in length. If dwarf2 line number generation is called
376 for, emit a line statement appropriately. */
377
378 void
379 dwarf2_emit_insn (int size)
380 {
381 struct dwarf2_line_info loc;
382
383 if (!dwarf2_loc_directive_seen && debug_type != DEBUG_DWARF2)
384 return;
385
386 dwarf2_where (&loc);
387
388 dwarf2_gen_line_info (frag_now_fix () - size, &loc);
389 dwarf2_consume_line_info ();
390 }
391
392 /* Move all previously-emitted line entries for the current position by
393 DELTA bytes. This function cannot be used to move the same entries
394 twice. */
395
396 void
397 dwarf2_move_insn (int delta)
398 {
399 struct line_subseg *lss;
400 struct line_entry *e;
401 valueT now;
402
403 if (delta == 0)
404 return;
405
406 lss = get_line_subseg (now_seg, now_subseg, FALSE);
407 if (!lss)
408 return;
409
410 now = frag_now_fix ();
411 while ((e = *lss->pmove_tail))
412 {
413 if (S_GET_VALUE (e->label) == now)
414 S_SET_VALUE (e->label, now + delta);
415 lss->pmove_tail = &e->next;
416 }
417 }
418
419 /* Called after the current line information has been either used with
420 dwarf2_gen_line_info or saved with a machine instruction for later use.
421 This resets the state of the line number information to reflect that
422 it has been used. */
423
424 void
425 dwarf2_consume_line_info (void)
426 {
427 /* Unless we generate DWARF2 debugging information for each
428 assembler line, we only emit one line symbol for one LOC. */
429 dwarf2_loc_directive_seen = FALSE;
430
431 current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK
432 | DWARF2_FLAG_PROLOGUE_END
433 | DWARF2_FLAG_EPILOGUE_BEGIN);
434 current.discriminator = 0;
435 }
436
437 /* Called for each (preferably code) label. If dwarf2_loc_mark_labels
438 is enabled, emit a basic block marker. */
439
440 void
441 dwarf2_emit_label (symbolS *label)
442 {
443 struct dwarf2_line_info loc;
444
445 if (!dwarf2_loc_mark_labels)
446 return;
447 if (S_GET_SEGMENT (label) != now_seg)
448 return;
449 if (!(bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE))
450 return;
451 if (files_in_use == 0 && debug_type != DEBUG_DWARF2)
452 return;
453
454 dwarf2_where (&loc);
455
456 loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
457
458 dwarf2_gen_line_info_1 (label, &loc);
459 dwarf2_consume_line_info ();
460 }
461
462 /* Get a .debug_line file number for FILENAME. If NUM is nonzero,
463 allocate it on that file table slot, otherwise return the first
464 empty one. */
465
466 static unsigned int
467 get_filenum (const char *filename, unsigned int num)
468 {
469 static unsigned int last_used, last_used_dir_len;
470 const char *file;
471 size_t dir_len;
472 unsigned int i, dir;
473
474 if (num == 0 && last_used)
475 {
476 if (! files[last_used].dir
477 && filename_cmp (filename, files[last_used].filename) == 0)
478 return last_used;
479 if (files[last_used].dir
480 && filename_ncmp (filename, dirs[files[last_used].dir],
481 last_used_dir_len) == 0
482 && IS_DIR_SEPARATOR (filename [last_used_dir_len])
483 && filename_cmp (filename + last_used_dir_len + 1,
484 files[last_used].filename) == 0)
485 return last_used;
486 }
487
488 file = lbasename (filename);
489 /* Don't make empty string from / or A: from A:/ . */
490 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
491 if (file <= filename + 3)
492 file = filename;
493 #else
494 if (file == filename + 1)
495 file = filename;
496 #endif
497 dir_len = file - filename;
498
499 dir = 0;
500 if (dir_len)
501 {
502 #ifndef DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
503 --dir_len;
504 #endif
505 for (dir = 1; dir < dirs_in_use; ++dir)
506 if (filename_ncmp (filename, dirs[dir], dir_len) == 0
507 && dirs[dir][dir_len] == '\0')
508 break;
509
510 if (dir >= dirs_in_use)
511 {
512 if (dir >= dirs_allocated)
513 {
514 dirs_allocated = dir + 32;
515 dirs = (char **)
516 xrealloc (dirs, (dir + 32) * sizeof (const char *));
517 }
518
519 dirs[dir] = (char *) xmalloc (dir_len + 1);
520 memcpy (dirs[dir], filename, dir_len);
521 dirs[dir][dir_len] = '\0';
522 dirs_in_use = dir + 1;
523 }
524 }
525
526 if (num == 0)
527 {
528 for (i = 1; i < files_in_use; ++i)
529 if (files[i].dir == dir
530 && files[i].filename
531 && filename_cmp (file, files[i].filename) == 0)
532 {
533 last_used = i;
534 last_used_dir_len = dir_len;
535 return i;
536 }
537 }
538 else
539 i = num;
540
541 if (i >= files_allocated)
542 {
543 unsigned int old = files_allocated;
544
545 files_allocated = i + 32;
546 files = (struct file_entry *)
547 xrealloc (files, (i + 32) * sizeof (struct file_entry));
548
549 memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
550 }
551
552 files[i].filename = num ? file : xstrdup (file);
553 files[i].dir = dir;
554 if (files_in_use < i + 1)
555 files_in_use = i + 1;
556 last_used = i;
557 last_used_dir_len = dir_len;
558
559 return i;
560 }
561
562 /* Handle two forms of .file directive:
563 - Pass .file "source.c" to s_app_file
564 - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
565
566 If an entry is added to the file table, return a pointer to the filename. */
567
568 char *
569 dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED)
570 {
571 offsetT num;
572 char *filename;
573 int filename_len;
574
575 /* Continue to accept a bare string and pass it off. */
576 SKIP_WHITESPACE ();
577 if (*input_line_pointer == '"')
578 {
579 s_app_file (0);
580 return NULL;
581 }
582
583 num = get_absolute_expression ();
584 filename = demand_copy_C_string (&filename_len);
585 if (filename == NULL)
586 return NULL;
587 demand_empty_rest_of_line ();
588
589 if (num < 1)
590 {
591 as_bad (_("file number less than one"));
592 return NULL;
593 }
594
595 /* A .file directive implies compiler generated debug information is
596 being supplied. Turn off gas generated debug info. */
597 debug_type = DEBUG_NONE;
598
599 if (num < (int) files_in_use && files[num].filename != 0)
600 {
601 as_bad (_("file number %ld already allocated"), (long) num);
602 return NULL;
603 }
604
605 get_filenum (filename, num);
606
607 return filename;
608 }
609
610 void
611 dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
612 {
613 offsetT filenum, line;
614
615 /* If we see two .loc directives in a row, force the first one to be
616 output now. */
617 if (dwarf2_loc_directive_seen)
618 dwarf2_emit_insn (0);
619
620 filenum = get_absolute_expression ();
621 SKIP_WHITESPACE ();
622 line = get_absolute_expression ();
623
624 if (filenum < 1)
625 {
626 as_bad (_("file number less than one"));
627 return;
628 }
629 if (filenum >= (int) files_in_use || files[filenum].filename == 0)
630 {
631 as_bad (_("unassigned file number %ld"), (long) filenum);
632 return;
633 }
634
635 current.filenum = filenum;
636 current.line = line;
637 current.discriminator = 0;
638
639 #ifndef NO_LISTING
640 if (listing)
641 {
642 if (files[filenum].dir)
643 {
644 size_t dir_len = strlen (dirs[files[filenum].dir]);
645 size_t file_len = strlen (files[filenum].filename);
646 char *cp = (char *) alloca (dir_len + 1 + file_len + 1);
647
648 memcpy (cp, dirs[files[filenum].dir], dir_len);
649 INSERT_DIR_SEPARATOR (cp, dir_len);
650 memcpy (cp + dir_len + 1, files[filenum].filename, file_len);
651 cp[dir_len + file_len + 1] = '\0';
652 listing_source_file (cp);
653 }
654 else
655 listing_source_file (files[filenum].filename);
656 listing_source_line (line);
657 }
658 #endif
659
660 SKIP_WHITESPACE ();
661 if (ISDIGIT (*input_line_pointer))
662 {
663 current.column = get_absolute_expression ();
664 SKIP_WHITESPACE ();
665 }
666
667 while (ISALPHA (*input_line_pointer))
668 {
669 char *p, c;
670 offsetT value;
671
672 c = get_symbol_name (& p);
673
674 if (strcmp (p, "basic_block") == 0)
675 {
676 current.flags |= DWARF2_FLAG_BASIC_BLOCK;
677 *input_line_pointer = c;
678 }
679 else if (strcmp (p, "prologue_end") == 0)
680 {
681 current.flags |= DWARF2_FLAG_PROLOGUE_END;
682 *input_line_pointer = c;
683 }
684 else if (strcmp (p, "epilogue_begin") == 0)
685 {
686 current.flags |= DWARF2_FLAG_EPILOGUE_BEGIN;
687 *input_line_pointer = c;
688 }
689 else if (strcmp (p, "is_stmt") == 0)
690 {
691 (void) restore_line_pointer (c);
692 value = get_absolute_expression ();
693 if (value == 0)
694 current.flags &= ~DWARF2_FLAG_IS_STMT;
695 else if (value == 1)
696 current.flags |= DWARF2_FLAG_IS_STMT;
697 else
698 {
699 as_bad (_("is_stmt value not 0 or 1"));
700 return;
701 }
702 }
703 else if (strcmp (p, "isa") == 0)
704 {
705 (void) restore_line_pointer (c);
706 value = get_absolute_expression ();
707 if (value >= 0)
708 current.isa = value;
709 else
710 {
711 as_bad (_("isa number less than zero"));
712 return;
713 }
714 }
715 else if (strcmp (p, "discriminator") == 0)
716 {
717 (void) restore_line_pointer (c);
718 value = get_absolute_expression ();
719 if (value >= 0)
720 current.discriminator = value;
721 else
722 {
723 as_bad (_("discriminator less than zero"));
724 return;
725 }
726 }
727 else
728 {
729 as_bad (_("unknown .loc sub-directive `%s'"), p);
730 (void) restore_line_pointer (c);
731 return;
732 }
733
734 SKIP_WHITESPACE_AFTER_NAME ();
735 }
736
737 demand_empty_rest_of_line ();
738 dwarf2_loc_directive_seen = TRUE;
739 debug_type = DEBUG_NONE;
740 }
741
742 void
743 dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED)
744 {
745 offsetT value = get_absolute_expression ();
746
747 if (value != 0 && value != 1)
748 {
749 as_bad (_("expected 0 or 1"));
750 ignore_rest_of_line ();
751 }
752 else
753 {
754 dwarf2_loc_mark_labels = value != 0;
755 demand_empty_rest_of_line ();
756 }
757 }
758 \f
759 static struct frag *
760 first_frag_for_seg (segT seg)
761 {
762 return seg_info (seg)->frchainP->frch_root;
763 }
764
765 static struct frag *
766 last_frag_for_seg (segT seg)
767 {
768 frchainS *f = seg_info (seg)->frchainP;
769
770 while (f->frch_next != NULL)
771 f = f->frch_next;
772
773 return f->frch_last;
774 }
775 \f
776 /* Emit a single byte into the current segment. */
777
778 static inline void
779 out_byte (int byte)
780 {
781 FRAG_APPEND_1_CHAR (byte);
782 }
783
784 /* Emit a statement program opcode into the current segment. */
785
786 static inline void
787 out_opcode (int opc)
788 {
789 out_byte (opc);
790 }
791
792 /* Emit a two-byte word into the current segment. */
793
794 static inline void
795 out_two (int data)
796 {
797 md_number_to_chars (frag_more (2), data, 2);
798 }
799
800 /* Emit a four byte word into the current segment. */
801
802 static inline void
803 out_four (int data)
804 {
805 md_number_to_chars (frag_more (4), data, 4);
806 }
807
808 /* Emit an unsigned "little-endian base 128" number. */
809
810 static void
811 out_uleb128 (addressT value)
812 {
813 output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
814 }
815
816 /* Emit a signed "little-endian base 128" number. */
817
818 static void
819 out_leb128 (addressT value)
820 {
821 output_leb128 (frag_more (sizeof_leb128 (value, 1)), value, 1);
822 }
823
824 /* Emit a tuple for .debug_abbrev. */
825
826 static inline void
827 out_abbrev (int name, int form)
828 {
829 out_uleb128 (name);
830 out_uleb128 (form);
831 }
832
833 /* Get the size of a fragment. */
834
835 static offsetT
836 get_frag_fix (fragS *frag, segT seg)
837 {
838 frchainS *fr;
839
840 if (frag->fr_next)
841 return frag->fr_fix;
842
843 /* If a fragment is the last in the chain, special measures must be
844 taken to find its size before relaxation, since it may be pending
845 on some subsegment chain. */
846 for (fr = seg_info (seg)->frchainP; fr; fr = fr->frch_next)
847 if (fr->frch_last == frag)
848 return (char *) obstack_next_free (&fr->frch_obstack) - frag->fr_literal;
849
850 abort ();
851 }
852
853 /* Set an absolute address (may result in a relocation entry). */
854
855 static void
856 out_set_addr (symbolS *sym)
857 {
858 expressionS exp;
859
860 out_opcode (DW_LNS_extended_op);
861 out_uleb128 (sizeof_address + 1);
862
863 out_opcode (DW_LNE_set_address);
864 exp.X_op = O_symbol;
865 exp.X_add_symbol = sym;
866 exp.X_add_number = 0;
867 emit_expr (&exp, sizeof_address);
868 }
869
870 static void scale_addr_delta (addressT *);
871
872 static void
873 scale_addr_delta (addressT *addr_delta)
874 {
875 static int printed_this = 0;
876 if (DWARF2_LINE_MIN_INSN_LENGTH > 1)
877 {
878 if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0 && !printed_this)
879 {
880 as_bad("unaligned opcodes detected in executable segment");
881 printed_this = 1;
882 }
883 *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
884 }
885 }
886
887 /* Encode a pair of line and address skips as efficiently as possible.
888 Note that the line skip is signed, whereas the address skip is unsigned.
889
890 The following two routines *must* be kept in sync. This is
891 enforced by making emit_inc_line_addr abort if we do not emit
892 exactly the expected number of bytes. */
893
894 static int
895 size_inc_line_addr (int line_delta, addressT addr_delta)
896 {
897 unsigned int tmp, opcode;
898 int len = 0;
899
900 /* Scale the address delta by the minimum instruction length. */
901 scale_addr_delta (&addr_delta);
902
903 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
904 We cannot use special opcodes here, since we want the end_sequence
905 to emit the matrix entry. */
906 if (line_delta == INT_MAX)
907 {
908 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
909 len = 1;
910 else
911 len = 1 + sizeof_leb128 (addr_delta, 0);
912 return len + 3;
913 }
914
915 /* Bias the line delta by the base. */
916 tmp = line_delta - DWARF2_LINE_BASE;
917
918 /* If the line increment is out of range of a special opcode, we
919 must encode it with DW_LNS_advance_line. */
920 if (tmp >= DWARF2_LINE_RANGE)
921 {
922 len = 1 + sizeof_leb128 (line_delta, 1);
923 line_delta = 0;
924 tmp = 0 - DWARF2_LINE_BASE;
925 }
926
927 /* Bias the opcode by the special opcode base. */
928 tmp += DWARF2_LINE_OPCODE_BASE;
929
930 /* Avoid overflow when addr_delta is large. */
931 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
932 {
933 /* Try using a special opcode. */
934 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
935 if (opcode <= 255)
936 return len + 1;
937
938 /* Try using DW_LNS_const_add_pc followed by special op. */
939 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
940 if (opcode <= 255)
941 return len + 2;
942 }
943
944 /* Otherwise use DW_LNS_advance_pc. */
945 len += 1 + sizeof_leb128 (addr_delta, 0);
946
947 /* DW_LNS_copy or special opcode. */
948 len += 1;
949
950 return len;
951 }
952
953 static void
954 emit_inc_line_addr (int line_delta, addressT addr_delta, char *p, int len)
955 {
956 unsigned int tmp, opcode;
957 int need_copy = 0;
958 char *end = p + len;
959
960 /* Line number sequences cannot go backward in addresses. This means
961 we've incorrectly ordered the statements in the sequence. */
962 gas_assert ((offsetT) addr_delta >= 0);
963
964 /* Scale the address delta by the minimum instruction length. */
965 scale_addr_delta (&addr_delta);
966
967 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
968 We cannot use special opcodes here, since we want the end_sequence
969 to emit the matrix entry. */
970 if (line_delta == INT_MAX)
971 {
972 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
973 *p++ = DW_LNS_const_add_pc;
974 else
975 {
976 *p++ = DW_LNS_advance_pc;
977 p += output_leb128 (p, addr_delta, 0);
978 }
979
980 *p++ = DW_LNS_extended_op;
981 *p++ = 1;
982 *p++ = DW_LNE_end_sequence;
983 goto done;
984 }
985
986 /* Bias the line delta by the base. */
987 tmp = line_delta - DWARF2_LINE_BASE;
988
989 /* If the line increment is out of range of a special opcode, we
990 must encode it with DW_LNS_advance_line. */
991 if (tmp >= DWARF2_LINE_RANGE)
992 {
993 *p++ = DW_LNS_advance_line;
994 p += output_leb128 (p, line_delta, 1);
995
996 line_delta = 0;
997 tmp = 0 - DWARF2_LINE_BASE;
998 need_copy = 1;
999 }
1000
1001 /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
1002 special opcode. */
1003 if (line_delta == 0 && addr_delta == 0)
1004 {
1005 *p++ = DW_LNS_copy;
1006 goto done;
1007 }
1008
1009 /* Bias the opcode by the special opcode base. */
1010 tmp += DWARF2_LINE_OPCODE_BASE;
1011
1012 /* Avoid overflow when addr_delta is large. */
1013 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
1014 {
1015 /* Try using a special opcode. */
1016 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
1017 if (opcode <= 255)
1018 {
1019 *p++ = opcode;
1020 goto done;
1021 }
1022
1023 /* Try using DW_LNS_const_add_pc followed by special op. */
1024 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
1025 if (opcode <= 255)
1026 {
1027 *p++ = DW_LNS_const_add_pc;
1028 *p++ = opcode;
1029 goto done;
1030 }
1031 }
1032
1033 /* Otherwise use DW_LNS_advance_pc. */
1034 *p++ = DW_LNS_advance_pc;
1035 p += output_leb128 (p, addr_delta, 0);
1036
1037 if (need_copy)
1038 *p++ = DW_LNS_copy;
1039 else
1040 *p++ = tmp;
1041
1042 done:
1043 gas_assert (p == end);
1044 }
1045
1046 /* Handy routine to combine calls to the above two routines. */
1047
1048 static void
1049 out_inc_line_addr (int line_delta, addressT addr_delta)
1050 {
1051 int len = size_inc_line_addr (line_delta, addr_delta);
1052 emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
1053 }
1054
1055 /* Write out an alternative form of line and address skips using
1056 DW_LNS_fixed_advance_pc opcodes. This uses more space than the default
1057 line and address information, but it is required if linker relaxation
1058 could change the code offsets. The following two routines *must* be
1059 kept in sync. */
1060 #define ADDR_DELTA_LIMIT 50000
1061
1062 static int
1063 size_fixed_inc_line_addr (int line_delta, addressT addr_delta)
1064 {
1065 int len = 0;
1066
1067 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1068 if (line_delta != INT_MAX)
1069 len = 1 + sizeof_leb128 (line_delta, 1);
1070
1071 if (addr_delta > ADDR_DELTA_LIMIT)
1072 {
1073 /* DW_LNS_extended_op */
1074 len += 1 + sizeof_leb128 (sizeof_address + 1, 0);
1075 /* DW_LNE_set_address */
1076 len += 1 + sizeof_address;
1077 }
1078 else
1079 /* DW_LNS_fixed_advance_pc */
1080 len += 3;
1081
1082 if (line_delta == INT_MAX)
1083 /* DW_LNS_extended_op + DW_LNE_end_sequence */
1084 len += 3;
1085 else
1086 /* DW_LNS_copy */
1087 len += 1;
1088
1089 return len;
1090 }
1091
1092 static void
1093 emit_fixed_inc_line_addr (int line_delta, addressT addr_delta, fragS *frag,
1094 char *p, int len)
1095 {
1096 expressionS *pexp;
1097 char *end = p + len;
1098
1099 /* Line number sequences cannot go backward in addresses. This means
1100 we've incorrectly ordered the statements in the sequence. */
1101 gas_assert ((offsetT) addr_delta >= 0);
1102
1103 /* Verify that we have kept in sync with size_fixed_inc_line_addr. */
1104 gas_assert (len == size_fixed_inc_line_addr (line_delta, addr_delta));
1105
1106 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1107 if (line_delta != INT_MAX)
1108 {
1109 *p++ = DW_LNS_advance_line;
1110 p += output_leb128 (p, line_delta, 1);
1111 }
1112
1113 pexp = symbol_get_value_expression (frag->fr_symbol);
1114
1115 /* The DW_LNS_fixed_advance_pc opcode has a 2-byte operand so it can
1116 advance the address by at most 64K. Linker relaxation (without
1117 which this function would not be used) could change the operand by
1118 an unknown amount. If the address increment is getting close to
1119 the limit, just reset the address. */
1120 if (addr_delta > ADDR_DELTA_LIMIT)
1121 {
1122 symbolS *to_sym;
1123 expressionS exp;
1124
1125 gas_assert (pexp->X_op == O_subtract);
1126 to_sym = pexp->X_add_symbol;
1127
1128 *p++ = DW_LNS_extended_op;
1129 p += output_leb128 (p, sizeof_address + 1, 0);
1130 *p++ = DW_LNE_set_address;
1131 exp.X_op = O_symbol;
1132 exp.X_add_symbol = to_sym;
1133 exp.X_add_number = 0;
1134 emit_expr_fix (&exp, sizeof_address, frag, p, TC_PARSE_CONS_RETURN_NONE);
1135 p += sizeof_address;
1136 }
1137 else
1138 {
1139 *p++ = DW_LNS_fixed_advance_pc;
1140 emit_expr_fix (pexp, 2, frag, p, TC_PARSE_CONS_RETURN_NONE);
1141 p += 2;
1142 }
1143
1144 if (line_delta == INT_MAX)
1145 {
1146 *p++ = DW_LNS_extended_op;
1147 *p++ = 1;
1148 *p++ = DW_LNE_end_sequence;
1149 }
1150 else
1151 *p++ = DW_LNS_copy;
1152
1153 gas_assert (p == end);
1154 }
1155
1156 /* Generate a variant frag that we can use to relax address/line
1157 increments between fragments of the target segment. */
1158
1159 static void
1160 relax_inc_line_addr (int line_delta, symbolS *to_sym, symbolS *from_sym)
1161 {
1162 expressionS exp;
1163 int max_chars;
1164
1165 exp.X_op = O_subtract;
1166 exp.X_add_symbol = to_sym;
1167 exp.X_op_symbol = from_sym;
1168 exp.X_add_number = 0;
1169
1170 /* The maximum size of the frag is the line delta with a maximum
1171 sized address delta. */
1172 if (DWARF2_USE_FIXED_ADVANCE_PC)
1173 max_chars = size_fixed_inc_line_addr (line_delta,
1174 -DWARF2_LINE_MIN_INSN_LENGTH);
1175 else
1176 max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
1177
1178 frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
1179 make_expr_symbol (&exp), line_delta, NULL);
1180 }
1181
1182 /* The function estimates the size of a rs_dwarf2dbg variant frag
1183 based on the current values of the symbols. It is called before
1184 the relaxation loop. We set fr_subtype to the expected length. */
1185
1186 int
1187 dwarf2dbg_estimate_size_before_relax (fragS *frag)
1188 {
1189 offsetT addr_delta;
1190 int size;
1191
1192 addr_delta = resolve_symbol_value (frag->fr_symbol);
1193 if (DWARF2_USE_FIXED_ADVANCE_PC)
1194 size = size_fixed_inc_line_addr (frag->fr_offset, addr_delta);
1195 else
1196 size = size_inc_line_addr (frag->fr_offset, addr_delta);
1197
1198 frag->fr_subtype = size;
1199
1200 return size;
1201 }
1202
1203 /* This function relaxes a rs_dwarf2dbg variant frag based on the
1204 current values of the symbols. fr_subtype is the current length
1205 of the frag. This returns the change in frag length. */
1206
1207 int
1208 dwarf2dbg_relax_frag (fragS *frag)
1209 {
1210 int old_size, new_size;
1211
1212 old_size = frag->fr_subtype;
1213 new_size = dwarf2dbg_estimate_size_before_relax (frag);
1214
1215 return new_size - old_size;
1216 }
1217
1218 /* This function converts a rs_dwarf2dbg variant frag into a normal
1219 fill frag. This is called after all relaxation has been done.
1220 fr_subtype will be the desired length of the frag. */
1221
1222 void
1223 dwarf2dbg_convert_frag (fragS *frag)
1224 {
1225 offsetT addr_diff;
1226
1227 if (DWARF2_USE_FIXED_ADVANCE_PC)
1228 {
1229 /* If linker relaxation is enabled then the distance bewteen the two
1230 symbols in the frag->fr_symbol expression might change. Hence we
1231 cannot rely upon the value computed by resolve_symbol_value.
1232 Instead we leave the expression unfinalized and allow
1233 emit_fixed_inc_line_addr to create a fixup (which later becomes a
1234 relocation) that will allow the linker to correctly compute the
1235 actual address difference. We have to use a fixed line advance for
1236 this as we cannot (easily) relocate leb128 encoded values. */
1237 int saved_finalize_syms = finalize_syms;
1238
1239 finalize_syms = 0;
1240 addr_diff = resolve_symbol_value (frag->fr_symbol);
1241 finalize_syms = saved_finalize_syms;
1242 }
1243 else
1244 addr_diff = resolve_symbol_value (frag->fr_symbol);
1245
1246 /* fr_var carries the max_chars that we created the fragment with.
1247 fr_subtype carries the current expected length. We must, of
1248 course, have allocated enough memory earlier. */
1249 gas_assert (frag->fr_var >= (int) frag->fr_subtype);
1250
1251 if (DWARF2_USE_FIXED_ADVANCE_PC)
1252 emit_fixed_inc_line_addr (frag->fr_offset, addr_diff, frag,
1253 frag->fr_literal + frag->fr_fix,
1254 frag->fr_subtype);
1255 else
1256 emit_inc_line_addr (frag->fr_offset, addr_diff,
1257 frag->fr_literal + frag->fr_fix, frag->fr_subtype);
1258
1259 frag->fr_fix += frag->fr_subtype;
1260 frag->fr_type = rs_fill;
1261 frag->fr_var = 0;
1262 frag->fr_offset = 0;
1263 }
1264
1265 /* Generate .debug_line content for the chain of line number entries
1266 beginning at E, for segment SEG. */
1267
1268 static void
1269 process_entries (segT seg, struct line_entry *e)
1270 {
1271 unsigned filenum = 1;
1272 unsigned line = 1;
1273 unsigned column = 0;
1274 unsigned isa = 0;
1275 unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
1276 fragS *last_frag = NULL, *frag;
1277 addressT last_frag_ofs = 0, frag_ofs;
1278 symbolS *last_lab = NULL, *lab;
1279 struct line_entry *next;
1280
1281 if (flag_dwarf_sections)
1282 {
1283 char * name;
1284 const char * sec_name;
1285
1286 /* Switch to the relevent sub-section before we start to emit
1287 the line number table.
1288
1289 FIXME: These sub-sections do not have a normal Line Number
1290 Program Header, thus strictly speaking they are not valid
1291 DWARF sections. Unfortunately the DWARF standard assumes
1292 a one-to-one relationship between compilation units and
1293 line number tables. Thus we have to have a .debug_line
1294 section, as well as our sub-sections, and we have to ensure
1295 that all of the sub-sections are merged into a proper
1296 .debug_line section before a debugger sees them. */
1297
1298 sec_name = bfd_get_section_name (stdoutput, seg);
1299 if (strcmp (sec_name, ".text") != 0)
1300 {
1301 unsigned int len;
1302
1303 len = strlen (sec_name);
1304 name = xmalloc (len + 11 + 2);
1305 sprintf (name, ".debug_line%s", sec_name);
1306 subseg_set (subseg_get (name, FALSE), 0);
1307 }
1308 else
1309 /* Don't create a .debug_line.text section -
1310 that is redundant. Instead just switch back to the
1311 normal .debug_line section. */
1312 subseg_set (subseg_get (".debug_line", FALSE), 0);
1313 }
1314
1315 do
1316 {
1317 int line_delta;
1318
1319 if (filenum != e->loc.filenum)
1320 {
1321 filenum = e->loc.filenum;
1322 out_opcode (DW_LNS_set_file);
1323 out_uleb128 (filenum);
1324 }
1325
1326 if (column != e->loc.column)
1327 {
1328 column = e->loc.column;
1329 out_opcode (DW_LNS_set_column);
1330 out_uleb128 (column);
1331 }
1332
1333 if (e->loc.discriminator != 0)
1334 {
1335 out_opcode (DW_LNS_extended_op);
1336 out_leb128 (1 + sizeof_leb128 (e->loc.discriminator, 0));
1337 out_opcode (DW_LNE_set_discriminator);
1338 out_uleb128 (e->loc.discriminator);
1339 }
1340
1341 if (isa != e->loc.isa)
1342 {
1343 isa = e->loc.isa;
1344 out_opcode (DW_LNS_set_isa);
1345 out_uleb128 (isa);
1346 }
1347
1348 if ((e->loc.flags ^ flags) & DWARF2_FLAG_IS_STMT)
1349 {
1350 flags = e->loc.flags;
1351 out_opcode (DW_LNS_negate_stmt);
1352 }
1353
1354 if (e->loc.flags & DWARF2_FLAG_BASIC_BLOCK)
1355 out_opcode (DW_LNS_set_basic_block);
1356
1357 if (e->loc.flags & DWARF2_FLAG_PROLOGUE_END)
1358 out_opcode (DW_LNS_set_prologue_end);
1359
1360 if (e->loc.flags & DWARF2_FLAG_EPILOGUE_BEGIN)
1361 out_opcode (DW_LNS_set_epilogue_begin);
1362
1363 /* Don't try to optimize away redundant entries; gdb wants two
1364 entries for a function where the code starts on the same line as
1365 the {, and there's no way to identify that case here. Trust gcc
1366 to optimize appropriately. */
1367 line_delta = e->loc.line - line;
1368 lab = e->label;
1369 frag = symbol_get_frag (lab);
1370 frag_ofs = S_GET_VALUE (lab);
1371
1372 if (last_frag == NULL)
1373 {
1374 out_set_addr (lab);
1375 out_inc_line_addr (line_delta, 0);
1376 }
1377 else if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1378 out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
1379 else
1380 relax_inc_line_addr (line_delta, lab, last_lab);
1381
1382 line = e->loc.line;
1383 last_lab = lab;
1384 last_frag = frag;
1385 last_frag_ofs = frag_ofs;
1386
1387 next = e->next;
1388 free (e);
1389 e = next;
1390 }
1391 while (e);
1392
1393 /* Emit a DW_LNE_end_sequence for the end of the section. */
1394 frag = last_frag_for_seg (seg);
1395 frag_ofs = get_frag_fix (frag, seg);
1396 if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1397 out_inc_line_addr (INT_MAX, frag_ofs - last_frag_ofs);
1398 else
1399 {
1400 lab = symbol_temp_new (seg, frag_ofs, frag);
1401 relax_inc_line_addr (INT_MAX, lab, last_lab);
1402 }
1403 }
1404
1405 /* Emit the directory and file tables for .debug_line. */
1406
1407 static void
1408 out_file_list (void)
1409 {
1410 size_t size;
1411 const char *dir;
1412 char *cp;
1413 unsigned int i;
1414
1415 /* Emit directory list. */
1416 for (i = 1; i < dirs_in_use; ++i)
1417 {
1418 dir = remap_debug_filename (dirs[i]);
1419 size = strlen (dir) + 1;
1420 cp = frag_more (size);
1421 memcpy (cp, dir, size);
1422 }
1423 /* Terminate it. */
1424 out_byte ('\0');
1425
1426 for (i = 1; i < files_in_use; ++i)
1427 {
1428 const char *fullfilename;
1429
1430 if (files[i].filename == NULL)
1431 {
1432 as_bad (_("unassigned file number %ld"), (long) i);
1433 /* Prevent a crash later, particularly for file 1. */
1434 files[i].filename = "";
1435 continue;
1436 }
1437
1438 fullfilename = DWARF2_FILE_NAME (files[i].filename,
1439 files[i].dir ? dirs [files [i].dir] : "");
1440 size = strlen (fullfilename) + 1;
1441 cp = frag_more (size);
1442 memcpy (cp, fullfilename, size);
1443
1444 out_uleb128 (files[i].dir); /* directory number */
1445 /* Output the last modification timestamp. */
1446 out_uleb128 (DWARF2_FILE_TIME_NAME (files[i].filename,
1447 files[i].dir ? dirs [files [i].dir] : ""));
1448 /* Output the filesize. */
1449 out_uleb128 (DWARF2_FILE_SIZE_NAME (files[i].filename,
1450 files[i].dir ? dirs [files [i].dir] : ""));
1451 }
1452
1453 /* Terminate filename list. */
1454 out_byte (0);
1455 }
1456
1457 /* Switch to SEC and output a header length field. Return the size of
1458 offsets used in SEC. The caller must set EXPR->X_add_symbol value
1459 to the end of the section. EXPR->X_add_number will be set to the
1460 negative size of the header. */
1461
1462 static int
1463 out_header (asection *sec, expressionS *exp)
1464 {
1465 symbolS *start_sym;
1466 symbolS *end_sym;
1467
1468 subseg_set (sec, 0);
1469
1470 if (flag_dwarf_sections)
1471 {
1472 /* If we are going to put the start and end symbols in different
1473 sections, then we need real symbols, not just fake, local ones. */
1474 frag_now_fix ();
1475 start_sym = symbol_make (".Ldebug_line_start");
1476 end_sym = symbol_make (".Ldebug_line_end");
1477 symbol_set_value_now (start_sym);
1478 }
1479 else
1480 {
1481 start_sym = symbol_temp_new_now ();
1482 end_sym = symbol_temp_make ();
1483 }
1484
1485 /* Total length of the information. */
1486 exp->X_op = O_subtract;
1487 exp->X_add_symbol = end_sym;
1488 exp->X_op_symbol = start_sym;
1489
1490 switch (DWARF2_FORMAT (sec))
1491 {
1492 case dwarf2_format_32bit:
1493 exp->X_add_number = -4;
1494 emit_expr (exp, 4);
1495 return 4;
1496
1497 case dwarf2_format_64bit:
1498 exp->X_add_number = -12;
1499 out_four (-1);
1500 emit_expr (exp, 8);
1501 return 8;
1502
1503 case dwarf2_format_64bit_irix:
1504 exp->X_add_number = -8;
1505 emit_expr (exp, 8);
1506 return 8;
1507 }
1508
1509 as_fatal (_("internal error: unknown dwarf2 format"));
1510 return 0;
1511 }
1512
1513 /* Emit the collected .debug_line data. */
1514
1515 static void
1516 out_debug_line (segT line_seg)
1517 {
1518 expressionS exp;
1519 symbolS *prologue_start, *prologue_end;
1520 symbolS *line_end;
1521 struct line_seg *s;
1522 int sizeof_offset;
1523
1524 sizeof_offset = out_header (line_seg, &exp);
1525 line_end = exp.X_add_symbol;
1526
1527 /* Version. */
1528 out_two (DWARF2_LINE_VERSION);
1529
1530 /* Length of the prologue following this length. */
1531 prologue_start = symbol_temp_make ();
1532 prologue_end = symbol_temp_make ();
1533 exp.X_op = O_subtract;
1534 exp.X_add_symbol = prologue_end;
1535 exp.X_op_symbol = prologue_start;
1536 exp.X_add_number = 0;
1537 emit_expr (&exp, sizeof_offset);
1538 symbol_set_value_now (prologue_start);
1539
1540 /* Parameters of the state machine. */
1541 out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
1542 out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
1543 out_byte (DWARF2_LINE_BASE);
1544 out_byte (DWARF2_LINE_RANGE);
1545 out_byte (DWARF2_LINE_OPCODE_BASE);
1546
1547 /* Standard opcode lengths. */
1548 out_byte (0); /* DW_LNS_copy */
1549 out_byte (1); /* DW_LNS_advance_pc */
1550 out_byte (1); /* DW_LNS_advance_line */
1551 out_byte (1); /* DW_LNS_set_file */
1552 out_byte (1); /* DW_LNS_set_column */
1553 out_byte (0); /* DW_LNS_negate_stmt */
1554 out_byte (0); /* DW_LNS_set_basic_block */
1555 out_byte (0); /* DW_LNS_const_add_pc */
1556 out_byte (1); /* DW_LNS_fixed_advance_pc */
1557 out_byte (0); /* DW_LNS_set_prologue_end */
1558 out_byte (0); /* DW_LNS_set_epilogue_begin */
1559 out_byte (1); /* DW_LNS_set_isa */
1560
1561 out_file_list ();
1562
1563 symbol_set_value_now (prologue_end);
1564
1565 /* For each section, emit a statement program. */
1566 for (s = all_segs; s; s = s->next)
1567 if (SEG_NORMAL (s->seg))
1568 process_entries (s->seg, s->head->head);
1569 else
1570 as_warn ("dwarf line number information for %s ignored",
1571 segment_name (s->seg));
1572
1573 if (flag_dwarf_sections)
1574 /* We have to switch to the special .debug_line_end section
1575 before emitting the end-of-debug_line symbol. The linker
1576 script arranges for this section to be placed after all the
1577 (potentially garbage collected) .debug_line.<foo> sections.
1578 This section contains the line_end symbol which is used to
1579 compute the size of the linked .debug_line section, as seen
1580 in the DWARF Line Number header. */
1581 subseg_set (subseg_get (".debug_line_end", FALSE), 0);
1582
1583 symbol_set_value_now (line_end);
1584 }
1585
1586 static void
1587 out_debug_ranges (segT ranges_seg)
1588 {
1589 unsigned int addr_size = sizeof_address;
1590 struct line_seg *s;
1591 expressionS exp;
1592 unsigned int i;
1593
1594 subseg_set (ranges_seg, 0);
1595
1596 /* Base Address Entry. */
1597 for (i = 0; i < addr_size; i++)
1598 out_byte (0xff);
1599 for (i = 0; i < addr_size; i++)
1600 out_byte (0);
1601
1602 /* Range List Entry. */
1603 for (s = all_segs; s; s = s->next)
1604 {
1605 fragS *frag;
1606 symbolS *beg, *end;
1607
1608 frag = first_frag_for_seg (s->seg);
1609 beg = symbol_temp_new (s->seg, 0, frag);
1610 s->text_start = beg;
1611
1612 frag = last_frag_for_seg (s->seg);
1613 end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1614 s->text_end = end;
1615
1616 exp.X_op = O_symbol;
1617 exp.X_add_symbol = beg;
1618 exp.X_add_number = 0;
1619 emit_expr (&exp, addr_size);
1620
1621 exp.X_op = O_symbol;
1622 exp.X_add_symbol = end;
1623 exp.X_add_number = 0;
1624 emit_expr (&exp, addr_size);
1625 }
1626
1627 /* End of Range Entry. */
1628 for (i = 0; i < addr_size; i++)
1629 out_byte (0);
1630 for (i = 0; i < addr_size; i++)
1631 out_byte (0);
1632 }
1633
1634 /* Emit data for .debug_aranges. */
1635
1636 static void
1637 out_debug_aranges (segT aranges_seg, segT info_seg)
1638 {
1639 unsigned int addr_size = sizeof_address;
1640 offsetT size;
1641 struct line_seg *s;
1642 expressionS exp;
1643 symbolS *aranges_end;
1644 char *p;
1645 int sizeof_offset;
1646
1647 sizeof_offset = out_header (aranges_seg, &exp);
1648 aranges_end = exp.X_add_symbol;
1649 size = -exp.X_add_number;
1650
1651 /* Version. */
1652 out_two (DWARF2_ARANGES_VERSION);
1653 size += 2;
1654
1655 /* Offset to .debug_info. */
1656 TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), sizeof_offset);
1657 size += sizeof_offset;
1658
1659 /* Size of an address (offset portion). */
1660 out_byte (addr_size);
1661 size++;
1662
1663 /* Size of a segment descriptor. */
1664 out_byte (0);
1665 size++;
1666
1667 /* Align the header. */
1668 while ((size++ % (2 * addr_size)) > 0)
1669 out_byte (0);
1670
1671 for (s = all_segs; s; s = s->next)
1672 {
1673 fragS *frag;
1674 symbolS *beg, *end;
1675
1676 frag = first_frag_for_seg (s->seg);
1677 beg = symbol_temp_new (s->seg, 0, frag);
1678 s->text_start = beg;
1679
1680 frag = last_frag_for_seg (s->seg);
1681 end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1682 s->text_end = end;
1683
1684 exp.X_op = O_symbol;
1685 exp.X_add_symbol = beg;
1686 exp.X_add_number = 0;
1687 emit_expr (&exp, addr_size);
1688
1689 exp.X_op = O_subtract;
1690 exp.X_add_symbol = end;
1691 exp.X_op_symbol = beg;
1692 exp.X_add_number = 0;
1693 emit_expr (&exp, addr_size);
1694 }
1695
1696 p = frag_more (2 * addr_size);
1697 md_number_to_chars (p, 0, addr_size);
1698 md_number_to_chars (p + addr_size, 0, addr_size);
1699
1700 symbol_set_value_now (aranges_end);
1701 }
1702
1703 /* Emit data for .debug_abbrev. Note that this must be kept in
1704 sync with out_debug_info below. */
1705
1706 static void
1707 out_debug_abbrev (segT abbrev_seg,
1708 segT info_seg ATTRIBUTE_UNUSED,
1709 segT line_seg ATTRIBUTE_UNUSED)
1710 {
1711 subseg_set (abbrev_seg, 0);
1712
1713 out_uleb128 (1);
1714 out_uleb128 (DW_TAG_compile_unit);
1715 out_byte (DW_CHILDREN_no);
1716 if (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit)
1717 out_abbrev (DW_AT_stmt_list, DW_FORM_data4);
1718 else
1719 out_abbrev (DW_AT_stmt_list, DW_FORM_data8);
1720 if (all_segs->next == NULL)
1721 {
1722 out_abbrev (DW_AT_low_pc, DW_FORM_addr);
1723 if (DWARF2_VERSION < 4)
1724 out_abbrev (DW_AT_high_pc, DW_FORM_addr);
1725 else
1726 out_abbrev (DW_AT_high_pc, (sizeof_address == 4
1727 ? DW_FORM_data4 : DW_FORM_data8));
1728 }
1729 else
1730 {
1731 if (DWARF2_FORMAT (info_seg) == dwarf2_format_32bit)
1732 out_abbrev (DW_AT_ranges, DW_FORM_data4);
1733 else
1734 out_abbrev (DW_AT_ranges, DW_FORM_data8);
1735 }
1736 out_abbrev (DW_AT_name, DW_FORM_string);
1737 out_abbrev (DW_AT_comp_dir, DW_FORM_string);
1738 out_abbrev (DW_AT_producer, DW_FORM_string);
1739 out_abbrev (DW_AT_language, DW_FORM_data2);
1740 out_abbrev (0, 0);
1741
1742 /* Terminate the abbreviations for this compilation unit. */
1743 out_byte (0);
1744 }
1745
1746 /* Emit a description of this compilation unit for .debug_info. */
1747
1748 static void
1749 out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT ranges_seg)
1750 {
1751 char producer[128];
1752 const char *comp_dir;
1753 const char *dirname;
1754 expressionS exp;
1755 symbolS *info_end;
1756 char *p;
1757 int len;
1758 int sizeof_offset;
1759
1760 sizeof_offset = out_header (info_seg, &exp);
1761 info_end = exp.X_add_symbol;
1762
1763 /* DWARF version. */
1764 out_two (DWARF2_VERSION);
1765
1766 /* .debug_abbrev offset */
1767 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
1768
1769 /* Target address size. */
1770 out_byte (sizeof_address);
1771
1772 /* DW_TAG_compile_unit DIE abbrev */
1773 out_uleb128 (1);
1774
1775 /* DW_AT_stmt_list */
1776 TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg),
1777 (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit
1778 ? 4 : 8));
1779
1780 /* These two attributes are emitted if all of the code is contiguous. */
1781 if (all_segs->next == NULL)
1782 {
1783 /* DW_AT_low_pc */
1784 exp.X_op = O_symbol;
1785 exp.X_add_symbol = all_segs->text_start;
1786 exp.X_add_number = 0;
1787 emit_expr (&exp, sizeof_address);
1788
1789 /* DW_AT_high_pc */
1790 if (DWARF2_VERSION < 4)
1791 exp.X_op = O_symbol;
1792 else
1793 {
1794 exp.X_op = O_subtract;
1795 exp.X_op_symbol = all_segs->text_start;
1796 }
1797 exp.X_add_symbol = all_segs->text_end;
1798 exp.X_add_number = 0;
1799 emit_expr (&exp, sizeof_address);
1800 }
1801 else
1802 {
1803 /* This attribute is emitted if the code is disjoint. */
1804 /* DW_AT_ranges. */
1805 TC_DWARF2_EMIT_OFFSET (section_symbol (ranges_seg), sizeof_offset);
1806 }
1807
1808 /* DW_AT_name. We don't have the actual file name that was present
1809 on the command line, so assume files[1] is the main input file.
1810 We're not supposed to get called unless at least one line number
1811 entry was emitted, so this should always be defined. */
1812 if (files_in_use == 0)
1813 abort ();
1814 if (files[1].dir)
1815 {
1816 dirname = remap_debug_filename (dirs[files[1].dir]);
1817 len = strlen (dirname);
1818 #ifdef TE_VMS
1819 /* Already has trailing slash. */
1820 p = frag_more (len);
1821 memcpy (p, dirname, len);
1822 #else
1823 p = frag_more (len + 1);
1824 memcpy (p, dirname, len);
1825 INSERT_DIR_SEPARATOR (p, len);
1826 #endif
1827 }
1828 len = strlen (files[1].filename) + 1;
1829 p = frag_more (len);
1830 memcpy (p, files[1].filename, len);
1831
1832 /* DW_AT_comp_dir */
1833 comp_dir = remap_debug_filename (getpwd ());
1834 len = strlen (comp_dir) + 1;
1835 p = frag_more (len);
1836 memcpy (p, comp_dir, len);
1837
1838 /* DW_AT_producer */
1839 sprintf (producer, "GNU AS %s", VERSION);
1840 len = strlen (producer) + 1;
1841 p = frag_more (len);
1842 memcpy (p, producer, len);
1843
1844 /* DW_AT_language. Yes, this is probably not really MIPS, but the
1845 dwarf2 draft has no standard code for assembler. */
1846 out_two (DW_LANG_Mips_Assembler);
1847
1848 symbol_set_value_now (info_end);
1849 }
1850
1851 void
1852 dwarf2_init (void)
1853 {
1854 last_seg_ptr = &all_segs;
1855 }
1856
1857
1858 /* Finish the dwarf2 debug sections. We emit .debug.line if there
1859 were any .file/.loc directives, or --gdwarf2 was given, or if the
1860 file has a non-empty .debug_info section and an empty .debug_line
1861 section. If we emit .debug_line, and the .debug_info section is
1862 empty, we also emit .debug_info, .debug_aranges and .debug_abbrev.
1863 ALL_SEGS will be non-null if there were any .file/.loc directives,
1864 or --gdwarf2 was given and there were any located instructions
1865 emitted. */
1866
1867 void
1868 dwarf2_finish (void)
1869 {
1870 segT line_seg;
1871 struct line_seg *s;
1872 segT info_seg;
1873 int emit_other_sections = 0;
1874 int empty_debug_line = 0;
1875
1876 info_seg = bfd_get_section_by_name (stdoutput, ".debug_info");
1877 emit_other_sections = info_seg == NULL || !seg_not_empty_p (info_seg);
1878
1879 line_seg = bfd_get_section_by_name (stdoutput, ".debug_line");
1880 empty_debug_line = line_seg == NULL || !seg_not_empty_p (line_seg);
1881
1882 /* We can't construct a new debug_line section if we already have one.
1883 Give an error. */
1884 if (all_segs && !empty_debug_line)
1885 as_fatal ("duplicate .debug_line sections");
1886
1887 if ((!all_segs && emit_other_sections)
1888 || (!emit_other_sections && !empty_debug_line))
1889 /* If there is no line information and no non-empty .debug_info
1890 section, or if there is both a non-empty .debug_info and a non-empty
1891 .debug_line, then we do nothing. */
1892 return;
1893
1894 /* Calculate the size of an address for the target machine. */
1895 sizeof_address = DWARF2_ADDR_SIZE (stdoutput);
1896
1897 /* Create and switch to the line number section. */
1898 line_seg = subseg_new (".debug_line", 0);
1899 bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY | SEC_DEBUGGING);
1900
1901 /* For each subsection, chain the debug entries together. */
1902 for (s = all_segs; s; s = s->next)
1903 {
1904 struct line_subseg *lss = s->head;
1905 struct line_entry **ptail = lss->ptail;
1906
1907 while ((lss = lss->next) != NULL)
1908 {
1909 *ptail = lss->head;
1910 ptail = lss->ptail;
1911 }
1912 }
1913
1914 out_debug_line (line_seg);
1915
1916 /* If this is assembler generated line info, and there is no
1917 debug_info already, we need .debug_info and .debug_abbrev
1918 sections as well. */
1919 if (emit_other_sections)
1920 {
1921 segT abbrev_seg;
1922 segT aranges_seg;
1923 segT ranges_seg;
1924
1925 gas_assert (all_segs);
1926
1927 info_seg = subseg_new (".debug_info", 0);
1928 abbrev_seg = subseg_new (".debug_abbrev", 0);
1929 aranges_seg = subseg_new (".debug_aranges", 0);
1930
1931 bfd_set_section_flags (stdoutput, info_seg,
1932 SEC_READONLY | SEC_DEBUGGING);
1933 bfd_set_section_flags (stdoutput, abbrev_seg,
1934 SEC_READONLY | SEC_DEBUGGING);
1935 bfd_set_section_flags (stdoutput, aranges_seg,
1936 SEC_READONLY | SEC_DEBUGGING);
1937
1938 record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
1939
1940 if (all_segs->next == NULL)
1941 ranges_seg = NULL;
1942 else
1943 {
1944 ranges_seg = subseg_new (".debug_ranges", 0);
1945 bfd_set_section_flags (stdoutput, ranges_seg,
1946 SEC_READONLY | SEC_DEBUGGING);
1947 record_alignment (ranges_seg, ffs (2 * sizeof_address) - 1);
1948 out_debug_ranges (ranges_seg);
1949 }
1950
1951 out_debug_aranges (aranges_seg, info_seg);
1952 out_debug_abbrev (abbrev_seg, info_seg, line_seg);
1953 out_debug_info (info_seg, abbrev_seg, line_seg, ranges_seg);
1954 }
1955 }
This page took 0.206482 seconds and 5 git commands to generate.