Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5222 serge 1
/* dwarf2dbg.c - DWARF2 debug support
2
   Copyright 1999-2013 Free Software Foundation, Inc.
3
   Contributed by David Mosberger-Tang 
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
9
   the Free Software Foundation; either version 3, or (at your option)
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
19
   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
20
   02110-1301, USA.  */
21
 
22
/* Logical line numbers can be controlled by the compiler via the
23
   following directives:
24
 
25
	.file FILENO "file.c"
26
	.loc  FILENO LINENO [COLUMN] [basic_block] [prologue_end] \
27
	      [epilogue_begin] [is_stmt VALUE] [isa VALUE] \
28
	      [discriminator VALUE]
29
*/
30
 
31
#include "as.h"
32
#include "safe-ctype.h"
33
 
34
#ifdef HAVE_LIMITS_H
35
#include 
36
#else
37
#ifdef HAVE_SYS_PARAM_H
38
#include 
39
#endif
40
#ifndef INT_MAX
41
#define INT_MAX (int) (((unsigned) (-1)) >> 1)
42
#endif
43
#endif
44
 
45
#include "dwarf2dbg.h"
46
#include 
47
 
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 \
60
	  && string[0] != 0 \
61
	  && string[1] == ':') \
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
 
71
#ifndef DWARF2_FORMAT
72
# define DWARF2_FORMAT(SEC) dwarf2_format_32bit
73
#endif
74
 
75
#ifndef DWARF2_ADDR_SIZE
76
# define DWARF2_ADDR_SIZE(bfd) (bfd_arch_bits_per_address (bfd) / 8)
77
#endif
78
 
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
 
91
#ifndef DWARF2_VERSION
92
#define DWARF2_VERSION 2
93
#endif
94
 
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
 
100
/* This implementation output version 2 .debug_line information. */
101
#ifndef DWARF2_LINE_VERSION
102
#define DWARF2_LINE_VERSION 2
103
#endif
104
 
105
#include "subsegs.h"
106
 
107
#include "dwarf2.h"
108
 
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
 
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
121
# define DWARF2_USE_FIXED_ADVANCE_PC	linkrelax
122
#endif
123
 
124
/* First special line opcde - leave room for the standard opcodes.
125
   Note: If you want to change this, you'll have to update the
126
   "standard_opcode_lengths" table that is emitted below in
127
   out_debug_line().  */
128
#define DWARF2_LINE_OPCODE_BASE		13
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.  */
144
# define DWARF2_LINE_MIN_INSN_LENGTH	1
145
#endif
146
 
147
/* Flag that indicates the initial value of the is_stmt_start flag.  */
148
#define	DWARF2_LINE_DEFAULT_IS_STMT	1
149
 
150
/* Given a special op, return the line skip amount.  */
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
 
158
/* The maximum address skip amount that can be encoded with a special op.  */
159
#define MAX_SPECIAL_ADDR_DELTA		SPECIAL_ADDR(255)
160
 
161
struct line_entry {
162
  struct line_entry *next;
163
  symbolS *label;
164
  struct dwarf2_line_info loc;
165
};
166
 
167
struct line_subseg {
168
  struct line_subseg *next;
169
  subsegT subseg;
170
  struct line_entry *head;
171
  struct line_entry **ptail;
172
  struct line_entry **pmove_tail;
173
};
174
 
175
struct line_seg {
176
  struct line_seg *next;
177
  segT seg;
178
  struct line_subseg *head;
179
  symbolS *text_start;
180
  symbolS *text_end;
181
};
182
 
183
/* Collects data for all line table entries during assembly.  */
184
static struct line_seg *all_segs;
185
/* Hash used to quickly lookup a segment by name, avoiding the need to search
186
   through the all_segs list.  */
187
static struct hash_control *all_segs_hash;
188
static struct line_seg **last_seg_ptr;
189
 
190
struct file_entry {
191
  const char *filename;
192
  unsigned int dir;
193
};
194
 
195
/* Table of files used by .debug_line.  */
196
static struct file_entry *files;
197
static unsigned int files_in_use;
198
static unsigned int files_allocated;
199
 
200
/* Table of directories used by .debug_line.  */
201
static char **dirs;
202
static unsigned int dirs_in_use;
203
static unsigned int dirs_allocated;
204
 
205
/* TRUE when we've seen a .loc directive recently.  Used to avoid
206
   doing work when there's nothing to do.  */
207
bfd_boolean dwarf2_loc_directive_seen;
208
 
209
/* TRUE when we're supposed to set the basic block mark whenever a
210
   label is seen.  */
211
bfd_boolean dwarf2_loc_mark_labels;
212
 
213
/* Current location as indicated by the most recent .loc directive.  */
214
static struct dwarf2_line_info current = {
215
  1, 1, 0, 0,
216
  DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0,
217
 
218
};
219
 
220
/* The size of an address on the target.  */
221
static unsigned int sizeof_address;
222
 
223
static unsigned int get_filenum (const char *, unsigned int);
224
 
225
#ifndef TC_DWARF2_EMIT_OFFSET
226
#define TC_DWARF2_EMIT_OFFSET  generic_dwarf2_emit_offset
227
 
228
/* Create an offset to .dwarf2_*.  */
229
 
230
static void
231
generic_dwarf2_emit_offset (symbolS *symbol, unsigned int size)
232
{
233
  expressionS exp;
234
 
235
  exp.X_op = O_symbol;
236
  exp.X_add_symbol = symbol;
237
  exp.X_add_number = 0;
238
  emit_expr (&exp, size);
239
}
240
#endif
241
 
242
/* Find or create (if CREATE_P) an entry for SEG+SUBSEG in ALL_SEGS.  */
243
 
244
static struct line_subseg *
245
get_line_subseg (segT seg, subsegT subseg, bfd_boolean create_p)
246
{
247
  static segT last_seg;
248
  static subsegT last_subseg;
249
  static struct line_subseg *last_line_subseg;
250
 
251
  struct line_seg *s;
252
  struct line_subseg **pss, *lss;
253
 
254
  if (seg == last_seg && subseg == last_subseg)
255
    return last_line_subseg;
256
 
257
  s = (struct line_seg *) hash_find (all_segs_hash, seg->name);
258
  if (s == NULL)
259
    {
260
      if (!create_p)
261
	return NULL;
262
 
263
      s = (struct line_seg *) xmalloc (sizeof (*s));
264
      s->next = NULL;
265
      s->seg = seg;
266
      s->head = NULL;
267
      *last_seg_ptr = s;
268
      last_seg_ptr = &s->next;
269
      hash_insert (all_segs_hash, seg->name, s);
270
    }
271
  gas_assert (seg == s->seg);
272
 
273
  for (pss = &s->head; (lss = *pss) != NULL ; pss = &lss->next)
274
    {
275
      if (lss->subseg == subseg)
276
	goto found_subseg;
277
      if (lss->subseg > subseg)
278
	break;
279
    }
280
 
281
  lss = (struct line_subseg *) xmalloc (sizeof (*lss));
282
  lss->next = *pss;
283
  lss->subseg = subseg;
284
  lss->head = NULL;
285
  lss->ptail = &lss->head;
286
  lss->pmove_tail = &lss->head;
287
  *pss = lss;
288
 
289
 found_subseg:
290
  last_seg = seg;
291
  last_subseg = subseg;
292
  last_line_subseg = lss;
293
 
294
  return lss;
295
}
296
 
297
/* Record an entry for LOC occurring at LABEL.  */
298
 
299
static void
300
dwarf2_gen_line_info_1 (symbolS *label, struct dwarf2_line_info *loc)
301
{
302
  struct line_subseg *lss;
303
  struct line_entry *e;
304
 
305
  e = (struct line_entry *) xmalloc (sizeof (*e));
306
  e->next = NULL;
307
  e->label = label;
308
  e->loc = *loc;
309
 
310
  lss = get_line_subseg (now_seg, now_subseg, TRUE);
311
  *lss->ptail = e;
312
  lss->ptail = &e->next;
313
}
314
 
315
/* Record an entry for LOC occurring at OFS within the current fragment.  */
316
 
317
void
318
dwarf2_gen_line_info (addressT ofs, struct dwarf2_line_info *loc)
319
{
320
  static unsigned int line = -1;
321
  static unsigned int filenum = -1;
322
 
323
  symbolS *sym;
324
 
325
  /* Early out for as-yet incomplete location information.  */
326
  if (loc->filenum == 0 || loc->line == 0)
327
    return;
328
 
329
  /* Don't emit sequences of line symbols for the same line when the
330
     symbols apply to assembler code.  It is necessary to emit
331
     duplicate line symbols when a compiler asks for them, because GDB
332
     uses them to determine the end of the prologue.  */
333
  if (debug_type == DEBUG_DWARF2
334
      && line == loc->line && filenum == loc->filenum)
335
    return;
336
 
337
  line = loc->line;
338
  filenum = loc->filenum;
339
 
340
  if (linkrelax)
341
    {
342
      char name[120];
343
 
344
      /* Use a non-fake name for the line number location,
345
	 so that it can be referred to by relocations.  */
346
      sprintf (name, ".Loc.%u.%u", line, filenum);
347
      sym = symbol_new (name, now_seg, ofs, frag_now);
348
    }
349
  else
350
    sym = symbol_temp_new (now_seg, ofs, frag_now);
351
  dwarf2_gen_line_info_1 (sym, loc);
352
}
353
 
354
/* Returns the current source information.  If .file directives have
355
   been encountered, the info for the corresponding source file is
356
   returned.  Otherwise, the info for the assembly source file is
357
   returned.  */
358
 
359
void
360
dwarf2_where (struct dwarf2_line_info *line)
361
{
362
  if (debug_type == DEBUG_DWARF2)
363
    {
364
      char *filename;
365
      as_where (&filename, &line->line);
366
      line->filenum = get_filenum (filename, 0);
367
      line->column = 0;
368
      line->flags = DWARF2_FLAG_IS_STMT;
369
      line->isa = current.isa;
370
      line->discriminator = current.discriminator;
371
    }
372
  else
373
    *line = current;
374
}
375
 
376
/* A hook to allow the target backend to inform the line number state
377
   machine of isa changes when assembler debug info is enabled.  */
378
 
379
void
380
dwarf2_set_isa (unsigned int isa)
381
{
382
  current.isa = isa;
383
}
384
 
385
/* Called for each machine instruction, or relatively atomic group of
386
   machine instructions (ie built-in macro).  The instruction or group
387
   is SIZE bytes in length.  If dwarf2 line number generation is called
388
   for, emit a line statement appropriately.  */
389
 
390
void
391
dwarf2_emit_insn (int size)
392
{
393
  struct dwarf2_line_info loc;
394
 
395
  if (!dwarf2_loc_directive_seen && debug_type != DEBUG_DWARF2)
396
    return;
397
 
398
  dwarf2_where (&loc);
399
 
400
  dwarf2_gen_line_info (frag_now_fix () - size, &loc);
401
  dwarf2_consume_line_info ();
402
}
403
 
404
/* Move all previously-emitted line entries for the current position by
405
   DELTA bytes.  This function cannot be used to move the same entries
406
   twice.  */
407
 
408
void
409
dwarf2_move_insn (int delta)
410
{
411
  struct line_subseg *lss;
412
  struct line_entry *e;
413
  valueT now;
414
 
415
  if (delta == 0)
416
    return;
417
 
418
  lss = get_line_subseg (now_seg, now_subseg, FALSE);
419
  if (!lss)
420
    return;
421
 
422
  now = frag_now_fix ();
423
  while ((e = *lss->pmove_tail))
424
    {
425
      if (S_GET_VALUE (e->label) == now)
426
	S_SET_VALUE (e->label, now + delta);
427
      lss->pmove_tail = &e->next;
428
    }
429
}
430
 
431
/* Called after the current line information has been either used with
432
   dwarf2_gen_line_info or saved with a machine instruction for later use.
433
   This resets the state of the line number information to reflect that
434
   it has been used.  */
435
 
436
void
437
dwarf2_consume_line_info (void)
438
{
439
  /* Unless we generate DWARF2 debugging information for each
440
     assembler line, we only emit one line symbol for one LOC.  */
441
  dwarf2_loc_directive_seen = FALSE;
442
 
443
  current.flags &= ~(DWARF2_FLAG_BASIC_BLOCK
444
		     | DWARF2_FLAG_PROLOGUE_END
445
		     | DWARF2_FLAG_EPILOGUE_BEGIN);
446
  current.discriminator = 0;
447
}
448
 
449
/* Called for each (preferably code) label.  If dwarf2_loc_mark_labels
450
   is enabled, emit a basic block marker.  */
451
 
452
void
453
dwarf2_emit_label (symbolS *label)
454
{
455
  struct dwarf2_line_info loc;
456
 
457
  if (!dwarf2_loc_mark_labels)
458
    return;
459
  if (S_GET_SEGMENT (label) != now_seg)
460
    return;
461
  if (!(bfd_get_section_flags (stdoutput, now_seg) & SEC_CODE))
462
    return;
463
  if (files_in_use == 0 && debug_type != DEBUG_DWARF2)
464
    return;
465
 
466
  dwarf2_where (&loc);
467
 
468
  loc.flags |= DWARF2_FLAG_BASIC_BLOCK;
469
 
470
  dwarf2_gen_line_info_1 (label, &loc);
471
  dwarf2_consume_line_info ();
472
}
473
 
474
/* Get a .debug_line file number for FILENAME.  If NUM is nonzero,
475
   allocate it on that file table slot, otherwise return the first
476
   empty one.  */
477
 
478
static unsigned int
479
get_filenum (const char *filename, unsigned int num)
480
{
481
  static unsigned int last_used, last_used_dir_len;
482
  const char *file;
483
  size_t dir_len;
484
  unsigned int i, dir;
485
 
486
  if (num == 0 && last_used)
487
    {
488
      if (! files[last_used].dir
489
	  && filename_cmp (filename, files[last_used].filename) == 0)
490
	return last_used;
491
      if (files[last_used].dir
492
	  && filename_ncmp (filename, dirs[files[last_used].dir],
493
			    last_used_dir_len) == 0
494
	  && IS_DIR_SEPARATOR (filename [last_used_dir_len])
495
	  && filename_cmp (filename + last_used_dir_len + 1,
496
			   files[last_used].filename) == 0)
497
	return last_used;
498
    }
499
 
500
  file = lbasename (filename);
501
  /* Don't make empty string from / or A: from A:/ .  */
502
#ifdef HAVE_DOS_BASED_FILE_SYSTEM
503
  if (file <= filename + 3)
504
    file = filename;
505
#else
506
  if (file == filename + 1)
507
    file = filename;
508
#endif
509
  dir_len = file - filename;
510
 
511
  dir = 0;
512
  if (dir_len)
513
    {
514
#ifndef DWARF2_DIR_SHOULD_END_WITH_SEPARATOR
515
      --dir_len;
516
#endif
517
      for (dir = 1; dir < dirs_in_use; ++dir)
518
	if (filename_ncmp (filename, dirs[dir], dir_len) == 0
519
	    && dirs[dir][dir_len] == '\0')
520
	  break;
521
 
522
      if (dir >= dirs_in_use)
523
	{
524
	  if (dir >= dirs_allocated)
525
	    {
526
	      dirs_allocated = dir + 32;
527
	      dirs = (char **)
528
		     xrealloc (dirs, (dir + 32) * sizeof (const char *));
529
	    }
530
 
531
	  dirs[dir] = (char *) xmalloc (dir_len + 1);
532
	  memcpy (dirs[dir], filename, dir_len);
533
	  dirs[dir][dir_len] = '\0';
534
	  dirs_in_use = dir + 1;
535
	}
536
    }
537
 
538
  if (num == 0)
539
    {
540
      for (i = 1; i < files_in_use; ++i)
541
	if (files[i].dir == dir
542
	    && files[i].filename
543
	    && filename_cmp (file, files[i].filename) == 0)
544
	  {
545
	    last_used = i;
546
	    last_used_dir_len = dir_len;
547
	    return i;
548
	  }
549
    }
550
  else
551
    i = num;
552
 
553
  if (i >= files_allocated)
554
    {
555
      unsigned int old = files_allocated;
556
 
557
      files_allocated = i + 32;
558
      files = (struct file_entry *)
559
	xrealloc (files, (i + 32) * sizeof (struct file_entry));
560
 
561
      memset (files + old, 0, (i + 32 - old) * sizeof (struct file_entry));
562
    }
563
 
564
  files[i].filename = num ? file : xstrdup (file);
565
  files[i].dir = dir;
566
  if (files_in_use < i + 1)
567
    files_in_use = i + 1;
568
  last_used = i;
569
  last_used_dir_len = dir_len;
570
 
571
  return i;
572
}
573
 
574
/* Handle two forms of .file directive:
575
   - Pass .file "source.c" to s_app_file
576
   - Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
577
 
578
   If an entry is added to the file table, return a pointer to the filename. */
579
 
580
char *
581
dwarf2_directive_file (int dummy ATTRIBUTE_UNUSED)
582
{
583
  offsetT num;
584
  char *filename;
585
  int filename_len;
586
 
587
  /* Continue to accept a bare string and pass it off.  */
588
  SKIP_WHITESPACE ();
589
  if (*input_line_pointer == '"')
590
    {
591
      s_app_file (0);
592
      return NULL;
593
    }
594
 
595
  num = get_absolute_expression ();
596
  filename = demand_copy_C_string (&filename_len);
597
  if (filename == NULL)
598
    return NULL;
599
  demand_empty_rest_of_line ();
600
 
601
  if (num < 1)
602
    {
603
      as_bad (_("file number less than one"));
604
      return NULL;
605
    }
606
 
607
  /* A .file directive implies compiler generated debug information is
608
     being supplied.  Turn off gas generated debug info.  */
609
  debug_type = DEBUG_NONE;
610
 
611
  if (num < (int) files_in_use && files[num].filename != 0)
612
    {
613
      as_bad (_("file number %ld already allocated"), (long) num);
614
      return NULL;
615
    }
616
 
617
  get_filenum (filename, num);
618
 
619
  return filename;
620
}
621
 
622
void
623
dwarf2_directive_loc (int dummy ATTRIBUTE_UNUSED)
624
{
625
  offsetT filenum, line;
626
 
627
  /* If we see two .loc directives in a row, force the first one to be
628
     output now.  */
629
  if (dwarf2_loc_directive_seen)
630
    dwarf2_emit_insn (0);
631
 
632
  filenum = get_absolute_expression ();
633
  SKIP_WHITESPACE ();
634
  line = get_absolute_expression ();
635
 
636
  if (filenum < 1)
637
    {
638
      as_bad (_("file number less than one"));
639
      return;
640
    }
641
  if (filenum >= (int) files_in_use || files[filenum].filename == 0)
642
    {
643
      as_bad (_("unassigned file number %ld"), (long) filenum);
644
      return;
645
    }
646
 
647
  current.filenum = filenum;
648
  current.line = line;
649
  current.discriminator = 0;
650
 
651
#ifndef NO_LISTING
652
  if (listing)
653
    {
654
      if (files[filenum].dir)
655
	{
656
	  size_t dir_len = strlen (dirs[files[filenum].dir]);
657
	  size_t file_len = strlen (files[filenum].filename);
658
	  char *cp = (char *) alloca (dir_len + 1 + file_len + 1);
659
 
660
	  memcpy (cp, dirs[files[filenum].dir], dir_len);
661
	  INSERT_DIR_SEPARATOR (cp, dir_len);
662
	  memcpy (cp + dir_len + 1, files[filenum].filename, file_len);
663
	  cp[dir_len + file_len + 1] = '\0';
664
	  listing_source_file (cp);
665
	}
666
      else
667
	listing_source_file (files[filenum].filename);
668
      listing_source_line (line);
669
    }
670
#endif
671
 
672
  SKIP_WHITESPACE ();
673
  if (ISDIGIT (*input_line_pointer))
674
    {
675
      current.column = get_absolute_expression ();
676
      SKIP_WHITESPACE ();
677
    }
678
 
679
  while (ISALPHA (*input_line_pointer))
680
    {
681
      char *p, c;
682
      offsetT value;
683
 
684
      p = input_line_pointer;
685
      c = get_symbol_end ();
686
 
687
      if (strcmp (p, "basic_block") == 0)
688
	{
689
	  current.flags |= DWARF2_FLAG_BASIC_BLOCK;
690
	  *input_line_pointer = c;
691
	}
692
      else if (strcmp (p, "prologue_end") == 0)
693
	{
694
	  current.flags |= DWARF2_FLAG_PROLOGUE_END;
695
	  *input_line_pointer = c;
696
	}
697
      else if (strcmp (p, "epilogue_begin") == 0)
698
	{
699
	  current.flags |= DWARF2_FLAG_EPILOGUE_BEGIN;
700
	  *input_line_pointer = c;
701
	}
702
      else if (strcmp (p, "is_stmt") == 0)
703
	{
704
	  *input_line_pointer = c;
705
	  value = get_absolute_expression ();
706
	  if (value == 0)
707
	    current.flags &= ~DWARF2_FLAG_IS_STMT;
708
	  else if (value == 1)
709
	    current.flags |= DWARF2_FLAG_IS_STMT;
710
	  else
711
	    {
712
	      as_bad (_("is_stmt value not 0 or 1"));
713
	      return;
714
	    }
715
	}
716
      else if (strcmp (p, "isa") == 0)
717
	{
718
	  *input_line_pointer = c;
719
	  value = get_absolute_expression ();
720
	  if (value >= 0)
721
	    current.isa = value;
722
	  else
723
	    {
724
	      as_bad (_("isa number less than zero"));
725
	      return;
726
	    }
727
	}
728
      else if (strcmp (p, "discriminator") == 0)
729
	{
730
	  *input_line_pointer = c;
731
	  value = get_absolute_expression ();
732
	  if (value >= 0)
733
	    current.discriminator = value;
734
	  else
735
	    {
736
	      as_bad (_("discriminator less than zero"));
737
	      return;
738
	    }
739
	}
740
      else
741
	{
742
	  as_bad (_("unknown .loc sub-directive `%s'"), p);
743
	  *input_line_pointer = c;
744
	  return;
745
	}
746
 
747
      SKIP_WHITESPACE ();
748
    }
749
 
750
  demand_empty_rest_of_line ();
751
  dwarf2_loc_directive_seen = TRUE;
752
  debug_type = DEBUG_NONE;
753
}
754
 
755
void
756
dwarf2_directive_loc_mark_labels (int dummy ATTRIBUTE_UNUSED)
757
{
758
  offsetT value = get_absolute_expression ();
759
 
760
  if (value != 0 && value != 1)
761
    {
762
      as_bad (_("expected 0 or 1"));
763
      ignore_rest_of_line ();
764
    }
765
  else
766
    {
767
      dwarf2_loc_mark_labels = value != 0;
768
      demand_empty_rest_of_line ();
769
    }
770
}
771
 
772
static struct frag *
773
first_frag_for_seg (segT seg)
774
{
775
  return seg_info (seg)->frchainP->frch_root;
776
}
777
 
778
static struct frag *
779
last_frag_for_seg (segT seg)
780
{
781
  frchainS *f = seg_info (seg)->frchainP;
782
 
783
  while (f->frch_next != NULL)
784
    f = f->frch_next;
785
 
786
  return f->frch_last;
787
}
788
 
789
/* Emit a single byte into the current segment.  */
790
 
791
static inline void
792
out_byte (int byte)
793
{
794
  FRAG_APPEND_1_CHAR (byte);
795
}
796
 
797
/* Emit a statement program opcode into the current segment.  */
798
 
799
static inline void
800
out_opcode (int opc)
801
{
802
  out_byte (opc);
803
}
804
 
805
/* Emit a two-byte word into the current segment.  */
806
 
807
static inline void
808
out_two (int data)
809
{
810
  md_number_to_chars (frag_more (2), data, 2);
811
}
812
 
813
/* Emit a four byte word into the current segment.  */
814
 
815
static inline void
816
out_four (int data)
817
{
818
  md_number_to_chars (frag_more (4), data, 4);
819
}
820
 
821
/* Emit an unsigned "little-endian base 128" number.  */
822
 
823
static void
824
out_uleb128 (addressT value)
825
{
826
  output_leb128 (frag_more (sizeof_leb128 (value, 0)), value, 0);
827
}
828
 
829
/* Emit a signed "little-endian base 128" number.  */
830
 
831
static void
832
out_leb128 (addressT value)
833
{
834
  output_leb128 (frag_more (sizeof_leb128 (value, 1)), value, 1);
835
}
836
 
837
/* Emit a tuple for .debug_abbrev.  */
838
 
839
static inline void
840
out_abbrev (int name, int form)
841
{
842
  out_uleb128 (name);
843
  out_uleb128 (form);
844
}
845
 
846
/* Get the size of a fragment.  */
847
 
848
static offsetT
849
get_frag_fix (fragS *frag, segT seg)
850
{
851
  frchainS *fr;
852
 
853
  if (frag->fr_next)
854
    return frag->fr_fix;
855
 
856
  /* If a fragment is the last in the chain, special measures must be
857
     taken to find its size before relaxation, since it may be pending
858
     on some subsegment chain.  */
859
  for (fr = seg_info (seg)->frchainP; fr; fr = fr->frch_next)
860
    if (fr->frch_last == frag)
861
      return (char *) obstack_next_free (&fr->frch_obstack) - frag->fr_literal;
862
 
863
  abort ();
864
}
865
 
866
/* Set an absolute address (may result in a relocation entry).  */
867
 
868
static void
869
out_set_addr (symbolS *sym)
870
{
871
  expressionS exp;
872
 
873
  out_opcode (DW_LNS_extended_op);
874
  out_uleb128 (sizeof_address + 1);
875
 
876
  out_opcode (DW_LNE_set_address);
877
  exp.X_op = O_symbol;
878
  exp.X_add_symbol = sym;
879
  exp.X_add_number = 0;
880
  emit_expr (&exp, sizeof_address);
881
}
882
 
883
static void scale_addr_delta (addressT *);
884
 
885
static void
886
scale_addr_delta (addressT *addr_delta)
887
{
888
  static int printed_this = 0;
889
  if (DWARF2_LINE_MIN_INSN_LENGTH > 1)
890
    {
891
      if (*addr_delta % DWARF2_LINE_MIN_INSN_LENGTH != 0  && !printed_this)
892
        {
893
	  as_bad("unaligned opcodes detected in executable segment");
894
          printed_this = 1;
895
        }
896
      *addr_delta /= DWARF2_LINE_MIN_INSN_LENGTH;
897
    }
898
}
899
 
900
/* Encode a pair of line and address skips as efficiently as possible.
901
   Note that the line skip is signed, whereas the address skip is unsigned.
902
 
903
   The following two routines *must* be kept in sync.  This is
904
   enforced by making emit_inc_line_addr abort if we do not emit
905
   exactly the expected number of bytes.  */
906
 
907
static int
908
size_inc_line_addr (int line_delta, addressT addr_delta)
909
{
910
  unsigned int tmp, opcode;
911
  int len = 0;
912
 
913
  /* Scale the address delta by the minimum instruction length.  */
914
  scale_addr_delta (&addr_delta);
915
 
916
  /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
917
     We cannot use special opcodes here, since we want the end_sequence
918
     to emit the matrix entry.  */
919
  if (line_delta == INT_MAX)
920
    {
921
      if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
922
	len = 1;
923
      else
924
	len = 1 + sizeof_leb128 (addr_delta, 0);
925
      return len + 3;
926
    }
927
 
928
  /* Bias the line delta by the base.  */
929
  tmp = line_delta - DWARF2_LINE_BASE;
930
 
931
  /* If the line increment is out of range of a special opcode, we
932
     must encode it with DW_LNS_advance_line.  */
933
  if (tmp >= DWARF2_LINE_RANGE)
934
    {
935
      len = 1 + sizeof_leb128 (line_delta, 1);
936
      line_delta = 0;
937
      tmp = 0 - DWARF2_LINE_BASE;
938
    }
939
 
940
  /* Bias the opcode by the special opcode base.  */
941
  tmp += DWARF2_LINE_OPCODE_BASE;
942
 
943
  /* Avoid overflow when addr_delta is large.  */
944
  if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
945
    {
946
      /* Try using a special opcode.  */
947
      opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
948
      if (opcode <= 255)
949
	return len + 1;
950
 
951
      /* Try using DW_LNS_const_add_pc followed by special op.  */
952
      opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
953
      if (opcode <= 255)
954
	return len + 2;
955
    }
956
 
957
  /* Otherwise use DW_LNS_advance_pc.  */
958
  len += 1 + sizeof_leb128 (addr_delta, 0);
959
 
960
  /* DW_LNS_copy or special opcode.  */
961
  len += 1;
962
 
963
  return len;
964
}
965
 
966
static void
967
emit_inc_line_addr (int line_delta, addressT addr_delta, char *p, int len)
968
{
969
  unsigned int tmp, opcode;
970
  int need_copy = 0;
971
  char *end = p + len;
972
 
973
  /* Line number sequences cannot go backward in addresses.  This means
974
     we've incorrectly ordered the statements in the sequence.  */
975
  gas_assert ((offsetT) addr_delta >= 0);
976
 
977
  /* Scale the address delta by the minimum instruction length.  */
978
  scale_addr_delta (&addr_delta);
979
 
980
  /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.
981
     We cannot use special opcodes here, since we want the end_sequence
982
     to emit the matrix entry.  */
983
  if (line_delta == INT_MAX)
984
    {
985
      if (addr_delta == MAX_SPECIAL_ADDR_DELTA)
986
	*p++ = DW_LNS_const_add_pc;
987
      else
988
	{
989
	  *p++ = DW_LNS_advance_pc;
990
	  p += output_leb128 (p, addr_delta, 0);
991
	}
992
 
993
      *p++ = DW_LNS_extended_op;
994
      *p++ = 1;
995
      *p++ = DW_LNE_end_sequence;
996
      goto done;
997
    }
998
 
999
  /* Bias the line delta by the base.  */
1000
  tmp = line_delta - DWARF2_LINE_BASE;
1001
 
1002
  /* If the line increment is out of range of a special opcode, we
1003
     must encode it with DW_LNS_advance_line.  */
1004
  if (tmp >= DWARF2_LINE_RANGE)
1005
    {
1006
      *p++ = DW_LNS_advance_line;
1007
      p += output_leb128 (p, line_delta, 1);
1008
 
1009
      line_delta = 0;
1010
      tmp = 0 - DWARF2_LINE_BASE;
1011
      need_copy = 1;
1012
    }
1013
 
1014
  /* Prettier, I think, to use DW_LNS_copy instead of a "line +0, addr +0"
1015
     special opcode.  */
1016
  if (line_delta == 0 && addr_delta == 0)
1017
    {
1018
      *p++ = DW_LNS_copy;
1019
      goto done;
1020
    }
1021
 
1022
  /* Bias the opcode by the special opcode base.  */
1023
  tmp += DWARF2_LINE_OPCODE_BASE;
1024
 
1025
  /* Avoid overflow when addr_delta is large.  */
1026
  if (addr_delta < 256 + MAX_SPECIAL_ADDR_DELTA)
1027
    {
1028
      /* Try using a special opcode.  */
1029
      opcode = tmp + addr_delta * DWARF2_LINE_RANGE;
1030
      if (opcode <= 255)
1031
	{
1032
	  *p++ = opcode;
1033
	  goto done;
1034
	}
1035
 
1036
      /* Try using DW_LNS_const_add_pc followed by special op.  */
1037
      opcode = tmp + (addr_delta - MAX_SPECIAL_ADDR_DELTA) * DWARF2_LINE_RANGE;
1038
      if (opcode <= 255)
1039
	{
1040
	  *p++ = DW_LNS_const_add_pc;
1041
	  *p++ = opcode;
1042
	  goto done;
1043
	}
1044
    }
1045
 
1046
  /* Otherwise use DW_LNS_advance_pc.  */
1047
  *p++ = DW_LNS_advance_pc;
1048
  p += output_leb128 (p, addr_delta, 0);
1049
 
1050
  if (need_copy)
1051
    *p++ = DW_LNS_copy;
1052
  else
1053
    *p++ = tmp;
1054
 
1055
 done:
1056
  gas_assert (p == end);
1057
}
1058
 
1059
/* Handy routine to combine calls to the above two routines.  */
1060
 
1061
static void
1062
out_inc_line_addr (int line_delta, addressT addr_delta)
1063
{
1064
  int len = size_inc_line_addr (line_delta, addr_delta);
1065
  emit_inc_line_addr (line_delta, addr_delta, frag_more (len), len);
1066
}
1067
 
1068
/* Write out an alternative form of line and address skips using
1069
   DW_LNS_fixed_advance_pc opcodes.  This uses more space than the default
1070
   line and address information, but it is required if linker relaxation
1071
   could change the code offsets.  The following two routines *must* be
1072
   kept in sync.  */
1073
#define ADDR_DELTA_LIMIT 50000
1074
 
1075
static int
1076
size_fixed_inc_line_addr (int line_delta, addressT addr_delta)
1077
{
1078
  int len = 0;
1079
 
1080
  /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.  */
1081
  if (line_delta != INT_MAX)
1082
    len = 1 + sizeof_leb128 (line_delta, 1);
1083
 
1084
  if (addr_delta > ADDR_DELTA_LIMIT)
1085
    {
1086
      /* DW_LNS_extended_op */
1087
      len += 1 + sizeof_leb128 (sizeof_address + 1, 0);
1088
      /* DW_LNE_set_address */
1089
      len += 1 + sizeof_address;
1090
    }
1091
  else
1092
    /* DW_LNS_fixed_advance_pc */
1093
    len += 3;
1094
 
1095
  if (line_delta == INT_MAX)
1096
    /* DW_LNS_extended_op + DW_LNE_end_sequence */
1097
    len += 3;
1098
  else
1099
    /* DW_LNS_copy */
1100
    len += 1;
1101
 
1102
  return len;
1103
}
1104
 
1105
static void
1106
emit_fixed_inc_line_addr (int line_delta, addressT addr_delta, fragS *frag,
1107
			  char *p, int len)
1108
{
1109
  expressionS *pexp;
1110
  char *end = p + len;
1111
 
1112
  /* Line number sequences cannot go backward in addresses.  This means
1113
     we've incorrectly ordered the statements in the sequence.  */
1114
  gas_assert ((offsetT) addr_delta >= 0);
1115
 
1116
  /* Verify that we have kept in sync with size_fixed_inc_line_addr.  */
1117
  gas_assert (len == size_fixed_inc_line_addr (line_delta, addr_delta));
1118
 
1119
  /* INT_MAX is a signal that this is actually a DW_LNE_end_sequence.  */
1120
  if (line_delta != INT_MAX)
1121
    {
1122
      *p++ = DW_LNS_advance_line;
1123
      p += output_leb128 (p, line_delta, 1);
1124
    }
1125
 
1126
  pexp = symbol_get_value_expression (frag->fr_symbol);
1127
 
1128
  /* The DW_LNS_fixed_advance_pc opcode has a 2-byte operand so it can
1129
     advance the address by at most 64K.  Linker relaxation (without
1130
     which this function would not be used) could change the operand by
1131
     an unknown amount.  If the address increment is getting close to
1132
     the limit, just reset the address.  */
1133
  if (addr_delta > ADDR_DELTA_LIMIT)
1134
    {
1135
      symbolS *to_sym;
1136
      expressionS exp;
1137
 
1138
      gas_assert (pexp->X_op == O_subtract);
1139
      to_sym = pexp->X_add_symbol;
1140
 
1141
      *p++ = DW_LNS_extended_op;
1142
      p += output_leb128 (p, sizeof_address + 1, 0);
1143
      *p++ = DW_LNE_set_address;
1144
      exp.X_op = O_symbol;
1145
      exp.X_add_symbol = to_sym;
1146
      exp.X_add_number = 0;
1147
      emit_expr_fix (&exp, sizeof_address, frag, p);
1148
      p += sizeof_address;
1149
    }
1150
  else
1151
    {
1152
      *p++ = DW_LNS_fixed_advance_pc;
1153
      emit_expr_fix (pexp, 2, frag, p);
1154
      p += 2;
1155
    }
1156
 
1157
  if (line_delta == INT_MAX)
1158
    {
1159
      *p++ = DW_LNS_extended_op;
1160
      *p++ = 1;
1161
      *p++ = DW_LNE_end_sequence;
1162
    }
1163
  else
1164
    *p++ = DW_LNS_copy;
1165
 
1166
  gas_assert (p == end);
1167
}
1168
 
1169
/* Generate a variant frag that we can use to relax address/line
1170
   increments between fragments of the target segment.  */
1171
 
1172
static void
1173
relax_inc_line_addr (int line_delta, symbolS *to_sym, symbolS *from_sym)
1174
{
1175
  expressionS exp;
1176
  int max_chars;
1177
 
1178
  exp.X_op = O_subtract;
1179
  exp.X_add_symbol = to_sym;
1180
  exp.X_op_symbol = from_sym;
1181
  exp.X_add_number = 0;
1182
 
1183
  /* The maximum size of the frag is the line delta with a maximum
1184
     sized address delta.  */
1185
  if (DWARF2_USE_FIXED_ADVANCE_PC)
1186
    max_chars = size_fixed_inc_line_addr (line_delta,
1187
					  -DWARF2_LINE_MIN_INSN_LENGTH);
1188
  else
1189
    max_chars = size_inc_line_addr (line_delta, -DWARF2_LINE_MIN_INSN_LENGTH);
1190
 
1191
  frag_var (rs_dwarf2dbg, max_chars, max_chars, 1,
1192
	    make_expr_symbol (&exp), line_delta, NULL);
1193
}
1194
 
1195
/* The function estimates the size of a rs_dwarf2dbg variant frag
1196
   based on the current values of the symbols.  It is called before
1197
   the relaxation loop.  We set fr_subtype to the expected length.  */
1198
 
1199
int
1200
dwarf2dbg_estimate_size_before_relax (fragS *frag)
1201
{
1202
  offsetT addr_delta;
1203
  int size;
1204
 
1205
  addr_delta = resolve_symbol_value (frag->fr_symbol);
1206
  if (DWARF2_USE_FIXED_ADVANCE_PC)
1207
    size = size_fixed_inc_line_addr (frag->fr_offset, addr_delta);
1208
  else
1209
    size = size_inc_line_addr (frag->fr_offset, addr_delta);
1210
 
1211
  frag->fr_subtype = size;
1212
 
1213
  return size;
1214
}
1215
 
1216
/* This function relaxes a rs_dwarf2dbg variant frag based on the
1217
   current values of the symbols.  fr_subtype is the current length
1218
   of the frag.  This returns the change in frag length.  */
1219
 
1220
int
1221
dwarf2dbg_relax_frag (fragS *frag)
1222
{
1223
  int old_size, new_size;
1224
 
1225
  old_size = frag->fr_subtype;
1226
  new_size = dwarf2dbg_estimate_size_before_relax (frag);
1227
 
1228
  return new_size - old_size;
1229
}
1230
 
1231
/* This function converts a rs_dwarf2dbg variant frag into a normal
1232
   fill frag.  This is called after all relaxation has been done.
1233
   fr_subtype will be the desired length of the frag.  */
1234
 
1235
void
1236
dwarf2dbg_convert_frag (fragS *frag)
1237
{
1238
  offsetT addr_diff;
1239
 
1240
  if (DWARF2_USE_FIXED_ADVANCE_PC)
1241
    {
1242
      /* If linker relaxation is enabled then the distance bewteen the two
1243
	 symbols in the frag->fr_symbol expression might change.  Hence we
1244
	 cannot rely upon the value computed by resolve_symbol_value.
1245
	 Instead we leave the expression unfinalized and allow
1246
	 emit_fixed_inc_line_addr to create a fixup (which later becomes a
1247
	 relocation) that will allow the linker to correctly compute the
1248
	 actual address difference.  We have to use a fixed line advance for
1249
	 this as we cannot (easily) relocate leb128 encoded values.  */
1250
      int saved_finalize_syms = finalize_syms;
1251
 
1252
      finalize_syms = 0;
1253
      addr_diff = resolve_symbol_value (frag->fr_symbol);
1254
      finalize_syms = saved_finalize_syms;
1255
    }
1256
  else
1257
    addr_diff = resolve_symbol_value (frag->fr_symbol);
1258
 
1259
  /* fr_var carries the max_chars that we created the fragment with.
1260
     fr_subtype carries the current expected length.  We must, of
1261
     course, have allocated enough memory earlier.  */
1262
  gas_assert (frag->fr_var >= (int) frag->fr_subtype);
1263
 
1264
  if (DWARF2_USE_FIXED_ADVANCE_PC)
1265
    emit_fixed_inc_line_addr (frag->fr_offset, addr_diff, frag,
1266
			      frag->fr_literal + frag->fr_fix,
1267
			      frag->fr_subtype);
1268
  else
1269
    emit_inc_line_addr (frag->fr_offset, addr_diff,
1270
			frag->fr_literal + frag->fr_fix, frag->fr_subtype);
1271
 
1272
  frag->fr_fix += frag->fr_subtype;
1273
  frag->fr_type = rs_fill;
1274
  frag->fr_var = 0;
1275
  frag->fr_offset = 0;
1276
}
1277
 
1278
/* Generate .debug_line content for the chain of line number entries
1279
   beginning at E, for segment SEG.  */
1280
 
1281
static void
1282
process_entries (segT seg, struct line_entry *e)
1283
{
1284
  unsigned filenum = 1;
1285
  unsigned line = 1;
1286
  unsigned column = 0;
1287
  unsigned isa = 0;
1288
  unsigned flags = DWARF2_LINE_DEFAULT_IS_STMT ? DWARF2_FLAG_IS_STMT : 0;
1289
  fragS *last_frag = NULL, *frag;
1290
  addressT last_frag_ofs = 0, frag_ofs;
1291
  symbolS *last_lab = NULL, *lab;
1292
  struct line_entry *next;
1293
 
1294
  if (flag_dwarf_sections)
1295
    {
1296
      char * name;
1297
      const char * sec_name;
1298
 
1299
      /* Switch to the relevent sub-section before we start to emit
1300
	 the line number table.
1301
 
1302
	 FIXME: These sub-sections do not have a normal Line Number
1303
	 Program Header, thus strictly speaking they are not valid
1304
	 DWARF sections.  Unfortunately the DWARF standard assumes
1305
	 a one-to-one relationship between compilation units and
1306
	 line number tables.  Thus we have to have a .debug_line
1307
	 section, as well as our sub-sections, and we have to ensure
1308
	 that all of the sub-sections are merged into a proper
1309
	 .debug_line section before a debugger sees them.  */
1310
 
1311
      sec_name = bfd_get_section_name (stdoutput, seg);
1312
      if (strcmp (sec_name, ".text") != 0)
1313
	{
1314
	  unsigned int len;
1315
 
1316
	  len = strlen (sec_name);
1317
	  name = xmalloc (len + 11 + 2);
1318
	  sprintf (name, ".debug_line%s", sec_name);
1319
	  subseg_set (subseg_get (name, FALSE), 0);
1320
	}
1321
      else
1322
	/* Don't create a .debug_line.text section -
1323
	   that is redundant.  Instead just switch back to the
1324
	   normal .debug_line section.  */
1325
	subseg_set (subseg_get (".debug_line", FALSE), 0);
1326
    }
1327
 
1328
  do
1329
    {
1330
      int line_delta;
1331
 
1332
      if (filenum != e->loc.filenum)
1333
	{
1334
	  filenum = e->loc.filenum;
1335
	  out_opcode (DW_LNS_set_file);
1336
	  out_uleb128 (filenum);
1337
	}
1338
 
1339
      if (column != e->loc.column)
1340
	{
1341
	  column = e->loc.column;
1342
	  out_opcode (DW_LNS_set_column);
1343
	  out_uleb128 (column);
1344
	}
1345
 
1346
      if (e->loc.discriminator != 0)
1347
	{
1348
	  out_opcode (DW_LNS_extended_op);
1349
	  out_leb128 (1 + sizeof_leb128 (e->loc.discriminator, 0));
1350
	  out_opcode (DW_LNE_set_discriminator);
1351
	  out_uleb128 (e->loc.discriminator);
1352
	}
1353
 
1354
      if (isa != e->loc.isa)
1355
	{
1356
	  isa = e->loc.isa;
1357
	  out_opcode (DW_LNS_set_isa);
1358
	  out_uleb128 (isa);
1359
	}
1360
 
1361
      if ((e->loc.flags ^ flags) & DWARF2_FLAG_IS_STMT)
1362
	{
1363
	  flags = e->loc.flags;
1364
	  out_opcode (DW_LNS_negate_stmt);
1365
	}
1366
 
1367
      if (e->loc.flags & DWARF2_FLAG_BASIC_BLOCK)
1368
	out_opcode (DW_LNS_set_basic_block);
1369
 
1370
      if (e->loc.flags & DWARF2_FLAG_PROLOGUE_END)
1371
	out_opcode (DW_LNS_set_prologue_end);
1372
 
1373
      if (e->loc.flags & DWARF2_FLAG_EPILOGUE_BEGIN)
1374
	out_opcode (DW_LNS_set_epilogue_begin);
1375
 
1376
      /* Don't try to optimize away redundant entries; gdb wants two
1377
	 entries for a function where the code starts on the same line as
1378
	 the {, and there's no way to identify that case here.  Trust gcc
1379
	 to optimize appropriately.  */
1380
      line_delta = e->loc.line - line;
1381
      lab = e->label;
1382
      frag = symbol_get_frag (lab);
1383
      frag_ofs = S_GET_VALUE (lab);
1384
 
1385
      if (last_frag == NULL)
1386
	{
1387
	  out_set_addr (lab);
1388
	  out_inc_line_addr (line_delta, 0);
1389
	}
1390
      else if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1391
	out_inc_line_addr (line_delta, frag_ofs - last_frag_ofs);
1392
      else
1393
	relax_inc_line_addr (line_delta, lab, last_lab);
1394
 
1395
      line = e->loc.line;
1396
      last_lab = lab;
1397
      last_frag = frag;
1398
      last_frag_ofs = frag_ofs;
1399
 
1400
      next = e->next;
1401
      free (e);
1402
      e = next;
1403
    }
1404
  while (e);
1405
 
1406
  /* Emit a DW_LNE_end_sequence for the end of the section.  */
1407
  frag = last_frag_for_seg (seg);
1408
  frag_ofs = get_frag_fix (frag, seg);
1409
  if (frag == last_frag && ! DWARF2_USE_FIXED_ADVANCE_PC)
1410
    out_inc_line_addr (INT_MAX, frag_ofs - last_frag_ofs);
1411
  else
1412
    {
1413
      lab = symbol_temp_new (seg, frag_ofs, frag);
1414
      relax_inc_line_addr (INT_MAX, lab, last_lab);
1415
    }
1416
}
1417
 
1418
/* Emit the directory and file tables for .debug_line.  */
1419
 
1420
static void
1421
out_file_list (void)
1422
{
1423
  size_t size;
1424
  const char *dir;
1425
  char *cp;
1426
  unsigned int i;
1427
 
1428
  /* Emit directory list.  */
1429
  for (i = 1; i < dirs_in_use; ++i)
1430
    {
1431
      dir = remap_debug_filename (dirs[i]);
1432
      size = strlen (dir) + 1;
1433
      cp = frag_more (size);
1434
      memcpy (cp, dir, size);
1435
    }
1436
  /* Terminate it.  */
1437
  out_byte ('\0');
1438
 
1439
  for (i = 1; i < files_in_use; ++i)
1440
    {
1441
      const char *fullfilename;
1442
 
1443
      if (files[i].filename == NULL)
1444
	{
1445
	  as_bad (_("unassigned file number %ld"), (long) i);
1446
	  /* Prevent a crash later, particularly for file 1.  */
1447
	  files[i].filename = "";
1448
	  continue;
1449
	}
1450
 
1451
      fullfilename = DWARF2_FILE_NAME (files[i].filename,
1452
				       files[i].dir ? dirs [files [i].dir] : "");
1453
      size = strlen (fullfilename) + 1;
1454
      cp = frag_more (size);
1455
      memcpy (cp, fullfilename, size);
1456
 
1457
      out_uleb128 (files[i].dir);	/* directory number */
1458
      /* Output the last modification timestamp.  */
1459
      out_uleb128 (DWARF2_FILE_TIME_NAME (files[i].filename,
1460
				          files[i].dir ? dirs [files [i].dir] : ""));
1461
      /* Output the filesize.  */
1462
      out_uleb128 (DWARF2_FILE_SIZE_NAME (files[i].filename,
1463
				          files[i].dir ? dirs [files [i].dir] : ""));
1464
    }
1465
 
1466
  /* Terminate filename list.  */
1467
  out_byte (0);
1468
}
1469
 
1470
/* Switch to SEC and output a header length field.  Return the size of
1471
   offsets used in SEC.  The caller must set EXPR->X_add_symbol value
1472
   to the end of the section.  */
1473
 
1474
static int
1475
out_header (asection *sec, expressionS *exp)
1476
{
1477
  symbolS *start_sym;
1478
  symbolS *end_sym;
1479
 
1480
  subseg_set (sec, 0);
1481
  start_sym = symbol_temp_new_now ();
1482
  end_sym = symbol_temp_make ();
1483
 
1484
  /* Total length of the information.  */
1485
  exp->X_op = O_subtract;
1486
  exp->X_add_symbol = end_sym;
1487
  exp->X_op_symbol = start_sym;
1488
 
1489
  switch (DWARF2_FORMAT (sec))
1490
    {
1491
    case dwarf2_format_32bit:
1492
      exp->X_add_number = -4;
1493
      emit_expr (exp, 4);
1494
      return 4;
1495
 
1496
    case dwarf2_format_64bit:
1497
      exp->X_add_number = -12;
1498
      out_four (-1);
1499
      emit_expr (exp, 8);
1500
      return 8;
1501
 
1502
    case dwarf2_format_64bit_irix:
1503
      exp->X_add_number = -8;
1504
      emit_expr (exp, 8);
1505
      return 8;
1506
    }
1507
 
1508
  as_fatal (_("internal error: unknown dwarf2 format"));
1509
  return 0;
1510
}
1511
 
1512
/* Emit the collected .debug_line data.  */
1513
 
1514
static void
1515
out_debug_line (segT line_seg)
1516
{
1517
  expressionS exp;
1518
  symbolS *prologue_end;
1519
  symbolS *line_end;
1520
  struct line_seg *s;
1521
  int sizeof_offset;
1522
 
1523
  sizeof_offset = out_header (line_seg, &exp);
1524
  line_end = exp.X_add_symbol;
1525
 
1526
  /* Version.  */
1527
  out_two (DWARF2_LINE_VERSION);
1528
 
1529
  /* Length of the prologue following this length.  */
1530
  prologue_end = symbol_temp_make ();
1531
  exp.X_add_symbol = prologue_end;
1532
  exp.X_add_number = - (4 + 2 + 4);
1533
  emit_expr (&exp, sizeof_offset);
1534
 
1535
  /* Parameters of the state machine.  */
1536
  out_byte (DWARF2_LINE_MIN_INSN_LENGTH);
1537
  out_byte (DWARF2_LINE_DEFAULT_IS_STMT);
1538
  out_byte (DWARF2_LINE_BASE);
1539
  out_byte (DWARF2_LINE_RANGE);
1540
  out_byte (DWARF2_LINE_OPCODE_BASE);
1541
 
1542
  /* Standard opcode lengths.  */
1543
  out_byte (0);			/* DW_LNS_copy */
1544
  out_byte (1);			/* DW_LNS_advance_pc */
1545
  out_byte (1);			/* DW_LNS_advance_line */
1546
  out_byte (1);			/* DW_LNS_set_file */
1547
  out_byte (1);			/* DW_LNS_set_column */
1548
  out_byte (0);			/* DW_LNS_negate_stmt */
1549
  out_byte (0);			/* DW_LNS_set_basic_block */
1550
  out_byte (0);			/* DW_LNS_const_add_pc */
1551
  out_byte (1);			/* DW_LNS_fixed_advance_pc */
1552
  out_byte (0);			/* DW_LNS_set_prologue_end */
1553
  out_byte (0);			/* DW_LNS_set_epilogue_begin */
1554
  out_byte (1);			/* DW_LNS_set_isa */
1555
 
1556
  out_file_list ();
1557
 
1558
  symbol_set_value_now (prologue_end);
1559
 
1560
  /* For each section, emit a statement program.  */
1561
  for (s = all_segs; s; s = s->next)
1562
    if (SEG_NORMAL (s->seg))
1563
      process_entries (s->seg, s->head->head);
1564
    else
1565
      as_warn ("dwarf line number information for %s ignored",
1566
	       segment_name (s->seg));
1567
 
1568
  if (flag_dwarf_sections)
1569
    /* We have to switch to the special .debug_line_end section
1570
       before emitting the end-of-debug_line symbol.  The linker
1571
       script arranges for this section to be placed after all the
1572
       (potentially garbage collected) .debug_line. sections.
1573
       This section contains the line_end symbol which is used to
1574
       compute the size of the linked .debug_line section, as seen
1575
       in the DWARF Line Number header.  */
1576
    subseg_set (subseg_get (".debug_line_end", FALSE), 0);
1577
 
1578
  symbol_set_value_now (line_end);
1579
}
1580
 
1581
static void
1582
out_debug_ranges (segT ranges_seg)
1583
{
1584
  unsigned int addr_size = sizeof_address;
1585
  struct line_seg *s;
1586
  expressionS exp;
1587
  unsigned int i;
1588
 
1589
  subseg_set (ranges_seg, 0);
1590
 
1591
  /* Base Address Entry.  */
1592
  for (i = 0; i < addr_size; i++)
1593
    out_byte (0xff);
1594
  for (i = 0; i < addr_size; i++)
1595
    out_byte (0);
1596
 
1597
  /* Range List Entry.  */
1598
  for (s = all_segs; s; s = s->next)
1599
    {
1600
      fragS *frag;
1601
      symbolS *beg, *end;
1602
 
1603
      frag = first_frag_for_seg (s->seg);
1604
      beg = symbol_temp_new (s->seg, 0, frag);
1605
      s->text_start = beg;
1606
 
1607
      frag = last_frag_for_seg (s->seg);
1608
      end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1609
      s->text_end = end;
1610
 
1611
      exp.X_op = O_symbol;
1612
      exp.X_add_symbol = beg;
1613
      exp.X_add_number = 0;
1614
      emit_expr (&exp, addr_size);
1615
 
1616
      exp.X_op = O_symbol;
1617
      exp.X_add_symbol = end;
1618
      exp.X_add_number = 0;
1619
      emit_expr (&exp, addr_size);
1620
    }
1621
 
1622
  /* End of Range Entry.   */
1623
  for (i = 0; i < addr_size; i++)
1624
    out_byte (0);
1625
  for (i = 0; i < addr_size; i++)
1626
    out_byte (0);
1627
}
1628
 
1629
/* Emit data for .debug_aranges.  */
1630
 
1631
static void
1632
out_debug_aranges (segT aranges_seg, segT info_seg)
1633
{
1634
  unsigned int addr_size = sizeof_address;
1635
  struct line_seg *s;
1636
  expressionS exp;
1637
  symbolS *aranges_end;
1638
  char *p;
1639
  int sizeof_offset;
1640
 
1641
  sizeof_offset = out_header (aranges_seg, &exp);
1642
  aranges_end = exp.X_add_symbol;
1643
 
1644
  /* Version.  */
1645
  out_two (DWARF2_ARANGES_VERSION);
1646
 
1647
  /* Offset to .debug_info.  */
1648
  TC_DWARF2_EMIT_OFFSET (section_symbol (info_seg), sizeof_offset);
1649
 
1650
  /* Size of an address (offset portion).  */
1651
  out_byte (addr_size);
1652
 
1653
  /* Size of a segment descriptor.  */
1654
  out_byte (0);
1655
 
1656
  /* Align the header.  */
1657
  frag_align (ffs (2 * addr_size) - 1, 0, 0);
1658
 
1659
  for (s = all_segs; s; s = s->next)
1660
    {
1661
      fragS *frag;
1662
      symbolS *beg, *end;
1663
 
1664
      frag = first_frag_for_seg (s->seg);
1665
      beg = symbol_temp_new (s->seg, 0, frag);
1666
      s->text_start = beg;
1667
 
1668
      frag = last_frag_for_seg (s->seg);
1669
      end = symbol_temp_new (s->seg, get_frag_fix (frag, s->seg), frag);
1670
      s->text_end = end;
1671
 
1672
      exp.X_op = O_symbol;
1673
      exp.X_add_symbol = beg;
1674
      exp.X_add_number = 0;
1675
      emit_expr (&exp, addr_size);
1676
 
1677
      exp.X_op = O_subtract;
1678
      exp.X_add_symbol = end;
1679
      exp.X_op_symbol = beg;
1680
      exp.X_add_number = 0;
1681
      emit_expr (&exp, addr_size);
1682
    }
1683
 
1684
  p = frag_more (2 * addr_size);
1685
  md_number_to_chars (p, 0, addr_size);
1686
  md_number_to_chars (p + addr_size, 0, addr_size);
1687
 
1688
  symbol_set_value_now (aranges_end);
1689
}
1690
 
1691
/* Emit data for .debug_abbrev.  Note that this must be kept in
1692
   sync with out_debug_info below.  */
1693
 
1694
static void
1695
out_debug_abbrev (segT abbrev_seg,
1696
		  segT info_seg ATTRIBUTE_UNUSED,
1697
		  segT line_seg ATTRIBUTE_UNUSED)
1698
{
1699
  subseg_set (abbrev_seg, 0);
1700
 
1701
  out_uleb128 (1);
1702
  out_uleb128 (DW_TAG_compile_unit);
1703
  out_byte (DW_CHILDREN_no);
1704
  if (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit)
1705
    out_abbrev (DW_AT_stmt_list, DW_FORM_data4);
1706
  else
1707
    out_abbrev (DW_AT_stmt_list, DW_FORM_data8);
1708
  if (all_segs->next == NULL)
1709
    {
1710
      out_abbrev (DW_AT_low_pc, DW_FORM_addr);
1711
      if (DWARF2_VERSION < 4)
1712
	out_abbrev (DW_AT_high_pc, DW_FORM_addr);
1713
      else
1714
	out_abbrev (DW_AT_high_pc, (sizeof_address == 4
1715
				    ? DW_FORM_data4 : DW_FORM_data8));
1716
    }
1717
  else
1718
    {
1719
      if (DWARF2_FORMAT (info_seg) == dwarf2_format_32bit)
1720
	out_abbrev (DW_AT_ranges, DW_FORM_data4);
1721
      else
1722
	out_abbrev (DW_AT_ranges, DW_FORM_data8);
1723
    }
1724
  out_abbrev (DW_AT_name, DW_FORM_string);
1725
  out_abbrev (DW_AT_comp_dir, DW_FORM_string);
1726
  out_abbrev (DW_AT_producer, DW_FORM_string);
1727
  out_abbrev (DW_AT_language, DW_FORM_data2);
1728
  out_abbrev (0, 0);
1729
 
1730
  /* Terminate the abbreviations for this compilation unit.  */
1731
  out_byte (0);
1732
}
1733
 
1734
/* Emit a description of this compilation unit for .debug_info.  */
1735
 
1736
static void
1737
out_debug_info (segT info_seg, segT abbrev_seg, segT line_seg, segT ranges_seg)
1738
{
1739
  char producer[128];
1740
  const char *comp_dir;
1741
  const char *dirname;
1742
  expressionS exp;
1743
  symbolS *info_end;
1744
  char *p;
1745
  int len;
1746
  int sizeof_offset;
1747
 
1748
  sizeof_offset = out_header (info_seg, &exp);
1749
  info_end = exp.X_add_symbol;
1750
 
1751
  /* DWARF version.  */
1752
  out_two (DWARF2_VERSION);
1753
 
1754
  /* .debug_abbrev offset */
1755
  TC_DWARF2_EMIT_OFFSET (section_symbol (abbrev_seg), sizeof_offset);
1756
 
1757
  /* Target address size.  */
1758
  out_byte (sizeof_address);
1759
 
1760
  /* DW_TAG_compile_unit DIE abbrev */
1761
  out_uleb128 (1);
1762
 
1763
  /* DW_AT_stmt_list */
1764
  TC_DWARF2_EMIT_OFFSET (section_symbol (line_seg),
1765
			 (DWARF2_FORMAT (line_seg) == dwarf2_format_32bit
1766
			  ? 4 : 8));
1767
 
1768
  /* These two attributes are emitted if all of the code is contiguous.  */
1769
  if (all_segs->next == NULL)
1770
    {
1771
      /* DW_AT_low_pc */
1772
      exp.X_op = O_symbol;
1773
      exp.X_add_symbol = all_segs->text_start;
1774
      exp.X_add_number = 0;
1775
      emit_expr (&exp, sizeof_address);
1776
 
1777
      /* DW_AT_high_pc */
1778
      if (DWARF2_VERSION < 4)
1779
	exp.X_op = O_symbol;
1780
      else
1781
	{
1782
	  exp.X_op = O_subtract;
1783
	  exp.X_op_symbol = all_segs->text_start;
1784
	}
1785
      exp.X_add_symbol = all_segs->text_end;
1786
      exp.X_add_number = 0;
1787
      emit_expr (&exp, sizeof_address);
1788
    }
1789
  else
1790
    {
1791
      /* This attribute is emitted if the code is disjoint.  */
1792
      /* DW_AT_ranges.  */
1793
      TC_DWARF2_EMIT_OFFSET (section_symbol (ranges_seg), sizeof_offset);
1794
    }
1795
 
1796
  /* DW_AT_name.  We don't have the actual file name that was present
1797
     on the command line, so assume files[1] is the main input file.
1798
     We're not supposed to get called unless at least one line number
1799
     entry was emitted, so this should always be defined.  */
1800
  if (files_in_use == 0)
1801
    abort ();
1802
  if (files[1].dir)
1803
    {
1804
      dirname = remap_debug_filename (dirs[files[1].dir]);
1805
      len = strlen (dirname);
1806
#ifdef TE_VMS
1807
      /* Already has trailing slash.  */
1808
      p = frag_more (len);
1809
      memcpy (p, dirname, len);
1810
#else
1811
      p = frag_more (len + 1);
1812
      memcpy (p, dirname, len);
1813
      INSERT_DIR_SEPARATOR (p, len);
1814
#endif
1815
    }
1816
  len = strlen (files[1].filename) + 1;
1817
  p = frag_more (len);
1818
  memcpy (p, files[1].filename, len);
1819
 
1820
  /* DW_AT_comp_dir */
1821
  comp_dir = remap_debug_filename (getpwd ());
1822
  len = strlen (comp_dir) + 1;
1823
  p = frag_more (len);
1824
  memcpy (p, comp_dir, len);
1825
 
1826
  /* DW_AT_producer */
1827
  sprintf (producer, "GNU AS %s", VERSION);
1828
  len = strlen (producer) + 1;
1829
  p = frag_more (len);
1830
  memcpy (p, producer, len);
1831
 
1832
  /* DW_AT_language.  Yes, this is probably not really MIPS, but the
1833
     dwarf2 draft has no standard code for assembler.  */
1834
  out_two (DW_LANG_Mips_Assembler);
1835
 
1836
  symbol_set_value_now (info_end);
1837
}
1838
 
1839
void
1840
dwarf2_init (void)
1841
{
1842
  all_segs_hash = hash_new ();
1843
  last_seg_ptr = &all_segs;
1844
}
1845
 
1846
 
1847
/* Finish the dwarf2 debug sections.  We emit .debug.line if there
1848
   were any .file/.loc directives, or --gdwarf2 was given, or if the
1849
   file has a non-empty .debug_info section and an empty .debug_line
1850
   section.  If we emit .debug_line, and the .debug_info section is
1851
   empty, we also emit .debug_info, .debug_aranges and .debug_abbrev.
1852
   ALL_SEGS will be non-null if there were any .file/.loc directives,
1853
   or --gdwarf2 was given and there were any located instructions
1854
   emitted.  */
1855
 
1856
void
1857
dwarf2_finish (void)
1858
{
1859
  segT line_seg;
1860
  struct line_seg *s;
1861
  segT info_seg;
1862
  int emit_other_sections = 0;
1863
  int empty_debug_line = 0;
1864
 
1865
  info_seg = bfd_get_section_by_name (stdoutput, ".debug_info");
1866
  emit_other_sections = info_seg == NULL || !seg_not_empty_p (info_seg);
1867
 
1868
  line_seg = bfd_get_section_by_name (stdoutput, ".debug_line");
1869
  empty_debug_line = line_seg == NULL || !seg_not_empty_p (line_seg);
1870
 
1871
  /* We can't construct a new debug_line section if we already have one.
1872
     Give an error.  */
1873
  if (all_segs && !empty_debug_line)
1874
    as_fatal ("duplicate .debug_line sections");
1875
 
1876
  if ((!all_segs && emit_other_sections)
1877
      || (!emit_other_sections && !empty_debug_line))
1878
    /* If there is no line information and no non-empty .debug_info
1879
       section, or if there is both a non-empty .debug_info and a non-empty
1880
       .debug_line, then we do nothing.  */
1881
    return;
1882
 
1883
  /* Calculate the size of an address for the target machine.  */
1884
  sizeof_address = DWARF2_ADDR_SIZE (stdoutput);
1885
 
1886
  /* Create and switch to the line number section.  */
1887
  line_seg = subseg_new (".debug_line", 0);
1888
  bfd_set_section_flags (stdoutput, line_seg, SEC_READONLY | SEC_DEBUGGING);
1889
 
1890
  /* For each subsection, chain the debug entries together.  */
1891
  for (s = all_segs; s; s = s->next)
1892
    {
1893
      struct line_subseg *lss = s->head;
1894
      struct line_entry **ptail = lss->ptail;
1895
 
1896
      while ((lss = lss->next) != NULL)
1897
	{
1898
	  *ptail = lss->head;
1899
	  ptail = lss->ptail;
1900
	}
1901
    }
1902
 
1903
  out_debug_line (line_seg);
1904
 
1905
  /* If this is assembler generated line info, and there is no
1906
     debug_info already, we need .debug_info and .debug_abbrev
1907
     sections as well.  */
1908
  if (emit_other_sections)
1909
    {
1910
      segT abbrev_seg;
1911
      segT aranges_seg;
1912
      segT ranges_seg;
1913
 
1914
      gas_assert (all_segs);
1915
 
1916
      info_seg = subseg_new (".debug_info", 0);
1917
      abbrev_seg = subseg_new (".debug_abbrev", 0);
1918
      aranges_seg = subseg_new (".debug_aranges", 0);
1919
 
1920
      bfd_set_section_flags (stdoutput, info_seg,
1921
			     SEC_READONLY | SEC_DEBUGGING);
1922
      bfd_set_section_flags (stdoutput, abbrev_seg,
1923
			     SEC_READONLY | SEC_DEBUGGING);
1924
      bfd_set_section_flags (stdoutput, aranges_seg,
1925
			     SEC_READONLY | SEC_DEBUGGING);
1926
 
1927
      record_alignment (aranges_seg, ffs (2 * sizeof_address) - 1);
1928
 
1929
      if (all_segs->next == NULL)
1930
	ranges_seg = NULL;
1931
      else
1932
	{
1933
	  ranges_seg = subseg_new (".debug_ranges", 0);
1934
	  bfd_set_section_flags (stdoutput, ranges_seg,
1935
				 SEC_READONLY | SEC_DEBUGGING);
1936
	  record_alignment (ranges_seg, ffs (2 * sizeof_address) - 1);
1937
	  out_debug_ranges (ranges_seg);
1938
	}
1939
 
1940
      out_debug_aranges (aranges_seg, info_seg);
1941
      out_debug_abbrev (abbrev_seg, info_seg, line_seg);
1942
      out_debug_info (info_seg, abbrev_seg, line_seg, ranges_seg);
1943
    }
1944
}