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