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