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