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