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