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