PR22509 - Null pointer dereference on coff_slurp_reloc_table
[binutils-gdb.git] / gas / dwarf2dbg.c
1 /* dwarf2dbg.c - DWARF2 debug support
2 Copyright (C) 1999-2022 Free Software Foundation, Inc.
3 Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
4
5 This file is part of GAS, the GNU Assembler.
6
7 GAS is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11
12 GAS is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GAS; see the file COPYING. If not, write to the Free
19 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20 02110-1301, USA. */
21
22 /* Logical line numbers can be controlled by the compiler via the
23 following directives:
24
25 .file FILENO "file.c"
26 .loc FILENO LINENO [COLUMN] [basic_block] [prologue_end] \
27 [epilogue_begin] [is_stmt VALUE] [isa VALUE] \
28 [discriminator VALUE]
29 */
30
31 #include "as.h"
32 #include "safe-ctype.h"
33 #include <limits.h>
34 #include "dwarf2dbg.h"
35 #include <filenames.h>
36
37 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
38 /* We need to decide which character to use as a directory separator.
39 Just because HAVE_DOS_BASED_FILE_SYSTEM is defined, it does not
40 necessarily mean that the backslash character is the one to use.
41 Some environments, eg Cygwin, can support both naming conventions.
42 So we use the heuristic that we only need to use the backslash if
43 the path is an absolute path starting with a DOS style drive
44 selector. eg C: or D: */
45 # define INSERT_DIR_SEPARATOR(string, offset) \
46 do \
47 { \
48 if (offset > 1 \
49 && string[0] != 0 \
50 && string[1] == ':') \
51 string [offset] = '\\'; \
52 else \
53 string [offset] = '/'; \
54 } \
55 while (0)
56 #else
57 # define INSERT_DIR_SEPARATOR(string, offset) string[offset] = '/'
58 #endif
59
60 #ifndef DWARF2_FORMAT
61 # define DWARF2_FORMAT(SEC) dwarf2_format_32bit
62 #endif
63
64 #ifndef DWARF2_ADDR_SIZE
65 # define DWARF2_ADDR_SIZE(bfd) (bfd_arch_bits_per_address (bfd) / 8)
66 #endif
67
68 #ifndef DWARF2_FILE_NAME
69 #define DWARF2_FILE_NAME(FILENAME, DIRNAME) FILENAME
70 #endif
71
72 #ifndef DWARF2_FILE_TIME_NAME
73 #define DWARF2_FILE_TIME_NAME(FILENAME,DIRNAME) -1
74 #endif
75
76 #ifndef DWARF2_FILE_SIZE_NAME
77 #define DWARF2_FILE_SIZE_NAME(FILENAME,DIRNAME) -1
78 #endif
79
80 #ifndef DWARF2_VERSION
81 #define DWARF2_VERSION dwarf_level
82 #endif
83
84 /* The .debug_aranges version has been 2 in DWARF version 2, 3 and 4. */
85 #ifndef DWARF2_ARANGES_VERSION
86 #define DWARF2_ARANGES_VERSION 2
87 #endif
88
89 /* This implementation outputs version 3 .debug_line information. */
90 #ifndef DWARF2_LINE_VERSION
91 #define DWARF2_LINE_VERSION (dwarf_level > 3 ? dwarf_level : 3)
92 #endif
93
94 /* The .debug_rnglists has only been in DWARF version 5. */
95 #ifndef DWARF2_RNGLISTS_VERSION
96 #define DWARF2_RNGLISTS_VERSION 5
97 #endif
98
99 #include "subsegs.h"
100
101 #include "dwarf2.h"
102
103 /* Since we can't generate the prolog until the body is complete, we
104 use three different subsegments for .debug_line: one holding the
105 prolog, one for the directory and filename info, and one for the
106 body ("statement program"). */
107 #define DL_PROLOG 0
108 #define DL_FILES 1
109 #define DL_BODY 2
110
111 /* If linker relaxation might change offsets in the code, the DWARF special
112 opcodes and variable-length operands cannot be used. If this macro is
113 nonzero, use the DW_LNS_fixed_advance_pc opcode instead. */
114 #ifndef DWARF2_USE_FIXED_ADVANCE_PC
115 # define DWARF2_USE_FIXED_ADVANCE_PC linkrelax
116 #endif
117
118 /* First special line opcode - leave room for the standard opcodes.
119 Note: If you want to change this, you'll have to update the
120 "standard_opcode_lengths" table that is emitted below in
121 out_debug_line(). */
122 #define DWARF2_LINE_OPCODE_BASE 13
123
124 #ifndef DWARF2_LINE_BASE
125 /* Minimum line offset in a special line info. opcode. This value
126 was chosen to give a reasonable range of values. */
127 # define DWARF2_LINE_BASE -5
128 #endif
129
130 /* Range of line offsets in a special line info. opcode. */
131 #ifndef DWARF2_LINE_RANGE
132 # define DWARF2_LINE_RANGE 14
133 #endif
134
135 #ifndef DWARF2_LINE_MIN_INSN_LENGTH
136 /* Define the architecture-dependent minimum instruction length (in
137 bytes). This value should be rather too small than too big. */
138 # define DWARF2_LINE_MIN_INSN_LENGTH 1
139 #endif
140
141 /* Flag that indicates the initial value of the is_stmt_start flag. */
142 #define DWARF2_LINE_DEFAULT_IS_STMT 1
143
144 #ifndef DWARF2_LINE_MAX_OPS_PER_INSN
145 #define DWARF2_LINE_MAX_OPS_PER_INSN 1
146 #endif
147
148 /* Given a special op, return the line skip amount. */
149 #define SPECIAL_LINE(op) \
150 (((op) - DWARF2_LINE_OPCODE_BASE)%DWARF2_LINE_RANGE + DWARF2_LINE_BASE)
151
152 /* Given a special op, return the address skip amount (in units of
153 DWARF2_LINE_MIN_INSN_LENGTH. */
154 #define SPECIAL_ADDR(op) (((op) - DWARF2_LINE_OPCODE_BASE)/DWARF2_LINE_RANGE)
155
156 /* The maximum address skip amount that can be encoded with a special op. */
157 #define MAX_SPECIAL_ADDR_DELTA SPECIAL_ADDR(255)
158
159 #ifndef TC_PARSE_CONS_RETURN_NONE
160 #define TC_PARSE_CONS_RETURN_NONE BFD_RELOC_NONE
161 #endif
162
163 #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 SKIP_WHITESPACE ();
1199 }
1200
1201 if (startswith (input_line_pointer, "md5"))
1202 {
1203 input_line_pointer += 3;
1204 SKIP_WHITESPACE ();
1205
1206 expressionS exp;
1207 expression_and_evaluate (& exp);
1208 if (exp.X_op != O_big)
1209 as_bad (_("md5 value too small or not a constant"));
1210 else
1211 with_md5 = true;
1212 }
1213 }
1214
1215 demand_empty_rest_of_line ();
1216
1217 /* A .file directive implies compiler generated debug information is
1218 being supplied. Turn off gas generated debug info. */
1219 if (debug_type == DEBUG_DWARF2)
1220 purge_generated_debug (false);
1221 debug_type = DEBUG_NONE;
1222
1223 if (num != (unsigned int) num
1224 || num >= (size_t) -1 / sizeof (struct file_entry) - 32)
1225 {
1226 as_bad (_("file number %lu is too big"), (unsigned long) num);
1227 return NULL;
1228 }
1229
1230 if (! allocate_filename_to_slot (dirname, filename, (unsigned int) num,
1231 with_md5))
1232 return NULL;
1233
1234 return filename;
1235 }
1236
1237 /* Calls dwarf2_directive_filename, but discards its result.
1238 Used in pseudo-op tables where the function result is ignored. */
1239
1240 void
1241 dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED)
1242 {
1243 (void) dwarf2_directive_filename ();
1244 }
1245
1246 void
1247 dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
1248 {
1249 offsetT filenum, line;
1250
1251 /* If we see two .loc directives in a row, force the first one to be
1252 output now. */
1253 if (dwarf2_loc_directive_seen)
1254 dwarf2_emit_insn (0);
1255
1256 filenum = get_absolute_expression ();
1257 SKIP_WHITESPACE ();
1258 line = get_absolute_expression ();
1259
1260 if (filenum < 1)
1261 {
1262 if (filenum == 0 && dwarf_level < 5)
1263 dwarf_level = 5;
1264 if (filenum < 0 || DWARF2_LINE_VERSION < 5)
1265 {
1266 as_bad (_("file number less than one"));
1267 return;
1268 }
1269 }
1270
1271 if ((valueT) filenum >= files_in_use || files[filenum].filename == NULL)
1272 {
1273 as_bad (_("unassigned file number %ld"), (long) filenum);
1274 return;
1275 }
1276
1277 /* debug_type will be turned off by dwarf2_directive_filename, and
1278 if we don't have a dwarf style .file then files_in_use will be
1279 zero and the above error will trigger. */
1280 gas_assert (debug_type == DEBUG_NONE);
1281
1282 current.filenum = filenum;
1283 current.line = line;
1284 current.discriminator = 0;
1285
1286 #ifndef NO_LISTING
1287 if (listing)
1288 {
1289 if (files[filenum].dir)
1290 {
1291 size_t dir_len = strlen (dirs[files[filenum].dir]);
1292 size_t file_len = strlen (files[filenum].filename);
1293 char *cp = XNEWVEC (char, dir_len + 1 + file_len + 1);
1294
1295 memcpy (cp, dirs[files[filenum].dir], dir_len);
1296 INSERT_DIR_SEPARATOR (cp, dir_len);
1297 memcpy (cp + dir_len + 1, files[filenum].filename, file_len);
1298 cp[dir_len + file_len + 1] = '\0';
1299 listing_source_file (cp);
1300 free (cp);
1301 }
1302 else
1303 listing_source_file (files[filenum].filename);
1304 listing_source_line (line);
1305 }
1306 #endif
1307
1308 SKIP_WHITESPACE ();
1309 if (ISDIGIT (*input_line_pointer))
1310 {
1311 current.column = get_absolute_expression ();
1312 SKIP_WHITESPACE ();
1313 }
1314
1315 while (ISALPHA (*input_line_pointer))
1316 {
1317 char *p, c;
1318 offsetT value;
1319
1320 c = get_symbol_name (& p);
1321
1322 if (strcmp (p, "basic_block") == 0)
1323 {
1324 current.flags |= DWARF2_FLAG_BASIC_BLOCK;
1325 *input_line_pointer = c;
1326 }
1327 else if (strcmp (p, "prologue_end") == 0)
1328 {
1329 current.flags |= DWARF2_FLAG_PROLOGUE_END;
1330 *input_line_pointer = c;
1331 }
1332 else if (strcmp (p, "epilogue_begin") == 0)
1333 {
1334 current.flags |= DWARF2_FLAG_EPILOGUE_BEGIN;
1335 *input_line_pointer = c;
1336 }
1337 else if (strcmp (p, "is_stmt") == 0)
1338 {
1339 (void) restore_line_pointer (c);
1340 value = get_absolute_expression ();
1341 if (value == 0)
1342 current.flags &= ~DWARF2_FLAG_IS_STMT;
1343 else if (value == 1)
1344 current.flags |= DWARF2_FLAG_IS_STMT;
1345 else
1346 {
1347 as_bad (_("is_stmt value not 0 or 1"));
1348 return;
1349 }
1350 }
1351 else if (strcmp (p, "isa") == 0)
1352 {
1353 (void) restore_line_pointer (c);
1354 value = get_absolute_expression ();
1355 if (value >= 0)
1356 current.isa = value;
1357 else
1358 {
1359 as_bad (_("isa number less than zero"));
1360 return;
1361 }
1362 }
1363 else if (strcmp (p, "discriminator") == 0)
1364 {
1365 (void) restore_line_pointer (c);
1366 value = get_absolute_expression ();
1367 if (value >= 0)
1368 current.discriminator = value;
1369 else
1370 {
1371 as_bad (_("discriminator less than zero"));
1372 return;
1373 }
1374 }
1375 else if (strcmp (p, "view") == 0)
1376 {
1377 symbolS *sym;
1378
1379 (void) restore_line_pointer (c);
1380 SKIP_WHITESPACE ();
1381
1382 if (ISDIGIT (*input_line_pointer)
1383 || *input_line_pointer == '-')
1384 {
1385 bool force_reset = *input_line_pointer == '-';
1386
1387 value = get_absolute_expression ();
1388 if (value != 0)
1389 {
1390 as_bad (_("numeric view can only be asserted to zero"));
1391 return;
1392 }
1393 if (force_reset && force_reset_view)
1394 sym = force_reset_view;
1395 else
1396 {
1397 sym = symbol_temp_new (absolute_section, &zero_address_frag,
1398 value);
1399 if (force_reset)
1400 force_reset_view = sym;
1401 }
1402 }
1403 else
1404 {
1405 char *name = read_symbol_name ();
1406
1407 if (!name)
1408 return;
1409 sym = symbol_find_or_make (name);
1410 free (name);
1411 if (S_IS_DEFINED (sym) || symbol_equated_p (sym))
1412 {
1413 if (S_IS_VOLATILE (sym))
1414 sym = symbol_clone (sym, 1);
1415 else if (!S_CAN_BE_REDEFINED (sym))
1416 {
1417 as_bad (_("symbol `%s' is already defined"),
1418 S_GET_NAME (sym));
1419 return;
1420 }
1421 }
1422 S_SET_SEGMENT (sym, undefined_section);
1423 S_SET_VALUE (sym, 0);
1424 symbol_set_frag (sym, &zero_address_frag);
1425 }
1426 current.u.view = sym;
1427 }
1428 else
1429 {
1430 as_bad (_("unknown .loc sub-directive `%s'"), p);
1431 (void) restore_line_pointer (c);
1432 return;
1433 }
1434
1435 SKIP_WHITESPACE_AFTER_NAME ();
1436 }
1437
1438 demand_empty_rest_of_line ();
1439 dwarf2_any_loc_directive_seen = dwarf2_loc_directive_seen = true;
1440
1441 /* If we were given a view id, emit the row right away. */
1442 if (current.u.view)
1443 dwarf2_emit_insn (0);
1444 }
1445
1446 void
1447 dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED)
1448 {
1449 offsetT value = get_absolute_expression ();
1450
1451 if (value != 0 && value != 1)
1452 {
1453 as_bad (_("expected 0 or 1"));
1454 ignore_rest_of_line ();
1455 }
1456 else
1457 {
1458 dwarf2_loc_mark_labels = value != 0;
1459 demand_empty_rest_of_line ();
1460 }
1461 }
1462 \f
1463 static struct frag *
1464 first_frag_for_seg (segT seg)
1465 {
1466 return seg_info (seg)->frchainP->frch_root;
1467 }
1468
1469 static struct frag *
1470 last_frag_for_seg (segT seg)
1471 {
1472 frchainS *f = seg_info (seg)->frchainP;
1473
1474 while (f->frch_next != NULL)
1475 f = f->frch_next;
1476
1477 return f->frch_last;
1478 }
1479 \f
1480 /* Emit a single byte into the current segment. */
1481
1482 static inline void
1483 out_byte (int byte)
1484 {
1485 FRAG_APPEND_1_CHAR (byte);
1486 }
1487
1488 /* Emit a statement program opcode into the current segment. */
1489
1490 static inline void
1491 out_opcode (int opc)
1492 {
1493 out_byte (opc);
1494 }
1495
1496 /* Emit a two-byte word into the current segment. */
1497
1498 static inline void
1499 out_two (int data)
1500 {
1501 md_number_to_chars (frag_more (2), data, 2);
1502 }
1503
1504 /* Emit a four byte word into the current segment. */
1505
1506 static inline void
1507 out_four (int data)
1508 {
1509 md_number_to_chars (frag_more (4), data, 4);
1510 }
1511
1512 /* Emit an unsigned "little-endian base 128" number. */
1513
1514 static void
1515 out_uleb128 (addressT value)
1516 {
1517 output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
1518 }
1519
1520 /* Emit a signed "little-endian base 128" number. */
1521
1522 static void
1523 out_leb128 (addressT value)
1524 {
1525 output_leb128 (frag_more (sizeof_leb128 (value, 1)), value, 1);
1526 }
1527
1528 /* Emit a tuple for .debug_abbrev. */
1529
1530 static inline void
1531 out_abbrev (int name, int form)
1532 {
1533 out_uleb128 (name);
1534 out_uleb128 (form);
1535 }
1536
1537 /* Get the size of a fragment. */
1538
1539 static offsetT
1540 get_frag_fix (fragS *frag, segT seg)
1541 {
1542 frchainS *fr;
1543
1544 if (frag->fr_next)
1545 return frag->fr_fix;
1546
1547 /* If a fragment is the last in the chain, special measures must be
1548 taken to find its size before relaxation, since it may be pending
1549 on some subsegment chain. */
1550 for (fr = seg_info (seg)->frchainP; fr; fr = fr->frch_next)
1551 if (fr->frch_last == frag)
1552 return (char *) obstack_next_free (&fr->frch_obstack) - frag->fr_literal;
1553
1554 abort ();
1555 }
1556
1557 /* Set an absolute address (may result in a relocation entry). */
1558
1559 static void
1560 out_set_addr (symbolS *sym)
1561 {
1562 expressionS exp;
1563
1564 memset (&exp, 0, sizeof exp);
1565 out_opcode (DW_LNS_extended_op);
1566 out_uleb128 (sizeof_address + 1);
1567
1568 out_opcode (DW_LNE_set_address);
1569 exp.X_op = O_symbol;
1570 exp.X_add_symbol = sym;
1571 exp.X_add_number = 0;
1572 emit_expr (&exp, sizeof_address);
1573 }
1574
1575 static void
1576 scale_addr_delta (int line_delta, addressT *addr_delta)
1577 {
1578 static int printed_this = 0;
1579 if (DWARF2_LINE_MIN_INSN_LENGTH > 1)
1580 {
1581 /* Don't error on non-instruction bytes at end of section. */
1582 if (line_delta != INT_MAX
1583 && *addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0 && !printed_this)
1584 {
1585 as_bad("unaligned opcodes detected in executable segment");
1586 printed_this = 1;
1587 }
1588 *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
1589 }
1590 }
1591
1592 /* Encode a pair of line and address skips as efficiently as possible.
1593 Note that the line skip is signed, whereas the address skip is unsigned.
1594
1595 The following two routines *must* be kept in sync. This is
1596 enforced by making emit_inc_line_addr abort if we do not emit
1597 exactly the expected number of bytes. */
1598
1599 static int
1600 size_inc_line_addr (int line_delta, addressT addr_delta)
1601 {
1602 unsigned int tmp, opcode;
1603 int len = 0;
1604
1605 /* Scale the address delta by the minimum instruction length. */
1606 scale_addr_delta (line_delta, &addr_delta);
1607
1608 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
1609 We cannot use special opcodes here, since we want the end_sequence
1610 to emit the matrix entry. */
1611 if (line_delta == INT_MAX)
1612 {
1613 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
1614 len = 1;
1615 else if (addr_delta)
1616 len = 1 + sizeof_leb128 (addr_delta, 0);
1617 return len + 3;
1618 }
1619
1620 /* Bias the line delta by the base. */
1621 tmp = line_delta - DWARF2_LINE_BASE;
1622
1623 /* If the line increment is out of range of a special opcode, we
1624 must encode it with DW_LNS_advance_line. */
1625 if (tmp >= DWARF2_LINE_RANGE)
1626 {
1627 len = 1 + sizeof_leb128 (line_delta, 1);
1628 line_delta = 0;
1629 tmp = 0 - DWARF2_LINE_BASE;
1630 }
1631
1632 /* Bias the opcode by the special opcode base. */
1633 tmp += DWARF2_LINE_OPCODE_BASE;
1634
1635 /* Avoid overflow when addr_delta is large. */
1636 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
1637 {
1638 /* Try using a special opcode. */
1639 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
1640 if (opcode <= 255)
1641 return len + 1;
1642
1643 /* Try using DW_LNS_const_add_pc followed by special op. */
1644 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
1645 if (opcode <= 255)
1646 return len + 2;
1647 }
1648
1649 /* Otherwise use DW_LNS_advance_pc. */
1650 len += 1 + sizeof_leb128 (addr_delta, 0);
1651
1652 /* DW_LNS_copy or special opcode. */
1653 len += 1;
1654
1655 return len;
1656 }
1657
1658 static void
1659 emit_inc_line_addr (int line_delta, addressT addr_delta, char *p, int len)
1660 {
1661 unsigned int tmp, opcode;
1662 int need_copy = 0;
1663 char *end = p + len;
1664
1665 /* Line number sequences cannot go backward in addresses. This means
1666 we've incorrectly ordered the statements in the sequence. */
1667 gas_assert ((offsetT) addr_delta >= 0);
1668
1669 /* Scale the address delta by the minimum instruction length. */
1670 scale_addr_delta (line_delta, &addr_delta);
1671
1672 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
1673 We cannot use special opcodes here, since we want the end_sequence
1674 to emit the matrix entry. */
1675 if (line_delta == INT_MAX)
1676 {
1677 if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
1678 *p++ = DW_LNS_const_add_pc;
1679 else if (addr_delta)
1680 {
1681 *p++ = DW_LNS_advance_pc;
1682 p += output_leb128 (p, addr_delta, 0);
1683 }
1684
1685 *p++ = DW_LNS_extended_op;
1686 *p++ = 1;
1687 *p++ = DW_LNE_end_sequence;
1688 goto done;
1689 }
1690
1691 /* Bias the line delta by the base. */
1692 tmp = line_delta - DWARF2_LINE_BASE;
1693
1694 /* If the line increment is out of range of a special opcode, we
1695 must encode it with DW_LNS_advance_line. */
1696 if (tmp >= DWARF2_LINE_RANGE)
1697 {
1698 *p++ = DW_LNS_advance_line;
1699 p += output_leb128 (p, line_delta, 1);
1700
1701 line_delta = 0;
1702 tmp = 0 - DWARF2_LINE_BASE;
1703 need_copy = 1;
1704 }
1705
1706 /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
1707 special opcode. */
1708 if (line_delta == 0 && addr_delta == 0)
1709 {
1710 *p++ = DW_LNS_copy;
1711 goto done;
1712 }
1713
1714 /* Bias the opcode by the special opcode base. */
1715 tmp += DWARF2_LINE_OPCODE_BASE;
1716
1717 /* Avoid overflow when addr_delta is large. */
1718 if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
1719 {
1720 /* Try using a special opcode. */
1721 opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
1722 if (opcode <= 255)
1723 {
1724 *p++ = opcode;
1725 goto done;
1726 }
1727
1728 /* Try using DW_LNS_const_add_pc followed by special op. */
1729 opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
1730 if (opcode <= 255)
1731 {
1732 *p++ = DW_LNS_const_add_pc;
1733 *p++ = opcode;
1734 goto done;
1735 }
1736 }
1737
1738 /* Otherwise use DW_LNS_advance_pc. */
1739 *p++ = DW_LNS_advance_pc;
1740 p += output_leb128 (p, addr_delta, 0);
1741
1742 if (need_copy)
1743 *p++ = DW_LNS_copy;
1744 else
1745 *p++ = tmp;
1746
1747 done:
1748 gas_assert (p == end);
1749 }
1750
1751 /* Handy routine to combine calls to the above two routines. */
1752
1753 static void
1754 out_inc_line_addr (int line_delta, addressT addr_delta)
1755 {
1756 int len = size_inc_line_addr (line_delta, addr_delta);
1757 emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
1758 }
1759
1760 /* Write out an alternative form of line and address skips using
1761 DW_LNS_fixed_advance_pc opcodes. This uses more space than the default
1762 line and address information, but it is required if linker relaxation
1763 could change the code offsets. The following two routines *must* be
1764 kept in sync. */
1765 #define ADDR_DELTA_LIMIT 50000
1766
1767 static int
1768 size_fixed_inc_line_addr (int line_delta, addressT addr_delta)
1769 {
1770 int len = 0;
1771
1772 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1773 if (line_delta != INT_MAX)
1774 len = 1 + sizeof_leb128 (line_delta, 1);
1775
1776 if (addr_delta > ADDR_DELTA_LIMIT)
1777 {
1778 /* DW_LNS_extended_op */
1779 len += 1 + sizeof_leb128 (sizeof_address + 1, 0);
1780 /* DW_LNE_set_address */
1781 len += 1 + sizeof_address;
1782 }
1783 else
1784 /* DW_LNS_fixed_advance_pc */
1785 len += 3;
1786
1787 if (line_delta == INT_MAX)
1788 /* DW_LNS_extended_op + DW_LNE_end_sequence */
1789 len += 3;
1790 else
1791 /* DW_LNS_copy */
1792 len += 1;
1793
1794 return len;
1795 }
1796
1797 static void
1798 emit_fixed_inc_line_addr (int line_delta, addressT addr_delta, fragS *frag,
1799 char *p, int len)
1800 {
1801 expressionS *pexp;
1802 char *end = p + len;
1803
1804 /* Line number sequences cannot go backward in addresses. This means
1805 we've incorrectly ordered the statements in the sequence. */
1806 gas_assert ((offsetT) addr_delta >= 0);
1807
1808 /* Verify that we have kept in sync with size_fixed_inc_line_addr. */
1809 gas_assert (len == size_fixed_inc_line_addr (line_delta, addr_delta));
1810
1811 /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence. */
1812 if (line_delta != INT_MAX)
1813 {
1814 *p++ = DW_LNS_advance_line;
1815 p += output_leb128 (p, line_delta, 1);
1816 }
1817
1818 pexp = symbol_get_value_expression (frag->fr_symbol);
1819
1820 /* The DW_LNS_fixed_advance_pc opcode has a 2-byte operand so it can
1821 advance the address by at most 64K. Linker relaxation (without
1822 which this function would not be used) could change the operand by
1823 an unknown amount. If the address increment is getting close to
1824 the limit, just reset the address. */
1825 if (addr_delta > ADDR_DELTA_LIMIT)
1826 {
1827 symbolS *to_sym;
1828 expressionS exp;
1829
1830 memset (&exp, 0, sizeof exp);
1831 gas_assert (pexp->X_op == O_subtract);
1832 to_sym = pexp->X_add_symbol;
1833
1834 *p++ = DW_LNS_extended_op;
1835 p += output_leb128 (p, sizeof_address + 1, 0);
1836 *p++ = DW_LNE_set_address;
1837 exp.X_op = O_symbol;
1838 exp.X_add_symbol = to_sym;
1839 exp.X_add_number = 0;
1840 emit_expr_fix (&exp, sizeof_address, frag, p, TC_PARSE_CONS_RETURN_NONE);
1841 p += sizeof_address;
1842 }
1843 else
1844 {
1845 *p++ = DW_LNS_fixed_advance_pc;
1846 emit_expr_fix (pexp, 2, frag, p, TC_PARSE_CONS_RETURN_NONE);
1847 p += 2;
1848 }
1849
1850 if (line_delta == INT_MAX)
1851 {
1852 *p++ = DW_LNS_extended_op;
1853 *p++ = 1;
1854 *p++ = DW_LNE_end_sequence;
1855 }
1856 else
1857 *p++ = DW_LNS_copy;
1858
1859 gas_assert (p == end);
1860 }
1861
1862 /* Generate a variant frag that we can use to relax address/line
1863 increments between fragments of the target segment. */
1864
1865 static void
1866 relax_inc_line_addr (int line_delta, symbolS *to_sym, symbolS *from_sym)
1867 {
1868 expressionS exp;
1869 int max_chars;
1870
1871 memset (&exp, 0, sizeof exp);
1872 exp.X_op = O_subtract;
1873 exp.X_add_symbol = to_sym;
1874 exp.X_op_symbol = from_sym;
1875 exp.X_add_number = 0;
1876
1877 /* The maximum size of the frag is the line delta with a maximum
1878 sized address delta. */
1879 if (DWARF2_USE_FIXED_ADVANCE_PC)
1880 max_chars = size_fixed_inc_line_addr (line_delta,
1881 -DWARF2_LINE_MIN_INSN_LENGTH);
1882 else
1883 max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
1884
1885 frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
1886 make_expr_symbol (&exp), line_delta, NULL);
1887 }
1888
1889 /* The function estimates the size of a rs_dwarf2dbg variant frag
1890 based on the current values of the symbols. It is called before
1891 the relaxation loop. We set fr_subtype to the expected length. */
1892
1893 int
1894 dwarf2dbg_estimate_size_before_relax (fragS *frag)
1895 {
1896 offsetT addr_delta;
1897 int size;
1898
1899 addr_delta = resolve_symbol_value (frag->fr_symbol);
1900 if (DWARF2_USE_FIXED_ADVANCE_PC)
1901 size = size_fixed_inc_line_addr (frag->fr_offset, addr_delta);
1902 else
1903 size = size_inc_line_addr (frag->fr_offset, addr_delta);
1904
1905 frag->fr_subtype = size;
1906
1907 return size;
1908 }
1909
1910 /* This function relaxes a rs_dwarf2dbg variant frag based on the
1911 current values of the symbols. fr_subtype is the current length
1912 of the frag. This returns the change in frag length. */
1913
1914 int
1915 dwarf2dbg_relax_frag (fragS *frag)
1916 {
1917 int old_size, new_size;
1918
1919 old_size = frag->fr_subtype;
1920 new_size = dwarf2dbg_estimate_size_before_relax (frag);
1921
1922 return new_size - old_size;
1923 }
1924
1925 /* This function converts a rs_dwarf2dbg variant frag into a normal
1926 fill frag. This is called after all relaxation has been done.
1927 fr_subtype will be the desired length of the frag. */
1928
1929 void
1930 dwarf2dbg_convert_frag (fragS *frag)
1931 {
1932 offsetT addr_diff;
1933
1934 if (DWARF2_USE_FIXED_ADVANCE_PC)
1935 {
1936 /* If linker relaxation is enabled then the distance between the two
1937 symbols in the frag->fr_symbol expression might change. Hence we
1938 cannot rely upon the value computed by resolve_symbol_value.
1939 Instead we leave the expression unfinalized and allow
1940 emit_fixed_inc_line_addr to create a fixup (which later becomes a
1941 relocation) that will allow the linker to correctly compute the
1942 actual address difference. We have to use a fixed line advance for
1943 this as we cannot (easily) relocate leb128 encoded values. */
1944 int saved_finalize_syms = finalize_syms;
1945
1946 finalize_syms = 0;
1947 addr_diff = resolve_symbol_value (frag->fr_symbol);
1948 finalize_syms = saved_finalize_syms;
1949 }
1950 else
1951 addr_diff = resolve_symbol_value (frag->fr_symbol);
1952
1953 /* fr_var carries the max_chars that we created the fragment with.
1954 fr_subtype carries the current expected length. We must, of
1955 course, have allocated enough memory earlier. */
1956 gas_assert (frag->fr_var >= (int) frag->fr_subtype);
1957
1958 if (DWARF2_USE_FIXED_ADVANCE_PC)
1959 emit_fixed_inc_line_addr (frag->fr_offset, addr_diff, frag,
1960 frag->fr_literal + frag->fr_fix,
1961 frag->fr_subtype);
1962 else
1963 emit_inc_line_addr (frag->fr_offset, addr_diff,
1964 frag->fr_literal + frag->fr_fix, frag->fr_subtype);
1965
1966 frag->fr_fix += frag->fr_subtype;
1967 frag->fr_type = rs_fill;
1968 frag->fr_var = 0;
1969 frag->fr_offset = 0;
1970 }
1971
1972 /* Generate .debug_line content for the chain of line number entries
1973 beginning at E, for segment SEG. */
1974
1975 static void
1976 process_entries (segT seg, struct line_entry *e)
1977 {
1978 unsigned filenum = 1;
1979 unsigned line = 1;
1980 unsigned column = 0;
1981 unsigned isa = 0;
1982 unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
1983 fragS *last_frag = NULL, *frag;
1984 addressT last_frag_ofs = 0, frag_ofs;
1985 symbolS *last_lab = NULL, *lab;
1986
1987 if (flag_dwarf_sections)
1988 {
1989 char * name;
1990 const char * sec_name;
1991
1992 /* Switch to the relevant sub-section before we start to emit
1993 the line number table.
1994
1995 FIXME: These sub-sections do not have a normal Line Number
1996 Program Header, thus strictly speaking they are not valid
1997 DWARF sections. Unfortunately the DWARF standard assumes
1998 a one-to-one relationship between compilation units and
1999 line number tables. Thus we have to have a .debug_line
2000 section, as well as our sub-sections, and we have to ensure
2001 that all of the sub-sections are merged into a proper
2002 .debug_line section before a debugger sees them. */
2003
2004 sec_name = bfd_section_name (seg);
2005 if (strcmp (sec_name, ".text") != 0)
2006 {
2007 name = concat (".debug_line", sec_name, (char *) NULL);
2008 subseg_set (subseg_get (name, false), 0);
2009 }
2010 else
2011 /* Don't create a .debug_line.text section -
2012 that is redundant. Instead just switch back to the
2013 normal .debug_line section. */
2014 subseg_set (subseg_get (".debug_line", false), 0);
2015 }
2016
2017 do
2018 {
2019 int line_delta;
2020
2021 if (filenum != e->loc.filenum)
2022 {
2023 filenum = e->loc.filenum;
2024 out_opcode (DW_LNS_set_file);
2025 out_uleb128 (filenum);
2026 }
2027
2028 if (column != e->loc.column)
2029 {
2030 column = e->loc.column;
2031 out_opcode (DW_LNS_set_column);
2032 out_uleb128 (column);
2033 }
2034
2035 if (e->loc.discriminator != 0)
2036 {
2037 out_opcode (DW_LNS_extended_op);
2038 out_leb128 (1 + sizeof_leb128 (e->loc.discriminator, 0));
2039 out_opcode (DW_LNE_set_discriminator);
2040 out_uleb128 (e->loc.discriminator);
2041 }
2042
2043 if (isa != e->loc.isa)
2044 {
2045 isa = e->loc.isa;
2046 out_opcode (DW_LNS_set_isa);
2047 out_uleb128 (isa);
2048 }
2049
2050 if ((e->loc.flags ^ flags) & DWARF2_FLAG_IS_STMT)
2051 {
2052 flags = e->loc.flags;
2053 out_opcode (DW_LNS_negate_stmt);
2054 }
2055
2056 if (e->loc.flags & DWARF2_FLAG_BASIC_BLOCK)
2057 out_opcode (DW_LNS_set_basic_block);
2058
2059 if (e->loc.flags & DWARF2_FLAG_PROLOGUE_END)
2060 out_opcode (DW_LNS_set_prologue_end);
2061
2062 if (e->loc.flags & DWARF2_FLAG_EPILOGUE_BEGIN)
2063 out_opcode (DW_LNS_set_epilogue_begin);
2064
2065 /* Don't try to optimize away redundant entries; gdb wants two
2066 entries for a function where the code starts on the same line as
2067 the {, and there's no way to identify that case here. Trust gcc
2068 to optimize appropriately. */
2069 line_delta = e->loc.line - line;
2070 lab = e->label;
2071 frag = symbol_get_frag (lab);
2072 frag_ofs = S_GET_VALUE (lab);
2073
2074 if (last_frag == NULL
2075 || (e->loc.u.view == force_reset_view && force_reset_view
2076 /* If we're going to reset the view, but we know we're
2077 advancing the PC, we don't have to force with
2078 set_address. We know we do when we're at the same
2079 address of the same frag, and we know we might when
2080 we're in the beginning of a frag, and we were at the
2081 end of the previous frag. */
2082 && (frag == last_frag
2083 ? (last_frag_ofs == frag_ofs)
2084 : (frag_ofs == 0
2085 && ((offsetT)last_frag_ofs
2086 >= get_frag_fix (last_frag, seg))))))
2087 {
2088 out_set_addr (lab);
2089 out_inc_line_addr (line_delta, 0);
2090 }
2091 else if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
2092 out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
2093 else
2094 relax_inc_line_addr (line_delta, lab, last_lab);
2095
2096 line = e->loc.line;
2097 last_lab = lab;
2098 last_frag = frag;
2099 last_frag_ofs = frag_ofs;
2100
2101 e = e->next;
2102 }
2103 while (e);
2104
2105 /* Emit a DW_LNE_end_sequence for the end of the section. */
2106 frag = last_frag_for_seg (seg);
2107 frag_ofs = get_frag_fix (frag, seg);
2108 if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
2109 out_inc_line_addr (INT_MAX, frag_ofs - last_frag_ofs);
2110 else
2111 {
2112 lab = symbol_temp_new (seg, frag, frag_ofs);
2113 relax_inc_line_addr (INT_MAX, lab, last_lab);
2114 }
2115 }
2116
2117 /* Switch to LINE_STR_SEG and output the given STR. Return the
2118 symbol pointing to the new string in the section. */
2119
2120 static symbolS *
2121 add_line_strp (segT line_str_seg, const char *str)
2122 {
2123 char *cp;
2124 size_t size;
2125 symbolS *sym;
2126
2127 subseg_set (line_str_seg, 0);
2128
2129 sym = symbol_temp_new_now_octets ();
2130
2131 size = strlen (str) + 1;
2132 cp = frag_more (size);
2133 memcpy (cp, str, size);
2134
2135 return sym;
2136 }
2137
2138
2139 /* Emit the directory and file tables for .debug_line. */
2140
2141 static void
2142 out_dir_and_file_list (segT line_seg, int sizeof_offset)
2143 {
2144 size_t size;
2145 char *dir;
2146 char *cp;
2147 unsigned int i, j;
2148 bool emit_md5 = false;
2149 bool emit_timestamps = true;
2150 bool emit_filesize = true;
2151 segT line_str_seg = NULL;
2152 symbolS *line_strp, *file0_strp = NULL;
2153
2154 /* Output the Directory Table. */
2155 if (DWARF2_LINE_VERSION >= 5)
2156 {
2157 /* We only have one column in the directory table. */
2158 out_byte (1);
2159
2160 /* Describe the purpose and format of the column. */
2161 out_uleb128 (DW_LNCT_path);
2162 /* Store these strings in the .debug_line_str section so they
2163 can be shared. */
2164 out_uleb128 (DW_FORM_line_strp);
2165
2166 /* Now state how many rows there are in the table. We need at
2167 least 1 if there is one or more file names to store the
2168 "working directory". */
2169 if (dirs_in_use == 0 && files_in_use > 0)
2170 out_uleb128 (1);
2171 else
2172 out_uleb128 (dirs_in_use);
2173 }
2174
2175 /* Emit directory list. */
2176 if (DWARF2_LINE_VERSION >= 5 && (dirs_in_use > 0 || files_in_use > 0))
2177 {
2178 line_str_seg = subseg_new (".debug_line_str", 0);
2179 bfd_set_section_flags (line_str_seg,
2180 SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS
2181 | SEC_MERGE | SEC_STRINGS);
2182 line_str_seg->entsize = 1;
2183
2184 /* DWARF5 uses slot zero, but that is only set explicitly
2185 using a .file 0 directive. Otherwise use pwd as main file
2186 directory. */
2187 if (dirs_in_use > 0 && dirs[0] != NULL)
2188 dir = remap_debug_filename (dirs[0]);
2189 else
2190 dir = remap_debug_filename (getpwd ());
2191
2192 line_strp = add_line_strp (line_str_seg, dir);
2193 free (dir);
2194 subseg_set (line_seg, 0);
2195 TC_DWARF2_EMIT_OFFSET (line_strp, sizeof_offset);
2196 }
2197 for (i = 1; i < dirs_in_use; ++i)
2198 {
2199 dir = remap_debug_filename (dirs[i]);
2200 if (DWARF2_LINE_VERSION < 5)
2201 {
2202 size = strlen (dir) + 1;
2203 cp = frag_more (size);
2204 memcpy (cp, dir, size);
2205 }
2206 else
2207 {
2208 line_strp = add_line_strp (line_str_seg, dir);
2209 subseg_set (line_seg, 0);
2210 TC_DWARF2_EMIT_OFFSET (line_strp, sizeof_offset);
2211 }
2212 free (dir);
2213 }
2214
2215 if (DWARF2_LINE_VERSION < 5)
2216 /* Terminate it. */
2217 out_byte ('\0');
2218
2219 /* Output the File Name Table. */
2220 if (DWARF2_LINE_VERSION >= 5)
2221 {
2222 unsigned int columns = 4;
2223
2224 if (((unsigned long) DWARF2_FILE_TIME_NAME ("", "")) == -1UL)
2225 {
2226 emit_timestamps = false;
2227 -- columns;
2228 }
2229
2230 if (DWARF2_FILE_SIZE_NAME ("", "") == -1)
2231 {
2232 emit_filesize = false;
2233 -- columns;
2234 }
2235
2236 for (i = 0; i < files_in_use; ++i)
2237 if (files[i].md5[0] != 0)
2238 break;
2239 if (i < files_in_use)
2240 {
2241 emit_md5 = true;
2242 ++ columns;
2243 }
2244
2245 /* The number of format entries to follow. */
2246 out_byte (columns);
2247 /* The format of the file name. */
2248 out_uleb128 (DW_LNCT_path);
2249 /* Store these strings in the .debug_line_str section so they
2250 can be shared. */
2251 out_uleb128 (DW_FORM_line_strp);
2252
2253 /* The format of the directory index. */
2254 out_uleb128 (DW_LNCT_directory_index);
2255 out_uleb128 (DW_FORM_udata);
2256
2257 if (emit_timestamps)
2258 {
2259 /* The format of the timestamp. */
2260 out_uleb128 (DW_LNCT_timestamp);
2261 out_uleb128 (DW_FORM_udata);
2262 }
2263
2264 if (emit_filesize)
2265 {
2266 /* The format of the file size. */
2267 out_uleb128 (DW_LNCT_size);
2268 out_uleb128 (DW_FORM_udata);
2269 }
2270
2271 if (emit_md5)
2272 {
2273 /* The format of the MD5 sum. */
2274 out_uleb128 (DW_LNCT_MD5);
2275 out_uleb128 (DW_FORM_data16);
2276 }
2277
2278 /* The number of entries in the table. */
2279 out_uleb128 (files_in_use);
2280 }
2281
2282 for (i = DWARF2_LINE_VERSION > 4 ? 0 : 1; i < files_in_use; ++i)
2283 {
2284 const char *fullfilename;
2285
2286 if (files[i].filename == NULL)
2287 {
2288 if (DWARF2_LINE_VERSION < 5 || i != 0)
2289 {
2290 as_bad (_("unassigned file number %ld"), (long) i);
2291 continue;
2292 }
2293 /* DWARF5 uses slot zero, but that is only set explicitly using
2294 a .file 0 directive. If that isn't used, but file 1 is, then
2295 use that as main file name. */
2296 if (files_in_use > 1 && files[1].filename != NULL)
2297 {
2298 files[0].filename = files[1].filename;
2299 files[0].dir = files[1].dir;
2300 if (emit_md5)
2301 for (j = 0; j < NUM_MD5_BYTES; ++j)
2302 files[0].md5[j] = files[1].md5[j];
2303 }
2304 else
2305 files[0].filename = "";
2306 }
2307
2308 fullfilename = DWARF2_FILE_NAME (files[i].filename,
2309 files[i].dir ? dirs [files [i].dir] : "");
2310 if (DWARF2_LINE_VERSION < 5)
2311 {
2312 size = strlen (fullfilename) + 1;
2313 cp = frag_more (size);
2314 memcpy (cp, fullfilename, size);
2315 }
2316 else
2317 {
2318 if (!file0_strp)
2319 line_strp = add_line_strp (line_str_seg, fullfilename);
2320 else
2321 line_strp = file0_strp;
2322 subseg_set (line_seg, 0);
2323 TC_DWARF2_EMIT_OFFSET (line_strp, sizeof_offset);
2324 if (i == 0 && files_in_use > 1
2325 && files[0].filename == files[1].filename)
2326 file0_strp = line_strp;
2327 else
2328 file0_strp = NULL;
2329 }
2330
2331 /* Directory number. */
2332 out_uleb128 (files[i].dir);
2333
2334 /* Output the last modification timestamp. */
2335 if (emit_timestamps)
2336 {
2337 offsetT timestamp;
2338
2339 timestamp = DWARF2_FILE_TIME_NAME (files[i].filename,
2340 files[i].dir ? dirs [files [i].dir] : "");
2341 if (timestamp == -1)
2342 timestamp = 0;
2343 out_uleb128 (timestamp);
2344 }
2345
2346 /* Output the filesize. */
2347 if (emit_filesize)
2348 {
2349 offsetT filesize;
2350 filesize = DWARF2_FILE_SIZE_NAME (files[i].filename,
2351 files[i].dir ? dirs [files [i].dir] : "");
2352 if (filesize == -1)
2353 filesize = 0;
2354 out_uleb128 (filesize);
2355 }
2356
2357 /* Output the md5 sum. */
2358 if (emit_md5)
2359 {
2360 int b;
2361
2362 for (b = 0; b < NUM_MD5_BYTES; b++)
2363 out_byte (files[i].md5[b]);
2364 }
2365 }
2366
2367 if (DWARF2_LINE_VERSION < 5)
2368 /* Terminate filename list. */
2369 out_byte (0);
2370 }
2371
2372 /* Switch to SEC and output a header length field. Return the size of
2373 offsets used in SEC. The caller must set EXPR->X_add_symbol value
2374 to the end of the section. EXPR->X_add_number will be set to the
2375 negative size of the header. */
2376
2377 static int
2378 out_header (asection *sec, expressionS *exp)
2379 {
2380 symbolS *start_sym;
2381 symbolS *end_sym;
2382
2383 subseg_set (sec, 0);
2384
2385 if (flag_dwarf_sections)
2386 {
2387 /* If we are going to put the start and end symbols in different
2388 sections, then we need real symbols, not just fake, local ones. */
2389 frag_now_fix ();
2390 start_sym = symbol_make (".Ldebug_line_start");
2391 end_sym = symbol_make (".Ldebug_line_end");
2392 symbol_set_value_now (start_sym);
2393 }
2394 else
2395 {
2396 start_sym = symbol_temp_new_now_octets ();
2397 end_sym = symbol_temp_make ();
2398 }
2399
2400 /* Total length of the information. */
2401 exp->X_op = O_subtract;
2402 exp->X_add_symbol = end_sym;
2403 exp->X_op_symbol = start_sym;
2404
2405 switch (DWARF2_FORMAT (sec))
2406 {
2407 case dwarf2_format_32bit:
2408 exp->X_add_number = -4;
2409 emit_expr (exp, 4);
2410 return 4;
2411
2412 case dwarf2_format_64bit:
2413 exp->X_add_number = -12;
2414 out_four (-1);
2415 emit_expr (exp, 8);
2416 return 8;
2417
2418 case dwarf2_format_64bit_irix:
2419 exp->X_add_number = -8;
2420 emit_expr (exp, 8);
2421 return 8;
2422 }
2423
2424 as_fatal (_("internal error: unknown dwarf2 format"));
2425 return 0;
2426 }
2427
2428 /* Emit the collected .debug_line data. */
2429
2430 static void
2431 out_debug_line (segT line_seg)
2432 {
2433 expressionS exp;
2434 symbolS *prologue_start, *prologue_end;
2435 symbolS *line_end;
2436 struct line_seg *s;
2437 int sizeof_offset;
2438
2439 memset (&exp, 0, sizeof exp);
2440 sizeof_offset = out_header (line_seg, &exp);
2441 line_end = exp.X_add_symbol;
2442
2443 /* Version. */
2444 out_two (DWARF2_LINE_VERSION);
2445
2446 if (DWARF2_LINE_VERSION >= 5)
2447 {
2448 out_byte (sizeof_address);
2449 out_byte (0); /* Segment Selector size. */
2450 }
2451 /* Length of the prologue following this length. */
2452 prologue_start = symbol_temp_make ();
2453 prologue_end = symbol_temp_make ();
2454 exp.X_op = O_subtract;
2455 exp.X_add_symbol = prologue_end;
2456 exp.X_op_symbol = prologue_start;
2457 exp.X_add_number = 0;
2458 emit_expr (&exp, sizeof_offset);
2459 symbol_set_value_now (prologue_start);
2460
2461 /* Parameters of the state machine. */
2462 out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
2463 if (DWARF2_LINE_VERSION >= 4)
2464 out_byte (DWARF2_LINE_MAX_OPS_PER_INSN);
2465 out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
2466 out_byte (DWARF2_LINE_BASE);
2467 out_byte (DWARF2_LINE_RANGE);
2468 out_byte (DWARF2_LINE_OPCODE_BASE);
2469
2470 /* Standard opcode lengths. */
2471 out_byte (0); /* DW_LNS_copy */
2472 out_byte (1); /* DW_LNS_advance_pc */
2473 out_byte (1); /* DW_LNS_advance_line */
2474 out_byte (1); /* DW_LNS_set_file */
2475 out_byte (1); /* DW_LNS_set_column */
2476 out_byte (0); /* DW_LNS_negate_stmt */
2477 out_byte (0); /* DW_LNS_set_basic_block */
2478 out_byte (0); /* DW_LNS_const_add_pc */
2479 out_byte (1); /* DW_LNS_fixed_advance_pc */
2480 out_byte (0); /* DW_LNS_set_prologue_end */
2481 out_byte (0); /* DW_LNS_set_epilogue_begin */
2482 out_byte (1); /* DW_LNS_set_isa */
2483 /* We have emitted 12 opcode lengths, so make that this
2484 matches up to the opcode base value we have been using. */
2485 gas_assert (DWARF2_LINE_OPCODE_BASE == 13);
2486
2487 out_dir_and_file_list (line_seg, sizeof_offset);
2488
2489 symbol_set_value_now (prologue_end);
2490
2491 /* For each section, emit a statement program. */
2492 for (s = all_segs; s; s = s->next)
2493 /* Paranoia - this check should have already have
2494 been handled in dwarf2_gen_line_info_1(). */
2495 if (s->head->head && SEG_NORMAL (s->seg))
2496 process_entries (s->seg, s->head->head);
2497
2498 if (flag_dwarf_sections)
2499 /* We have to switch to the special .debug_line_end section
2500 before emitting the end-of-debug_line symbol. The linker
2501 script arranges for this section to be placed after all the
2502 (potentially garbage collected) .debug_line.<foo> sections.
2503 This section contains the line_end symbol which is used to
2504 compute the size of the linked .debug_line section, as seen
2505 in the DWARF Line Number header. */
2506 subseg_set (subseg_get (".debug_line_end", false), 0);
2507
2508 symbol_set_value_now (line_end);
2509 }
2510
2511 static void
2512 out_debug_ranges (segT ranges_seg, symbolS **ranges_sym)
2513 {
2514 unsigned int addr_size = sizeof_address;
2515 struct line_seg *s;
2516 expressionS exp;
2517 unsigned int i;
2518
2519 memset (&exp, 0, sizeof exp);
2520 subseg_set (ranges_seg, 0);
2521
2522 /* For DW_AT_ranges to point at (there is no header, so really start
2523 of section, but see out_debug_rnglists). */
2524 *ranges_sym = symbol_temp_new_now_octets ();
2525
2526 /* Base Address Entry. */
2527 for (i = 0; i < addr_size; i++)
2528 out_byte (0xff);
2529 for (i = 0; i < addr_size; i++)
2530 out_byte (0);
2531
2532 /* Range List Entry. */
2533 for (s = all_segs; s; s = s->next)
2534 {
2535 fragS *frag;
2536 symbolS *beg, *end;
2537
2538 frag = first_frag_for_seg (s->seg);
2539 beg = symbol_temp_new (s->seg, frag, 0);
2540 s->text_start = beg;
2541
2542 frag = last_frag_for_seg (s->seg);
2543 end = symbol_temp_new (s->seg, frag, get_frag_fix (frag, s->seg));
2544 s->text_end = end;
2545
2546 exp.X_op = O_symbol;
2547 exp.X_add_symbol = beg;
2548 exp.X_add_number = 0;
2549 emit_expr (&exp, addr_size);
2550
2551 exp.X_op = O_symbol;
2552 exp.X_add_symbol = end;
2553 exp.X_add_number = 0;
2554 emit_expr (&exp, addr_size);
2555 }
2556
2557 /* End of Range Entry. */
2558 for (i = 0; i < addr_size; i++)
2559 out_byte (0);
2560 for (i = 0; i < addr_size; i++)
2561 out_byte (0);
2562 }
2563
2564 static void
2565 out_debug_rnglists (segT ranges_seg, symbolS **ranges_sym)
2566 {
2567 expressionS exp;
2568 symbolS *ranges_end;
2569 struct line_seg *s;
2570
2571 /* Unit length. */
2572 memset (&exp, 0, sizeof exp);
2573 out_header (ranges_seg, &exp);
2574 ranges_end = exp.X_add_symbol;
2575
2576 out_two (DWARF2_RNGLISTS_VERSION);
2577 out_byte (sizeof_address);
2578 out_byte (0); /* Segment Selector size. */
2579 out_four (0); /* Offset entry count. */
2580
2581 /* For DW_AT_ranges to point at (must be after the header). */
2582 *ranges_sym = symbol_temp_new_now_octets ();
2583
2584 for (s = all_segs; s; s = s->next)
2585 {
2586 fragS *frag;
2587 symbolS *beg, *end;
2588
2589 out_byte (DW_RLE_start_length);
2590
2591 frag = first_frag_for_seg (s->seg);
2592 beg = symbol_temp_new (s->seg, frag, 0);
2593 s->text_start = beg;
2594
2595 frag = last_frag_for_seg (s->seg);
2596 end = symbol_temp_new (s->seg, frag, get_frag_fix (frag, s->seg));
2597 s->text_end = end;
2598
2599 exp.X_op = O_symbol;
2600 exp.X_add_symbol = beg;
2601 exp.X_add_number = 0;
2602 emit_expr (&exp, sizeof_address);
2603
2604 exp.X_op = O_symbol;
2605 exp.X_add_symbol = end;
2606 exp.X_add_number = 0;
2607 emit_leb128_expr (&exp, 0);
2608 }
2609
2610 out_byte (DW_RLE_end_of_list);
2611
2612 symbol_set_value_now (ranges_end);
2613 }
2614
2615 /* Emit data for .debug_aranges. */
2616
2617 static void
2618 out_debug_aranges (segT aranges_seg, segT info_seg)
2619 {
2620 unsigned int addr_size = sizeof_address;
2621 offsetT size;
2622 struct line_seg *s;
2623 expressionS exp;
2624 symbolS *aranges_end;
2625 char *p;
2626 int sizeof_offset;
2627
2628 memset (&exp, 0, sizeof exp);
2629 sizeof_offset = out_header (aranges_seg, &exp);
2630 aranges_end = exp.X_add_symbol;
2631 size = -exp.X_add_number;
2632
2633 /* Version. */
2634 out_two (DWARF2_ARANGES_VERSION);
2635 size += 2;
2636
2637 /* Offset to .debug_info. */
2638 TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), sizeof_offset);
2639 size += sizeof_offset;
2640
2641 /* Size of an address (offset portion). */
2642 out_byte (addr_size);
2643 size++;
2644
2645 /* Size of a segment descriptor. */
2646 out_byte (0);
2647 size++;
2648
2649 /* Align the header. */
2650 while ((size++ % (2 * addr_size)) > 0)
2651 out_byte (0);
2652
2653 for (s = all_segs; s; s = s->next)
2654 {
2655 fragS *frag;
2656 symbolS *beg, *end;
2657
2658 frag = first_frag_for_seg (s->seg);
2659 beg = symbol_temp_new (s->seg, frag, 0);
2660 s->text_start = beg;
2661
2662 frag = last_frag_for_seg (s->seg);
2663 end = symbol_temp_new (s->seg, frag, get_frag_fix (frag, s->seg));
2664 s->text_end = end;
2665
2666 exp.X_op = O_symbol;
2667 exp.X_add_symbol = beg;
2668 exp.X_add_number = 0;
2669 emit_expr (&exp, addr_size);
2670
2671 exp.X_op = O_subtract;
2672 exp.X_add_symbol = end;
2673 exp.X_op_symbol = beg;
2674 exp.X_add_number = 0;
2675 emit_expr (&exp, addr_size);
2676 }
2677
2678 p = frag_more (2 * addr_size);
2679 md_number_to_chars (p, 0, addr_size);
2680 md_number_to_chars (p + addr_size, 0, addr_size);
2681
2682 symbol_set_value_now (aranges_end);
2683 }
2684
2685 /* Emit data for .debug_abbrev. Note that this must be kept in
2686 sync with out_debug_info below. */
2687
2688 static void
2689 out_debug_abbrev (segT abbrev_seg,
2690 segT info_seg ATTRIBUTE_UNUSED,
2691 segT line_seg ATTRIBUTE_UNUSED,
2692 unsigned char *func_formP)
2693 {
2694 int secoff_form;
2695 bool have_efunc = false, have_lfunc = false;
2696
2697 /* Check the symbol table for function symbols which also have their size
2698 specified. */
2699 if (symbol_rootP)
2700 {
2701 symbolS *symp;
2702
2703 for (symp = symbol_rootP; symp; symp = symbol_next (symp))
2704 {
2705 /* A warning construct is a warning symbol followed by the
2706 symbol warned about. Skip this and the following symbol. */
2707 if (symbol_get_bfdsym (symp)->flags & BSF_WARNING)
2708 {
2709 symp = symbol_next (symp);
2710 if (!symp)
2711 break;
2712 continue;
2713 }
2714
2715 if (!S_IS_DEFINED (symp) || !S_IS_FUNCTION (symp))
2716 continue;
2717
2718 #if defined (OBJ_ELF) /* || defined (OBJ_MAYBE_ELF) */
2719 if (S_GET_SIZE (symp) == 0)
2720 {
2721 if (!IS_ELF || symbol_get_obj (symp)->size == NULL)
2722 continue;
2723 }
2724 #else
2725 continue;
2726 #endif
2727
2728 if (S_IS_EXTERNAL (symp))
2729 have_efunc = true;
2730 else
2731 have_lfunc = true;
2732 }
2733 }
2734
2735 subseg_set (abbrev_seg, 0);
2736
2737 out_uleb128 (GAS_ABBREV_COMP_UNIT);
2738 out_uleb128 (DW_TAG_compile_unit);
2739 out_byte (have_efunc || have_lfunc ? DW_CHILDREN_yes : DW_CHILDREN_no);
2740 if (DWARF2_VERSION < 4)
2741 {
2742 if (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit)
2743 secoff_form = DW_FORM_data4;
2744 else
2745 secoff_form = DW_FORM_data8;
2746 }
2747 else
2748 secoff_form = DW_FORM_sec_offset;
2749 out_abbrev (DW_AT_stmt_list, secoff_form);
2750 if (all_segs->next == NULL)
2751 {
2752 out_abbrev (DW_AT_low_pc, DW_FORM_addr);
2753 if (DWARF2_VERSION < 4)
2754 out_abbrev (DW_AT_high_pc, DW_FORM_addr);
2755 else
2756 out_abbrev (DW_AT_high_pc, DW_FORM_udata);
2757 }
2758 else
2759 out_abbrev (DW_AT_ranges, secoff_form);
2760 out_abbrev (DW_AT_name, DW_FORM_strp);
2761 out_abbrev (DW_AT_comp_dir, DW_FORM_strp);
2762 out_abbrev (DW_AT_producer, DW_FORM_strp);
2763 out_abbrev (DW_AT_language, DW_FORM_data2);
2764 out_abbrev (0, 0);
2765
2766 if (have_efunc || have_lfunc)
2767 {
2768 out_uleb128 (GAS_ABBREV_SUBPROG);
2769 out_uleb128 (DW_TAG_subprogram);
2770 out_byte (DW_CHILDREN_no);
2771 out_abbrev (DW_AT_name, DW_FORM_strp);
2772 if (have_efunc)
2773 {
2774 if (have_lfunc || DWARF2_VERSION < 4)
2775 *func_formP = DW_FORM_flag;
2776 else
2777 *func_formP = DW_FORM_flag_present;
2778 out_abbrev (DW_AT_external, *func_formP);
2779 }
2780 else
2781 /* Any non-zero value other than DW_FORM_flag will do. */
2782 *func_formP = DW_FORM_block;
2783
2784 /* PR 29517: Provide a return type for the function. */
2785 if (DWARF2_VERSION > 2)
2786 out_abbrev (DW_AT_type, DW_FORM_ref_udata);
2787
2788 out_abbrev (DW_AT_low_pc, DW_FORM_addr);
2789 out_abbrev (DW_AT_high_pc,
2790 DWARF2_VERSION < 4 ? DW_FORM_addr : DW_FORM_udata);
2791 out_abbrev (0, 0);
2792
2793 if (DWARF2_VERSION > 2)
2794 {
2795 /* PR 29517: We do not actually know the return type of these
2796 functions, so provide an abbrev that uses DWARF's unspecified
2797 type. */
2798 out_uleb128 (GAS_ABBREV_NO_TYPE);
2799 out_uleb128 (DW_TAG_unspecified_type);
2800 out_byte (DW_CHILDREN_no);
2801 out_abbrev (0, 0);
2802 }
2803 }
2804
2805 /* Terminate the abbreviations for this compilation unit. */
2806 out_byte (0);
2807 }
2808
2809 /* Emit a description of this compilation unit for .debug_info. */
2810
2811 static void
2812 out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT str_seg,
2813 symbolS *ranges_sym, symbolS *name_sym,
2814 symbolS *comp_dir_sym, symbolS *producer_sym,
2815 unsigned char func_form)
2816 {
2817 expressionS exp;
2818 symbolS *info_end;
2819 int sizeof_offset;
2820
2821 memset (&exp, 0, sizeof exp);
2822 sizeof_offset = out_header (info_seg, &exp);
2823 info_end = exp.X_add_symbol;
2824
2825 /* DWARF version. */
2826 out_two (DWARF2_VERSION);
2827
2828 if (DWARF2_VERSION < 5)
2829 {
2830 /* .debug_abbrev offset */
2831 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
2832 }
2833 else
2834 {
2835 /* unit (header) type */
2836 out_byte (DW_UT_compile);
2837 }
2838
2839 /* Target address size. */
2840 out_byte (sizeof_address);
2841
2842 if (DWARF2_VERSION >= 5)
2843 {
2844 /* .debug_abbrev offset */
2845 TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
2846 }
2847
2848 /* DW_TAG_compile_unit DIE abbrev */
2849 out_uleb128 (GAS_ABBREV_COMP_UNIT);
2850
2851 /* DW_AT_stmt_list */
2852 TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg),
2853 (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit
2854 ? 4 : 8));
2855
2856 /* These two attributes are emitted if all of the code is contiguous. */
2857 if (all_segs->next == NULL)
2858 {
2859 /* DW_AT_low_pc */
2860 exp.X_op = O_symbol;
2861 exp.X_add_symbol = all_segs->text_start;
2862 exp.X_add_number = 0;
2863 emit_expr (&exp, sizeof_address);
2864
2865 /* DW_AT_high_pc */
2866 if (DWARF2_VERSION < 4)
2867 exp.X_op = O_symbol;
2868 else
2869 {
2870 exp.X_op = O_subtract;
2871 exp.X_op_symbol = all_segs->text_start;
2872 }
2873 exp.X_add_symbol = all_segs->text_end;
2874 exp.X_add_number = 0;
2875 if (DWARF2_VERSION < 4)
2876 emit_expr (&exp, sizeof_address);
2877 else
2878 emit_leb128_expr (&exp, 0);
2879 }
2880 else
2881 {
2882 /* This attribute is emitted if the code is disjoint. */
2883 /* DW_AT_ranges. */
2884 TC_DWARF2_EMIT_OFFSET (ranges_sym, sizeof_offset);
2885 }
2886
2887 /* DW_AT_name, DW_AT_comp_dir and DW_AT_producer. Symbols in .debug_str
2888 setup in out_debug_str below. */
2889 TC_DWARF2_EMIT_OFFSET (name_sym, sizeof_offset);
2890 TC_DWARF2_EMIT_OFFSET (comp_dir_sym, sizeof_offset);
2891 TC_DWARF2_EMIT_OFFSET (producer_sym, sizeof_offset);
2892
2893 /* DW_AT_language. Yes, this is probably not really MIPS, but the
2894 dwarf2 draft has no standard code for assembler. */
2895 out_two (DW_LANG_Mips_Assembler);
2896
2897 if (func_form)
2898 {
2899 symbolS *symp;
2900 symbolS *no_type_tag;
2901
2902 if (DWARF2_VERSION > 2)
2903 no_type_tag = symbol_make (".Ldebug_no_type_tag");
2904 else
2905 no_type_tag = NULL;
2906
2907 for (symp = symbol_rootP; symp; symp = symbol_next (symp))
2908 {
2909 const char *name;
2910 size_t len;
2911 expressionS size = { .X_op = O_constant };
2912
2913 /* Skip warning constructs (see above). */
2914 if (symbol_get_bfdsym (symp)->flags & BSF_WARNING)
2915 {
2916 symp = symbol_next (symp);
2917 if (!symp)
2918 break;
2919 continue;
2920 }
2921
2922 if (!S_IS_DEFINED (symp) || !S_IS_FUNCTION (symp))
2923 continue;
2924
2925 #if defined (OBJ_ELF) /* || defined (OBJ_MAYBE_ELF) */
2926 size.X_add_number = S_GET_SIZE (symp);
2927 if (size.X_add_number == 0 && IS_ELF
2928 && symbol_get_obj (symp)->size != NULL)
2929 {
2930 size.X_op = O_add;
2931 size.X_op_symbol = make_expr_symbol (symbol_get_obj (symp)->size);
2932 }
2933 #endif
2934 if (size.X_op == O_constant && size.X_add_number == 0)
2935 continue;
2936
2937 subseg_set (str_seg, 0);
2938 name_sym = symbol_temp_new_now_octets ();
2939 name = S_GET_NAME (symp);
2940 len = strlen (name) + 1;
2941 memcpy (frag_more (len), name, len);
2942
2943 subseg_set (info_seg, 0);
2944
2945 /* DW_TAG_subprogram DIE abbrev */
2946 out_uleb128 (GAS_ABBREV_SUBPROG);
2947
2948 /* DW_AT_name */
2949 TC_DWARF2_EMIT_OFFSET (name_sym, sizeof_offset);
2950
2951 /* DW_AT_external. */
2952 if (func_form == DW_FORM_flag)
2953 out_byte (S_IS_EXTERNAL (symp));
2954
2955 /* PR 29517: Let consumers know that we do not have
2956 return type information for this function. */
2957 if (DWARF2_VERSION > 2)
2958 {
2959 exp.X_op = O_symbol;
2960 exp.X_add_symbol = no_type_tag;
2961 exp.X_add_number = 0;
2962 emit_leb128_expr (&exp, 0);
2963 }
2964
2965 /* DW_AT_low_pc */
2966 exp.X_op = O_symbol;
2967 exp.X_add_symbol = symp;
2968 exp.X_add_number = 0;
2969 emit_expr (&exp, sizeof_address);
2970
2971 /* DW_AT_high_pc */
2972 if (DWARF2_VERSION < 4)
2973 {
2974 if (size.X_op == O_constant)
2975 size.X_op = O_symbol;
2976 size.X_add_symbol = symp;
2977 emit_expr (&size, sizeof_address);
2978 }
2979 else if (size.X_op == O_constant)
2980 out_uleb128 (size.X_add_number);
2981 else
2982 emit_leb128_expr (symbol_get_value_expression (size.X_op_symbol), 0);
2983 }
2984
2985 if (DWARF2_VERSION > 2)
2986 {
2987 /* PR 29517: Generate a DIE for the unspecified type abbrev.
2988 We do it here because it cannot be part of the top level DIE. */
2989 subseg_set (info_seg, 0);
2990 symbol_set_value_now (no_type_tag);
2991 out_uleb128 (GAS_ABBREV_NO_TYPE);
2992 }
2993
2994 /* End of children. */
2995 out_leb128 (0);
2996 }
2997
2998 symbol_set_value_now (info_end);
2999 }
3000
3001 /* Emit the three debug strings needed in .debug_str and setup symbols
3002 to them for use in out_debug_info. */
3003 static void
3004 out_debug_str (segT str_seg, symbolS **name_sym, symbolS **comp_dir_sym,
3005 symbolS **producer_sym)
3006 {
3007 char producer[128];
3008 char *p;
3009 int len;
3010 int first_file = DWARF2_LINE_VERSION > 4 ? 0 : 1;
3011
3012 subseg_set (str_seg, 0);
3013
3014 /* DW_AT_name. We don't have the actual file name that was present
3015 on the command line, so assume files[first_file] is the main input file.
3016 We're not supposed to get called unless at least one line number
3017 entry was emitted, so this should always be defined. */
3018 *name_sym = symbol_temp_new_now_octets ();
3019 if (files_in_use == 0)
3020 abort ();
3021 if (files[first_file].dir)
3022 {
3023 char *dirname = remap_debug_filename (dirs[files[first_file].dir]);
3024 len = strlen (dirname);
3025 #ifdef TE_VMS
3026 /* Already has trailing slash. */
3027 p = frag_more (len);
3028 memcpy (p, dirname, len);
3029 #else
3030 p = frag_more (len + 1);
3031 memcpy (p, dirname, len);
3032 INSERT_DIR_SEPARATOR (p, len);
3033 #endif
3034 free (dirname);
3035 }
3036 len = strlen (files[first_file].filename) + 1;
3037 p = frag_more (len);
3038 memcpy (p, files[first_file].filename, len);
3039
3040 /* DW_AT_comp_dir */
3041 *comp_dir_sym = symbol_temp_new_now_octets ();
3042 char *comp_dir = remap_debug_filename (getpwd ());
3043 len = strlen (comp_dir) + 1;
3044 p = frag_more (len);
3045 memcpy (p, comp_dir, len);
3046 free (comp_dir);
3047
3048 /* DW_AT_producer */
3049 *producer_sym = symbol_temp_new_now_octets ();
3050 sprintf (producer, "GNU AS %s", VERSION);
3051 len = strlen (producer) + 1;
3052 p = frag_more (len);
3053 memcpy (p, producer, len);
3054 }
3055
3056 void
3057 dwarf2_init (void)
3058 {
3059 all_segs = NULL;
3060 last_seg_ptr = &all_segs;
3061 files = NULL;
3062 files_in_use = 0;
3063 files_allocated = 0;
3064 dirs = NULL;
3065 dirs_in_use = 0;
3066 dirs_allocated = 0;
3067 dwarf2_loc_directive_seen = false;
3068 dwarf2_any_loc_directive_seen = false;
3069 dwarf2_loc_mark_labels = false;
3070 current.filenum = 1;
3071 current.line = 1;
3072 current.column = 0;
3073 current.isa = 0;
3074 current.flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
3075 current.discriminator = 0;
3076 current.u.view = NULL;
3077 force_reset_view = NULL;
3078 view_assert_failed = NULL;
3079
3080 /* Select the default CIE version to produce here. The global
3081 starts with a value of -1 and will be modified to a valid value
3082 either by the user providing a command line option, or some
3083 targets will select their own default in md_after_parse_args. If
3084 we get here and the global still contains -1 then it is up to us
3085 to pick a sane default. The default we choose is 1, this is the
3086 CIE version gas has produced for a long time, and there seems no
3087 reason to change it yet. */
3088 if (flag_dwarf_cie_version == -1)
3089 flag_dwarf_cie_version = 1;
3090 }
3091
3092 static void
3093 dwarf2_cleanup (void)
3094 {
3095 purge_generated_debug (true);
3096 free (files);
3097 free (dirs);
3098 }
3099
3100 /* Finish the dwarf2 debug sections. We emit .debug.line if there
3101 were any .file/.loc directives, or --gdwarf2 was given, and if the
3102 file has a non-empty .debug_info section and an empty .debug_line
3103 section. If we emit .debug_line, and the .debug_info section is
3104 empty, we also emit .debug_info, .debug_aranges and .debug_abbrev.
3105 ALL_SEGS will be non-null if there were any .file/.loc directives,
3106 or --gdwarf2 was given and there were any located instructions
3107 emitted. */
3108
3109 void
3110 dwarf2_finish (void)
3111 {
3112 segT line_seg;
3113 struct line_seg *s;
3114 segT info_seg;
3115 int emit_other_sections = 0;
3116 int empty_debug_line = 0;
3117
3118 info_seg = bfd_get_section_by_name (stdoutput, ".debug_info");
3119 emit_other_sections = info_seg == NULL || !seg_not_empty_p (info_seg);
3120
3121 line_seg = bfd_get_section_by_name (stdoutput, ".debug_line");
3122 empty_debug_line = line_seg == NULL || !seg_not_empty_p (line_seg);
3123
3124 /* We can't construct a new debug_line section if we already have one.
3125 Give an error if we have seen any .loc, otherwise trust the user
3126 knows what they are doing and want to generate the .debug_line
3127 (and all other debug sections) themselves. */
3128 if (all_segs && !empty_debug_line && dwarf2_any_loc_directive_seen)
3129 as_fatal ("duplicate .debug_line sections");
3130
3131 if ((!all_segs && emit_other_sections)
3132 || (!emit_other_sections && !empty_debug_line))
3133 /* If there is no line information and no non-empty .debug_info
3134 section, or if there is both a non-empty .debug_info and a non-empty
3135 .debug_line, then we do nothing. */
3136 {
3137 dwarf2_cleanup ();
3138 return;
3139 }
3140
3141 /* Calculate the size of an address for the target machine. */
3142 sizeof_address = DWARF2_ADDR_SIZE (stdoutput);
3143
3144 /* Create and switch to the line number section. */
3145 if (empty_debug_line)
3146 {
3147 line_seg = subseg_new (".debug_line", 0);
3148 bfd_set_section_flags (line_seg,
3149 SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS);
3150 }
3151
3152 for (s = all_segs; s; s = s->next)
3153 {
3154 struct line_subseg *lss;
3155
3156 for (lss = s->head; lss; lss = lss->next)
3157 if (lss->head)
3158 do_allocate_filenum (lss->head);
3159 }
3160
3161 /* For each subsection, chain the debug entries together. */
3162 for (s = all_segs; s; s = s->next)
3163 {
3164 struct line_subseg *lss = s->head;
3165 struct line_entry **ptail = lss->ptail;
3166
3167 /* Reset the initial view of the first subsection of the
3168 section. */
3169 if (lss->head && lss->head->loc.u.view)
3170 set_or_check_view (lss->head, NULL, NULL);
3171
3172 while ((lss = lss->next) != NULL)
3173 {
3174 /* Link the first view of subsequent subsections to the
3175 previous view. */
3176 if (lss->head && lss->head->loc.u.view)
3177 set_or_check_view (lss->head,
3178 !s->head ? NULL : (struct line_entry *)ptail,
3179 s->head ? s->head->head : NULL);
3180 *ptail = lss->head;
3181 lss->head = NULL;
3182 ptail = lss->ptail;
3183 }
3184 }
3185
3186 if (empty_debug_line)
3187 out_debug_line (line_seg);
3188
3189 /* If this is assembler generated line info, and there is no
3190 debug_info already, we need .debug_info, .debug_abbrev and
3191 .debug_str sections as well. */
3192 if (emit_other_sections)
3193 {
3194 segT abbrev_seg;
3195 segT aranges_seg;
3196 segT str_seg;
3197 symbolS *name_sym, *comp_dir_sym, *producer_sym, *ranges_sym;
3198 unsigned char func_form = 0;
3199
3200 gas_assert (all_segs);
3201
3202 info_seg = subseg_new (".debug_info", 0);
3203 abbrev_seg = subseg_new (".debug_abbrev", 0);
3204 aranges_seg = subseg_new (".debug_aranges", 0);
3205 str_seg = subseg_new (".debug_str", 0);
3206
3207 bfd_set_section_flags (info_seg,
3208 SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS);
3209 bfd_set_section_flags (abbrev_seg,
3210 SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS);
3211 bfd_set_section_flags (aranges_seg,
3212 SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS);
3213 bfd_set_section_flags (str_seg,
3214 SEC_READONLY | SEC_DEBUGGING | SEC_OCTETS
3215 | SEC_MERGE | SEC_STRINGS);
3216 str_seg->entsize = 1;
3217
3218 record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
3219
3220 if (all_segs->next == NULL)
3221 ranges_sym = NULL;
3222 else
3223 {
3224 if (DWARF2_VERSION < 5)
3225 {
3226 segT ranges_seg = subseg_new (".debug_ranges", 0);
3227 bfd_set_section_flags (ranges_seg, (SEC_READONLY
3228 | SEC_DEBUGGING
3229 | SEC_OCTETS));
3230 record_alignment (ranges_seg, ffs (2 * sizeof_address) - 1);
3231 out_debug_ranges (ranges_seg, &ranges_sym);
3232 }
3233 else
3234 {
3235 segT rnglists_seg = subseg_new (".debug_rnglists", 0);
3236 bfd_set_section_flags (rnglists_seg, (SEC_READONLY
3237 | SEC_DEBUGGING
3238 | SEC_OCTETS));
3239 out_debug_rnglists (rnglists_seg, &ranges_sym);
3240 }
3241 }
3242
3243 out_debug_aranges (aranges_seg, info_seg);
3244 out_debug_abbrev (abbrev_seg, info_seg, line_seg, &func_form);
3245 out_debug_str (str_seg, &name_sym, &comp_dir_sym, &producer_sym);
3246 out_debug_info (info_seg, abbrev_seg, line_seg, str_seg,
3247 ranges_sym, name_sym, comp_dir_sym, producer_sym,
3248 func_form);
3249 }
3250 dwarf2_cleanup ();
3251 }
3252
3253 /* Perform any deferred checks pertaining to debug information. */
3254
3255 void
3256 dwarf2dbg_final_check (void)
3257 {
3258 /* Perform reset-view checks. Don't evaluate view_assert_failed
3259 recursively: it could be very deep. It's a chain of adds, with
3260 each chain element pointing to the next in X_add_symbol, and
3261 holding the check value in X_op_symbol. */
3262 while (view_assert_failed)
3263 {
3264 expressionS *exp;
3265 symbolS *sym;
3266 offsetT failed;
3267
3268 gas_assert (!symbol_resolved_p (view_assert_failed));
3269
3270 exp = symbol_get_value_expression (view_assert_failed);
3271 sym = view_assert_failed;
3272
3273 /* If view_assert_failed looks like a compound check in the
3274 chain, break it up. */
3275 if (exp->X_op == O_add && exp->X_add_number == 0 && exp->X_unsigned)
3276 {
3277 view_assert_failed = exp->X_add_symbol;
3278 sym = exp->X_op_symbol;
3279 }
3280 else
3281 view_assert_failed = NULL;
3282
3283 failed = resolve_symbol_value (sym);
3284 if (!symbol_resolved_p (sym) || failed)
3285 {
3286 as_bad (_("view number mismatch"));
3287 break;
3288 }
3289 }
3290 }