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