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