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