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