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