25ebc94a8d2b4c51279290770f188bf0ae60be19
[binutils-gdb.git] / gas / dwarf2dbg.c
1 /* dwarf2dbg.c - DWARF2 debug support
2 Copyright (C) 1999-2020 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) -1
85 #endif
86
87 #ifndef DWARF2_FILE_SIZE_NAME
88 #define DWARF2_FILE_SIZE_NAME(FILENAME,DIRNAME) -1
89 #endif
90
91 #ifndef DWARF2_VERSION
92 #define DWARF2_VERSION dwarf_level
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 outputs version 3 .debug_line information. */
101 #ifndef DWARF2_LINE_VERSION
102 #define DWARF2_LINE_VERSION (dwarf_level > 3 ? dwarf_level : 3)
103 #endif
104
105 /* The .debug_rnglists has only been in DWARF version 5. */
106 #ifndef DWARF2_RNGLISTS_VERSION
107 #define DWARF2_RNGLISTS_VERSION 5
108 #endif
109
110 #include "subsegs.h"
111
112 #include "dwarf2.h"
113
114 /* Since we can't generate the prolog until the body is complete, we
115 use three different subsegments for .debug_line: one holding the
116 prolog, one for the directory and filename info, and one for the
117 body ("statement program"). */
118 #define DL_PROLOG 0
119 #define DL_FILES 1
120 #define DL_BODY 2
121
122 /* If linker relaxation might change offsets in the code, the DWARF special
123 opcodes and variable-length operands cannot be used. If this macro is
124 nonzero, use the DW_LNS_fixed_advance_pc opcode instead. */
125 #ifndef DWARF2_USE_FIXED_ADVANCE_PC
126 # define DWARF2_USE_FIXED_ADVANCE_PC linkrelax
127 #endif
128
129 /* First special line opcode - leave room for the standard opcodes.
130 Note: If you want to change this, you'll have to update the
131 "standard_opcode_lengths" table that is emitted below in
132 out_debug_line(). */
133 #define DWARF2_LINE_OPCODE_BASE 13
134
135 #ifndef DWARF2_LINE_BASE
136 /* Minimum line offset in a special line info. opcode. This value
137 was chosen to give a reasonable range of values. */
138 # define DWARF2_LINE_BASE -5
139 #endif
140
141 /* Range of line offsets in a special line info. opcode. */
142 #ifndef DWARF2_LINE_RANGE
143 # define DWARF2_LINE_RANGE 14
144 #endif
145
146 #ifndef DWARF2_LINE_MIN_INSN_LENGTH
147 /* Define the architecture-dependent minimum instruction length (in
148 bytes). This value should be rather too small than too big. */
149 # define DWARF2_LINE_MIN_INSN_LENGTH 1
150 #endif
151
152 /* Flag that indicates the initial value of the is_stmt_start flag. */
153 #define DWARF2_LINE_DEFAULT_IS_STMT 1
154
155 #ifndef DWARF2_LINE_MAX_OPS_PER_INSN
156 #define DWARF2_LINE_MAX_OPS_PER_INSN 1
157 #endif
158
159 /* Given a special op, return the line skip amount. */
160 #define SPECIAL_LINE(op) \
161 (((op) - DWARF2_LINE_OPCODE_BASE)%DWARF2_LINE_RANGE + DWARF2_LINE_BASE)
162
163 /* Given a special op, return the address skip amount (in units of
164 DWARF2_LINE_MIN_INSN_LENGTH. */
165 #define SPECIAL_ADDR(op) (((op) - DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)
166
167 /* The maximum address skip amount that can be encoded with a special op. */
168 #define MAX_SPECIAL_ADDR_DELTA SPECIAL_ADDR(255)
169
170 #ifndef TC_PARSE_CONS_RETURN_NONE
171 #define TC_PARSE_CONS_RETURN_NONE BFD_RELOC_NONE
172 #endif
173
174 struct line_entry
175 {
176 struct line_entry *next;
177 symbolS *label;
178 struct dwarf2_line_info loc;
179 };
180
181 /* Don't change the offset of next in line_entry. set_or_check_view
182 calls in dwarf2_gen_line_info_1 depend on it. */
183 static char unused[offsetof(struct line_entry, next) ? -1 : 1]
184 ATTRIBUTE_UNUSED;
185
186 struct line_subseg
187 {
188 struct line_subseg *next;
189 subsegT subseg;
190 struct line_entry *head;
191 struct line_entry **ptail;
192 struct line_entry **pmove_tail;
193 };
194
195 struct line_seg
196 {
197 struct line_seg *next;
198 segT seg;
199 struct line_subseg *head;
200 symbolS *text_start;
201 symbolS *text_end;
202 };
203
204 /* Collects data for all line table entries during assembly. */
205 static struct line_seg *all_segs;
206 static struct line_seg **last_seg_ptr;
207
208 #define NUM_MD5_BYTES 16
209
210 struct file_entry
211 {
212 const char * filename;
213 unsigned int dir;
214 unsigned char md5[NUM_MD5_BYTES];
215 };
216
217 /* Table of files used by .debug_line. */
218 static struct file_entry *files;
219 static unsigned int files_in_use;
220 static unsigned int files_allocated;
221 static unsigned int num_of_auto_assigned;
222
223 /* Table of directories used by .debug_line. */
224 static char ** dirs = NULL;
225 static unsigned int dirs_in_use = 0;
226 static unsigned int dirs_allocated = 0;
227
228 /* TRUE when we've seen a .loc directive recently. Used to avoid
229 doing work when there's nothing to do. Will be reset by
230 dwarf2_consume_line_info. */
231 bfd_boolean dwarf2_loc_directive_seen;
232
233 /* TRUE when we've seen any .loc directive at any time during parsing.
234 Indicates the user wants us to generate a .debug_line section.
235 Used in dwarf2_finish as sanity check. */
236 static bfd_boolean dwarf2_any_loc_directive_seen;
237
238 /* TRUE when we're supposed to set the basic block mark whenever a
239 label is seen. */
240 bfd_boolean dwarf2_loc_mark_labels;
241
242 /* Current location as indicated by the most recent .loc directive. */
243 static struct dwarf2_line_info current =
244 {
245 1, 1, 0, 0,
246 DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0,
247 0, NULL
248 };
249
250 /* This symbol is used to recognize view number forced resets in loc
251 lists. */
252 static symbolS *force_reset_view;
253
254 /* This symbol evaluates to an expression that, if nonzero, indicates
255 some view assert check failed. */
256 static symbolS *view_assert_failed;
257
258 /* The size of an address on the target. */
259 static unsigned int sizeof_address;
260 \f
261 #ifndef TC_DWARF2_EMIT_OFFSET
262 #define TC_DWARF2_EMIT_OFFSET generic_dwarf2_emit_offset
263
264 /* Create an offset to .dwarf2_*. */
265
266 static void
267 generic_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
268 {
269 expressionS exp;
270
271 memset (&exp, 0, sizeof exp);
272 exp.X_op = O_symbol;
273 exp.X_add_symbol = symbol;
274 exp.X_add_number = 0;
275 emit_expr (&exp, size);
276 }
277 #endif
278
279 /* Find or create (if CREATE_P) an entry for SEG+SUBSEG in ALL_SEGS. */
280
281 static struct line_subseg *
282 get_line_subseg (segT seg, subsegT subseg, bfd_boolean create_p)
283 {
284 struct line_seg *s = seg_info (seg)->dwarf2_line_seg;
285 struct line_subseg **pss, *lss;
286
287 if (s == NULL)
288 {
289 if (!create_p)
290 return NULL;
291
292 s = XNEW (struct line_seg);
293 s->next = NULL;
294 s->seg = seg;
295 s->head = NULL;
296 *last_seg_ptr = s;
297 last_seg_ptr = &s->next;
298 seg_info (seg)->dwarf2_line_seg = s;
299 }
300
301 gas_assert (seg == s->seg);
302
303 for (pss = &s->head; (lss = *pss) != NULL ; pss = &lss->next)
304 {
305 if (lss->subseg == subseg)
306 goto found_subseg;
307 if (lss->subseg > subseg)
308 break;
309 }
310
311 lss = XNEW (struct line_subseg);
312 lss->next = *pss;
313 lss->subseg = subseg;
314 lss->head = NULL;
315 lss->ptail = &lss->head;
316 lss->pmove_tail = &lss->head;
317 *pss = lss;
318
319 found_subseg:
320 return lss;
321 }
322
323 /* (Un)reverse the line_entry list starting from H. */
324
325 static struct line_entry *
326 reverse_line_entry_list (struct line_entry *h)
327 {
328 struct line_entry *p = NULL, *e, *n;
329
330 for (e = h; e; e = n)
331 {
332 n = e->next;
333 e->next = p;
334 p = e;
335 }
336 return p;
337 }
338
339 /* Compute the view for E based on the previous entry P. If we
340 introduce an (undefined) view symbol for P, and H is given (P must
341 be the tail in this case), introduce view symbols for earlier list
342 entries as well, until one of them is constant. */
343
344 static void
345 set_or_check_view (struct line_entry *e, struct line_entry *p,
346 struct line_entry *h)
347 {
348 expressionS viewx;
349
350 memset (&viewx, 0, sizeof (viewx));
351 viewx.X_unsigned = 1;
352
353 /* First, compute !(E->label > P->label), to tell whether or not
354 we're to reset the view number. If we can't resolve it to a
355 constant, keep it symbolic. */
356 if (!p || (e->loc.view == force_reset_view && force_reset_view))
357 {
358 viewx.X_op = O_constant;
359 viewx.X_add_number = 0;
360 viewx.X_add_symbol = NULL;
361 viewx.X_op_symbol = NULL;
362 }
363 else
364 {
365 viewx.X_op = O_gt;
366 viewx.X_add_number = 0;
367 viewx.X_add_symbol = e->label;
368 viewx.X_op_symbol = p->label;
369 resolve_expression (&viewx);
370 if (viewx.X_op == O_constant)
371 viewx.X_add_number = !viewx.X_add_number;
372 else
373 {
374 viewx.X_add_symbol = make_expr_symbol (&viewx);
375 viewx.X_add_number = 0;
376 viewx.X_op_symbol = NULL;
377 viewx.X_op = O_logical_not;
378 }
379 }
380
381 if (S_IS_DEFINED (e->loc.view) && symbol_constant_p (e->loc.view))
382 {
383 expressionS *value = symbol_get_value_expression (e->loc.view);
384 /* We can't compare the view numbers at this point, because in
385 VIEWX we've only determined whether we're to reset it so
386 far. */
387 if (viewx.X_op == O_constant)
388 {
389 if (!value->X_add_number != !viewx.X_add_number)
390 as_bad (_("view number mismatch"));
391 }
392 /* Record the expression to check it later. It is the result of
393 a logical not, thus 0 or 1. We just add up all such deferred
394 expressions, and resolve it at the end. */
395 else if (!value->X_add_number)
396 {
397 symbolS *deferred = make_expr_symbol (&viewx);
398 if (view_assert_failed)
399 {
400 expressionS chk;
401
402 memset (&chk, 0, sizeof (chk));
403 chk.X_unsigned = 1;
404 chk.X_op = O_add;
405 chk.X_add_number = 0;
406 chk.X_add_symbol = view_assert_failed;
407 chk.X_op_symbol = deferred;
408 deferred = make_expr_symbol (&chk);
409 }
410 view_assert_failed = deferred;
411 }
412 }
413
414 if (viewx.X_op != O_constant || viewx.X_add_number)
415 {
416 expressionS incv;
417
418 if (!p->loc.view)
419 {
420 p->loc.view = symbol_temp_make ();
421 gas_assert (!S_IS_DEFINED (p->loc.view));
422 }
423
424 memset (&incv, 0, sizeof (incv));
425 incv.X_unsigned = 1;
426 incv.X_op = O_symbol;
427 incv.X_add_symbol = p->loc.view;
428 incv.X_add_number = 1;
429
430 if (viewx.X_op == O_constant)
431 {
432 gas_assert (viewx.X_add_number == 1);
433 viewx = incv;
434 }
435 else
436 {
437 viewx.X_add_symbol = make_expr_symbol (&viewx);
438 viewx.X_add_number = 0;
439 viewx.X_op_symbol = make_expr_symbol (&incv);
440 viewx.X_op = O_multiply;
441 }
442 }
443
444 if (!S_IS_DEFINED (e->loc.view))
445 {
446 symbol_set_value_expression (e->loc.view, &viewx);
447 S_SET_SEGMENT (e->loc.view, expr_section);
448 symbol_set_frag (e->loc.view, &zero_address_frag);
449 }
450
451 /* Define and attempt to simplify any earlier views needed to
452 compute E's. */
453 if (h && p && p->loc.view && !S_IS_DEFINED (p->loc.view))
454 {
455 struct line_entry *h2;
456 /* Reverse the list to avoid quadratic behavior going backwards
457 in a single-linked list. */
458 struct line_entry *r = reverse_line_entry_list (h);
459
460 gas_assert (r == p);
461 /* Set or check views until we find a defined or absent view. */
462 do
463 {
464 /* Do not define the head of a (sub?)segment view while
465 handling others. It would be defined too early, without
466 regard to the last view of other subsegments.
467 set_or_check_view will be called for every head segment
468 that needs it. */
469 if (r == h)
470 break;
471 set_or_check_view (r, r->next, NULL);
472 }
473 while (r->next && r->next->loc.view && !S_IS_DEFINED (r->next->loc.view)
474 && (r = r->next));
475
476 /* Unreverse the list, so that we can go forward again. */
477 h2 = reverse_line_entry_list (p);
478 gas_assert (h2 == h);
479
480 /* Starting from the last view we just defined, attempt to
481 simplify the view expressions, until we do so to P. */
482 do
483 {
484 /* The head view of a subsegment may remain undefined while
485 handling other elements, before it is linked to the last
486 view of the previous subsegment. */
487 if (r == h)
488 continue;
489 gas_assert (S_IS_DEFINED (r->loc.view));
490 resolve_expression (symbol_get_value_expression (r->loc.view));
491 }
492 while (r != p && (r = r->next));
493
494 /* Now that we've defined and computed all earlier views that might
495 be needed to compute E's, attempt to simplify it. */
496 resolve_expression (symbol_get_value_expression (e->loc.view));
497 }
498 }
499
500 /* Record an entry for LOC occurring at LABEL. */
501
502 static void
503 dwarf2_gen_line_info_1 (symbolS *label, struct dwarf2_line_info *loc)
504 {
505 struct line_subseg *lss;
506 struct line_entry *e;
507 flagword need_flags = SEC_ALLOC | SEC_LOAD | SEC_CODE;
508
509 /* PR 26850: Do not record LOCs in non-executable, non-allocated,
510 or non-loaded sections. */
511 if ((now_seg->flags & need_flags) != need_flags)
512 {
513 if (! SEG_NORMAL (now_seg))
514 /* FIXME: Add code to suppress multiple warnings ? */
515 as_warn ("dwarf line number information for %s ignored",
516 segment_name (now_seg));
517 return;
518 }
519
520 e = XNEW (struct line_entry);
521 e->next = NULL;
522 e->label = label;
523 e->loc = *loc;
524
525 lss = get_line_subseg (now_seg, now_subseg, TRUE);
526
527 /* Subseg heads are chained to previous subsegs in
528 dwarf2_finish. */
529 if (loc->view && lss->head)
530 set_or_check_view (e,
531 (struct line_entry *)lss->ptail,
532 lss->head);
533
534 *lss->ptail = e;
535 lss->ptail = &e->next;
536 }
537
538 /* Record an entry for LOC occurring at OFS within the current fragment. */
539
540 void
541 dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc)
542 {
543 static unsigned int line = -1;
544 static unsigned int filenum = -1;
545
546 symbolS *sym;
547
548 /* Early out for as-yet incomplete location information. */
549 if (loc->line == 0)
550 return;
551 if (loc->filenum == 0 && DWARF2_LINE_VERSION < 5)
552 return;
553
554 /* Don't emit sequences of line symbols for the same line when the
555 symbols apply to assembler code. It is necessary to emit
556 duplicate line symbols when a compiler asks for them, because GDB
557 uses them to determine the end of the prologue. */
558 if (debug_type == DEBUG_DWARF2
559 && line == loc->line && filenum == loc->filenum)
560 return;
561
562 line = loc->line;
563 filenum = loc->filenum;
564
565 if (linkrelax)
566 {
567 char name[120];
568
569 /* Use a non-fake name for the line number location,
570 so that it can be referred to by relocations. */
571 sprintf (name, ".Loc.%u.%u", line, filenum);
572 sym = symbol_new (name, now_seg, frag_now, ofs);
573 }
574 else
575 sym = symbol_temp_new (now_seg, frag_now, ofs);
576 dwarf2_gen_line_info_1 (sym, loc);
577 }
578
579 static const char *
580 get_basename (const char * pathname)
581 {
582 const char * file;
583
584 file = lbasename (pathname);
585 /* Don't make empty string from / or A: from A:/ . */
586 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
587 if (file <= pathname + 3)
588 file = pathname;
589 #else
590 if (file == pathname + 1)
591 file = pathname;
592 #endif
593 return file;
594 }
595
596 static unsigned int
597 get_directory_table_entry (const char * dirname,
598 size_t dirlen,
599 bfd_boolean can_use_zero)
600 {
601 unsigned int d;
602
603 if (dirlen == 0)
604 return 0;
605
606 #ifndef DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
607 if (IS_DIR_SEPARATOR (dirname[dirlen - 1]))
608 {
609 -- dirlen;
610 if (dirlen == 0)
611 return 0;
612 }
613 #endif
614
615 for (d = 0; d < dirs_in_use; ++d)
616 {
617 if (dirs[d] != NULL
618 && filename_ncmp (dirname, dirs[d], dirlen) == 0
619 && dirs[d][dirlen] == '\0')
620 return d;
621 }
622
623 if (can_use_zero)
624 {
625 if (dirs == NULL || dirs[0] == NULL)
626 d = 0;
627 }
628 else if (d == 0)
629 d = 1;
630
631 if (d >= dirs_allocated)
632 {
633 unsigned int old = dirs_allocated;
634
635 dirs_allocated = d + 32;
636 dirs = XRESIZEVEC (char *, dirs, dirs_allocated);
637 memset (dirs + old, 0, (dirs_allocated - old) * sizeof (char *));
638 }
639
640 dirs[d] = xmemdup0 (dirname, dirlen);
641 if (dirs_in_use <= d)
642 dirs_in_use = d + 1;
643
644 return d;
645 }
646
647 static bfd_boolean
648 assign_file_to_slot (unsigned long i, const char *file, unsigned int dir)
649 {
650 if (i >= files_allocated)
651 {
652 unsigned int old = files_allocated;
653
654 files_allocated = i + 32;
655 /* Catch wraparound. */
656 if (files_allocated <= old)
657 {
658 as_bad (_("file number %lu is too big"), (unsigned long) i);
659 return FALSE;
660 }
661
662 files = XRESIZEVEC (struct file_entry, files, files_allocated);
663 memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
664 }
665
666 files[i].filename = file;
667 files[i].dir = dir;
668 memset (files[i].md5, 0, NUM_MD5_BYTES);
669
670 if (files_in_use < i + 1)
671 files_in_use = i + 1;
672
673 return TRUE;
674 }
675
676 /* Get a .debug_line file number for PATHNAME. If there is a
677 directory component to PATHNAME, then this will be stored
678 in the directory table, if it is not already present.
679 Returns the slot number allocated to that filename or -1
680 if there was a problem. */
681
682 static signed int
683 allocate_filenum (const char * pathname)
684 {
685 static signed int last_used = -1, last_used_dir_len = 0;
686 const char *file;
687 size_t dir_len;
688 unsigned int i, dir;
689
690 /* Short circuit the common case of adding the same pathname
691 as last time. */
692 if (last_used != -1)
693 {
694 const char * dirname = NULL;
695
696 if (dirs != NULL)
697 dirname = dirs[files[last_used].dir];
698
699 if (dirname == NULL)
700 {
701 if (filename_cmp (pathname, files[last_used].filename) == 0)
702 return last_used;
703 }
704 else
705 {
706 if (filename_ncmp (pathname, dirname, last_used_dir_len) == 0
707 && IS_DIR_SEPARATOR (pathname [last_used_dir_len])
708 && filename_cmp (pathname + last_used_dir_len + 1,
709 files[last_used].filename) == 0)
710 return last_used;
711 }
712 }
713
714 file = get_basename (pathname);
715 dir_len = file - pathname;
716
717 dir = get_directory_table_entry (pathname, dir_len, FALSE);
718
719 /* Do not use slot-0. That is specifically reserved for use by
720 the '.file 0 "name"' directive. */
721 for (i = 1; i < files_in_use; ++i)
722 if (files[i].dir == dir
723 && files[i].filename
724 && filename_cmp (file, files[i].filename) == 0)
725 {
726 last_used = i;
727 last_used_dir_len = dir_len;
728 return i;
729 }
730
731 if (!assign_file_to_slot (i, file, dir))
732 return -1;
733
734 num_of_auto_assigned++;
735
736 last_used = i;
737 last_used_dir_len = dir_len;
738
739 return i;
740 }
741
742 /* Allocate slot NUM in the .debug_line file table to FILENAME.
743 If DIRNAME is not NULL or there is a directory component to FILENAME
744 then this will be stored in the directory table, if not already present.
745 if WITH_MD5 is TRUE then there is a md5 value in generic_bignum.
746 Returns TRUE if allocation succeeded, FALSE otherwise. */
747
748 static bfd_boolean
749 allocate_filename_to_slot (const char * dirname,
750 const char * filename,
751 unsigned int num,
752 bfd_boolean with_md5)
753 {
754 const char *file;
755 size_t dirlen;
756 unsigned int i, d;
757
758 /* Short circuit the common case of adding the same pathname
759 as last time. */
760 if (num < files_allocated && files[num].filename != NULL)
761 {
762 const char * dir = NULL;
763
764 if (dirs)
765 dir = dirs[files[num].dir];
766
767 if (with_md5
768 && memcmp (generic_bignum, files[num].md5, NUM_MD5_BYTES) != 0)
769 goto fail;
770
771 if (dirname != NULL)
772 {
773 if (dir != NULL && filename_cmp (dir, dirname) != 0)
774 goto fail;
775
776 if (filename_cmp (filename, files[num].filename) != 0)
777 goto fail;
778
779 /* If the filenames match, but the directory table entry was
780 empty, then fill it with the provided directory name. */
781 if (dir == NULL)
782 dirs[files[num].dir] = xmemdup0 (dirname, strlen (dirname));
783
784 return TRUE;
785 }
786 else if (dir != NULL)
787 {
788 dirlen = strlen (dir);
789 if (filename_ncmp (filename, dir, dirlen) == 0
790 && IS_DIR_SEPARATOR (filename [dirlen])
791 && filename_cmp (filename + dirlen + 1, files[num].filename) == 0)
792 return TRUE;
793 }
794 else /* dir == NULL */
795 {
796 file = get_basename (filename);
797 if (filename_cmp (file, files[num].filename) == 0)
798 {
799 if (file > filename)
800 /* The filenames match, but the directory table entry is empty.
801 Fill it with the provided directory name. */
802 dirs[files[num].dir] = xmemdup0 (filename, file - filename);
803 return TRUE;
804 }
805 }
806
807 fail:
808 as_bad (_("file table slot %u is already occupied by a different file (%s%s%s vs %s%s%s)"),
809 num,
810 dir == NULL ? "" : dir,
811 dir == NULL ? "" : "/",
812 files[num].filename,
813 dirname == NULL ? "" : dirname,
814 dirname == NULL ? "" : "/",
815 filename);
816 return FALSE;
817 }
818
819 if (dirname == NULL)
820 {
821 dirname = filename;
822 file = get_basename (filename);
823 dirlen = file - filename;
824 }
825 else
826 {
827 dirlen = strlen (dirname);
828 file = filename;
829 }
830
831 d = get_directory_table_entry (dirname, dirlen, num == 0);
832 i = num;
833
834 if (! assign_file_to_slot (i, file, d))
835 return FALSE;
836
837 if (with_md5)
838 {
839 if (target_big_endian)
840 {
841 /* md5's are stored in litte endian format. */
842 unsigned int bits_remaining = NUM_MD5_BYTES * BITS_PER_CHAR;
843 unsigned int byte = NUM_MD5_BYTES;
844 unsigned int bignum_index = 0;
845
846 while (bits_remaining)
847 {
848 unsigned int bignum_bits_remaining = LITTLENUM_NUMBER_OF_BITS;
849 valueT bignum_value = generic_bignum [bignum_index];
850 bignum_index ++;
851
852 while (bignum_bits_remaining)
853 {
854 files[i].md5[--byte] = bignum_value & 0xff;
855 bignum_value >>= 8;
856 bignum_bits_remaining -= 8;
857 bits_remaining -= 8;
858 }
859 }
860 }
861 else
862 {
863 unsigned int bits_remaining = NUM_MD5_BYTES * BITS_PER_CHAR;
864 unsigned int byte = 0;
865 unsigned int bignum_index = 0;
866
867 while (bits_remaining)
868 {
869 unsigned int bignum_bits_remaining = LITTLENUM_NUMBER_OF_BITS;
870 valueT bignum_value = generic_bignum [bignum_index];
871
872 bignum_index ++;
873
874 while (bignum_bits_remaining)
875 {
876 files[i].md5[byte++] = bignum_value & 0xff;
877 bignum_value >>= 8;
878 bignum_bits_remaining -= 8;
879 bits_remaining -= 8;
880 }
881 }
882 }
883 }
884 else
885 memset (files[i].md5, 0, NUM_MD5_BYTES);
886
887 return TRUE;
888 }
889
890 /* Returns the current source information. If .file directives have
891 been encountered, the info for the corresponding source file is
892 returned. Otherwise, the info for the assembly source file is
893 returned. */
894
895 void
896 dwarf2_where (struct dwarf2_line_info *line)
897 {
898 if (debug_type == DEBUG_DWARF2)
899 {
900 const char *filename;
901
902 memset (line, 0, sizeof (*line));
903 filename = as_where (&line->line);
904 line->filenum = allocate_filenum (filename);
905 /* FIXME: We should check the return value from allocate_filenum. */
906 line->column = 0;
907 line->flags = DWARF2_FLAG_IS_STMT;
908 line->isa = current.isa;
909 line->discriminator = current.discriminator;
910 line->view = NULL;
911 }
912 else
913 *line = current;
914 }
915
916 /* A hook to allow the target backend to inform the line number state
917 machine of isa changes when assembler debug info is enabled. */
918
919 void
920 dwarf2_set_isa (unsigned int isa)
921 {
922 current.isa = isa;
923 }
924
925 /* Called for each machine instruction, or relatively atomic group of
926 machine instructions (ie built-in macro). The instruction or group
927 is SIZE bytes in length. If dwarf2 line number generation is called
928 for, emit a line statement appropriately. */
929
930 void
931 dwarf2_emit_insn (int size)
932 {
933 struct dwarf2_line_info loc;
934
935 if (debug_type != DEBUG_DWARF2
936 ? !dwarf2_loc_directive_seen
937 : !seen_at_least_1_file ())
938 return;
939
940 dwarf2_where (&loc);
941
942 dwarf2_gen_line_info ((frag_now_fix_octets () - size) / OCTETS_PER_BYTE, &loc);
943 dwarf2_consume_line_info ();
944 }
945
946 /* Move all previously-emitted line entries for the current position by
947 DELTA bytes. This function cannot be used to move the same entries
948 twice. */
949
950 void
951 dwarf2_move_insn (int delta)
952 {
953 struct line_subseg *lss;
954 struct line_entry *e;
955 valueT now;
956
957 if (delta == 0)
958 return;
959
960 lss = get_line_subseg (now_seg, now_subseg, FALSE);
961 if (!lss)
962 return;
963
964 now = frag_now_fix ();
965 while ((e = *lss->pmove_tail))
966 {
967 if (S_GET_VALUE (e->label) == now)
968 S_SET_VALUE (e->label, now + delta);
969 lss->pmove_tail = &e->next;
970 }
971 }
972
973 /* Called after the current line information has been either used with
974 dwarf2_gen_line_info or saved with a machine instruction for later use.
975 This resets the state of the line number information to reflect that
976 it has been used. */
977
978 void
979 dwarf2_consume_line_info (void)
980 {
981 /* Unless we generate DWARF2 debugging information for each
982 assembler line, we only emit one line symbol for one LOC. */
983 dwarf2_loc_directive_seen = FALSE;
984
985 current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK
986 | DWARF2_FLAG_PROLOGUE_END
987 | DWARF2_FLAG_EPILOGUE_BEGIN);
988 current.discriminator = 0;
989 current.view = NULL;
990 }
991
992 /* Called for each (preferably code) label. If dwarf2_loc_mark_labels
993 is enabled, emit a basic block marker. */
994
995 void
996 dwarf2_emit_label (symbolS *label)
997 {
998 struct dwarf2_line_info loc;
999
1000 if (!dwarf2_loc_mark_labels)
1001 return;
1002 if (S_GET_SEGMENT (label) != now_seg)
1003 return;
1004 if (!(bfd_section_flags (now_seg) & SEC_CODE))
1005 return;
1006 if (files_in_use == 0 && debug_type != DEBUG_DWARF2)
1007 return;
1008
1009 dwarf2_where (&loc);
1010
1011 loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
1012
1013 dwarf2_gen_line_info_1 (label, &loc);
1014 dwarf2_consume_line_info ();
1015 }
1016
1017 /* Handle two forms of .file directive:
1018 - Pass .file "source.c" to s_app_file
1019 - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
1020
1021 If an entry is added to the file table, return a pointer to the filename. */
1022
1023 char *
1024 dwarf2_directive_filename (void)
1025 {
1026 bfd_boolean with_md5 = FALSE;
1027 valueT num;
1028 char *filename;
1029 const char * dirname = NULL;
1030 int filename_len;
1031 unsigned int i;
1032
1033 /* Continue to accept a bare string and pass it off. */
1034 SKIP_WHITESPACE ();
1035 if (*input_line_pointer == '"')
1036 {
1037 s_app_file (0);
1038 return NULL;
1039 }
1040
1041 num = get_absolute_expression ();
1042
1043 if ((offsetT) num < 1 && DWARF2_LINE_VERSION < 5)
1044 {
1045 as_bad (_("file number less than one"));
1046 ignore_rest_of_line ();
1047 return NULL;
1048 }
1049
1050 /* FIXME: Should we allow ".file <N>\n" as an expression meaning
1051 "switch back to the already allocated file <N> as the current
1052 file" ? */
1053
1054 filename = demand_copy_C_string (&filename_len);
1055 if (filename == NULL)
1056 /* demand_copy_C_string will have already generated an error message. */
1057 return NULL;
1058
1059 /* For DWARF-5 support we also accept:
1060 .file <NUM> ["<dir>"] "<file>" [md5 <NUM>] */
1061 if (DWARF2_LINE_VERSION > 4)
1062 {
1063 SKIP_WHITESPACE ();
1064 if (*input_line_pointer == '"')
1065 {
1066 dirname = filename;
1067 filename = demand_copy_C_string (&filename_len);
1068 SKIP_WHITESPACE ();
1069 }
1070
1071 if (strncmp (input_line_pointer, "md5", 3) == 0)
1072 {
1073 input_line_pointer += 3;
1074 SKIP_WHITESPACE ();
1075
1076 expressionS exp;
1077 expression_and_evaluate (& exp);
1078 if (exp.X_op != O_big)
1079 as_bad (_("md5 value too small or not a constant"));
1080 else
1081 with_md5 = TRUE;
1082 }
1083 }
1084
1085 demand_empty_rest_of_line ();
1086
1087 /* A .file directive implies compiler generated debug information is
1088 being supplied. Turn off gas generated debug info. */
1089 debug_type = DEBUG_NONE;
1090
1091 if (num != (unsigned int) num
1092 || num >= (size_t) -1 / sizeof (struct file_entry) - 32)
1093 {
1094 as_bad (_("file number %lu is too big"), (unsigned long) num);
1095 return NULL;
1096 }
1097
1098 if (num_of_auto_assigned)
1099 {
1100 /* Clear slots auto-assigned before the first .file <NUMBER>
1101 directive was seen. */
1102 if (files_in_use != (num_of_auto_assigned + 1))
1103 abort ();
1104 for (i = 1; i < files_in_use; i++)
1105 files[i].filename = NULL;
1106 files_in_use = 0;
1107 num_of_auto_assigned = 0;
1108 }
1109
1110 if (! allocate_filename_to_slot (dirname, filename, (unsigned int) num,
1111 with_md5))
1112 return NULL;
1113
1114 return filename;
1115 }
1116
1117 /* Calls dwarf2_directive_filename, but discards its result.
1118 Used in pseudo-op tables where the function result is ignored. */
1119
1120 void
1121 dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED)
1122 {
1123 (void) dwarf2_directive_filename ();
1124 }
1125
1126 void
1127 dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
1128 {
1129 offsetT filenum, line;
1130
1131 /* If we see two .loc directives in a row, force the first one to be
1132 output now. */
1133 if (dwarf2_loc_directive_seen)
1134 dwarf2_emit_insn (0);
1135
1136 filenum = get_absolute_expression ();
1137 SKIP_WHITESPACE ();
1138 line = get_absolute_expression ();
1139
1140 if (filenum < 1)
1141 {
1142 if (filenum != 0 || DWARF2_LINE_VERSION < 5)
1143 {
1144 as_bad (_("file number less than one"));
1145 return;
1146 }
1147 }
1148
1149 if (filenum >= (int) files_in_use || files[filenum].filename == NULL)
1150 {
1151 as_bad (_("unassigned file number %ld"), (long) filenum);
1152 return;
1153 }
1154
1155 current.filenum = filenum;
1156 current.line = line;
1157 current.discriminator = 0;
1158
1159 #ifndef NO_LISTING
1160 if (listing)
1161 {
1162 if (files[filenum].dir)
1163 {
1164 size_t dir_len = strlen (dirs[files[filenum].dir]);
1165 size_t file_len = strlen (files[filenum].filename);
1166 char *cp = XNEWVEC (char, dir_len + 1 + file_len + 1);
1167
1168 memcpy (cp, dirs[files[filenum].dir], dir_len);
1169 INSERT_DIR_SEPARATOR (cp, dir_len);
1170 memcpy (cp + dir_len + 1, files[filenum].filename, file_len);
1171 cp[dir_len + file_len + 1] = '\0';
1172 listing_source_file (cp);
1173 free (cp);
1174 }
1175 else
1176 listing_source_file (files[filenum].filename);
1177 listing_source_line (line);
1178 }
1179 #endif
1180
1181 SKIP_WHITESPACE ();
1182 if (ISDIGIT (*input_line_pointer))
1183 {
1184 current.column = get_absolute_expression ();
1185 SKIP_WHITESPACE ();
1186 }
1187
1188 while (ISALPHA (*input_line_pointer))
1189 {
1190 char *p, c;
1191 offsetT value;
1192
1193 c = get_symbol_name (& p);
1194
1195 if (strcmp (p, "basic_block") == 0)
1196 {
1197 current.flags |= DWARF2_FLAG_BASIC_BLOCK;
1198 *input_line_pointer = c;
1199 }
1200 else if (strcmp (p, "prologue_end") == 0)
1201 {
1202 current.flags |= DWARF2_FLAG_PROLOGUE_END;
1203 *input_line_pointer = c;
1204 }
1205 else if (strcmp (p, "epilogue_begin") == 0)
1206 {
1207 current.flags |= DWARF2_FLAG_EPILOGUE_BEGIN;
1208 *input_line_pointer = c;
1209 }
1210 else if (strcmp (p, "is_stmt") == 0)
1211 {
1212 (void) restore_line_pointer (c);
1213 value = get_absolute_expression ();
1214 if (value == 0)
1215 current.flags &= ~DWARF2_FLAG_IS_STMT;
1216 else if (value == 1)
1217 current.flags |= DWARF2_FLAG_IS_STMT;
1218 else
1219 {
1220 as_bad (_("is_stmt value not 0 or 1"));
1221 return;
1222 }
1223 }
1224 else if (strcmp (p, "isa") == 0)
1225 {
1226 (void) restore_line_pointer (c);
1227 value = get_absolute_expression ();
1228 if (value >= 0)
1229 current.isa = value;
1230 else
1231 {
1232 as_bad (_("isa number less than zero"));
1233 return;
1234 }
1235 }
1236 else if (strcmp (p, "discriminator") == 0)
1237 {
1238 (void) restore_line_pointer (c);
1239 value = get_absolute_expression ();
1240 if (value >= 0)
1241 current.discriminator = value;
1242 else
1243 {
1244 as_bad (_("discriminator less than zero"));
1245 return;
1246 }
1247 }
1248 else if (strcmp (p, "view") == 0)
1249 {
1250 symbolS *sym;
1251
1252 (void) restore_line_pointer (c);
1253 SKIP_WHITESPACE ();
1254
1255 if (ISDIGIT (*input_line_pointer)
1256 || *input_line_pointer == '-')
1257 {
1258 bfd_boolean force_reset = *input_line_pointer == '-';
1259
1260 value = get_absolute_expression ();
1261 if (value != 0)
1262 {
1263 as_bad (_("numeric view can only be asserted to zero"));
1264 return;
1265 }
1266 if (force_reset && force_reset_view)
1267 sym = force_reset_view;
1268 else
1269 {
1270 sym = symbol_temp_new (absolute_section, &zero_address_frag,
1271 value);
1272 if (force_reset)
1273 force_reset_view = sym;
1274 }
1275 }
1276 else
1277 {
1278 char *name = read_symbol_name ();
1279
1280 if (!name)
1281 return;
1282 sym = symbol_find_or_make (name);
1283 if (S_IS_DEFINED (sym) || symbol_equated_p (sym))
1284 {
1285 if (S_IS_VOLATILE (sym))
1286 sym = symbol_clone (sym, 1);
1287 else if (!S_CAN_BE_REDEFINED (sym))
1288 {
1289 as_bad (_("symbol `%s' is already defined"), name);
1290 return;
1291 }
1292 }
1293 S_SET_SEGMENT (sym, undefined_section);
1294 S_SET_VALUE (sym, 0);
1295 symbol_set_frag (sym, &zero_address_frag);
1296 }
1297 current.view = sym;
1298 }
1299 else
1300 {
1301 as_bad (_("unknown .loc sub-directive `%s'"), p);
1302 (void) restore_line_pointer (c);
1303 return;
1304 }
1305
1306 SKIP_WHITESPACE_AFTER_NAME ();
1307 }
1308
1309 demand_empty_rest_of_line ();
1310 dwarf2_any_loc_directive_seen = dwarf2_loc_directive_seen = TRUE;
1311 debug_type = DEBUG_NONE;
1312
1313 /* If we were given a view id, emit the row right away. */
1314 if (current.view)
1315 dwarf2_emit_insn (0);
1316 }
1317
1318 void
1319 dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED)
1320 {
1321 offsetT value = get_absolute_expression ();
1322
1323 if (value != 0 && value != 1)
1324 {
1325 as_bad (_("expected 0 or 1"));
1326 ignore_rest_of_line ();
1327 }
1328 else
1329 {
1330 dwarf2_loc_mark_labels = value != 0;
1331 demand_empty_rest_of_line ();
1332 }
1333 }
1334 \f
1335 static struct frag *
1336 first_frag_for_seg (segT seg)
1337 {
1338 return seg_info (seg)->frchainP->frch_root;
1339 }
1340
1341 static struct frag *
1342 last_frag_for_seg (segT seg)
1343 {
1344 frchainS *f = seg_info (seg)->frchainP;
1345
1346 while (f->frch_next != NULL)
1347 f = f->frch_next;
1348
1349 return f->frch_last;
1350 }
1351 \f
1352 /* Emit a single byte into the current segment. */
1353
1354 static inline void
1355 out_byte (int byte)
1356 {
1357 FRAG_APPEND_1_CHAR (byte);
1358 }
1359
1360 /* Emit a statement program opcode into the current segment. */
1361
1362 static inline void
1363 out_opcode (int opc)
1364 {
1365 out_byte (opc);
1366 }
1367
1368 /* Emit a two-byte word into the current segment. */
1369
1370 static inline void
1371 out_two (int data)
1372 {
1373 md_number_to_chars (frag_more (2), data, 2);
1374 }
1375
1376 /* Emit a four byte word into the current segment. */
1377
1378 static inline void
1379 out_four (int data)
1380 {
1381 md_number_to_chars (frag_more (4), data, 4);
1382 }
1383
1384 /* Emit an unsigned "little-endian base 128" number. */
1385
1386 static void
1387 out_uleb128 (addressT value)
1388 {
1389 output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
1390 }
1391
1392 /* Emit a signed "little-endian base 128" number. */
1393
1394 static void
1395 out_leb128 (addressT value)
1396 {
1397 output_leb128 (frag_more (sizeof_leb128 (value, 1)), value, 1);
1398 }
1399
1400 /* Emit a tuple for .debug_abbrev. */
1401
1402 static inline void
1403 out_abbrev (int name, int form)
1404 {
1405 out_uleb128 (name);
1406 out_uleb128 (form);
1407 }
1408
1409 /* Get the size of a fragment. */
1410
1411 static offsetT
1412 get_frag_fix (fragS *frag, segT seg)
1413 {
1414 frchainS *fr;
1415
1416 if (frag->fr_next)
1417 return frag->fr_fix;
1418
1419 /* If a fragment is the last in the chain, special measures must be
1420 taken to find its size before relaxation, since it may be pending
1421 on some subsegment chain. */
1422 for (fr = seg_info (seg)->frchainP; fr; fr = fr->frch_next)
1423 if (fr->frch_last == frag)
1424 return (char *) obstack_next_free (&fr->frch_obstack) - frag->fr_literal;
1425
1426 abort ();
1427 }
1428
1429 /* Set an absolute address (may result in a relocation entry). */
1430
1431 static void
1432 out_set_addr (symbolS *sym)
1433 {
1434 expressionS exp;
1435
1436 memset (&exp, 0, sizeof exp);
1437 out_opcode (DW_LNS_extended_op);
1438 out_uleb128 (sizeof_address + 1);
1439
1440 out_opcode (DW_LNE_set_address);
1441 exp.X_op = O_symbol;
1442 exp.X_add_symbol = sym;
1443 exp.X_add_number = 0;
1444 emit_expr (&exp, sizeof_address);
1445 }
1446
1447 static void scale_addr_delta (addressT *);
1448
1449 static void
1450 scale_addr_delta (addressT *addr_delta)
1451 {
1452 static int printed_this = 0;
1453 if (DWARF2_LINE_MIN_INSN_LENGTH > 1)
1454 {
1455 if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0 && !printed_this)
1456 {
1457 as_bad("unaligned opcodes detected in executable segment");
1458 printed_this = 1;
1459 }
1460 *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
1461 }
1462 }
1463
1464 /* Encode a pair of line and address skips as efficiently as possible.
1465 Note that the line skip is signed, whereas the address skip is unsigned.
1466
1467 The following two routines *must* be kept in sync. This is
1468 enforced by making emit_inc_line_addr abort if we do not emit
1469 exactly the expected number of bytes. */
1470
1471 static int
1472 size_inc_line_addr (int line_delta, addressT addr_delta)
1473 {
1474 unsigned int tmp, opcode;
1475 int len = 0;
1476
1477 /* Scale the address delta by the minimum instruction length. */
1478 scale_addr_delta (&addr_delta);
1479
1480 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
1481 We cannot use special opcodes here, since we want the end_sequence
1482 to emit the matrix entry. */
1483 if (line_delta == INT_MAX)
1484 {
1485 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
1486 len = 1;
1487 else if (addr_delta)
1488 len = 1 + sizeof_leb128 (addr_delta, 0);
1489 return len + 3;
1490 }
1491
1492 /* Bias the line delta by the base. */
1493 tmp = line_delta - DWARF2_LINE_BASE;
1494
1495 /* If the line increment is out of range of a special opcode, we
1496 must encode it with DW_LNS_advance_line. */
1497 if (tmp >= DWARF2_LINE_RANGE)
1498 {
1499 len = 1 + sizeof_leb128 (line_delta, 1);
1500 line_delta = 0;
1501 tmp = 0 - DWARF2_LINE_BASE;
1502 }
1503
1504 /* Bias the opcode by the special opcode base. */
1505 tmp += DWARF2_LINE_OPCODE_BASE;
1506
1507 /* Avoid overflow when addr_delta is large. */
1508 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
1509 {
1510 /* Try using a special opcode. */
1511 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
1512 if (opcode <= 255)
1513 return len + 1;
1514
1515 /* Try using DW_LNS_const_add_pc followed by special op. */
1516 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
1517 if (opcode <= 255)
1518 return len + 2;
1519 }
1520
1521 /* Otherwise use DW_LNS_advance_pc. */
1522 len += 1 + sizeof_leb128 (addr_delta, 0);
1523
1524 /* DW_LNS_copy or special opcode. */
1525 len += 1;
1526
1527 return len;
1528 }
1529
1530 static void
1531 emit_inc_line_addr (int line_delta, addressT addr_delta, char *p, int len)
1532 {
1533 unsigned int tmp, opcode;
1534 int need_copy = 0;
1535 char *end = p + len;
1536
1537 /* Line number sequences cannot go backward in addresses. This means
1538 we've incorrectly ordered the statements in the sequence. */
1539 gas_assert ((offsetT) addr_delta >= 0);
1540
1541 /* Scale the address delta by the minimum instruction length. */
1542 scale_addr_delta (&addr_delta);
1543
1544 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
1545 We cannot use special opcodes here, since we want the end_sequence
1546 to emit the matrix entry. */
1547 if (line_delta == INT_MAX)
1548 {
1549 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
1550 *p++ = DW_LNS_const_add_pc;
1551 else if (addr_delta)
1552 {
1553 *p++ = DW_LNS_advance_pc;
1554 p += output_leb128 (p, addr_delta, 0);
1555 }
1556
1557 *p++ = DW_LNS_extended_op;
1558 *p++ = 1;
1559 *p++ = DW_LNE_end_sequence;
1560 goto done;
1561 }
1562
1563 /* Bias the line delta by the base. */
1564 tmp = line_delta - DWARF2_LINE_BASE;
1565
1566 /* If the line increment is out of range of a special opcode, we
1567 must encode it with DW_LNS_advance_line. */
1568 if (tmp >= DWARF2_LINE_RANGE)
1569 {
1570 *p++ = DW_LNS_advance_line;
1571 p += output_leb128 (p, line_delta, 1);
1572
1573 line_delta = 0;
1574 tmp = 0 - DWARF2_LINE_BASE;
1575 need_copy = 1;
1576 }
1577
1578 /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
1579 special opcode. */
1580 if (line_delta == 0 && addr_delta == 0)
1581 {
1582 *p++ = DW_LNS_copy;
1583 goto done;
1584 }
1585
1586 /* Bias the opcode by the special opcode base. */
1587 tmp += DWARF2_LINE_OPCODE_BASE;
1588
1589 /* Avoid overflow when addr_delta is large. */
1590 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
1591 {
1592 /* Try using a special opcode. */
1593 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
1594 if (opcode <= 255)
1595 {
1596 *p++ = opcode;
1597 goto done;
1598 }
1599
1600 /* Try using DW_LNS_const_add_pc followed by special op. */
1601 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
1602 if (opcode <= 255)
1603 {
1604 *p++ = DW_LNS_const_add_pc;
1605 *p++ = opcode;
1606 goto done;
1607 }
1608 }
1609
1610 /* Otherwise use DW_LNS_advance_pc. */
1611 *p++ = DW_LNS_advance_pc;
1612 p += output_leb128 (p, addr_delta, 0);
1613
1614 if (need_copy)
1615 *p++ = DW_LNS_copy;
1616 else
1617 *p++ = tmp;
1618
1619 done:
1620 gas_assert (p == end);
1621 }
1622
1623 /* Handy routine to combine calls to the above two routines. */
1624
1625 static void
1626 out_inc_line_addr (int line_delta, addressT addr_delta)
1627 {
1628 int len = size_inc_line_addr (line_delta, addr_delta);
1629 emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
1630 }
1631
1632 /* Write out an alternative form of line and address skips using
1633 DW_LNS_fixed_advance_pc opcodes. This uses more space than the default
1634 line and address information, but it is required if linker relaxation
1635 could change the code offsets. The following two routines *must* be
1636 kept in sync. */
1637 #define ADDR_DELTA_LIMIT 50000
1638
1639 static int
1640 size_fixed_inc_line_addr (int line_delta, addressT addr_delta)
1641 {
1642 int len = 0;
1643
1644 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1645 if (line_delta != INT_MAX)
1646 len = 1 + sizeof_leb128 (line_delta, 1);
1647
1648 if (addr_delta > ADDR_DELTA_LIMIT)
1649 {
1650 /* DW_LNS_extended_op */
1651 len += 1 + sizeof_leb128 (sizeof_address + 1, 0);
1652 /* DW_LNE_set_address */
1653 len += 1 + sizeof_address;
1654 }
1655 else
1656 /* DW_LNS_fixed_advance_pc */
1657 len += 3;
1658
1659 if (line_delta == INT_MAX)
1660 /* DW_LNS_extended_op + DW_LNE_end_sequence */
1661 len += 3;
1662 else
1663 /* DW_LNS_copy */
1664 len += 1;
1665
1666 return len;
1667 }
1668
1669 static void
1670 emit_fixed_inc_line_addr (int line_delta, addressT addr_delta, fragS *frag,
1671 char *p, int len)
1672 {
1673 expressionS *pexp;
1674 char *end = p + len;
1675
1676 /* Line number sequences cannot go backward in addresses. This means
1677 we've incorrectly ordered the statements in the sequence. */
1678 gas_assert ((offsetT) addr_delta >= 0);
1679
1680 /* Verify that we have kept in sync with size_fixed_inc_line_addr. */
1681 gas_assert (len == size_fixed_inc_line_addr (line_delta, addr_delta));
1682
1683 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1684 if (line_delta != INT_MAX)
1685 {
1686 *p++ = DW_LNS_advance_line;
1687 p += output_leb128 (p, line_delta, 1);
1688 }
1689
1690 pexp = symbol_get_value_expression (frag->fr_symbol);
1691
1692 /* The DW_LNS_fixed_advance_pc opcode has a 2-byte operand so it can
1693 advance the address by at most 64K. Linker relaxation (without
1694 which this function would not be used) could change the operand by
1695 an unknown amount. If the address increment is getting close to
1696 the limit, just reset the address. */
1697 if (addr_delta > ADDR_DELTA_LIMIT)
1698 {
1699 symbolS *to_sym;
1700 expressionS exp;
1701
1702 memset (&exp, 0, sizeof exp);
1703 gas_assert (pexp->X_op == O_subtract);
1704 to_sym = pexp->X_add_symbol;
1705
1706 *p++ = DW_LNS_extended_op;
1707 p += output_leb128 (p, sizeof_address + 1, 0);
1708 *p++ = DW_LNE_set_address;
1709 exp.X_op = O_symbol;
1710 exp.X_add_symbol = to_sym;
1711 exp.X_add_number = 0;
1712 emit_expr_fix (&exp, sizeof_address, frag, p, TC_PARSE_CONS_RETURN_NONE);
1713 p += sizeof_address;
1714 }
1715 else
1716 {
1717 *p++ = DW_LNS_fixed_advance_pc;
1718 emit_expr_fix (pexp, 2, frag, p, TC_PARSE_CONS_RETURN_NONE);
1719 p += 2;
1720 }
1721
1722 if (line_delta == INT_MAX)
1723 {
1724 *p++ = DW_LNS_extended_op;
1725 *p++ = 1;
1726 *p++ = DW_LNE_end_sequence;
1727 }
1728 else
1729 *p++ = DW_LNS_copy;
1730
1731 gas_assert (p == end);
1732 }
1733
1734 /* Generate a variant frag that we can use to relax address/line
1735 increments between fragments of the target segment. */
1736
1737 static void
1738 relax_inc_line_addr (int line_delta, symbolS *to_sym, symbolS *from_sym)
1739 {
1740 expressionS exp;
1741 int max_chars;
1742
1743 memset (&exp, 0, sizeof exp);
1744 exp.X_op = O_subtract;
1745 exp.X_add_symbol = to_sym;
1746 exp.X_op_symbol = from_sym;
1747 exp.X_add_number = 0;
1748
1749 /* The maximum size of the frag is the line delta with a maximum
1750 sized address delta. */
1751 if (DWARF2_USE_FIXED_ADVANCE_PC)
1752 max_chars = size_fixed_inc_line_addr (line_delta,
1753 -DWARF2_LINE_MIN_INSN_LENGTH);
1754 else
1755 max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
1756
1757 frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
1758 make_expr_symbol (&exp), line_delta, NULL);
1759 }
1760
1761 /* The function estimates the size of a rs_dwarf2dbg variant frag
1762 based on the current values of the symbols. It is called before
1763 the relaxation loop. We set fr_subtype to the expected length. */
1764
1765 int
1766 dwarf2dbg_estimate_size_before_relax (fragS *frag)
1767 {
1768 offsetT addr_delta;
1769 int size;
1770
1771 addr_delta = resolve_symbol_value (frag->fr_symbol);
1772 if (DWARF2_USE_FIXED_ADVANCE_PC)
1773 size = size_fixed_inc_line_addr (frag->fr_offset, addr_delta);
1774 else
1775 size = size_inc_line_addr (frag->fr_offset, addr_delta);
1776
1777 frag->fr_subtype = size;
1778
1779 return size;
1780 }
1781
1782 /* This function relaxes a rs_dwarf2dbg variant frag based on the
1783 current values of the symbols. fr_subtype is the current length
1784 of the frag. This returns the change in frag length. */
1785
1786 int
1787 dwarf2dbg_relax_frag (fragS *frag)
1788 {
1789 int old_size, new_size;
1790
1791 old_size = frag->fr_subtype;
1792 new_size = dwarf2dbg_estimate_size_before_relax (frag);
1793
1794 return new_size - old_size;
1795 }
1796
1797 /* This function converts a rs_dwarf2dbg variant frag into a normal
1798 fill frag. This is called after all relaxation has been done.
1799 fr_subtype will be the desired length of the frag. */
1800
1801 void
1802 dwarf2dbg_convert_frag (fragS *frag)
1803 {
1804 offsetT addr_diff;
1805
1806 if (DWARF2_USE_FIXED_ADVANCE_PC)
1807 {
1808 /* If linker relaxation is enabled then the distance between the two
1809 symbols in the frag->fr_symbol expression might change. Hence we
1810 cannot rely upon the value computed by resolve_symbol_value.
1811 Instead we leave the expression unfinalized and allow
1812 emit_fixed_inc_line_addr to create a fixup (which later becomes a
1813 relocation) that will allow the linker to correctly compute the
1814 actual address difference. We have to use a fixed line advance for
1815 this as we cannot (easily) relocate leb128 encoded values. */
1816 int saved_finalize_syms = finalize_syms;
1817
1818 finalize_syms = 0;
1819 addr_diff = resolve_symbol_value (frag->fr_symbol);
1820 finalize_syms = saved_finalize_syms;
1821 }
1822 else
1823 addr_diff = resolve_symbol_value (frag->fr_symbol);
1824
1825 /* fr_var carries the max_chars that we created the fragment with.
1826 fr_subtype carries the current expected length. We must, of
1827 course, have allocated enough memory earlier. */
1828 gas_assert (frag->fr_var >= (int) frag->fr_subtype);
1829
1830 if (DWARF2_USE_FIXED_ADVANCE_PC)
1831 emit_fixed_inc_line_addr (frag->fr_offset, addr_diff, frag,
1832 frag->fr_literal + frag->fr_fix,
1833 frag->fr_subtype);
1834 else
1835 emit_inc_line_addr (frag->fr_offset, addr_diff,
1836 frag->fr_literal + frag->fr_fix, frag->fr_subtype);
1837
1838 frag->fr_fix += frag->fr_subtype;
1839 frag->fr_type = rs_fill;
1840 frag->fr_var = 0;
1841 frag->fr_offset = 0;
1842 }
1843
1844 /* Generate .debug_line content for the chain of line number entries
1845 beginning at E, for segment SEG. */
1846
1847 static void
1848 process_entries (segT seg, struct line_entry *e)
1849 {
1850 unsigned filenum = 1;
1851 unsigned line = 1;
1852 unsigned column = 0;
1853 unsigned isa = 0;
1854 unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
1855 fragS *last_frag = NULL, *frag;
1856 addressT last_frag_ofs = 0, frag_ofs;
1857 symbolS *last_lab = NULL, *lab;
1858 struct line_entry *next;
1859
1860 if (flag_dwarf_sections)
1861 {
1862 char * name;
1863 const char * sec_name;
1864
1865 /* Switch to the relevant sub-section before we start to emit
1866 the line number table.
1867
1868 FIXME: These sub-sections do not have a normal Line Number
1869 Program Header, thus strictly speaking they are not valid
1870 DWARF sections. Unfortunately the DWARF standard assumes
1871 a one-to-one relationship between compilation units and
1872 line number tables. Thus we have to have a .debug_line
1873 section, as well as our sub-sections, and we have to ensure
1874 that all of the sub-sections are merged into a proper
1875 .debug_line section before a debugger sees them. */
1876
1877 sec_name = bfd_section_name (seg);
1878 if (strcmp (sec_name, ".text") != 0)
1879 {
1880 name = concat (".debug_line", sec_name, (char *) NULL);
1881 subseg_set (subseg_get (name, FALSE), 0);
1882 }
1883 else
1884 /* Don't create a .debug_line.text section -
1885 that is redundant. Instead just switch back to the
1886 normal .debug_line section. */
1887 subseg_set (subseg_get (".debug_line", FALSE), 0);
1888 }
1889
1890 do
1891 {
1892 int line_delta;
1893
1894 if (filenum != e->loc.filenum)
1895 {
1896 filenum = e->loc.filenum;
1897 out_opcode (DW_LNS_set_file);
1898 out_uleb128 (filenum);
1899 }
1900
1901 if (column != e->loc.column)
1902 {
1903 column = e->loc.column;
1904 out_opcode (DW_LNS_set_column);
1905 out_uleb128 (column);
1906 }
1907
1908 if (e->loc.discriminator != 0)
1909 {
1910 out_opcode (DW_LNS_extended_op);
1911 out_leb128 (1 + sizeof_leb128 (e->loc.discriminator, 0));
1912 out_opcode (DW_LNE_set_discriminator);
1913 out_uleb128 (e->loc.discriminator);
1914 }
1915
1916 if (isa != e->loc.isa)
1917 {
1918 isa = e->loc.isa;
1919 out_opcode (DW_LNS_set_isa);
1920 out_uleb128 (isa);
1921 }
1922
1923 if ((e->loc.flags ^ flags) & DWARF2_FLAG_IS_STMT)
1924 {
1925 flags = e->loc.flags;
1926 out_opcode (DW_LNS_negate_stmt);
1927 }
1928
1929 if (e->loc.flags & DWARF2_FLAG_BASIC_BLOCK)
1930 out_opcode (DW_LNS_set_basic_block);
1931
1932 if (e->loc.flags & DWARF2_FLAG_PROLOGUE_END)
1933 out_opcode (DW_LNS_set_prologue_end);
1934
1935 if (e->loc.flags & DWARF2_FLAG_EPILOGUE_BEGIN)
1936 out_opcode (DW_LNS_set_epilogue_begin);
1937
1938 /* Don't try to optimize away redundant entries; gdb wants two
1939 entries for a function where the code starts on the same line as
1940 the {, and there's no way to identify that case here. Trust gcc
1941 to optimize appropriately. */
1942 line_delta = e->loc.line - line;
1943 lab = e->label;
1944 frag = symbol_get_frag (lab);
1945 frag_ofs = S_GET_VALUE (lab);
1946
1947 if (last_frag == NULL
1948 || (e->loc.view == force_reset_view && force_reset_view
1949 /* If we're going to reset the view, but we know we're
1950 advancing the PC, we don't have to force with
1951 set_address. We know we do when we're at the same
1952 address of the same frag, and we know we might when
1953 we're in the beginning of a frag, and we were at the
1954 end of the previous frag. */
1955 && (frag == last_frag
1956 ? (last_frag_ofs == frag_ofs)
1957 : (frag_ofs == 0
1958 && ((offsetT)last_frag_ofs
1959 >= get_frag_fix (last_frag, seg))))))
1960 {
1961 out_set_addr (lab);
1962 out_inc_line_addr (line_delta, 0);
1963 }
1964 else if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1965 out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
1966 else
1967 relax_inc_line_addr (line_delta, lab, last_lab);
1968
1969 line = e->loc.line;
1970 last_lab = lab;
1971 last_frag = frag;
1972 last_frag_ofs = frag_ofs;
1973
1974 next = e->next;
1975 free (e);
1976 e = next;
1977 }
1978 while (e);
1979
1980 /* Emit a DW_LNE_end_sequence for the end of the section. */
1981 frag = last_frag_for_seg (seg);
1982 frag_ofs = get_frag_fix (frag, seg);
1983 if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1984 out_inc_line_addr (INT_MAX, frag_ofs - last_frag_ofs);
1985 else
1986 {
1987 lab = symbol_temp_new (seg, frag, frag_ofs);
1988 relax_inc_line_addr (INT_MAX, lab, last_lab);
1989 }
1990 }
1991
1992 /* Switch to LINE_STR_SEG and output the given STR. Return the
1993 symbol pointing to the new string in the section. */
1994
1995 static symbolS *
1996 add_line_strp (segT line_str_seg, const char *str)
1997 {
1998 char *cp;
1999 size_t size;
2000 symbolS *sym;
2001
2002 subseg_set (line_str_seg, 0);
2003
2004 sym = symbol_temp_new_now_octets ();
2005
2006 size = strlen (str) + 1;
2007 cp = frag_more (size);
2008 memcpy (cp, str, size);
2009
2010 return sym;
2011 }
2012
2013
2014 /* Emit the directory and file tables for .debug_line. */
2015
2016 static void
2017 out_dir_and_file_list (segT line_seg, int sizeof_offset)
2018 {
2019 size_t size;
2020 const char *dir;
2021 char *cp;
2022 unsigned int i;
2023 bfd_boolean emit_md5 = FALSE;
2024 bfd_boolean emit_timestamps = TRUE;
2025 bfd_boolean emit_filesize = TRUE;
2026 segT line_str_seg = NULL;
2027 symbolS *line_strp;
2028
2029 /* Output the Directory Table. */
2030 if (DWARF2_LINE_VERSION >= 5)
2031 {
2032 /* We only have one column in the directory table. */
2033 out_byte (1);
2034
2035 /* Describe the purpose and format of the column. */
2036 out_uleb128 (DW_LNCT_path);
2037 /* Store these strings in the .debug_line_str section so they
2038 can be shared. */
2039 out_uleb128 (DW_FORM_line_strp);
2040
2041 /* Now state how many rows there are in the table. We need at
2042 least 1 if there is one or more file names to store the
2043 "working directory". */
2044 if (dirs_in_use == 0 && files_in_use > 0)
2045 out_uleb128 (1);
2046 else
2047 out_uleb128 (dirs_in_use);
2048 }
2049
2050 /* Emit directory list. */
2051 if (DWARF2_LINE_VERSION >= 5 && (dirs_in_use > 0 || files_in_use > 0))
2052 {
2053 line_str_seg = subseg_new (".debug_line_str", 0);
2054 bfd_set_section_flags (line_str_seg,
2055 SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS
2056 | SEC_MERGE | SEC_STRINGS);
2057 line_str_seg->entsize = 1;
2058
2059 /* DWARF5 uses slot zero, but that is only set explicitly
2060 using a .file 0 directive. If that isn't used, but dir
2061 one is used, then use that as main file directory.
2062 Otherwise use pwd as main file directory. */
2063 if (dirs_in_use > 0 && dirs != NULL && dirs[0] != NULL)
2064 dir = remap_debug_filename (dirs[0]);
2065 else if (dirs_in_use > 1 && dirs != NULL && dirs[1] != NULL)
2066 dir = remap_debug_filename (dirs[1]);
2067 else
2068 dir = remap_debug_filename (getpwd ());
2069
2070 line_strp = add_line_strp (line_str_seg, dir);
2071 subseg_set (line_seg, 0);
2072 TC_DWARF2_EMIT_OFFSET (line_strp, sizeof_offset);
2073 }
2074 for (i = 1; i < dirs_in_use; ++i)
2075 {
2076 dir = remap_debug_filename (dirs[i]);
2077 if (DWARF2_LINE_VERSION < 5)
2078 {
2079 size = strlen (dir) + 1;
2080 cp = frag_more (size);
2081 memcpy (cp, dir, size);
2082 }
2083 else
2084 {
2085 line_strp = add_line_strp (line_str_seg, dir);
2086 subseg_set (line_seg, 0);
2087 TC_DWARF2_EMIT_OFFSET (line_strp, sizeof_offset);
2088 }
2089 }
2090
2091 if (DWARF2_LINE_VERSION < 5)
2092 /* Terminate it. */
2093 out_byte ('\0');
2094
2095 /* Output the File Name Table. */
2096 if (DWARF2_LINE_VERSION >= 5)
2097 {
2098 unsigned int columns = 4;
2099
2100 if (((unsigned long) DWARF2_FILE_TIME_NAME ("", "")) == -1UL)
2101 {
2102 emit_timestamps = FALSE;
2103 -- columns;
2104 }
2105
2106 if (DWARF2_FILE_SIZE_NAME ("", "") == -1)
2107 {
2108 emit_filesize = FALSE;
2109 -- columns;
2110 }
2111
2112 for (i = 0; i < files_in_use; ++i)
2113 if (files[i].md5[0] != 0)
2114 break;
2115 if (i < files_in_use)
2116 {
2117 emit_md5 = TRUE;
2118 ++ columns;
2119 }
2120
2121 /* The number of format entries to follow. */
2122 out_byte (columns);
2123 /* The format of the file name. */
2124 out_uleb128 (DW_LNCT_path);
2125 /* Store these strings in the .debug_line_str section so they
2126 can be shared. */
2127 out_uleb128 (DW_FORM_line_strp);
2128
2129 /* The format of the directory index. */
2130 out_uleb128 (DW_LNCT_directory_index);
2131 out_uleb128 (DW_FORM_udata);
2132
2133 if (emit_timestamps)
2134 {
2135 /* The format of the timestamp. */
2136 out_uleb128 (DW_LNCT_timestamp);
2137 out_uleb128 (DW_FORM_udata);
2138 }
2139
2140 if (emit_filesize)
2141 {
2142 /* The format of the file size. */
2143 out_uleb128 (DW_LNCT_size);
2144 out_uleb128 (DW_FORM_udata);
2145 }
2146
2147 if (emit_md5)
2148 {
2149 /* The format of the MD5 sum. */
2150 out_uleb128 (DW_LNCT_MD5);
2151 out_uleb128 (DW_FORM_data16);
2152 }
2153
2154 /* The number of entries in the table. */
2155 out_uleb128 (files_in_use);
2156 }
2157
2158 for (i = DWARF2_LINE_VERSION > 4 ? 0 : 1; i < files_in_use; ++i)
2159 {
2160 const char *fullfilename;
2161
2162 if (files[i].filename == NULL)
2163 {
2164 /* Prevent a crash later, particularly for file 1. DWARF5
2165 uses slot zero, but that is only set explicitly using a
2166 .file 0 directive. If that isn't used, but file 1 is,
2167 then use that as main file name. */
2168 if (DWARF2_LINE_VERSION >= 5 && i == 0 && files_in_use >= 1)
2169 files[0].filename = files[1].filename;
2170 else
2171 files[i].filename = "";
2172 if (DWARF2_LINE_VERSION < 5 || i != 0)
2173 {
2174 as_bad (_("unassigned file number %ld"), (long) i);
2175 continue;
2176 }
2177 }
2178
2179 fullfilename = DWARF2_FILE_NAME (files[i].filename,
2180 files[i].dir ? dirs [files [i].dir] : "");
2181 if (DWARF2_LINE_VERSION < 5)
2182 {
2183 size = strlen (fullfilename) + 1;
2184 cp = frag_more (size);
2185 memcpy (cp, fullfilename, size);
2186 }
2187 else
2188 {
2189 line_strp = add_line_strp (line_str_seg, fullfilename);
2190 subseg_set (line_seg, 0);
2191 TC_DWARF2_EMIT_OFFSET (line_strp, sizeof_offset);
2192 }
2193
2194 /* Directory number. */
2195 out_uleb128 (files[i].dir);
2196
2197 /* Output the last modification timestamp. */
2198 if (emit_timestamps)
2199 {
2200 offsetT timestamp;
2201
2202 timestamp = DWARF2_FILE_TIME_NAME (files[i].filename,
2203 files[i].dir ? dirs [files [i].dir] : "");
2204 if (timestamp == -1)
2205 timestamp = 0;
2206 out_uleb128 (timestamp);
2207 }
2208
2209 /* Output the filesize. */
2210 if (emit_filesize)
2211 {
2212 offsetT filesize;
2213 filesize = DWARF2_FILE_SIZE_NAME (files[i].filename,
2214 files[i].dir ? dirs [files [i].dir] : "");
2215 if (filesize == -1)
2216 filesize = 0;
2217 out_uleb128 (filesize);
2218 }
2219
2220 /* Output the md5 sum. */
2221 if (emit_md5)
2222 {
2223 int b;
2224
2225 for (b = 0; b < NUM_MD5_BYTES; b++)
2226 out_byte (files[i].md5[b]);
2227 }
2228 }
2229
2230 if (DWARF2_LINE_VERSION < 5)
2231 /* Terminate filename list. */
2232 out_byte (0);
2233 }
2234
2235 /* Switch to SEC and output a header length field. Return the size of
2236 offsets used in SEC. The caller must set EXPR->X_add_symbol value
2237 to the end of the section. EXPR->X_add_number will be set to the
2238 negative size of the header. */
2239
2240 static int
2241 out_header (asection *sec, expressionS *exp)
2242 {
2243 symbolS *start_sym;
2244 symbolS *end_sym;
2245
2246 subseg_set (sec, 0);
2247
2248 if (flag_dwarf_sections)
2249 {
2250 /* If we are going to put the start and end symbols in different
2251 sections, then we need real symbols, not just fake, local ones. */
2252 frag_now_fix ();
2253 start_sym = symbol_make (".Ldebug_line_start");
2254 end_sym = symbol_make (".Ldebug_line_end");
2255 symbol_set_value_now (start_sym);
2256 }
2257 else
2258 {
2259 start_sym = symbol_temp_new_now_octets ();
2260 end_sym = symbol_temp_make ();
2261 }
2262
2263 /* Total length of the information. */
2264 exp->X_op = O_subtract;
2265 exp->X_add_symbol = end_sym;
2266 exp->X_op_symbol = start_sym;
2267
2268 switch (DWARF2_FORMAT (sec))
2269 {
2270 case dwarf2_format_32bit:
2271 exp->X_add_number = -4;
2272 emit_expr (exp, 4);
2273 return 4;
2274
2275 case dwarf2_format_64bit:
2276 exp->X_add_number = -12;
2277 out_four (-1);
2278 emit_expr (exp, 8);
2279 return 8;
2280
2281 case dwarf2_format_64bit_irix:
2282 exp->X_add_number = -8;
2283 emit_expr (exp, 8);
2284 return 8;
2285 }
2286
2287 as_fatal (_("internal error: unknown dwarf2 format"));
2288 return 0;
2289 }
2290
2291 /* Emit the collected .debug_line data. */
2292
2293 static void
2294 out_debug_line (segT line_seg)
2295 {
2296 expressionS exp;
2297 symbolS *prologue_start, *prologue_end;
2298 symbolS *line_end;
2299 struct line_seg *s;
2300 int sizeof_offset;
2301
2302 memset (&exp, 0, sizeof exp);
2303 sizeof_offset = out_header (line_seg, &exp);
2304 line_end = exp.X_add_symbol;
2305
2306 /* Version. */
2307 out_two (DWARF2_LINE_VERSION);
2308
2309 if (DWARF2_LINE_VERSION >= 5)
2310 {
2311 out_byte (sizeof_address);
2312 out_byte (0); /* Segment Selector size. */
2313 }
2314 /* Length of the prologue following this length. */
2315 prologue_start = symbol_temp_make ();
2316 prologue_end = symbol_temp_make ();
2317 exp.X_op = O_subtract;
2318 exp.X_add_symbol = prologue_end;
2319 exp.X_op_symbol = prologue_start;
2320 exp.X_add_number = 0;
2321 emit_expr (&exp, sizeof_offset);
2322 symbol_set_value_now (prologue_start);
2323
2324 /* Parameters of the state machine. */
2325 out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
2326 if (DWARF2_LINE_VERSION >= 4)
2327 out_byte (DWARF2_LINE_MAX_OPS_PER_INSN);
2328 out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
2329 out_byte (DWARF2_LINE_BASE);
2330 out_byte (DWARF2_LINE_RANGE);
2331 out_byte (DWARF2_LINE_OPCODE_BASE);
2332
2333 /* Standard opcode lengths. */
2334 out_byte (0); /* DW_LNS_copy */
2335 out_byte (1); /* DW_LNS_advance_pc */
2336 out_byte (1); /* DW_LNS_advance_line */
2337 out_byte (1); /* DW_LNS_set_file */
2338 out_byte (1); /* DW_LNS_set_column */
2339 out_byte (0); /* DW_LNS_negate_stmt */
2340 out_byte (0); /* DW_LNS_set_basic_block */
2341 out_byte (0); /* DW_LNS_const_add_pc */
2342 out_byte (1); /* DW_LNS_fixed_advance_pc */
2343 out_byte (0); /* DW_LNS_set_prologue_end */
2344 out_byte (0); /* DW_LNS_set_epilogue_begin */
2345 out_byte (1); /* DW_LNS_set_isa */
2346 /* We have emitted 12 opcode lengths, so make that this
2347 matches up to the opcode base value we have been using. */
2348 gas_assert (DWARF2_LINE_OPCODE_BASE == 13);
2349
2350 out_dir_and_file_list (line_seg, sizeof_offset);
2351
2352 symbol_set_value_now (prologue_end);
2353
2354 /* For each section, emit a statement program. */
2355 for (s = all_segs; s; s = s->next)
2356 /* Paranoia - this check should have already have
2357 been handled in dwarf2_gen_line_info_1(). */
2358 if (SEG_NORMAL (s->seg))
2359 process_entries (s->seg, s->head->head);
2360
2361 if (flag_dwarf_sections)
2362 /* We have to switch to the special .debug_line_end section
2363 before emitting the end-of-debug_line symbol. The linker
2364 script arranges for this section to be placed after all the
2365 (potentially garbage collected) .debug_line.<foo> sections.
2366 This section contains the line_end symbol which is used to
2367 compute the size of the linked .debug_line section, as seen
2368 in the DWARF Line Number header. */
2369 subseg_set (subseg_get (".debug_line_end", FALSE), 0);
2370
2371 symbol_set_value_now (line_end);
2372 }
2373
2374 static void
2375 out_debug_ranges (segT ranges_seg, symbolS **ranges_sym)
2376 {
2377 unsigned int addr_size = sizeof_address;
2378 struct line_seg *s;
2379 expressionS exp;
2380 unsigned int i;
2381
2382 memset (&exp, 0, sizeof exp);
2383 subseg_set (ranges_seg, 0);
2384
2385 /* For DW_AT_ranges to point at (there is no header, so really start
2386 of section, but see out_debug_rnglists). */
2387 *ranges_sym = symbol_temp_new_now_octets ();
2388
2389 /* Base Address Entry. */
2390 for (i = 0; i < addr_size; i++)
2391 out_byte (0xff);
2392 for (i = 0; i < addr_size; i++)
2393 out_byte (0);
2394
2395 /* Range List Entry. */
2396 for (s = all_segs; s; s = s->next)
2397 {
2398 fragS *frag;
2399 symbolS *beg, *end;
2400
2401 frag = first_frag_for_seg (s->seg);
2402 beg = symbol_temp_new (s->seg, frag, 0);
2403 s->text_start = beg;
2404
2405 frag = last_frag_for_seg (s->seg);
2406 end = symbol_temp_new (s->seg, frag, get_frag_fix (frag, s->seg));
2407 s->text_end = end;
2408
2409 exp.X_op = O_symbol;
2410 exp.X_add_symbol = beg;
2411 exp.X_add_number = 0;
2412 emit_expr (&exp, addr_size);
2413
2414 exp.X_op = O_symbol;
2415 exp.X_add_symbol = end;
2416 exp.X_add_number = 0;
2417 emit_expr (&exp, addr_size);
2418 }
2419
2420 /* End of Range Entry. */
2421 for (i = 0; i < addr_size; i++)
2422 out_byte (0);
2423 for (i = 0; i < addr_size; i++)
2424 out_byte (0);
2425 }
2426
2427 static void
2428 out_debug_rnglists (segT ranges_seg, symbolS **ranges_sym)
2429 {
2430 expressionS exp;
2431 symbolS *ranges_end;
2432 struct line_seg *s;
2433
2434 /* Unit length. */
2435 memset (&exp, 0, sizeof exp);
2436 out_header (ranges_seg, &exp);
2437 ranges_end = exp.X_add_symbol;
2438
2439 out_two (DWARF2_RNGLISTS_VERSION);
2440 out_byte (sizeof_address);
2441 out_byte (0); /* Segment Selector size. */
2442 out_four (0); /* Offset entry count. */
2443
2444 /* For DW_AT_ranges to point at (must be after the header). */
2445 *ranges_sym = symbol_temp_new_now_octets ();
2446
2447 for (s = all_segs; s; s = s->next)
2448 {
2449 fragS *frag;
2450 symbolS *beg, *end;
2451
2452 out_byte (DW_RLE_start_length);
2453
2454 frag = first_frag_for_seg (s->seg);
2455 beg = symbol_temp_new (s->seg, frag, 0);
2456 s->text_start = beg;
2457
2458 frag = last_frag_for_seg (s->seg);
2459 end = symbol_temp_new (s->seg, frag, get_frag_fix (frag, s->seg));
2460 s->text_end = end;
2461
2462 exp.X_op = O_symbol;
2463 exp.X_add_symbol = beg;
2464 exp.X_add_number = 0;
2465 emit_expr (&exp, sizeof_address);
2466
2467 exp.X_op = O_symbol;
2468 exp.X_add_symbol = end;
2469 exp.X_add_number = 0;
2470 emit_leb128_expr (&exp, 0);
2471 }
2472
2473 out_byte (DW_RLE_end_of_list);
2474
2475 symbol_set_value_now (ranges_end);
2476 }
2477
2478 /* Emit data for .debug_aranges. */
2479
2480 static void
2481 out_debug_aranges (segT aranges_seg, segT info_seg)
2482 {
2483 unsigned int addr_size = sizeof_address;
2484 offsetT size;
2485 struct line_seg *s;
2486 expressionS exp;
2487 symbolS *aranges_end;
2488 char *p;
2489 int sizeof_offset;
2490
2491 memset (&exp, 0, sizeof exp);
2492 sizeof_offset = out_header (aranges_seg, &exp);
2493 aranges_end = exp.X_add_symbol;
2494 size = -exp.X_add_number;
2495
2496 /* Version. */
2497 out_two (DWARF2_ARANGES_VERSION);
2498 size += 2;
2499
2500 /* Offset to .debug_info. */
2501 TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), sizeof_offset);
2502 size += sizeof_offset;
2503
2504 /* Size of an address (offset portion). */
2505 out_byte (addr_size);
2506 size++;
2507
2508 /* Size of a segment descriptor. */
2509 out_byte (0);
2510 size++;
2511
2512 /* Align the header. */
2513 while ((size++ % (2 * addr_size)) > 0)
2514 out_byte (0);
2515
2516 for (s = all_segs; s; s = s->next)
2517 {
2518 fragS *frag;
2519 symbolS *beg, *end;
2520
2521 frag = first_frag_for_seg (s->seg);
2522 beg = symbol_temp_new (s->seg, frag, 0);
2523 s->text_start = beg;
2524
2525 frag = last_frag_for_seg (s->seg);
2526 end = symbol_temp_new (s->seg, frag, get_frag_fix (frag, s->seg));
2527 s->text_end = end;
2528
2529 exp.X_op = O_symbol;
2530 exp.X_add_symbol = beg;
2531 exp.X_add_number = 0;
2532 emit_expr (&exp, addr_size);
2533
2534 exp.X_op = O_subtract;
2535 exp.X_add_symbol = end;
2536 exp.X_op_symbol = beg;
2537 exp.X_add_number = 0;
2538 emit_expr (&exp, addr_size);
2539 }
2540
2541 p = frag_more (2 * addr_size);
2542 md_number_to_chars (p, 0, addr_size);
2543 md_number_to_chars (p + addr_size, 0, addr_size);
2544
2545 symbol_set_value_now (aranges_end);
2546 }
2547
2548 /* Emit data for .debug_abbrev. Note that this must be kept in
2549 sync with out_debug_info below. */
2550
2551 static void
2552 out_debug_abbrev (segT abbrev_seg,
2553 segT info_seg ATTRIBUTE_UNUSED,
2554 segT line_seg ATTRIBUTE_UNUSED)
2555 {
2556 int secoff_form;
2557 subseg_set (abbrev_seg, 0);
2558
2559 out_uleb128 (1);
2560 out_uleb128 (DW_TAG_compile_unit);
2561 out_byte (DW_CHILDREN_no);
2562 if (DWARF2_VERSION < 4)
2563 {
2564 if (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit)
2565 secoff_form = DW_FORM_data4;
2566 else
2567 secoff_form = DW_FORM_data8;
2568 }
2569 else
2570 secoff_form = DW_FORM_sec_offset;
2571 out_abbrev (DW_AT_stmt_list, secoff_form);
2572 if (all_segs->next == NULL)
2573 {
2574 out_abbrev (DW_AT_low_pc, DW_FORM_addr);
2575 if (DWARF2_VERSION < 4)
2576 out_abbrev (DW_AT_high_pc, DW_FORM_addr);
2577 else
2578 out_abbrev (DW_AT_high_pc, DW_FORM_udata);
2579 }
2580 else
2581 out_abbrev (DW_AT_ranges, secoff_form);
2582 out_abbrev (DW_AT_name, DW_FORM_strp);
2583 out_abbrev (DW_AT_comp_dir, DW_FORM_strp);
2584 out_abbrev (DW_AT_producer, DW_FORM_strp);
2585 out_abbrev (DW_AT_language, DW_FORM_data2);
2586 out_abbrev (0, 0);
2587
2588 /* Terminate the abbreviations for this compilation unit. */
2589 out_byte (0);
2590 }
2591
2592 /* Emit a description of this compilation unit for .debug_info. */
2593
2594 static void
2595 out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg,
2596 symbolS *ranges_sym, symbolS *name_sym,
2597 symbolS *comp_dir_sym, symbolS *producer_sym)
2598 {
2599 expressionS exp;
2600 symbolS *info_end;
2601 int sizeof_offset;
2602
2603 memset (&exp, 0, sizeof exp);
2604 sizeof_offset = out_header (info_seg, &exp);
2605 info_end = exp.X_add_symbol;
2606
2607 /* DWARF version. */
2608 out_two (DWARF2_VERSION);
2609
2610 if (DWARF2_VERSION < 5)
2611 {
2612 /* .debug_abbrev offset */
2613 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
2614 }
2615 else
2616 {
2617 /* unit (header) type */
2618 out_byte (DW_UT_compile);
2619 }
2620
2621 /* Target address size. */
2622 out_byte (sizeof_address);
2623
2624 if (DWARF2_VERSION >= 5)
2625 {
2626 /* .debug_abbrev offset */
2627 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
2628 }
2629
2630 /* DW_TAG_compile_unit DIE abbrev */
2631 out_uleb128 (1);
2632
2633 /* DW_AT_stmt_list */
2634 TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg),
2635 (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit
2636 ? 4 : 8));
2637
2638 /* These two attributes are emitted if all of the code is contiguous. */
2639 if (all_segs->next == NULL)
2640 {
2641 /* DW_AT_low_pc */
2642 exp.X_op = O_symbol;
2643 exp.X_add_symbol = all_segs->text_start;
2644 exp.X_add_number = 0;
2645 emit_expr (&exp, sizeof_address);
2646
2647 /* DW_AT_high_pc */
2648 if (DWARF2_VERSION < 4)
2649 exp.X_op = O_symbol;
2650 else
2651 {
2652 exp.X_op = O_subtract;
2653 exp.X_op_symbol = all_segs->text_start;
2654 }
2655 exp.X_add_symbol = all_segs->text_end;
2656 exp.X_add_number = 0;
2657 if (DWARF2_VERSION < 4)
2658 emit_expr (&exp, sizeof_address);
2659 else
2660 emit_leb128_expr (&exp, 0);
2661 }
2662 else
2663 {
2664 /* This attribute is emitted if the code is disjoint. */
2665 /* DW_AT_ranges. */
2666 TC_DWARF2_EMIT_OFFSET (ranges_sym, sizeof_offset);
2667 }
2668
2669 /* DW_AT_name, DW_AT_comp_dir and DW_AT_producer. Symbols in .debug_str
2670 setup in out_debug_str below. */
2671 TC_DWARF2_EMIT_OFFSET (name_sym, sizeof_offset);
2672 TC_DWARF2_EMIT_OFFSET (comp_dir_sym, sizeof_offset);
2673 TC_DWARF2_EMIT_OFFSET (producer_sym, sizeof_offset);
2674
2675 /* DW_AT_language. Yes, this is probably not really MIPS, but the
2676 dwarf2 draft has no standard code for assembler. */
2677 out_two (DW_LANG_Mips_Assembler);
2678
2679 symbol_set_value_now (info_end);
2680 }
2681
2682 /* Emit the three debug strings needed in .debug_str and setup symbols
2683 to them for use in out_debug_info. */
2684 static void
2685 out_debug_str (segT str_seg, symbolS **name_sym, symbolS **comp_dir_sym,
2686 symbolS **producer_sym)
2687 {
2688 char producer[128];
2689 const char *comp_dir;
2690 const char *dirname;
2691 char *p;
2692 int len;
2693 int first_file = DWARF2_LINE_VERSION > 4 ? 0 : 1;
2694
2695 subseg_set (str_seg, 0);
2696
2697 /* DW_AT_name. We don't have the actual file name that was present
2698 on the command line, so assume files[first_file] is the main input file.
2699 We're not supposed to get called unless at least one line number
2700 entry was emitted, so this should always be defined. */
2701 *name_sym = symbol_temp_new_now_octets ();
2702 if (files_in_use == 0)
2703 abort ();
2704 if (files[first_file].dir)
2705 {
2706 dirname = remap_debug_filename (dirs[files[first_file].dir]);
2707 len = strlen (dirname);
2708 #ifdef TE_VMS
2709 /* Already has trailing slash. */
2710 p = frag_more (len);
2711 memcpy (p, dirname, len);
2712 #else
2713 p = frag_more (len + 1);
2714 memcpy (p, dirname, len);
2715 INSERT_DIR_SEPARATOR (p, len);
2716 #endif
2717 }
2718 len = strlen (files[first_file].filename) + 1;
2719 p = frag_more (len);
2720 memcpy (p, files[first_file].filename, len);
2721
2722 /* DW_AT_comp_dir */
2723 *comp_dir_sym = symbol_temp_new_now_octets ();
2724 comp_dir = remap_debug_filename (getpwd ());
2725 len = strlen (comp_dir) + 1;
2726 p = frag_more (len);
2727 memcpy (p, comp_dir, len);
2728
2729 /* DW_AT_producer */
2730 *producer_sym = symbol_temp_new_now_octets ();
2731 sprintf (producer, "GNU AS %s", VERSION);
2732 len = strlen (producer) + 1;
2733 p = frag_more (len);
2734 memcpy (p, producer, len);
2735 }
2736
2737 void
2738 dwarf2_init (void)
2739 {
2740 last_seg_ptr = &all_segs;
2741
2742 /* Select the default CIE version to produce here. The global
2743 starts with a value of -1 and will be modified to a valid value
2744 either by the user providing a command line option, or some
2745 targets will select their own default in md_after_parse_args. If
2746 we get here and the global still contains -1 then it is up to us
2747 to pick a sane default. The default we choose is 1, this is the
2748 CIE version gas has produced for a long time, and there seems no
2749 reason to change it yet. */
2750 if (flag_dwarf_cie_version == -1)
2751 flag_dwarf_cie_version = 1;
2752 }
2753
2754 /* Finish the dwarf2 debug sections. We emit .debug.line if there
2755 were any .file/.loc directives, or --gdwarf2 was given, and if the
2756 file has a non-empty .debug_info section and an empty .debug_line
2757 section. If we emit .debug_line, and the .debug_info section is
2758 empty, we also emit .debug_info, .debug_aranges and .debug_abbrev.
2759 ALL_SEGS will be non-null if there were any .file/.loc directives,
2760 or --gdwarf2 was given and there were any located instructions
2761 emitted. */
2762
2763 void
2764 dwarf2_finish (void)
2765 {
2766 segT line_seg;
2767 struct line_seg *s;
2768 segT info_seg;
2769 int emit_other_sections = 0;
2770 int empty_debug_line = 0;
2771
2772 info_seg = bfd_get_section_by_name (stdoutput, ".debug_info");
2773 emit_other_sections = info_seg == NULL || !seg_not_empty_p (info_seg);
2774
2775 line_seg = bfd_get_section_by_name (stdoutput, ".debug_line");
2776 empty_debug_line = line_seg == NULL || !seg_not_empty_p (line_seg);
2777
2778 /* We can't construct a new debug_line section if we already have one.
2779 Give an error if we have seen any .loc, otherwise trust the user
2780 knows what they are doing and want to generate the .debug_line
2781 (and all other debug sections) themselves. */
2782 if (all_segs && !empty_debug_line && dwarf2_any_loc_directive_seen)
2783 as_fatal ("duplicate .debug_line sections");
2784
2785 if ((!all_segs && emit_other_sections)
2786 || (!emit_other_sections && !empty_debug_line))
2787 /* If there is no line information and no non-empty .debug_info
2788 section, or if there is both a non-empty .debug_info and a non-empty
2789 .debug_line, then we do nothing. */
2790 return;
2791
2792 /* Calculate the size of an address for the target machine. */
2793 sizeof_address = DWARF2_ADDR_SIZE (stdoutput);
2794
2795 /* Create and switch to the line number section. */
2796 if (empty_debug_line)
2797 {
2798 line_seg = subseg_new (".debug_line", 0);
2799 bfd_set_section_flags (line_seg,
2800 SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS);
2801 }
2802
2803 /* For each subsection, chain the debug entries together. */
2804 for (s = all_segs; s; s = s->next)
2805 {
2806 struct line_subseg *lss = s->head;
2807 struct line_entry **ptail = lss->ptail;
2808
2809 /* Reset the initial view of the first subsection of the
2810 section. */
2811 if (lss->head && lss->head->loc.view)
2812 set_or_check_view (lss->head, NULL, NULL);
2813
2814 while ((lss = lss->next) != NULL)
2815 {
2816 /* Link the first view of subsequent subsections to the
2817 previous view. */
2818 if (lss->head && lss->head->loc.view)
2819 set_or_check_view (lss->head,
2820 !s->head ? NULL : (struct line_entry *)ptail,
2821 s->head ? s->head->head : NULL);
2822 *ptail = lss->head;
2823 ptail = lss->ptail;
2824 }
2825 }
2826
2827 if (empty_debug_line)
2828 out_debug_line (line_seg);
2829
2830 /* If this is assembler generated line info, and there is no
2831 debug_info already, we need .debug_info, .debug_abbrev and
2832 .debug_str sections as well. */
2833 if (emit_other_sections)
2834 {
2835 segT abbrev_seg;
2836 segT aranges_seg;
2837 segT str_seg;
2838 symbolS *name_sym, *comp_dir_sym, *producer_sym, *ranges_sym;
2839
2840 gas_assert (all_segs);
2841
2842 info_seg = subseg_new (".debug_info", 0);
2843 abbrev_seg = subseg_new (".debug_abbrev", 0);
2844 aranges_seg = subseg_new (".debug_aranges", 0);
2845 str_seg = subseg_new (".debug_str", 0);
2846
2847 bfd_set_section_flags (info_seg,
2848 SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS);
2849 bfd_set_section_flags (abbrev_seg,
2850 SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS);
2851 bfd_set_section_flags (aranges_seg,
2852 SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS);
2853 bfd_set_section_flags (str_seg,
2854 SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS
2855 | SEC_MERGE | SEC_STRINGS);
2856 str_seg->entsize = 1;
2857
2858 record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
2859
2860 if (all_segs->next == NULL)
2861 ranges_sym = NULL;
2862 else
2863 {
2864 if (DWARF2_VERSION < 5)
2865 {
2866 segT ranges_seg = subseg_new (".debug_ranges", 0);
2867 bfd_set_section_flags (ranges_seg, (SEC_READONLY
2868 | SEC_DEBUGGING
2869 | SEC_OCTETS));
2870 record_alignment (ranges_seg, ffs (2 * sizeof_address) - 1);
2871 out_debug_ranges (ranges_seg, &ranges_sym);
2872 }
2873 else
2874 {
2875 segT rnglists_seg = subseg_new (".debug_rnglists", 0);
2876 bfd_set_section_flags (rnglists_seg, (SEC_READONLY
2877 | SEC_DEBUGGING
2878 | SEC_OCTETS));
2879 out_debug_rnglists (rnglists_seg, &ranges_sym);
2880 }
2881 }
2882
2883 out_debug_aranges (aranges_seg, info_seg);
2884 out_debug_abbrev (abbrev_seg, info_seg, line_seg);
2885 out_debug_str (str_seg, &name_sym, &comp_dir_sym, &producer_sym);
2886 out_debug_info (info_seg, abbrev_seg, line_seg, ranges_sym,
2887 name_sym, comp_dir_sym, producer_sym);
2888 }
2889 }
2890
2891 /* Perform any deferred checks pertaining to debug information. */
2892
2893 void
2894 dwarf2dbg_final_check (void)
2895 {
2896 /* Perform reset-view checks. Don't evaluate view_assert_failed
2897 recursively: it could be very deep. It's a chain of adds, with
2898 each chain element pointing to the next in X_add_symbol, and
2899 holding the check value in X_op_symbol. */
2900 while (view_assert_failed)
2901 {
2902 expressionS *exp;
2903 symbolS *sym;
2904 offsetT failed;
2905
2906 gas_assert (!symbol_resolved_p (view_assert_failed));
2907
2908 exp = symbol_get_value_expression (view_assert_failed);
2909 sym = view_assert_failed;
2910
2911 /* If view_assert_failed looks like a compound check in the
2912 chain, break it up. */
2913 if (exp->X_op == O_add && exp->X_add_number == 0 && exp->X_unsigned)
2914 {
2915 view_assert_failed = exp->X_add_symbol;
2916 sym = exp->X_op_symbol;
2917 }
2918 else
2919 view_assert_failed = NULL;
2920
2921 failed = resolve_symbol_value (sym);
2922 if (!symbol_resolved_p (sym) || failed)
2923 {
2924 as_bad (_("view number mismatch"));
2925 break;
2926 }
2927 }
2928 }