re PR fortran/22244 (dimension information is lost for multi-dimension array)
[gcc.git] / gcc / dwarf2out.c
1 /* Output Dwarf2 format symbol table information from GCC.
2 Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
4 Contributed by Gary Funck (gary@intrepid.com).
5 Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
6 Extensively modified by Jason Merrill (jason@cygnus.com).
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify it under
11 the terms of the GNU General Public License as published by the Free
12 Software Foundation; either version 3, or (at your option) any later
13 version.
14
15 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
16 WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING3. If not see
22 <http://www.gnu.org/licenses/>. */
23
24 /* TODO: Emit .debug_line header even when there are no functions, since
25 the file numbers are used by .debug_info. Alternately, leave
26 out locations for types and decls.
27 Avoid talking about ctors and op= for PODs.
28 Factor out common prologue sequences into multiple CIEs. */
29
30 /* The first part of this file deals with the DWARF 2 frame unwind
31 information, which is also used by the GCC efficient exception handling
32 mechanism. The second part, controlled only by an #ifdef
33 DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
34 information. */
35
36 /* DWARF2 Abbreviation Glossary:
37
38 CFA = Canonical Frame Address
39 a fixed address on the stack which identifies a call frame.
40 We define it to be the value of SP just before the call insn.
41 The CFA register and offset, which may change during the course
42 of the function, are used to calculate its value at runtime.
43
44 CFI = Call Frame Instruction
45 an instruction for the DWARF2 abstract machine
46
47 CIE = Common Information Entry
48 information describing information common to one or more FDEs
49
50 DIE = Debugging Information Entry
51
52 FDE = Frame Description Entry
53 information describing the stack call frame, in particular,
54 how to restore registers
55
56 DW_CFA_... = DWARF2 CFA call frame instruction
57 DW_TAG_... = DWARF2 DIE tag */
58
59 #include "config.h"
60 #include "system.h"
61 #include "coretypes.h"
62 #include "tm.h"
63 #include "tree.h"
64 #include "version.h"
65 #include "flags.h"
66 #include "real.h"
67 #include "rtl.h"
68 #include "hard-reg-set.h"
69 #include "regs.h"
70 #include "insn-config.h"
71 #include "reload.h"
72 #include "function.h"
73 #include "output.h"
74 #include "expr.h"
75 #include "libfuncs.h"
76 #include "except.h"
77 #include "dwarf2.h"
78 #include "dwarf2out.h"
79 #include "dwarf2asm.h"
80 #include "toplev.h"
81 #include "varray.h"
82 #include "ggc.h"
83 #include "md5.h"
84 #include "tm_p.h"
85 #include "diagnostic.h"
86 #include "debug.h"
87 #include "target.h"
88 #include "langhooks.h"
89 #include "hashtab.h"
90 #include "cgraph.h"
91 #include "input.h"
92
93 #ifdef DWARF2_DEBUGGING_INFO
94 static void dwarf2out_source_line (unsigned int, const char *);
95 #endif
96
97 #ifndef DWARF2_FRAME_INFO
98 # ifdef DWARF2_DEBUGGING_INFO
99 # define DWARF2_FRAME_INFO \
100 (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
101 # else
102 # define DWARF2_FRAME_INFO 0
103 # endif
104 #endif
105
106 /* Map register numbers held in the call frame info that gcc has
107 collected using DWARF_FRAME_REGNUM to those that should be output in
108 .debug_frame and .eh_frame. */
109 #ifndef DWARF2_FRAME_REG_OUT
110 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
111 #endif
112
113 /* Decide whether we want to emit frame unwind information for the current
114 translation unit. */
115
116 int
117 dwarf2out_do_frame (void)
118 {
119 /* We want to emit correct CFA location expressions or lists, so we
120 have to return true if we're going to output debug info, even if
121 we're not going to output frame or unwind info. */
122 return (write_symbols == DWARF2_DEBUG
123 || write_symbols == VMS_AND_DWARF2_DEBUG
124 || DWARF2_FRAME_INFO
125 #ifdef DWARF2_UNWIND_INFO
126 || (DWARF2_UNWIND_INFO
127 && (flag_unwind_tables
128 || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)))
129 #endif
130 );
131 }
132
133 /* The size of the target's pointer type. */
134 #ifndef PTR_SIZE
135 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
136 #endif
137
138 /* Array of RTXes referenced by the debugging information, which therefore
139 must be kept around forever. */
140 static GTY(()) VEC(rtx,gc) *used_rtx_array;
141
142 /* A pointer to the base of a list of incomplete types which might be
143 completed at some later time. incomplete_types_list needs to be a
144 VEC(tree,gc) because we want to tell the garbage collector about
145 it. */
146 static GTY(()) VEC(tree,gc) *incomplete_types;
147
148 /* A pointer to the base of a table of references to declaration
149 scopes. This table is a display which tracks the nesting
150 of declaration scopes at the current scope and containing
151 scopes. This table is used to find the proper place to
152 define type declaration DIE's. */
153 static GTY(()) VEC(tree,gc) *decl_scope_table;
154
155 /* Pointers to various DWARF2 sections. */
156 static GTY(()) section *debug_info_section;
157 static GTY(()) section *debug_abbrev_section;
158 static GTY(()) section *debug_aranges_section;
159 static GTY(()) section *debug_macinfo_section;
160 static GTY(()) section *debug_line_section;
161 static GTY(()) section *debug_loc_section;
162 static GTY(()) section *debug_pubnames_section;
163 static GTY(()) section *debug_pubtypes_section;
164 static GTY(()) section *debug_str_section;
165 static GTY(()) section *debug_ranges_section;
166 static GTY(()) section *debug_frame_section;
167
168 /* How to start an assembler comment. */
169 #ifndef ASM_COMMENT_START
170 #define ASM_COMMENT_START ";#"
171 #endif
172
173 typedef struct dw_cfi_struct *dw_cfi_ref;
174 typedef struct dw_fde_struct *dw_fde_ref;
175 typedef union dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
176
177 /* Call frames are described using a sequence of Call Frame
178 Information instructions. The register number, offset
179 and address fields are provided as possible operands;
180 their use is selected by the opcode field. */
181
182 enum dw_cfi_oprnd_type {
183 dw_cfi_oprnd_unused,
184 dw_cfi_oprnd_reg_num,
185 dw_cfi_oprnd_offset,
186 dw_cfi_oprnd_addr,
187 dw_cfi_oprnd_loc
188 };
189
190 typedef union dw_cfi_oprnd_struct GTY(())
191 {
192 unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
193 HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
194 const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
195 struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
196 }
197 dw_cfi_oprnd;
198
199 typedef struct dw_cfi_struct GTY(())
200 {
201 dw_cfi_ref dw_cfi_next;
202 enum dwarf_call_frame_info dw_cfi_opc;
203 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
204 dw_cfi_oprnd1;
205 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
206 dw_cfi_oprnd2;
207 }
208 dw_cfi_node;
209
210 /* This is how we define the location of the CFA. We use to handle it
211 as REG + OFFSET all the time, but now it can be more complex.
212 It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
213 Instead of passing around REG and OFFSET, we pass a copy
214 of this structure. */
215 typedef struct cfa_loc GTY(())
216 {
217 HOST_WIDE_INT offset;
218 HOST_WIDE_INT base_offset;
219 unsigned int reg;
220 int indirect; /* 1 if CFA is accessed via a dereference. */
221 } dw_cfa_location;
222
223 /* All call frame descriptions (FDE's) in the GCC generated DWARF
224 refer to a single Common Information Entry (CIE), defined at
225 the beginning of the .debug_frame section. This use of a single
226 CIE obviates the need to keep track of multiple CIE's
227 in the DWARF generation routines below. */
228
229 typedef struct dw_fde_struct GTY(())
230 {
231 tree decl;
232 const char *dw_fde_begin;
233 const char *dw_fde_current_label;
234 const char *dw_fde_end;
235 const char *dw_fde_hot_section_label;
236 const char *dw_fde_hot_section_end_label;
237 const char *dw_fde_unlikely_section_label;
238 const char *dw_fde_unlikely_section_end_label;
239 bool dw_fde_switched_sections;
240 dw_cfi_ref dw_fde_cfi;
241 unsigned funcdef_number;
242 unsigned all_throwers_are_sibcalls : 1;
243 unsigned nothrow : 1;
244 unsigned uses_eh_lsda : 1;
245 }
246 dw_fde_node;
247
248 /* Maximum size (in bytes) of an artificially generated label. */
249 #define MAX_ARTIFICIAL_LABEL_BYTES 30
250
251 /* The size of addresses as they appear in the Dwarf 2 data.
252 Some architectures use word addresses to refer to code locations,
253 but Dwarf 2 info always uses byte addresses. On such machines,
254 Dwarf 2 addresses need to be larger than the architecture's
255 pointers. */
256 #ifndef DWARF2_ADDR_SIZE
257 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
258 #endif
259
260 /* The size in bytes of a DWARF field indicating an offset or length
261 relative to a debug info section, specified to be 4 bytes in the
262 DWARF-2 specification. The SGI/MIPS ABI defines it to be the same
263 as PTR_SIZE. */
264
265 #ifndef DWARF_OFFSET_SIZE
266 #define DWARF_OFFSET_SIZE 4
267 #endif
268
269 /* According to the (draft) DWARF 3 specification, the initial length
270 should either be 4 or 12 bytes. When it's 12 bytes, the first 4
271 bytes are 0xffffffff, followed by the length stored in the next 8
272 bytes.
273
274 However, the SGI/MIPS ABI uses an initial length which is equal to
275 DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
276
277 #ifndef DWARF_INITIAL_LENGTH_SIZE
278 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
279 #endif
280
281 #define DWARF_VERSION 2
282
283 /* Round SIZE up to the nearest BOUNDARY. */
284 #define DWARF_ROUND(SIZE,BOUNDARY) \
285 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
286
287 /* Offsets recorded in opcodes are a multiple of this alignment factor. */
288 #ifndef DWARF_CIE_DATA_ALIGNMENT
289 #ifdef STACK_GROWS_DOWNWARD
290 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
291 #else
292 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
293 #endif
294 #endif
295
296 /* CIE identifier. */
297 #if HOST_BITS_PER_WIDE_INT >= 64
298 #define DWARF_CIE_ID \
299 (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
300 #else
301 #define DWARF_CIE_ID DW_CIE_ID
302 #endif
303
304 /* A pointer to the base of a table that contains frame description
305 information for each routine. */
306 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
307
308 /* Number of elements currently allocated for fde_table. */
309 static GTY(()) unsigned fde_table_allocated;
310
311 /* Number of elements in fde_table currently in use. */
312 static GTY(()) unsigned fde_table_in_use;
313
314 /* Size (in elements) of increments by which we may expand the
315 fde_table. */
316 #define FDE_TABLE_INCREMENT 256
317
318 /* A list of call frame insns for the CIE. */
319 static GTY(()) dw_cfi_ref cie_cfi_head;
320
321 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
322 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
323 attribute that accelerates the lookup of the FDE associated
324 with the subprogram. This variable holds the table index of the FDE
325 associated with the current function (body) definition. */
326 static unsigned current_funcdef_fde;
327 #endif
328
329 struct indirect_string_node GTY(())
330 {
331 const char *str;
332 unsigned int refcount;
333 unsigned int form;
334 char *label;
335 };
336
337 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
338
339 static GTY(()) int dw2_string_counter;
340 static GTY(()) unsigned long dwarf2out_cfi_label_num;
341
342 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
343
344 /* Forward declarations for functions defined in this file. */
345
346 static char *stripattributes (const char *);
347 static const char *dwarf_cfi_name (unsigned);
348 static dw_cfi_ref new_cfi (void);
349 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
350 static void add_fde_cfi (const char *, dw_cfi_ref);
351 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *);
352 static void lookup_cfa (dw_cfa_location *);
353 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
354 #ifdef DWARF2_UNWIND_INFO
355 static void initial_return_save (rtx);
356 #endif
357 static HOST_WIDE_INT stack_adjust_offset (const_rtx);
358 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
359 static void output_call_frame_info (int);
360 static void dwarf2out_stack_adjust (rtx, bool);
361 static void flush_queued_reg_saves (void);
362 static bool clobbers_queued_reg_save (const_rtx);
363 static void dwarf2out_frame_debug_expr (rtx, const char *);
364
365 /* Support for complex CFA locations. */
366 static void output_cfa_loc (dw_cfi_ref);
367 static void get_cfa_from_loc_descr (dw_cfa_location *,
368 struct dw_loc_descr_struct *);
369 static struct dw_loc_descr_struct *build_cfa_loc
370 (dw_cfa_location *, HOST_WIDE_INT);
371 static void def_cfa_1 (const char *, dw_cfa_location *);
372
373 /* How to start an assembler comment. */
374 #ifndef ASM_COMMENT_START
375 #define ASM_COMMENT_START ";#"
376 #endif
377
378 /* Data and reference forms for relocatable data. */
379 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
380 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
381
382 #ifndef DEBUG_FRAME_SECTION
383 #define DEBUG_FRAME_SECTION ".debug_frame"
384 #endif
385
386 #ifndef FUNC_BEGIN_LABEL
387 #define FUNC_BEGIN_LABEL "LFB"
388 #endif
389
390 #ifndef FUNC_END_LABEL
391 #define FUNC_END_LABEL "LFE"
392 #endif
393
394 #ifndef FRAME_BEGIN_LABEL
395 #define FRAME_BEGIN_LABEL "Lframe"
396 #endif
397 #define CIE_AFTER_SIZE_LABEL "LSCIE"
398 #define CIE_END_LABEL "LECIE"
399 #define FDE_LABEL "LSFDE"
400 #define FDE_AFTER_SIZE_LABEL "LASFDE"
401 #define FDE_END_LABEL "LEFDE"
402 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
403 #define LINE_NUMBER_END_LABEL "LELT"
404 #define LN_PROLOG_AS_LABEL "LASLTP"
405 #define LN_PROLOG_END_LABEL "LELTP"
406 #define DIE_LABEL_PREFIX "DW"
407
408 /* The DWARF 2 CFA column which tracks the return address. Normally this
409 is the column for PC, or the first column after all of the hard
410 registers. */
411 #ifndef DWARF_FRAME_RETURN_COLUMN
412 #ifdef PC_REGNUM
413 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM)
414 #else
415 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGISTERS
416 #endif
417 #endif
418
419 /* The mapping from gcc register number to DWARF 2 CFA column number. By
420 default, we just provide columns for all registers. */
421 #ifndef DWARF_FRAME_REGNUM
422 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
423 #endif
424 \f
425 /* Hook used by __throw. */
426
427 rtx
428 expand_builtin_dwarf_sp_column (void)
429 {
430 unsigned int dwarf_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
431 return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1));
432 }
433
434 /* Return a pointer to a copy of the section string name S with all
435 attributes stripped off, and an asterisk prepended (for assemble_name). */
436
437 static inline char *
438 stripattributes (const char *s)
439 {
440 char *stripped = XNEWVEC (char, strlen (s) + 2);
441 char *p = stripped;
442
443 *p++ = '*';
444
445 while (*s && *s != ',')
446 *p++ = *s++;
447
448 *p = '\0';
449 return stripped;
450 }
451
452 /* MEM is a memory reference for the register size table, each element of
453 which has mode MODE. Initialize column C as a return address column. */
454
455 static void
456 init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c)
457 {
458 HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode);
459 HOST_WIDE_INT size = GET_MODE_SIZE (Pmode);
460 emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
461 }
462
463 /* Generate code to initialize the register size table. */
464
465 void
466 expand_builtin_init_dwarf_reg_sizes (tree address)
467 {
468 unsigned int i;
469 enum machine_mode mode = TYPE_MODE (char_type_node);
470 rtx addr = expand_normal (address);
471 rtx mem = gen_rtx_MEM (BLKmode, addr);
472 bool wrote_return_column = false;
473
474 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
475 {
476 int rnum = DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), 1);
477
478 if (rnum < DWARF_FRAME_REGISTERS)
479 {
480 HOST_WIDE_INT offset = rnum * GET_MODE_SIZE (mode);
481 enum machine_mode save_mode = reg_raw_mode[i];
482 HOST_WIDE_INT size;
483
484 if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
485 save_mode = choose_hard_reg_mode (i, 1, true);
486 if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
487 {
488 if (save_mode == VOIDmode)
489 continue;
490 wrote_return_column = true;
491 }
492 size = GET_MODE_SIZE (save_mode);
493 if (offset < 0)
494 continue;
495
496 emit_move_insn (adjust_address (mem, mode, offset),
497 gen_int_mode (size, mode));
498 }
499 }
500
501 if (!wrote_return_column)
502 init_return_column_size (mode, mem, DWARF_FRAME_RETURN_COLUMN);
503
504 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
505 init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN);
506 #endif
507
508 targetm.init_dwarf_reg_sizes_extra (address);
509 }
510
511 /* Convert a DWARF call frame info. operation to its string name */
512
513 static const char *
514 dwarf_cfi_name (unsigned int cfi_opc)
515 {
516 switch (cfi_opc)
517 {
518 case DW_CFA_advance_loc:
519 return "DW_CFA_advance_loc";
520 case DW_CFA_offset:
521 return "DW_CFA_offset";
522 case DW_CFA_restore:
523 return "DW_CFA_restore";
524 case DW_CFA_nop:
525 return "DW_CFA_nop";
526 case DW_CFA_set_loc:
527 return "DW_CFA_set_loc";
528 case DW_CFA_advance_loc1:
529 return "DW_CFA_advance_loc1";
530 case DW_CFA_advance_loc2:
531 return "DW_CFA_advance_loc2";
532 case DW_CFA_advance_loc4:
533 return "DW_CFA_advance_loc4";
534 case DW_CFA_offset_extended:
535 return "DW_CFA_offset_extended";
536 case DW_CFA_restore_extended:
537 return "DW_CFA_restore_extended";
538 case DW_CFA_undefined:
539 return "DW_CFA_undefined";
540 case DW_CFA_same_value:
541 return "DW_CFA_same_value";
542 case DW_CFA_register:
543 return "DW_CFA_register";
544 case DW_CFA_remember_state:
545 return "DW_CFA_remember_state";
546 case DW_CFA_restore_state:
547 return "DW_CFA_restore_state";
548 case DW_CFA_def_cfa:
549 return "DW_CFA_def_cfa";
550 case DW_CFA_def_cfa_register:
551 return "DW_CFA_def_cfa_register";
552 case DW_CFA_def_cfa_offset:
553 return "DW_CFA_def_cfa_offset";
554
555 /* DWARF 3 */
556 case DW_CFA_def_cfa_expression:
557 return "DW_CFA_def_cfa_expression";
558 case DW_CFA_expression:
559 return "DW_CFA_expression";
560 case DW_CFA_offset_extended_sf:
561 return "DW_CFA_offset_extended_sf";
562 case DW_CFA_def_cfa_sf:
563 return "DW_CFA_def_cfa_sf";
564 case DW_CFA_def_cfa_offset_sf:
565 return "DW_CFA_def_cfa_offset_sf";
566
567 /* SGI/MIPS specific */
568 case DW_CFA_MIPS_advance_loc8:
569 return "DW_CFA_MIPS_advance_loc8";
570
571 /* GNU extensions */
572 case DW_CFA_GNU_window_save:
573 return "DW_CFA_GNU_window_save";
574 case DW_CFA_GNU_args_size:
575 return "DW_CFA_GNU_args_size";
576 case DW_CFA_GNU_negative_offset_extended:
577 return "DW_CFA_GNU_negative_offset_extended";
578
579 default:
580 return "DW_CFA_<unknown>";
581 }
582 }
583
584 /* Return a pointer to a newly allocated Call Frame Instruction. */
585
586 static inline dw_cfi_ref
587 new_cfi (void)
588 {
589 dw_cfi_ref cfi = ggc_alloc (sizeof (dw_cfi_node));
590
591 cfi->dw_cfi_next = NULL;
592 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
593 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
594
595 return cfi;
596 }
597
598 /* Add a Call Frame Instruction to list of instructions. */
599
600 static inline void
601 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
602 {
603 dw_cfi_ref *p;
604
605 /* Find the end of the chain. */
606 for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
607 ;
608
609 *p = cfi;
610 }
611
612 /* Generate a new label for the CFI info to refer to. */
613
614 char *
615 dwarf2out_cfi_label (void)
616 {
617 static char label[20];
618
619 ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
620 ASM_OUTPUT_LABEL (asm_out_file, label);
621 return label;
622 }
623
624 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
625 or to the CIE if LABEL is NULL. */
626
627 static void
628 add_fde_cfi (const char *label, dw_cfi_ref cfi)
629 {
630 if (label)
631 {
632 dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
633
634 if (*label == 0)
635 label = dwarf2out_cfi_label ();
636
637 if (fde->dw_fde_current_label == NULL
638 || strcmp (label, fde->dw_fde_current_label) != 0)
639 {
640 dw_cfi_ref xcfi;
641
642 label = xstrdup (label);
643
644 /* Set the location counter to the new label. */
645 xcfi = new_cfi ();
646 /* If we have a current label, advance from there, otherwise
647 set the location directly using set_loc. */
648 xcfi->dw_cfi_opc = fde->dw_fde_current_label
649 ? DW_CFA_advance_loc4
650 : DW_CFA_set_loc;
651 xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
652 add_cfi (&fde->dw_fde_cfi, xcfi);
653
654 fde->dw_fde_current_label = label;
655 }
656
657 add_cfi (&fde->dw_fde_cfi, cfi);
658 }
659
660 else
661 add_cfi (&cie_cfi_head, cfi);
662 }
663
664 /* Subroutine of lookup_cfa. */
665
666 static void
667 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc)
668 {
669 switch (cfi->dw_cfi_opc)
670 {
671 case DW_CFA_def_cfa_offset:
672 loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
673 break;
674 case DW_CFA_def_cfa_offset_sf:
675 loc->offset
676 = cfi->dw_cfi_oprnd1.dw_cfi_offset * DWARF_CIE_DATA_ALIGNMENT;
677 break;
678 case DW_CFA_def_cfa_register:
679 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
680 break;
681 case DW_CFA_def_cfa:
682 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
683 loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
684 break;
685 case DW_CFA_def_cfa_sf:
686 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
687 loc->offset
688 = cfi->dw_cfi_oprnd2.dw_cfi_offset * DWARF_CIE_DATA_ALIGNMENT;
689 break;
690 case DW_CFA_def_cfa_expression:
691 get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
692 break;
693 default:
694 break;
695 }
696 }
697
698 /* Find the previous value for the CFA. */
699
700 static void
701 lookup_cfa (dw_cfa_location *loc)
702 {
703 dw_cfi_ref cfi;
704
705 loc->reg = INVALID_REGNUM;
706 loc->offset = 0;
707 loc->indirect = 0;
708 loc->base_offset = 0;
709
710 for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
711 lookup_cfa_1 (cfi, loc);
712
713 if (fde_table_in_use)
714 {
715 dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
716 for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
717 lookup_cfa_1 (cfi, loc);
718 }
719 }
720
721 /* The current rule for calculating the DWARF2 canonical frame address. */
722 static dw_cfa_location cfa;
723
724 /* The register used for saving registers to the stack, and its offset
725 from the CFA. */
726 static dw_cfa_location cfa_store;
727
728 /* The running total of the size of arguments pushed onto the stack. */
729 static HOST_WIDE_INT args_size;
730
731 /* The last args_size we actually output. */
732 static HOST_WIDE_INT old_args_size;
733
734 /* Entry point to update the canonical frame address (CFA).
735 LABEL is passed to add_fde_cfi. The value of CFA is now to be
736 calculated from REG+OFFSET. */
737
738 void
739 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
740 {
741 dw_cfa_location loc;
742 loc.indirect = 0;
743 loc.base_offset = 0;
744 loc.reg = reg;
745 loc.offset = offset;
746 def_cfa_1 (label, &loc);
747 }
748
749 /* Determine if two dw_cfa_location structures define the same data. */
750
751 static bool
752 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
753 {
754 return (loc1->reg == loc2->reg
755 && loc1->offset == loc2->offset
756 && loc1->indirect == loc2->indirect
757 && (loc1->indirect == 0
758 || loc1->base_offset == loc2->base_offset));
759 }
760
761 /* This routine does the actual work. The CFA is now calculated from
762 the dw_cfa_location structure. */
763
764 static void
765 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
766 {
767 dw_cfi_ref cfi;
768 dw_cfa_location old_cfa, loc;
769
770 cfa = *loc_p;
771 loc = *loc_p;
772
773 if (cfa_store.reg == loc.reg && loc.indirect == 0)
774 cfa_store.offset = loc.offset;
775
776 loc.reg = DWARF_FRAME_REGNUM (loc.reg);
777 lookup_cfa (&old_cfa);
778
779 /* If nothing changed, no need to issue any call frame instructions. */
780 if (cfa_equal_p (&loc, &old_cfa))
781 return;
782
783 cfi = new_cfi ();
784
785 if (loc.reg == old_cfa.reg && !loc.indirect)
786 {
787 /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
788 the CFA register did not change but the offset did. */
789 if (loc.offset < 0)
790 {
791 HOST_WIDE_INT f_offset = loc.offset / DWARF_CIE_DATA_ALIGNMENT;
792 gcc_assert (f_offset * DWARF_CIE_DATA_ALIGNMENT == loc.offset);
793
794 cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
795 cfi->dw_cfi_oprnd1.dw_cfi_offset = f_offset;
796 }
797 else
798 {
799 cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
800 cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
801 }
802 }
803
804 #ifndef MIPS_DEBUGGING_INFO /* SGI dbx thinks this means no offset. */
805 else if (loc.offset == old_cfa.offset
806 && old_cfa.reg != INVALID_REGNUM
807 && !loc.indirect)
808 {
809 /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
810 indicating the CFA register has changed to <register> but the
811 offset has not changed. */
812 cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
813 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
814 }
815 #endif
816
817 else if (loc.indirect == 0)
818 {
819 /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
820 indicating the CFA register has changed to <register> with
821 the specified offset. */
822 if (loc.offset < 0)
823 {
824 HOST_WIDE_INT f_offset = loc.offset / DWARF_CIE_DATA_ALIGNMENT;
825 gcc_assert (f_offset * DWARF_CIE_DATA_ALIGNMENT == loc.offset);
826
827 cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
828 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
829 cfi->dw_cfi_oprnd2.dw_cfi_offset = f_offset;
830 }
831 else
832 {
833 cfi->dw_cfi_opc = DW_CFA_def_cfa;
834 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
835 cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
836 }
837 }
838 else
839 {
840 /* Construct a DW_CFA_def_cfa_expression instruction to
841 calculate the CFA using a full location expression since no
842 register-offset pair is available. */
843 struct dw_loc_descr_struct *loc_list;
844
845 cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
846 loc_list = build_cfa_loc (&loc, 0);
847 cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
848 }
849
850 add_fde_cfi (label, cfi);
851 }
852
853 /* Add the CFI for saving a register. REG is the CFA column number.
854 LABEL is passed to add_fde_cfi.
855 If SREG is -1, the register is saved at OFFSET from the CFA;
856 otherwise it is saved in SREG. */
857
858 static void
859 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
860 {
861 dw_cfi_ref cfi = new_cfi ();
862
863 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
864
865 if (sreg == INVALID_REGNUM)
866 {
867 if (reg & ~0x3f)
868 /* The register number won't fit in 6 bits, so we have to use
869 the long form. */
870 cfi->dw_cfi_opc = DW_CFA_offset_extended;
871 else
872 cfi->dw_cfi_opc = DW_CFA_offset;
873
874 #ifdef ENABLE_CHECKING
875 {
876 /* If we get an offset that is not a multiple of
877 DWARF_CIE_DATA_ALIGNMENT, there is either a bug in the
878 definition of DWARF_CIE_DATA_ALIGNMENT, or a bug in the machine
879 description. */
880 HOST_WIDE_INT check_offset = offset / DWARF_CIE_DATA_ALIGNMENT;
881
882 gcc_assert (check_offset * DWARF_CIE_DATA_ALIGNMENT == offset);
883 }
884 #endif
885 offset /= DWARF_CIE_DATA_ALIGNMENT;
886 if (offset < 0)
887 cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
888
889 cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
890 }
891 else if (sreg == reg)
892 cfi->dw_cfi_opc = DW_CFA_same_value;
893 else
894 {
895 cfi->dw_cfi_opc = DW_CFA_register;
896 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
897 }
898
899 add_fde_cfi (label, cfi);
900 }
901
902 /* Add the CFI for saving a register window. LABEL is passed to reg_save.
903 This CFI tells the unwinder that it needs to restore the window registers
904 from the previous frame's window save area.
905
906 ??? Perhaps we should note in the CIE where windows are saved (instead of
907 assuming 0(cfa)) and what registers are in the window. */
908
909 void
910 dwarf2out_window_save (const char *label)
911 {
912 dw_cfi_ref cfi = new_cfi ();
913
914 cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
915 add_fde_cfi (label, cfi);
916 }
917
918 /* Add a CFI to update the running total of the size of arguments
919 pushed onto the stack. */
920
921 void
922 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
923 {
924 dw_cfi_ref cfi;
925
926 if (size == old_args_size)
927 return;
928
929 old_args_size = size;
930
931 cfi = new_cfi ();
932 cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
933 cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
934 add_fde_cfi (label, cfi);
935 }
936
937 /* Entry point for saving a register to the stack. REG is the GCC register
938 number. LABEL and OFFSET are passed to reg_save. */
939
940 void
941 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
942 {
943 reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
944 }
945
946 /* Entry point for saving the return address in the stack.
947 LABEL and OFFSET are passed to reg_save. */
948
949 void
950 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
951 {
952 reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
953 }
954
955 /* Entry point for saving the return address in a register.
956 LABEL and SREG are passed to reg_save. */
957
958 void
959 dwarf2out_return_reg (const char *label, unsigned int sreg)
960 {
961 reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
962 }
963
964 #ifdef DWARF2_UNWIND_INFO
965 /* Record the initial position of the return address. RTL is
966 INCOMING_RETURN_ADDR_RTX. */
967
968 static void
969 initial_return_save (rtx rtl)
970 {
971 unsigned int reg = INVALID_REGNUM;
972 HOST_WIDE_INT offset = 0;
973
974 switch (GET_CODE (rtl))
975 {
976 case REG:
977 /* RA is in a register. */
978 reg = DWARF_FRAME_REGNUM (REGNO (rtl));
979 break;
980
981 case MEM:
982 /* RA is on the stack. */
983 rtl = XEXP (rtl, 0);
984 switch (GET_CODE (rtl))
985 {
986 case REG:
987 gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
988 offset = 0;
989 break;
990
991 case PLUS:
992 gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
993 offset = INTVAL (XEXP (rtl, 1));
994 break;
995
996 case MINUS:
997 gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
998 offset = -INTVAL (XEXP (rtl, 1));
999 break;
1000
1001 default:
1002 gcc_unreachable ();
1003 }
1004
1005 break;
1006
1007 case PLUS:
1008 /* The return address is at some offset from any value we can
1009 actually load. For instance, on the SPARC it is in %i7+8. Just
1010 ignore the offset for now; it doesn't matter for unwinding frames. */
1011 gcc_assert (GET_CODE (XEXP (rtl, 1)) == CONST_INT);
1012 initial_return_save (XEXP (rtl, 0));
1013 return;
1014
1015 default:
1016 gcc_unreachable ();
1017 }
1018
1019 if (reg != DWARF_FRAME_RETURN_COLUMN)
1020 reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1021 }
1022 #endif
1023
1024 /* Given a SET, calculate the amount of stack adjustment it
1025 contains. */
1026
1027 static HOST_WIDE_INT
1028 stack_adjust_offset (const_rtx pattern)
1029 {
1030 const_rtx src = SET_SRC (pattern);
1031 const_rtx dest = SET_DEST (pattern);
1032 HOST_WIDE_INT offset = 0;
1033 enum rtx_code code;
1034
1035 if (dest == stack_pointer_rtx)
1036 {
1037 /* (set (reg sp) (plus (reg sp) (const_int))) */
1038 code = GET_CODE (src);
1039 if (! (code == PLUS || code == MINUS)
1040 || XEXP (src, 0) != stack_pointer_rtx
1041 || GET_CODE (XEXP (src, 1)) != CONST_INT)
1042 return 0;
1043
1044 offset = INTVAL (XEXP (src, 1));
1045 if (code == PLUS)
1046 offset = -offset;
1047 }
1048 else if (MEM_P (dest))
1049 {
1050 /* (set (mem (pre_dec (reg sp))) (foo)) */
1051 src = XEXP (dest, 0);
1052 code = GET_CODE (src);
1053
1054 switch (code)
1055 {
1056 case PRE_MODIFY:
1057 case POST_MODIFY:
1058 if (XEXP (src, 0) == stack_pointer_rtx)
1059 {
1060 rtx val = XEXP (XEXP (src, 1), 1);
1061 /* We handle only adjustments by constant amount. */
1062 gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1063 && GET_CODE (val) == CONST_INT);
1064 offset = -INTVAL (val);
1065 break;
1066 }
1067 return 0;
1068
1069 case PRE_DEC:
1070 case POST_DEC:
1071 if (XEXP (src, 0) == stack_pointer_rtx)
1072 {
1073 offset = GET_MODE_SIZE (GET_MODE (dest));
1074 break;
1075 }
1076 return 0;
1077
1078 case PRE_INC:
1079 case POST_INC:
1080 if (XEXP (src, 0) == stack_pointer_rtx)
1081 {
1082 offset = -GET_MODE_SIZE (GET_MODE (dest));
1083 break;
1084 }
1085 return 0;
1086
1087 default:
1088 return 0;
1089 }
1090 }
1091 else
1092 return 0;
1093
1094 return offset;
1095 }
1096
1097 /* Check INSN to see if it looks like a push or a stack adjustment, and
1098 make a note of it if it does. EH uses this information to find out how
1099 much extra space it needs to pop off the stack. */
1100
1101 static void
1102 dwarf2out_stack_adjust (rtx insn, bool after_p)
1103 {
1104 HOST_WIDE_INT offset;
1105 const char *label;
1106 int i;
1107
1108 /* Don't handle epilogues at all. Certainly it would be wrong to do so
1109 with this function. Proper support would require all frame-related
1110 insns to be marked, and to be able to handle saving state around
1111 epilogues textually in the middle of the function. */
1112 if (prologue_epilogue_contains (insn) || sibcall_epilogue_contains (insn))
1113 return;
1114
1115 /* If only calls can throw, and we have a frame pointer,
1116 save up adjustments until we see the CALL_INSN. */
1117 if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1118 {
1119 if (CALL_P (insn) && !after_p)
1120 {
1121 /* Extract the size of the args from the CALL rtx itself. */
1122 insn = PATTERN (insn);
1123 if (GET_CODE (insn) == PARALLEL)
1124 insn = XVECEXP (insn, 0, 0);
1125 if (GET_CODE (insn) == SET)
1126 insn = SET_SRC (insn);
1127 gcc_assert (GET_CODE (insn) == CALL);
1128 dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1129 }
1130 return;
1131 }
1132
1133 if (CALL_P (insn) && !after_p)
1134 {
1135 if (!flag_asynchronous_unwind_tables)
1136 dwarf2out_args_size ("", args_size);
1137 return;
1138 }
1139 else if (BARRIER_P (insn))
1140 {
1141 /* When we see a BARRIER, we know to reset args_size to 0. Usually
1142 the compiler will have already emitted a stack adjustment, but
1143 doesn't bother for calls to noreturn functions. */
1144 #ifdef STACK_GROWS_DOWNWARD
1145 offset = -args_size;
1146 #else
1147 offset = args_size;
1148 #endif
1149 }
1150 else if (GET_CODE (PATTERN (insn)) == SET)
1151 offset = stack_adjust_offset (PATTERN (insn));
1152 else if (GET_CODE (PATTERN (insn)) == PARALLEL
1153 || GET_CODE (PATTERN (insn)) == SEQUENCE)
1154 {
1155 /* There may be stack adjustments inside compound insns. Search
1156 for them. */
1157 for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1158 if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1159 offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i));
1160 }
1161 else
1162 return;
1163
1164 if (offset == 0)
1165 return;
1166
1167 if (cfa.reg == STACK_POINTER_REGNUM)
1168 cfa.offset += offset;
1169
1170 #ifndef STACK_GROWS_DOWNWARD
1171 offset = -offset;
1172 #endif
1173
1174 args_size += offset;
1175 if (args_size < 0)
1176 args_size = 0;
1177
1178 label = dwarf2out_cfi_label ();
1179 def_cfa_1 (label, &cfa);
1180 if (flag_asynchronous_unwind_tables)
1181 dwarf2out_args_size (label, args_size);
1182 }
1183
1184 #endif
1185
1186 /* We delay emitting a register save until either (a) we reach the end
1187 of the prologue or (b) the register is clobbered. This clusters
1188 register saves so that there are fewer pc advances. */
1189
1190 struct queued_reg_save GTY(())
1191 {
1192 struct queued_reg_save *next;
1193 rtx reg;
1194 HOST_WIDE_INT cfa_offset;
1195 rtx saved_reg;
1196 };
1197
1198 static GTY(()) struct queued_reg_save *queued_reg_saves;
1199
1200 /* The caller's ORIG_REG is saved in SAVED_IN_REG. */
1201 struct reg_saved_in_data GTY(()) {
1202 rtx orig_reg;
1203 rtx saved_in_reg;
1204 };
1205
1206 /* A list of registers saved in other registers.
1207 The list intentionally has a small maximum capacity of 4; if your
1208 port needs more than that, you might consider implementing a
1209 more efficient data structure. */
1210 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1211 static GTY(()) size_t num_regs_saved_in_regs;
1212
1213 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1214 static const char *last_reg_save_label;
1215
1216 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1217 SREG, or if SREG is NULL then it is saved at OFFSET to the CFA. */
1218
1219 static void
1220 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1221 {
1222 struct queued_reg_save *q;
1223
1224 /* Duplicates waste space, but it's also necessary to remove them
1225 for correctness, since the queue gets output in reverse
1226 order. */
1227 for (q = queued_reg_saves; q != NULL; q = q->next)
1228 if (REGNO (q->reg) == REGNO (reg))
1229 break;
1230
1231 if (q == NULL)
1232 {
1233 q = ggc_alloc (sizeof (*q));
1234 q->next = queued_reg_saves;
1235 queued_reg_saves = q;
1236 }
1237
1238 q->reg = reg;
1239 q->cfa_offset = offset;
1240 q->saved_reg = sreg;
1241
1242 last_reg_save_label = label;
1243 }
1244
1245 /* Output all the entries in QUEUED_REG_SAVES. */
1246
1247 static void
1248 flush_queued_reg_saves (void)
1249 {
1250 struct queued_reg_save *q;
1251
1252 for (q = queued_reg_saves; q; q = q->next)
1253 {
1254 size_t i;
1255 unsigned int reg, sreg;
1256
1257 for (i = 0; i < num_regs_saved_in_regs; i++)
1258 if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1259 break;
1260 if (q->saved_reg && i == num_regs_saved_in_regs)
1261 {
1262 gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1263 num_regs_saved_in_regs++;
1264 }
1265 if (i != num_regs_saved_in_regs)
1266 {
1267 regs_saved_in_regs[i].orig_reg = q->reg;
1268 regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1269 }
1270
1271 reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1272 if (q->saved_reg)
1273 sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1274 else
1275 sreg = INVALID_REGNUM;
1276 reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1277 }
1278
1279 queued_reg_saves = NULL;
1280 last_reg_save_label = NULL;
1281 }
1282
1283 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1284 location for? Or, does it clobber a register which we've previously
1285 said that some other register is saved in, and for which we now
1286 have a new location for? */
1287
1288 static bool
1289 clobbers_queued_reg_save (const_rtx insn)
1290 {
1291 struct queued_reg_save *q;
1292
1293 for (q = queued_reg_saves; q; q = q->next)
1294 {
1295 size_t i;
1296 if (modified_in_p (q->reg, insn))
1297 return true;
1298 for (i = 0; i < num_regs_saved_in_regs; i++)
1299 if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1300 && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1301 return true;
1302 }
1303
1304 return false;
1305 }
1306
1307 /* Entry point for saving the first register into the second. */
1308
1309 void
1310 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1311 {
1312 size_t i;
1313 unsigned int regno, sregno;
1314
1315 for (i = 0; i < num_regs_saved_in_regs; i++)
1316 if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1317 break;
1318 if (i == num_regs_saved_in_regs)
1319 {
1320 gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1321 num_regs_saved_in_regs++;
1322 }
1323 regs_saved_in_regs[i].orig_reg = reg;
1324 regs_saved_in_regs[i].saved_in_reg = sreg;
1325
1326 regno = DWARF_FRAME_REGNUM (REGNO (reg));
1327 sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1328 reg_save (label, regno, sregno, 0);
1329 }
1330
1331 /* What register, if any, is currently saved in REG? */
1332
1333 static rtx
1334 reg_saved_in (rtx reg)
1335 {
1336 unsigned int regn = REGNO (reg);
1337 size_t i;
1338 struct queued_reg_save *q;
1339
1340 for (q = queued_reg_saves; q; q = q->next)
1341 if (q->saved_reg && regn == REGNO (q->saved_reg))
1342 return q->reg;
1343
1344 for (i = 0; i < num_regs_saved_in_regs; i++)
1345 if (regs_saved_in_regs[i].saved_in_reg
1346 && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1347 return regs_saved_in_regs[i].orig_reg;
1348
1349 return NULL_RTX;
1350 }
1351
1352
1353 /* A temporary register holding an integral value used in adjusting SP
1354 or setting up the store_reg. The "offset" field holds the integer
1355 value, not an offset. */
1356 static dw_cfa_location cfa_temp;
1357
1358 /* Record call frame debugging information for an expression EXPR,
1359 which either sets SP or FP (adjusting how we calculate the frame
1360 address) or saves a register to the stack or another register.
1361 LABEL indicates the address of EXPR.
1362
1363 This function encodes a state machine mapping rtxes to actions on
1364 cfa, cfa_store, and cfa_temp.reg. We describe these rules so
1365 users need not read the source code.
1366
1367 The High-Level Picture
1368
1369 Changes in the register we use to calculate the CFA: Currently we
1370 assume that if you copy the CFA register into another register, we
1371 should take the other one as the new CFA register; this seems to
1372 work pretty well. If it's wrong for some target, it's simple
1373 enough not to set RTX_FRAME_RELATED_P on the insn in question.
1374
1375 Changes in the register we use for saving registers to the stack:
1376 This is usually SP, but not always. Again, we deduce that if you
1377 copy SP into another register (and SP is not the CFA register),
1378 then the new register is the one we will be using for register
1379 saves. This also seems to work.
1380
1381 Register saves: There's not much guesswork about this one; if
1382 RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1383 register save, and the register used to calculate the destination
1384 had better be the one we think we're using for this purpose.
1385 It's also assumed that a copy from a call-saved register to another
1386 register is saving that register if RTX_FRAME_RELATED_P is set on
1387 that instruction. If the copy is from a call-saved register to
1388 the *same* register, that means that the register is now the same
1389 value as in the caller.
1390
1391 Except: If the register being saved is the CFA register, and the
1392 offset is nonzero, we are saving the CFA, so we assume we have to
1393 use DW_CFA_def_cfa_expression. If the offset is 0, we assume that
1394 the intent is to save the value of SP from the previous frame.
1395
1396 In addition, if a register has previously been saved to a different
1397 register,
1398
1399 Invariants / Summaries of Rules
1400
1401 cfa current rule for calculating the CFA. It usually
1402 consists of a register and an offset.
1403 cfa_store register used by prologue code to save things to the stack
1404 cfa_store.offset is the offset from the value of
1405 cfa_store.reg to the actual CFA
1406 cfa_temp register holding an integral value. cfa_temp.offset
1407 stores the value, which will be used to adjust the
1408 stack pointer. cfa_temp is also used like cfa_store,
1409 to track stores to the stack via fp or a temp reg.
1410
1411 Rules 1- 4: Setting a register's value to cfa.reg or an expression
1412 with cfa.reg as the first operand changes the cfa.reg and its
1413 cfa.offset. Rule 1 and 4 also set cfa_temp.reg and
1414 cfa_temp.offset.
1415
1416 Rules 6- 9: Set a non-cfa.reg register value to a constant or an
1417 expression yielding a constant. This sets cfa_temp.reg
1418 and cfa_temp.offset.
1419
1420 Rule 5: Create a new register cfa_store used to save items to the
1421 stack.
1422
1423 Rules 10-14: Save a register to the stack. Define offset as the
1424 difference of the original location and cfa_store's
1425 location (or cfa_temp's location if cfa_temp is used).
1426
1427 The Rules
1428
1429 "{a,b}" indicates a choice of a xor b.
1430 "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
1431
1432 Rule 1:
1433 (set <reg1> <reg2>:cfa.reg)
1434 effects: cfa.reg = <reg1>
1435 cfa.offset unchanged
1436 cfa_temp.reg = <reg1>
1437 cfa_temp.offset = cfa.offset
1438
1439 Rule 2:
1440 (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
1441 {<const_int>,<reg>:cfa_temp.reg}))
1442 effects: cfa.reg = sp if fp used
1443 cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
1444 cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
1445 if cfa_store.reg==sp
1446
1447 Rule 3:
1448 (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
1449 effects: cfa.reg = fp
1450 cfa_offset += +/- <const_int>
1451
1452 Rule 4:
1453 (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
1454 constraints: <reg1> != fp
1455 <reg1> != sp
1456 effects: cfa.reg = <reg1>
1457 cfa_temp.reg = <reg1>
1458 cfa_temp.offset = cfa.offset
1459
1460 Rule 5:
1461 (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
1462 constraints: <reg1> != fp
1463 <reg1> != sp
1464 effects: cfa_store.reg = <reg1>
1465 cfa_store.offset = cfa.offset - cfa_temp.offset
1466
1467 Rule 6:
1468 (set <reg> <const_int>)
1469 effects: cfa_temp.reg = <reg>
1470 cfa_temp.offset = <const_int>
1471
1472 Rule 7:
1473 (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
1474 effects: cfa_temp.reg = <reg1>
1475 cfa_temp.offset |= <const_int>
1476
1477 Rule 8:
1478 (set <reg> (high <exp>))
1479 effects: none
1480
1481 Rule 9:
1482 (set <reg> (lo_sum <exp> <const_int>))
1483 effects: cfa_temp.reg = <reg>
1484 cfa_temp.offset = <const_int>
1485
1486 Rule 10:
1487 (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
1488 effects: cfa_store.offset -= <const_int>
1489 cfa.offset = cfa_store.offset if cfa.reg == sp
1490 cfa.reg = sp
1491 cfa.base_offset = -cfa_store.offset
1492
1493 Rule 11:
1494 (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
1495 effects: cfa_store.offset += -/+ mode_size(mem)
1496 cfa.offset = cfa_store.offset if cfa.reg == sp
1497 cfa.reg = sp
1498 cfa.base_offset = -cfa_store.offset
1499
1500 Rule 12:
1501 (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
1502
1503 <reg2>)
1504 effects: cfa.reg = <reg1>
1505 cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
1506
1507 Rule 13:
1508 (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
1509 effects: cfa.reg = <reg1>
1510 cfa.base_offset = -{cfa_store,cfa_temp}.offset
1511
1512 Rule 14:
1513 (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
1514 effects: cfa.reg = <reg1>
1515 cfa.base_offset = -cfa_temp.offset
1516 cfa_temp.offset -= mode_size(mem)
1517
1518 Rule 15:
1519 (set <reg> {unspec, unspec_volatile})
1520 effects: target-dependent */
1521
1522 static void
1523 dwarf2out_frame_debug_expr (rtx expr, const char *label)
1524 {
1525 rtx src, dest;
1526 HOST_WIDE_INT offset;
1527
1528 /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
1529 the PARALLEL independently. The first element is always processed if
1530 it is a SET. This is for backward compatibility. Other elements
1531 are processed only if they are SETs and the RTX_FRAME_RELATED_P
1532 flag is set in them. */
1533 if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
1534 {
1535 int par_index;
1536 int limit = XVECLEN (expr, 0);
1537 rtx elem;
1538
1539 /* PARALLELs have strict read-modify-write semantics, so we
1540 ought to evaluate every rvalue before changing any lvalue.
1541 It's cumbersome to do that in general, but there's an
1542 easy approximation that is enough for all current users:
1543 handle register saves before register assignments. */
1544 if (GET_CODE (expr) == PARALLEL)
1545 for (par_index = 0; par_index < limit; par_index++)
1546 {
1547 elem = XVECEXP (expr, 0, par_index);
1548 if (GET_CODE (elem) == SET
1549 && MEM_P (SET_DEST (elem))
1550 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
1551 dwarf2out_frame_debug_expr (elem, label);
1552 }
1553
1554 for (par_index = 0; par_index < limit; par_index++)
1555 {
1556 elem = XVECEXP (expr, 0, par_index);
1557 if (GET_CODE (elem) == SET
1558 && (!MEM_P (SET_DEST (elem)) || GET_CODE (expr) == SEQUENCE)
1559 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
1560 dwarf2out_frame_debug_expr (elem, label);
1561 }
1562 return;
1563 }
1564
1565 gcc_assert (GET_CODE (expr) == SET);
1566
1567 src = SET_SRC (expr);
1568 dest = SET_DEST (expr);
1569
1570 if (REG_P (src))
1571 {
1572 rtx rsi = reg_saved_in (src);
1573 if (rsi)
1574 src = rsi;
1575 }
1576
1577 switch (GET_CODE (dest))
1578 {
1579 case REG:
1580 switch (GET_CODE (src))
1581 {
1582 /* Setting FP from SP. */
1583 case REG:
1584 if (cfa.reg == (unsigned) REGNO (src))
1585 {
1586 /* Rule 1 */
1587 /* Update the CFA rule wrt SP or FP. Make sure src is
1588 relative to the current CFA register.
1589
1590 We used to require that dest be either SP or FP, but the
1591 ARM copies SP to a temporary register, and from there to
1592 FP. So we just rely on the backends to only set
1593 RTX_FRAME_RELATED_P on appropriate insns. */
1594 cfa.reg = REGNO (dest);
1595 cfa_temp.reg = cfa.reg;
1596 cfa_temp.offset = cfa.offset;
1597 }
1598 else
1599 {
1600 /* Saving a register in a register. */
1601 gcc_assert (!fixed_regs [REGNO (dest)]
1602 /* For the SPARC and its register window. */
1603 || (DWARF_FRAME_REGNUM (REGNO (src))
1604 == DWARF_FRAME_RETURN_COLUMN));
1605 queue_reg_save (label, src, dest, 0);
1606 }
1607 break;
1608
1609 case PLUS:
1610 case MINUS:
1611 case LO_SUM:
1612 if (dest == stack_pointer_rtx)
1613 {
1614 /* Rule 2 */
1615 /* Adjusting SP. */
1616 switch (GET_CODE (XEXP (src, 1)))
1617 {
1618 case CONST_INT:
1619 offset = INTVAL (XEXP (src, 1));
1620 break;
1621 case REG:
1622 gcc_assert ((unsigned) REGNO (XEXP (src, 1))
1623 == cfa_temp.reg);
1624 offset = cfa_temp.offset;
1625 break;
1626 default:
1627 gcc_unreachable ();
1628 }
1629
1630 if (XEXP (src, 0) == hard_frame_pointer_rtx)
1631 {
1632 /* Restoring SP from FP in the epilogue. */
1633 gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
1634 cfa.reg = STACK_POINTER_REGNUM;
1635 }
1636 else if (GET_CODE (src) == LO_SUM)
1637 /* Assume we've set the source reg of the LO_SUM from sp. */
1638 ;
1639 else
1640 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
1641
1642 if (GET_CODE (src) != MINUS)
1643 offset = -offset;
1644 if (cfa.reg == STACK_POINTER_REGNUM)
1645 cfa.offset += offset;
1646 if (cfa_store.reg == STACK_POINTER_REGNUM)
1647 cfa_store.offset += offset;
1648 }
1649 else if (dest == hard_frame_pointer_rtx)
1650 {
1651 /* Rule 3 */
1652 /* Either setting the FP from an offset of the SP,
1653 or adjusting the FP */
1654 gcc_assert (frame_pointer_needed);
1655
1656 gcc_assert (REG_P (XEXP (src, 0))
1657 && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
1658 && GET_CODE (XEXP (src, 1)) == CONST_INT);
1659 offset = INTVAL (XEXP (src, 1));
1660 if (GET_CODE (src) != MINUS)
1661 offset = -offset;
1662 cfa.offset += offset;
1663 cfa.reg = HARD_FRAME_POINTER_REGNUM;
1664 }
1665 else
1666 {
1667 gcc_assert (GET_CODE (src) != MINUS);
1668
1669 /* Rule 4 */
1670 if (REG_P (XEXP (src, 0))
1671 && REGNO (XEXP (src, 0)) == cfa.reg
1672 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1673 {
1674 /* Setting a temporary CFA register that will be copied
1675 into the FP later on. */
1676 offset = - INTVAL (XEXP (src, 1));
1677 cfa.offset += offset;
1678 cfa.reg = REGNO (dest);
1679 /* Or used to save regs to the stack. */
1680 cfa_temp.reg = cfa.reg;
1681 cfa_temp.offset = cfa.offset;
1682 }
1683
1684 /* Rule 5 */
1685 else if (REG_P (XEXP (src, 0))
1686 && REGNO (XEXP (src, 0)) == cfa_temp.reg
1687 && XEXP (src, 1) == stack_pointer_rtx)
1688 {
1689 /* Setting a scratch register that we will use instead
1690 of SP for saving registers to the stack. */
1691 gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
1692 cfa_store.reg = REGNO (dest);
1693 cfa_store.offset = cfa.offset - cfa_temp.offset;
1694 }
1695
1696 /* Rule 9 */
1697 else if (GET_CODE (src) == LO_SUM
1698 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1699 {
1700 cfa_temp.reg = REGNO (dest);
1701 cfa_temp.offset = INTVAL (XEXP (src, 1));
1702 }
1703 else
1704 gcc_unreachable ();
1705 }
1706 break;
1707
1708 /* Rule 6 */
1709 case CONST_INT:
1710 cfa_temp.reg = REGNO (dest);
1711 cfa_temp.offset = INTVAL (src);
1712 break;
1713
1714 /* Rule 7 */
1715 case IOR:
1716 gcc_assert (REG_P (XEXP (src, 0))
1717 && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
1718 && GET_CODE (XEXP (src, 1)) == CONST_INT);
1719
1720 if ((unsigned) REGNO (dest) != cfa_temp.reg)
1721 cfa_temp.reg = REGNO (dest);
1722 cfa_temp.offset |= INTVAL (XEXP (src, 1));
1723 break;
1724
1725 /* Skip over HIGH, assuming it will be followed by a LO_SUM,
1726 which will fill in all of the bits. */
1727 /* Rule 8 */
1728 case HIGH:
1729 break;
1730
1731 /* Rule 15 */
1732 case UNSPEC:
1733 case UNSPEC_VOLATILE:
1734 gcc_assert (targetm.dwarf_handle_frame_unspec);
1735 targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
1736 return;
1737
1738 default:
1739 gcc_unreachable ();
1740 }
1741
1742 def_cfa_1 (label, &cfa);
1743 break;
1744
1745 case MEM:
1746 gcc_assert (REG_P (src));
1747
1748 /* Saving a register to the stack. Make sure dest is relative to the
1749 CFA register. */
1750 switch (GET_CODE (XEXP (dest, 0)))
1751 {
1752 /* Rule 10 */
1753 /* With a push. */
1754 case PRE_MODIFY:
1755 /* We can't handle variable size modifications. */
1756 gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
1757 == CONST_INT);
1758 offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
1759
1760 gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
1761 && cfa_store.reg == STACK_POINTER_REGNUM);
1762
1763 cfa_store.offset += offset;
1764 if (cfa.reg == STACK_POINTER_REGNUM)
1765 cfa.offset = cfa_store.offset;
1766
1767 offset = -cfa_store.offset;
1768 break;
1769
1770 /* Rule 11 */
1771 case PRE_INC:
1772 case PRE_DEC:
1773 offset = GET_MODE_SIZE (GET_MODE (dest));
1774 if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
1775 offset = -offset;
1776
1777 gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
1778 && cfa_store.reg == STACK_POINTER_REGNUM);
1779
1780 cfa_store.offset += offset;
1781 if (cfa.reg == STACK_POINTER_REGNUM)
1782 cfa.offset = cfa_store.offset;
1783
1784 offset = -cfa_store.offset;
1785 break;
1786
1787 /* Rule 12 */
1788 /* With an offset. */
1789 case PLUS:
1790 case MINUS:
1791 case LO_SUM:
1792 {
1793 int regno;
1794
1795 gcc_assert (GET_CODE (XEXP (XEXP (dest, 0), 1)) == CONST_INT
1796 && REG_P (XEXP (XEXP (dest, 0), 0)));
1797 offset = INTVAL (XEXP (XEXP (dest, 0), 1));
1798 if (GET_CODE (XEXP (dest, 0)) == MINUS)
1799 offset = -offset;
1800
1801 regno = REGNO (XEXP (XEXP (dest, 0), 0));
1802
1803 if (cfa_store.reg == (unsigned) regno)
1804 offset -= cfa_store.offset;
1805 else
1806 {
1807 gcc_assert (cfa_temp.reg == (unsigned) regno);
1808 offset -= cfa_temp.offset;
1809 }
1810 }
1811 break;
1812
1813 /* Rule 13 */
1814 /* Without an offset. */
1815 case REG:
1816 {
1817 int regno = REGNO (XEXP (dest, 0));
1818
1819 if (cfa_store.reg == (unsigned) regno)
1820 offset = -cfa_store.offset;
1821 else
1822 {
1823 gcc_assert (cfa_temp.reg == (unsigned) regno);
1824 offset = -cfa_temp.offset;
1825 }
1826 }
1827 break;
1828
1829 /* Rule 14 */
1830 case POST_INC:
1831 gcc_assert (cfa_temp.reg
1832 == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
1833 offset = -cfa_temp.offset;
1834 cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
1835 break;
1836
1837 default:
1838 gcc_unreachable ();
1839 }
1840
1841 if (REGNO (src) != STACK_POINTER_REGNUM
1842 && REGNO (src) != HARD_FRAME_POINTER_REGNUM
1843 && (unsigned) REGNO (src) == cfa.reg)
1844 {
1845 /* We're storing the current CFA reg into the stack. */
1846
1847 if (cfa.offset == 0)
1848 {
1849 /* If the source register is exactly the CFA, assume
1850 we're saving SP like any other register; this happens
1851 on the ARM. */
1852 def_cfa_1 (label, &cfa);
1853 queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
1854 break;
1855 }
1856 else
1857 {
1858 /* Otherwise, we'll need to look in the stack to
1859 calculate the CFA. */
1860 rtx x = XEXP (dest, 0);
1861
1862 if (!REG_P (x))
1863 x = XEXP (x, 0);
1864 gcc_assert (REG_P (x));
1865
1866 cfa.reg = REGNO (x);
1867 cfa.base_offset = offset;
1868 cfa.indirect = 1;
1869 def_cfa_1 (label, &cfa);
1870 break;
1871 }
1872 }
1873
1874 def_cfa_1 (label, &cfa);
1875 queue_reg_save (label, src, NULL_RTX, offset);
1876 break;
1877
1878 default:
1879 gcc_unreachable ();
1880 }
1881 }
1882
1883 /* Record call frame debugging information for INSN, which either
1884 sets SP or FP (adjusting how we calculate the frame address) or saves a
1885 register to the stack. If INSN is NULL_RTX, initialize our state.
1886
1887 If AFTER_P is false, we're being called before the insn is emitted,
1888 otherwise after. Call instructions get invoked twice. */
1889
1890 void
1891 dwarf2out_frame_debug (rtx insn, bool after_p)
1892 {
1893 const char *label;
1894 rtx src;
1895
1896 if (insn == NULL_RTX)
1897 {
1898 size_t i;
1899
1900 /* Flush any queued register saves. */
1901 flush_queued_reg_saves ();
1902
1903 /* Set up state for generating call frame debug info. */
1904 lookup_cfa (&cfa);
1905 gcc_assert (cfa.reg
1906 == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
1907
1908 cfa.reg = STACK_POINTER_REGNUM;
1909 cfa_store = cfa;
1910 cfa_temp.reg = -1;
1911 cfa_temp.offset = 0;
1912
1913 for (i = 0; i < num_regs_saved_in_regs; i++)
1914 {
1915 regs_saved_in_regs[i].orig_reg = NULL_RTX;
1916 regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
1917 }
1918 num_regs_saved_in_regs = 0;
1919 return;
1920 }
1921
1922 if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
1923 flush_queued_reg_saves ();
1924
1925 if (! RTX_FRAME_RELATED_P (insn))
1926 {
1927 if (!ACCUMULATE_OUTGOING_ARGS)
1928 dwarf2out_stack_adjust (insn, after_p);
1929 return;
1930 }
1931
1932 label = dwarf2out_cfi_label ();
1933 src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1934 if (src)
1935 insn = XEXP (src, 0);
1936 else
1937 insn = PATTERN (insn);
1938
1939 dwarf2out_frame_debug_expr (insn, label);
1940 }
1941
1942 #endif
1943
1944 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used. */
1945 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
1946 (enum dwarf_call_frame_info cfi);
1947
1948 static enum dw_cfi_oprnd_type
1949 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
1950 {
1951 switch (cfi)
1952 {
1953 case DW_CFA_nop:
1954 case DW_CFA_GNU_window_save:
1955 return dw_cfi_oprnd_unused;
1956
1957 case DW_CFA_set_loc:
1958 case DW_CFA_advance_loc1:
1959 case DW_CFA_advance_loc2:
1960 case DW_CFA_advance_loc4:
1961 case DW_CFA_MIPS_advance_loc8:
1962 return dw_cfi_oprnd_addr;
1963
1964 case DW_CFA_offset:
1965 case DW_CFA_offset_extended:
1966 case DW_CFA_def_cfa:
1967 case DW_CFA_offset_extended_sf:
1968 case DW_CFA_def_cfa_sf:
1969 case DW_CFA_restore_extended:
1970 case DW_CFA_undefined:
1971 case DW_CFA_same_value:
1972 case DW_CFA_def_cfa_register:
1973 case DW_CFA_register:
1974 return dw_cfi_oprnd_reg_num;
1975
1976 case DW_CFA_def_cfa_offset:
1977 case DW_CFA_GNU_args_size:
1978 case DW_CFA_def_cfa_offset_sf:
1979 return dw_cfi_oprnd_offset;
1980
1981 case DW_CFA_def_cfa_expression:
1982 case DW_CFA_expression:
1983 return dw_cfi_oprnd_loc;
1984
1985 default:
1986 gcc_unreachable ();
1987 }
1988 }
1989
1990 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */
1991 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
1992 (enum dwarf_call_frame_info cfi);
1993
1994 static enum dw_cfi_oprnd_type
1995 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
1996 {
1997 switch (cfi)
1998 {
1999 case DW_CFA_def_cfa:
2000 case DW_CFA_def_cfa_sf:
2001 case DW_CFA_offset:
2002 case DW_CFA_offset_extended_sf:
2003 case DW_CFA_offset_extended:
2004 return dw_cfi_oprnd_offset;
2005
2006 case DW_CFA_register:
2007 return dw_cfi_oprnd_reg_num;
2008
2009 default:
2010 return dw_cfi_oprnd_unused;
2011 }
2012 }
2013
2014 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2015
2016 /* Switch to eh_frame_section. If we don't have an eh_frame_section,
2017 switch to the data section instead, and write out a synthetic label
2018 for collect2. */
2019
2020 static void
2021 switch_to_eh_frame_section (void)
2022 {
2023 tree label;
2024
2025 #ifdef EH_FRAME_SECTION_NAME
2026 if (eh_frame_section == 0)
2027 {
2028 int flags;
2029
2030 if (EH_TABLES_CAN_BE_READ_ONLY)
2031 {
2032 int fde_encoding;
2033 int per_encoding;
2034 int lsda_encoding;
2035
2036 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2037 /*global=*/0);
2038 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2039 /*global=*/1);
2040 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2041 /*global=*/0);
2042 flags = ((! flag_pic
2043 || ((fde_encoding & 0x70) != DW_EH_PE_absptr
2044 && (fde_encoding & 0x70) != DW_EH_PE_aligned
2045 && (per_encoding & 0x70) != DW_EH_PE_absptr
2046 && (per_encoding & 0x70) != DW_EH_PE_aligned
2047 && (lsda_encoding & 0x70) != DW_EH_PE_absptr
2048 && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
2049 ? 0 : SECTION_WRITE);
2050 }
2051 else
2052 flags = SECTION_WRITE;
2053 eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
2054 }
2055 #endif
2056
2057 if (eh_frame_section)
2058 switch_to_section (eh_frame_section);
2059 else
2060 {
2061 /* We have no special eh_frame section. Put the information in
2062 the data section and emit special labels to guide collect2. */
2063 switch_to_section (data_section);
2064 label = get_file_function_name ("F");
2065 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2066 targetm.asm_out.globalize_label (asm_out_file,
2067 IDENTIFIER_POINTER (label));
2068 ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
2069 }
2070 }
2071
2072 /* Output a Call Frame Information opcode and its operand(s). */
2073
2074 static void
2075 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
2076 {
2077 unsigned long r;
2078 if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
2079 dw2_asm_output_data (1, (cfi->dw_cfi_opc
2080 | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
2081 "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
2082 cfi->dw_cfi_oprnd1.dw_cfi_offset);
2083 else if (cfi->dw_cfi_opc == DW_CFA_offset)
2084 {
2085 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2086 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
2087 "DW_CFA_offset, column 0x%lx", r);
2088 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2089 }
2090 else if (cfi->dw_cfi_opc == DW_CFA_restore)
2091 {
2092 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2093 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
2094 "DW_CFA_restore, column 0x%lx", r);
2095 }
2096 else
2097 {
2098 dw2_asm_output_data (1, cfi->dw_cfi_opc,
2099 "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
2100
2101 switch (cfi->dw_cfi_opc)
2102 {
2103 case DW_CFA_set_loc:
2104 if (for_eh)
2105 dw2_asm_output_encoded_addr_rtx (
2106 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
2107 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
2108 false, NULL);
2109 else
2110 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2111 cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
2112 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2113 break;
2114
2115 case DW_CFA_advance_loc1:
2116 dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2117 fde->dw_fde_current_label, NULL);
2118 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2119 break;
2120
2121 case DW_CFA_advance_loc2:
2122 dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2123 fde->dw_fde_current_label, NULL);
2124 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2125 break;
2126
2127 case DW_CFA_advance_loc4:
2128 dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2129 fde->dw_fde_current_label, NULL);
2130 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2131 break;
2132
2133 case DW_CFA_MIPS_advance_loc8:
2134 dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2135 fde->dw_fde_current_label, NULL);
2136 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2137 break;
2138
2139 case DW_CFA_offset_extended:
2140 case DW_CFA_def_cfa:
2141 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2142 dw2_asm_output_data_uleb128 (r, NULL);
2143 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2144 break;
2145
2146 case DW_CFA_offset_extended_sf:
2147 case DW_CFA_def_cfa_sf:
2148 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2149 dw2_asm_output_data_uleb128 (r, NULL);
2150 dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2151 break;
2152
2153 case DW_CFA_restore_extended:
2154 case DW_CFA_undefined:
2155 case DW_CFA_same_value:
2156 case DW_CFA_def_cfa_register:
2157 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2158 dw2_asm_output_data_uleb128 (r, NULL);
2159 break;
2160
2161 case DW_CFA_register:
2162 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2163 dw2_asm_output_data_uleb128 (r, NULL);
2164 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
2165 dw2_asm_output_data_uleb128 (r, NULL);
2166 break;
2167
2168 case DW_CFA_def_cfa_offset:
2169 case DW_CFA_GNU_args_size:
2170 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
2171 break;
2172
2173 case DW_CFA_def_cfa_offset_sf:
2174 dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
2175 break;
2176
2177 case DW_CFA_GNU_window_save:
2178 break;
2179
2180 case DW_CFA_def_cfa_expression:
2181 case DW_CFA_expression:
2182 output_cfa_loc (cfi);
2183 break;
2184
2185 case DW_CFA_GNU_negative_offset_extended:
2186 /* Obsoleted by DW_CFA_offset_extended_sf. */
2187 gcc_unreachable ();
2188
2189 default:
2190 break;
2191 }
2192 }
2193 }
2194
2195 /* Output the call frame information used to record information
2196 that relates to calculating the frame pointer, and records the
2197 location of saved registers. */
2198
2199 static void
2200 output_call_frame_info (int for_eh)
2201 {
2202 unsigned int i;
2203 dw_fde_ref fde;
2204 dw_cfi_ref cfi;
2205 char l1[20], l2[20], section_start_label[20];
2206 bool any_lsda_needed = false;
2207 char augmentation[6];
2208 int augmentation_size;
2209 int fde_encoding = DW_EH_PE_absptr;
2210 int per_encoding = DW_EH_PE_absptr;
2211 int lsda_encoding = DW_EH_PE_absptr;
2212 int return_reg;
2213
2214 /* Don't emit a CIE if there won't be any FDEs. */
2215 if (fde_table_in_use == 0)
2216 return;
2217
2218 /* If we make FDEs linkonce, we may have to emit an empty label for
2219 an FDE that wouldn't otherwise be emitted. We want to avoid
2220 having an FDE kept around when the function it refers to is
2221 discarded. Example where this matters: a primary function
2222 template in C++ requires EH information, but an explicit
2223 specialization doesn't. */
2224 if (TARGET_USES_WEAK_UNWIND_INFO
2225 && ! flag_asynchronous_unwind_tables
2226 && flag_exceptions
2227 && for_eh)
2228 for (i = 0; i < fde_table_in_use; i++)
2229 if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
2230 && !fde_table[i].uses_eh_lsda
2231 && ! DECL_WEAK (fde_table[i].decl))
2232 targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
2233 for_eh, /* empty */ 1);
2234
2235 /* If we don't have any functions we'll want to unwind out of, don't
2236 emit any EH unwind information. Note that if exceptions aren't
2237 enabled, we won't have collected nothrow information, and if we
2238 asked for asynchronous tables, we always want this info. */
2239 if (for_eh)
2240 {
2241 bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
2242
2243 for (i = 0; i < fde_table_in_use; i++)
2244 if (fde_table[i].uses_eh_lsda)
2245 any_eh_needed = any_lsda_needed = true;
2246 else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
2247 any_eh_needed = true;
2248 else if (! fde_table[i].nothrow
2249 && ! fde_table[i].all_throwers_are_sibcalls)
2250 any_eh_needed = true;
2251
2252 if (! any_eh_needed)
2253 return;
2254 }
2255
2256 /* We're going to be generating comments, so turn on app. */
2257 if (flag_debug_asm)
2258 app_enable ();
2259
2260 if (for_eh)
2261 switch_to_eh_frame_section ();
2262 else
2263 {
2264 if (!debug_frame_section)
2265 debug_frame_section = get_section (DEBUG_FRAME_SECTION,
2266 SECTION_DEBUG, NULL);
2267 switch_to_section (debug_frame_section);
2268 }
2269
2270 ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
2271 ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
2272
2273 /* Output the CIE. */
2274 ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
2275 ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
2276 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
2277 dw2_asm_output_data (4, 0xffffffff,
2278 "Initial length escape value indicating 64-bit DWARF extension");
2279 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2280 "Length of Common Information Entry");
2281 ASM_OUTPUT_LABEL (asm_out_file, l1);
2282
2283 /* Now that the CIE pointer is PC-relative for EH,
2284 use 0 to identify the CIE. */
2285 dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
2286 (for_eh ? 0 : DWARF_CIE_ID),
2287 "CIE Identifier Tag");
2288
2289 dw2_asm_output_data (1, DW_CIE_VERSION, "CIE Version");
2290
2291 augmentation[0] = 0;
2292 augmentation_size = 0;
2293 if (for_eh)
2294 {
2295 char *p;
2296
2297 /* Augmentation:
2298 z Indicates that a uleb128 is present to size the
2299 augmentation section.
2300 L Indicates the encoding (and thus presence) of
2301 an LSDA pointer in the FDE augmentation.
2302 R Indicates a non-default pointer encoding for
2303 FDE code pointers.
2304 P Indicates the presence of an encoding + language
2305 personality routine in the CIE augmentation. */
2306
2307 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
2308 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
2309 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
2310
2311 p = augmentation + 1;
2312 if (eh_personality_libfunc)
2313 {
2314 *p++ = 'P';
2315 augmentation_size += 1 + size_of_encoded_value (per_encoding);
2316 assemble_external_libcall (eh_personality_libfunc);
2317 }
2318 if (any_lsda_needed)
2319 {
2320 *p++ = 'L';
2321 augmentation_size += 1;
2322 }
2323 if (fde_encoding != DW_EH_PE_absptr)
2324 {
2325 *p++ = 'R';
2326 augmentation_size += 1;
2327 }
2328 if (p > augmentation + 1)
2329 {
2330 augmentation[0] = 'z';
2331 *p = '\0';
2332 }
2333
2334 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */
2335 if (eh_personality_libfunc && per_encoding == DW_EH_PE_aligned)
2336 {
2337 int offset = ( 4 /* Length */
2338 + 4 /* CIE Id */
2339 + 1 /* CIE version */
2340 + strlen (augmentation) + 1 /* Augmentation */
2341 + size_of_uleb128 (1) /* Code alignment */
2342 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
2343 + 1 /* RA column */
2344 + 1 /* Augmentation size */
2345 + 1 /* Personality encoding */ );
2346 int pad = -offset & (PTR_SIZE - 1);
2347
2348 augmentation_size += pad;
2349
2350 /* Augmentations should be small, so there's scarce need to
2351 iterate for a solution. Die if we exceed one uleb128 byte. */
2352 gcc_assert (size_of_uleb128 (augmentation_size) == 1);
2353 }
2354 }
2355
2356 dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
2357 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
2358 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
2359 "CIE Data Alignment Factor");
2360
2361 return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
2362 if (DW_CIE_VERSION == 1)
2363 dw2_asm_output_data (1, return_reg, "CIE RA Column");
2364 else
2365 dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
2366
2367 if (augmentation[0])
2368 {
2369 dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
2370 if (eh_personality_libfunc)
2371 {
2372 dw2_asm_output_data (1, per_encoding, "Personality (%s)",
2373 eh_data_format_name (per_encoding));
2374 dw2_asm_output_encoded_addr_rtx (per_encoding,
2375 eh_personality_libfunc,
2376 true, NULL);
2377 }
2378
2379 if (any_lsda_needed)
2380 dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
2381 eh_data_format_name (lsda_encoding));
2382
2383 if (fde_encoding != DW_EH_PE_absptr)
2384 dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
2385 eh_data_format_name (fde_encoding));
2386 }
2387
2388 for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
2389 output_cfi (cfi, NULL, for_eh);
2390
2391 /* Pad the CIE out to an address sized boundary. */
2392 ASM_OUTPUT_ALIGN (asm_out_file,
2393 floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
2394 ASM_OUTPUT_LABEL (asm_out_file, l2);
2395
2396 /* Loop through all of the FDE's. */
2397 for (i = 0; i < fde_table_in_use; i++)
2398 {
2399 fde = &fde_table[i];
2400
2401 /* Don't emit EH unwind info for leaf functions that don't need it. */
2402 if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
2403 && (fde->nothrow || fde->all_throwers_are_sibcalls)
2404 && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
2405 && !fde->uses_eh_lsda)
2406 continue;
2407
2408 targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh, /* empty */ 0);
2409 targetm.asm_out.internal_label (asm_out_file, FDE_LABEL, for_eh + i * 2);
2410 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i * 2);
2411 ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i * 2);
2412 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
2413 dw2_asm_output_data (4, 0xffffffff,
2414 "Initial length escape value indicating 64-bit DWARF extension");
2415 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2416 "FDE Length");
2417 ASM_OUTPUT_LABEL (asm_out_file, l1);
2418
2419 if (for_eh)
2420 dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
2421 else
2422 dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
2423 debug_frame_section, "FDE CIE offset");
2424
2425 if (for_eh)
2426 {
2427 rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, fde->dw_fde_begin);
2428 SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
2429 dw2_asm_output_encoded_addr_rtx (fde_encoding,
2430 sym_ref,
2431 false,
2432 "FDE initial location");
2433 if (fde->dw_fde_switched_sections)
2434 {
2435 rtx sym_ref2 = gen_rtx_SYMBOL_REF (Pmode,
2436 fde->dw_fde_unlikely_section_label);
2437 rtx sym_ref3= gen_rtx_SYMBOL_REF (Pmode,
2438 fde->dw_fde_hot_section_label);
2439 SYMBOL_REF_FLAGS (sym_ref2) |= SYMBOL_FLAG_LOCAL;
2440 SYMBOL_REF_FLAGS (sym_ref3) |= SYMBOL_FLAG_LOCAL;
2441 dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref3, false,
2442 "FDE initial location");
2443 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2444 fde->dw_fde_hot_section_end_label,
2445 fde->dw_fde_hot_section_label,
2446 "FDE address range");
2447 dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref2, false,
2448 "FDE initial location");
2449 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2450 fde->dw_fde_unlikely_section_end_label,
2451 fde->dw_fde_unlikely_section_label,
2452 "FDE address range");
2453 }
2454 else
2455 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2456 fde->dw_fde_end, fde->dw_fde_begin,
2457 "FDE address range");
2458 }
2459 else
2460 {
2461 dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
2462 "FDE initial location");
2463 if (fde->dw_fde_switched_sections)
2464 {
2465 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2466 fde->dw_fde_hot_section_label,
2467 "FDE initial location");
2468 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2469 fde->dw_fde_hot_section_end_label,
2470 fde->dw_fde_hot_section_label,
2471 "FDE address range");
2472 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2473 fde->dw_fde_unlikely_section_label,
2474 "FDE initial location");
2475 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2476 fde->dw_fde_unlikely_section_end_label,
2477 fde->dw_fde_unlikely_section_label,
2478 "FDE address range");
2479 }
2480 else
2481 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2482 fde->dw_fde_end, fde->dw_fde_begin,
2483 "FDE address range");
2484 }
2485
2486 if (augmentation[0])
2487 {
2488 if (any_lsda_needed)
2489 {
2490 int size = size_of_encoded_value (lsda_encoding);
2491
2492 if (lsda_encoding == DW_EH_PE_aligned)
2493 {
2494 int offset = ( 4 /* Length */
2495 + 4 /* CIE offset */
2496 + 2 * size_of_encoded_value (fde_encoding)
2497 + 1 /* Augmentation size */ );
2498 int pad = -offset & (PTR_SIZE - 1);
2499
2500 size += pad;
2501 gcc_assert (size_of_uleb128 (size) == 1);
2502 }
2503
2504 dw2_asm_output_data_uleb128 (size, "Augmentation size");
2505
2506 if (fde->uses_eh_lsda)
2507 {
2508 ASM_GENERATE_INTERNAL_LABEL (l1, "LLSDA",
2509 fde->funcdef_number);
2510 dw2_asm_output_encoded_addr_rtx (
2511 lsda_encoding, gen_rtx_SYMBOL_REF (Pmode, l1),
2512 false, "Language Specific Data Area");
2513 }
2514 else
2515 {
2516 if (lsda_encoding == DW_EH_PE_aligned)
2517 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2518 dw2_asm_output_data
2519 (size_of_encoded_value (lsda_encoding), 0,
2520 "Language Specific Data Area (none)");
2521 }
2522 }
2523 else
2524 dw2_asm_output_data_uleb128 (0, "Augmentation size");
2525 }
2526
2527 /* Loop through the Call Frame Instructions associated with
2528 this FDE. */
2529 fde->dw_fde_current_label = fde->dw_fde_begin;
2530 for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
2531 output_cfi (cfi, fde, for_eh);
2532
2533 /* Pad the FDE out to an address sized boundary. */
2534 ASM_OUTPUT_ALIGN (asm_out_file,
2535 floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
2536 ASM_OUTPUT_LABEL (asm_out_file, l2);
2537 }
2538
2539 if (for_eh && targetm.terminate_dw2_eh_frame_info)
2540 dw2_asm_output_data (4, 0, "End of Table");
2541 #ifdef MIPS_DEBUGGING_INFO
2542 /* Work around Irix 6 assembler bug whereby labels at the end of a section
2543 get a value of 0. Putting .align 0 after the label fixes it. */
2544 ASM_OUTPUT_ALIGN (asm_out_file, 0);
2545 #endif
2546
2547 /* Turn off app to make assembly quicker. */
2548 if (flag_debug_asm)
2549 app_disable ();
2550 }
2551
2552 /* Output a marker (i.e. a label) for the beginning of a function, before
2553 the prologue. */
2554
2555 void
2556 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
2557 const char *file ATTRIBUTE_UNUSED)
2558 {
2559 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2560 char * dup_label;
2561 dw_fde_ref fde;
2562
2563 current_function_func_begin_label = NULL;
2564
2565 #ifdef TARGET_UNWIND_INFO
2566 /* ??? current_function_func_begin_label is also used by except.c
2567 for call-site information. We must emit this label if it might
2568 be used. */
2569 if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
2570 && ! dwarf2out_do_frame ())
2571 return;
2572 #else
2573 if (! dwarf2out_do_frame ())
2574 return;
2575 #endif
2576
2577 switch_to_section (function_section (current_function_decl));
2578 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
2579 current_function_funcdef_no);
2580 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
2581 current_function_funcdef_no);
2582 dup_label = xstrdup (label);
2583 current_function_func_begin_label = dup_label;
2584
2585 #ifdef TARGET_UNWIND_INFO
2586 /* We can elide the fde allocation if we're not emitting debug info. */
2587 if (! dwarf2out_do_frame ())
2588 return;
2589 #endif
2590
2591 /* Expand the fde table if necessary. */
2592 if (fde_table_in_use == fde_table_allocated)
2593 {
2594 fde_table_allocated += FDE_TABLE_INCREMENT;
2595 fde_table = ggc_realloc (fde_table,
2596 fde_table_allocated * sizeof (dw_fde_node));
2597 memset (fde_table + fde_table_in_use, 0,
2598 FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2599 }
2600
2601 /* Record the FDE associated with this function. */
2602 current_funcdef_fde = fde_table_in_use;
2603
2604 /* Add the new FDE at the end of the fde_table. */
2605 fde = &fde_table[fde_table_in_use++];
2606 fde->decl = current_function_decl;
2607 fde->dw_fde_begin = dup_label;
2608 fde->dw_fde_current_label = dup_label;
2609 fde->dw_fde_hot_section_label = NULL;
2610 fde->dw_fde_hot_section_end_label = NULL;
2611 fde->dw_fde_unlikely_section_label = NULL;
2612 fde->dw_fde_unlikely_section_end_label = NULL;
2613 fde->dw_fde_switched_sections = false;
2614 fde->dw_fde_end = NULL;
2615 fde->dw_fde_cfi = NULL;
2616 fde->funcdef_number = current_function_funcdef_no;
2617 fde->nothrow = TREE_NOTHROW (current_function_decl);
2618 fde->uses_eh_lsda = cfun->uses_eh_lsda;
2619 fde->all_throwers_are_sibcalls = cfun->all_throwers_are_sibcalls;
2620
2621 args_size = old_args_size = 0;
2622
2623 /* We only want to output line number information for the genuine dwarf2
2624 prologue case, not the eh frame case. */
2625 #ifdef DWARF2_DEBUGGING_INFO
2626 if (file)
2627 dwarf2out_source_line (line, file);
2628 #endif
2629 }
2630
2631 /* Output a marker (i.e. a label) for the absolute end of the generated code
2632 for a function definition. This gets called *after* the epilogue code has
2633 been generated. */
2634
2635 void
2636 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
2637 const char *file ATTRIBUTE_UNUSED)
2638 {
2639 dw_fde_ref fde;
2640 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2641
2642 /* Output a label to mark the endpoint of the code generated for this
2643 function. */
2644 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
2645 current_function_funcdef_no);
2646 ASM_OUTPUT_LABEL (asm_out_file, label);
2647 fde = &fde_table[fde_table_in_use - 1];
2648 fde->dw_fde_end = xstrdup (label);
2649 }
2650
2651 void
2652 dwarf2out_frame_init (void)
2653 {
2654 /* Allocate the initial hunk of the fde_table. */
2655 fde_table = ggc_alloc_cleared (FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2656 fde_table_allocated = FDE_TABLE_INCREMENT;
2657 fde_table_in_use = 0;
2658
2659 /* Generate the CFA instructions common to all FDE's. Do it now for the
2660 sake of lookup_cfa. */
2661
2662 /* On entry, the Canonical Frame Address is at SP. */
2663 dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
2664
2665 #ifdef DWARF2_UNWIND_INFO
2666 if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
2667 initial_return_save (INCOMING_RETURN_ADDR_RTX);
2668 #endif
2669 }
2670
2671 void
2672 dwarf2out_frame_finish (void)
2673 {
2674 /* Output call frame information. */
2675 if (DWARF2_FRAME_INFO)
2676 output_call_frame_info (0);
2677
2678 #ifndef TARGET_UNWIND_INFO
2679 /* Output another copy for the unwinder. */
2680 if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
2681 output_call_frame_info (1);
2682 #endif
2683 }
2684 #endif
2685 \f
2686 /* And now, the subset of the debugging information support code necessary
2687 for emitting location expressions. */
2688
2689 /* Data about a single source file. */
2690 struct dwarf_file_data GTY(())
2691 {
2692 const char * filename;
2693 int emitted_number;
2694 };
2695
2696 /* We need some way to distinguish DW_OP_addr with a direct symbol
2697 relocation from DW_OP_addr with a dtp-relative symbol relocation. */
2698 #define INTERNAL_DW_OP_tls_addr (0x100 + DW_OP_addr)
2699
2700
2701 typedef struct dw_val_struct *dw_val_ref;
2702 typedef struct die_struct *dw_die_ref;
2703 typedef const struct die_struct *const_dw_die_ref;
2704 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
2705 typedef struct dw_loc_list_struct *dw_loc_list_ref;
2706
2707 /* Each DIE may have a series of attribute/value pairs. Values
2708 can take on several forms. The forms that are used in this
2709 implementation are listed below. */
2710
2711 enum dw_val_class
2712 {
2713 dw_val_class_addr,
2714 dw_val_class_offset,
2715 dw_val_class_loc,
2716 dw_val_class_loc_list,
2717 dw_val_class_range_list,
2718 dw_val_class_const,
2719 dw_val_class_unsigned_const,
2720 dw_val_class_long_long,
2721 dw_val_class_vec,
2722 dw_val_class_flag,
2723 dw_val_class_die_ref,
2724 dw_val_class_fde_ref,
2725 dw_val_class_lbl_id,
2726 dw_val_class_lineptr,
2727 dw_val_class_str,
2728 dw_val_class_macptr,
2729 dw_val_class_file
2730 };
2731
2732 /* Describe a double word constant value. */
2733 /* ??? Every instance of long_long in the code really means CONST_DOUBLE. */
2734
2735 typedef struct dw_long_long_struct GTY(())
2736 {
2737 unsigned long hi;
2738 unsigned long low;
2739 }
2740 dw_long_long_const;
2741
2742 /* Describe a floating point constant value, or a vector constant value. */
2743
2744 typedef struct dw_vec_struct GTY(())
2745 {
2746 unsigned char * GTY((length ("%h.length"))) array;
2747 unsigned length;
2748 unsigned elt_size;
2749 }
2750 dw_vec_const;
2751
2752 /* The dw_val_node describes an attribute's value, as it is
2753 represented internally. */
2754
2755 typedef struct dw_val_struct GTY(())
2756 {
2757 enum dw_val_class val_class;
2758 union dw_val_struct_union
2759 {
2760 rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
2761 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
2762 dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
2763 dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
2764 HOST_WIDE_INT GTY ((default)) val_int;
2765 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
2766 dw_long_long_const GTY ((tag ("dw_val_class_long_long"))) val_long_long;
2767 dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
2768 struct dw_val_die_union
2769 {
2770 dw_die_ref die;
2771 int external;
2772 } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
2773 unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
2774 struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
2775 char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
2776 unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
2777 struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
2778 }
2779 GTY ((desc ("%1.val_class"))) v;
2780 }
2781 dw_val_node;
2782
2783 /* Locations in memory are described using a sequence of stack machine
2784 operations. */
2785
2786 typedef struct dw_loc_descr_struct GTY(())
2787 {
2788 dw_loc_descr_ref dw_loc_next;
2789 enum dwarf_location_atom dw_loc_opc;
2790 dw_val_node dw_loc_oprnd1;
2791 dw_val_node dw_loc_oprnd2;
2792 int dw_loc_addr;
2793 }
2794 dw_loc_descr_node;
2795
2796 /* Location lists are ranges + location descriptions for that range,
2797 so you can track variables that are in different places over
2798 their entire life. */
2799 typedef struct dw_loc_list_struct GTY(())
2800 {
2801 dw_loc_list_ref dw_loc_next;
2802 const char *begin; /* Label for begin address of range */
2803 const char *end; /* Label for end address of range */
2804 char *ll_symbol; /* Label for beginning of location list.
2805 Only on head of list */
2806 const char *section; /* Section this loclist is relative to */
2807 dw_loc_descr_ref expr;
2808 } dw_loc_list_node;
2809
2810 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2811
2812 static const char *dwarf_stack_op_name (unsigned);
2813 static dw_loc_descr_ref new_loc_descr (enum dwarf_location_atom,
2814 unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT);
2815 static void add_loc_descr (dw_loc_descr_ref *, dw_loc_descr_ref);
2816 static unsigned long size_of_loc_descr (dw_loc_descr_ref);
2817 static unsigned long size_of_locs (dw_loc_descr_ref);
2818 static void output_loc_operands (dw_loc_descr_ref);
2819 static void output_loc_sequence (dw_loc_descr_ref);
2820
2821 /* Convert a DWARF stack opcode into its string name. */
2822
2823 static const char *
2824 dwarf_stack_op_name (unsigned int op)
2825 {
2826 switch (op)
2827 {
2828 case DW_OP_addr:
2829 case INTERNAL_DW_OP_tls_addr:
2830 return "DW_OP_addr";
2831 case DW_OP_deref:
2832 return "DW_OP_deref";
2833 case DW_OP_const1u:
2834 return "DW_OP_const1u";
2835 case DW_OP_const1s:
2836 return "DW_OP_const1s";
2837 case DW_OP_const2u:
2838 return "DW_OP_const2u";
2839 case DW_OP_const2s:
2840 return "DW_OP_const2s";
2841 case DW_OP_const4u:
2842 return "DW_OP_const4u";
2843 case DW_OP_const4s:
2844 return "DW_OP_const4s";
2845 case DW_OP_const8u:
2846 return "DW_OP_const8u";
2847 case DW_OP_const8s:
2848 return "DW_OP_const8s";
2849 case DW_OP_constu:
2850 return "DW_OP_constu";
2851 case DW_OP_consts:
2852 return "DW_OP_consts";
2853 case DW_OP_dup:
2854 return "DW_OP_dup";
2855 case DW_OP_drop:
2856 return "DW_OP_drop";
2857 case DW_OP_over:
2858 return "DW_OP_over";
2859 case DW_OP_pick:
2860 return "DW_OP_pick";
2861 case DW_OP_swap:
2862 return "DW_OP_swap";
2863 case DW_OP_rot:
2864 return "DW_OP_rot";
2865 case DW_OP_xderef:
2866 return "DW_OP_xderef";
2867 case DW_OP_abs:
2868 return "DW_OP_abs";
2869 case DW_OP_and:
2870 return "DW_OP_and";
2871 case DW_OP_div:
2872 return "DW_OP_div";
2873 case DW_OP_minus:
2874 return "DW_OP_minus";
2875 case DW_OP_mod:
2876 return "DW_OP_mod";
2877 case DW_OP_mul:
2878 return "DW_OP_mul";
2879 case DW_OP_neg:
2880 return "DW_OP_neg";
2881 case DW_OP_not:
2882 return "DW_OP_not";
2883 case DW_OP_or:
2884 return "DW_OP_or";
2885 case DW_OP_plus:
2886 return "DW_OP_plus";
2887 case DW_OP_plus_uconst:
2888 return "DW_OP_plus_uconst";
2889 case DW_OP_shl:
2890 return "DW_OP_shl";
2891 case DW_OP_shr:
2892 return "DW_OP_shr";
2893 case DW_OP_shra:
2894 return "DW_OP_shra";
2895 case DW_OP_xor:
2896 return "DW_OP_xor";
2897 case DW_OP_bra:
2898 return "DW_OP_bra";
2899 case DW_OP_eq:
2900 return "DW_OP_eq";
2901 case DW_OP_ge:
2902 return "DW_OP_ge";
2903 case DW_OP_gt:
2904 return "DW_OP_gt";
2905 case DW_OP_le:
2906 return "DW_OP_le";
2907 case DW_OP_lt:
2908 return "DW_OP_lt";
2909 case DW_OP_ne:
2910 return "DW_OP_ne";
2911 case DW_OP_skip:
2912 return "DW_OP_skip";
2913 case DW_OP_lit0:
2914 return "DW_OP_lit0";
2915 case DW_OP_lit1:
2916 return "DW_OP_lit1";
2917 case DW_OP_lit2:
2918 return "DW_OP_lit2";
2919 case DW_OP_lit3:
2920 return "DW_OP_lit3";
2921 case DW_OP_lit4:
2922 return "DW_OP_lit4";
2923 case DW_OP_lit5:
2924 return "DW_OP_lit5";
2925 case DW_OP_lit6:
2926 return "DW_OP_lit6";
2927 case DW_OP_lit7:
2928 return "DW_OP_lit7";
2929 case DW_OP_lit8:
2930 return "DW_OP_lit8";
2931 case DW_OP_lit9:
2932 return "DW_OP_lit9";
2933 case DW_OP_lit10:
2934 return "DW_OP_lit10";
2935 case DW_OP_lit11:
2936 return "DW_OP_lit11";
2937 case DW_OP_lit12:
2938 return "DW_OP_lit12";
2939 case DW_OP_lit13:
2940 return "DW_OP_lit13";
2941 case DW_OP_lit14:
2942 return "DW_OP_lit14";
2943 case DW_OP_lit15:
2944 return "DW_OP_lit15";
2945 case DW_OP_lit16:
2946 return "DW_OP_lit16";
2947 case DW_OP_lit17:
2948 return "DW_OP_lit17";
2949 case DW_OP_lit18:
2950 return "DW_OP_lit18";
2951 case DW_OP_lit19:
2952 return "DW_OP_lit19";
2953 case DW_OP_lit20:
2954 return "DW_OP_lit20";
2955 case DW_OP_lit21:
2956 return "DW_OP_lit21";
2957 case DW_OP_lit22:
2958 return "DW_OP_lit22";
2959 case DW_OP_lit23:
2960 return "DW_OP_lit23";
2961 case DW_OP_lit24:
2962 return "DW_OP_lit24";
2963 case DW_OP_lit25:
2964 return "DW_OP_lit25";
2965 case DW_OP_lit26:
2966 return "DW_OP_lit26";
2967 case DW_OP_lit27:
2968 return "DW_OP_lit27";
2969 case DW_OP_lit28:
2970 return "DW_OP_lit28";
2971 case DW_OP_lit29:
2972 return "DW_OP_lit29";
2973 case DW_OP_lit30:
2974 return "DW_OP_lit30";
2975 case DW_OP_lit31:
2976 return "DW_OP_lit31";
2977 case DW_OP_reg0:
2978 return "DW_OP_reg0";
2979 case DW_OP_reg1:
2980 return "DW_OP_reg1";
2981 case DW_OP_reg2:
2982 return "DW_OP_reg2";
2983 case DW_OP_reg3:
2984 return "DW_OP_reg3";
2985 case DW_OP_reg4:
2986 return "DW_OP_reg4";
2987 case DW_OP_reg5:
2988 return "DW_OP_reg5";
2989 case DW_OP_reg6:
2990 return "DW_OP_reg6";
2991 case DW_OP_reg7:
2992 return "DW_OP_reg7";
2993 case DW_OP_reg8:
2994 return "DW_OP_reg8";
2995 case DW_OP_reg9:
2996 return "DW_OP_reg9";
2997 case DW_OP_reg10:
2998 return "DW_OP_reg10";
2999 case DW_OP_reg11:
3000 return "DW_OP_reg11";
3001 case DW_OP_reg12:
3002 return "DW_OP_reg12";
3003 case DW_OP_reg13:
3004 return "DW_OP_reg13";
3005 case DW_OP_reg14:
3006 return "DW_OP_reg14";
3007 case DW_OP_reg15:
3008 return "DW_OP_reg15";
3009 case DW_OP_reg16:
3010 return "DW_OP_reg16";
3011 case DW_OP_reg17:
3012 return "DW_OP_reg17";
3013 case DW_OP_reg18:
3014 return "DW_OP_reg18";
3015 case DW_OP_reg19:
3016 return "DW_OP_reg19";
3017 case DW_OP_reg20:
3018 return "DW_OP_reg20";
3019 case DW_OP_reg21:
3020 return "DW_OP_reg21";
3021 case DW_OP_reg22:
3022 return "DW_OP_reg22";
3023 case DW_OP_reg23:
3024 return "DW_OP_reg23";
3025 case DW_OP_reg24:
3026 return "DW_OP_reg24";
3027 case DW_OP_reg25:
3028 return "DW_OP_reg25";
3029 case DW_OP_reg26:
3030 return "DW_OP_reg26";
3031 case DW_OP_reg27:
3032 return "DW_OP_reg27";
3033 case DW_OP_reg28:
3034 return "DW_OP_reg28";
3035 case DW_OP_reg29:
3036 return "DW_OP_reg29";
3037 case DW_OP_reg30:
3038 return "DW_OP_reg30";
3039 case DW_OP_reg31:
3040 return "DW_OP_reg31";
3041 case DW_OP_breg0:
3042 return "DW_OP_breg0";
3043 case DW_OP_breg1:
3044 return "DW_OP_breg1";
3045 case DW_OP_breg2:
3046 return "DW_OP_breg2";
3047 case DW_OP_breg3:
3048 return "DW_OP_breg3";
3049 case DW_OP_breg4:
3050 return "DW_OP_breg4";
3051 case DW_OP_breg5:
3052 return "DW_OP_breg5";
3053 case DW_OP_breg6:
3054 return "DW_OP_breg6";
3055 case DW_OP_breg7:
3056 return "DW_OP_breg7";
3057 case DW_OP_breg8:
3058 return "DW_OP_breg8";
3059 case DW_OP_breg9:
3060 return "DW_OP_breg9";
3061 case DW_OP_breg10:
3062 return "DW_OP_breg10";
3063 case DW_OP_breg11:
3064 return "DW_OP_breg11";
3065 case DW_OP_breg12:
3066 return "DW_OP_breg12";
3067 case DW_OP_breg13:
3068 return "DW_OP_breg13";
3069 case DW_OP_breg14:
3070 return "DW_OP_breg14";
3071 case DW_OP_breg15:
3072 return "DW_OP_breg15";
3073 case DW_OP_breg16:
3074 return "DW_OP_breg16";
3075 case DW_OP_breg17:
3076 return "DW_OP_breg17";
3077 case DW_OP_breg18:
3078 return "DW_OP_breg18";
3079 case DW_OP_breg19:
3080 return "DW_OP_breg19";
3081 case DW_OP_breg20:
3082 return "DW_OP_breg20";
3083 case DW_OP_breg21:
3084 return "DW_OP_breg21";
3085 case DW_OP_breg22:
3086 return "DW_OP_breg22";
3087 case DW_OP_breg23:
3088 return "DW_OP_breg23";
3089 case DW_OP_breg24:
3090 return "DW_OP_breg24";
3091 case DW_OP_breg25:
3092 return "DW_OP_breg25";
3093 case DW_OP_breg26:
3094 return "DW_OP_breg26";
3095 case DW_OP_breg27:
3096 return "DW_OP_breg27";
3097 case DW_OP_breg28:
3098 return "DW_OP_breg28";
3099 case DW_OP_breg29:
3100 return "DW_OP_breg29";
3101 case DW_OP_breg30:
3102 return "DW_OP_breg30";
3103 case DW_OP_breg31:
3104 return "DW_OP_breg31";
3105 case DW_OP_regx:
3106 return "DW_OP_regx";
3107 case DW_OP_fbreg:
3108 return "DW_OP_fbreg";
3109 case DW_OP_bregx:
3110 return "DW_OP_bregx";
3111 case DW_OP_piece:
3112 return "DW_OP_piece";
3113 case DW_OP_deref_size:
3114 return "DW_OP_deref_size";
3115 case DW_OP_xderef_size:
3116 return "DW_OP_xderef_size";
3117 case DW_OP_nop:
3118 return "DW_OP_nop";
3119 case DW_OP_push_object_address:
3120 return "DW_OP_push_object_address";
3121 case DW_OP_call2:
3122 return "DW_OP_call2";
3123 case DW_OP_call4:
3124 return "DW_OP_call4";
3125 case DW_OP_call_ref:
3126 return "DW_OP_call_ref";
3127 case DW_OP_GNU_push_tls_address:
3128 return "DW_OP_GNU_push_tls_address";
3129 case DW_OP_GNU_uninit:
3130 return "DW_OP_GNU_uninit";
3131 default:
3132 return "OP_<unknown>";
3133 }
3134 }
3135
3136 /* Return a pointer to a newly allocated location description. Location
3137 descriptions are simple expression terms that can be strung
3138 together to form more complicated location (address) descriptions. */
3139
3140 static inline dw_loc_descr_ref
3141 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
3142 unsigned HOST_WIDE_INT oprnd2)
3143 {
3144 dw_loc_descr_ref descr = ggc_alloc_cleared (sizeof (dw_loc_descr_node));
3145
3146 descr->dw_loc_opc = op;
3147 descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
3148 descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
3149 descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
3150 descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
3151
3152 return descr;
3153 }
3154
3155 /* Add a location description term to a location description expression. */
3156
3157 static inline void
3158 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
3159 {
3160 dw_loc_descr_ref *d;
3161
3162 /* Find the end of the chain. */
3163 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
3164 ;
3165
3166 *d = descr;
3167 }
3168
3169 /* Return the size of a location descriptor. */
3170
3171 static unsigned long
3172 size_of_loc_descr (dw_loc_descr_ref loc)
3173 {
3174 unsigned long size = 1;
3175
3176 switch (loc->dw_loc_opc)
3177 {
3178 case DW_OP_addr:
3179 case INTERNAL_DW_OP_tls_addr:
3180 size += DWARF2_ADDR_SIZE;
3181 break;
3182 case DW_OP_const1u:
3183 case DW_OP_const1s:
3184 size += 1;
3185 break;
3186 case DW_OP_const2u:
3187 case DW_OP_const2s:
3188 size += 2;
3189 break;
3190 case DW_OP_const4u:
3191 case DW_OP_const4s:
3192 size += 4;
3193 break;
3194 case DW_OP_const8u:
3195 case DW_OP_const8s:
3196 size += 8;
3197 break;
3198 case DW_OP_constu:
3199 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3200 break;
3201 case DW_OP_consts:
3202 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3203 break;
3204 case DW_OP_pick:
3205 size += 1;
3206 break;
3207 case DW_OP_plus_uconst:
3208 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3209 break;
3210 case DW_OP_skip:
3211 case DW_OP_bra:
3212 size += 2;
3213 break;
3214 case DW_OP_breg0:
3215 case DW_OP_breg1:
3216 case DW_OP_breg2:
3217 case DW_OP_breg3:
3218 case DW_OP_breg4:
3219 case DW_OP_breg5:
3220 case DW_OP_breg6:
3221 case DW_OP_breg7:
3222 case DW_OP_breg8:
3223 case DW_OP_breg9:
3224 case DW_OP_breg10:
3225 case DW_OP_breg11:
3226 case DW_OP_breg12:
3227 case DW_OP_breg13:
3228 case DW_OP_breg14:
3229 case DW_OP_breg15:
3230 case DW_OP_breg16:
3231 case DW_OP_breg17:
3232 case DW_OP_breg18:
3233 case DW_OP_breg19:
3234 case DW_OP_breg20:
3235 case DW_OP_breg21:
3236 case DW_OP_breg22:
3237 case DW_OP_breg23:
3238 case DW_OP_breg24:
3239 case DW_OP_breg25:
3240 case DW_OP_breg26:
3241 case DW_OP_breg27:
3242 case DW_OP_breg28:
3243 case DW_OP_breg29:
3244 case DW_OP_breg30:
3245 case DW_OP_breg31:
3246 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3247 break;
3248 case DW_OP_regx:
3249 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3250 break;
3251 case DW_OP_fbreg:
3252 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3253 break;
3254 case DW_OP_bregx:
3255 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3256 size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
3257 break;
3258 case DW_OP_piece:
3259 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3260 break;
3261 case DW_OP_deref_size:
3262 case DW_OP_xderef_size:
3263 size += 1;
3264 break;
3265 case DW_OP_call2:
3266 size += 2;
3267 break;
3268 case DW_OP_call4:
3269 size += 4;
3270 break;
3271 case DW_OP_call_ref:
3272 size += DWARF2_ADDR_SIZE;
3273 break;
3274 default:
3275 break;
3276 }
3277
3278 return size;
3279 }
3280
3281 /* Return the size of a series of location descriptors. */
3282
3283 static unsigned long
3284 size_of_locs (dw_loc_descr_ref loc)
3285 {
3286 dw_loc_descr_ref l;
3287 unsigned long size;
3288
3289 /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
3290 field, to avoid writing to a PCH file. */
3291 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
3292 {
3293 if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
3294 break;
3295 size += size_of_loc_descr (l);
3296 }
3297 if (! l)
3298 return size;
3299
3300 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
3301 {
3302 l->dw_loc_addr = size;
3303 size += size_of_loc_descr (l);
3304 }
3305
3306 return size;
3307 }
3308
3309 /* Output location description stack opcode's operands (if any). */
3310
3311 static void
3312 output_loc_operands (dw_loc_descr_ref loc)
3313 {
3314 dw_val_ref val1 = &loc->dw_loc_oprnd1;
3315 dw_val_ref val2 = &loc->dw_loc_oprnd2;
3316
3317 switch (loc->dw_loc_opc)
3318 {
3319 #ifdef DWARF2_DEBUGGING_INFO
3320 case DW_OP_addr:
3321 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
3322 break;
3323 case DW_OP_const2u:
3324 case DW_OP_const2s:
3325 dw2_asm_output_data (2, val1->v.val_int, NULL);
3326 break;
3327 case DW_OP_const4u:
3328 case DW_OP_const4s:
3329 dw2_asm_output_data (4, val1->v.val_int, NULL);
3330 break;
3331 case DW_OP_const8u:
3332 case DW_OP_const8s:
3333 gcc_assert (HOST_BITS_PER_LONG >= 64);
3334 dw2_asm_output_data (8, val1->v.val_int, NULL);
3335 break;
3336 case DW_OP_skip:
3337 case DW_OP_bra:
3338 {
3339 int offset;
3340
3341 gcc_assert (val1->val_class == dw_val_class_loc);
3342 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
3343
3344 dw2_asm_output_data (2, offset, NULL);
3345 }
3346 break;
3347 #else
3348 case DW_OP_addr:
3349 case DW_OP_const2u:
3350 case DW_OP_const2s:
3351 case DW_OP_const4u:
3352 case DW_OP_const4s:
3353 case DW_OP_const8u:
3354 case DW_OP_const8s:
3355 case DW_OP_skip:
3356 case DW_OP_bra:
3357 /* We currently don't make any attempt to make sure these are
3358 aligned properly like we do for the main unwind info, so
3359 don't support emitting things larger than a byte if we're
3360 only doing unwinding. */
3361 gcc_unreachable ();
3362 #endif
3363 case DW_OP_const1u:
3364 case DW_OP_const1s:
3365 dw2_asm_output_data (1, val1->v.val_int, NULL);
3366 break;
3367 case DW_OP_constu:
3368 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3369 break;
3370 case DW_OP_consts:
3371 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3372 break;
3373 case DW_OP_pick:
3374 dw2_asm_output_data (1, val1->v.val_int, NULL);
3375 break;
3376 case DW_OP_plus_uconst:
3377 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3378 break;
3379 case DW_OP_breg0:
3380 case DW_OP_breg1:
3381 case DW_OP_breg2:
3382 case DW_OP_breg3:
3383 case DW_OP_breg4:
3384 case DW_OP_breg5:
3385 case DW_OP_breg6:
3386 case DW_OP_breg7:
3387 case DW_OP_breg8:
3388 case DW_OP_breg9:
3389 case DW_OP_breg10:
3390 case DW_OP_breg11:
3391 case DW_OP_breg12:
3392 case DW_OP_breg13:
3393 case DW_OP_breg14:
3394 case DW_OP_breg15:
3395 case DW_OP_breg16:
3396 case DW_OP_breg17:
3397 case DW_OP_breg18:
3398 case DW_OP_breg19:
3399 case DW_OP_breg20:
3400 case DW_OP_breg21:
3401 case DW_OP_breg22:
3402 case DW_OP_breg23:
3403 case DW_OP_breg24:
3404 case DW_OP_breg25:
3405 case DW_OP_breg26:
3406 case DW_OP_breg27:
3407 case DW_OP_breg28:
3408 case DW_OP_breg29:
3409 case DW_OP_breg30:
3410 case DW_OP_breg31:
3411 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3412 break;
3413 case DW_OP_regx:
3414 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3415 break;
3416 case DW_OP_fbreg:
3417 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3418 break;
3419 case DW_OP_bregx:
3420 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3421 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
3422 break;
3423 case DW_OP_piece:
3424 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3425 break;
3426 case DW_OP_deref_size:
3427 case DW_OP_xderef_size:
3428 dw2_asm_output_data (1, val1->v.val_int, NULL);
3429 break;
3430
3431 case INTERNAL_DW_OP_tls_addr:
3432 if (targetm.asm_out.output_dwarf_dtprel)
3433 {
3434 targetm.asm_out.output_dwarf_dtprel (asm_out_file,
3435 DWARF2_ADDR_SIZE,
3436 val1->v.val_addr);
3437 fputc ('\n', asm_out_file);
3438 }
3439 else
3440 gcc_unreachable ();
3441 break;
3442
3443 default:
3444 /* Other codes have no operands. */
3445 break;
3446 }
3447 }
3448
3449 /* Output a sequence of location operations. */
3450
3451 static void
3452 output_loc_sequence (dw_loc_descr_ref loc)
3453 {
3454 for (; loc != NULL; loc = loc->dw_loc_next)
3455 {
3456 /* Output the opcode. */
3457 dw2_asm_output_data (1, loc->dw_loc_opc,
3458 "%s", dwarf_stack_op_name (loc->dw_loc_opc));
3459
3460 /* Output the operand(s) (if any). */
3461 output_loc_operands (loc);
3462 }
3463 }
3464
3465 /* This routine will generate the correct assembly data for a location
3466 description based on a cfi entry with a complex address. */
3467
3468 static void
3469 output_cfa_loc (dw_cfi_ref cfi)
3470 {
3471 dw_loc_descr_ref loc;
3472 unsigned long size;
3473
3474 /* Output the size of the block. */
3475 loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
3476 size = size_of_locs (loc);
3477 dw2_asm_output_data_uleb128 (size, NULL);
3478
3479 /* Now output the operations themselves. */
3480 output_loc_sequence (loc);
3481 }
3482
3483 /* This function builds a dwarf location descriptor sequence from a
3484 dw_cfa_location, adding the given OFFSET to the result of the
3485 expression. */
3486
3487 static struct dw_loc_descr_struct *
3488 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
3489 {
3490 struct dw_loc_descr_struct *head, *tmp;
3491
3492 offset += cfa->offset;
3493
3494 if (cfa->indirect)
3495 {
3496 if (cfa->base_offset)
3497 {
3498 if (cfa->reg <= 31)
3499 head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->base_offset, 0);
3500 else
3501 head = new_loc_descr (DW_OP_bregx, cfa->reg, cfa->base_offset);
3502 }
3503 else if (cfa->reg <= 31)
3504 head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
3505 else
3506 head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
3507
3508 head->dw_loc_oprnd1.val_class = dw_val_class_const;
3509 tmp = new_loc_descr (DW_OP_deref, 0, 0);
3510 add_loc_descr (&head, tmp);
3511 if (offset != 0)
3512 {
3513 tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
3514 add_loc_descr (&head, tmp);
3515 }
3516 }
3517 else
3518 {
3519 if (offset == 0)
3520 if (cfa->reg <= 31)
3521 head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
3522 else
3523 head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
3524 else if (cfa->reg <= 31)
3525 head = new_loc_descr (DW_OP_breg0 + cfa->reg, offset, 0);
3526 else
3527 head = new_loc_descr (DW_OP_bregx, cfa->reg, offset);
3528 }
3529
3530 return head;
3531 }
3532
3533 /* This function fills in aa dw_cfa_location structure from a dwarf location
3534 descriptor sequence. */
3535
3536 static void
3537 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
3538 {
3539 struct dw_loc_descr_struct *ptr;
3540 cfa->offset = 0;
3541 cfa->base_offset = 0;
3542 cfa->indirect = 0;
3543 cfa->reg = -1;
3544
3545 for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
3546 {
3547 enum dwarf_location_atom op = ptr->dw_loc_opc;
3548
3549 switch (op)
3550 {
3551 case DW_OP_reg0:
3552 case DW_OP_reg1:
3553 case DW_OP_reg2:
3554 case DW_OP_reg3:
3555 case DW_OP_reg4:
3556 case DW_OP_reg5:
3557 case DW_OP_reg6:
3558 case DW_OP_reg7:
3559 case DW_OP_reg8:
3560 case DW_OP_reg9:
3561 case DW_OP_reg10:
3562 case DW_OP_reg11:
3563 case DW_OP_reg12:
3564 case DW_OP_reg13:
3565 case DW_OP_reg14:
3566 case DW_OP_reg15:
3567 case DW_OP_reg16:
3568 case DW_OP_reg17:
3569 case DW_OP_reg18:
3570 case DW_OP_reg19:
3571 case DW_OP_reg20:
3572 case DW_OP_reg21:
3573 case DW_OP_reg22:
3574 case DW_OP_reg23:
3575 case DW_OP_reg24:
3576 case DW_OP_reg25:
3577 case DW_OP_reg26:
3578 case DW_OP_reg27:
3579 case DW_OP_reg28:
3580 case DW_OP_reg29:
3581 case DW_OP_reg30:
3582 case DW_OP_reg31:
3583 cfa->reg = op - DW_OP_reg0;
3584 break;
3585 case DW_OP_regx:
3586 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3587 break;
3588 case DW_OP_breg0:
3589 case DW_OP_breg1:
3590 case DW_OP_breg2:
3591 case DW_OP_breg3:
3592 case DW_OP_breg4:
3593 case DW_OP_breg5:
3594 case DW_OP_breg6:
3595 case DW_OP_breg7:
3596 case DW_OP_breg8:
3597 case DW_OP_breg9:
3598 case DW_OP_breg10:
3599 case DW_OP_breg11:
3600 case DW_OP_breg12:
3601 case DW_OP_breg13:
3602 case DW_OP_breg14:
3603 case DW_OP_breg15:
3604 case DW_OP_breg16:
3605 case DW_OP_breg17:
3606 case DW_OP_breg18:
3607 case DW_OP_breg19:
3608 case DW_OP_breg20:
3609 case DW_OP_breg21:
3610 case DW_OP_breg22:
3611 case DW_OP_breg23:
3612 case DW_OP_breg24:
3613 case DW_OP_breg25:
3614 case DW_OP_breg26:
3615 case DW_OP_breg27:
3616 case DW_OP_breg28:
3617 case DW_OP_breg29:
3618 case DW_OP_breg30:
3619 case DW_OP_breg31:
3620 cfa->reg = op - DW_OP_breg0;
3621 cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
3622 break;
3623 case DW_OP_bregx:
3624 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3625 cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
3626 break;
3627 case DW_OP_deref:
3628 cfa->indirect = 1;
3629 break;
3630 case DW_OP_plus_uconst:
3631 cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
3632 break;
3633 default:
3634 internal_error ("DW_LOC_OP %s not implemented",
3635 dwarf_stack_op_name (ptr->dw_loc_opc));
3636 }
3637 }
3638 }
3639 #endif /* .debug_frame support */
3640 \f
3641 /* And now, the support for symbolic debugging information. */
3642 #ifdef DWARF2_DEBUGGING_INFO
3643
3644 /* .debug_str support. */
3645 static int output_indirect_string (void **, void *);
3646
3647 static void dwarf2out_init (const char *);
3648 static void dwarf2out_finish (const char *);
3649 static void dwarf2out_define (unsigned int, const char *);
3650 static void dwarf2out_undef (unsigned int, const char *);
3651 static void dwarf2out_start_source_file (unsigned, const char *);
3652 static void dwarf2out_end_source_file (unsigned);
3653 static void dwarf2out_begin_block (unsigned, unsigned);
3654 static void dwarf2out_end_block (unsigned, unsigned);
3655 static bool dwarf2out_ignore_block (const_tree);
3656 static void dwarf2out_global_decl (tree);
3657 static void dwarf2out_type_decl (tree, int);
3658 static void dwarf2out_imported_module_or_decl (tree, tree);
3659 static void dwarf2out_abstract_function (tree);
3660 static void dwarf2out_var_location (rtx);
3661 static void dwarf2out_begin_function (tree);
3662 static void dwarf2out_switch_text_section (void);
3663
3664 /* The debug hooks structure. */
3665
3666 const struct gcc_debug_hooks dwarf2_debug_hooks =
3667 {
3668 dwarf2out_init,
3669 dwarf2out_finish,
3670 dwarf2out_define,
3671 dwarf2out_undef,
3672 dwarf2out_start_source_file,
3673 dwarf2out_end_source_file,
3674 dwarf2out_begin_block,
3675 dwarf2out_end_block,
3676 dwarf2out_ignore_block,
3677 dwarf2out_source_line,
3678 dwarf2out_begin_prologue,
3679 debug_nothing_int_charstar, /* end_prologue */
3680 dwarf2out_end_epilogue,
3681 dwarf2out_begin_function,
3682 debug_nothing_int, /* end_function */
3683 dwarf2out_decl, /* function_decl */
3684 dwarf2out_global_decl,
3685 dwarf2out_type_decl, /* type_decl */
3686 dwarf2out_imported_module_or_decl,
3687 debug_nothing_tree, /* deferred_inline_function */
3688 /* The DWARF 2 backend tries to reduce debugging bloat by not
3689 emitting the abstract description of inline functions until
3690 something tries to reference them. */
3691 dwarf2out_abstract_function, /* outlining_inline_function */
3692 debug_nothing_rtx, /* label */
3693 debug_nothing_int, /* handle_pch */
3694 dwarf2out_var_location,
3695 dwarf2out_switch_text_section,
3696 1 /* start_end_main_source_file */
3697 };
3698 #endif
3699 \f
3700 /* NOTE: In the comments in this file, many references are made to
3701 "Debugging Information Entries". This term is abbreviated as `DIE'
3702 throughout the remainder of this file. */
3703
3704 /* An internal representation of the DWARF output is built, and then
3705 walked to generate the DWARF debugging info. The walk of the internal
3706 representation is done after the entire program has been compiled.
3707 The types below are used to describe the internal representation. */
3708
3709 /* Various DIE's use offsets relative to the beginning of the
3710 .debug_info section to refer to each other. */
3711
3712 typedef long int dw_offset;
3713
3714 /* Define typedefs here to avoid circular dependencies. */
3715
3716 typedef struct dw_attr_struct *dw_attr_ref;
3717 typedef struct dw_line_info_struct *dw_line_info_ref;
3718 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
3719 typedef struct pubname_struct *pubname_ref;
3720 typedef struct dw_ranges_struct *dw_ranges_ref;
3721 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
3722
3723 /* Each entry in the line_info_table maintains the file and
3724 line number associated with the label generated for that
3725 entry. The label gives the PC value associated with
3726 the line number entry. */
3727
3728 typedef struct dw_line_info_struct GTY(())
3729 {
3730 unsigned long dw_file_num;
3731 unsigned long dw_line_num;
3732 }
3733 dw_line_info_entry;
3734
3735 /* Line information for functions in separate sections; each one gets its
3736 own sequence. */
3737 typedef struct dw_separate_line_info_struct GTY(())
3738 {
3739 unsigned long dw_file_num;
3740 unsigned long dw_line_num;
3741 unsigned long function;
3742 }
3743 dw_separate_line_info_entry;
3744
3745 /* Each DIE attribute has a field specifying the attribute kind,
3746 a link to the next attribute in the chain, and an attribute value.
3747 Attributes are typically linked below the DIE they modify. */
3748
3749 typedef struct dw_attr_struct GTY(())
3750 {
3751 enum dwarf_attribute dw_attr;
3752 dw_val_node dw_attr_val;
3753 }
3754 dw_attr_node;
3755
3756 DEF_VEC_O(dw_attr_node);
3757 DEF_VEC_ALLOC_O(dw_attr_node,gc);
3758
3759 /* The Debugging Information Entry (DIE) structure. DIEs form a tree.
3760 The children of each node form a circular list linked by
3761 die_sib. die_child points to the node *before* the "first" child node. */
3762
3763 typedef struct die_struct GTY(())
3764 {
3765 enum dwarf_tag die_tag;
3766 char *die_symbol;
3767 VEC(dw_attr_node,gc) * die_attr;
3768 dw_die_ref die_parent;
3769 dw_die_ref die_child;
3770 dw_die_ref die_sib;
3771 dw_die_ref die_definition; /* ref from a specification to its definition */
3772 dw_offset die_offset;
3773 unsigned long die_abbrev;
3774 int die_mark;
3775 /* Die is used and must not be pruned as unused. */
3776 int die_perennial_p;
3777 unsigned int decl_id;
3778 }
3779 die_node;
3780
3781 /* Evaluate 'expr' while 'c' is set to each child of DIE in order. */
3782 #define FOR_EACH_CHILD(die, c, expr) do { \
3783 c = die->die_child; \
3784 if (c) do { \
3785 c = c->die_sib; \
3786 expr; \
3787 } while (c != die->die_child); \
3788 } while (0)
3789
3790 /* The pubname structure */
3791
3792 typedef struct pubname_struct GTY(())
3793 {
3794 dw_die_ref die;
3795 const char *name;
3796 }
3797 pubname_entry;
3798
3799 DEF_VEC_O(pubname_entry);
3800 DEF_VEC_ALLOC_O(pubname_entry, gc);
3801
3802 struct dw_ranges_struct GTY(())
3803 {
3804 /* If this is positive, it's a block number, otherwise it's a
3805 bitwise-negated index into dw_ranges_by_label. */
3806 int num;
3807 };
3808
3809 struct dw_ranges_by_label_struct GTY(())
3810 {
3811 const char *begin;
3812 const char *end;
3813 };
3814
3815 /* The limbo die list structure. */
3816 typedef struct limbo_die_struct GTY(())
3817 {
3818 dw_die_ref die;
3819 tree created_for;
3820 struct limbo_die_struct *next;
3821 }
3822 limbo_die_node;
3823
3824 /* How to start an assembler comment. */
3825 #ifndef ASM_COMMENT_START
3826 #define ASM_COMMENT_START ";#"
3827 #endif
3828
3829 /* Define a macro which returns nonzero for a TYPE_DECL which was
3830 implicitly generated for a tagged type.
3831
3832 Note that unlike the gcc front end (which generates a NULL named
3833 TYPE_DECL node for each complete tagged type, each array type, and
3834 each function type node created) the g++ front end generates a
3835 _named_ TYPE_DECL node for each tagged type node created.
3836 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
3837 generate a DW_TAG_typedef DIE for them. */
3838
3839 #define TYPE_DECL_IS_STUB(decl) \
3840 (DECL_NAME (decl) == NULL_TREE \
3841 || (DECL_ARTIFICIAL (decl) \
3842 && is_tagged_type (TREE_TYPE (decl)) \
3843 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
3844 /* This is necessary for stub decls that \
3845 appear in nested inline functions. */ \
3846 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
3847 && (decl_ultimate_origin (decl) \
3848 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
3849
3850 /* Information concerning the compilation unit's programming
3851 language, and compiler version. */
3852
3853 /* Fixed size portion of the DWARF compilation unit header. */
3854 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
3855 (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
3856
3857 /* Fixed size portion of public names info. */
3858 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
3859
3860 /* Fixed size portion of the address range info. */
3861 #define DWARF_ARANGES_HEADER_SIZE \
3862 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3863 DWARF2_ADDR_SIZE * 2) \
3864 - DWARF_INITIAL_LENGTH_SIZE)
3865
3866 /* Size of padding portion in the address range info. It must be
3867 aligned to twice the pointer size. */
3868 #define DWARF_ARANGES_PAD_SIZE \
3869 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3870 DWARF2_ADDR_SIZE * 2) \
3871 - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
3872
3873 /* Use assembler line directives if available. */
3874 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
3875 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
3876 #define DWARF2_ASM_LINE_DEBUG_INFO 1
3877 #else
3878 #define DWARF2_ASM_LINE_DEBUG_INFO 0
3879 #endif
3880 #endif
3881
3882 /* Minimum line offset in a special line info. opcode.
3883 This value was chosen to give a reasonable range of values. */
3884 #define DWARF_LINE_BASE -10
3885
3886 /* First special line opcode - leave room for the standard opcodes. */
3887 #define DWARF_LINE_OPCODE_BASE 10
3888
3889 /* Range of line offsets in a special line info. opcode. */
3890 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
3891
3892 /* Flag that indicates the initial value of the is_stmt_start flag.
3893 In the present implementation, we do not mark any lines as
3894 the beginning of a source statement, because that information
3895 is not made available by the GCC front-end. */
3896 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
3897
3898 #ifdef DWARF2_DEBUGGING_INFO
3899 /* This location is used by calc_die_sizes() to keep track
3900 the offset of each DIE within the .debug_info section. */
3901 static unsigned long next_die_offset;
3902 #endif
3903
3904 /* Record the root of the DIE's built for the current compilation unit. */
3905 static GTY(()) dw_die_ref comp_unit_die;
3906
3907 /* A list of DIEs with a NULL parent waiting to be relocated. */
3908 static GTY(()) limbo_die_node *limbo_die_list;
3909
3910 /* Filenames referenced by this compilation unit. */
3911 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
3912
3913 /* A hash table of references to DIE's that describe declarations.
3914 The key is a DECL_UID() which is a unique number identifying each decl. */
3915 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
3916
3917 /* Node of the variable location list. */
3918 struct var_loc_node GTY ((chain_next ("%h.next")))
3919 {
3920 rtx GTY (()) var_loc_note;
3921 const char * GTY (()) label;
3922 const char * GTY (()) section_label;
3923 struct var_loc_node * GTY (()) next;
3924 };
3925
3926 /* Variable location list. */
3927 struct var_loc_list_def GTY (())
3928 {
3929 struct var_loc_node * GTY (()) first;
3930
3931 /* Do not mark the last element of the chained list because
3932 it is marked through the chain. */
3933 struct var_loc_node * GTY ((skip ("%h"))) last;
3934
3935 /* DECL_UID of the variable decl. */
3936 unsigned int decl_id;
3937 };
3938 typedef struct var_loc_list_def var_loc_list;
3939
3940
3941 /* Table of decl location linked lists. */
3942 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
3943
3944 /* A pointer to the base of a list of references to DIE's that
3945 are uniquely identified by their tag, presence/absence of
3946 children DIE's, and list of attribute/value pairs. */
3947 static GTY((length ("abbrev_die_table_allocated")))
3948 dw_die_ref *abbrev_die_table;
3949
3950 /* Number of elements currently allocated for abbrev_die_table. */
3951 static GTY(()) unsigned abbrev_die_table_allocated;
3952
3953 /* Number of elements in type_die_table currently in use. */
3954 static GTY(()) unsigned abbrev_die_table_in_use;
3955
3956 /* Size (in elements) of increments by which we may expand the
3957 abbrev_die_table. */
3958 #define ABBREV_DIE_TABLE_INCREMENT 256
3959
3960 /* A pointer to the base of a table that contains line information
3961 for each source code line in .text in the compilation unit. */
3962 static GTY((length ("line_info_table_allocated")))
3963 dw_line_info_ref line_info_table;
3964
3965 /* Number of elements currently allocated for line_info_table. */
3966 static GTY(()) unsigned line_info_table_allocated;
3967
3968 /* Number of elements in line_info_table currently in use. */
3969 static GTY(()) unsigned line_info_table_in_use;
3970
3971 /* True if the compilation unit places functions in more than one section. */
3972 static GTY(()) bool have_multiple_function_sections = false;
3973
3974 /* A pointer to the base of a table that contains line information
3975 for each source code line outside of .text in the compilation unit. */
3976 static GTY ((length ("separate_line_info_table_allocated")))
3977 dw_separate_line_info_ref separate_line_info_table;
3978
3979 /* Number of elements currently allocated for separate_line_info_table. */
3980 static GTY(()) unsigned separate_line_info_table_allocated;
3981
3982 /* Number of elements in separate_line_info_table currently in use. */
3983 static GTY(()) unsigned separate_line_info_table_in_use;
3984
3985 /* Size (in elements) of increments by which we may expand the
3986 line_info_table. */
3987 #define LINE_INFO_TABLE_INCREMENT 1024
3988
3989 /* A pointer to the base of a table that contains a list of publicly
3990 accessible names. */
3991 static GTY (()) VEC (pubname_entry, gc) * pubname_table;
3992
3993 /* A pointer to the base of a table that contains a list of publicly
3994 accessible types. */
3995 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
3996
3997 /* Array of dies for which we should generate .debug_arange info. */
3998 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
3999
4000 /* Number of elements currently allocated for arange_table. */
4001 static GTY(()) unsigned arange_table_allocated;
4002
4003 /* Number of elements in arange_table currently in use. */
4004 static GTY(()) unsigned arange_table_in_use;
4005
4006 /* Size (in elements) of increments by which we may expand the
4007 arange_table. */
4008 #define ARANGE_TABLE_INCREMENT 64
4009
4010 /* Array of dies for which we should generate .debug_ranges info. */
4011 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
4012
4013 /* Number of elements currently allocated for ranges_table. */
4014 static GTY(()) unsigned ranges_table_allocated;
4015
4016 /* Number of elements in ranges_table currently in use. */
4017 static GTY(()) unsigned ranges_table_in_use;
4018
4019 /* Array of pairs of labels referenced in ranges_table. */
4020 static GTY ((length ("ranges_by_label_allocated")))
4021 dw_ranges_by_label_ref ranges_by_label;
4022
4023 /* Number of elements currently allocated for ranges_by_label. */
4024 static GTY(()) unsigned ranges_by_label_allocated;
4025
4026 /* Number of elements in ranges_by_label currently in use. */
4027 static GTY(()) unsigned ranges_by_label_in_use;
4028
4029 /* Size (in elements) of increments by which we may expand the
4030 ranges_table. */
4031 #define RANGES_TABLE_INCREMENT 64
4032
4033 /* Whether we have location lists that need outputting */
4034 static GTY(()) bool have_location_lists;
4035
4036 /* Unique label counter. */
4037 static GTY(()) unsigned int loclabel_num;
4038
4039 #ifdef DWARF2_DEBUGGING_INFO
4040 /* Record whether the function being analyzed contains inlined functions. */
4041 static int current_function_has_inlines;
4042 #endif
4043 #if 0 && defined (MIPS_DEBUGGING_INFO)
4044 static int comp_unit_has_inlines;
4045 #endif
4046
4047 /* The last file entry emitted by maybe_emit_file(). */
4048 static GTY(()) struct dwarf_file_data * last_emitted_file;
4049
4050 /* Number of internal labels generated by gen_internal_sym(). */
4051 static GTY(()) int label_num;
4052
4053 /* Cached result of previous call to lookup_filename. */
4054 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
4055
4056 /* Whether the default text and cold text sections have been used at
4057 all. */
4058
4059 static GTY(()) bool text_section_used = false;
4060 static GTY(()) bool cold_text_section_used = false;
4061
4062 /* The default cold text section. */
4063 static GTY(()) section *cold_text_section;
4064
4065 #ifdef DWARF2_DEBUGGING_INFO
4066
4067 /* Offset from the "steady-state frame pointer" to the frame base,
4068 within the current function. */
4069 static HOST_WIDE_INT frame_pointer_fb_offset;
4070
4071 /* Forward declarations for functions defined in this file. */
4072
4073 static int is_pseudo_reg (const_rtx);
4074 static tree type_main_variant (tree);
4075 static int is_tagged_type (const_tree);
4076 static const char *dwarf_tag_name (unsigned);
4077 static const char *dwarf_attr_name (unsigned);
4078 static const char *dwarf_form_name (unsigned);
4079 static tree decl_ultimate_origin (const_tree);
4080 static tree block_ultimate_origin (const_tree);
4081 static tree decl_class_context (tree);
4082 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
4083 static inline enum dw_val_class AT_class (dw_attr_ref);
4084 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
4085 static inline unsigned AT_flag (dw_attr_ref);
4086 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
4087 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
4088 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
4089 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
4090 static void add_AT_long_long (dw_die_ref, enum dwarf_attribute, unsigned long,
4091 unsigned long);
4092 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
4093 unsigned int, unsigned char *);
4094 static hashval_t debug_str_do_hash (const void *);
4095 static int debug_str_eq (const void *, const void *);
4096 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
4097 static inline const char *AT_string (dw_attr_ref);
4098 static int AT_string_form (dw_attr_ref);
4099 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
4100 static void add_AT_specification (dw_die_ref, dw_die_ref);
4101 static inline dw_die_ref AT_ref (dw_attr_ref);
4102 static inline int AT_ref_external (dw_attr_ref);
4103 static inline void set_AT_ref_external (dw_attr_ref, int);
4104 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
4105 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
4106 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
4107 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
4108 dw_loc_list_ref);
4109 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
4110 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
4111 static inline rtx AT_addr (dw_attr_ref);
4112 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
4113 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
4114 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
4115 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
4116 unsigned HOST_WIDE_INT);
4117 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
4118 unsigned long);
4119 static inline const char *AT_lbl (dw_attr_ref);
4120 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
4121 static const char *get_AT_low_pc (dw_die_ref);
4122 static const char *get_AT_hi_pc (dw_die_ref);
4123 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
4124 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
4125 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
4126 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
4127 static bool is_c_family (void);
4128 static bool is_cxx (void);
4129 static bool is_java (void);
4130 static bool is_fortran (void);
4131 static bool is_ada (void);
4132 static void remove_AT (dw_die_ref, enum dwarf_attribute);
4133 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
4134 static void add_child_die (dw_die_ref, dw_die_ref);
4135 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
4136 static dw_die_ref lookup_type_die (tree);
4137 static void equate_type_number_to_die (tree, dw_die_ref);
4138 static hashval_t decl_die_table_hash (const void *);
4139 static int decl_die_table_eq (const void *, const void *);
4140 static dw_die_ref lookup_decl_die (tree);
4141 static hashval_t decl_loc_table_hash (const void *);
4142 static int decl_loc_table_eq (const void *, const void *);
4143 static var_loc_list *lookup_decl_loc (const_tree);
4144 static void equate_decl_number_to_die (tree, dw_die_ref);
4145 static void add_var_loc_to_decl (tree, struct var_loc_node *);
4146 static void print_spaces (FILE *);
4147 static void print_die (dw_die_ref, FILE *);
4148 static void print_dwarf_line_table (FILE *);
4149 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
4150 static dw_die_ref pop_compile_unit (dw_die_ref);
4151 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
4152 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
4153 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
4154 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
4155 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
4156 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
4157 static int same_die_p (dw_die_ref, dw_die_ref, int *);
4158 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
4159 static void compute_section_prefix (dw_die_ref);
4160 static int is_type_die (dw_die_ref);
4161 static int is_comdat_die (dw_die_ref);
4162 static int is_symbol_die (dw_die_ref);
4163 static void assign_symbol_names (dw_die_ref);
4164 static void break_out_includes (dw_die_ref);
4165 static hashval_t htab_cu_hash (const void *);
4166 static int htab_cu_eq (const void *, const void *);
4167 static void htab_cu_del (void *);
4168 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
4169 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
4170 static void add_sibling_attributes (dw_die_ref);
4171 static void build_abbrev_table (dw_die_ref);
4172 static void output_location_lists (dw_die_ref);
4173 static int constant_size (long unsigned);
4174 static unsigned long size_of_die (dw_die_ref);
4175 static void calc_die_sizes (dw_die_ref);
4176 static void mark_dies (dw_die_ref);
4177 static void unmark_dies (dw_die_ref);
4178 static void unmark_all_dies (dw_die_ref);
4179 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
4180 static unsigned long size_of_aranges (void);
4181 static enum dwarf_form value_format (dw_attr_ref);
4182 static void output_value_format (dw_attr_ref);
4183 static void output_abbrev_section (void);
4184 static void output_die_symbol (dw_die_ref);
4185 static void output_die (dw_die_ref);
4186 static void output_compilation_unit_header (void);
4187 static void output_comp_unit (dw_die_ref, int);
4188 static const char *dwarf2_name (tree, int);
4189 static void add_pubname (tree, dw_die_ref);
4190 static void add_pubtype (tree, dw_die_ref);
4191 static void output_pubnames (VEC (pubname_entry,gc) *);
4192 static void add_arange (tree, dw_die_ref);
4193 static void output_aranges (void);
4194 static unsigned int add_ranges_num (int);
4195 static unsigned int add_ranges (const_tree);
4196 static unsigned int add_ranges_by_labels (const char *, const char *);
4197 static void output_ranges (void);
4198 static void output_line_info (void);
4199 static void output_file_names (void);
4200 static dw_die_ref base_type_die (tree);
4201 static int is_base_type (tree);
4202 static bool is_subrange_type (const_tree);
4203 static dw_die_ref subrange_type_die (tree, dw_die_ref);
4204 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
4205 static int type_is_enum (const_tree);
4206 static unsigned int dbx_reg_number (const_rtx);
4207 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
4208 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
4209 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
4210 enum var_init_status);
4211 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
4212 enum var_init_status);
4213 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4214 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
4215 enum var_init_status);
4216 static int is_based_loc (const_rtx);
4217 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
4218 enum var_init_status);
4219 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
4220 enum var_init_status);
4221 static dw_loc_descr_ref loc_descriptor (rtx, enum var_init_status);
4222 static dw_loc_descr_ref loc_descriptor_from_tree_1 (tree, int);
4223 static dw_loc_descr_ref loc_descriptor_from_tree (tree);
4224 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
4225 static tree field_type (const_tree);
4226 static unsigned int simple_type_align_in_bits (const_tree);
4227 static unsigned int simple_decl_align_in_bits (const_tree);
4228 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
4229 static HOST_WIDE_INT field_byte_offset (const_tree);
4230 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
4231 dw_loc_descr_ref);
4232 static void add_data_member_location_attribute (dw_die_ref, tree);
4233 static void add_const_value_attribute (dw_die_ref, rtx);
4234 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
4235 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4236 static void insert_float (const_rtx, unsigned char *);
4237 static rtx rtl_for_decl_location (tree);
4238 static void add_location_or_const_value_attribute (dw_die_ref, tree,
4239 enum dwarf_attribute);
4240 static void tree_add_const_value_attribute (dw_die_ref, tree);
4241 static void add_name_attribute (dw_die_ref, const char *);
4242 static void add_comp_dir_attribute (dw_die_ref);
4243 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
4244 static void add_subscript_info (dw_die_ref, tree);
4245 static void add_byte_size_attribute (dw_die_ref, tree);
4246 static void add_bit_offset_attribute (dw_die_ref, tree);
4247 static void add_bit_size_attribute (dw_die_ref, tree);
4248 static void add_prototyped_attribute (dw_die_ref, tree);
4249 static void add_abstract_origin_attribute (dw_die_ref, tree);
4250 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
4251 static void add_src_coords_attributes (dw_die_ref, tree);
4252 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
4253 static void push_decl_scope (tree);
4254 static void pop_decl_scope (void);
4255 static dw_die_ref scope_die_for (tree, dw_die_ref);
4256 static inline int local_scope_p (dw_die_ref);
4257 static inline int class_or_namespace_scope_p (dw_die_ref);
4258 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
4259 static void add_calling_convention_attribute (dw_die_ref, tree);
4260 static const char *type_tag (const_tree);
4261 static tree member_declared_type (const_tree);
4262 #if 0
4263 static const char *decl_start_label (tree);
4264 #endif
4265 static void gen_array_type_die (tree, dw_die_ref);
4266 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
4267 #if 0
4268 static void gen_entry_point_die (tree, dw_die_ref);
4269 #endif
4270 static void gen_inlined_enumeration_type_die (tree, dw_die_ref);
4271 static void gen_inlined_structure_type_die (tree, dw_die_ref);
4272 static void gen_inlined_union_type_die (tree, dw_die_ref);
4273 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
4274 static dw_die_ref gen_formal_parameter_die (tree, dw_die_ref);
4275 static void gen_unspecified_parameters_die (tree, dw_die_ref);
4276 static void gen_formal_types_die (tree, dw_die_ref);
4277 static void gen_subprogram_die (tree, dw_die_ref);
4278 static void gen_variable_die (tree, dw_die_ref);
4279 static void gen_label_die (tree, dw_die_ref);
4280 static void gen_lexical_block_die (tree, dw_die_ref, int);
4281 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
4282 static void gen_field_die (tree, dw_die_ref);
4283 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
4284 static dw_die_ref gen_compile_unit_die (const char *);
4285 static void gen_inheritance_die (tree, tree, dw_die_ref);
4286 static void gen_member_die (tree, dw_die_ref);
4287 static void gen_struct_or_union_type_die (tree, dw_die_ref,
4288 enum debug_info_usage);
4289 static void gen_subroutine_type_die (tree, dw_die_ref);
4290 static void gen_typedef_die (tree, dw_die_ref);
4291 static void gen_type_die (tree, dw_die_ref);
4292 static void gen_tagged_type_instantiation_die (tree, dw_die_ref);
4293 static void gen_block_die (tree, dw_die_ref, int);
4294 static void decls_for_scope (tree, dw_die_ref, int);
4295 static int is_redundant_typedef (const_tree);
4296 static void gen_namespace_die (tree);
4297 static void gen_decl_die (tree, dw_die_ref);
4298 static dw_die_ref force_decl_die (tree);
4299 static dw_die_ref force_type_die (tree);
4300 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
4301 static void declare_in_namespace (tree, dw_die_ref);
4302 static struct dwarf_file_data * lookup_filename (const char *);
4303 static void retry_incomplete_types (void);
4304 static void gen_type_die_for_member (tree, tree, dw_die_ref);
4305 static void splice_child_die (dw_die_ref, dw_die_ref);
4306 static int file_info_cmp (const void *, const void *);
4307 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
4308 const char *, const char *, unsigned);
4309 static void add_loc_descr_to_loc_list (dw_loc_list_ref *, dw_loc_descr_ref,
4310 const char *, const char *,
4311 const char *);
4312 static void output_loc_list (dw_loc_list_ref);
4313 static char *gen_internal_sym (const char *);
4314
4315 static void prune_unmark_dies (dw_die_ref);
4316 static void prune_unused_types_mark (dw_die_ref, int);
4317 static void prune_unused_types_walk (dw_die_ref);
4318 static void prune_unused_types_walk_attribs (dw_die_ref);
4319 static void prune_unused_types_prune (dw_die_ref);
4320 static void prune_unused_types (void);
4321 static int maybe_emit_file (struct dwarf_file_data *fd);
4322
4323 /* Section names used to hold DWARF debugging information. */
4324 #ifndef DEBUG_INFO_SECTION
4325 #define DEBUG_INFO_SECTION ".debug_info"
4326 #endif
4327 #ifndef DEBUG_ABBREV_SECTION
4328 #define DEBUG_ABBREV_SECTION ".debug_abbrev"
4329 #endif
4330 #ifndef DEBUG_ARANGES_SECTION
4331 #define DEBUG_ARANGES_SECTION ".debug_aranges"
4332 #endif
4333 #ifndef DEBUG_MACINFO_SECTION
4334 #define DEBUG_MACINFO_SECTION ".debug_macinfo"
4335 #endif
4336 #ifndef DEBUG_LINE_SECTION
4337 #define DEBUG_LINE_SECTION ".debug_line"
4338 #endif
4339 #ifndef DEBUG_LOC_SECTION
4340 #define DEBUG_LOC_SECTION ".debug_loc"
4341 #endif
4342 #ifndef DEBUG_PUBNAMES_SECTION
4343 #define DEBUG_PUBNAMES_SECTION ".debug_pubnames"
4344 #endif
4345 #ifndef DEBUG_STR_SECTION
4346 #define DEBUG_STR_SECTION ".debug_str"
4347 #endif
4348 #ifndef DEBUG_RANGES_SECTION
4349 #define DEBUG_RANGES_SECTION ".debug_ranges"
4350 #endif
4351
4352 /* Standard ELF section names for compiled code and data. */
4353 #ifndef TEXT_SECTION_NAME
4354 #define TEXT_SECTION_NAME ".text"
4355 #endif
4356
4357 /* Section flags for .debug_str section. */
4358 #define DEBUG_STR_SECTION_FLAGS \
4359 (HAVE_GAS_SHF_MERGE && flag_merge_constants \
4360 ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1 \
4361 : SECTION_DEBUG)
4362
4363 /* Labels we insert at beginning sections we can reference instead of
4364 the section names themselves. */
4365
4366 #ifndef TEXT_SECTION_LABEL
4367 #define TEXT_SECTION_LABEL "Ltext"
4368 #endif
4369 #ifndef COLD_TEXT_SECTION_LABEL
4370 #define COLD_TEXT_SECTION_LABEL "Ltext_cold"
4371 #endif
4372 #ifndef DEBUG_LINE_SECTION_LABEL
4373 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
4374 #endif
4375 #ifndef DEBUG_INFO_SECTION_LABEL
4376 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
4377 #endif
4378 #ifndef DEBUG_ABBREV_SECTION_LABEL
4379 #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev"
4380 #endif
4381 #ifndef DEBUG_LOC_SECTION_LABEL
4382 #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc"
4383 #endif
4384 #ifndef DEBUG_RANGES_SECTION_LABEL
4385 #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges"
4386 #endif
4387 #ifndef DEBUG_MACINFO_SECTION_LABEL
4388 #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo"
4389 #endif
4390
4391 /* Definitions of defaults for formats and names of various special
4392 (artificial) labels which may be generated within this file (when the -g
4393 options is used and DWARF2_DEBUGGING_INFO is in effect.
4394 If necessary, these may be overridden from within the tm.h file, but
4395 typically, overriding these defaults is unnecessary. */
4396
4397 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
4398 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4399 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4400 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
4401 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4402 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4403 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4404 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4405 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4406 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
4407
4408 #ifndef TEXT_END_LABEL
4409 #define TEXT_END_LABEL "Letext"
4410 #endif
4411 #ifndef COLD_END_LABEL
4412 #define COLD_END_LABEL "Letext_cold"
4413 #endif
4414 #ifndef BLOCK_BEGIN_LABEL
4415 #define BLOCK_BEGIN_LABEL "LBB"
4416 #endif
4417 #ifndef BLOCK_END_LABEL
4418 #define BLOCK_END_LABEL "LBE"
4419 #endif
4420 #ifndef LINE_CODE_LABEL
4421 #define LINE_CODE_LABEL "LM"
4422 #endif
4423 #ifndef SEPARATE_LINE_CODE_LABEL
4424 #define SEPARATE_LINE_CODE_LABEL "LSM"
4425 #endif
4426
4427 \f
4428 /* We allow a language front-end to designate a function that is to be
4429 called to "demangle" any name before it is put into a DIE. */
4430
4431 static const char *(*demangle_name_func) (const char *);
4432
4433 void
4434 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
4435 {
4436 demangle_name_func = func;
4437 }
4438
4439 /* Test if rtl node points to a pseudo register. */
4440
4441 static inline int
4442 is_pseudo_reg (const_rtx rtl)
4443 {
4444 return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
4445 || (GET_CODE (rtl) == SUBREG
4446 && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
4447 }
4448
4449 /* Return a reference to a type, with its const and volatile qualifiers
4450 removed. */
4451
4452 static inline tree
4453 type_main_variant (tree type)
4454 {
4455 type = TYPE_MAIN_VARIANT (type);
4456
4457 /* ??? There really should be only one main variant among any group of
4458 variants of a given type (and all of the MAIN_VARIANT values for all
4459 members of the group should point to that one type) but sometimes the C
4460 front-end messes this up for array types, so we work around that bug
4461 here. */
4462 if (TREE_CODE (type) == ARRAY_TYPE)
4463 while (type != TYPE_MAIN_VARIANT (type))
4464 type = TYPE_MAIN_VARIANT (type);
4465
4466 return type;
4467 }
4468
4469 /* Return nonzero if the given type node represents a tagged type. */
4470
4471 static inline int
4472 is_tagged_type (const_tree type)
4473 {
4474 enum tree_code code = TREE_CODE (type);
4475
4476 return (code == RECORD_TYPE || code == UNION_TYPE
4477 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
4478 }
4479
4480 /* Convert a DIE tag into its string name. */
4481
4482 static const char *
4483 dwarf_tag_name (unsigned int tag)
4484 {
4485 switch (tag)
4486 {
4487 case DW_TAG_padding:
4488 return "DW_TAG_padding";
4489 case DW_TAG_array_type:
4490 return "DW_TAG_array_type";
4491 case DW_TAG_class_type:
4492 return "DW_TAG_class_type";
4493 case DW_TAG_entry_point:
4494 return "DW_TAG_entry_point";
4495 case DW_TAG_enumeration_type:
4496 return "DW_TAG_enumeration_type";
4497 case DW_TAG_formal_parameter:
4498 return "DW_TAG_formal_parameter";
4499 case DW_TAG_imported_declaration:
4500 return "DW_TAG_imported_declaration";
4501 case DW_TAG_label:
4502 return "DW_TAG_label";
4503 case DW_TAG_lexical_block:
4504 return "DW_TAG_lexical_block";
4505 case DW_TAG_member:
4506 return "DW_TAG_member";
4507 case DW_TAG_pointer_type:
4508 return "DW_TAG_pointer_type";
4509 case DW_TAG_reference_type:
4510 return "DW_TAG_reference_type";
4511 case DW_TAG_compile_unit:
4512 return "DW_TAG_compile_unit";
4513 case DW_TAG_string_type:
4514 return "DW_TAG_string_type";
4515 case DW_TAG_structure_type:
4516 return "DW_TAG_structure_type";
4517 case DW_TAG_subroutine_type:
4518 return "DW_TAG_subroutine_type";
4519 case DW_TAG_typedef:
4520 return "DW_TAG_typedef";
4521 case DW_TAG_union_type:
4522 return "DW_TAG_union_type";
4523 case DW_TAG_unspecified_parameters:
4524 return "DW_TAG_unspecified_parameters";
4525 case DW_TAG_variant:
4526 return "DW_TAG_variant";
4527 case DW_TAG_common_block:
4528 return "DW_TAG_common_block";
4529 case DW_TAG_common_inclusion:
4530 return "DW_TAG_common_inclusion";
4531 case DW_TAG_inheritance:
4532 return "DW_TAG_inheritance";
4533 case DW_TAG_inlined_subroutine:
4534 return "DW_TAG_inlined_subroutine";
4535 case DW_TAG_module:
4536 return "DW_TAG_module";
4537 case DW_TAG_ptr_to_member_type:
4538 return "DW_TAG_ptr_to_member_type";
4539 case DW_TAG_set_type:
4540 return "DW_TAG_set_type";
4541 case DW_TAG_subrange_type:
4542 return "DW_TAG_subrange_type";
4543 case DW_TAG_with_stmt:
4544 return "DW_TAG_with_stmt";
4545 case DW_TAG_access_declaration:
4546 return "DW_TAG_access_declaration";
4547 case DW_TAG_base_type:
4548 return "DW_TAG_base_type";
4549 case DW_TAG_catch_block:
4550 return "DW_TAG_catch_block";
4551 case DW_TAG_const_type:
4552 return "DW_TAG_const_type";
4553 case DW_TAG_constant:
4554 return "DW_TAG_constant";
4555 case DW_TAG_enumerator:
4556 return "DW_TAG_enumerator";
4557 case DW_TAG_file_type:
4558 return "DW_TAG_file_type";
4559 case DW_TAG_friend:
4560 return "DW_TAG_friend";
4561 case DW_TAG_namelist:
4562 return "DW_TAG_namelist";
4563 case DW_TAG_namelist_item:
4564 return "DW_TAG_namelist_item";
4565 case DW_TAG_namespace:
4566 return "DW_TAG_namespace";
4567 case DW_TAG_packed_type:
4568 return "DW_TAG_packed_type";
4569 case DW_TAG_subprogram:
4570 return "DW_TAG_subprogram";
4571 case DW_TAG_template_type_param:
4572 return "DW_TAG_template_type_param";
4573 case DW_TAG_template_value_param:
4574 return "DW_TAG_template_value_param";
4575 case DW_TAG_thrown_type:
4576 return "DW_TAG_thrown_type";
4577 case DW_TAG_try_block:
4578 return "DW_TAG_try_block";
4579 case DW_TAG_variant_part:
4580 return "DW_TAG_variant_part";
4581 case DW_TAG_variable:
4582 return "DW_TAG_variable";
4583 case DW_TAG_volatile_type:
4584 return "DW_TAG_volatile_type";
4585 case DW_TAG_imported_module:
4586 return "DW_TAG_imported_module";
4587 case DW_TAG_MIPS_loop:
4588 return "DW_TAG_MIPS_loop";
4589 case DW_TAG_format_label:
4590 return "DW_TAG_format_label";
4591 case DW_TAG_function_template:
4592 return "DW_TAG_function_template";
4593 case DW_TAG_class_template:
4594 return "DW_TAG_class_template";
4595 case DW_TAG_GNU_BINCL:
4596 return "DW_TAG_GNU_BINCL";
4597 case DW_TAG_GNU_EINCL:
4598 return "DW_TAG_GNU_EINCL";
4599 default:
4600 return "DW_TAG_<unknown>";
4601 }
4602 }
4603
4604 /* Convert a DWARF attribute code into its string name. */
4605
4606 static const char *
4607 dwarf_attr_name (unsigned int attr)
4608 {
4609 switch (attr)
4610 {
4611 case DW_AT_sibling:
4612 return "DW_AT_sibling";
4613 case DW_AT_location:
4614 return "DW_AT_location";
4615 case DW_AT_name:
4616 return "DW_AT_name";
4617 case DW_AT_ordering:
4618 return "DW_AT_ordering";
4619 case DW_AT_subscr_data:
4620 return "DW_AT_subscr_data";
4621 case DW_AT_byte_size:
4622 return "DW_AT_byte_size";
4623 case DW_AT_bit_offset:
4624 return "DW_AT_bit_offset";
4625 case DW_AT_bit_size:
4626 return "DW_AT_bit_size";
4627 case DW_AT_element_list:
4628 return "DW_AT_element_list";
4629 case DW_AT_stmt_list:
4630 return "DW_AT_stmt_list";
4631 case DW_AT_low_pc:
4632 return "DW_AT_low_pc";
4633 case DW_AT_high_pc:
4634 return "DW_AT_high_pc";
4635 case DW_AT_language:
4636 return "DW_AT_language";
4637 case DW_AT_member:
4638 return "DW_AT_member";
4639 case DW_AT_discr:
4640 return "DW_AT_discr";
4641 case DW_AT_discr_value:
4642 return "DW_AT_discr_value";
4643 case DW_AT_visibility:
4644 return "DW_AT_visibility";
4645 case DW_AT_import:
4646 return "DW_AT_import";
4647 case DW_AT_string_length:
4648 return "DW_AT_string_length";
4649 case DW_AT_common_reference:
4650 return "DW_AT_common_reference";
4651 case DW_AT_comp_dir:
4652 return "DW_AT_comp_dir";
4653 case DW_AT_const_value:
4654 return "DW_AT_const_value";
4655 case DW_AT_containing_type:
4656 return "DW_AT_containing_type";
4657 case DW_AT_default_value:
4658 return "DW_AT_default_value";
4659 case DW_AT_inline:
4660 return "DW_AT_inline";
4661 case DW_AT_is_optional:
4662 return "DW_AT_is_optional";
4663 case DW_AT_lower_bound:
4664 return "DW_AT_lower_bound";
4665 case DW_AT_producer:
4666 return "DW_AT_producer";
4667 case DW_AT_prototyped:
4668 return "DW_AT_prototyped";
4669 case DW_AT_return_addr:
4670 return "DW_AT_return_addr";
4671 case DW_AT_start_scope:
4672 return "DW_AT_start_scope";
4673 case DW_AT_bit_stride:
4674 return "DW_AT_bit_stride";
4675 case DW_AT_upper_bound:
4676 return "DW_AT_upper_bound";
4677 case DW_AT_abstract_origin:
4678 return "DW_AT_abstract_origin";
4679 case DW_AT_accessibility:
4680 return "DW_AT_accessibility";
4681 case DW_AT_address_class:
4682 return "DW_AT_address_class";
4683 case DW_AT_artificial:
4684 return "DW_AT_artificial";
4685 case DW_AT_base_types:
4686 return "DW_AT_base_types";
4687 case DW_AT_calling_convention:
4688 return "DW_AT_calling_convention";
4689 case DW_AT_count:
4690 return "DW_AT_count";
4691 case DW_AT_data_member_location:
4692 return "DW_AT_data_member_location";
4693 case DW_AT_decl_column:
4694 return "DW_AT_decl_column";
4695 case DW_AT_decl_file:
4696 return "DW_AT_decl_file";
4697 case DW_AT_decl_line:
4698 return "DW_AT_decl_line";
4699 case DW_AT_declaration:
4700 return "DW_AT_declaration";
4701 case DW_AT_discr_list:
4702 return "DW_AT_discr_list";
4703 case DW_AT_encoding:
4704 return "DW_AT_encoding";
4705 case DW_AT_external:
4706 return "DW_AT_external";
4707 case DW_AT_frame_base:
4708 return "DW_AT_frame_base";
4709 case DW_AT_friend:
4710 return "DW_AT_friend";
4711 case DW_AT_identifier_case:
4712 return "DW_AT_identifier_case";
4713 case DW_AT_macro_info:
4714 return "DW_AT_macro_info";
4715 case DW_AT_namelist_items:
4716 return "DW_AT_namelist_items";
4717 case DW_AT_priority:
4718 return "DW_AT_priority";
4719 case DW_AT_segment:
4720 return "DW_AT_segment";
4721 case DW_AT_specification:
4722 return "DW_AT_specification";
4723 case DW_AT_static_link:
4724 return "DW_AT_static_link";
4725 case DW_AT_type:
4726 return "DW_AT_type";
4727 case DW_AT_use_location:
4728 return "DW_AT_use_location";
4729 case DW_AT_variable_parameter:
4730 return "DW_AT_variable_parameter";
4731 case DW_AT_virtuality:
4732 return "DW_AT_virtuality";
4733 case DW_AT_vtable_elem_location:
4734 return "DW_AT_vtable_elem_location";
4735
4736 case DW_AT_allocated:
4737 return "DW_AT_allocated";
4738 case DW_AT_associated:
4739 return "DW_AT_associated";
4740 case DW_AT_data_location:
4741 return "DW_AT_data_location";
4742 case DW_AT_byte_stride:
4743 return "DW_AT_byte_stride";
4744 case DW_AT_entry_pc:
4745 return "DW_AT_entry_pc";
4746 case DW_AT_use_UTF8:
4747 return "DW_AT_use_UTF8";
4748 case DW_AT_extension:
4749 return "DW_AT_extension";
4750 case DW_AT_ranges:
4751 return "DW_AT_ranges";
4752 case DW_AT_trampoline:
4753 return "DW_AT_trampoline";
4754 case DW_AT_call_column:
4755 return "DW_AT_call_column";
4756 case DW_AT_call_file:
4757 return "DW_AT_call_file";
4758 case DW_AT_call_line:
4759 return "DW_AT_call_line";
4760
4761 case DW_AT_MIPS_fde:
4762 return "DW_AT_MIPS_fde";
4763 case DW_AT_MIPS_loop_begin:
4764 return "DW_AT_MIPS_loop_begin";
4765 case DW_AT_MIPS_tail_loop_begin:
4766 return "DW_AT_MIPS_tail_loop_begin";
4767 case DW_AT_MIPS_epilog_begin:
4768 return "DW_AT_MIPS_epilog_begin";
4769 case DW_AT_MIPS_loop_unroll_factor:
4770 return "DW_AT_MIPS_loop_unroll_factor";
4771 case DW_AT_MIPS_software_pipeline_depth:
4772 return "DW_AT_MIPS_software_pipeline_depth";
4773 case DW_AT_MIPS_linkage_name:
4774 return "DW_AT_MIPS_linkage_name";
4775 case DW_AT_MIPS_stride:
4776 return "DW_AT_MIPS_stride";
4777 case DW_AT_MIPS_abstract_name:
4778 return "DW_AT_MIPS_abstract_name";
4779 case DW_AT_MIPS_clone_origin:
4780 return "DW_AT_MIPS_clone_origin";
4781 case DW_AT_MIPS_has_inlines:
4782 return "DW_AT_MIPS_has_inlines";
4783
4784 case DW_AT_sf_names:
4785 return "DW_AT_sf_names";
4786 case DW_AT_src_info:
4787 return "DW_AT_src_info";
4788 case DW_AT_mac_info:
4789 return "DW_AT_mac_info";
4790 case DW_AT_src_coords:
4791 return "DW_AT_src_coords";
4792 case DW_AT_body_begin:
4793 return "DW_AT_body_begin";
4794 case DW_AT_body_end:
4795 return "DW_AT_body_end";
4796 case DW_AT_GNU_vector:
4797 return "DW_AT_GNU_vector";
4798
4799 case DW_AT_VMS_rtnbeg_pd_address:
4800 return "DW_AT_VMS_rtnbeg_pd_address";
4801
4802 default:
4803 return "DW_AT_<unknown>";
4804 }
4805 }
4806
4807 /* Convert a DWARF value form code into its string name. */
4808
4809 static const char *
4810 dwarf_form_name (unsigned int form)
4811 {
4812 switch (form)
4813 {
4814 case DW_FORM_addr:
4815 return "DW_FORM_addr";
4816 case DW_FORM_block2:
4817 return "DW_FORM_block2";
4818 case DW_FORM_block4:
4819 return "DW_FORM_block4";
4820 case DW_FORM_data2:
4821 return "DW_FORM_data2";
4822 case DW_FORM_data4:
4823 return "DW_FORM_data4";
4824 case DW_FORM_data8:
4825 return "DW_FORM_data8";
4826 case DW_FORM_string:
4827 return "DW_FORM_string";
4828 case DW_FORM_block:
4829 return "DW_FORM_block";
4830 case DW_FORM_block1:
4831 return "DW_FORM_block1";
4832 case DW_FORM_data1:
4833 return "DW_FORM_data1";
4834 case DW_FORM_flag:
4835 return "DW_FORM_flag";
4836 case DW_FORM_sdata:
4837 return "DW_FORM_sdata";
4838 case DW_FORM_strp:
4839 return "DW_FORM_strp";
4840 case DW_FORM_udata:
4841 return "DW_FORM_udata";
4842 case DW_FORM_ref_addr:
4843 return "DW_FORM_ref_addr";
4844 case DW_FORM_ref1:
4845 return "DW_FORM_ref1";
4846 case DW_FORM_ref2:
4847 return "DW_FORM_ref2";
4848 case DW_FORM_ref4:
4849 return "DW_FORM_ref4";
4850 case DW_FORM_ref8:
4851 return "DW_FORM_ref8";
4852 case DW_FORM_ref_udata:
4853 return "DW_FORM_ref_udata";
4854 case DW_FORM_indirect:
4855 return "DW_FORM_indirect";
4856 default:
4857 return "DW_FORM_<unknown>";
4858 }
4859 }
4860 \f
4861 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
4862 instance of an inlined instance of a decl which is local to an inline
4863 function, so we have to trace all of the way back through the origin chain
4864 to find out what sort of node actually served as the original seed for the
4865 given block. */
4866
4867 static tree
4868 decl_ultimate_origin (const_tree decl)
4869 {
4870 if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
4871 return NULL_TREE;
4872
4873 /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4874 nodes in the function to point to themselves; ignore that if
4875 we're trying to output the abstract instance of this function. */
4876 if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4877 return NULL_TREE;
4878
4879 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4880 most distant ancestor, this should never happen. */
4881 gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
4882
4883 return DECL_ABSTRACT_ORIGIN (decl);
4884 }
4885
4886 /* Determine the "ultimate origin" of a block. The block may be an inlined
4887 instance of an inlined instance of a block which is local to an inline
4888 function, so we have to trace all of the way back through the origin chain
4889 to find out what sort of node actually served as the original seed for the
4890 given block. */
4891
4892 static tree
4893 block_ultimate_origin (const_tree block)
4894 {
4895 tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
4896
4897 /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the
4898 nodes in the function to point to themselves; ignore that if
4899 we're trying to output the abstract instance of this function. */
4900 if (BLOCK_ABSTRACT (block) && immediate_origin == block)
4901 return NULL_TREE;
4902
4903 if (immediate_origin == NULL_TREE)
4904 return NULL_TREE;
4905 else
4906 {
4907 tree ret_val;
4908 tree lookahead = immediate_origin;
4909
4910 do
4911 {
4912 ret_val = lookahead;
4913 lookahead = (TREE_CODE (ret_val) == BLOCK
4914 ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
4915 }
4916 while (lookahead != NULL && lookahead != ret_val);
4917
4918 /* The block's abstract origin chain may not be the *ultimate* origin of
4919 the block. It could lead to a DECL that has an abstract origin set.
4920 If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
4921 will give us if it has one). Note that DECL's abstract origins are
4922 supposed to be the most distant ancestor (or so decl_ultimate_origin
4923 claims), so we don't need to loop following the DECL origins. */
4924 if (DECL_P (ret_val))
4925 return DECL_ORIGIN (ret_val);
4926
4927 return ret_val;
4928 }
4929 }
4930
4931 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
4932 of a virtual function may refer to a base class, so we check the 'this'
4933 parameter. */
4934
4935 static tree
4936 decl_class_context (tree decl)
4937 {
4938 tree context = NULL_TREE;
4939
4940 if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4941 context = DECL_CONTEXT (decl);
4942 else
4943 context = TYPE_MAIN_VARIANT
4944 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4945
4946 if (context && !TYPE_P (context))
4947 context = NULL_TREE;
4948
4949 return context;
4950 }
4951 \f
4952 /* Add an attribute/value pair to a DIE. */
4953
4954 static inline void
4955 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
4956 {
4957 /* Maybe this should be an assert? */
4958 if (die == NULL)
4959 return;
4960
4961 if (die->die_attr == NULL)
4962 die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
4963 VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
4964 }
4965
4966 static inline enum dw_val_class
4967 AT_class (dw_attr_ref a)
4968 {
4969 return a->dw_attr_val.val_class;
4970 }
4971
4972 /* Add a flag value attribute to a DIE. */
4973
4974 static inline void
4975 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
4976 {
4977 dw_attr_node attr;
4978
4979 attr.dw_attr = attr_kind;
4980 attr.dw_attr_val.val_class = dw_val_class_flag;
4981 attr.dw_attr_val.v.val_flag = flag;
4982 add_dwarf_attr (die, &attr);
4983 }
4984
4985 static inline unsigned
4986 AT_flag (dw_attr_ref a)
4987 {
4988 gcc_assert (a && AT_class (a) == dw_val_class_flag);
4989 return a->dw_attr_val.v.val_flag;
4990 }
4991
4992 /* Add a signed integer attribute value to a DIE. */
4993
4994 static inline void
4995 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
4996 {
4997 dw_attr_node attr;
4998
4999 attr.dw_attr = attr_kind;
5000 attr.dw_attr_val.val_class = dw_val_class_const;
5001 attr.dw_attr_val.v.val_int = int_val;
5002 add_dwarf_attr (die, &attr);
5003 }
5004
5005 static inline HOST_WIDE_INT
5006 AT_int (dw_attr_ref a)
5007 {
5008 gcc_assert (a && AT_class (a) == dw_val_class_const);
5009 return a->dw_attr_val.v.val_int;
5010 }
5011
5012 /* Add an unsigned integer attribute value to a DIE. */
5013
5014 static inline void
5015 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
5016 unsigned HOST_WIDE_INT unsigned_val)
5017 {
5018 dw_attr_node attr;
5019
5020 attr.dw_attr = attr_kind;
5021 attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
5022 attr.dw_attr_val.v.val_unsigned = unsigned_val;
5023 add_dwarf_attr (die, &attr);
5024 }
5025
5026 static inline unsigned HOST_WIDE_INT
5027 AT_unsigned (dw_attr_ref a)
5028 {
5029 gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
5030 return a->dw_attr_val.v.val_unsigned;
5031 }
5032
5033 /* Add an unsigned double integer attribute value to a DIE. */
5034
5035 static inline void
5036 add_AT_long_long (dw_die_ref die, enum dwarf_attribute attr_kind,
5037 long unsigned int val_hi, long unsigned int val_low)
5038 {
5039 dw_attr_node attr;
5040
5041 attr.dw_attr = attr_kind;
5042 attr.dw_attr_val.val_class = dw_val_class_long_long;
5043 attr.dw_attr_val.v.val_long_long.hi = val_hi;
5044 attr.dw_attr_val.v.val_long_long.low = val_low;
5045 add_dwarf_attr (die, &attr);
5046 }
5047
5048 /* Add a floating point attribute value to a DIE and return it. */
5049
5050 static inline void
5051 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
5052 unsigned int length, unsigned int elt_size, unsigned char *array)
5053 {
5054 dw_attr_node attr;
5055
5056 attr.dw_attr = attr_kind;
5057 attr.dw_attr_val.val_class = dw_val_class_vec;
5058 attr.dw_attr_val.v.val_vec.length = length;
5059 attr.dw_attr_val.v.val_vec.elt_size = elt_size;
5060 attr.dw_attr_val.v.val_vec.array = array;
5061 add_dwarf_attr (die, &attr);
5062 }
5063
5064 /* Hash and equality functions for debug_str_hash. */
5065
5066 static hashval_t
5067 debug_str_do_hash (const void *x)
5068 {
5069 return htab_hash_string (((const struct indirect_string_node *)x)->str);
5070 }
5071
5072 static int
5073 debug_str_eq (const void *x1, const void *x2)
5074 {
5075 return strcmp ((((const struct indirect_string_node *)x1)->str),
5076 (const char *)x2) == 0;
5077 }
5078
5079 /* Add a string attribute value to a DIE. */
5080
5081 static inline void
5082 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
5083 {
5084 dw_attr_node attr;
5085 struct indirect_string_node *node;
5086 void **slot;
5087
5088 if (! debug_str_hash)
5089 debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
5090 debug_str_eq, NULL);
5091
5092 slot = htab_find_slot_with_hash (debug_str_hash, str,
5093 htab_hash_string (str), INSERT);
5094 if (*slot == NULL)
5095 {
5096 node = (struct indirect_string_node *)
5097 ggc_alloc_cleared (sizeof (struct indirect_string_node));
5098 node->str = ggc_strdup (str);
5099 *slot = node;
5100 }
5101 else
5102 node = (struct indirect_string_node *) *slot;
5103
5104 node->refcount++;
5105
5106 attr.dw_attr = attr_kind;
5107 attr.dw_attr_val.val_class = dw_val_class_str;
5108 attr.dw_attr_val.v.val_str = node;
5109 add_dwarf_attr (die, &attr);
5110 }
5111
5112 static inline const char *
5113 AT_string (dw_attr_ref a)
5114 {
5115 gcc_assert (a && AT_class (a) == dw_val_class_str);
5116 return a->dw_attr_val.v.val_str->str;
5117 }
5118
5119 /* Find out whether a string should be output inline in DIE
5120 or out-of-line in .debug_str section. */
5121
5122 static int
5123 AT_string_form (dw_attr_ref a)
5124 {
5125 struct indirect_string_node *node;
5126 unsigned int len;
5127 char label[32];
5128
5129 gcc_assert (a && AT_class (a) == dw_val_class_str);
5130
5131 node = a->dw_attr_val.v.val_str;
5132 if (node->form)
5133 return node->form;
5134
5135 len = strlen (node->str) + 1;
5136
5137 /* If the string is shorter or equal to the size of the reference, it is
5138 always better to put it inline. */
5139 if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
5140 return node->form = DW_FORM_string;
5141
5142 /* If we cannot expect the linker to merge strings in .debug_str
5143 section, only put it into .debug_str if it is worth even in this
5144 single module. */
5145 if ((debug_str_section->common.flags & SECTION_MERGE) == 0
5146 && (len - DWARF_OFFSET_SIZE) * node->refcount <= len)
5147 return node->form = DW_FORM_string;
5148
5149 ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
5150 ++dw2_string_counter;
5151 node->label = xstrdup (label);
5152
5153 return node->form = DW_FORM_strp;
5154 }
5155
5156 /* Add a DIE reference attribute value to a DIE. */
5157
5158 static inline void
5159 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
5160 {
5161 dw_attr_node attr;
5162
5163 attr.dw_attr = attr_kind;
5164 attr.dw_attr_val.val_class = dw_val_class_die_ref;
5165 attr.dw_attr_val.v.val_die_ref.die = targ_die;
5166 attr.dw_attr_val.v.val_die_ref.external = 0;
5167 add_dwarf_attr (die, &attr);
5168 }
5169
5170 /* Add an AT_specification attribute to a DIE, and also make the back
5171 pointer from the specification to the definition. */
5172
5173 static inline void
5174 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
5175 {
5176 add_AT_die_ref (die, DW_AT_specification, targ_die);
5177 gcc_assert (!targ_die->die_definition);
5178 targ_die->die_definition = die;
5179 }
5180
5181 static inline dw_die_ref
5182 AT_ref (dw_attr_ref a)
5183 {
5184 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
5185 return a->dw_attr_val.v.val_die_ref.die;
5186 }
5187
5188 static inline int
5189 AT_ref_external (dw_attr_ref a)
5190 {
5191 if (a && AT_class (a) == dw_val_class_die_ref)
5192 return a->dw_attr_val.v.val_die_ref.external;
5193
5194 return 0;
5195 }
5196
5197 static inline void
5198 set_AT_ref_external (dw_attr_ref a, int i)
5199 {
5200 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
5201 a->dw_attr_val.v.val_die_ref.external = i;
5202 }
5203
5204 /* Add an FDE reference attribute value to a DIE. */
5205
5206 static inline void
5207 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
5208 {
5209 dw_attr_node attr;
5210
5211 attr.dw_attr = attr_kind;
5212 attr.dw_attr_val.val_class = dw_val_class_fde_ref;
5213 attr.dw_attr_val.v.val_fde_index = targ_fde;
5214 add_dwarf_attr (die, &attr);
5215 }
5216
5217 /* Add a location description attribute value to a DIE. */
5218
5219 static inline void
5220 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
5221 {
5222 dw_attr_node attr;
5223
5224 attr.dw_attr = attr_kind;
5225 attr.dw_attr_val.val_class = dw_val_class_loc;
5226 attr.dw_attr_val.v.val_loc = loc;
5227 add_dwarf_attr (die, &attr);
5228 }
5229
5230 static inline dw_loc_descr_ref
5231 AT_loc (dw_attr_ref a)
5232 {
5233 gcc_assert (a && AT_class (a) == dw_val_class_loc);
5234 return a->dw_attr_val.v.val_loc;
5235 }
5236
5237 static inline void
5238 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
5239 {
5240 dw_attr_node attr;
5241
5242 attr.dw_attr = attr_kind;
5243 attr.dw_attr_val.val_class = dw_val_class_loc_list;
5244 attr.dw_attr_val.v.val_loc_list = loc_list;
5245 add_dwarf_attr (die, &attr);
5246 have_location_lists = true;
5247 }
5248
5249 static inline dw_loc_list_ref
5250 AT_loc_list (dw_attr_ref a)
5251 {
5252 gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
5253 return a->dw_attr_val.v.val_loc_list;
5254 }
5255
5256 /* Add an address constant attribute value to a DIE. */
5257
5258 static inline void
5259 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
5260 {
5261 dw_attr_node attr;
5262
5263 attr.dw_attr = attr_kind;
5264 attr.dw_attr_val.val_class = dw_val_class_addr;
5265 attr.dw_attr_val.v.val_addr = addr;
5266 add_dwarf_attr (die, &attr);
5267 }
5268
5269 /* Get the RTX from to an address DIE attribute. */
5270
5271 static inline rtx
5272 AT_addr (dw_attr_ref a)
5273 {
5274 gcc_assert (a && AT_class (a) == dw_val_class_addr);
5275 return a->dw_attr_val.v.val_addr;
5276 }
5277
5278 /* Add a file attribute value to a DIE. */
5279
5280 static inline void
5281 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
5282 struct dwarf_file_data *fd)
5283 {
5284 dw_attr_node attr;
5285
5286 attr.dw_attr = attr_kind;
5287 attr.dw_attr_val.val_class = dw_val_class_file;
5288 attr.dw_attr_val.v.val_file = fd;
5289 add_dwarf_attr (die, &attr);
5290 }
5291
5292 /* Get the dwarf_file_data from a file DIE attribute. */
5293
5294 static inline struct dwarf_file_data *
5295 AT_file (dw_attr_ref a)
5296 {
5297 gcc_assert (a && AT_class (a) == dw_val_class_file);
5298 return a->dw_attr_val.v.val_file;
5299 }
5300
5301 /* Add a label identifier attribute value to a DIE. */
5302
5303 static inline void
5304 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
5305 {
5306 dw_attr_node attr;
5307
5308 attr.dw_attr = attr_kind;
5309 attr.dw_attr_val.val_class = dw_val_class_lbl_id;
5310 attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
5311 add_dwarf_attr (die, &attr);
5312 }
5313
5314 /* Add a section offset attribute value to a DIE, an offset into the
5315 debug_line section. */
5316
5317 static inline void
5318 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
5319 const char *label)
5320 {
5321 dw_attr_node attr;
5322
5323 attr.dw_attr = attr_kind;
5324 attr.dw_attr_val.val_class = dw_val_class_lineptr;
5325 attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
5326 add_dwarf_attr (die, &attr);
5327 }
5328
5329 /* Add a section offset attribute value to a DIE, an offset into the
5330 debug_macinfo section. */
5331
5332 static inline void
5333 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
5334 const char *label)
5335 {
5336 dw_attr_node attr;
5337
5338 attr.dw_attr = attr_kind;
5339 attr.dw_attr_val.val_class = dw_val_class_macptr;
5340 attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
5341 add_dwarf_attr (die, &attr);
5342 }
5343
5344 /* Add an offset attribute value to a DIE. */
5345
5346 static inline void
5347 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
5348 unsigned HOST_WIDE_INT offset)
5349 {
5350 dw_attr_node attr;
5351
5352 attr.dw_attr = attr_kind;
5353 attr.dw_attr_val.val_class = dw_val_class_offset;
5354 attr.dw_attr_val.v.val_offset = offset;
5355 add_dwarf_attr (die, &attr);
5356 }
5357
5358 /* Add an range_list attribute value to a DIE. */
5359
5360 static void
5361 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
5362 long unsigned int offset)
5363 {
5364 dw_attr_node attr;
5365
5366 attr.dw_attr = attr_kind;
5367 attr.dw_attr_val.val_class = dw_val_class_range_list;
5368 attr.dw_attr_val.v.val_offset = offset;
5369 add_dwarf_attr (die, &attr);
5370 }
5371
5372 static inline const char *
5373 AT_lbl (dw_attr_ref a)
5374 {
5375 gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
5376 || AT_class (a) == dw_val_class_lineptr
5377 || AT_class (a) == dw_val_class_macptr));
5378 return a->dw_attr_val.v.val_lbl_id;
5379 }
5380
5381 /* Get the attribute of type attr_kind. */
5382
5383 static dw_attr_ref
5384 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5385 {
5386 dw_attr_ref a;
5387 unsigned ix;
5388 dw_die_ref spec = NULL;
5389
5390 if (! die)
5391 return NULL;
5392
5393 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
5394 if (a->dw_attr == attr_kind)
5395 return a;
5396 else if (a->dw_attr == DW_AT_specification
5397 || a->dw_attr == DW_AT_abstract_origin)
5398 spec = AT_ref (a);
5399
5400 if (spec)
5401 return get_AT (spec, attr_kind);
5402
5403 return NULL;
5404 }
5405
5406 /* Return the "low pc" attribute value, typically associated with a subprogram
5407 DIE. Return null if the "low pc" attribute is either not present, or if it
5408 cannot be represented as an assembler label identifier. */
5409
5410 static inline const char *
5411 get_AT_low_pc (dw_die_ref die)
5412 {
5413 dw_attr_ref a = get_AT (die, DW_AT_low_pc);
5414
5415 return a ? AT_lbl (a) : NULL;
5416 }
5417
5418 /* Return the "high pc" attribute value, typically associated with a subprogram
5419 DIE. Return null if the "high pc" attribute is either not present, or if it
5420 cannot be represented as an assembler label identifier. */
5421
5422 static inline const char *
5423 get_AT_hi_pc (dw_die_ref die)
5424 {
5425 dw_attr_ref a = get_AT (die, DW_AT_high_pc);
5426
5427 return a ? AT_lbl (a) : NULL;
5428 }
5429
5430 /* Return the value of the string attribute designated by ATTR_KIND, or
5431 NULL if it is not present. */
5432
5433 static inline const char *
5434 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
5435 {
5436 dw_attr_ref a = get_AT (die, attr_kind);
5437
5438 return a ? AT_string (a) : NULL;
5439 }
5440
5441 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
5442 if it is not present. */
5443
5444 static inline int
5445 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
5446 {
5447 dw_attr_ref a = get_AT (die, attr_kind);
5448
5449 return a ? AT_flag (a) : 0;
5450 }
5451
5452 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
5453 if it is not present. */
5454
5455 static inline unsigned
5456 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
5457 {
5458 dw_attr_ref a = get_AT (die, attr_kind);
5459
5460 return a ? AT_unsigned (a) : 0;
5461 }
5462
5463 static inline dw_die_ref
5464 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
5465 {
5466 dw_attr_ref a = get_AT (die, attr_kind);
5467
5468 return a ? AT_ref (a) : NULL;
5469 }
5470
5471 static inline struct dwarf_file_data *
5472 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
5473 {
5474 dw_attr_ref a = get_AT (die, attr_kind);
5475
5476 return a ? AT_file (a) : NULL;
5477 }
5478
5479 /* Return TRUE if the language is C or C++. */
5480
5481 static inline bool
5482 is_c_family (void)
5483 {
5484 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5485
5486 return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_ObjC
5487 || lang == DW_LANG_C99
5488 || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus);
5489 }
5490
5491 /* Return TRUE if the language is C++. */
5492
5493 static inline bool
5494 is_cxx (void)
5495 {
5496 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5497
5498 return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
5499 }
5500
5501 /* Return TRUE if the language is Fortran. */
5502
5503 static inline bool
5504 is_fortran (void)
5505 {
5506 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5507
5508 return (lang == DW_LANG_Fortran77
5509 || lang == DW_LANG_Fortran90
5510 || lang == DW_LANG_Fortran95);
5511 }
5512
5513 /* Return TRUE if the language is Java. */
5514
5515 static inline bool
5516 is_java (void)
5517 {
5518 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5519
5520 return lang == DW_LANG_Java;
5521 }
5522
5523 /* Return TRUE if the language is Ada. */
5524
5525 static inline bool
5526 is_ada (void)
5527 {
5528 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5529
5530 return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
5531 }
5532
5533 /* Remove the specified attribute if present. */
5534
5535 static void
5536 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5537 {
5538 dw_attr_ref a;
5539 unsigned ix;
5540
5541 if (! die)
5542 return;
5543
5544 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
5545 if (a->dw_attr == attr_kind)
5546 {
5547 if (AT_class (a) == dw_val_class_str)
5548 if (a->dw_attr_val.v.val_str->refcount)
5549 a->dw_attr_val.v.val_str->refcount--;
5550
5551 /* VEC_ordered_remove should help reduce the number of abbrevs
5552 that are needed. */
5553 VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
5554 return;
5555 }
5556 }
5557
5558 /* Remove CHILD from its parent. PREV must have the property that
5559 PREV->DIE_SIB == CHILD. Does not alter CHILD. */
5560
5561 static void
5562 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
5563 {
5564 gcc_assert (child->die_parent == prev->die_parent);
5565 gcc_assert (prev->die_sib == child);
5566 if (prev == child)
5567 {
5568 gcc_assert (child->die_parent->die_child == child);
5569 prev = NULL;
5570 }
5571 else
5572 prev->die_sib = child->die_sib;
5573 if (child->die_parent->die_child == child)
5574 child->die_parent->die_child = prev;
5575 }
5576
5577 /* Remove child DIE whose die_tag is TAG. Do nothing if no child
5578 matches TAG. */
5579
5580 static void
5581 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
5582 {
5583 dw_die_ref c;
5584
5585 c = die->die_child;
5586 if (c) do {
5587 dw_die_ref prev = c;
5588 c = c->die_sib;
5589 while (c->die_tag == tag)
5590 {
5591 remove_child_with_prev (c, prev);
5592 /* Might have removed every child. */
5593 if (c == c->die_sib)
5594 return;
5595 c = c->die_sib;
5596 }
5597 } while (c != die->die_child);
5598 }
5599
5600 /* Add a CHILD_DIE as the last child of DIE. */
5601
5602 static void
5603 add_child_die (dw_die_ref die, dw_die_ref child_die)
5604 {
5605 /* FIXME this should probably be an assert. */
5606 if (! die || ! child_die)
5607 return;
5608 gcc_assert (die != child_die);
5609
5610 child_die->die_parent = die;
5611 if (die->die_child)
5612 {
5613 child_die->die_sib = die->die_child->die_sib;
5614 die->die_child->die_sib = child_die;
5615 }
5616 else
5617 child_die->die_sib = child_die;
5618 die->die_child = child_die;
5619 }
5620
5621 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
5622 is the specification, to the end of PARENT's list of children.
5623 This is done by removing and re-adding it. */
5624
5625 static void
5626 splice_child_die (dw_die_ref parent, dw_die_ref child)
5627 {
5628 dw_die_ref p;
5629
5630 /* We want the declaration DIE from inside the class, not the
5631 specification DIE at toplevel. */
5632 if (child->die_parent != parent)
5633 {
5634 dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5635
5636 if (tmp)
5637 child = tmp;
5638 }
5639
5640 gcc_assert (child->die_parent == parent
5641 || (child->die_parent
5642 == get_AT_ref (parent, DW_AT_specification)));
5643
5644 for (p = child->die_parent->die_child; ; p = p->die_sib)
5645 if (p->die_sib == child)
5646 {
5647 remove_child_with_prev (child, p);
5648 break;
5649 }
5650
5651 add_child_die (parent, child);
5652 }
5653
5654 /* Return a pointer to a newly created DIE node. */
5655
5656 static inline dw_die_ref
5657 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5658 {
5659 dw_die_ref die = ggc_alloc_cleared (sizeof (die_node));
5660
5661 die->die_tag = tag_value;
5662
5663 if (parent_die != NULL)
5664 add_child_die (parent_die, die);
5665 else
5666 {
5667 limbo_die_node *limbo_node;
5668
5669 limbo_node = ggc_alloc_cleared (sizeof (limbo_die_node));
5670 limbo_node->die = die;
5671 limbo_node->created_for = t;
5672 limbo_node->next = limbo_die_list;
5673 limbo_die_list = limbo_node;
5674 }
5675
5676 return die;
5677 }
5678
5679 /* Return the DIE associated with the given type specifier. */
5680
5681 static inline dw_die_ref
5682 lookup_type_die (tree type)
5683 {
5684 return TYPE_SYMTAB_DIE (type);
5685 }
5686
5687 /* Equate a DIE to a given type specifier. */
5688
5689 static inline void
5690 equate_type_number_to_die (tree type, dw_die_ref type_die)
5691 {
5692 TYPE_SYMTAB_DIE (type) = type_die;
5693 }
5694
5695 /* Returns a hash value for X (which really is a die_struct). */
5696
5697 static hashval_t
5698 decl_die_table_hash (const void *x)
5699 {
5700 return (hashval_t) ((const_dw_die_ref) x)->decl_id;
5701 }
5702
5703 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y. */
5704
5705 static int
5706 decl_die_table_eq (const void *x, const void *y)
5707 {
5708 return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
5709 }
5710
5711 /* Return the DIE associated with a given declaration. */
5712
5713 static inline dw_die_ref
5714 lookup_decl_die (tree decl)
5715 {
5716 return htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
5717 }
5718
5719 /* Returns a hash value for X (which really is a var_loc_list). */
5720
5721 static hashval_t
5722 decl_loc_table_hash (const void *x)
5723 {
5724 return (hashval_t) ((const var_loc_list *) x)->decl_id;
5725 }
5726
5727 /* Return nonzero if decl_id of var_loc_list X is the same as
5728 UID of decl *Y. */
5729
5730 static int
5731 decl_loc_table_eq (const void *x, const void *y)
5732 {
5733 return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
5734 }
5735
5736 /* Return the var_loc list associated with a given declaration. */
5737
5738 static inline var_loc_list *
5739 lookup_decl_loc (const_tree decl)
5740 {
5741 return htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
5742 }
5743
5744 /* Equate a DIE to a particular declaration. */
5745
5746 static void
5747 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5748 {
5749 unsigned int decl_id = DECL_UID (decl);
5750 void **slot;
5751
5752 slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
5753 *slot = decl_die;
5754 decl_die->decl_id = decl_id;
5755 }
5756
5757 /* Add a variable location node to the linked list for DECL. */
5758
5759 static void
5760 add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
5761 {
5762 unsigned int decl_id = DECL_UID (decl);
5763 var_loc_list *temp;
5764 void **slot;
5765
5766 slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
5767 if (*slot == NULL)
5768 {
5769 temp = ggc_alloc_cleared (sizeof (var_loc_list));
5770 temp->decl_id = decl_id;
5771 *slot = temp;
5772 }
5773 else
5774 temp = *slot;
5775
5776 if (temp->last)
5777 {
5778 /* If the current location is the same as the end of the list,
5779 and either both or neither of the locations is uninitialized,
5780 we have nothing to do. */
5781 if ((!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
5782 NOTE_VAR_LOCATION_LOC (loc->var_loc_note)))
5783 || ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
5784 != NOTE_VAR_LOCATION_STATUS (loc->var_loc_note))
5785 && ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
5786 == VAR_INIT_STATUS_UNINITIALIZED)
5787 || (NOTE_VAR_LOCATION_STATUS (loc->var_loc_note)
5788 == VAR_INIT_STATUS_UNINITIALIZED))))
5789 {
5790 /* Add LOC to the end of list and update LAST. */
5791 temp->last->next = loc;
5792 temp->last = loc;
5793 }
5794 }
5795 /* Do not add empty location to the beginning of the list. */
5796 else if (NOTE_VAR_LOCATION_LOC (loc->var_loc_note) != NULL_RTX)
5797 {
5798 temp->first = loc;
5799 temp->last = loc;
5800 }
5801 }
5802 \f
5803 /* Keep track of the number of spaces used to indent the
5804 output of the debugging routines that print the structure of
5805 the DIE internal representation. */
5806 static int print_indent;
5807
5808 /* Indent the line the number of spaces given by print_indent. */
5809
5810 static inline void
5811 print_spaces (FILE *outfile)
5812 {
5813 fprintf (outfile, "%*s", print_indent, "");
5814 }
5815
5816 /* Print the information associated with a given DIE, and its children.
5817 This routine is a debugging aid only. */
5818
5819 static void
5820 print_die (dw_die_ref die, FILE *outfile)
5821 {
5822 dw_attr_ref a;
5823 dw_die_ref c;
5824 unsigned ix;
5825
5826 print_spaces (outfile);
5827 fprintf (outfile, "DIE %4ld: %s\n",
5828 die->die_offset, dwarf_tag_name (die->die_tag));
5829 print_spaces (outfile);
5830 fprintf (outfile, " abbrev id: %lu", die->die_abbrev);
5831 fprintf (outfile, " offset: %ld\n", die->die_offset);
5832
5833 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
5834 {
5835 print_spaces (outfile);
5836 fprintf (outfile, " %s: ", dwarf_attr_name (a->dw_attr));
5837
5838 switch (AT_class (a))
5839 {
5840 case dw_val_class_addr:
5841 fprintf (outfile, "address");
5842 break;
5843 case dw_val_class_offset:
5844 fprintf (outfile, "offset");
5845 break;
5846 case dw_val_class_loc:
5847 fprintf (outfile, "location descriptor");
5848 break;
5849 case dw_val_class_loc_list:
5850 fprintf (outfile, "location list -> label:%s",
5851 AT_loc_list (a)->ll_symbol);
5852 break;
5853 case dw_val_class_range_list:
5854 fprintf (outfile, "range list");
5855 break;
5856 case dw_val_class_const:
5857 fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
5858 break;
5859 case dw_val_class_unsigned_const:
5860 fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
5861 break;
5862 case dw_val_class_long_long:
5863 fprintf (outfile, "constant (%lu,%lu)",
5864 a->dw_attr_val.v.val_long_long.hi,
5865 a->dw_attr_val.v.val_long_long.low);
5866 break;
5867 case dw_val_class_vec:
5868 fprintf (outfile, "floating-point or vector constant");
5869 break;
5870 case dw_val_class_flag:
5871 fprintf (outfile, "%u", AT_flag (a));
5872 break;
5873 case dw_val_class_die_ref:
5874 if (AT_ref (a) != NULL)
5875 {
5876 if (AT_ref (a)->die_symbol)
5877 fprintf (outfile, "die -> label: %s", AT_ref (a)->die_symbol);
5878 else
5879 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
5880 }
5881 else
5882 fprintf (outfile, "die -> <null>");
5883 break;
5884 case dw_val_class_lbl_id:
5885 case dw_val_class_lineptr:
5886 case dw_val_class_macptr:
5887 fprintf (outfile, "label: %s", AT_lbl (a));
5888 break;
5889 case dw_val_class_str:
5890 if (AT_string (a) != NULL)
5891 fprintf (outfile, "\"%s\"", AT_string (a));
5892 else
5893 fprintf (outfile, "<null>");
5894 break;
5895 case dw_val_class_file:
5896 fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
5897 AT_file (a)->emitted_number);
5898 break;
5899 default:
5900 break;
5901 }
5902
5903 fprintf (outfile, "\n");
5904 }
5905
5906 if (die->die_child != NULL)
5907 {
5908 print_indent += 4;
5909 FOR_EACH_CHILD (die, c, print_die (c, outfile));
5910 print_indent -= 4;
5911 }
5912 if (print_indent == 0)
5913 fprintf (outfile, "\n");
5914 }
5915
5916 /* Print the contents of the source code line number correspondence table.
5917 This routine is a debugging aid only. */
5918
5919 static void
5920 print_dwarf_line_table (FILE *outfile)
5921 {
5922 unsigned i;
5923 dw_line_info_ref line_info;
5924
5925 fprintf (outfile, "\n\nDWARF source line information\n");
5926 for (i = 1; i < line_info_table_in_use; i++)
5927 {
5928 line_info = &line_info_table[i];
5929 fprintf (outfile, "%5d: %4ld %6ld\n", i,
5930 line_info->dw_file_num,
5931 line_info->dw_line_num);
5932 }
5933
5934 fprintf (outfile, "\n\n");
5935 }
5936
5937 /* Print the information collected for a given DIE. */
5938
5939 void
5940 debug_dwarf_die (dw_die_ref die)
5941 {
5942 print_die (die, stderr);
5943 }
5944
5945 /* Print all DWARF information collected for the compilation unit.
5946 This routine is a debugging aid only. */
5947
5948 void
5949 debug_dwarf (void)
5950 {
5951 print_indent = 0;
5952 print_die (comp_unit_die, stderr);
5953 if (! DWARF2_ASM_LINE_DEBUG_INFO)
5954 print_dwarf_line_table (stderr);
5955 }
5956 \f
5957 /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU
5958 for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL
5959 DIE that marks the start of the DIEs for this include file. */
5960
5961 static dw_die_ref
5962 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5963 {
5964 const char *filename = get_AT_string (bincl_die, DW_AT_name);
5965 dw_die_ref new_unit = gen_compile_unit_die (filename);
5966
5967 new_unit->die_sib = old_unit;
5968 return new_unit;
5969 }
5970
5971 /* Close an include-file CU and reopen the enclosing one. */
5972
5973 static dw_die_ref
5974 pop_compile_unit (dw_die_ref old_unit)
5975 {
5976 dw_die_ref new_unit = old_unit->die_sib;
5977
5978 old_unit->die_sib = NULL;
5979 return new_unit;
5980 }
5981
5982 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5983 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5984
5985 /* Calculate the checksum of a location expression. */
5986
5987 static inline void
5988 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5989 {
5990 CHECKSUM (loc->dw_loc_opc);
5991 CHECKSUM (loc->dw_loc_oprnd1);
5992 CHECKSUM (loc->dw_loc_oprnd2);
5993 }
5994
5995 /* Calculate the checksum of an attribute. */
5996
5997 static void
5998 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5999 {
6000 dw_loc_descr_ref loc;
6001 rtx r;
6002
6003 CHECKSUM (at->dw_attr);
6004
6005 /* We don't care that this was compiled with a different compiler
6006 snapshot; if the output is the same, that's what matters. */
6007 if (at->dw_attr == DW_AT_producer)
6008 return;
6009
6010 switch (AT_class (at))
6011 {
6012 case dw_val_class_const:
6013 CHECKSUM (at->dw_attr_val.v.val_int);
6014 break;
6015 case dw_val_class_unsigned_const:
6016 CHECKSUM (at->dw_attr_val.v.val_unsigned);
6017 break;
6018 case dw_val_class_long_long:
6019 CHECKSUM (at->dw_attr_val.v.val_long_long);
6020 break;
6021 case dw_val_class_vec:
6022 CHECKSUM (at->dw_attr_val.v.val_vec);
6023 break;
6024 case dw_val_class_flag:
6025 CHECKSUM (at->dw_attr_val.v.val_flag);
6026 break;
6027 case dw_val_class_str:
6028 CHECKSUM_STRING (AT_string (at));
6029 break;
6030
6031 case dw_val_class_addr:
6032 r = AT_addr (at);
6033 gcc_assert (GET_CODE (r) == SYMBOL_REF);
6034 CHECKSUM_STRING (XSTR (r, 0));
6035 break;
6036
6037 case dw_val_class_offset:
6038 CHECKSUM (at->dw_attr_val.v.val_offset);
6039 break;
6040
6041 case dw_val_class_loc:
6042 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
6043 loc_checksum (loc, ctx);
6044 break;
6045
6046 case dw_val_class_die_ref:
6047 die_checksum (AT_ref (at), ctx, mark);
6048 break;
6049
6050 case dw_val_class_fde_ref:
6051 case dw_val_class_lbl_id:
6052 case dw_val_class_lineptr:
6053 case dw_val_class_macptr:
6054 break;
6055
6056 case dw_val_class_file:
6057 CHECKSUM_STRING (AT_file (at)->filename);
6058 break;
6059
6060 default:
6061 break;
6062 }
6063 }
6064
6065 /* Calculate the checksum of a DIE. */
6066
6067 static void
6068 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
6069 {
6070 dw_die_ref c;
6071 dw_attr_ref a;
6072 unsigned ix;
6073
6074 /* To avoid infinite recursion. */
6075 if (die->die_mark)
6076 {
6077 CHECKSUM (die->die_mark);
6078 return;
6079 }
6080 die->die_mark = ++(*mark);
6081
6082 CHECKSUM (die->die_tag);
6083
6084 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6085 attr_checksum (a, ctx, mark);
6086
6087 FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
6088 }
6089
6090 #undef CHECKSUM
6091 #undef CHECKSUM_STRING
6092
6093 /* Do the location expressions look same? */
6094 static inline int
6095 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
6096 {
6097 return loc1->dw_loc_opc == loc2->dw_loc_opc
6098 && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
6099 && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
6100 }
6101
6102 /* Do the values look the same? */
6103 static int
6104 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
6105 {
6106 dw_loc_descr_ref loc1, loc2;
6107 rtx r1, r2;
6108
6109 if (v1->val_class != v2->val_class)
6110 return 0;
6111
6112 switch (v1->val_class)
6113 {
6114 case dw_val_class_const:
6115 return v1->v.val_int == v2->v.val_int;
6116 case dw_val_class_unsigned_const:
6117 return v1->v.val_unsigned == v2->v.val_unsigned;
6118 case dw_val_class_long_long:
6119 return v1->v.val_long_long.hi == v2->v.val_long_long.hi
6120 && v1->v.val_long_long.low == v2->v.val_long_long.low;
6121 case dw_val_class_vec:
6122 if (v1->v.val_vec.length != v2->v.val_vec.length
6123 || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
6124 return 0;
6125 if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
6126 v1->v.val_vec.length * v1->v.val_vec.elt_size))
6127 return 0;
6128 return 1;
6129 case dw_val_class_flag:
6130 return v1->v.val_flag == v2->v.val_flag;
6131 case dw_val_class_str:
6132 return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
6133
6134 case dw_val_class_addr:
6135 r1 = v1->v.val_addr;
6136 r2 = v2->v.val_addr;
6137 if (GET_CODE (r1) != GET_CODE (r2))
6138 return 0;
6139 gcc_assert (GET_CODE (r1) == SYMBOL_REF);
6140 return !strcmp (XSTR (r1, 0), XSTR (r2, 0));
6141
6142 case dw_val_class_offset:
6143 return v1->v.val_offset == v2->v.val_offset;
6144
6145 case dw_val_class_loc:
6146 for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6147 loc1 && loc2;
6148 loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6149 if (!same_loc_p (loc1, loc2, mark))
6150 return 0;
6151 return !loc1 && !loc2;
6152
6153 case dw_val_class_die_ref:
6154 return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6155
6156 case dw_val_class_fde_ref:
6157 case dw_val_class_lbl_id:
6158 case dw_val_class_lineptr:
6159 case dw_val_class_macptr:
6160 return 1;
6161
6162 case dw_val_class_file:
6163 return v1->v.val_file == v2->v.val_file;
6164
6165 default:
6166 return 1;
6167 }
6168 }
6169
6170 /* Do the attributes look the same? */
6171
6172 static int
6173 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
6174 {
6175 if (at1->dw_attr != at2->dw_attr)
6176 return 0;
6177
6178 /* We don't care that this was compiled with a different compiler
6179 snapshot; if the output is the same, that's what matters. */
6180 if (at1->dw_attr == DW_AT_producer)
6181 return 1;
6182
6183 return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6184 }
6185
6186 /* Do the dies look the same? */
6187
6188 static int
6189 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6190 {
6191 dw_die_ref c1, c2;
6192 dw_attr_ref a1;
6193 unsigned ix;
6194
6195 /* To avoid infinite recursion. */
6196 if (die1->die_mark)
6197 return die1->die_mark == die2->die_mark;
6198 die1->die_mark = die2->die_mark = ++(*mark);
6199
6200 if (die1->die_tag != die2->die_tag)
6201 return 0;
6202
6203 if (VEC_length (dw_attr_node, die1->die_attr)
6204 != VEC_length (dw_attr_node, die2->die_attr))
6205 return 0;
6206
6207 for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
6208 if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
6209 return 0;
6210
6211 c1 = die1->die_child;
6212 c2 = die2->die_child;
6213 if (! c1)
6214 {
6215 if (c2)
6216 return 0;
6217 }
6218 else
6219 for (;;)
6220 {
6221 if (!same_die_p (c1, c2, mark))
6222 return 0;
6223 c1 = c1->die_sib;
6224 c2 = c2->die_sib;
6225 if (c1 == die1->die_child)
6226 {
6227 if (c2 == die2->die_child)
6228 break;
6229 else
6230 return 0;
6231 }
6232 }
6233
6234 return 1;
6235 }
6236
6237 /* Do the dies look the same? Wrapper around same_die_p. */
6238
6239 static int
6240 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6241 {
6242 int mark = 0;
6243 int ret = same_die_p (die1, die2, &mark);
6244
6245 unmark_all_dies (die1);
6246 unmark_all_dies (die2);
6247
6248 return ret;
6249 }
6250
6251 /* The prefix to attach to symbols on DIEs in the current comdat debug
6252 info section. */
6253 static char *comdat_symbol_id;
6254
6255 /* The index of the current symbol within the current comdat CU. */
6256 static unsigned int comdat_symbol_number;
6257
6258 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6259 children, and set comdat_symbol_id accordingly. */
6260
6261 static void
6262 compute_section_prefix (dw_die_ref unit_die)
6263 {
6264 const char *die_name = get_AT_string (unit_die, DW_AT_name);
6265 const char *base = die_name ? lbasename (die_name) : "anonymous";
6266 char *name = alloca (strlen (base) + 64);
6267 char *p;
6268 int i, mark;
6269 unsigned char checksum[16];
6270 struct md5_ctx ctx;
6271
6272 /* Compute the checksum of the DIE, then append part of it as hex digits to
6273 the name filename of the unit. */
6274
6275 md5_init_ctx (&ctx);
6276 mark = 0;
6277 die_checksum (unit_die, &ctx, &mark);
6278 unmark_all_dies (unit_die);
6279 md5_finish_ctx (&ctx, checksum);
6280
6281 sprintf (name, "%s.", base);
6282 clean_symbol_name (name);
6283
6284 p = name + strlen (name);
6285 for (i = 0; i < 4; i++)
6286 {
6287 sprintf (p, "%.2x", checksum[i]);
6288 p += 2;
6289 }
6290
6291 comdat_symbol_id = unit_die->die_symbol = xstrdup (name);
6292 comdat_symbol_number = 0;
6293 }
6294
6295 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */
6296
6297 static int
6298 is_type_die (dw_die_ref die)
6299 {
6300 switch (die->die_tag)
6301 {
6302 case DW_TAG_array_type:
6303 case DW_TAG_class_type:
6304 case DW_TAG_enumeration_type:
6305 case DW_TAG_pointer_type:
6306 case DW_TAG_reference_type:
6307 case DW_TAG_string_type:
6308 case DW_TAG_structure_type:
6309 case DW_TAG_subroutine_type:
6310 case DW_TAG_union_type:
6311 case DW_TAG_ptr_to_member_type:
6312 case DW_TAG_set_type:
6313 case DW_TAG_subrange_type:
6314 case DW_TAG_base_type:
6315 case DW_TAG_const_type:
6316 case DW_TAG_file_type:
6317 case DW_TAG_packed_type:
6318 case DW_TAG_volatile_type:
6319 case DW_TAG_typedef:
6320 return 1;
6321 default:
6322 return 0;
6323 }
6324 }
6325
6326 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6327 Basically, we want to choose the bits that are likely to be shared between
6328 compilations (types) and leave out the bits that are specific to individual
6329 compilations (functions). */
6330
6331 static int
6332 is_comdat_die (dw_die_ref c)
6333 {
6334 /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6335 we do for stabs. The advantage is a greater likelihood of sharing between
6336 objects that don't include headers in the same order (and therefore would
6337 put the base types in a different comdat). jason 8/28/00 */
6338
6339 if (c->die_tag == DW_TAG_base_type)
6340 return 0;
6341
6342 if (c->die_tag == DW_TAG_pointer_type
6343 || c->die_tag == DW_TAG_reference_type
6344 || c->die_tag == DW_TAG_const_type
6345 || c->die_tag == DW_TAG_volatile_type)
6346 {
6347 dw_die_ref t = get_AT_ref (c, DW_AT_type);
6348
6349 return t ? is_comdat_die (t) : 0;
6350 }
6351
6352 return is_type_die (c);
6353 }
6354
6355 /* Returns 1 iff C is the sort of DIE that might be referred to from another
6356 compilation unit. */
6357
6358 static int
6359 is_symbol_die (dw_die_ref c)
6360 {
6361 return (is_type_die (c)
6362 || (get_AT (c, DW_AT_declaration)
6363 && !get_AT (c, DW_AT_specification))
6364 || c->die_tag == DW_TAG_namespace);
6365 }
6366
6367 static char *
6368 gen_internal_sym (const char *prefix)
6369 {
6370 char buf[256];
6371
6372 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
6373 return xstrdup (buf);
6374 }
6375
6376 /* Assign symbols to all worthy DIEs under DIE. */
6377
6378 static void
6379 assign_symbol_names (dw_die_ref die)
6380 {
6381 dw_die_ref c;
6382
6383 if (is_symbol_die (die))
6384 {
6385 if (comdat_symbol_id)
6386 {
6387 char *p = alloca (strlen (comdat_symbol_id) + 64);
6388
6389 sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
6390 comdat_symbol_id, comdat_symbol_number++);
6391 die->die_symbol = xstrdup (p);
6392 }
6393 else
6394 die->die_symbol = gen_internal_sym ("LDIE");
6395 }
6396
6397 FOR_EACH_CHILD (die, c, assign_symbol_names (c));
6398 }
6399
6400 struct cu_hash_table_entry
6401 {
6402 dw_die_ref cu;
6403 unsigned min_comdat_num, max_comdat_num;
6404 struct cu_hash_table_entry *next;
6405 };
6406
6407 /* Routines to manipulate hash table of CUs. */
6408 static hashval_t
6409 htab_cu_hash (const void *of)
6410 {
6411 const struct cu_hash_table_entry *entry = of;
6412
6413 return htab_hash_string (entry->cu->die_symbol);
6414 }
6415
6416 static int
6417 htab_cu_eq (const void *of1, const void *of2)
6418 {
6419 const struct cu_hash_table_entry *entry1 = of1;
6420 const struct die_struct *entry2 = of2;
6421
6422 return !strcmp (entry1->cu->die_symbol, entry2->die_symbol);
6423 }
6424
6425 static void
6426 htab_cu_del (void *what)
6427 {
6428 struct cu_hash_table_entry *next, *entry = what;
6429
6430 while (entry)
6431 {
6432 next = entry->next;
6433 free (entry);
6434 entry = next;
6435 }
6436 }
6437
6438 /* Check whether we have already seen this CU and set up SYM_NUM
6439 accordingly. */
6440 static int
6441 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
6442 {
6443 struct cu_hash_table_entry dummy;
6444 struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6445
6446 dummy.max_comdat_num = 0;
6447
6448 slot = (struct cu_hash_table_entry **)
6449 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6450 INSERT);
6451 entry = *slot;
6452
6453 for (; entry; last = entry, entry = entry->next)
6454 {
6455 if (same_die_p_wrap (cu, entry->cu))
6456 break;
6457 }
6458
6459 if (entry)
6460 {
6461 *sym_num = entry->min_comdat_num;
6462 return 1;
6463 }
6464
6465 entry = XCNEW (struct cu_hash_table_entry);
6466 entry->cu = cu;
6467 entry->min_comdat_num = *sym_num = last->max_comdat_num;
6468 entry->next = *slot;
6469 *slot = entry;
6470
6471 return 0;
6472 }
6473
6474 /* Record SYM_NUM to record of CU in HTABLE. */
6475 static void
6476 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
6477 {
6478 struct cu_hash_table_entry **slot, *entry;
6479
6480 slot = (struct cu_hash_table_entry **)
6481 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6482 NO_INSERT);
6483 entry = *slot;
6484
6485 entry->max_comdat_num = sym_num;
6486 }
6487
6488 /* Traverse the DIE (which is always comp_unit_die), and set up
6489 additional compilation units for each of the include files we see
6490 bracketed by BINCL/EINCL. */
6491
6492 static void
6493 break_out_includes (dw_die_ref die)
6494 {
6495 dw_die_ref c;
6496 dw_die_ref unit = NULL;
6497 limbo_die_node *node, **pnode;
6498 htab_t cu_hash_table;
6499
6500 c = die->die_child;
6501 if (c) do {
6502 dw_die_ref prev = c;
6503 c = c->die_sib;
6504 while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6505 || (unit && is_comdat_die (c)))
6506 {
6507 dw_die_ref next = c->die_sib;
6508
6509 /* This DIE is for a secondary CU; remove it from the main one. */
6510 remove_child_with_prev (c, prev);
6511
6512 if (c->die_tag == DW_TAG_GNU_BINCL)
6513 unit = push_new_compile_unit (unit, c);
6514 else if (c->die_tag == DW_TAG_GNU_EINCL)
6515 unit = pop_compile_unit (unit);
6516 else
6517 add_child_die (unit, c);
6518 c = next;
6519 if (c == die->die_child)
6520 break;
6521 }
6522 } while (c != die->die_child);
6523
6524 #if 0
6525 /* We can only use this in debugging, since the frontend doesn't check
6526 to make sure that we leave every include file we enter. */
6527 gcc_assert (!unit);
6528 #endif
6529
6530 assign_symbol_names (die);
6531 cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
6532 for (node = limbo_die_list, pnode = &limbo_die_list;
6533 node;
6534 node = node->next)
6535 {
6536 int is_dupl;
6537
6538 compute_section_prefix (node->die);
6539 is_dupl = check_duplicate_cu (node->die, cu_hash_table,
6540 &comdat_symbol_number);
6541 assign_symbol_names (node->die);
6542 if (is_dupl)
6543 *pnode = node->next;
6544 else
6545 {
6546 pnode = &node->next;
6547 record_comdat_symbol_number (node->die, cu_hash_table,
6548 comdat_symbol_number);
6549 }
6550 }
6551 htab_delete (cu_hash_table);
6552 }
6553
6554 /* Traverse the DIE and add a sibling attribute if it may have the
6555 effect of speeding up access to siblings. To save some space,
6556 avoid generating sibling attributes for DIE's without children. */
6557
6558 static void
6559 add_sibling_attributes (dw_die_ref die)
6560 {
6561 dw_die_ref c;
6562
6563 if (! die->die_child)
6564 return;
6565
6566 if (die->die_parent && die != die->die_parent->die_child)
6567 add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
6568
6569 FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
6570 }
6571
6572 /* Output all location lists for the DIE and its children. */
6573
6574 static void
6575 output_location_lists (dw_die_ref die)
6576 {
6577 dw_die_ref c;
6578 dw_attr_ref a;
6579 unsigned ix;
6580
6581 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6582 if (AT_class (a) == dw_val_class_loc_list)
6583 output_loc_list (AT_loc_list (a));
6584
6585 FOR_EACH_CHILD (die, c, output_location_lists (c));
6586 }
6587
6588 /* The format of each DIE (and its attribute value pairs) is encoded in an
6589 abbreviation table. This routine builds the abbreviation table and assigns
6590 a unique abbreviation id for each abbreviation entry. The children of each
6591 die are visited recursively. */
6592
6593 static void
6594 build_abbrev_table (dw_die_ref die)
6595 {
6596 unsigned long abbrev_id;
6597 unsigned int n_alloc;
6598 dw_die_ref c;
6599 dw_attr_ref a;
6600 unsigned ix;
6601
6602 /* Scan the DIE references, and mark as external any that refer to
6603 DIEs from other CUs (i.e. those which are not marked). */
6604 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6605 if (AT_class (a) == dw_val_class_die_ref
6606 && AT_ref (a)->die_mark == 0)
6607 {
6608 gcc_assert (AT_ref (a)->die_symbol);
6609
6610 set_AT_ref_external (a, 1);
6611 }
6612
6613 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6614 {
6615 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6616 dw_attr_ref die_a, abbrev_a;
6617 unsigned ix;
6618 bool ok = true;
6619
6620 if (abbrev->die_tag != die->die_tag)
6621 continue;
6622 if ((abbrev->die_child != NULL) != (die->die_child != NULL))
6623 continue;
6624
6625 if (VEC_length (dw_attr_node, abbrev->die_attr)
6626 != VEC_length (dw_attr_node, die->die_attr))
6627 continue;
6628
6629 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
6630 {
6631 abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
6632 if ((abbrev_a->dw_attr != die_a->dw_attr)
6633 || (value_format (abbrev_a) != value_format (die_a)))
6634 {
6635 ok = false;
6636 break;
6637 }
6638 }
6639 if (ok)
6640 break;
6641 }
6642
6643 if (abbrev_id >= abbrev_die_table_in_use)
6644 {
6645 if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
6646 {
6647 n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
6648 abbrev_die_table = ggc_realloc (abbrev_die_table,
6649 sizeof (dw_die_ref) * n_alloc);
6650
6651 memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
6652 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
6653 abbrev_die_table_allocated = n_alloc;
6654 }
6655
6656 ++abbrev_die_table_in_use;
6657 abbrev_die_table[abbrev_id] = die;
6658 }
6659
6660 die->die_abbrev = abbrev_id;
6661 FOR_EACH_CHILD (die, c, build_abbrev_table (c));
6662 }
6663 \f
6664 /* Return the power-of-two number of bytes necessary to represent VALUE. */
6665
6666 static int
6667 constant_size (long unsigned int value)
6668 {
6669 int log;
6670
6671 if (value == 0)
6672 log = 0;
6673 else
6674 log = floor_log2 (value);
6675
6676 log = log / 8;
6677 log = 1 << (floor_log2 (log) + 1);
6678
6679 return log;
6680 }
6681
6682 /* Return the size of a DIE as it is represented in the
6683 .debug_info section. */
6684
6685 static unsigned long
6686 size_of_die (dw_die_ref die)
6687 {
6688 unsigned long size = 0;
6689 dw_attr_ref a;
6690 unsigned ix;
6691
6692 size += size_of_uleb128 (die->die_abbrev);
6693 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6694 {
6695 switch (AT_class (a))
6696 {
6697 case dw_val_class_addr:
6698 size += DWARF2_ADDR_SIZE;
6699 break;
6700 case dw_val_class_offset:
6701 size += DWARF_OFFSET_SIZE;
6702 break;
6703 case dw_val_class_loc:
6704 {
6705 unsigned long lsize = size_of_locs (AT_loc (a));
6706
6707 /* Block length. */
6708 size += constant_size (lsize);
6709 size += lsize;
6710 }
6711 break;
6712 case dw_val_class_loc_list:
6713 size += DWARF_OFFSET_SIZE;
6714 break;
6715 case dw_val_class_range_list:
6716 size += DWARF_OFFSET_SIZE;
6717 break;
6718 case dw_val_class_const:
6719 size += size_of_sleb128 (AT_int (a));
6720 break;
6721 case dw_val_class_unsigned_const:
6722 size += constant_size (AT_unsigned (a));
6723 break;
6724 case dw_val_class_long_long:
6725 size += 1 + 2*HOST_BITS_PER_LONG/HOST_BITS_PER_CHAR; /* block */
6726 break;
6727 case dw_val_class_vec:
6728 size += 1 + (a->dw_attr_val.v.val_vec.length
6729 * a->dw_attr_val.v.val_vec.elt_size); /* block */
6730 break;
6731 case dw_val_class_flag:
6732 size += 1;
6733 break;
6734 case dw_val_class_die_ref:
6735 if (AT_ref_external (a))
6736 size += DWARF2_ADDR_SIZE;
6737 else
6738 size += DWARF_OFFSET_SIZE;
6739 break;
6740 case dw_val_class_fde_ref:
6741 size += DWARF_OFFSET_SIZE;
6742 break;
6743 case dw_val_class_lbl_id:
6744 size += DWARF2_ADDR_SIZE;
6745 break;
6746 case dw_val_class_lineptr:
6747 case dw_val_class_macptr:
6748 size += DWARF_OFFSET_SIZE;
6749 break;
6750 case dw_val_class_str:
6751 if (AT_string_form (a) == DW_FORM_strp)
6752 size += DWARF_OFFSET_SIZE;
6753 else
6754 size += strlen (a->dw_attr_val.v.val_str->str) + 1;
6755 break;
6756 case dw_val_class_file:
6757 size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
6758 break;
6759 default:
6760 gcc_unreachable ();
6761 }
6762 }
6763
6764 return size;
6765 }
6766
6767 /* Size the debugging information associated with a given DIE. Visits the
6768 DIE's children recursively. Updates the global variable next_die_offset, on
6769 each time through. Uses the current value of next_die_offset to update the
6770 die_offset field in each DIE. */
6771
6772 static void
6773 calc_die_sizes (dw_die_ref die)
6774 {
6775 dw_die_ref c;
6776
6777 die->die_offset = next_die_offset;
6778 next_die_offset += size_of_die (die);
6779
6780 FOR_EACH_CHILD (die, c, calc_die_sizes (c));
6781
6782 if (die->die_child != NULL)
6783 /* Count the null byte used to terminate sibling lists. */
6784 next_die_offset += 1;
6785 }
6786
6787 /* Set the marks for a die and its children. We do this so
6788 that we know whether or not a reference needs to use FORM_ref_addr; only
6789 DIEs in the same CU will be marked. We used to clear out the offset
6790 and use that as the flag, but ran into ordering problems. */
6791
6792 static void
6793 mark_dies (dw_die_ref die)
6794 {
6795 dw_die_ref c;
6796
6797 gcc_assert (!die->die_mark);
6798
6799 die->die_mark = 1;
6800 FOR_EACH_CHILD (die, c, mark_dies (c));
6801 }
6802
6803 /* Clear the marks for a die and its children. */
6804
6805 static void
6806 unmark_dies (dw_die_ref die)
6807 {
6808 dw_die_ref c;
6809
6810 gcc_assert (die->die_mark);
6811
6812 die->die_mark = 0;
6813 FOR_EACH_CHILD (die, c, unmark_dies (c));
6814 }
6815
6816 /* Clear the marks for a die, its children and referred dies. */
6817
6818 static void
6819 unmark_all_dies (dw_die_ref die)
6820 {
6821 dw_die_ref c;
6822 dw_attr_ref a;
6823 unsigned ix;
6824
6825 if (!die->die_mark)
6826 return;
6827 die->die_mark = 0;
6828
6829 FOR_EACH_CHILD (die, c, unmark_all_dies (c));
6830
6831 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6832 if (AT_class (a) == dw_val_class_die_ref)
6833 unmark_all_dies (AT_ref (a));
6834 }
6835
6836 /* Return the size of the .debug_pubnames or .debug_pubtypes table
6837 generated for the compilation unit. */
6838
6839 static unsigned long
6840 size_of_pubnames (VEC (pubname_entry, gc) * names)
6841 {
6842 unsigned long size;
6843 unsigned i;
6844 pubname_ref p;
6845
6846 size = DWARF_PUBNAMES_HEADER_SIZE;
6847 for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
6848 if (names != pubtype_table
6849 || p->die->die_offset != 0
6850 || !flag_eliminate_unused_debug_types)
6851 size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
6852
6853 size += DWARF_OFFSET_SIZE;
6854 return size;
6855 }
6856
6857 /* Return the size of the information in the .debug_aranges section. */
6858
6859 static unsigned long
6860 size_of_aranges (void)
6861 {
6862 unsigned long size;
6863
6864 size = DWARF_ARANGES_HEADER_SIZE;
6865
6866 /* Count the address/length pair for this compilation unit. */
6867 if (text_section_used)
6868 size += 2 * DWARF2_ADDR_SIZE;
6869 if (cold_text_section_used)
6870 size += 2 * DWARF2_ADDR_SIZE;
6871 size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
6872
6873 /* Count the two zero words used to terminated the address range table. */
6874 size += 2 * DWARF2_ADDR_SIZE;
6875 return size;
6876 }
6877 \f
6878 /* Select the encoding of an attribute value. */
6879
6880 static enum dwarf_form
6881 value_format (dw_attr_ref a)
6882 {
6883 switch (a->dw_attr_val.val_class)
6884 {
6885 case dw_val_class_addr:
6886 return DW_FORM_addr;
6887 case dw_val_class_range_list:
6888 case dw_val_class_offset:
6889 case dw_val_class_loc_list:
6890 switch (DWARF_OFFSET_SIZE)
6891 {
6892 case 4:
6893 return DW_FORM_data4;
6894 case 8:
6895 return DW_FORM_data8;
6896 default:
6897 gcc_unreachable ();
6898 }
6899 case dw_val_class_loc:
6900 switch (constant_size (size_of_locs (AT_loc (a))))
6901 {
6902 case 1:
6903 return DW_FORM_block1;
6904 case 2:
6905 return DW_FORM_block2;
6906 default:
6907 gcc_unreachable ();
6908 }
6909 case dw_val_class_const:
6910 return DW_FORM_sdata;
6911 case dw_val_class_unsigned_const:
6912 switch (constant_size (AT_unsigned (a)))
6913 {
6914 case 1:
6915 return DW_FORM_data1;
6916 case 2:
6917 return DW_FORM_data2;
6918 case 4:
6919 return DW_FORM_data4;
6920 case 8:
6921 return DW_FORM_data8;
6922 default:
6923 gcc_unreachable ();
6924 }
6925 case dw_val_class_long_long:
6926 return DW_FORM_block1;
6927 case dw_val_class_vec:
6928 return DW_FORM_block1;
6929 case dw_val_class_flag:
6930 return DW_FORM_flag;
6931 case dw_val_class_die_ref:
6932 if (AT_ref_external (a))
6933 return DW_FORM_ref_addr;
6934 else
6935 return DW_FORM_ref;
6936 case dw_val_class_fde_ref:
6937 return DW_FORM_data;
6938 case dw_val_class_lbl_id:
6939 return DW_FORM_addr;
6940 case dw_val_class_lineptr:
6941 case dw_val_class_macptr:
6942 return DW_FORM_data;
6943 case dw_val_class_str:
6944 return AT_string_form (a);
6945 case dw_val_class_file:
6946 switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
6947 {
6948 case 1:
6949 return DW_FORM_data1;
6950 case 2:
6951 return DW_FORM_data2;
6952 case 4:
6953 return DW_FORM_data4;
6954 default:
6955 gcc_unreachable ();
6956 }
6957
6958 default:
6959 gcc_unreachable ();
6960 }
6961 }
6962
6963 /* Output the encoding of an attribute value. */
6964
6965 static void
6966 output_value_format (dw_attr_ref a)
6967 {
6968 enum dwarf_form form = value_format (a);
6969
6970 dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
6971 }
6972
6973 /* Output the .debug_abbrev section which defines the DIE abbreviation
6974 table. */
6975
6976 static void
6977 output_abbrev_section (void)
6978 {
6979 unsigned long abbrev_id;
6980
6981 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6982 {
6983 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6984 unsigned ix;
6985 dw_attr_ref a_attr;
6986
6987 dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
6988 dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
6989 dwarf_tag_name (abbrev->die_tag));
6990
6991 if (abbrev->die_child != NULL)
6992 dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
6993 else
6994 dw2_asm_output_data (1, DW_children_no, "DW_children_no");
6995
6996 for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
6997 ix++)
6998 {
6999 dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
7000 dwarf_attr_name (a_attr->dw_attr));
7001 output_value_format (a_attr);
7002 }
7003
7004 dw2_asm_output_data (1, 0, NULL);
7005 dw2_asm_output_data (1, 0, NULL);
7006 }
7007
7008 /* Terminate the table. */
7009 dw2_asm_output_data (1, 0, NULL);
7010 }
7011
7012 /* Output a symbol we can use to refer to this DIE from another CU. */
7013
7014 static inline void
7015 output_die_symbol (dw_die_ref die)
7016 {
7017 char *sym = die->die_symbol;
7018
7019 if (sym == 0)
7020 return;
7021
7022 if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
7023 /* We make these global, not weak; if the target doesn't support
7024 .linkonce, it doesn't support combining the sections, so debugging
7025 will break. */
7026 targetm.asm_out.globalize_label (asm_out_file, sym);
7027
7028 ASM_OUTPUT_LABEL (asm_out_file, sym);
7029 }
7030
7031 /* Return a new location list, given the begin and end range, and the
7032 expression. gensym tells us whether to generate a new internal symbol for
7033 this location list node, which is done for the head of the list only. */
7034
7035 static inline dw_loc_list_ref
7036 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
7037 const char *section, unsigned int gensym)
7038 {
7039 dw_loc_list_ref retlist = ggc_alloc_cleared (sizeof (dw_loc_list_node));
7040
7041 retlist->begin = begin;
7042 retlist->end = end;
7043 retlist->expr = expr;
7044 retlist->section = section;
7045 if (gensym)
7046 retlist->ll_symbol = gen_internal_sym ("LLST");
7047
7048 return retlist;
7049 }
7050
7051 /* Add a location description expression to a location list. */
7052
7053 static inline void
7054 add_loc_descr_to_loc_list (dw_loc_list_ref *list_head, dw_loc_descr_ref descr,
7055 const char *begin, const char *end,
7056 const char *section)
7057 {
7058 dw_loc_list_ref *d;
7059
7060 /* Find the end of the chain. */
7061 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
7062 ;
7063
7064 /* Add a new location list node to the list. */
7065 *d = new_loc_list (descr, begin, end, section, 0);
7066 }
7067
7068 /* Note that the current function section is being used for code. */
7069
7070 static void
7071 dwarf2out_note_section_used (void)
7072 {
7073 section *sec = current_function_section ();
7074 if (sec == text_section)
7075 text_section_used = true;
7076 else if (sec == cold_text_section)
7077 cold_text_section_used = true;
7078 }
7079
7080 static void
7081 dwarf2out_switch_text_section (void)
7082 {
7083 dw_fde_ref fde;
7084
7085 gcc_assert (cfun);
7086
7087 fde = &fde_table[fde_table_in_use - 1];
7088 fde->dw_fde_switched_sections = true;
7089 fde->dw_fde_hot_section_label = cfun->hot_section_label;
7090 fde->dw_fde_hot_section_end_label = cfun->hot_section_end_label;
7091 fde->dw_fde_unlikely_section_label = cfun->cold_section_label;
7092 fde->dw_fde_unlikely_section_end_label = cfun->cold_section_end_label;
7093 have_multiple_function_sections = true;
7094
7095 /* Reset the current label on switching text sections, so that we
7096 don't attempt to advance_loc4 between labels in different sections. */
7097 fde->dw_fde_current_label = NULL;
7098
7099 dwarf2out_note_section_used ();
7100 }
7101
7102 /* Output the location list given to us. */
7103
7104 static void
7105 output_loc_list (dw_loc_list_ref list_head)
7106 {
7107 dw_loc_list_ref curr = list_head;
7108
7109 ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
7110
7111 /* Walk the location list, and output each range + expression. */
7112 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
7113 {
7114 unsigned long size;
7115 /* Don't output an entry that starts and ends at the same address. */
7116 if (strcmp (curr->begin, curr->end) == 0)
7117 continue;
7118 if (!have_multiple_function_sections)
7119 {
7120 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
7121 "Location list begin address (%s)",
7122 list_head->ll_symbol);
7123 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
7124 "Location list end address (%s)",
7125 list_head->ll_symbol);
7126 }
7127 else
7128 {
7129 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
7130 "Location list begin address (%s)",
7131 list_head->ll_symbol);
7132 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
7133 "Location list end address (%s)",
7134 list_head->ll_symbol);
7135 }
7136 size = size_of_locs (curr->expr);
7137
7138 /* Output the block length for this list of location operations. */
7139 gcc_assert (size <= 0xffff);
7140 dw2_asm_output_data (2, size, "%s", "Location expression size");
7141
7142 output_loc_sequence (curr->expr);
7143 }
7144
7145 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
7146 "Location list terminator begin (%s)",
7147 list_head->ll_symbol);
7148 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
7149 "Location list terminator end (%s)",
7150 list_head->ll_symbol);
7151 }
7152
7153 /* Output the DIE and its attributes. Called recursively to generate
7154 the definitions of each child DIE. */
7155
7156 static void
7157 output_die (dw_die_ref die)
7158 {
7159 dw_attr_ref a;
7160 dw_die_ref c;
7161 unsigned long size;
7162 unsigned ix;
7163
7164 /* If someone in another CU might refer to us, set up a symbol for
7165 them to point to. */
7166 if (die->die_symbol)
7167 output_die_symbol (die);
7168
7169 dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
7170 (unsigned long)die->die_offset,
7171 dwarf_tag_name (die->die_tag));
7172
7173 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7174 {
7175 const char *name = dwarf_attr_name (a->dw_attr);
7176
7177 switch (AT_class (a))
7178 {
7179 case dw_val_class_addr:
7180 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
7181 break;
7182
7183 case dw_val_class_offset:
7184 dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
7185 "%s", name);
7186 break;
7187
7188 case dw_val_class_range_list:
7189 {
7190 char *p = strchr (ranges_section_label, '\0');
7191
7192 sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
7193 a->dw_attr_val.v.val_offset);
7194 dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
7195 debug_ranges_section, "%s", name);
7196 *p = '\0';
7197 }
7198 break;
7199
7200 case dw_val_class_loc:
7201 size = size_of_locs (AT_loc (a));
7202
7203 /* Output the block length for this list of location operations. */
7204 dw2_asm_output_data (constant_size (size), size, "%s", name);
7205
7206 output_loc_sequence (AT_loc (a));
7207 break;
7208
7209 case dw_val_class_const:
7210 /* ??? It would be slightly more efficient to use a scheme like is
7211 used for unsigned constants below, but gdb 4.x does not sign
7212 extend. Gdb 5.x does sign extend. */
7213 dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
7214 break;
7215
7216 case dw_val_class_unsigned_const:
7217 dw2_asm_output_data (constant_size (AT_unsigned (a)),
7218 AT_unsigned (a), "%s", name);
7219 break;
7220
7221 case dw_val_class_long_long:
7222 {
7223 unsigned HOST_WIDE_INT first, second;
7224
7225 dw2_asm_output_data (1,
7226 2 * HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7227 "%s", name);
7228
7229 if (WORDS_BIG_ENDIAN)
7230 {
7231 first = a->dw_attr_val.v.val_long_long.hi;
7232 second = a->dw_attr_val.v.val_long_long.low;
7233 }
7234 else
7235 {
7236 first = a->dw_attr_val.v.val_long_long.low;
7237 second = a->dw_attr_val.v.val_long_long.hi;
7238 }
7239
7240 dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7241 first, "long long constant");
7242 dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7243 second, NULL);
7244 }
7245 break;
7246
7247 case dw_val_class_vec:
7248 {
7249 unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
7250 unsigned int len = a->dw_attr_val.v.val_vec.length;
7251 unsigned int i;
7252 unsigned char *p;
7253
7254 dw2_asm_output_data (1, len * elt_size, "%s", name);
7255 if (elt_size > sizeof (HOST_WIDE_INT))
7256 {
7257 elt_size /= 2;
7258 len *= 2;
7259 }
7260 for (i = 0, p = a->dw_attr_val.v.val_vec.array;
7261 i < len;
7262 i++, p += elt_size)
7263 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
7264 "fp or vector constant word %u", i);
7265 break;
7266 }
7267
7268 case dw_val_class_flag:
7269 dw2_asm_output_data (1, AT_flag (a), "%s", name);
7270 break;
7271
7272 case dw_val_class_loc_list:
7273 {
7274 char *sym = AT_loc_list (a)->ll_symbol;
7275
7276 gcc_assert (sym);
7277 dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
7278 "%s", name);
7279 }
7280 break;
7281
7282 case dw_val_class_die_ref:
7283 if (AT_ref_external (a))
7284 {
7285 char *sym = AT_ref (a)->die_symbol;
7286
7287 gcc_assert (sym);
7288 dw2_asm_output_offset (DWARF2_ADDR_SIZE, sym, debug_info_section,
7289 "%s", name);
7290 }
7291 else
7292 {
7293 gcc_assert (AT_ref (a)->die_offset);
7294 dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
7295 "%s", name);
7296 }
7297 break;
7298
7299 case dw_val_class_fde_ref:
7300 {
7301 char l1[20];
7302
7303 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
7304 a->dw_attr_val.v.val_fde_index * 2);
7305 dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
7306 "%s", name);
7307 }
7308 break;
7309
7310 case dw_val_class_lbl_id:
7311 dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
7312 break;
7313
7314 case dw_val_class_lineptr:
7315 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
7316 debug_line_section, "%s", name);
7317 break;
7318
7319 case dw_val_class_macptr:
7320 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
7321 debug_macinfo_section, "%s", name);
7322 break;
7323
7324 case dw_val_class_str:
7325 if (AT_string_form (a) == DW_FORM_strp)
7326 dw2_asm_output_offset (DWARF_OFFSET_SIZE,
7327 a->dw_attr_val.v.val_str->label,
7328 debug_str_section,
7329 "%s: \"%s\"", name, AT_string (a));
7330 else
7331 dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
7332 break;
7333
7334 case dw_val_class_file:
7335 {
7336 int f = maybe_emit_file (a->dw_attr_val.v.val_file);
7337
7338 dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
7339 a->dw_attr_val.v.val_file->filename);
7340 break;
7341 }
7342
7343 default:
7344 gcc_unreachable ();
7345 }
7346 }
7347
7348 FOR_EACH_CHILD (die, c, output_die (c));
7349
7350 /* Add null byte to terminate sibling list. */
7351 if (die->die_child != NULL)
7352 dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
7353 (unsigned long) die->die_offset);
7354 }
7355
7356 /* Output the compilation unit that appears at the beginning of the
7357 .debug_info section, and precedes the DIE descriptions. */
7358
7359 static void
7360 output_compilation_unit_header (void)
7361 {
7362 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7363 dw2_asm_output_data (4, 0xffffffff,
7364 "Initial length escape value indicating 64-bit DWARF extension");
7365 dw2_asm_output_data (DWARF_OFFSET_SIZE,
7366 next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
7367 "Length of Compilation Unit Info");
7368 dw2_asm_output_data (2, DWARF_VERSION, "DWARF version number");
7369 dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
7370 debug_abbrev_section,
7371 "Offset Into Abbrev. Section");
7372 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
7373 }
7374
7375 /* Output the compilation unit DIE and its children. */
7376
7377 static void
7378 output_comp_unit (dw_die_ref die, int output_if_empty)
7379 {
7380 const char *secname;
7381 char *oldsym, *tmp;
7382
7383 /* Unless we are outputting main CU, we may throw away empty ones. */
7384 if (!output_if_empty && die->die_child == NULL)
7385 return;
7386
7387 /* Even if there are no children of this DIE, we must output the information
7388 about the compilation unit. Otherwise, on an empty translation unit, we
7389 will generate a present, but empty, .debug_info section. IRIX 6.5 `nm'
7390 will then complain when examining the file. First mark all the DIEs in
7391 this CU so we know which get local refs. */
7392 mark_dies (die);
7393
7394 build_abbrev_table (die);
7395
7396 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
7397 next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
7398 calc_die_sizes (die);
7399
7400 oldsym = die->die_symbol;
7401 if (oldsym)
7402 {
7403 tmp = alloca (strlen (oldsym) + 24);
7404
7405 sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
7406 secname = tmp;
7407 die->die_symbol = NULL;
7408 switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
7409 }
7410 else
7411 switch_to_section (debug_info_section);
7412
7413 /* Output debugging information. */
7414 output_compilation_unit_header ();
7415 output_die (die);
7416
7417 /* Leave the marks on the main CU, so we can check them in
7418 output_pubnames. */
7419 if (oldsym)
7420 {
7421 unmark_dies (die);
7422 die->die_symbol = oldsym;
7423 }
7424 }
7425
7426 /* Return the DWARF2/3 pubname associated with a decl. */
7427
7428 static const char *
7429 dwarf2_name (tree decl, int scope)
7430 {
7431 return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
7432 }
7433
7434 /* Add a new entry to .debug_pubnames if appropriate. */
7435
7436 static void
7437 add_pubname (tree decl, dw_die_ref die)
7438 {
7439 pubname_entry e;
7440
7441 if (! TREE_PUBLIC (decl))
7442 return;
7443
7444 e.die = die;
7445 e.name = xstrdup (dwarf2_name (decl, 1));
7446 VEC_safe_push (pubname_entry, gc, pubname_table, &e);
7447 }
7448
7449 /* Add a new entry to .debug_pubtypes if appropriate. */
7450
7451 static void
7452 add_pubtype (tree decl, dw_die_ref die)
7453 {
7454 pubname_entry e;
7455
7456 e.name = NULL;
7457 if ((TREE_PUBLIC (decl)
7458 || die->die_parent == comp_unit_die)
7459 && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
7460 {
7461 e.die = die;
7462 if (TYPE_P (decl))
7463 {
7464 if (TYPE_NAME (decl))
7465 {
7466 if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
7467 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
7468 else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
7469 && DECL_NAME (TYPE_NAME (decl)))
7470 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
7471 else
7472 e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
7473 }
7474 }
7475 else
7476 e.name = xstrdup (dwarf2_name (decl, 1));
7477
7478 /* If we don't have a name for the type, there's no point in adding
7479 it to the table. */
7480 if (e.name && e.name[0] != '\0')
7481 VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
7482 }
7483 }
7484
7485 /* Output the public names table used to speed up access to externally
7486 visible names; or the public types table used to find type definitions. */
7487
7488 static void
7489 output_pubnames (VEC (pubname_entry, gc) * names)
7490 {
7491 unsigned i;
7492 unsigned long pubnames_length = size_of_pubnames (names);
7493 pubname_ref pub;
7494
7495 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7496 dw2_asm_output_data (4, 0xffffffff,
7497 "Initial length escape value indicating 64-bit DWARF extension");
7498 if (names == pubname_table)
7499 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
7500 "Length of Public Names Info");
7501 else
7502 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
7503 "Length of Public Type Names Info");
7504 dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7505 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
7506 debug_info_section,
7507 "Offset of Compilation Unit Info");
7508 dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
7509 "Compilation Unit Length");
7510
7511 for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
7512 {
7513 /* We shouldn't see pubnames for DIEs outside of the main CU. */
7514 if (names == pubname_table)
7515 gcc_assert (pub->die->die_mark);
7516
7517 if (names != pubtype_table
7518 || pub->die->die_offset != 0
7519 || !flag_eliminate_unused_debug_types)
7520 {
7521 dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
7522 "DIE offset");
7523
7524 dw2_asm_output_nstring (pub->name, -1, "external name");
7525 }
7526 }
7527
7528 dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
7529 }
7530
7531 /* Add a new entry to .debug_aranges if appropriate. */
7532
7533 static void
7534 add_arange (tree decl, dw_die_ref die)
7535 {
7536 if (! DECL_SECTION_NAME (decl))
7537 return;
7538
7539 if (arange_table_in_use == arange_table_allocated)
7540 {
7541 arange_table_allocated += ARANGE_TABLE_INCREMENT;
7542 arange_table = ggc_realloc (arange_table,
7543 (arange_table_allocated
7544 * sizeof (dw_die_ref)));
7545 memset (arange_table + arange_table_in_use, 0,
7546 ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
7547 }
7548
7549 arange_table[arange_table_in_use++] = die;
7550 }
7551
7552 /* Output the information that goes into the .debug_aranges table.
7553 Namely, define the beginning and ending address range of the
7554 text section generated for this compilation unit. */
7555
7556 static void
7557 output_aranges (void)
7558 {
7559 unsigned i;
7560 unsigned long aranges_length = size_of_aranges ();
7561
7562 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7563 dw2_asm_output_data (4, 0xffffffff,
7564 "Initial length escape value indicating 64-bit DWARF extension");
7565 dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
7566 "Length of Address Ranges Info");
7567 dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7568 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
7569 debug_info_section,
7570 "Offset of Compilation Unit Info");
7571 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
7572 dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
7573
7574 /* We need to align to twice the pointer size here. */
7575 if (DWARF_ARANGES_PAD_SIZE)
7576 {
7577 /* Pad using a 2 byte words so that padding is correct for any
7578 pointer size. */
7579 dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
7580 2 * DWARF2_ADDR_SIZE);
7581 for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
7582 dw2_asm_output_data (2, 0, NULL);
7583 }
7584
7585 /* It is necessary not to output these entries if the sections were
7586 not used; if the sections were not used, the length will be 0 and
7587 the address may end up as 0 if the section is discarded by ld
7588 --gc-sections, leaving an invalid (0, 0) entry that can be
7589 confused with the terminator. */
7590 if (text_section_used)
7591 {
7592 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
7593 dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
7594 text_section_label, "Length");
7595 }
7596 if (cold_text_section_used)
7597 {
7598 dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
7599 "Address");
7600 dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
7601 cold_text_section_label, "Length");
7602 }
7603
7604 for (i = 0; i < arange_table_in_use; i++)
7605 {
7606 dw_die_ref die = arange_table[i];
7607
7608 /* We shouldn't see aranges for DIEs outside of the main CU. */
7609 gcc_assert (die->die_mark);
7610
7611 if (die->die_tag == DW_TAG_subprogram)
7612 {
7613 dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
7614 "Address");
7615 dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
7616 get_AT_low_pc (die), "Length");
7617 }
7618 else
7619 {
7620 /* A static variable; extract the symbol from DW_AT_location.
7621 Note that this code isn't currently hit, as we only emit
7622 aranges for functions (jason 9/23/99). */
7623 dw_attr_ref a = get_AT (die, DW_AT_location);
7624 dw_loc_descr_ref loc;
7625
7626 gcc_assert (a && AT_class (a) == dw_val_class_loc);
7627
7628 loc = AT_loc (a);
7629 gcc_assert (loc->dw_loc_opc == DW_OP_addr);
7630
7631 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
7632 loc->dw_loc_oprnd1.v.val_addr, "Address");
7633 dw2_asm_output_data (DWARF2_ADDR_SIZE,
7634 get_AT_unsigned (die, DW_AT_byte_size),
7635 "Length");
7636 }
7637 }
7638
7639 /* Output the terminator words. */
7640 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7641 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7642 }
7643
7644 /* Add a new entry to .debug_ranges. Return the offset at which it
7645 was placed. */
7646
7647 static unsigned int
7648 add_ranges_num (int num)
7649 {
7650 unsigned int in_use = ranges_table_in_use;
7651
7652 if (in_use == ranges_table_allocated)
7653 {
7654 ranges_table_allocated += RANGES_TABLE_INCREMENT;
7655 ranges_table
7656 = ggc_realloc (ranges_table, (ranges_table_allocated
7657 * sizeof (struct dw_ranges_struct)));
7658 memset (ranges_table + ranges_table_in_use, 0,
7659 RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
7660 }
7661
7662 ranges_table[in_use].num = num;
7663 ranges_table_in_use = in_use + 1;
7664
7665 return in_use * 2 * DWARF2_ADDR_SIZE;
7666 }
7667
7668 /* Add a new entry to .debug_ranges corresponding to a block, or a
7669 range terminator if BLOCK is NULL. */
7670
7671 static unsigned int
7672 add_ranges (const_tree block)
7673 {
7674 return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
7675 }
7676
7677 /* Add a new entry to .debug_ranges corresponding to a pair of
7678 labels. */
7679
7680 static unsigned int
7681 add_ranges_by_labels (const char *begin, const char *end)
7682 {
7683 unsigned int in_use = ranges_by_label_in_use;
7684
7685 if (in_use == ranges_by_label_allocated)
7686 {
7687 ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
7688 ranges_by_label
7689 = ggc_realloc (ranges_by_label,
7690 (ranges_by_label_allocated
7691 * sizeof (struct dw_ranges_by_label_struct)));
7692 memset (ranges_by_label + ranges_by_label_in_use, 0,
7693 RANGES_TABLE_INCREMENT
7694 * sizeof (struct dw_ranges_by_label_struct));
7695 }
7696
7697 ranges_by_label[in_use].begin = begin;
7698 ranges_by_label[in_use].end = end;
7699 ranges_by_label_in_use = in_use + 1;
7700
7701 return add_ranges_num (-(int)in_use - 1);
7702 }
7703
7704 static void
7705 output_ranges (void)
7706 {
7707 unsigned i;
7708 static const char *const start_fmt = "Offset 0x%x";
7709 const char *fmt = start_fmt;
7710
7711 for (i = 0; i < ranges_table_in_use; i++)
7712 {
7713 int block_num = ranges_table[i].num;
7714
7715 if (block_num > 0)
7716 {
7717 char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
7718 char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
7719
7720 ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
7721 ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
7722
7723 /* If all code is in the text section, then the compilation
7724 unit base address defaults to DW_AT_low_pc, which is the
7725 base of the text section. */
7726 if (!have_multiple_function_sections)
7727 {
7728 dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
7729 text_section_label,
7730 fmt, i * 2 * DWARF2_ADDR_SIZE);
7731 dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
7732 text_section_label, NULL);
7733 }
7734
7735 /* Otherwise, the compilation unit base address is zero,
7736 which allows us to use absolute addresses, and not worry
7737 about whether the target supports cross-section
7738 arithmetic. */
7739 else
7740 {
7741 dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
7742 fmt, i * 2 * DWARF2_ADDR_SIZE);
7743 dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
7744 }
7745
7746 fmt = NULL;
7747 }
7748
7749 /* Negative block_num stands for an index into ranges_by_label. */
7750 else if (block_num < 0)
7751 {
7752 int lab_idx = - block_num - 1;
7753
7754 if (!have_multiple_function_sections)
7755 {
7756 gcc_unreachable ();
7757 #if 0
7758 /* If we ever use add_ranges_by_labels () for a single
7759 function section, all we have to do is to take out
7760 the #if 0 above. */
7761 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
7762 ranges_by_label[lab_idx].begin,
7763 text_section_label,
7764 fmt, i * 2 * DWARF2_ADDR_SIZE);
7765 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
7766 ranges_by_label[lab_idx].end,
7767 text_section_label, NULL);
7768 #endif
7769 }
7770 else
7771 {
7772 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
7773 ranges_by_label[lab_idx].begin,
7774 fmt, i * 2 * DWARF2_ADDR_SIZE);
7775 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
7776 ranges_by_label[lab_idx].end,
7777 NULL);
7778 }
7779 }
7780 else
7781 {
7782 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7783 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7784 fmt = start_fmt;
7785 }
7786 }
7787 }
7788
7789 /* Data structure containing information about input files. */
7790 struct file_info
7791 {
7792 const char *path; /* Complete file name. */
7793 const char *fname; /* File name part. */
7794 int length; /* Length of entire string. */
7795 struct dwarf_file_data * file_idx; /* Index in input file table. */
7796 int dir_idx; /* Index in directory table. */
7797 };
7798
7799 /* Data structure containing information about directories with source
7800 files. */
7801 struct dir_info
7802 {
7803 const char *path; /* Path including directory name. */
7804 int length; /* Path length. */
7805 int prefix; /* Index of directory entry which is a prefix. */
7806 int count; /* Number of files in this directory. */
7807 int dir_idx; /* Index of directory used as base. */
7808 };
7809
7810 /* Callback function for file_info comparison. We sort by looking at
7811 the directories in the path. */
7812
7813 static int
7814 file_info_cmp (const void *p1, const void *p2)
7815 {
7816 const struct file_info *s1 = p1;
7817 const struct file_info *s2 = p2;
7818 const unsigned char *cp1;
7819 const unsigned char *cp2;
7820
7821 /* Take care of file names without directories. We need to make sure that
7822 we return consistent values to qsort since some will get confused if
7823 we return the same value when identical operands are passed in opposite
7824 orders. So if neither has a directory, return 0 and otherwise return
7825 1 or -1 depending on which one has the directory. */
7826 if ((s1->path == s1->fname || s2->path == s2->fname))
7827 return (s2->path == s2->fname) - (s1->path == s1->fname);
7828
7829 cp1 = (const unsigned char *) s1->path;
7830 cp2 = (const unsigned char *) s2->path;
7831
7832 while (1)
7833 {
7834 ++cp1;
7835 ++cp2;
7836 /* Reached the end of the first path? If so, handle like above. */
7837 if ((cp1 == (const unsigned char *) s1->fname)
7838 || (cp2 == (const unsigned char *) s2->fname))
7839 return ((cp2 == (const unsigned char *) s2->fname)
7840 - (cp1 == (const unsigned char *) s1->fname));
7841
7842 /* Character of current path component the same? */
7843 else if (*cp1 != *cp2)
7844 return *cp1 - *cp2;
7845 }
7846 }
7847
7848 struct file_name_acquire_data
7849 {
7850 struct file_info *files;
7851 int used_files;
7852 int max_files;
7853 };
7854
7855 /* Traversal function for the hash table. */
7856
7857 static int
7858 file_name_acquire (void ** slot, void *data)
7859 {
7860 struct file_name_acquire_data *fnad = data;
7861 struct dwarf_file_data *d = *slot;
7862 struct file_info *fi;
7863 const char *f;
7864
7865 gcc_assert (fnad->max_files >= d->emitted_number);
7866
7867 if (! d->emitted_number)
7868 return 1;
7869
7870 gcc_assert (fnad->max_files != fnad->used_files);
7871
7872 fi = fnad->files + fnad->used_files++;
7873
7874 /* Skip all leading "./". */
7875 f = d->filename;
7876 while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
7877 f += 2;
7878
7879 /* Create a new array entry. */
7880 fi->path = f;
7881 fi->length = strlen (f);
7882 fi->file_idx = d;
7883
7884 /* Search for the file name part. */
7885 f = strrchr (f, DIR_SEPARATOR);
7886 #if defined (DIR_SEPARATOR_2)
7887 {
7888 char *g = strrchr (fi->path, DIR_SEPARATOR_2);
7889
7890 if (g != NULL)
7891 {
7892 if (f == NULL || f < g)
7893 f = g;
7894 }
7895 }
7896 #endif
7897
7898 fi->fname = f == NULL ? fi->path : f + 1;
7899 return 1;
7900 }
7901
7902 /* Output the directory table and the file name table. We try to minimize
7903 the total amount of memory needed. A heuristic is used to avoid large
7904 slowdowns with many input files. */
7905
7906 static void
7907 output_file_names (void)
7908 {
7909 struct file_name_acquire_data fnad;
7910 int numfiles;
7911 struct file_info *files;
7912 struct dir_info *dirs;
7913 int *saved;
7914 int *savehere;
7915 int *backmap;
7916 int ndirs;
7917 int idx_offset;
7918 int i;
7919 int idx;
7920
7921 if (!last_emitted_file)
7922 {
7923 dw2_asm_output_data (1, 0, "End directory table");
7924 dw2_asm_output_data (1, 0, "End file name table");
7925 return;
7926 }
7927
7928 numfiles = last_emitted_file->emitted_number;
7929
7930 /* Allocate the various arrays we need. */
7931 files = alloca (numfiles * sizeof (struct file_info));
7932 dirs = alloca (numfiles * sizeof (struct dir_info));
7933
7934 fnad.files = files;
7935 fnad.used_files = 0;
7936 fnad.max_files = numfiles;
7937 htab_traverse (file_table, file_name_acquire, &fnad);
7938 gcc_assert (fnad.used_files == fnad.max_files);
7939
7940 qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
7941
7942 /* Find all the different directories used. */
7943 dirs[0].path = files[0].path;
7944 dirs[0].length = files[0].fname - files[0].path;
7945 dirs[0].prefix = -1;
7946 dirs[0].count = 1;
7947 dirs[0].dir_idx = 0;
7948 files[0].dir_idx = 0;
7949 ndirs = 1;
7950
7951 for (i = 1; i < numfiles; i++)
7952 if (files[i].fname - files[i].path == dirs[ndirs - 1].length
7953 && memcmp (dirs[ndirs - 1].path, files[i].path,
7954 dirs[ndirs - 1].length) == 0)
7955 {
7956 /* Same directory as last entry. */
7957 files[i].dir_idx = ndirs - 1;
7958 ++dirs[ndirs - 1].count;
7959 }
7960 else
7961 {
7962 int j;
7963
7964 /* This is a new directory. */
7965 dirs[ndirs].path = files[i].path;
7966 dirs[ndirs].length = files[i].fname - files[i].path;
7967 dirs[ndirs].count = 1;
7968 dirs[ndirs].dir_idx = ndirs;
7969 files[i].dir_idx = ndirs;
7970
7971 /* Search for a prefix. */
7972 dirs[ndirs].prefix = -1;
7973 for (j = 0; j < ndirs; j++)
7974 if (dirs[j].length < dirs[ndirs].length
7975 && dirs[j].length > 1
7976 && (dirs[ndirs].prefix == -1
7977 || dirs[j].length > dirs[dirs[ndirs].prefix].length)
7978 && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
7979 dirs[ndirs].prefix = j;
7980
7981 ++ndirs;
7982 }
7983
7984 /* Now to the actual work. We have to find a subset of the directories which
7985 allow expressing the file name using references to the directory table
7986 with the least amount of characters. We do not do an exhaustive search
7987 where we would have to check out every combination of every single
7988 possible prefix. Instead we use a heuristic which provides nearly optimal
7989 results in most cases and never is much off. */
7990 saved = alloca (ndirs * sizeof (int));
7991 savehere = alloca (ndirs * sizeof (int));
7992
7993 memset (saved, '\0', ndirs * sizeof (saved[0]));
7994 for (i = 0; i < ndirs; i++)
7995 {
7996 int j;
7997 int total;
7998
7999 /* We can always save some space for the current directory. But this
8000 does not mean it will be enough to justify adding the directory. */
8001 savehere[i] = dirs[i].length;
8002 total = (savehere[i] - saved[i]) * dirs[i].count;
8003
8004 for (j = i + 1; j < ndirs; j++)
8005 {
8006 savehere[j] = 0;
8007 if (saved[j] < dirs[i].length)
8008 {
8009 /* Determine whether the dirs[i] path is a prefix of the
8010 dirs[j] path. */
8011 int k;
8012
8013 k = dirs[j].prefix;
8014 while (k != -1 && k != (int) i)
8015 k = dirs[k].prefix;
8016
8017 if (k == (int) i)
8018 {
8019 /* Yes it is. We can possibly save some memory by
8020 writing the filenames in dirs[j] relative to
8021 dirs[i]. */
8022 savehere[j] = dirs[i].length;
8023 total += (savehere[j] - saved[j]) * dirs[j].count;
8024 }
8025 }
8026 }
8027
8028 /* Check whether we can save enough to justify adding the dirs[i]
8029 directory. */
8030 if (total > dirs[i].length + 1)
8031 {
8032 /* It's worthwhile adding. */
8033 for (j = i; j < ndirs; j++)
8034 if (savehere[j] > 0)
8035 {
8036 /* Remember how much we saved for this directory so far. */
8037 saved[j] = savehere[j];
8038
8039 /* Remember the prefix directory. */
8040 dirs[j].dir_idx = i;
8041 }
8042 }
8043 }
8044
8045 /* Emit the directory name table. */
8046 idx = 1;
8047 idx_offset = dirs[0].length > 0 ? 1 : 0;
8048 for (i = 1 - idx_offset; i < ndirs; i++)
8049 dw2_asm_output_nstring (dirs[i].path, dirs[i].length - 1,
8050 "Directory Entry: 0x%x", i + idx_offset);
8051
8052 dw2_asm_output_data (1, 0, "End directory table");
8053
8054 /* We have to emit them in the order of emitted_number since that's
8055 used in the debug info generation. To do this efficiently we
8056 generate a back-mapping of the indices first. */
8057 backmap = alloca (numfiles * sizeof (int));
8058 for (i = 0; i < numfiles; i++)
8059 backmap[files[i].file_idx->emitted_number - 1] = i;
8060
8061 /* Now write all the file names. */
8062 for (i = 0; i < numfiles; i++)
8063 {
8064 int file_idx = backmap[i];
8065 int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
8066
8067 dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
8068 "File Entry: 0x%x", (unsigned) i + 1);
8069
8070 /* Include directory index. */
8071 dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
8072
8073 /* Modification time. */
8074 dw2_asm_output_data_uleb128 (0, NULL);
8075
8076 /* File length in bytes. */
8077 dw2_asm_output_data_uleb128 (0, NULL);
8078 }
8079
8080 dw2_asm_output_data (1, 0, "End file name table");
8081 }
8082
8083
8084 /* Output the source line number correspondence information. This
8085 information goes into the .debug_line section. */
8086
8087 static void
8088 output_line_info (void)
8089 {
8090 char l1[20], l2[20], p1[20], p2[20];
8091 char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
8092 char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
8093 unsigned opc;
8094 unsigned n_op_args;
8095 unsigned long lt_index;
8096 unsigned long current_line;
8097 long line_offset;
8098 long line_delta;
8099 unsigned long current_file;
8100 unsigned long function;
8101
8102 ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
8103 ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
8104 ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
8105 ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
8106
8107 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8108 dw2_asm_output_data (4, 0xffffffff,
8109 "Initial length escape value indicating 64-bit DWARF extension");
8110 dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
8111 "Length of Source Line Info");
8112 ASM_OUTPUT_LABEL (asm_out_file, l1);
8113
8114 dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
8115 dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
8116 ASM_OUTPUT_LABEL (asm_out_file, p1);
8117
8118 /* Define the architecture-dependent minimum instruction length (in
8119 bytes). In this implementation of DWARF, this field is used for
8120 information purposes only. Since GCC generates assembly language,
8121 we have no a priori knowledge of how many instruction bytes are
8122 generated for each source line, and therefore can use only the
8123 DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
8124 commands. Accordingly, we fix this as `1', which is "correct
8125 enough" for all architectures, and don't let the target override. */
8126 dw2_asm_output_data (1, 1,
8127 "Minimum Instruction Length");
8128
8129 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
8130 "Default is_stmt_start flag");
8131 dw2_asm_output_data (1, DWARF_LINE_BASE,
8132 "Line Base Value (Special Opcodes)");
8133 dw2_asm_output_data (1, DWARF_LINE_RANGE,
8134 "Line Range Value (Special Opcodes)");
8135 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
8136 "Special Opcode Base");
8137
8138 for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
8139 {
8140 switch (opc)
8141 {
8142 case DW_LNS_advance_pc:
8143 case DW_LNS_advance_line:
8144 case DW_LNS_set_file:
8145 case DW_LNS_set_column:
8146 case DW_LNS_fixed_advance_pc:
8147 n_op_args = 1;
8148 break;
8149 default:
8150 n_op_args = 0;
8151 break;
8152 }
8153
8154 dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
8155 opc, n_op_args);
8156 }
8157
8158 /* Write out the information about the files we use. */
8159 output_file_names ();
8160 ASM_OUTPUT_LABEL (asm_out_file, p2);
8161
8162 /* We used to set the address register to the first location in the text
8163 section here, but that didn't accomplish anything since we already
8164 have a line note for the opening brace of the first function. */
8165
8166 /* Generate the line number to PC correspondence table, encoded as
8167 a series of state machine operations. */
8168 current_file = 1;
8169 current_line = 1;
8170
8171 if (cfun && in_cold_section_p)
8172 strcpy (prev_line_label, cfun->cold_section_label);
8173 else
8174 strcpy (prev_line_label, text_section_label);
8175 for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
8176 {
8177 dw_line_info_ref line_info = &line_info_table[lt_index];
8178
8179 #if 0
8180 /* Disable this optimization for now; GDB wants to see two line notes
8181 at the beginning of a function so it can find the end of the
8182 prologue. */
8183
8184 /* Don't emit anything for redundant notes. Just updating the
8185 address doesn't accomplish anything, because we already assume
8186 that anything after the last address is this line. */
8187 if (line_info->dw_line_num == current_line
8188 && line_info->dw_file_num == current_file)
8189 continue;
8190 #endif
8191
8192 /* Emit debug info for the address of the current line.
8193
8194 Unfortunately, we have little choice here currently, and must always
8195 use the most general form. GCC does not know the address delta
8196 itself, so we can't use DW_LNS_advance_pc. Many ports do have length
8197 attributes which will give an upper bound on the address range. We
8198 could perhaps use length attributes to determine when it is safe to
8199 use DW_LNS_fixed_advance_pc. */
8200
8201 ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
8202 if (0)
8203 {
8204 /* This can handle deltas up to 0xffff. This takes 3 bytes. */
8205 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
8206 "DW_LNS_fixed_advance_pc");
8207 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
8208 }
8209 else
8210 {
8211 /* This can handle any delta. This takes
8212 4+DWARF2_ADDR_SIZE bytes. */
8213 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
8214 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
8215 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
8216 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
8217 }
8218
8219 strcpy (prev_line_label, line_label);
8220
8221 /* Emit debug info for the source file of the current line, if
8222 different from the previous line. */
8223 if (line_info->dw_file_num != current_file)
8224 {
8225 current_file = line_info->dw_file_num;
8226 dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
8227 dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
8228 }
8229
8230 /* Emit debug info for the current line number, choosing the encoding
8231 that uses the least amount of space. */
8232 if (line_info->dw_line_num != current_line)
8233 {
8234 line_offset = line_info->dw_line_num - current_line;
8235 line_delta = line_offset - DWARF_LINE_BASE;
8236 current_line = line_info->dw_line_num;
8237 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
8238 /* This can handle deltas from -10 to 234, using the current
8239 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE. This
8240 takes 1 byte. */
8241 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
8242 "line %lu", current_line);
8243 else
8244 {
8245 /* This can handle any delta. This takes at least 4 bytes,
8246 depending on the value being encoded. */
8247 dw2_asm_output_data (1, DW_LNS_advance_line,
8248 "advance to line %lu", current_line);
8249 dw2_asm_output_data_sleb128 (line_offset, NULL);
8250 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8251 }
8252 }
8253 else
8254 /* We still need to start a new row, so output a copy insn. */
8255 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8256 }
8257
8258 /* Emit debug info for the address of the end of the function. */
8259 if (0)
8260 {
8261 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
8262 "DW_LNS_fixed_advance_pc");
8263 dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
8264 }
8265 else
8266 {
8267 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
8268 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
8269 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
8270 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
8271 }
8272
8273 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
8274 dw2_asm_output_data_uleb128 (1, NULL);
8275 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
8276
8277 function = 0;
8278 current_file = 1;
8279 current_line = 1;
8280 for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
8281 {
8282 dw_separate_line_info_ref line_info
8283 = &separate_line_info_table[lt_index];
8284
8285 #if 0
8286 /* Don't emit anything for redundant notes. */
8287 if (line_info->dw_line_num == current_line
8288 && line_info->dw_file_num == current_file
8289 && line_info->function == function)
8290 goto cont;
8291 #endif
8292
8293 /* Emit debug info for the address of the current line. If this is
8294 a new function, or the first line of a function, then we need
8295 to handle it differently. */
8296 ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
8297 lt_index);
8298 if (function != line_info->function)
8299 {
8300 function = line_info->function;
8301
8302 /* Set the address register to the first line in the function. */
8303 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
8304 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
8305 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
8306 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
8307 }
8308 else
8309 {
8310 /* ??? See the DW_LNS_advance_pc comment above. */
8311 if (0)
8312 {
8313 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
8314 "DW_LNS_fixed_advance_pc");
8315 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
8316 }
8317 else
8318 {
8319 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
8320 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
8321 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
8322 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
8323 }
8324 }
8325
8326 strcpy (prev_line_label, line_label);
8327
8328 /* Emit debug info for the source file of the current line, if
8329 different from the previous line. */
8330 if (line_info->dw_file_num != current_file)
8331 {
8332 current_file = line_info->dw_file_num;
8333 dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
8334 dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
8335 }
8336
8337 /* Emit debug info for the current line number, choosing the encoding
8338 that uses the least amount of space. */
8339 if (line_info->dw_line_num != current_line)
8340 {
8341 line_offset = line_info->dw_line_num - current_line;
8342 line_delta = line_offset - DWARF_LINE_BASE;
8343 current_line = line_info->dw_line_num;
8344 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
8345 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
8346 "line %lu", current_line);
8347 else
8348 {
8349 dw2_asm_output_data (1, DW_LNS_advance_line,
8350 "advance to line %lu", current_line);
8351 dw2_asm_output_data_sleb128 (line_offset, NULL);
8352 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8353 }
8354 }
8355 else
8356 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8357
8358 #if 0
8359 cont:
8360 #endif
8361
8362 lt_index++;
8363
8364 /* If we're done with a function, end its sequence. */
8365 if (lt_index == separate_line_info_table_in_use
8366 || separate_line_info_table[lt_index].function != function)
8367 {
8368 current_file = 1;
8369 current_line = 1;
8370
8371 /* Emit debug info for the address of the end of the function. */
8372 ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
8373 if (0)
8374 {
8375 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
8376 "DW_LNS_fixed_advance_pc");
8377 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
8378 }
8379 else
8380 {
8381 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
8382 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
8383 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
8384 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
8385 }
8386
8387 /* Output the marker for the end of this sequence. */
8388 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
8389 dw2_asm_output_data_uleb128 (1, NULL);
8390 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
8391 }
8392 }
8393
8394 /* Output the marker for the end of the line number info. */
8395 ASM_OUTPUT_LABEL (asm_out_file, l2);
8396 }
8397 \f
8398 /* Given a pointer to a tree node for some base type, return a pointer to
8399 a DIE that describes the given type.
8400
8401 This routine must only be called for GCC type nodes that correspond to
8402 Dwarf base (fundamental) types. */
8403
8404 static dw_die_ref
8405 base_type_die (tree type)
8406 {
8407 dw_die_ref base_type_result;
8408 enum dwarf_type encoding;
8409
8410 if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
8411 return 0;
8412
8413 switch (TREE_CODE (type))
8414 {
8415 case INTEGER_TYPE:
8416 if (TYPE_STRING_FLAG (type))
8417 {
8418 if (TYPE_UNSIGNED (type))
8419 encoding = DW_ATE_unsigned_char;
8420 else
8421 encoding = DW_ATE_signed_char;
8422 }
8423 else if (TYPE_UNSIGNED (type))
8424 encoding = DW_ATE_unsigned;
8425 else
8426 encoding = DW_ATE_signed;
8427 break;
8428
8429 case REAL_TYPE:
8430 if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
8431 encoding = DW_ATE_decimal_float;
8432 else
8433 encoding = DW_ATE_float;
8434 break;
8435
8436 case FIXED_POINT_TYPE:
8437 if (TYPE_UNSIGNED (type))
8438 encoding = DW_ATE_unsigned_fixed;
8439 else
8440 encoding = DW_ATE_signed_fixed;
8441 break;
8442
8443 /* Dwarf2 doesn't know anything about complex ints, so use
8444 a user defined type for it. */
8445 case COMPLEX_TYPE:
8446 if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
8447 encoding = DW_ATE_complex_float;
8448 else
8449 encoding = DW_ATE_lo_user;
8450 break;
8451
8452 case BOOLEAN_TYPE:
8453 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
8454 encoding = DW_ATE_boolean;
8455 break;
8456
8457 default:
8458 /* No other TREE_CODEs are Dwarf fundamental types. */
8459 gcc_unreachable ();
8460 }
8461
8462 base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
8463
8464 /* This probably indicates a bug. */
8465 if (! TYPE_NAME (type))
8466 add_name_attribute (base_type_result, "__unknown__");
8467
8468 add_AT_unsigned (base_type_result, DW_AT_byte_size,
8469 int_size_in_bytes (type));
8470 add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
8471
8472 return base_type_result;
8473 }
8474
8475 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
8476 given input type is a Dwarf "fundamental" type. Otherwise return null. */
8477
8478 static inline int
8479 is_base_type (tree type)
8480 {
8481 switch (TREE_CODE (type))
8482 {
8483 case ERROR_MARK:
8484 case VOID_TYPE:
8485 case INTEGER_TYPE:
8486 case REAL_TYPE:
8487 case FIXED_POINT_TYPE:
8488 case COMPLEX_TYPE:
8489 case BOOLEAN_TYPE:
8490 return 1;
8491
8492 case ARRAY_TYPE:
8493 case RECORD_TYPE:
8494 case UNION_TYPE:
8495 case QUAL_UNION_TYPE:
8496 case ENUMERAL_TYPE:
8497 case FUNCTION_TYPE:
8498 case METHOD_TYPE:
8499 case POINTER_TYPE:
8500 case REFERENCE_TYPE:
8501 case OFFSET_TYPE:
8502 case LANG_TYPE:
8503 case VECTOR_TYPE:
8504 return 0;
8505
8506 default:
8507 gcc_unreachable ();
8508 }
8509
8510 return 0;
8511 }
8512
8513 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
8514 node, return the size in bits for the type if it is a constant, or else
8515 return the alignment for the type if the type's size is not constant, or
8516 else return BITS_PER_WORD if the type actually turns out to be an
8517 ERROR_MARK node. */
8518
8519 static inline unsigned HOST_WIDE_INT
8520 simple_type_size_in_bits (const_tree type)
8521 {
8522 if (TREE_CODE (type) == ERROR_MARK)
8523 return BITS_PER_WORD;
8524 else if (TYPE_SIZE (type) == NULL_TREE)
8525 return 0;
8526 else if (host_integerp (TYPE_SIZE (type), 1))
8527 return tree_low_cst (TYPE_SIZE (type), 1);
8528 else
8529 return TYPE_ALIGN (type);
8530 }
8531
8532 /* Return true if the debug information for the given type should be
8533 emitted as a subrange type. */
8534
8535 static inline bool
8536 is_subrange_type (const_tree type)
8537 {
8538 tree subtype = TREE_TYPE (type);
8539
8540 /* Subrange types are identified by the fact that they are integer
8541 types, and that they have a subtype which is either an integer type
8542 or an enumeral type. */
8543
8544 if (TREE_CODE (type) != INTEGER_TYPE
8545 || subtype == NULL_TREE)
8546 return false;
8547
8548 if (TREE_CODE (subtype) != INTEGER_TYPE
8549 && TREE_CODE (subtype) != ENUMERAL_TYPE)
8550 return false;
8551
8552 if (TREE_CODE (type) == TREE_CODE (subtype)
8553 && int_size_in_bytes (type) == int_size_in_bytes (subtype)
8554 && TYPE_MIN_VALUE (type) != NULL
8555 && TYPE_MIN_VALUE (subtype) != NULL
8556 && tree_int_cst_equal (TYPE_MIN_VALUE (type), TYPE_MIN_VALUE (subtype))
8557 && TYPE_MAX_VALUE (type) != NULL
8558 && TYPE_MAX_VALUE (subtype) != NULL
8559 && tree_int_cst_equal (TYPE_MAX_VALUE (type), TYPE_MAX_VALUE (subtype)))
8560 {
8561 /* The type and its subtype have the same representation. If in
8562 addition the two types also have the same name, then the given
8563 type is not a subrange type, but rather a plain base type. */
8564 /* FIXME: brobecker/2004-03-22:
8565 Sizetype INTEGER_CSTs nodes are canonicalized. It should
8566 therefore be sufficient to check the TYPE_SIZE node pointers
8567 rather than checking the actual size. Unfortunately, we have
8568 found some cases, such as in the Ada "integer" type, where
8569 this is not the case. Until this problem is solved, we need to
8570 keep checking the actual size. */
8571 tree type_name = TYPE_NAME (type);
8572 tree subtype_name = TYPE_NAME (subtype);
8573
8574 if (type_name != NULL && TREE_CODE (type_name) == TYPE_DECL)
8575 type_name = DECL_NAME (type_name);
8576
8577 if (subtype_name != NULL && TREE_CODE (subtype_name) == TYPE_DECL)
8578 subtype_name = DECL_NAME (subtype_name);
8579
8580 if (type_name == subtype_name)
8581 return false;
8582 }
8583
8584 return true;
8585 }
8586
8587 /* Given a pointer to a tree node for a subrange type, return a pointer
8588 to a DIE that describes the given type. */
8589
8590 static dw_die_ref
8591 subrange_type_die (tree type, dw_die_ref context_die)
8592 {
8593 dw_die_ref subrange_die;
8594 const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
8595
8596 if (context_die == NULL)
8597 context_die = comp_unit_die;
8598
8599 subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
8600
8601 if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
8602 {
8603 /* The size of the subrange type and its base type do not match,
8604 so we need to generate a size attribute for the subrange type. */
8605 add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
8606 }
8607
8608 if (TYPE_MIN_VALUE (type) != NULL)
8609 add_bound_info (subrange_die, DW_AT_lower_bound,
8610 TYPE_MIN_VALUE (type));
8611 if (TYPE_MAX_VALUE (type) != NULL)
8612 add_bound_info (subrange_die, DW_AT_upper_bound,
8613 TYPE_MAX_VALUE (type));
8614
8615 return subrange_die;
8616 }
8617
8618 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
8619 entry that chains various modifiers in front of the given type. */
8620
8621 static dw_die_ref
8622 modified_type_die (tree type, int is_const_type, int is_volatile_type,
8623 dw_die_ref context_die)
8624 {
8625 enum tree_code code = TREE_CODE (type);
8626 dw_die_ref mod_type_die;
8627 dw_die_ref sub_die = NULL;
8628 tree item_type = NULL;
8629 tree qualified_type;
8630 tree name;
8631
8632 if (code == ERROR_MARK)
8633 return NULL;
8634
8635 /* See if we already have the appropriately qualified variant of
8636 this type. */
8637 qualified_type
8638 = get_qualified_type (type,
8639 ((is_const_type ? TYPE_QUAL_CONST : 0)
8640 | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
8641
8642 /* If we do, then we can just use its DIE, if it exists. */
8643 if (qualified_type)
8644 {
8645 mod_type_die = lookup_type_die (qualified_type);
8646 if (mod_type_die)
8647 return mod_type_die;
8648 }
8649
8650 name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
8651
8652 /* Handle C typedef types. */
8653 if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name))
8654 {
8655 tree dtype = TREE_TYPE (name);
8656
8657 if (qualified_type == dtype)
8658 {
8659 /* For a named type, use the typedef. */
8660 gen_type_die (qualified_type, context_die);
8661 return lookup_type_die (qualified_type);
8662 }
8663 else if (is_const_type < TYPE_READONLY (dtype)
8664 || is_volatile_type < TYPE_VOLATILE (dtype)
8665 || (is_const_type <= TYPE_READONLY (dtype)
8666 && is_volatile_type <= TYPE_VOLATILE (dtype)
8667 && DECL_ORIGINAL_TYPE (name) != type))
8668 /* cv-unqualified version of named type. Just use the unnamed
8669 type to which it refers. */
8670 return modified_type_die (DECL_ORIGINAL_TYPE (name),
8671 is_const_type, is_volatile_type,
8672 context_die);
8673 /* Else cv-qualified version of named type; fall through. */
8674 }
8675
8676 if (is_const_type)
8677 {
8678 mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
8679 sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
8680 }
8681 else if (is_volatile_type)
8682 {
8683 mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
8684 sub_die = modified_type_die (type, 0, 0, context_die);
8685 }
8686 else if (code == POINTER_TYPE)
8687 {
8688 mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
8689 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8690 simple_type_size_in_bits (type) / BITS_PER_UNIT);
8691 item_type = TREE_TYPE (type);
8692 }
8693 else if (code == REFERENCE_TYPE)
8694 {
8695 mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
8696 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8697 simple_type_size_in_bits (type) / BITS_PER_UNIT);
8698 item_type = TREE_TYPE (type);
8699 }
8700 else if (is_subrange_type (type))
8701 {
8702 mod_type_die = subrange_type_die (type, context_die);
8703 item_type = TREE_TYPE (type);
8704 }
8705 else if (is_base_type (type))
8706 mod_type_die = base_type_die (type);
8707 else
8708 {
8709 gen_type_die (type, context_die);
8710
8711 /* We have to get the type_main_variant here (and pass that to the
8712 `lookup_type_die' routine) because the ..._TYPE node we have
8713 might simply be a *copy* of some original type node (where the
8714 copy was created to help us keep track of typedef names) and
8715 that copy might have a different TYPE_UID from the original
8716 ..._TYPE node. */
8717 if (TREE_CODE (type) != VECTOR_TYPE)
8718 return lookup_type_die (type_main_variant (type));
8719 else
8720 /* Vectors have the debugging information in the type,
8721 not the main variant. */
8722 return lookup_type_die (type);
8723 }
8724
8725 /* Builtin types don't have a DECL_ORIGINAL_TYPE. For those,
8726 don't output a DW_TAG_typedef, since there isn't one in the
8727 user's program; just attach a DW_AT_name to the type. */
8728 if (name
8729 && (TREE_CODE (name) != TYPE_DECL
8730 || (TREE_TYPE (name) == qualified_type && DECL_NAME (name))))
8731 {
8732 if (TREE_CODE (name) == TYPE_DECL)
8733 /* Could just call add_name_and_src_coords_attributes here,
8734 but since this is a builtin type it doesn't have any
8735 useful source coordinates anyway. */
8736 name = DECL_NAME (name);
8737 add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
8738 }
8739
8740 if (qualified_type)
8741 equate_type_number_to_die (qualified_type, mod_type_die);
8742
8743 if (item_type)
8744 /* We must do this after the equate_type_number_to_die call, in case
8745 this is a recursive type. This ensures that the modified_type_die
8746 recursion will terminate even if the type is recursive. Recursive
8747 types are possible in Ada. */
8748 sub_die = modified_type_die (item_type,
8749 TYPE_READONLY (item_type),
8750 TYPE_VOLATILE (item_type),
8751 context_die);
8752
8753 if (sub_die != NULL)
8754 add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
8755
8756 return mod_type_die;
8757 }
8758
8759 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
8760 an enumerated type. */
8761
8762 static inline int
8763 type_is_enum (const_tree type)
8764 {
8765 return TREE_CODE (type) == ENUMERAL_TYPE;
8766 }
8767
8768 /* Return the DBX register number described by a given RTL node. */
8769
8770 static unsigned int
8771 dbx_reg_number (const_rtx rtl)
8772 {
8773 unsigned regno = REGNO (rtl);
8774
8775 gcc_assert (regno < FIRST_PSEUDO_REGISTER);
8776
8777 #ifdef LEAF_REG_REMAP
8778 if (current_function_uses_only_leaf_regs)
8779 {
8780 int leaf_reg = LEAF_REG_REMAP (regno);
8781 if (leaf_reg != -1)
8782 regno = (unsigned) leaf_reg;
8783 }
8784 #endif
8785
8786 return DBX_REGISTER_NUMBER (regno);
8787 }
8788
8789 /* Optionally add a DW_OP_piece term to a location description expression.
8790 DW_OP_piece is only added if the location description expression already
8791 doesn't end with DW_OP_piece. */
8792
8793 static void
8794 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
8795 {
8796 dw_loc_descr_ref loc;
8797
8798 if (*list_head != NULL)
8799 {
8800 /* Find the end of the chain. */
8801 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
8802 ;
8803
8804 if (loc->dw_loc_opc != DW_OP_piece)
8805 loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
8806 }
8807 }
8808
8809 /* Return a location descriptor that designates a machine register or
8810 zero if there is none. */
8811
8812 static dw_loc_descr_ref
8813 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
8814 {
8815 rtx regs;
8816
8817 if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
8818 return 0;
8819
8820 regs = targetm.dwarf_register_span (rtl);
8821
8822 if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
8823 return multiple_reg_loc_descriptor (rtl, regs, initialized);
8824 else
8825 return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
8826 }
8827
8828 /* Return a location descriptor that designates a machine register for
8829 a given hard register number. */
8830
8831 static dw_loc_descr_ref
8832 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
8833 {
8834 dw_loc_descr_ref reg_loc_descr;
8835 if (regno <= 31)
8836 reg_loc_descr = new_loc_descr (DW_OP_reg0 + regno, 0, 0);
8837 else
8838 reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
8839
8840 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
8841 add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
8842
8843 return reg_loc_descr;
8844 }
8845
8846 /* Given an RTL of a register, return a location descriptor that
8847 designates a value that spans more than one register. */
8848
8849 static dw_loc_descr_ref
8850 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
8851 enum var_init_status initialized)
8852 {
8853 int nregs, size, i;
8854 unsigned reg;
8855 dw_loc_descr_ref loc_result = NULL;
8856
8857 reg = REGNO (rtl);
8858 #ifdef LEAF_REG_REMAP
8859 if (current_function_uses_only_leaf_regs)
8860 {
8861 int leaf_reg = LEAF_REG_REMAP (reg);
8862 if (leaf_reg != -1)
8863 reg = (unsigned) leaf_reg;
8864 }
8865 #endif
8866 gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
8867 nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
8868
8869 /* Simple, contiguous registers. */
8870 if (regs == NULL_RTX)
8871 {
8872 size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
8873
8874 loc_result = NULL;
8875 while (nregs--)
8876 {
8877 dw_loc_descr_ref t;
8878
8879 t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
8880 VAR_INIT_STATUS_INITIALIZED);
8881 add_loc_descr (&loc_result, t);
8882 add_loc_descr_op_piece (&loc_result, size);
8883 ++reg;
8884 }
8885 return loc_result;
8886 }
8887
8888 /* Now onto stupid register sets in non contiguous locations. */
8889
8890 gcc_assert (GET_CODE (regs) == PARALLEL);
8891
8892 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8893 loc_result = NULL;
8894
8895 for (i = 0; i < XVECLEN (regs, 0); ++i)
8896 {
8897 dw_loc_descr_ref t;
8898
8899 t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
8900 VAR_INIT_STATUS_INITIALIZED);
8901 add_loc_descr (&loc_result, t);
8902 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8903 add_loc_descr_op_piece (&loc_result, size);
8904 }
8905
8906 if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
8907 add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
8908 return loc_result;
8909 }
8910
8911 /* Return a location descriptor that designates a constant. */
8912
8913 static dw_loc_descr_ref
8914 int_loc_descriptor (HOST_WIDE_INT i)
8915 {
8916 enum dwarf_location_atom op;
8917
8918 /* Pick the smallest representation of a constant, rather than just
8919 defaulting to the LEB encoding. */
8920 if (i >= 0)
8921 {
8922 if (i <= 31)
8923 op = DW_OP_lit0 + i;
8924 else if (i <= 0xff)
8925 op = DW_OP_const1u;
8926 else if (i <= 0xffff)
8927 op = DW_OP_const2u;
8928 else if (HOST_BITS_PER_WIDE_INT == 32
8929 || i <= 0xffffffff)
8930 op = DW_OP_const4u;
8931 else
8932 op = DW_OP_constu;
8933 }
8934 else
8935 {
8936 if (i >= -0x80)
8937 op = DW_OP_const1s;
8938 else if (i >= -0x8000)
8939 op = DW_OP_const2s;
8940 else if (HOST_BITS_PER_WIDE_INT == 32
8941 || i >= -0x80000000)
8942 op = DW_OP_const4s;
8943 else
8944 op = DW_OP_consts;
8945 }
8946
8947 return new_loc_descr (op, i, 0);
8948 }
8949
8950 /* Return a location descriptor that designates a base+offset location. */
8951
8952 static dw_loc_descr_ref
8953 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
8954 enum var_init_status initialized)
8955 {
8956 unsigned int regno;
8957 dw_loc_descr_ref result;
8958
8959 /* We only use "frame base" when we're sure we're talking about the
8960 post-prologue local stack frame. We do this by *not* running
8961 register elimination until this point, and recognizing the special
8962 argument pointer and soft frame pointer rtx's. */
8963 if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
8964 {
8965 rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
8966
8967 if (elim != reg)
8968 {
8969 if (GET_CODE (elim) == PLUS)
8970 {
8971 offset += INTVAL (XEXP (elim, 1));
8972 elim = XEXP (elim, 0);
8973 }
8974 gcc_assert (elim == (frame_pointer_needed ? hard_frame_pointer_rtx
8975 : stack_pointer_rtx));
8976 offset += frame_pointer_fb_offset;
8977
8978 return new_loc_descr (DW_OP_fbreg, offset, 0);
8979 }
8980 }
8981
8982 regno = dbx_reg_number (reg);
8983 if (regno <= 31)
8984 result = new_loc_descr (DW_OP_breg0 + regno, offset, 0);
8985 else
8986 result = new_loc_descr (DW_OP_bregx, regno, offset);
8987
8988 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
8989 add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
8990
8991 return result;
8992 }
8993
8994 /* Return true if this RTL expression describes a base+offset calculation. */
8995
8996 static inline int
8997 is_based_loc (const_rtx rtl)
8998 {
8999 return (GET_CODE (rtl) == PLUS
9000 && ((REG_P (XEXP (rtl, 0))
9001 && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
9002 && GET_CODE (XEXP (rtl, 1)) == CONST_INT)));
9003 }
9004
9005 /* Return a descriptor that describes the concatenation of N locations
9006 used to form the address of a memory location. */
9007
9008 static dw_loc_descr_ref
9009 concatn_mem_loc_descriptor (rtx concatn, enum machine_mode mode,
9010 enum var_init_status initialized)
9011 {
9012 unsigned int i;
9013 dw_loc_descr_ref cc_loc_result = NULL;
9014 unsigned int n = XVECLEN (concatn, 0);
9015
9016 for (i = 0; i < n; ++i)
9017 {
9018 dw_loc_descr_ref ref;
9019 rtx x = XVECEXP (concatn, 0, i);
9020
9021 ref = mem_loc_descriptor (x, mode, VAR_INIT_STATUS_INITIALIZED);
9022 if (ref == NULL)
9023 return NULL;
9024
9025 add_loc_descr (&cc_loc_result, ref);
9026 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
9027 }
9028
9029 if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
9030 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
9031
9032 return cc_loc_result;
9033 }
9034
9035 /* The following routine converts the RTL for a variable or parameter
9036 (resident in memory) into an equivalent Dwarf representation of a
9037 mechanism for getting the address of that same variable onto the top of a
9038 hypothetical "address evaluation" stack.
9039
9040 When creating memory location descriptors, we are effectively transforming
9041 the RTL for a memory-resident object into its Dwarf postfix expression
9042 equivalent. This routine recursively descends an RTL tree, turning
9043 it into Dwarf postfix code as it goes.
9044
9045 MODE is the mode of the memory reference, needed to handle some
9046 autoincrement addressing modes.
9047
9048 CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
9049 location list for RTL.
9050
9051 Return 0 if we can't represent the location. */
9052
9053 static dw_loc_descr_ref
9054 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
9055 enum var_init_status initialized)
9056 {
9057 dw_loc_descr_ref mem_loc_result = NULL;
9058 enum dwarf_location_atom op;
9059
9060 /* Note that for a dynamically sized array, the location we will generate a
9061 description of here will be the lowest numbered location which is
9062 actually within the array. That's *not* necessarily the same as the
9063 zeroth element of the array. */
9064
9065 rtl = targetm.delegitimize_address (rtl);
9066
9067 switch (GET_CODE (rtl))
9068 {
9069 case POST_INC:
9070 case POST_DEC:
9071 case POST_MODIFY:
9072 /* POST_INC and POST_DEC can be handled just like a SUBREG. So we
9073 just fall into the SUBREG code. */
9074
9075 /* ... fall through ... */
9076
9077 case SUBREG:
9078 /* The case of a subreg may arise when we have a local (register)
9079 variable or a formal (register) parameter which doesn't quite fill
9080 up an entire register. For now, just assume that it is
9081 legitimate to make the Dwarf info refer to the whole register which
9082 contains the given subreg. */
9083 rtl = XEXP (rtl, 0);
9084
9085 /* ... fall through ... */
9086
9087 case REG:
9088 /* Whenever a register number forms a part of the description of the
9089 method for calculating the (dynamic) address of a memory resident
9090 object, DWARF rules require the register number be referred to as
9091 a "base register". This distinction is not based in any way upon
9092 what category of register the hardware believes the given register
9093 belongs to. This is strictly DWARF terminology we're dealing with
9094 here. Note that in cases where the location of a memory-resident
9095 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
9096 OP_CONST (0)) the actual DWARF location descriptor that we generate
9097 may just be OP_BASEREG (basereg). This may look deceptively like
9098 the object in question was allocated to a register (rather than in
9099 memory) so DWARF consumers need to be aware of the subtle
9100 distinction between OP_REG and OP_BASEREG. */
9101 if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
9102 mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
9103 break;
9104
9105 case MEM:
9106 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
9107 VAR_INIT_STATUS_INITIALIZED);
9108 if (mem_loc_result != 0)
9109 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
9110 break;
9111
9112 case LO_SUM:
9113 rtl = XEXP (rtl, 1);
9114
9115 /* ... fall through ... */
9116
9117 case LABEL_REF:
9118 /* Some ports can transform a symbol ref into a label ref, because
9119 the symbol ref is too far away and has to be dumped into a constant
9120 pool. */
9121 case CONST:
9122 case SYMBOL_REF:
9123 /* Alternatively, the symbol in the constant pool might be referenced
9124 by a different symbol. */
9125 if (GET_CODE (rtl) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (rtl))
9126 {
9127 bool marked;
9128 rtx tmp = get_pool_constant_mark (rtl, &marked);
9129
9130 if (GET_CODE (tmp) == SYMBOL_REF)
9131 {
9132 rtl = tmp;
9133 if (CONSTANT_POOL_ADDRESS_P (tmp))
9134 get_pool_constant_mark (tmp, &marked);
9135 else
9136 marked = true;
9137 }
9138
9139 /* If all references to this pool constant were optimized away,
9140 it was not output and thus we can't represent it.
9141 FIXME: might try to use DW_OP_const_value here, though
9142 DW_OP_piece complicates it. */
9143 if (!marked)
9144 return 0;
9145 }
9146
9147 mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
9148 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
9149 mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
9150 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
9151 break;
9152
9153 case PRE_MODIFY:
9154 /* Extract the PLUS expression nested inside and fall into
9155 PLUS code below. */
9156 rtl = XEXP (rtl, 1);
9157 goto plus;
9158
9159 case PRE_INC:
9160 case PRE_DEC:
9161 /* Turn these into a PLUS expression and fall into the PLUS code
9162 below. */
9163 rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
9164 GEN_INT (GET_CODE (rtl) == PRE_INC
9165 ? GET_MODE_UNIT_SIZE (mode)
9166 : -GET_MODE_UNIT_SIZE (mode)));
9167
9168 /* ... fall through ... */
9169
9170 case PLUS:
9171 plus:
9172 if (is_based_loc (rtl))
9173 mem_loc_result = based_loc_descr (XEXP (rtl, 0),
9174 INTVAL (XEXP (rtl, 1)),
9175 VAR_INIT_STATUS_INITIALIZED);
9176 else
9177 {
9178 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
9179 VAR_INIT_STATUS_INITIALIZED);
9180 if (mem_loc_result == 0)
9181 break;
9182
9183 if (GET_CODE (XEXP (rtl, 1)) == CONST_INT
9184 && INTVAL (XEXP (rtl, 1)) >= 0)
9185 add_loc_descr (&mem_loc_result,
9186 new_loc_descr (DW_OP_plus_uconst,
9187 INTVAL (XEXP (rtl, 1)), 0));
9188 else
9189 {
9190 add_loc_descr (&mem_loc_result,
9191 mem_loc_descriptor (XEXP (rtl, 1), mode,
9192 VAR_INIT_STATUS_INITIALIZED));
9193 add_loc_descr (&mem_loc_result,
9194 new_loc_descr (DW_OP_plus, 0, 0));
9195 }
9196 }
9197 break;
9198
9199 /* If a pseudo-reg is optimized away, it is possible for it to
9200 be replaced with a MEM containing a multiply or shift. */
9201 case MULT:
9202 op = DW_OP_mul;
9203 goto do_binop;
9204
9205 case ASHIFT:
9206 op = DW_OP_shl;
9207 goto do_binop;
9208
9209 case ASHIFTRT:
9210 op = DW_OP_shra;
9211 goto do_binop;
9212
9213 case LSHIFTRT:
9214 op = DW_OP_shr;
9215 goto do_binop;
9216
9217 do_binop:
9218 {
9219 dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
9220 VAR_INIT_STATUS_INITIALIZED);
9221 dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
9222 VAR_INIT_STATUS_INITIALIZED);
9223
9224 if (op0 == 0 || op1 == 0)
9225 break;
9226
9227 mem_loc_result = op0;
9228 add_loc_descr (&mem_loc_result, op1);
9229 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
9230 break;
9231 }
9232
9233 case CONST_INT:
9234 mem_loc_result = int_loc_descriptor (INTVAL (rtl));
9235 break;
9236
9237 case CONCATN:
9238 mem_loc_result = concatn_mem_loc_descriptor (rtl, mode,
9239 VAR_INIT_STATUS_INITIALIZED);
9240 break;
9241
9242 default:
9243 gcc_unreachable ();
9244 }
9245
9246 if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
9247 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
9248
9249 return mem_loc_result;
9250 }
9251
9252 /* Return a descriptor that describes the concatenation of two locations.
9253 This is typically a complex variable. */
9254
9255 static dw_loc_descr_ref
9256 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
9257 {
9258 dw_loc_descr_ref cc_loc_result = NULL;
9259 dw_loc_descr_ref x0_ref = loc_descriptor (x0, VAR_INIT_STATUS_INITIALIZED);
9260 dw_loc_descr_ref x1_ref = loc_descriptor (x1, VAR_INIT_STATUS_INITIALIZED);
9261
9262 if (x0_ref == 0 || x1_ref == 0)
9263 return 0;
9264
9265 cc_loc_result = x0_ref;
9266 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
9267
9268 add_loc_descr (&cc_loc_result, x1_ref);
9269 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
9270
9271 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
9272 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
9273
9274 return cc_loc_result;
9275 }
9276
9277 /* Return a descriptor that describes the concatenation of N
9278 locations. */
9279
9280 static dw_loc_descr_ref
9281 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
9282 {
9283 unsigned int i;
9284 dw_loc_descr_ref cc_loc_result = NULL;
9285 unsigned int n = XVECLEN (concatn, 0);
9286
9287 for (i = 0; i < n; ++i)
9288 {
9289 dw_loc_descr_ref ref;
9290 rtx x = XVECEXP (concatn, 0, i);
9291
9292 ref = loc_descriptor (x, VAR_INIT_STATUS_INITIALIZED);
9293 if (ref == NULL)
9294 return NULL;
9295
9296 add_loc_descr (&cc_loc_result, ref);
9297 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
9298 }
9299
9300 if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
9301 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
9302
9303 return cc_loc_result;
9304 }
9305
9306 /* Output a proper Dwarf location descriptor for a variable or parameter
9307 which is either allocated in a register or in a memory location. For a
9308 register, we just generate an OP_REG and the register number. For a
9309 memory location we provide a Dwarf postfix expression describing how to
9310 generate the (dynamic) address of the object onto the address stack.
9311
9312 If we don't know how to describe it, return 0. */
9313
9314 static dw_loc_descr_ref
9315 loc_descriptor (rtx rtl, enum var_init_status initialized)
9316 {
9317 dw_loc_descr_ref loc_result = NULL;
9318
9319 switch (GET_CODE (rtl))
9320 {
9321 case SUBREG:
9322 /* The case of a subreg may arise when we have a local (register)
9323 variable or a formal (register) parameter which doesn't quite fill
9324 up an entire register. For now, just assume that it is
9325 legitimate to make the Dwarf info refer to the whole register which
9326 contains the given subreg. */
9327 rtl = SUBREG_REG (rtl);
9328
9329 /* ... fall through ... */
9330
9331 case REG:
9332 loc_result = reg_loc_descriptor (rtl, initialized);
9333 break;
9334
9335 case MEM:
9336 loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
9337 initialized);
9338 break;
9339
9340 case CONCAT:
9341 loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
9342 initialized);
9343 break;
9344
9345 case CONCATN:
9346 loc_result = concatn_loc_descriptor (rtl, initialized);
9347 break;
9348
9349 case VAR_LOCATION:
9350 /* Single part. */
9351 if (GET_CODE (XEXP (rtl, 1)) != PARALLEL)
9352 {
9353 loc_result = loc_descriptor (XEXP (XEXP (rtl, 1), 0), initialized);
9354 break;
9355 }
9356
9357 rtl = XEXP (rtl, 1);
9358 /* FALLTHRU */
9359
9360 case PARALLEL:
9361 {
9362 rtvec par_elems = XVEC (rtl, 0);
9363 int num_elem = GET_NUM_ELEM (par_elems);
9364 enum machine_mode mode;
9365 int i;
9366
9367 /* Create the first one, so we have something to add to. */
9368 loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
9369 initialized);
9370 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
9371 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
9372 for (i = 1; i < num_elem; i++)
9373 {
9374 dw_loc_descr_ref temp;
9375
9376 temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
9377 initialized);
9378 add_loc_descr (&loc_result, temp);
9379 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
9380 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
9381 }
9382 }
9383 break;
9384
9385 default:
9386 gcc_unreachable ();
9387 }
9388
9389 return loc_result;
9390 }
9391
9392 /* Similar, but generate the descriptor from trees instead of rtl. This comes
9393 up particularly with variable length arrays. WANT_ADDRESS is 2 if this is
9394 a top-level invocation of loc_descriptor_from_tree; is 1 if this is not a
9395 top-level invocation, and we require the address of LOC; is 0 if we require
9396 the value of LOC. */
9397
9398 static dw_loc_descr_ref
9399 loc_descriptor_from_tree_1 (tree loc, int want_address)
9400 {
9401 dw_loc_descr_ref ret, ret1;
9402 int have_address = 0;
9403 enum dwarf_location_atom op;
9404
9405 /* ??? Most of the time we do not take proper care for sign/zero
9406 extending the values properly. Hopefully this won't be a real
9407 problem... */
9408
9409 switch (TREE_CODE (loc))
9410 {
9411 case ERROR_MARK:
9412 return 0;
9413
9414 case PLACEHOLDER_EXPR:
9415 /* This case involves extracting fields from an object to determine the
9416 position of other fields. We don't try to encode this here. The
9417 only user of this is Ada, which encodes the needed information using
9418 the names of types. */
9419 return 0;
9420
9421 case CALL_EXPR:
9422 return 0;
9423
9424 case PREINCREMENT_EXPR:
9425 case PREDECREMENT_EXPR:
9426 case POSTINCREMENT_EXPR:
9427 case POSTDECREMENT_EXPR:
9428 /* There are no opcodes for these operations. */
9429 return 0;
9430
9431 case ADDR_EXPR:
9432 /* If we already want an address, there's nothing we can do. */
9433 if (want_address)
9434 return 0;
9435
9436 /* Otherwise, process the argument and look for the address. */
9437 return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 1);
9438
9439 case VAR_DECL:
9440 if (DECL_THREAD_LOCAL_P (loc))
9441 {
9442 rtx rtl;
9443
9444 /* If this is not defined, we have no way to emit the data. */
9445 if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
9446 return 0;
9447
9448 /* The way DW_OP_GNU_push_tls_address is specified, we can only
9449 look up addresses of objects in the current module. */
9450 if (DECL_EXTERNAL (loc))
9451 return 0;
9452
9453 rtl = rtl_for_decl_location (loc);
9454 if (rtl == NULL_RTX)
9455 return 0;
9456
9457 if (!MEM_P (rtl))
9458 return 0;
9459 rtl = XEXP (rtl, 0);
9460 if (! CONSTANT_P (rtl))
9461 return 0;
9462
9463 ret = new_loc_descr (INTERNAL_DW_OP_tls_addr, 0, 0);
9464 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
9465 ret->dw_loc_oprnd1.v.val_addr = rtl;
9466
9467 ret1 = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
9468 add_loc_descr (&ret, ret1);
9469
9470 have_address = 1;
9471 break;
9472 }
9473 /* FALLTHRU */
9474
9475 case PARM_DECL:
9476 if (DECL_HAS_VALUE_EXPR_P (loc))
9477 return loc_descriptor_from_tree_1 (DECL_VALUE_EXPR (loc),
9478 want_address);
9479 /* FALLTHRU */
9480
9481 case RESULT_DECL:
9482 case FUNCTION_DECL:
9483 {
9484 rtx rtl = rtl_for_decl_location (loc);
9485
9486 if (rtl == NULL_RTX)
9487 return 0;
9488 else if (GET_CODE (rtl) == CONST_INT)
9489 {
9490 HOST_WIDE_INT val = INTVAL (rtl);
9491 if (TYPE_UNSIGNED (TREE_TYPE (loc)))
9492 val &= GET_MODE_MASK (DECL_MODE (loc));
9493 ret = int_loc_descriptor (val);
9494 }
9495 else if (GET_CODE (rtl) == CONST_STRING)
9496 return 0;
9497 else if (CONSTANT_P (rtl))
9498 {
9499 ret = new_loc_descr (DW_OP_addr, 0, 0);
9500 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
9501 ret->dw_loc_oprnd1.v.val_addr = rtl;
9502 }
9503 else
9504 {
9505 enum machine_mode mode;
9506
9507 /* Certain constructs can only be represented at top-level. */
9508 if (want_address == 2)
9509 return loc_descriptor (rtl, VAR_INIT_STATUS_INITIALIZED);
9510
9511 mode = GET_MODE (rtl);
9512 if (MEM_P (rtl))
9513 {
9514 rtl = XEXP (rtl, 0);
9515 have_address = 1;
9516 }
9517 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
9518 }
9519 }
9520 break;
9521
9522 case INDIRECT_REF:
9523 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9524 have_address = 1;
9525 break;
9526
9527 case COMPOUND_EXPR:
9528 return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), want_address);
9529
9530 case NOP_EXPR:
9531 case CONVERT_EXPR:
9532 case NON_LVALUE_EXPR:
9533 case VIEW_CONVERT_EXPR:
9534 case SAVE_EXPR:
9535 case GIMPLE_MODIFY_STMT:
9536 return loc_descriptor_from_tree_1 (GENERIC_TREE_OPERAND (loc, 0),
9537 want_address);
9538
9539 case COMPONENT_REF:
9540 case BIT_FIELD_REF:
9541 case ARRAY_REF:
9542 case ARRAY_RANGE_REF:
9543 {
9544 tree obj, offset;
9545 HOST_WIDE_INT bitsize, bitpos, bytepos;
9546 enum machine_mode mode;
9547 int volatilep;
9548 int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
9549
9550 obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
9551 &unsignedp, &volatilep, false);
9552
9553 if (obj == loc)
9554 return 0;
9555
9556 ret = loc_descriptor_from_tree_1 (obj, 1);
9557 if (ret == 0
9558 || bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
9559 return 0;
9560
9561 if (offset != NULL_TREE)
9562 {
9563 /* Variable offset. */
9564 add_loc_descr (&ret, loc_descriptor_from_tree_1 (offset, 0));
9565 add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
9566 }
9567
9568 bytepos = bitpos / BITS_PER_UNIT;
9569 if (bytepos > 0)
9570 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
9571 else if (bytepos < 0)
9572 {
9573 add_loc_descr (&ret, int_loc_descriptor (bytepos));
9574 add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
9575 }
9576
9577 have_address = 1;
9578 break;
9579 }
9580
9581 case INTEGER_CST:
9582 if (host_integerp (loc, 0))
9583 ret = int_loc_descriptor (tree_low_cst (loc, 0));
9584 else
9585 return 0;
9586 break;
9587
9588 case CONSTRUCTOR:
9589 {
9590 /* Get an RTL for this, if something has been emitted. */
9591 rtx rtl = lookup_constant_def (loc);
9592 enum machine_mode mode;
9593
9594 if (!rtl || !MEM_P (rtl))
9595 return 0;
9596 mode = GET_MODE (rtl);
9597 rtl = XEXP (rtl, 0);
9598 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
9599 have_address = 1;
9600 break;
9601 }
9602
9603 case TRUTH_AND_EXPR:
9604 case TRUTH_ANDIF_EXPR:
9605 case BIT_AND_EXPR:
9606 op = DW_OP_and;
9607 goto do_binop;
9608
9609 case TRUTH_XOR_EXPR:
9610 case BIT_XOR_EXPR:
9611 op = DW_OP_xor;
9612 goto do_binop;
9613
9614 case TRUTH_OR_EXPR:
9615 case TRUTH_ORIF_EXPR:
9616 case BIT_IOR_EXPR:
9617 op = DW_OP_or;
9618 goto do_binop;
9619
9620 case FLOOR_DIV_EXPR:
9621 case CEIL_DIV_EXPR:
9622 case ROUND_DIV_EXPR:
9623 case TRUNC_DIV_EXPR:
9624 op = DW_OP_div;
9625 goto do_binop;
9626
9627 case MINUS_EXPR:
9628 op = DW_OP_minus;
9629 goto do_binop;
9630
9631 case FLOOR_MOD_EXPR:
9632 case CEIL_MOD_EXPR:
9633 case ROUND_MOD_EXPR:
9634 case TRUNC_MOD_EXPR:
9635 op = DW_OP_mod;
9636 goto do_binop;
9637
9638 case MULT_EXPR:
9639 op = DW_OP_mul;
9640 goto do_binop;
9641
9642 case LSHIFT_EXPR:
9643 op = DW_OP_shl;
9644 goto do_binop;
9645
9646 case RSHIFT_EXPR:
9647 op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
9648 goto do_binop;
9649
9650 case POINTER_PLUS_EXPR:
9651 case PLUS_EXPR:
9652 if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
9653 && host_integerp (TREE_OPERAND (loc, 1), 0))
9654 {
9655 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9656 if (ret == 0)
9657 return 0;
9658
9659 add_loc_descr (&ret,
9660 new_loc_descr (DW_OP_plus_uconst,
9661 tree_low_cst (TREE_OPERAND (loc, 1),
9662 0),
9663 0));
9664 break;
9665 }
9666
9667 op = DW_OP_plus;
9668 goto do_binop;
9669
9670 case LE_EXPR:
9671 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9672 return 0;
9673
9674 op = DW_OP_le;
9675 goto do_binop;
9676
9677 case GE_EXPR:
9678 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9679 return 0;
9680
9681 op = DW_OP_ge;
9682 goto do_binop;
9683
9684 case LT_EXPR:
9685 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9686 return 0;
9687
9688 op = DW_OP_lt;
9689 goto do_binop;
9690
9691 case GT_EXPR:
9692 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9693 return 0;
9694
9695 op = DW_OP_gt;
9696 goto do_binop;
9697
9698 case EQ_EXPR:
9699 op = DW_OP_eq;
9700 goto do_binop;
9701
9702 case NE_EXPR:
9703 op = DW_OP_ne;
9704 goto do_binop;
9705
9706 do_binop:
9707 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9708 ret1 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
9709 if (ret == 0 || ret1 == 0)
9710 return 0;
9711
9712 add_loc_descr (&ret, ret1);
9713 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
9714 break;
9715
9716 case TRUTH_NOT_EXPR:
9717 case BIT_NOT_EXPR:
9718 op = DW_OP_not;
9719 goto do_unop;
9720
9721 case ABS_EXPR:
9722 op = DW_OP_abs;
9723 goto do_unop;
9724
9725 case NEGATE_EXPR:
9726 op = DW_OP_neg;
9727 goto do_unop;
9728
9729 do_unop:
9730 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9731 if (ret == 0)
9732 return 0;
9733
9734 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
9735 break;
9736
9737 case MIN_EXPR:
9738 case MAX_EXPR:
9739 {
9740 const enum tree_code code =
9741 TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
9742
9743 loc = build3 (COND_EXPR, TREE_TYPE (loc),
9744 build2 (code, integer_type_node,
9745 TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
9746 TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
9747 }
9748
9749 /* ... fall through ... */
9750
9751 case COND_EXPR:
9752 {
9753 dw_loc_descr_ref lhs
9754 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
9755 dw_loc_descr_ref rhs
9756 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 2), 0);
9757 dw_loc_descr_ref bra_node, jump_node, tmp;
9758
9759 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9760 if (ret == 0 || lhs == 0 || rhs == 0)
9761 return 0;
9762
9763 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
9764 add_loc_descr (&ret, bra_node);
9765
9766 add_loc_descr (&ret, rhs);
9767 jump_node = new_loc_descr (DW_OP_skip, 0, 0);
9768 add_loc_descr (&ret, jump_node);
9769
9770 add_loc_descr (&ret, lhs);
9771 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9772 bra_node->dw_loc_oprnd1.v.val_loc = lhs;
9773
9774 /* ??? Need a node to point the skip at. Use a nop. */
9775 tmp = new_loc_descr (DW_OP_nop, 0, 0);
9776 add_loc_descr (&ret, tmp);
9777 jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9778 jump_node->dw_loc_oprnd1.v.val_loc = tmp;
9779 }
9780 break;
9781
9782 case FIX_TRUNC_EXPR:
9783 return 0;
9784
9785 default:
9786 /* Leave front-end specific codes as simply unknown. This comes
9787 up, for instance, with the C STMT_EXPR. */
9788 if ((unsigned int) TREE_CODE (loc)
9789 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
9790 return 0;
9791
9792 #ifdef ENABLE_CHECKING
9793 /* Otherwise this is a generic code; we should just lists all of
9794 these explicitly. We forgot one. */
9795 gcc_unreachable ();
9796 #else
9797 /* In a release build, we want to degrade gracefully: better to
9798 generate incomplete debugging information than to crash. */
9799 return NULL;
9800 #endif
9801 }
9802
9803 /* Show if we can't fill the request for an address. */
9804 if (want_address && !have_address)
9805 return 0;
9806
9807 /* If we've got an address and don't want one, dereference. */
9808 if (!want_address && have_address && ret)
9809 {
9810 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
9811
9812 if (size > DWARF2_ADDR_SIZE || size == -1)
9813 return 0;
9814 else if (size == DWARF2_ADDR_SIZE)
9815 op = DW_OP_deref;
9816 else
9817 op = DW_OP_deref_size;
9818
9819 add_loc_descr (&ret, new_loc_descr (op, size, 0));
9820 }
9821
9822 return ret;
9823 }
9824
9825 static inline dw_loc_descr_ref
9826 loc_descriptor_from_tree (tree loc)
9827 {
9828 return loc_descriptor_from_tree_1 (loc, 2);
9829 }
9830
9831 /* Given a value, round it up to the lowest multiple of `boundary'
9832 which is not less than the value itself. */
9833
9834 static inline HOST_WIDE_INT
9835 ceiling (HOST_WIDE_INT value, unsigned int boundary)
9836 {
9837 return (((value + boundary - 1) / boundary) * boundary);
9838 }
9839
9840 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
9841 pointer to the declared type for the relevant field variable, or return
9842 `integer_type_node' if the given node turns out to be an
9843 ERROR_MARK node. */
9844
9845 static inline tree
9846 field_type (const_tree decl)
9847 {
9848 tree type;
9849
9850 if (TREE_CODE (decl) == ERROR_MARK)
9851 return integer_type_node;
9852
9853 type = DECL_BIT_FIELD_TYPE (decl);
9854 if (type == NULL_TREE)
9855 type = TREE_TYPE (decl);
9856
9857 return type;
9858 }
9859
9860 /* Given a pointer to a tree node, return the alignment in bits for
9861 it, or else return BITS_PER_WORD if the node actually turns out to
9862 be an ERROR_MARK node. */
9863
9864 static inline unsigned
9865 simple_type_align_in_bits (const_tree type)
9866 {
9867 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
9868 }
9869
9870 static inline unsigned
9871 simple_decl_align_in_bits (const_tree decl)
9872 {
9873 return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
9874 }
9875
9876 /* Return the result of rounding T up to ALIGN. */
9877
9878 static inline HOST_WIDE_INT
9879 round_up_to_align (HOST_WIDE_INT t, unsigned int align)
9880 {
9881 /* We must be careful if T is negative because HOST_WIDE_INT can be
9882 either "above" or "below" unsigned int as per the C promotion
9883 rules, depending on the host, thus making the signedness of the
9884 direct multiplication and division unpredictable. */
9885 unsigned HOST_WIDE_INT u = (unsigned HOST_WIDE_INT) t;
9886
9887 u += align - 1;
9888 u /= align;
9889 u *= align;
9890
9891 return (HOST_WIDE_INT) u;
9892 }
9893
9894 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
9895 lowest addressed byte of the "containing object" for the given FIELD_DECL,
9896 or return 0 if we are unable to determine what that offset is, either
9897 because the argument turns out to be a pointer to an ERROR_MARK node, or
9898 because the offset is actually variable. (We can't handle the latter case
9899 just yet). */
9900
9901 static HOST_WIDE_INT
9902 field_byte_offset (const_tree decl)
9903 {
9904 HOST_WIDE_INT object_offset_in_bits;
9905 HOST_WIDE_INT bitpos_int;
9906
9907 if (TREE_CODE (decl) == ERROR_MARK)
9908 return 0;
9909
9910 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
9911
9912 /* We cannot yet cope with fields whose positions are variable, so
9913 for now, when we see such things, we simply return 0. Someday, we may
9914 be able to handle such cases, but it will be damn difficult. */
9915 if (! host_integerp (bit_position (decl), 0))
9916 return 0;
9917
9918 bitpos_int = int_bit_position (decl);
9919
9920 #ifdef PCC_BITFIELD_TYPE_MATTERS
9921 if (PCC_BITFIELD_TYPE_MATTERS)
9922 {
9923 tree type;
9924 tree field_size_tree;
9925 HOST_WIDE_INT deepest_bitpos;
9926 unsigned HOST_WIDE_INT field_size_in_bits;
9927 unsigned int type_align_in_bits;
9928 unsigned int decl_align_in_bits;
9929 unsigned HOST_WIDE_INT type_size_in_bits;
9930
9931 type = field_type (decl);
9932 field_size_tree = DECL_SIZE (decl);
9933
9934 /* The size could be unspecified if there was an error, or for
9935 a flexible array member. */
9936 if (! field_size_tree)
9937 field_size_tree = bitsize_zero_node;
9938
9939 /* If we don't know the size of the field, pretend it's a full word. */
9940 if (host_integerp (field_size_tree, 1))
9941 field_size_in_bits = tree_low_cst (field_size_tree, 1);
9942 else
9943 field_size_in_bits = BITS_PER_WORD;
9944
9945 type_size_in_bits = simple_type_size_in_bits (type);
9946 type_align_in_bits = simple_type_align_in_bits (type);
9947 decl_align_in_bits = simple_decl_align_in_bits (decl);
9948
9949 /* The GCC front-end doesn't make any attempt to keep track of the
9950 starting bit offset (relative to the start of the containing
9951 structure type) of the hypothetical "containing object" for a
9952 bit-field. Thus, when computing the byte offset value for the
9953 start of the "containing object" of a bit-field, we must deduce
9954 this information on our own. This can be rather tricky to do in
9955 some cases. For example, handling the following structure type
9956 definition when compiling for an i386/i486 target (which only
9957 aligns long long's to 32-bit boundaries) can be very tricky:
9958
9959 struct S { int field1; long long field2:31; };
9960
9961 Fortunately, there is a simple rule-of-thumb which can be used
9962 in such cases. When compiling for an i386/i486, GCC will
9963 allocate 8 bytes for the structure shown above. It decides to
9964 do this based upon one simple rule for bit-field allocation.
9965 GCC allocates each "containing object" for each bit-field at
9966 the first (i.e. lowest addressed) legitimate alignment boundary
9967 (based upon the required minimum alignment for the declared
9968 type of the field) which it can possibly use, subject to the
9969 condition that there is still enough available space remaining
9970 in the containing object (when allocated at the selected point)
9971 to fully accommodate all of the bits of the bit-field itself.
9972
9973 This simple rule makes it obvious why GCC allocates 8 bytes for
9974 each object of the structure type shown above. When looking
9975 for a place to allocate the "containing object" for `field2',
9976 the compiler simply tries to allocate a 64-bit "containing
9977 object" at each successive 32-bit boundary (starting at zero)
9978 until it finds a place to allocate that 64- bit field such that
9979 at least 31 contiguous (and previously unallocated) bits remain
9980 within that selected 64 bit field. (As it turns out, for the
9981 example above, the compiler finds it is OK to allocate the
9982 "containing object" 64-bit field at bit-offset zero within the
9983 structure type.)
9984
9985 Here we attempt to work backwards from the limited set of facts
9986 we're given, and we try to deduce from those facts, where GCC
9987 must have believed that the containing object started (within
9988 the structure type). The value we deduce is then used (by the
9989 callers of this routine) to generate DW_AT_location and
9990 DW_AT_bit_offset attributes for fields (both bit-fields and, in
9991 the case of DW_AT_location, regular fields as well). */
9992
9993 /* Figure out the bit-distance from the start of the structure to
9994 the "deepest" bit of the bit-field. */
9995 deepest_bitpos = bitpos_int + field_size_in_bits;
9996
9997 /* This is the tricky part. Use some fancy footwork to deduce
9998 where the lowest addressed bit of the containing object must
9999 be. */
10000 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
10001
10002 /* Round up to type_align by default. This works best for
10003 bitfields. */
10004 object_offset_in_bits
10005 = round_up_to_align (object_offset_in_bits, type_align_in_bits);
10006
10007 if (object_offset_in_bits > bitpos_int)
10008 {
10009 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
10010
10011 /* Round up to decl_align instead. */
10012 object_offset_in_bits
10013 = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
10014 }
10015 }
10016 else
10017 #endif
10018 object_offset_in_bits = bitpos_int;
10019
10020 return object_offset_in_bits / BITS_PER_UNIT;
10021 }
10022 \f
10023 /* The following routines define various Dwarf attributes and any data
10024 associated with them. */
10025
10026 /* Add a location description attribute value to a DIE.
10027
10028 This emits location attributes suitable for whole variables and
10029 whole parameters. Note that the location attributes for struct fields are
10030 generated by the routine `data_member_location_attribute' below. */
10031
10032 static inline void
10033 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
10034 dw_loc_descr_ref descr)
10035 {
10036 if (descr != 0)
10037 add_AT_loc (die, attr_kind, descr);
10038 }
10039
10040 /* Attach the specialized form of location attribute used for data members of
10041 struct and union types. In the special case of a FIELD_DECL node which
10042 represents a bit-field, the "offset" part of this special location
10043 descriptor must indicate the distance in bytes from the lowest-addressed
10044 byte of the containing struct or union type to the lowest-addressed byte of
10045 the "containing object" for the bit-field. (See the `field_byte_offset'
10046 function above).
10047
10048 For any given bit-field, the "containing object" is a hypothetical object
10049 (of some integral or enum type) within which the given bit-field lives. The
10050 type of this hypothetical "containing object" is always the same as the
10051 declared type of the individual bit-field itself (for GCC anyway... the
10052 DWARF spec doesn't actually mandate this). Note that it is the size (in
10053 bytes) of the hypothetical "containing object" which will be given in the
10054 DW_AT_byte_size attribute for this bit-field. (See the
10055 `byte_size_attribute' function below.) It is also used when calculating the
10056 value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute'
10057 function below.) */
10058
10059 static void
10060 add_data_member_location_attribute (dw_die_ref die, tree decl)
10061 {
10062 HOST_WIDE_INT offset;
10063 dw_loc_descr_ref loc_descr = 0;
10064
10065 if (TREE_CODE (decl) == TREE_BINFO)
10066 {
10067 /* We're working on the TAG_inheritance for a base class. */
10068 if (BINFO_VIRTUAL_P (decl) && is_cxx ())
10069 {
10070 /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
10071 aren't at a fixed offset from all (sub)objects of the same
10072 type. We need to extract the appropriate offset from our
10073 vtable. The following dwarf expression means
10074
10075 BaseAddr = ObAddr + *((*ObAddr) - Offset)
10076
10077 This is specific to the V3 ABI, of course. */
10078
10079 dw_loc_descr_ref tmp;
10080
10081 /* Make a copy of the object address. */
10082 tmp = new_loc_descr (DW_OP_dup, 0, 0);
10083 add_loc_descr (&loc_descr, tmp);
10084
10085 /* Extract the vtable address. */
10086 tmp = new_loc_descr (DW_OP_deref, 0, 0);
10087 add_loc_descr (&loc_descr, tmp);
10088
10089 /* Calculate the address of the offset. */
10090 offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
10091 gcc_assert (offset < 0);
10092
10093 tmp = int_loc_descriptor (-offset);
10094 add_loc_descr (&loc_descr, tmp);
10095 tmp = new_loc_descr (DW_OP_minus, 0, 0);
10096 add_loc_descr (&loc_descr, tmp);
10097
10098 /* Extract the offset. */
10099 tmp = new_loc_descr (DW_OP_deref, 0, 0);
10100 add_loc_descr (&loc_descr, tmp);
10101
10102 /* Add it to the object address. */
10103 tmp = new_loc_descr (DW_OP_plus, 0, 0);
10104 add_loc_descr (&loc_descr, tmp);
10105 }
10106 else
10107 offset = tree_low_cst (BINFO_OFFSET (decl), 0);
10108 }
10109 else
10110 offset = field_byte_offset (decl);
10111
10112 if (! loc_descr)
10113 {
10114 enum dwarf_location_atom op;
10115
10116 /* The DWARF2 standard says that we should assume that the structure
10117 address is already on the stack, so we can specify a structure field
10118 address by using DW_OP_plus_uconst. */
10119
10120 #ifdef MIPS_DEBUGGING_INFO
10121 /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
10122 operator correctly. It works only if we leave the offset on the
10123 stack. */
10124 op = DW_OP_constu;
10125 #else
10126 op = DW_OP_plus_uconst;
10127 #endif
10128
10129 loc_descr = new_loc_descr (op, offset, 0);
10130 }
10131
10132 add_AT_loc (die, DW_AT_data_member_location, loc_descr);
10133 }
10134
10135 /* Writes integer values to dw_vec_const array. */
10136
10137 static void
10138 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
10139 {
10140 while (size != 0)
10141 {
10142 *dest++ = val & 0xff;
10143 val >>= 8;
10144 --size;
10145 }
10146 }
10147
10148 /* Reads integers from dw_vec_const array. Inverse of insert_int. */
10149
10150 static HOST_WIDE_INT
10151 extract_int (const unsigned char *src, unsigned int size)
10152 {
10153 HOST_WIDE_INT val = 0;
10154
10155 src += size;
10156 while (size != 0)
10157 {
10158 val <<= 8;
10159 val |= *--src & 0xff;
10160 --size;
10161 }
10162 return val;
10163 }
10164
10165 /* Writes floating point values to dw_vec_const array. */
10166
10167 static void
10168 insert_float (const_rtx rtl, unsigned char *array)
10169 {
10170 REAL_VALUE_TYPE rv;
10171 long val[4];
10172 int i;
10173
10174 REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
10175 real_to_target (val, &rv, GET_MODE (rtl));
10176
10177 /* real_to_target puts 32-bit pieces in each long. Pack them. */
10178 for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
10179 {
10180 insert_int (val[i], 4, array);
10181 array += 4;
10182 }
10183 }
10184
10185 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
10186 does not have a "location" either in memory or in a register. These
10187 things can arise in GNU C when a constant is passed as an actual parameter
10188 to an inlined function. They can also arise in C++ where declared
10189 constants do not necessarily get memory "homes". */
10190
10191 static void
10192 add_const_value_attribute (dw_die_ref die, rtx rtl)
10193 {
10194 switch (GET_CODE (rtl))
10195 {
10196 case CONST_INT:
10197 {
10198 HOST_WIDE_INT val = INTVAL (rtl);
10199
10200 if (val < 0)
10201 add_AT_int (die, DW_AT_const_value, val);
10202 else
10203 add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
10204 }
10205 break;
10206
10207 case CONST_DOUBLE:
10208 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
10209 floating-point constant. A CONST_DOUBLE is used whenever the
10210 constant requires more than one word in order to be adequately
10211 represented. We output CONST_DOUBLEs as blocks. */
10212 {
10213 enum machine_mode mode = GET_MODE (rtl);
10214
10215 if (SCALAR_FLOAT_MODE_P (mode))
10216 {
10217 unsigned int length = GET_MODE_SIZE (mode);
10218 unsigned char *array = ggc_alloc (length);
10219
10220 insert_float (rtl, array);
10221 add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
10222 }
10223 else
10224 {
10225 /* ??? We really should be using HOST_WIDE_INT throughout. */
10226 gcc_assert (HOST_BITS_PER_LONG == HOST_BITS_PER_WIDE_INT);
10227
10228 add_AT_long_long (die, DW_AT_const_value,
10229 CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
10230 }
10231 }
10232 break;
10233
10234 case CONST_VECTOR:
10235 {
10236 enum machine_mode mode = GET_MODE (rtl);
10237 unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
10238 unsigned int length = CONST_VECTOR_NUNITS (rtl);
10239 unsigned char *array = ggc_alloc (length * elt_size);
10240 unsigned int i;
10241 unsigned char *p;
10242
10243 switch (GET_MODE_CLASS (mode))
10244 {
10245 case MODE_VECTOR_INT:
10246 for (i = 0, p = array; i < length; i++, p += elt_size)
10247 {
10248 rtx elt = CONST_VECTOR_ELT (rtl, i);
10249 HOST_WIDE_INT lo, hi;
10250
10251 switch (GET_CODE (elt))
10252 {
10253 case CONST_INT:
10254 lo = INTVAL (elt);
10255 hi = -(lo < 0);
10256 break;
10257
10258 case CONST_DOUBLE:
10259 lo = CONST_DOUBLE_LOW (elt);
10260 hi = CONST_DOUBLE_HIGH (elt);
10261 break;
10262
10263 default:
10264 gcc_unreachable ();
10265 }
10266
10267 if (elt_size <= sizeof (HOST_WIDE_INT))
10268 insert_int (lo, elt_size, p);
10269 else
10270 {
10271 unsigned char *p0 = p;
10272 unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
10273
10274 gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
10275 if (WORDS_BIG_ENDIAN)
10276 {
10277 p0 = p1;
10278 p1 = p;
10279 }
10280 insert_int (lo, sizeof (HOST_WIDE_INT), p0);
10281 insert_int (hi, sizeof (HOST_WIDE_INT), p1);
10282 }
10283 }
10284 break;
10285
10286 case MODE_VECTOR_FLOAT:
10287 for (i = 0, p = array; i < length; i++, p += elt_size)
10288 {
10289 rtx elt = CONST_VECTOR_ELT (rtl, i);
10290 insert_float (elt, p);
10291 }
10292 break;
10293
10294 default:
10295 gcc_unreachable ();
10296 }
10297
10298 add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
10299 }
10300 break;
10301
10302 case CONST_STRING:
10303 add_AT_string (die, DW_AT_const_value, XSTR (rtl, 0));
10304 break;
10305
10306 case SYMBOL_REF:
10307 case LABEL_REF:
10308 case CONST:
10309 add_AT_addr (die, DW_AT_const_value, rtl);
10310 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
10311 break;
10312
10313 case PLUS:
10314 /* In cases where an inlined instance of an inline function is passed
10315 the address of an `auto' variable (which is local to the caller) we
10316 can get a situation where the DECL_RTL of the artificial local
10317 variable (for the inlining) which acts as a stand-in for the
10318 corresponding formal parameter (of the inline function) will look
10319 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
10320 exactly a compile-time constant expression, but it isn't the address
10321 of the (artificial) local variable either. Rather, it represents the
10322 *value* which the artificial local variable always has during its
10323 lifetime. We currently have no way to represent such quasi-constant
10324 values in Dwarf, so for now we just punt and generate nothing. */
10325 break;
10326
10327 default:
10328 /* No other kinds of rtx should be possible here. */
10329 gcc_unreachable ();
10330 }
10331
10332 }
10333
10334 /* Determine whether the evaluation of EXPR references any variables
10335 or functions which aren't otherwise used (and therefore may not be
10336 output). */
10337 static tree
10338 reference_to_unused (tree * tp, int * walk_subtrees,
10339 void * data ATTRIBUTE_UNUSED)
10340 {
10341 if (! EXPR_P (*tp) && ! GIMPLE_STMT_P (*tp) && ! CONSTANT_CLASS_P (*tp))
10342 *walk_subtrees = 0;
10343
10344 if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
10345 && ! TREE_ASM_WRITTEN (*tp))
10346 return *tp;
10347 else if (!flag_unit_at_a_time)
10348 return NULL_TREE;
10349 /* ??? The C++ FE emits debug information for using decls, so
10350 putting gcc_unreachable here falls over. See PR31899. For now
10351 be conservative. */
10352 else if (!cgraph_global_info_ready
10353 && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
10354 return *tp;
10355 else if (DECL_P (*tp) && TREE_CODE (*tp) == VAR_DECL)
10356 {
10357 struct varpool_node *node = varpool_node (*tp);
10358 if (!node->needed)
10359 return *tp;
10360 }
10361 else if (DECL_P (*tp) && TREE_CODE (*tp) == FUNCTION_DECL
10362 && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
10363 {
10364 struct cgraph_node *node = cgraph_node (*tp);
10365 if (!node->output)
10366 return *tp;
10367 }
10368
10369 return NULL_TREE;
10370 }
10371
10372 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
10373 for use in a later add_const_value_attribute call. */
10374
10375 static rtx
10376 rtl_for_decl_init (tree init, tree type)
10377 {
10378 rtx rtl = NULL_RTX;
10379
10380 /* If a variable is initialized with a string constant without embedded
10381 zeros, build CONST_STRING. */
10382 if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
10383 {
10384 tree enttype = TREE_TYPE (type);
10385 tree domain = TYPE_DOMAIN (type);
10386 enum machine_mode mode = TYPE_MODE (enttype);
10387
10388 if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
10389 && domain
10390 && integer_zerop (TYPE_MIN_VALUE (domain))
10391 && compare_tree_int (TYPE_MAX_VALUE (domain),
10392 TREE_STRING_LENGTH (init) - 1) == 0
10393 && ((size_t) TREE_STRING_LENGTH (init)
10394 == strlen (TREE_STRING_POINTER (init)) + 1))
10395 rtl = gen_rtx_CONST_STRING (VOIDmode,
10396 ggc_strdup (TREE_STRING_POINTER (init)));
10397 }
10398 /* Other aggregates, and complex values, could be represented using
10399 CONCAT: FIXME! */
10400 else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
10401 ;
10402 /* Vectors only work if their mode is supported by the target.
10403 FIXME: generic vectors ought to work too. */
10404 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
10405 ;
10406 /* If the initializer is something that we know will expand into an
10407 immediate RTL constant, expand it now. We must be careful not to
10408 reference variables which won't be output. */
10409 else if (initializer_constant_valid_p (init, type)
10410 && ! walk_tree (&init, reference_to_unused, NULL, NULL))
10411 {
10412 /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
10413 possible. */
10414 if (TREE_CODE (type) == VECTOR_TYPE)
10415 switch (TREE_CODE (init))
10416 {
10417 case VECTOR_CST:
10418 break;
10419 case CONSTRUCTOR:
10420 if (TREE_CONSTANT (init))
10421 {
10422 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
10423 bool constant_p = true;
10424 tree value;
10425 unsigned HOST_WIDE_INT ix;
10426
10427 /* Even when ctor is constant, it might contain non-*_CST
10428 elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
10429 belong into VECTOR_CST nodes. */
10430 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
10431 if (!CONSTANT_CLASS_P (value))
10432 {
10433 constant_p = false;
10434 break;
10435 }
10436
10437 if (constant_p)
10438 {
10439 init = build_vector_from_ctor (type, elts);
10440 break;
10441 }
10442 }
10443 /* FALLTHRU */
10444
10445 default:
10446 return NULL;
10447 }
10448
10449 rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
10450
10451 /* If expand_expr returns a MEM, it wasn't immediate. */
10452 gcc_assert (!rtl || !MEM_P (rtl));
10453 }
10454
10455 return rtl;
10456 }
10457
10458 /* Generate RTL for the variable DECL to represent its location. */
10459
10460 static rtx
10461 rtl_for_decl_location (tree decl)
10462 {
10463 rtx rtl;
10464
10465 /* Here we have to decide where we are going to say the parameter "lives"
10466 (as far as the debugger is concerned). We only have a couple of
10467 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
10468
10469 DECL_RTL normally indicates where the parameter lives during most of the
10470 activation of the function. If optimization is enabled however, this
10471 could be either NULL or else a pseudo-reg. Both of those cases indicate
10472 that the parameter doesn't really live anywhere (as far as the code
10473 generation parts of GCC are concerned) during most of the function's
10474 activation. That will happen (for example) if the parameter is never
10475 referenced within the function.
10476
10477 We could just generate a location descriptor here for all non-NULL
10478 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
10479 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
10480 where DECL_RTL is NULL or is a pseudo-reg.
10481
10482 Note however that we can only get away with using DECL_INCOMING_RTL as
10483 a backup substitute for DECL_RTL in certain limited cases. In cases
10484 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
10485 we can be sure that the parameter was passed using the same type as it is
10486 declared to have within the function, and that its DECL_INCOMING_RTL
10487 points us to a place where a value of that type is passed.
10488
10489 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
10490 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
10491 because in these cases DECL_INCOMING_RTL points us to a value of some
10492 type which is *different* from the type of the parameter itself. Thus,
10493 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
10494 such cases, the debugger would end up (for example) trying to fetch a
10495 `float' from a place which actually contains the first part of a
10496 `double'. That would lead to really incorrect and confusing
10497 output at debug-time.
10498
10499 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
10500 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
10501 are a couple of exceptions however. On little-endian machines we can
10502 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
10503 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
10504 an integral type that is smaller than TREE_TYPE (decl). These cases arise
10505 when (on a little-endian machine) a non-prototyped function has a
10506 parameter declared to be of type `short' or `char'. In such cases,
10507 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
10508 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
10509 passed `int' value. If the debugger then uses that address to fetch
10510 a `short' or a `char' (on a little-endian machine) the result will be
10511 the correct data, so we allow for such exceptional cases below.
10512
10513 Note that our goal here is to describe the place where the given formal
10514 parameter lives during most of the function's activation (i.e. between the
10515 end of the prologue and the start of the epilogue). We'll do that as best
10516 as we can. Note however that if the given formal parameter is modified
10517 sometime during the execution of the function, then a stack backtrace (at
10518 debug-time) will show the function as having been called with the *new*
10519 value rather than the value which was originally passed in. This happens
10520 rarely enough that it is not a major problem, but it *is* a problem, and
10521 I'd like to fix it.
10522
10523 A future version of dwarf2out.c may generate two additional attributes for
10524 any given DW_TAG_formal_parameter DIE which will describe the "passed
10525 type" and the "passed location" for the given formal parameter in addition
10526 to the attributes we now generate to indicate the "declared type" and the
10527 "active location" for each parameter. This additional set of attributes
10528 could be used by debuggers for stack backtraces. Separately, note that
10529 sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
10530 This happens (for example) for inlined-instances of inline function formal
10531 parameters which are never referenced. This really shouldn't be
10532 happening. All PARM_DECL nodes should get valid non-NULL
10533 DECL_INCOMING_RTL values. FIXME. */
10534
10535 /* Use DECL_RTL as the "location" unless we find something better. */
10536 rtl = DECL_RTL_IF_SET (decl);
10537
10538 /* When generating abstract instances, ignore everything except
10539 constants, symbols living in memory, and symbols living in
10540 fixed registers. */
10541 if (! reload_completed)
10542 {
10543 if (rtl
10544 && (CONSTANT_P (rtl)
10545 || (MEM_P (rtl)
10546 && CONSTANT_P (XEXP (rtl, 0)))
10547 || (REG_P (rtl)
10548 && TREE_CODE (decl) == VAR_DECL
10549 && TREE_STATIC (decl))))
10550 {
10551 rtl = targetm.delegitimize_address (rtl);
10552 return rtl;
10553 }
10554 rtl = NULL_RTX;
10555 }
10556 else if (TREE_CODE (decl) == PARM_DECL)
10557 {
10558 if (rtl == NULL_RTX || is_pseudo_reg (rtl))
10559 {
10560 tree declared_type = TREE_TYPE (decl);
10561 tree passed_type = DECL_ARG_TYPE (decl);
10562 enum machine_mode dmode = TYPE_MODE (declared_type);
10563 enum machine_mode pmode = TYPE_MODE (passed_type);
10564
10565 /* This decl represents a formal parameter which was optimized out.
10566 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
10567 all cases where (rtl == NULL_RTX) just below. */
10568 if (dmode == pmode)
10569 rtl = DECL_INCOMING_RTL (decl);
10570 else if (SCALAR_INT_MODE_P (dmode)
10571 && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
10572 && DECL_INCOMING_RTL (decl))
10573 {
10574 rtx inc = DECL_INCOMING_RTL (decl);
10575 if (REG_P (inc))
10576 rtl = inc;
10577 else if (MEM_P (inc))
10578 {
10579 if (BYTES_BIG_ENDIAN)
10580 rtl = adjust_address_nv (inc, dmode,
10581 GET_MODE_SIZE (pmode)
10582 - GET_MODE_SIZE (dmode));
10583 else
10584 rtl = inc;
10585 }
10586 }
10587 }
10588
10589 /* If the parm was passed in registers, but lives on the stack, then
10590 make a big endian correction if the mode of the type of the
10591 parameter is not the same as the mode of the rtl. */
10592 /* ??? This is the same series of checks that are made in dbxout.c before
10593 we reach the big endian correction code there. It isn't clear if all
10594 of these checks are necessary here, but keeping them all is the safe
10595 thing to do. */
10596 else if (MEM_P (rtl)
10597 && XEXP (rtl, 0) != const0_rtx
10598 && ! CONSTANT_P (XEXP (rtl, 0))
10599 /* Not passed in memory. */
10600 && !MEM_P (DECL_INCOMING_RTL (decl))
10601 /* Not passed by invisible reference. */
10602 && (!REG_P (XEXP (rtl, 0))
10603 || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
10604 || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
10605 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
10606 || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
10607 #endif
10608 )
10609 /* Big endian correction check. */
10610 && BYTES_BIG_ENDIAN
10611 && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
10612 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
10613 < UNITS_PER_WORD))
10614 {
10615 int offset = (UNITS_PER_WORD
10616 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
10617
10618 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
10619 plus_constant (XEXP (rtl, 0), offset));
10620 }
10621 }
10622 else if (TREE_CODE (decl) == VAR_DECL
10623 && rtl
10624 && MEM_P (rtl)
10625 && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
10626 && BYTES_BIG_ENDIAN)
10627 {
10628 int rsize = GET_MODE_SIZE (GET_MODE (rtl));
10629 int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
10630
10631 /* If a variable is declared "register" yet is smaller than
10632 a register, then if we store the variable to memory, it
10633 looks like we're storing a register-sized value, when in
10634 fact we are not. We need to adjust the offset of the
10635 storage location to reflect the actual value's bytes,
10636 else gdb will not be able to display it. */
10637 if (rsize > dsize)
10638 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
10639 plus_constant (XEXP (rtl, 0), rsize-dsize));
10640 }
10641
10642 /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
10643 and will have been substituted directly into all expressions that use it.
10644 C does not have such a concept, but C++ and other languages do. */
10645 if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
10646 rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
10647
10648 if (rtl)
10649 rtl = targetm.delegitimize_address (rtl);
10650
10651 /* If we don't look past the constant pool, we risk emitting a
10652 reference to a constant pool entry that isn't referenced from
10653 code, and thus is not emitted. */
10654 if (rtl)
10655 rtl = avoid_constant_pool_reference (rtl);
10656
10657 return rtl;
10658 }
10659
10660 /* We need to figure out what section we should use as the base for the
10661 address ranges where a given location is valid.
10662 1. If this particular DECL has a section associated with it, use that.
10663 2. If this function has a section associated with it, use that.
10664 3. Otherwise, use the text section.
10665 XXX: If you split a variable across multiple sections, we won't notice. */
10666
10667 static const char *
10668 secname_for_decl (const_tree decl)
10669 {
10670 const char *secname;
10671
10672 if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
10673 {
10674 tree sectree = DECL_SECTION_NAME (decl);
10675 secname = TREE_STRING_POINTER (sectree);
10676 }
10677 else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
10678 {
10679 tree sectree = DECL_SECTION_NAME (current_function_decl);
10680 secname = TREE_STRING_POINTER (sectree);
10681 }
10682 else if (cfun && in_cold_section_p)
10683 secname = cfun->cold_section_label;
10684 else
10685 secname = text_section_label;
10686
10687 return secname;
10688 }
10689
10690 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
10691 data attribute for a variable or a parameter. We generate the
10692 DW_AT_const_value attribute only in those cases where the given variable
10693 or parameter does not have a true "location" either in memory or in a
10694 register. This can happen (for example) when a constant is passed as an
10695 actual argument in a call to an inline function. (It's possible that
10696 these things can crop up in other ways also.) Note that one type of
10697 constant value which can be passed into an inlined function is a constant
10698 pointer. This can happen for example if an actual argument in an inlined
10699 function call evaluates to a compile-time constant address. */
10700
10701 static void
10702 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
10703 enum dwarf_attribute attr)
10704 {
10705 rtx rtl;
10706 dw_loc_descr_ref descr;
10707 var_loc_list *loc_list;
10708 struct var_loc_node *node;
10709 if (TREE_CODE (decl) == ERROR_MARK)
10710 return;
10711
10712 gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
10713 || TREE_CODE (decl) == RESULT_DECL);
10714
10715 /* See if we possibly have multiple locations for this variable. */
10716 loc_list = lookup_decl_loc (decl);
10717
10718 /* If it truly has multiple locations, the first and last node will
10719 differ. */
10720 if (loc_list && loc_list->first != loc_list->last)
10721 {
10722 const char *endname, *secname;
10723 dw_loc_list_ref list;
10724 rtx varloc;
10725 enum var_init_status initialized;
10726
10727 /* Now that we know what section we are using for a base,
10728 actually construct the list of locations.
10729 The first location information is what is passed to the
10730 function that creates the location list, and the remaining
10731 locations just get added on to that list.
10732 Note that we only know the start address for a location
10733 (IE location changes), so to build the range, we use
10734 the range [current location start, next location start].
10735 This means we have to special case the last node, and generate
10736 a range of [last location start, end of function label]. */
10737
10738 node = loc_list->first;
10739 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10740 secname = secname_for_decl (decl);
10741
10742 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note))
10743 initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
10744 else
10745 initialized = VAR_INIT_STATUS_INITIALIZED;
10746
10747 list = new_loc_list (loc_descriptor (varloc, initialized),
10748 node->label, node->next->label, secname, 1);
10749 node = node->next;
10750
10751 for (; node->next; node = node->next)
10752 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
10753 {
10754 /* The variable has a location between NODE->LABEL and
10755 NODE->NEXT->LABEL. */
10756 enum var_init_status initialized =
10757 NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
10758 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10759 add_loc_descr_to_loc_list (&list,
10760 loc_descriptor (varloc, initialized),
10761 node->label, node->next->label, secname);
10762 }
10763
10764 /* If the variable has a location at the last label
10765 it keeps its location until the end of function. */
10766 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
10767 {
10768 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
10769 enum var_init_status initialized =
10770 NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
10771
10772 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10773 if (!current_function_decl)
10774 endname = text_end_label;
10775 else
10776 {
10777 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
10778 current_function_funcdef_no);
10779 endname = ggc_strdup (label_id);
10780 }
10781 add_loc_descr_to_loc_list (&list,
10782 loc_descriptor (varloc, initialized),
10783 node->label, endname, secname);
10784 }
10785
10786 /* Finally, add the location list to the DIE, and we are done. */
10787 add_AT_loc_list (die, attr, list);
10788 return;
10789 }
10790
10791 /* Try to get some constant RTL for this decl, and use that as the value of
10792 the location. */
10793
10794 rtl = rtl_for_decl_location (decl);
10795 if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING))
10796 {
10797 add_const_value_attribute (die, rtl);
10798 return;
10799 }
10800
10801 /* If we have tried to generate the location otherwise, and it
10802 didn't work out (we wouldn't be here if we did), and we have a one entry
10803 location list, try generating a location from that. */
10804 if (loc_list && loc_list->first)
10805 {
10806 enum var_init_status status;
10807 node = loc_list->first;
10808 status = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
10809 descr = loc_descriptor (NOTE_VAR_LOCATION (node->var_loc_note), status);
10810 if (descr)
10811 {
10812 add_AT_location_description (die, attr, descr);
10813 return;
10814 }
10815 }
10816
10817 /* We couldn't get any rtl, so try directly generating the location
10818 description from the tree. */
10819 descr = loc_descriptor_from_tree (decl);
10820 if (descr)
10821 {
10822 add_AT_location_description (die, attr, descr);
10823 return;
10824 }
10825 /* None of that worked, so it must not really have a location;
10826 try adding a constant value attribute from the DECL_INITIAL. */
10827 tree_add_const_value_attribute (die, decl);
10828 }
10829
10830 /* If we don't have a copy of this variable in memory for some reason (such
10831 as a C++ member constant that doesn't have an out-of-line definition),
10832 we should tell the debugger about the constant value. */
10833
10834 static void
10835 tree_add_const_value_attribute (dw_die_ref var_die, tree decl)
10836 {
10837 tree init = DECL_INITIAL (decl);
10838 tree type = TREE_TYPE (decl);
10839 rtx rtl;
10840
10841 if (TREE_READONLY (decl) && ! TREE_THIS_VOLATILE (decl) && init)
10842 /* OK */;
10843 else
10844 return;
10845
10846 rtl = rtl_for_decl_init (init, type);
10847 if (rtl)
10848 add_const_value_attribute (var_die, rtl);
10849 }
10850
10851 /* Convert the CFI instructions for the current function into a
10852 location list. This is used for DW_AT_frame_base when we targeting
10853 a dwarf2 consumer that does not support the dwarf3
10854 DW_OP_call_frame_cfa. OFFSET is a constant to be added to all CFA
10855 expressions. */
10856
10857 static dw_loc_list_ref
10858 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
10859 {
10860 dw_fde_ref fde;
10861 dw_loc_list_ref list, *list_tail;
10862 dw_cfi_ref cfi;
10863 dw_cfa_location last_cfa, next_cfa;
10864 const char *start_label, *last_label, *section;
10865
10866 fde = &fde_table[fde_table_in_use - 1];
10867
10868 section = secname_for_decl (current_function_decl);
10869 list_tail = &list;
10870 list = NULL;
10871
10872 next_cfa.reg = INVALID_REGNUM;
10873 next_cfa.offset = 0;
10874 next_cfa.indirect = 0;
10875 next_cfa.base_offset = 0;
10876
10877 start_label = fde->dw_fde_begin;
10878
10879 /* ??? Bald assumption that the CIE opcode list does not contain
10880 advance opcodes. */
10881 for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
10882 lookup_cfa_1 (cfi, &next_cfa);
10883
10884 last_cfa = next_cfa;
10885 last_label = start_label;
10886
10887 for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
10888 switch (cfi->dw_cfi_opc)
10889 {
10890 case DW_CFA_set_loc:
10891 case DW_CFA_advance_loc1:
10892 case DW_CFA_advance_loc2:
10893 case DW_CFA_advance_loc4:
10894 if (!cfa_equal_p (&last_cfa, &next_cfa))
10895 {
10896 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
10897 start_label, last_label, section,
10898 list == NULL);
10899
10900 list_tail = &(*list_tail)->dw_loc_next;
10901 last_cfa = next_cfa;
10902 start_label = last_label;
10903 }
10904 last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
10905 break;
10906
10907 case DW_CFA_advance_loc:
10908 /* The encoding is complex enough that we should never emit this. */
10909 case DW_CFA_remember_state:
10910 case DW_CFA_restore_state:
10911 /* We don't handle these two in this function. It would be possible
10912 if it were to be required. */
10913 gcc_unreachable ();
10914
10915 default:
10916 lookup_cfa_1 (cfi, &next_cfa);
10917 break;
10918 }
10919
10920 if (!cfa_equal_p (&last_cfa, &next_cfa))
10921 {
10922 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
10923 start_label, last_label, section,
10924 list == NULL);
10925 list_tail = &(*list_tail)->dw_loc_next;
10926 start_label = last_label;
10927 }
10928 *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
10929 start_label, fde->dw_fde_end, section,
10930 list == NULL);
10931
10932 return list;
10933 }
10934
10935 /* Compute a displacement from the "steady-state frame pointer" to the
10936 frame base (often the same as the CFA), and store it in
10937 frame_pointer_fb_offset. OFFSET is added to the displacement
10938 before the latter is negated. */
10939
10940 static void
10941 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
10942 {
10943 rtx reg, elim;
10944
10945 #ifdef FRAME_POINTER_CFA_OFFSET
10946 reg = frame_pointer_rtx;
10947 offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
10948 #else
10949 reg = arg_pointer_rtx;
10950 offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
10951 #endif
10952
10953 elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
10954 if (GET_CODE (elim) == PLUS)
10955 {
10956 offset += INTVAL (XEXP (elim, 1));
10957 elim = XEXP (elim, 0);
10958 }
10959 gcc_assert (elim == (frame_pointer_needed ? hard_frame_pointer_rtx
10960 : stack_pointer_rtx));
10961
10962 frame_pointer_fb_offset = -offset;
10963 }
10964
10965 /* Generate a DW_AT_name attribute given some string value to be included as
10966 the value of the attribute. */
10967
10968 static void
10969 add_name_attribute (dw_die_ref die, const char *name_string)
10970 {
10971 if (name_string != NULL && *name_string != 0)
10972 {
10973 if (demangle_name_func)
10974 name_string = (*demangle_name_func) (name_string);
10975
10976 add_AT_string (die, DW_AT_name, name_string);
10977 }
10978 }
10979
10980 /* Generate a DW_AT_comp_dir attribute for DIE. */
10981
10982 static void
10983 add_comp_dir_attribute (dw_die_ref die)
10984 {
10985 const char *wd = get_src_pwd ();
10986 if (wd != NULL)
10987 add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
10988 }
10989
10990 /* Given a tree node describing an array bound (either lower or upper) output
10991 a representation for that bound. */
10992
10993 static void
10994 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
10995 {
10996 switch (TREE_CODE (bound))
10997 {
10998 case ERROR_MARK:
10999 return;
11000
11001 /* All fixed-bounds are represented by INTEGER_CST nodes. */
11002 case INTEGER_CST:
11003 if (! host_integerp (bound, 0)
11004 || (bound_attr == DW_AT_lower_bound
11005 && (((is_c_family () || is_java ()) && integer_zerop (bound))
11006 || (is_fortran () && integer_onep (bound)))))
11007 /* Use the default. */
11008 ;
11009 else
11010 add_AT_unsigned (subrange_die, bound_attr, tree_low_cst (bound, 0));
11011 break;
11012
11013 case CONVERT_EXPR:
11014 case NOP_EXPR:
11015 case NON_LVALUE_EXPR:
11016 case VIEW_CONVERT_EXPR:
11017 add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
11018 break;
11019
11020 case SAVE_EXPR:
11021 break;
11022
11023 case VAR_DECL:
11024 case PARM_DECL:
11025 case RESULT_DECL:
11026 {
11027 dw_die_ref decl_die = lookup_decl_die (bound);
11028
11029 /* ??? Can this happen, or should the variable have been bound
11030 first? Probably it can, since I imagine that we try to create
11031 the types of parameters in the order in which they exist in
11032 the list, and won't have created a forward reference to a
11033 later parameter. */
11034 if (decl_die != NULL)
11035 add_AT_die_ref (subrange_die, bound_attr, decl_die);
11036 break;
11037 }
11038
11039 default:
11040 {
11041 /* Otherwise try to create a stack operation procedure to
11042 evaluate the value of the array bound. */
11043
11044 dw_die_ref ctx, decl_die;
11045 dw_loc_descr_ref loc;
11046
11047 loc = loc_descriptor_from_tree (bound);
11048 if (loc == NULL)
11049 break;
11050
11051 if (current_function_decl == 0)
11052 ctx = comp_unit_die;
11053 else
11054 ctx = lookup_decl_die (current_function_decl);
11055
11056 decl_die = new_die (DW_TAG_variable, ctx, bound);
11057 add_AT_flag (decl_die, DW_AT_artificial, 1);
11058 add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
11059 add_AT_loc (decl_die, DW_AT_location, loc);
11060
11061 add_AT_die_ref (subrange_die, bound_attr, decl_die);
11062 break;
11063 }
11064 }
11065 }
11066
11067 /* Note that the block of subscript information for an array type also
11068 includes information about the element type of type given array type. */
11069
11070 static void
11071 add_subscript_info (dw_die_ref type_die, tree type)
11072 {
11073 #ifndef MIPS_DEBUGGING_INFO
11074 unsigned dimension_number;
11075 #endif
11076 tree lower, upper;
11077 dw_die_ref subrange_die;
11078
11079 /* The GNU compilers represent multidimensional array types as sequences of
11080 one dimensional array types whose element types are themselves array
11081 types. Here we squish that down, so that each multidimensional array
11082 type gets only one array_type DIE in the Dwarf debugging info. The draft
11083 Dwarf specification say that we are allowed to do this kind of
11084 compression in C (because there is no difference between an array or
11085 arrays and a multidimensional array in C) but for other source languages
11086 (e.g. Ada) we probably shouldn't do this. */
11087
11088 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
11089 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
11090 We work around this by disabling this feature. See also
11091 gen_array_type_die. */
11092 #ifndef MIPS_DEBUGGING_INFO
11093 for (dimension_number = 0;
11094 TREE_CODE (type) == ARRAY_TYPE;
11095 type = TREE_TYPE (type), dimension_number++)
11096 #endif
11097 {
11098 tree domain = TYPE_DOMAIN (type);
11099
11100 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
11101 and (in GNU C only) variable bounds. Handle all three forms
11102 here. */
11103 subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
11104 if (domain)
11105 {
11106 /* We have an array type with specified bounds. */
11107 lower = TYPE_MIN_VALUE (domain);
11108 upper = TYPE_MAX_VALUE (domain);
11109
11110 /* Define the index type. */
11111 if (TREE_TYPE (domain))
11112 {
11113 /* ??? This is probably an Ada unnamed subrange type. Ignore the
11114 TREE_TYPE field. We can't emit debug info for this
11115 because it is an unnamed integral type. */
11116 if (TREE_CODE (domain) == INTEGER_TYPE
11117 && TYPE_NAME (domain) == NULL_TREE
11118 && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
11119 && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
11120 ;
11121 else
11122 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
11123 type_die);
11124 }
11125
11126 /* ??? If upper is NULL, the array has unspecified length,
11127 but it does have a lower bound. This happens with Fortran
11128 dimension arr(N:*)
11129 Since the debugger is definitely going to need to know N
11130 to produce useful results, go ahead and output the lower
11131 bound solo, and hope the debugger can cope. */
11132
11133 add_bound_info (subrange_die, DW_AT_lower_bound, lower);
11134 if (upper)
11135 add_bound_info (subrange_die, DW_AT_upper_bound, upper);
11136 }
11137
11138 /* Otherwise we have an array type with an unspecified length. The
11139 DWARF-2 spec does not say how to handle this; let's just leave out the
11140 bounds. */
11141 }
11142 }
11143
11144 static void
11145 add_byte_size_attribute (dw_die_ref die, tree tree_node)
11146 {
11147 unsigned size;
11148
11149 switch (TREE_CODE (tree_node))
11150 {
11151 case ERROR_MARK:
11152 size = 0;
11153 break;
11154 case ENUMERAL_TYPE:
11155 case RECORD_TYPE:
11156 case UNION_TYPE:
11157 case QUAL_UNION_TYPE:
11158 size = int_size_in_bytes (tree_node);
11159 break;
11160 case FIELD_DECL:
11161 /* For a data member of a struct or union, the DW_AT_byte_size is
11162 generally given as the number of bytes normally allocated for an
11163 object of the *declared* type of the member itself. This is true
11164 even for bit-fields. */
11165 size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
11166 break;
11167 default:
11168 gcc_unreachable ();
11169 }
11170
11171 /* Note that `size' might be -1 when we get to this point. If it is, that
11172 indicates that the byte size of the entity in question is variable. We
11173 have no good way of expressing this fact in Dwarf at the present time,
11174 so just let the -1 pass on through. */
11175 add_AT_unsigned (die, DW_AT_byte_size, size);
11176 }
11177
11178 /* For a FIELD_DECL node which represents a bit-field, output an attribute
11179 which specifies the distance in bits from the highest order bit of the
11180 "containing object" for the bit-field to the highest order bit of the
11181 bit-field itself.
11182
11183 For any given bit-field, the "containing object" is a hypothetical object
11184 (of some integral or enum type) within which the given bit-field lives. The
11185 type of this hypothetical "containing object" is always the same as the
11186 declared type of the individual bit-field itself. The determination of the
11187 exact location of the "containing object" for a bit-field is rather
11188 complicated. It's handled by the `field_byte_offset' function (above).
11189
11190 Note that it is the size (in bytes) of the hypothetical "containing object"
11191 which will be given in the DW_AT_byte_size attribute for this bit-field.
11192 (See `byte_size_attribute' above). */
11193
11194 static inline void
11195 add_bit_offset_attribute (dw_die_ref die, tree decl)
11196 {
11197 HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
11198 tree type = DECL_BIT_FIELD_TYPE (decl);
11199 HOST_WIDE_INT bitpos_int;
11200 HOST_WIDE_INT highest_order_object_bit_offset;
11201 HOST_WIDE_INT highest_order_field_bit_offset;
11202 HOST_WIDE_INT unsigned bit_offset;
11203
11204 /* Must be a field and a bit field. */
11205 gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
11206
11207 /* We can't yet handle bit-fields whose offsets are variable, so if we
11208 encounter such things, just return without generating any attribute
11209 whatsoever. Likewise for variable or too large size. */
11210 if (! host_integerp (bit_position (decl), 0)
11211 || ! host_integerp (DECL_SIZE (decl), 1))
11212 return;
11213
11214 bitpos_int = int_bit_position (decl);
11215
11216 /* Note that the bit offset is always the distance (in bits) from the
11217 highest-order bit of the "containing object" to the highest-order bit of
11218 the bit-field itself. Since the "high-order end" of any object or field
11219 is different on big-endian and little-endian machines, the computation
11220 below must take account of these differences. */
11221 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
11222 highest_order_field_bit_offset = bitpos_int;
11223
11224 if (! BYTES_BIG_ENDIAN)
11225 {
11226 highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
11227 highest_order_object_bit_offset += simple_type_size_in_bits (type);
11228 }
11229
11230 bit_offset
11231 = (! BYTES_BIG_ENDIAN
11232 ? highest_order_object_bit_offset - highest_order_field_bit_offset
11233 : highest_order_field_bit_offset - highest_order_object_bit_offset);
11234
11235 add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
11236 }
11237
11238 /* For a FIELD_DECL node which represents a bit field, output an attribute
11239 which specifies the length in bits of the given field. */
11240
11241 static inline void
11242 add_bit_size_attribute (dw_die_ref die, tree decl)
11243 {
11244 /* Must be a field and a bit field. */
11245 gcc_assert (TREE_CODE (decl) == FIELD_DECL
11246 && DECL_BIT_FIELD_TYPE (decl));
11247
11248 if (host_integerp (DECL_SIZE (decl), 1))
11249 add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
11250 }
11251
11252 /* If the compiled language is ANSI C, then add a 'prototyped'
11253 attribute, if arg types are given for the parameters of a function. */
11254
11255 static inline void
11256 add_prototyped_attribute (dw_die_ref die, tree func_type)
11257 {
11258 if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
11259 && TYPE_ARG_TYPES (func_type) != NULL)
11260 add_AT_flag (die, DW_AT_prototyped, 1);
11261 }
11262
11263 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
11264 by looking in either the type declaration or object declaration
11265 equate table. */
11266
11267 static inline void
11268 add_abstract_origin_attribute (dw_die_ref die, tree origin)
11269 {
11270 dw_die_ref origin_die = NULL;
11271
11272 if (TREE_CODE (origin) != FUNCTION_DECL)
11273 {
11274 /* We may have gotten separated from the block for the inlined
11275 function, if we're in an exception handler or some such; make
11276 sure that the abstract function has been written out.
11277
11278 Doing this for nested functions is wrong, however; functions are
11279 distinct units, and our context might not even be inline. */
11280 tree fn = origin;
11281
11282 if (TYPE_P (fn))
11283 fn = TYPE_STUB_DECL (fn);
11284
11285 fn = decl_function_context (fn);
11286 if (fn)
11287 dwarf2out_abstract_function (fn);
11288 }
11289
11290 if (DECL_P (origin))
11291 origin_die = lookup_decl_die (origin);
11292 else if (TYPE_P (origin))
11293 origin_die = lookup_type_die (origin);
11294
11295 /* XXX: Functions that are never lowered don't always have correct block
11296 trees (in the case of java, they simply have no block tree, in some other
11297 languages). For these functions, there is nothing we can really do to
11298 output correct debug info for inlined functions in all cases. Rather
11299 than die, we'll just produce deficient debug info now, in that we will
11300 have variables without a proper abstract origin. In the future, when all
11301 functions are lowered, we should re-add a gcc_assert (origin_die)
11302 here. */
11303
11304 if (origin_die)
11305 add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
11306 }
11307
11308 /* We do not currently support the pure_virtual attribute. */
11309
11310 static inline void
11311 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
11312 {
11313 if (DECL_VINDEX (func_decl))
11314 {
11315 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
11316
11317 if (host_integerp (DECL_VINDEX (func_decl), 0))
11318 add_AT_loc (die, DW_AT_vtable_elem_location,
11319 new_loc_descr (DW_OP_constu,
11320 tree_low_cst (DECL_VINDEX (func_decl), 0),
11321 0));
11322
11323 /* GNU extension: Record what type this method came from originally. */
11324 if (debug_info_level > DINFO_LEVEL_TERSE)
11325 add_AT_die_ref (die, DW_AT_containing_type,
11326 lookup_type_die (DECL_CONTEXT (func_decl)));
11327 }
11328 }
11329 \f
11330 /* Add source coordinate attributes for the given decl. */
11331
11332 static void
11333 add_src_coords_attributes (dw_die_ref die, tree decl)
11334 {
11335 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
11336
11337 add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
11338 add_AT_unsigned (die, DW_AT_decl_line, s.line);
11339 }
11340
11341 /* Add a DW_AT_name attribute and source coordinate attribute for the
11342 given decl, but only if it actually has a name. */
11343
11344 static void
11345 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
11346 {
11347 tree decl_name;
11348
11349 decl_name = DECL_NAME (decl);
11350 if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
11351 {
11352 add_name_attribute (die, dwarf2_name (decl, 0));
11353 if (! DECL_ARTIFICIAL (decl))
11354 add_src_coords_attributes (die, decl);
11355
11356 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
11357 && TREE_PUBLIC (decl)
11358 && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)
11359 && !DECL_ABSTRACT (decl)
11360 && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
11361 && !is_fortran ())
11362 add_AT_string (die, DW_AT_MIPS_linkage_name,
11363 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
11364 }
11365
11366 #ifdef VMS_DEBUGGING_INFO
11367 /* Get the function's name, as described by its RTL. This may be different
11368 from the DECL_NAME name used in the source file. */
11369 if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
11370 {
11371 add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
11372 XEXP (DECL_RTL (decl), 0));
11373 VEC_safe_push (tree, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
11374 }
11375 #endif
11376 }
11377
11378 /* Push a new declaration scope. */
11379
11380 static void
11381 push_decl_scope (tree scope)
11382 {
11383 VEC_safe_push (tree, gc, decl_scope_table, scope);
11384 }
11385
11386 /* Pop a declaration scope. */
11387
11388 static inline void
11389 pop_decl_scope (void)
11390 {
11391 VEC_pop (tree, decl_scope_table);
11392 }
11393
11394 /* Return the DIE for the scope that immediately contains this type.
11395 Non-named types get global scope. Named types nested in other
11396 types get their containing scope if it's open, or global scope
11397 otherwise. All other types (i.e. function-local named types) get
11398 the current active scope. */
11399
11400 static dw_die_ref
11401 scope_die_for (tree t, dw_die_ref context_die)
11402 {
11403 dw_die_ref scope_die = NULL;
11404 tree containing_scope;
11405 int i;
11406
11407 /* Non-types always go in the current scope. */
11408 gcc_assert (TYPE_P (t));
11409
11410 containing_scope = TYPE_CONTEXT (t);
11411
11412 /* Use the containing namespace if it was passed in (for a declaration). */
11413 if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
11414 {
11415 if (context_die == lookup_decl_die (containing_scope))
11416 /* OK */;
11417 else
11418 containing_scope = NULL_TREE;
11419 }
11420
11421 /* Ignore function type "scopes" from the C frontend. They mean that
11422 a tagged type is local to a parmlist of a function declarator, but
11423 that isn't useful to DWARF. */
11424 if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
11425 containing_scope = NULL_TREE;
11426
11427 if (containing_scope == NULL_TREE)
11428 scope_die = comp_unit_die;
11429 else if (TYPE_P (containing_scope))
11430 {
11431 /* For types, we can just look up the appropriate DIE. But
11432 first we check to see if we're in the middle of emitting it
11433 so we know where the new DIE should go. */
11434 for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
11435 if (VEC_index (tree, decl_scope_table, i) == containing_scope)
11436 break;
11437
11438 if (i < 0)
11439 {
11440 gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
11441 || TREE_ASM_WRITTEN (containing_scope));
11442
11443 /* If none of the current dies are suitable, we get file scope. */
11444 scope_die = comp_unit_die;
11445 }
11446 else
11447 scope_die = lookup_type_die (containing_scope);
11448 }
11449 else
11450 scope_die = context_die;
11451
11452 return scope_die;
11453 }
11454
11455 /* Returns nonzero if CONTEXT_DIE is internal to a function. */
11456
11457 static inline int
11458 local_scope_p (dw_die_ref context_die)
11459 {
11460 for (; context_die; context_die = context_die->die_parent)
11461 if (context_die->die_tag == DW_TAG_inlined_subroutine
11462 || context_die->die_tag == DW_TAG_subprogram)
11463 return 1;
11464
11465 return 0;
11466 }
11467
11468 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
11469 whether or not to treat a DIE in this context as a declaration. */
11470
11471 static inline int
11472 class_or_namespace_scope_p (dw_die_ref context_die)
11473 {
11474 return (context_die
11475 && (context_die->die_tag == DW_TAG_structure_type
11476 || context_die->die_tag == DW_TAG_union_type
11477 || context_die->die_tag == DW_TAG_namespace));
11478 }
11479
11480 /* Many forms of DIEs require a "type description" attribute. This
11481 routine locates the proper "type descriptor" die for the type given
11482 by 'type', and adds a DW_AT_type attribute below the given die. */
11483
11484 static void
11485 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
11486 int decl_volatile, dw_die_ref context_die)
11487 {
11488 enum tree_code code = TREE_CODE (type);
11489 dw_die_ref type_die = NULL;
11490
11491 /* ??? If this type is an unnamed subrange type of an integral, floating-point
11492 or fixed-point type, use the inner type. This is because we have no
11493 support for unnamed types in base_type_die. This can happen if this is
11494 an Ada subrange type. Correct solution is emit a subrange type die. */
11495 if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
11496 && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
11497 type = TREE_TYPE (type), code = TREE_CODE (type);
11498
11499 if (code == ERROR_MARK
11500 /* Handle a special case. For functions whose return type is void, we
11501 generate *no* type attribute. (Note that no object may have type
11502 `void', so this only applies to function return types). */
11503 || code == VOID_TYPE)
11504 return;
11505
11506 type_die = modified_type_die (type,
11507 decl_const || TYPE_READONLY (type),
11508 decl_volatile || TYPE_VOLATILE (type),
11509 context_die);
11510
11511 if (type_die != NULL)
11512 add_AT_die_ref (object_die, DW_AT_type, type_die);
11513 }
11514
11515 /* Given an object die, add the calling convention attribute for the
11516 function call type. */
11517 static void
11518 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
11519 {
11520 enum dwarf_calling_convention value = DW_CC_normal;
11521
11522 value = targetm.dwarf_calling_convention (TREE_TYPE (decl));
11523
11524 /* DWARF doesn't provide a way to identify a program's source-level
11525 entry point. DW_AT_calling_convention attributes are only meant
11526 to describe functions' calling conventions. However, lacking a
11527 better way to signal the Fortran main program, we use this for the
11528 time being, following existing custom. */
11529 if (is_fortran ()
11530 && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
11531 value = DW_CC_program;
11532
11533 /* Only add the attribute if the backend requests it, and
11534 is not DW_CC_normal. */
11535 if (value && (value != DW_CC_normal))
11536 add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
11537 }
11538
11539 /* Given a tree pointer to a struct, class, union, or enum type node, return
11540 a pointer to the (string) tag name for the given type, or zero if the type
11541 was declared without a tag. */
11542
11543 static const char *
11544 type_tag (const_tree type)
11545 {
11546 const char *name = 0;
11547
11548 if (TYPE_NAME (type) != 0)
11549 {
11550 tree t = 0;
11551
11552 /* Find the IDENTIFIER_NODE for the type name. */
11553 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
11554 t = TYPE_NAME (type);
11555
11556 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
11557 a TYPE_DECL node, regardless of whether or not a `typedef' was
11558 involved. */
11559 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11560 && ! DECL_IGNORED_P (TYPE_NAME (type)))
11561 {
11562 /* We want to be extra verbose. Don't call dwarf_name if
11563 DECL_NAME isn't set. The default hook for decl_printable_name
11564 doesn't like that, and in this context it's correct to return
11565 0, instead of "<anonymous>" or the like. */
11566 if (DECL_NAME (TYPE_NAME (type)))
11567 name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
11568 }
11569
11570 /* Now get the name as a string, or invent one. */
11571 if (!name && t != 0)
11572 name = IDENTIFIER_POINTER (t);
11573 }
11574
11575 return (name == 0 || *name == '\0') ? 0 : name;
11576 }
11577
11578 /* Return the type associated with a data member, make a special check
11579 for bit field types. */
11580
11581 static inline tree
11582 member_declared_type (const_tree member)
11583 {
11584 return (DECL_BIT_FIELD_TYPE (member)
11585 ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
11586 }
11587
11588 /* Get the decl's label, as described by its RTL. This may be different
11589 from the DECL_NAME name used in the source file. */
11590
11591 #if 0
11592 static const char *
11593 decl_start_label (tree decl)
11594 {
11595 rtx x;
11596 const char *fnname;
11597
11598 x = DECL_RTL (decl);
11599 gcc_assert (MEM_P (x));
11600
11601 x = XEXP (x, 0);
11602 gcc_assert (GET_CODE (x) == SYMBOL_REF);
11603
11604 fnname = XSTR (x, 0);
11605 return fnname;
11606 }
11607 #endif
11608 \f
11609 /* These routines generate the internal representation of the DIE's for
11610 the compilation unit. Debugging information is collected by walking
11611 the declaration trees passed in from dwarf2out_decl(). */
11612
11613 static void
11614 gen_array_type_die (tree type, dw_die_ref context_die)
11615 {
11616 dw_die_ref scope_die = scope_die_for (type, context_die);
11617 dw_die_ref array_die;
11618 tree element_type;
11619
11620 /* ??? The SGI dwarf reader fails for array of array of enum types unless
11621 the inner array type comes before the outer array type. Thus we must
11622 call gen_type_die before we call new_die. See below also. */
11623 #ifdef MIPS_DEBUGGING_INFO
11624 gen_type_die (TREE_TYPE (type), context_die);
11625 #endif
11626
11627 array_die = new_die (DW_TAG_array_type, scope_die, type);
11628 add_name_attribute (array_die, type_tag (type));
11629 equate_type_number_to_die (type, array_die);
11630
11631 if (TREE_CODE (type) == VECTOR_TYPE)
11632 {
11633 /* The frontend feeds us a representation for the vector as a struct
11634 containing an array. Pull out the array type. */
11635 type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
11636 add_AT_flag (array_die, DW_AT_GNU_vector, 1);
11637 }
11638
11639 #if 0
11640 /* We default the array ordering. SDB will probably do
11641 the right things even if DW_AT_ordering is not present. It's not even
11642 an issue until we start to get into multidimensional arrays anyway. If
11643 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
11644 then we'll have to put the DW_AT_ordering attribute back in. (But if
11645 and when we find out that we need to put these in, we will only do so
11646 for multidimensional arrays. */
11647 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
11648 #endif
11649
11650 #ifdef MIPS_DEBUGGING_INFO
11651 /* The SGI compilers handle arrays of unknown bound by setting
11652 AT_declaration and not emitting any subrange DIEs. */
11653 if (! TYPE_DOMAIN (type))
11654 add_AT_flag (array_die, DW_AT_declaration, 1);
11655 else
11656 #endif
11657 add_subscript_info (array_die, type);
11658
11659 /* Add representation of the type of the elements of this array type. */
11660 element_type = TREE_TYPE (type);
11661
11662 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
11663 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
11664 We work around this by disabling this feature. See also
11665 add_subscript_info. */
11666 #ifndef MIPS_DEBUGGING_INFO
11667 while (TREE_CODE (element_type) == ARRAY_TYPE)
11668 element_type = TREE_TYPE (element_type);
11669
11670 gen_type_die (element_type, context_die);
11671 #endif
11672
11673 add_type_attribute (array_die, element_type, 0, 0, context_die);
11674
11675 if (get_AT (array_die, DW_AT_name))
11676 add_pubtype (type, array_die);
11677 }
11678
11679 static dw_loc_descr_ref
11680 descr_info_loc (tree val, tree base_decl)
11681 {
11682 HOST_WIDE_INT size;
11683 dw_loc_descr_ref loc, loc2;
11684 enum dwarf_location_atom op;
11685
11686 if (val == base_decl)
11687 return new_loc_descr (DW_OP_push_object_address, 0, 0);
11688
11689 switch (TREE_CODE (val))
11690 {
11691 case NOP_EXPR:
11692 case CONVERT_EXPR:
11693 return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
11694 case INTEGER_CST:
11695 if (host_integerp (val, 0))
11696 return int_loc_descriptor (tree_low_cst (val, 0));
11697 break;
11698 case INDIRECT_REF:
11699 size = int_size_in_bytes (TREE_TYPE (val));
11700 if (size < 0)
11701 break;
11702 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
11703 if (!loc)
11704 break;
11705 if (size == DWARF2_ADDR_SIZE)
11706 add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
11707 else
11708 add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
11709 return loc;
11710 case POINTER_PLUS_EXPR:
11711 case PLUS_EXPR:
11712 if (host_integerp (TREE_OPERAND (val, 1), 1)
11713 && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
11714 < 16384)
11715 {
11716 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
11717 if (!loc)
11718 break;
11719 add_loc_descr (&loc,
11720 new_loc_descr (DW_OP_plus_uconst,
11721 tree_low_cst (TREE_OPERAND (val, 1),
11722 1), 0));
11723 }
11724 else
11725 {
11726 op = DW_OP_plus;
11727 do_binop:
11728 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
11729 if (!loc)
11730 break;
11731 loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
11732 if (!loc2)
11733 break;
11734 add_loc_descr (&loc, loc2);
11735 add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
11736 }
11737 return loc;
11738 case MINUS_EXPR:
11739 op = DW_OP_minus;
11740 goto do_binop;
11741 case MULT_EXPR:
11742 op = DW_OP_mul;
11743 goto do_binop;
11744 case EQ_EXPR:
11745 op = DW_OP_eq;
11746 goto do_binop;
11747 case NE_EXPR:
11748 op = DW_OP_ne;
11749 goto do_binop;
11750 default:
11751 break;
11752 }
11753 return NULL;
11754 }
11755
11756 static void
11757 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
11758 tree val, tree base_decl)
11759 {
11760 dw_loc_descr_ref loc;
11761
11762 if (host_integerp (val, 0))
11763 {
11764 add_AT_unsigned (die, attr, tree_low_cst (val, 0));
11765 return;
11766 }
11767
11768 loc = descr_info_loc (val, base_decl);
11769 if (!loc)
11770 return;
11771
11772 add_AT_loc (die, attr, loc);
11773 }
11774
11775 /* This routine generates DIE for array with hidden descriptor, details
11776 are filled into *info by a langhook. */
11777
11778 static void
11779 gen_descr_array_type_die (tree type, struct array_descr_info *info,
11780 dw_die_ref context_die)
11781 {
11782 dw_die_ref scope_die = scope_die_for (type, context_die);
11783 dw_die_ref array_die;
11784 int dim;
11785
11786 array_die = new_die (DW_TAG_array_type, scope_die, type);
11787 add_name_attribute (array_die, type_tag (type));
11788 equate_type_number_to_die (type, array_die);
11789
11790 if (info->data_location)
11791 add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
11792 info->base_decl);
11793 if (info->associated)
11794 add_descr_info_field (array_die, DW_AT_associated, info->associated,
11795 info->base_decl);
11796 if (info->allocated)
11797 add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
11798 info->base_decl);
11799
11800 for (dim = 0; dim < info->ndimensions; dim++)
11801 {
11802 dw_die_ref subrange_die
11803 = new_die (DW_TAG_subrange_type, array_die, NULL);
11804
11805 if (info->dimen[dim].lower_bound)
11806 {
11807 /* If it is the default value, omit it. */
11808 if ((is_c_family () || is_java ())
11809 && integer_zerop (info->dimen[dim].lower_bound))
11810 ;
11811 else if (is_fortran ()
11812 && integer_onep (info->dimen[dim].lower_bound))
11813 ;
11814 else
11815 add_descr_info_field (subrange_die, DW_AT_lower_bound,
11816 info->dimen[dim].lower_bound,
11817 info->base_decl);
11818 }
11819 if (info->dimen[dim].upper_bound)
11820 add_descr_info_field (subrange_die, DW_AT_upper_bound,
11821 info->dimen[dim].upper_bound,
11822 info->base_decl);
11823 if (info->dimen[dim].stride)
11824 add_descr_info_field (subrange_die, DW_AT_byte_stride,
11825 info->dimen[dim].stride,
11826 info->base_decl);
11827 }
11828
11829 gen_type_die (info->element_type, context_die);
11830 add_type_attribute (array_die, info->element_type, 0, 0, context_die);
11831
11832 if (get_AT (array_die, DW_AT_name))
11833 add_pubtype (type, array_die);
11834 }
11835
11836 #if 0
11837 static void
11838 gen_entry_point_die (tree decl, dw_die_ref context_die)
11839 {
11840 tree origin = decl_ultimate_origin (decl);
11841 dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
11842
11843 if (origin != NULL)
11844 add_abstract_origin_attribute (decl_die, origin);
11845 else
11846 {
11847 add_name_and_src_coords_attributes (decl_die, decl);
11848 add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
11849 0, 0, context_die);
11850 }
11851
11852 if (DECL_ABSTRACT (decl))
11853 equate_decl_number_to_die (decl, decl_die);
11854 else
11855 add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
11856 }
11857 #endif
11858
11859 /* Walk through the list of incomplete types again, trying once more to
11860 emit full debugging info for them. */
11861
11862 static void
11863 retry_incomplete_types (void)
11864 {
11865 int i;
11866
11867 for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
11868 gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
11869 }
11870
11871 /* Generate a DIE to represent an inlined instance of an enumeration type. */
11872
11873 static void
11874 gen_inlined_enumeration_type_die (tree type, dw_die_ref context_die)
11875 {
11876 dw_die_ref type_die = new_die (DW_TAG_enumeration_type, context_die, type);
11877
11878 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11879 be incomplete and such types are not marked. */
11880 add_abstract_origin_attribute (type_die, type);
11881 }
11882
11883 /* Generate a DIE to represent an inlined instance of a structure type. */
11884
11885 static void
11886 gen_inlined_structure_type_die (tree type, dw_die_ref context_die)
11887 {
11888 dw_die_ref type_die = new_die (DW_TAG_structure_type, context_die, type);
11889
11890 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11891 be incomplete and such types are not marked. */
11892 add_abstract_origin_attribute (type_die, type);
11893 }
11894
11895 /* Generate a DIE to represent an inlined instance of a union type. */
11896
11897 static void
11898 gen_inlined_union_type_die (tree type, dw_die_ref context_die)
11899 {
11900 dw_die_ref type_die = new_die (DW_TAG_union_type, context_die, type);
11901
11902 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11903 be incomplete and such types are not marked. */
11904 add_abstract_origin_attribute (type_die, type);
11905 }
11906
11907 /* Generate a DIE to represent an enumeration type. Note that these DIEs
11908 include all of the information about the enumeration values also. Each
11909 enumerated type name/value is listed as a child of the enumerated type
11910 DIE. */
11911
11912 static dw_die_ref
11913 gen_enumeration_type_die (tree type, dw_die_ref context_die)
11914 {
11915 dw_die_ref type_die = lookup_type_die (type);
11916
11917 if (type_die == NULL)
11918 {
11919 type_die = new_die (DW_TAG_enumeration_type,
11920 scope_die_for (type, context_die), type);
11921 equate_type_number_to_die (type, type_die);
11922 add_name_attribute (type_die, type_tag (type));
11923 }
11924 else if (! TYPE_SIZE (type))
11925 return type_die;
11926 else
11927 remove_AT (type_die, DW_AT_declaration);
11928
11929 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
11930 given enum type is incomplete, do not generate the DW_AT_byte_size
11931 attribute or the DW_AT_element_list attribute. */
11932 if (TYPE_SIZE (type))
11933 {
11934 tree link;
11935
11936 TREE_ASM_WRITTEN (type) = 1;
11937 add_byte_size_attribute (type_die, type);
11938 if (TYPE_STUB_DECL (type) != NULL_TREE)
11939 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
11940
11941 /* If the first reference to this type was as the return type of an
11942 inline function, then it may not have a parent. Fix this now. */
11943 if (type_die->die_parent == NULL)
11944 add_child_die (scope_die_for (type, context_die), type_die);
11945
11946 for (link = TYPE_VALUES (type);
11947 link != NULL; link = TREE_CHAIN (link))
11948 {
11949 dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
11950 tree value = TREE_VALUE (link);
11951
11952 add_name_attribute (enum_die,
11953 IDENTIFIER_POINTER (TREE_PURPOSE (link)));
11954
11955 if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
11956 /* DWARF2 does not provide a way of indicating whether or
11957 not enumeration constants are signed or unsigned. GDB
11958 always assumes the values are signed, so we output all
11959 values as if they were signed. That means that
11960 enumeration constants with very large unsigned values
11961 will appear to have negative values in the debugger. */
11962 add_AT_int (enum_die, DW_AT_const_value,
11963 tree_low_cst (value, tree_int_cst_sgn (value) > 0));
11964 }
11965 }
11966 else
11967 add_AT_flag (type_die, DW_AT_declaration, 1);
11968
11969 if (get_AT (type_die, DW_AT_name))
11970 add_pubtype (type, type_die);
11971
11972 return type_die;
11973 }
11974
11975 /* Generate a DIE to represent either a real live formal parameter decl or to
11976 represent just the type of some formal parameter position in some function
11977 type.
11978
11979 Note that this routine is a bit unusual because its argument may be a
11980 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
11981 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
11982 node. If it's the former then this function is being called to output a
11983 DIE to represent a formal parameter object (or some inlining thereof). If
11984 it's the latter, then this function is only being called to output a
11985 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
11986 argument type of some subprogram type. */
11987
11988 static dw_die_ref
11989 gen_formal_parameter_die (tree node, dw_die_ref context_die)
11990 {
11991 dw_die_ref parm_die
11992 = new_die (DW_TAG_formal_parameter, context_die, node);
11993 tree origin;
11994
11995 switch (TREE_CODE_CLASS (TREE_CODE (node)))
11996 {
11997 case tcc_declaration:
11998 origin = decl_ultimate_origin (node);
11999 if (origin != NULL)
12000 add_abstract_origin_attribute (parm_die, origin);
12001 else
12002 {
12003 tree type = TREE_TYPE (node);
12004 add_name_and_src_coords_attributes (parm_die, node);
12005 if (DECL_BY_REFERENCE (node))
12006 type = TREE_TYPE (type);
12007 add_type_attribute (parm_die, type,
12008 TREE_READONLY (node),
12009 TREE_THIS_VOLATILE (node),
12010 context_die);
12011 if (DECL_ARTIFICIAL (node))
12012 add_AT_flag (parm_die, DW_AT_artificial, 1);
12013 }
12014
12015 equate_decl_number_to_die (node, parm_die);
12016 if (! DECL_ABSTRACT (node))
12017 add_location_or_const_value_attribute (parm_die, node, DW_AT_location);
12018
12019 break;
12020
12021 case tcc_type:
12022 /* We were called with some kind of a ..._TYPE node. */
12023 add_type_attribute (parm_die, node, 0, 0, context_die);
12024 break;
12025
12026 default:
12027 gcc_unreachable ();
12028 }
12029
12030 return parm_die;
12031 }
12032
12033 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
12034 at the end of an (ANSI prototyped) formal parameters list. */
12035
12036 static void
12037 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
12038 {
12039 new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
12040 }
12041
12042 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
12043 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
12044 parameters as specified in some function type specification (except for
12045 those which appear as part of a function *definition*). */
12046
12047 static void
12048 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
12049 {
12050 tree link;
12051 tree formal_type = NULL;
12052 tree first_parm_type;
12053 tree arg;
12054
12055 if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
12056 {
12057 arg = DECL_ARGUMENTS (function_or_method_type);
12058 function_or_method_type = TREE_TYPE (function_or_method_type);
12059 }
12060 else
12061 arg = NULL_TREE;
12062
12063 first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
12064
12065 /* Make our first pass over the list of formal parameter types and output a
12066 DW_TAG_formal_parameter DIE for each one. */
12067 for (link = first_parm_type; link; )
12068 {
12069 dw_die_ref parm_die;
12070
12071 formal_type = TREE_VALUE (link);
12072 if (formal_type == void_type_node)
12073 break;
12074
12075 /* Output a (nameless) DIE to represent the formal parameter itself. */
12076 parm_die = gen_formal_parameter_die (formal_type, context_die);
12077 if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
12078 && link == first_parm_type)
12079 || (arg && DECL_ARTIFICIAL (arg)))
12080 add_AT_flag (parm_die, DW_AT_artificial, 1);
12081
12082 link = TREE_CHAIN (link);
12083 if (arg)
12084 arg = TREE_CHAIN (arg);
12085 }
12086
12087 /* If this function type has an ellipsis, add a
12088 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
12089 if (formal_type != void_type_node)
12090 gen_unspecified_parameters_die (function_or_method_type, context_die);
12091
12092 /* Make our second (and final) pass over the list of formal parameter types
12093 and output DIEs to represent those types (as necessary). */
12094 for (link = TYPE_ARG_TYPES (function_or_method_type);
12095 link && TREE_VALUE (link);
12096 link = TREE_CHAIN (link))
12097 gen_type_die (TREE_VALUE (link), context_die);
12098 }
12099
12100 /* We want to generate the DIE for TYPE so that we can generate the
12101 die for MEMBER, which has been defined; we will need to refer back
12102 to the member declaration nested within TYPE. If we're trying to
12103 generate minimal debug info for TYPE, processing TYPE won't do the
12104 trick; we need to attach the member declaration by hand. */
12105
12106 static void
12107 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
12108 {
12109 gen_type_die (type, context_die);
12110
12111 /* If we're trying to avoid duplicate debug info, we may not have
12112 emitted the member decl for this function. Emit it now. */
12113 if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
12114 && ! lookup_decl_die (member))
12115 {
12116 dw_die_ref type_die;
12117 gcc_assert (!decl_ultimate_origin (member));
12118
12119 push_decl_scope (type);
12120 type_die = lookup_type_die (type);
12121 if (TREE_CODE (member) == FUNCTION_DECL)
12122 gen_subprogram_die (member, type_die);
12123 else if (TREE_CODE (member) == FIELD_DECL)
12124 {
12125 /* Ignore the nameless fields that are used to skip bits but handle
12126 C++ anonymous unions and structs. */
12127 if (DECL_NAME (member) != NULL_TREE
12128 || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
12129 || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
12130 {
12131 gen_type_die (member_declared_type (member), type_die);
12132 gen_field_die (member, type_die);
12133 }
12134 }
12135 else
12136 gen_variable_die (member, type_die);
12137
12138 pop_decl_scope ();
12139 }
12140 }
12141
12142 /* Generate the DWARF2 info for the "abstract" instance of a function which we
12143 may later generate inlined and/or out-of-line instances of. */
12144
12145 static void
12146 dwarf2out_abstract_function (tree decl)
12147 {
12148 dw_die_ref old_die;
12149 tree save_fn;
12150 tree context;
12151 int was_abstract = DECL_ABSTRACT (decl);
12152
12153 /* Make sure we have the actual abstract inline, not a clone. */
12154 decl = DECL_ORIGIN (decl);
12155
12156 old_die = lookup_decl_die (decl);
12157 if (old_die && get_AT (old_die, DW_AT_inline))
12158 /* We've already generated the abstract instance. */
12159 return;
12160
12161 /* Be sure we've emitted the in-class declaration DIE (if any) first, so
12162 we don't get confused by DECL_ABSTRACT. */
12163 if (debug_info_level > DINFO_LEVEL_TERSE)
12164 {
12165 context = decl_class_context (decl);
12166 if (context)
12167 gen_type_die_for_member
12168 (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
12169 }
12170
12171 /* Pretend we've just finished compiling this function. */
12172 save_fn = current_function_decl;
12173 current_function_decl = decl;
12174 push_cfun (DECL_STRUCT_FUNCTION (decl));
12175
12176 set_decl_abstract_flags (decl, 1);
12177 dwarf2out_decl (decl);
12178 if (! was_abstract)
12179 set_decl_abstract_flags (decl, 0);
12180
12181 current_function_decl = save_fn;
12182 pop_cfun ();
12183 }
12184
12185 /* Helper function of premark_used_types() which gets called through
12186 htab_traverse_resize().
12187
12188 Marks the DIE of a given type in *SLOT as perennial, so it never gets
12189 marked as unused by prune_unused_types. */
12190 static int
12191 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
12192 {
12193 tree type;
12194 dw_die_ref die;
12195
12196 type = *slot;
12197 die = lookup_type_die (type);
12198 if (die != NULL)
12199 die->die_perennial_p = 1;
12200 return 1;
12201 }
12202
12203 /* Mark all members of used_types_hash as perennial. */
12204 static void
12205 premark_used_types (void)
12206 {
12207 if (cfun && cfun->used_types_hash)
12208 htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
12209 }
12210
12211 /* Generate a DIE to represent a declared function (either file-scope or
12212 block-local). */
12213
12214 static void
12215 gen_subprogram_die (tree decl, dw_die_ref context_die)
12216 {
12217 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
12218 tree origin = decl_ultimate_origin (decl);
12219 dw_die_ref subr_die;
12220 tree fn_arg_types;
12221 tree outer_scope;
12222 dw_die_ref old_die = lookup_decl_die (decl);
12223 int declaration = (current_function_decl != decl
12224 || class_or_namespace_scope_p (context_die));
12225
12226 premark_used_types ();
12227
12228 /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
12229 started to generate the abstract instance of an inline, decided to output
12230 its containing class, and proceeded to emit the declaration of the inline
12231 from the member list for the class. If so, DECLARATION takes priority;
12232 we'll get back to the abstract instance when done with the class. */
12233
12234 /* The class-scope declaration DIE must be the primary DIE. */
12235 if (origin && declaration && class_or_namespace_scope_p (context_die))
12236 {
12237 origin = NULL;
12238 gcc_assert (!old_die);
12239 }
12240
12241 /* Now that the C++ front end lazily declares artificial member fns, we
12242 might need to retrofit the declaration into its class. */
12243 if (!declaration && !origin && !old_die
12244 && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
12245 && !class_or_namespace_scope_p (context_die)
12246 && debug_info_level > DINFO_LEVEL_TERSE)
12247 old_die = force_decl_die (decl);
12248
12249 if (origin != NULL)
12250 {
12251 gcc_assert (!declaration || local_scope_p (context_die));
12252
12253 /* Fixup die_parent for the abstract instance of a nested
12254 inline function. */
12255 if (old_die && old_die->die_parent == NULL)
12256 add_child_die (context_die, old_die);
12257
12258 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
12259 add_abstract_origin_attribute (subr_die, origin);
12260 }
12261 else if (old_die)
12262 {
12263 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
12264 struct dwarf_file_data * file_index = lookup_filename (s.file);
12265
12266 if (!get_AT_flag (old_die, DW_AT_declaration)
12267 /* We can have a normal definition following an inline one in the
12268 case of redefinition of GNU C extern inlines.
12269 It seems reasonable to use AT_specification in this case. */
12270 && !get_AT (old_die, DW_AT_inline))
12271 {
12272 /* Detect and ignore this case, where we are trying to output
12273 something we have already output. */
12274 return;
12275 }
12276
12277 /* If the definition comes from the same place as the declaration,
12278 maybe use the old DIE. We always want the DIE for this function
12279 that has the *_pc attributes to be under comp_unit_die so the
12280 debugger can find it. We also need to do this for abstract
12281 instances of inlines, since the spec requires the out-of-line copy
12282 to have the same parent. For local class methods, this doesn't
12283 apply; we just use the old DIE. */
12284 if ((old_die->die_parent == comp_unit_die || context_die == NULL)
12285 && (DECL_ARTIFICIAL (decl)
12286 || (get_AT_file (old_die, DW_AT_decl_file) == file_index
12287 && (get_AT_unsigned (old_die, DW_AT_decl_line)
12288 == (unsigned) s.line))))
12289 {
12290 subr_die = old_die;
12291
12292 /* Clear out the declaration attribute and the formal parameters.
12293 Do not remove all children, because it is possible that this
12294 declaration die was forced using force_decl_die(). In such
12295 cases die that forced declaration die (e.g. TAG_imported_module)
12296 is one of the children that we do not want to remove. */
12297 remove_AT (subr_die, DW_AT_declaration);
12298 remove_child_TAG (subr_die, DW_TAG_formal_parameter);
12299 }
12300 else
12301 {
12302 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
12303 add_AT_specification (subr_die, old_die);
12304 if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
12305 add_AT_file (subr_die, DW_AT_decl_file, file_index);
12306 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
12307 add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
12308 }
12309 }
12310 else
12311 {
12312 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
12313
12314 if (TREE_PUBLIC (decl))
12315 add_AT_flag (subr_die, DW_AT_external, 1);
12316
12317 add_name_and_src_coords_attributes (subr_die, decl);
12318 if (debug_info_level > DINFO_LEVEL_TERSE)
12319 {
12320 add_prototyped_attribute (subr_die, TREE_TYPE (decl));
12321 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
12322 0, 0, context_die);
12323 }
12324
12325 add_pure_or_virtual_attribute (subr_die, decl);
12326 if (DECL_ARTIFICIAL (decl))
12327 add_AT_flag (subr_die, DW_AT_artificial, 1);
12328
12329 if (TREE_PROTECTED (decl))
12330 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
12331 else if (TREE_PRIVATE (decl))
12332 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
12333 }
12334
12335 if (declaration)
12336 {
12337 if (!old_die || !get_AT (old_die, DW_AT_inline))
12338 {
12339 add_AT_flag (subr_die, DW_AT_declaration, 1);
12340
12341 /* The first time we see a member function, it is in the context of
12342 the class to which it belongs. We make sure of this by emitting
12343 the class first. The next time is the definition, which is
12344 handled above. The two may come from the same source text.
12345
12346 Note that force_decl_die() forces function declaration die. It is
12347 later reused to represent definition. */
12348 equate_decl_number_to_die (decl, subr_die);
12349 }
12350 }
12351 else if (DECL_ABSTRACT (decl))
12352 {
12353 if (DECL_DECLARED_INLINE_P (decl))
12354 {
12355 if (cgraph_function_possibly_inlined_p (decl))
12356 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
12357 else
12358 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
12359 }
12360 else
12361 {
12362 if (cgraph_function_possibly_inlined_p (decl))
12363 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
12364 else
12365 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
12366 }
12367
12368 if (DECL_DECLARED_INLINE_P (decl)
12369 && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
12370 add_AT_flag (subr_die, DW_AT_artificial, 1);
12371
12372 equate_decl_number_to_die (decl, subr_die);
12373 }
12374 else if (!DECL_EXTERNAL (decl))
12375 {
12376 HOST_WIDE_INT cfa_fb_offset;
12377
12378 if (!old_die || !get_AT (old_die, DW_AT_inline))
12379 equate_decl_number_to_die (decl, subr_die);
12380
12381 if (!flag_reorder_blocks_and_partition)
12382 {
12383 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
12384 current_function_funcdef_no);
12385 add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
12386 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
12387 current_function_funcdef_no);
12388 add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
12389
12390 add_pubname (decl, subr_die);
12391 add_arange (decl, subr_die);
12392 }
12393 else
12394 { /* Do nothing for now; maybe need to duplicate die, one for
12395 hot section and ond for cold section, then use the hot/cold
12396 section begin/end labels to generate the aranges... */
12397 /*
12398 add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
12399 add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
12400 add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
12401 add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
12402
12403 add_pubname (decl, subr_die);
12404 add_arange (decl, subr_die);
12405 add_arange (decl, subr_die);
12406 */
12407 }
12408
12409 #ifdef MIPS_DEBUGGING_INFO
12410 /* Add a reference to the FDE for this routine. */
12411 add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
12412 #endif
12413
12414 cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
12415
12416 /* We define the "frame base" as the function's CFA. This is more
12417 convenient for several reasons: (1) It's stable across the prologue
12418 and epilogue, which makes it better than just a frame pointer,
12419 (2) With dwarf3, there exists a one-byte encoding that allows us
12420 to reference the .debug_frame data by proxy, but failing that,
12421 (3) We can at least reuse the code inspection and interpretation
12422 code that determines the CFA position at various points in the
12423 function. */
12424 /* ??? Use some command-line or configury switch to enable the use
12425 of dwarf3 DW_OP_call_frame_cfa. At present there are no dwarf
12426 consumers that understand it; fall back to "pure" dwarf2 and
12427 convert the CFA data into a location list. */
12428 {
12429 dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
12430 if (list->dw_loc_next)
12431 add_AT_loc_list (subr_die, DW_AT_frame_base, list);
12432 else
12433 add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
12434 }
12435
12436 /* Compute a displacement from the "steady-state frame pointer" to
12437 the CFA. The former is what all stack slots and argument slots
12438 will reference in the rtl; the later is what we've told the
12439 debugger about. We'll need to adjust all frame_base references
12440 by this displacement. */
12441 compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
12442
12443 if (cfun->static_chain_decl)
12444 add_AT_location_description (subr_die, DW_AT_static_link,
12445 loc_descriptor_from_tree (cfun->static_chain_decl));
12446 }
12447
12448 /* Now output descriptions of the arguments for this function. This gets
12449 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
12450 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
12451 `...' at the end of the formal parameter list. In order to find out if
12452 there was a trailing ellipsis or not, we must instead look at the type
12453 associated with the FUNCTION_DECL. This will be a node of type
12454 FUNCTION_TYPE. If the chain of type nodes hanging off of this
12455 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
12456 an ellipsis at the end. */
12457
12458 /* In the case where we are describing a mere function declaration, all we
12459 need to do here (and all we *can* do here) is to describe the *types* of
12460 its formal parameters. */
12461 if (debug_info_level <= DINFO_LEVEL_TERSE)
12462 ;
12463 else if (declaration)
12464 gen_formal_types_die (decl, subr_die);
12465 else
12466 {
12467 /* Generate DIEs to represent all known formal parameters. */
12468 tree arg_decls = DECL_ARGUMENTS (decl);
12469 tree parm;
12470
12471 /* When generating DIEs, generate the unspecified_parameters DIE
12472 instead if we come across the arg "__builtin_va_alist" */
12473 for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
12474 if (TREE_CODE (parm) == PARM_DECL)
12475 {
12476 if (DECL_NAME (parm)
12477 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
12478 "__builtin_va_alist"))
12479 gen_unspecified_parameters_die (parm, subr_die);
12480 else
12481 gen_decl_die (parm, subr_die);
12482 }
12483
12484 /* Decide whether we need an unspecified_parameters DIE at the end.
12485 There are 2 more cases to do this for: 1) the ansi ... declaration -
12486 this is detectable when the end of the arg list is not a
12487 void_type_node 2) an unprototyped function declaration (not a
12488 definition). This just means that we have no info about the
12489 parameters at all. */
12490 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
12491 if (fn_arg_types != NULL)
12492 {
12493 /* This is the prototyped case, check for.... */
12494 if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
12495 gen_unspecified_parameters_die (decl, subr_die);
12496 }
12497 else if (DECL_INITIAL (decl) == NULL_TREE)
12498 gen_unspecified_parameters_die (decl, subr_die);
12499 }
12500
12501 /* Output Dwarf info for all of the stuff within the body of the function
12502 (if it has one - it may be just a declaration). */
12503 outer_scope = DECL_INITIAL (decl);
12504
12505 /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
12506 a function. This BLOCK actually represents the outermost binding contour
12507 for the function, i.e. the contour in which the function's formal
12508 parameters and labels get declared. Curiously, it appears that the front
12509 end doesn't actually put the PARM_DECL nodes for the current function onto
12510 the BLOCK_VARS list for this outer scope, but are strung off of the
12511 DECL_ARGUMENTS list for the function instead.
12512
12513 The BLOCK_VARS list for the `outer_scope' does provide us with a list of
12514 the LABEL_DECL nodes for the function however, and we output DWARF info
12515 for those in decls_for_scope. Just within the `outer_scope' there will be
12516 a BLOCK node representing the function's outermost pair of curly braces,
12517 and any blocks used for the base and member initializers of a C++
12518 constructor function. */
12519 if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
12520 {
12521 /* Emit a DW_TAG_variable DIE for a named return value. */
12522 if (DECL_NAME (DECL_RESULT (decl)))
12523 gen_decl_die (DECL_RESULT (decl), subr_die);
12524
12525 current_function_has_inlines = 0;
12526 decls_for_scope (outer_scope, subr_die, 0);
12527
12528 #if 0 && defined (MIPS_DEBUGGING_INFO)
12529 if (current_function_has_inlines)
12530 {
12531 add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
12532 if (! comp_unit_has_inlines)
12533 {
12534 add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
12535 comp_unit_has_inlines = 1;
12536 }
12537 }
12538 #endif
12539 }
12540 /* Add the calling convention attribute if requested. */
12541 add_calling_convention_attribute (subr_die, decl);
12542
12543 }
12544
12545 /* Generate a DIE to represent a declared data object. */
12546
12547 static void
12548 gen_variable_die (tree decl, dw_die_ref context_die)
12549 {
12550 tree origin = decl_ultimate_origin (decl);
12551 dw_die_ref var_die = new_die (DW_TAG_variable, context_die, decl);
12552
12553 dw_die_ref old_die = lookup_decl_die (decl);
12554 int declaration = (DECL_EXTERNAL (decl)
12555 /* If DECL is COMDAT and has not actually been
12556 emitted, we cannot take its address; there
12557 might end up being no definition anywhere in
12558 the program. For example, consider the C++
12559 test case:
12560
12561 template <class T>
12562 struct S { static const int i = 7; };
12563
12564 template <class T>
12565 const int S<T>::i;
12566
12567 int f() { return S<int>::i; }
12568
12569 Here, S<int>::i is not DECL_EXTERNAL, but no
12570 definition is required, so the compiler will
12571 not emit a definition. */
12572 || (TREE_CODE (decl) == VAR_DECL
12573 && DECL_COMDAT (decl) && !TREE_ASM_WRITTEN (decl))
12574 || class_or_namespace_scope_p (context_die));
12575
12576 if (origin != NULL)
12577 add_abstract_origin_attribute (var_die, origin);
12578
12579 /* Loop unrolling can create multiple blocks that refer to the same
12580 static variable, so we must test for the DW_AT_declaration flag.
12581
12582 ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
12583 copy decls and set the DECL_ABSTRACT flag on them instead of
12584 sharing them.
12585
12586 ??? Duplicated blocks have been rewritten to use .debug_ranges.
12587
12588 ??? The declare_in_namespace support causes us to get two DIEs for one
12589 variable, both of which are declarations. We want to avoid considering
12590 one to be a specification, so we must test that this DIE is not a
12591 declaration. */
12592 else if (old_die && TREE_STATIC (decl) && ! declaration
12593 && get_AT_flag (old_die, DW_AT_declaration) == 1)
12594 {
12595 /* This is a definition of a C++ class level static. */
12596 add_AT_specification (var_die, old_die);
12597 if (DECL_NAME (decl))
12598 {
12599 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
12600 struct dwarf_file_data * file_index = lookup_filename (s.file);
12601
12602 if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
12603 add_AT_file (var_die, DW_AT_decl_file, file_index);
12604
12605 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
12606 add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
12607 }
12608 }
12609 else
12610 {
12611 tree type = TREE_TYPE (decl);
12612 if ((TREE_CODE (decl) == PARM_DECL
12613 || TREE_CODE (decl) == RESULT_DECL)
12614 && DECL_BY_REFERENCE (decl))
12615 type = TREE_TYPE (type);
12616
12617 add_name_and_src_coords_attributes (var_die, decl);
12618 add_type_attribute (var_die, type, TREE_READONLY (decl),
12619 TREE_THIS_VOLATILE (decl), context_die);
12620
12621 if (TREE_PUBLIC (decl))
12622 add_AT_flag (var_die, DW_AT_external, 1);
12623
12624 if (DECL_ARTIFICIAL (decl))
12625 add_AT_flag (var_die, DW_AT_artificial, 1);
12626
12627 if (TREE_PROTECTED (decl))
12628 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
12629 else if (TREE_PRIVATE (decl))
12630 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
12631 }
12632
12633 if (declaration)
12634 add_AT_flag (var_die, DW_AT_declaration, 1);
12635
12636 if (DECL_ABSTRACT (decl) || declaration)
12637 equate_decl_number_to_die (decl, var_die);
12638
12639 if (! declaration && ! DECL_ABSTRACT (decl))
12640 {
12641 add_location_or_const_value_attribute (var_die, decl, DW_AT_location);
12642 add_pubname (decl, var_die);
12643 }
12644 else
12645 tree_add_const_value_attribute (var_die, decl);
12646 }
12647
12648 /* Generate a DIE to represent a label identifier. */
12649
12650 static void
12651 gen_label_die (tree decl, dw_die_ref context_die)
12652 {
12653 tree origin = decl_ultimate_origin (decl);
12654 dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
12655 rtx insn;
12656 char label[MAX_ARTIFICIAL_LABEL_BYTES];
12657
12658 if (origin != NULL)
12659 add_abstract_origin_attribute (lbl_die, origin);
12660 else
12661 add_name_and_src_coords_attributes (lbl_die, decl);
12662
12663 if (DECL_ABSTRACT (decl))
12664 equate_decl_number_to_die (decl, lbl_die);
12665 else
12666 {
12667 insn = DECL_RTL_IF_SET (decl);
12668
12669 /* Deleted labels are programmer specified labels which have been
12670 eliminated because of various optimizations. We still emit them
12671 here so that it is possible to put breakpoints on them. */
12672 if (insn
12673 && (LABEL_P (insn)
12674 || ((NOTE_P (insn)
12675 && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
12676 {
12677 /* When optimization is enabled (via -O) some parts of the compiler
12678 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
12679 represent source-level labels which were explicitly declared by
12680 the user. This really shouldn't be happening though, so catch
12681 it if it ever does happen. */
12682 gcc_assert (!INSN_DELETED_P (insn));
12683
12684 ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
12685 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
12686 }
12687 }
12688 }
12689
12690 /* A helper function for gen_inlined_subroutine_die. Add source coordinate
12691 attributes to the DIE for a block STMT, to describe where the inlined
12692 function was called from. This is similar to add_src_coords_attributes. */
12693
12694 static inline void
12695 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
12696 {
12697 expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
12698
12699 add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
12700 add_AT_unsigned (die, DW_AT_call_line, s.line);
12701 }
12702
12703
12704 /* If STMT's abstract origin is a function declaration and STMT's
12705 first subblock's abstract origin is the function's outermost block,
12706 then we're looking at the main entry point. */
12707 static bool
12708 is_inlined_entry_point (const_tree stmt)
12709 {
12710 tree decl, block;
12711
12712 if (!stmt || TREE_CODE (stmt) != BLOCK)
12713 return false;
12714
12715 decl = block_ultimate_origin (stmt);
12716
12717 if (!decl || TREE_CODE (decl) != FUNCTION_DECL)
12718 return false;
12719
12720 block = BLOCK_SUBBLOCKS (stmt);
12721
12722 if (block)
12723 {
12724 if (TREE_CODE (block) != BLOCK)
12725 return false;
12726
12727 block = block_ultimate_origin (block);
12728 }
12729
12730 return block == DECL_INITIAL (decl);
12731 }
12732
12733 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
12734 Add low_pc and high_pc attributes to the DIE for a block STMT. */
12735
12736 static inline void
12737 add_high_low_attributes (tree stmt, dw_die_ref die)
12738 {
12739 char label[MAX_ARTIFICIAL_LABEL_BYTES];
12740
12741 if (BLOCK_FRAGMENT_CHAIN (stmt))
12742 {
12743 tree chain;
12744
12745 if (is_inlined_entry_point (stmt))
12746 {
12747 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
12748 BLOCK_NUMBER (stmt));
12749 add_AT_lbl_id (die, DW_AT_entry_pc, label);
12750 }
12751
12752 add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
12753
12754 chain = BLOCK_FRAGMENT_CHAIN (stmt);
12755 do
12756 {
12757 add_ranges (chain);
12758 chain = BLOCK_FRAGMENT_CHAIN (chain);
12759 }
12760 while (chain);
12761 add_ranges (NULL);
12762 }
12763 else
12764 {
12765 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
12766 BLOCK_NUMBER (stmt));
12767 add_AT_lbl_id (die, DW_AT_low_pc, label);
12768 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
12769 BLOCK_NUMBER (stmt));
12770 add_AT_lbl_id (die, DW_AT_high_pc, label);
12771 }
12772 }
12773
12774 /* Generate a DIE for a lexical block. */
12775
12776 static void
12777 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
12778 {
12779 dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
12780
12781 if (! BLOCK_ABSTRACT (stmt))
12782 add_high_low_attributes (stmt, stmt_die);
12783
12784 decls_for_scope (stmt, stmt_die, depth);
12785 }
12786
12787 /* Generate a DIE for an inlined subprogram. */
12788
12789 static void
12790 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
12791 {
12792 tree decl = block_ultimate_origin (stmt);
12793
12794 /* Emit info for the abstract instance first, if we haven't yet. We
12795 must emit this even if the block is abstract, otherwise when we
12796 emit the block below (or elsewhere), we may end up trying to emit
12797 a die whose origin die hasn't been emitted, and crashing. */
12798 dwarf2out_abstract_function (decl);
12799
12800 if (! BLOCK_ABSTRACT (stmt))
12801 {
12802 dw_die_ref subr_die
12803 = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
12804
12805 add_abstract_origin_attribute (subr_die, decl);
12806 add_high_low_attributes (stmt, subr_die);
12807 add_call_src_coords_attributes (stmt, subr_die);
12808
12809 decls_for_scope (stmt, subr_die, depth);
12810 current_function_has_inlines = 1;
12811 }
12812 else
12813 /* We may get here if we're the outer block of function A that was
12814 inlined into function B that was inlined into function C. When
12815 generating debugging info for C, dwarf2out_abstract_function(B)
12816 would mark all inlined blocks as abstract, including this one.
12817 So, we wouldn't (and shouldn't) expect labels to be generated
12818 for this one. Instead, just emit debugging info for
12819 declarations within the block. This is particularly important
12820 in the case of initializers of arguments passed from B to us:
12821 if they're statement expressions containing declarations, we
12822 wouldn't generate dies for their abstract variables, and then,
12823 when generating dies for the real variables, we'd die (pun
12824 intended :-) */
12825 gen_lexical_block_die (stmt, context_die, depth);
12826 }
12827
12828 /* Generate a DIE for a field in a record, or structure. */
12829
12830 static void
12831 gen_field_die (tree decl, dw_die_ref context_die)
12832 {
12833 dw_die_ref decl_die;
12834
12835 if (TREE_TYPE (decl) == error_mark_node)
12836 return;
12837
12838 decl_die = new_die (DW_TAG_member, context_die, decl);
12839 add_name_and_src_coords_attributes (decl_die, decl);
12840 add_type_attribute (decl_die, member_declared_type (decl),
12841 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
12842 context_die);
12843
12844 if (DECL_BIT_FIELD_TYPE (decl))
12845 {
12846 add_byte_size_attribute (decl_die, decl);
12847 add_bit_size_attribute (decl_die, decl);
12848 add_bit_offset_attribute (decl_die, decl);
12849 }
12850
12851 if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
12852 add_data_member_location_attribute (decl_die, decl);
12853
12854 if (DECL_ARTIFICIAL (decl))
12855 add_AT_flag (decl_die, DW_AT_artificial, 1);
12856
12857 if (TREE_PROTECTED (decl))
12858 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
12859 else if (TREE_PRIVATE (decl))
12860 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
12861
12862 /* Equate decl number to die, so that we can look up this decl later on. */
12863 equate_decl_number_to_die (decl, decl_die);
12864 }
12865
12866 #if 0
12867 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
12868 Use modified_type_die instead.
12869 We keep this code here just in case these types of DIEs may be needed to
12870 represent certain things in other languages (e.g. Pascal) someday. */
12871
12872 static void
12873 gen_pointer_type_die (tree type, dw_die_ref context_die)
12874 {
12875 dw_die_ref ptr_die
12876 = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
12877
12878 equate_type_number_to_die (type, ptr_die);
12879 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
12880 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
12881 }
12882
12883 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
12884 Use modified_type_die instead.
12885 We keep this code here just in case these types of DIEs may be needed to
12886 represent certain things in other languages (e.g. Pascal) someday. */
12887
12888 static void
12889 gen_reference_type_die (tree type, dw_die_ref context_die)
12890 {
12891 dw_die_ref ref_die
12892 = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
12893
12894 equate_type_number_to_die (type, ref_die);
12895 add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
12896 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
12897 }
12898 #endif
12899
12900 /* Generate a DIE for a pointer to a member type. */
12901
12902 static void
12903 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
12904 {
12905 dw_die_ref ptr_die
12906 = new_die (DW_TAG_ptr_to_member_type,
12907 scope_die_for (type, context_die), type);
12908
12909 equate_type_number_to_die (type, ptr_die);
12910 add_AT_die_ref (ptr_die, DW_AT_containing_type,
12911 lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
12912 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
12913 }
12914
12915 /* Generate the DIE for the compilation unit. */
12916
12917 static dw_die_ref
12918 gen_compile_unit_die (const char *filename)
12919 {
12920 dw_die_ref die;
12921 char producer[250];
12922 const char *language_string = lang_hooks.name;
12923 int language;
12924
12925 die = new_die (DW_TAG_compile_unit, NULL, NULL);
12926
12927 if (filename)
12928 {
12929 add_name_attribute (die, filename);
12930 /* Don't add cwd for <built-in>. */
12931 if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
12932 add_comp_dir_attribute (die);
12933 }
12934
12935 sprintf (producer, "%s %s", language_string, version_string);
12936
12937 #ifdef MIPS_DEBUGGING_INFO
12938 /* The MIPS/SGI compilers place the 'cc' command line options in the producer
12939 string. The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
12940 not appear in the producer string, the debugger reaches the conclusion
12941 that the object file is stripped and has no debugging information.
12942 To get the MIPS/SGI debugger to believe that there is debugging
12943 information in the object file, we add a -g to the producer string. */
12944 if (debug_info_level > DINFO_LEVEL_TERSE)
12945 strcat (producer, " -g");
12946 #endif
12947
12948 add_AT_string (die, DW_AT_producer, producer);
12949
12950 if (strcmp (language_string, "GNU C++") == 0)
12951 language = DW_LANG_C_plus_plus;
12952 else if (strcmp (language_string, "GNU Ada") == 0)
12953 language = DW_LANG_Ada95;
12954 else if (strcmp (language_string, "GNU F77") == 0)
12955 language = DW_LANG_Fortran77;
12956 else if (strcmp (language_string, "GNU F95") == 0)
12957 language = DW_LANG_Fortran95;
12958 else if (strcmp (language_string, "GNU Pascal") == 0)
12959 language = DW_LANG_Pascal83;
12960 else if (strcmp (language_string, "GNU Java") == 0)
12961 language = DW_LANG_Java;
12962 else if (strcmp (language_string, "GNU Objective-C") == 0)
12963 language = DW_LANG_ObjC;
12964 else if (strcmp (language_string, "GNU Objective-C++") == 0)
12965 language = DW_LANG_ObjC_plus_plus;
12966 else
12967 language = DW_LANG_C89;
12968
12969 add_AT_unsigned (die, DW_AT_language, language);
12970 return die;
12971 }
12972
12973 /* Generate the DIE for a base class. */
12974
12975 static void
12976 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
12977 {
12978 dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
12979
12980 add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
12981 add_data_member_location_attribute (die, binfo);
12982
12983 if (BINFO_VIRTUAL_P (binfo))
12984 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
12985
12986 if (access == access_public_node)
12987 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
12988 else if (access == access_protected_node)
12989 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
12990 }
12991
12992 /* Generate a DIE for a class member. */
12993
12994 static void
12995 gen_member_die (tree type, dw_die_ref context_die)
12996 {
12997 tree member;
12998 tree binfo = TYPE_BINFO (type);
12999 dw_die_ref child;
13000
13001 /* If this is not an incomplete type, output descriptions of each of its
13002 members. Note that as we output the DIEs necessary to represent the
13003 members of this record or union type, we will also be trying to output
13004 DIEs to represent the *types* of those members. However the `type'
13005 function (above) will specifically avoid generating type DIEs for member
13006 types *within* the list of member DIEs for this (containing) type except
13007 for those types (of members) which are explicitly marked as also being
13008 members of this (containing) type themselves. The g++ front- end can
13009 force any given type to be treated as a member of some other (containing)
13010 type by setting the TYPE_CONTEXT of the given (member) type to point to
13011 the TREE node representing the appropriate (containing) type. */
13012
13013 /* First output info about the base classes. */
13014 if (binfo)
13015 {
13016 VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
13017 int i;
13018 tree base;
13019
13020 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
13021 gen_inheritance_die (base,
13022 (accesses ? VEC_index (tree, accesses, i)
13023 : access_public_node), context_die);
13024 }
13025
13026 /* Now output info about the data members and type members. */
13027 for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
13028 {
13029 /* If we thought we were generating minimal debug info for TYPE
13030 and then changed our minds, some of the member declarations
13031 may have already been defined. Don't define them again, but
13032 do put them in the right order. */
13033
13034 child = lookup_decl_die (member);
13035 if (child)
13036 splice_child_die (context_die, child);
13037 else
13038 gen_decl_die (member, context_die);
13039 }
13040
13041 /* Now output info about the function members (if any). */
13042 for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
13043 {
13044 /* Don't include clones in the member list. */
13045 if (DECL_ABSTRACT_ORIGIN (member))
13046 continue;
13047
13048 child = lookup_decl_die (member);
13049 if (child)
13050 splice_child_die (context_die, child);
13051 else
13052 gen_decl_die (member, context_die);
13053 }
13054 }
13055
13056 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
13057 is set, we pretend that the type was never defined, so we only get the
13058 member DIEs needed by later specification DIEs. */
13059
13060 static void
13061 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
13062 enum debug_info_usage usage)
13063 {
13064 dw_die_ref type_die = lookup_type_die (type);
13065 dw_die_ref scope_die = 0;
13066 int nested = 0;
13067 int complete = (TYPE_SIZE (type)
13068 && (! TYPE_STUB_DECL (type)
13069 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
13070 int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
13071 complete = complete && should_emit_struct_debug (type, usage);
13072
13073 if (type_die && ! complete)
13074 return;
13075
13076 if (TYPE_CONTEXT (type) != NULL_TREE
13077 && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
13078 || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
13079 nested = 1;
13080
13081 scope_die = scope_die_for (type, context_die);
13082
13083 if (! type_die || (nested && scope_die == comp_unit_die))
13084 /* First occurrence of type or toplevel definition of nested class. */
13085 {
13086 dw_die_ref old_die = type_die;
13087
13088 type_die = new_die (TREE_CODE (type) == RECORD_TYPE
13089 ? DW_TAG_structure_type : DW_TAG_union_type,
13090 scope_die, type);
13091 equate_type_number_to_die (type, type_die);
13092 if (old_die)
13093 add_AT_specification (type_die, old_die);
13094 else
13095 add_name_attribute (type_die, type_tag (type));
13096 }
13097 else
13098 remove_AT (type_die, DW_AT_declaration);
13099
13100 /* If this type has been completed, then give it a byte_size attribute and
13101 then give a list of members. */
13102 if (complete && !ns_decl)
13103 {
13104 /* Prevent infinite recursion in cases where the type of some member of
13105 this type is expressed in terms of this type itself. */
13106 TREE_ASM_WRITTEN (type) = 1;
13107 add_byte_size_attribute (type_die, type);
13108 if (TYPE_STUB_DECL (type) != NULL_TREE)
13109 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
13110
13111 /* If the first reference to this type was as the return type of an
13112 inline function, then it may not have a parent. Fix this now. */
13113 if (type_die->die_parent == NULL)
13114 add_child_die (scope_die, type_die);
13115
13116 push_decl_scope (type);
13117 gen_member_die (type, type_die);
13118 pop_decl_scope ();
13119
13120 /* GNU extension: Record what type our vtable lives in. */
13121 if (TYPE_VFIELD (type))
13122 {
13123 tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
13124
13125 gen_type_die (vtype, context_die);
13126 add_AT_die_ref (type_die, DW_AT_containing_type,
13127 lookup_type_die (vtype));
13128 }
13129 }
13130 else
13131 {
13132 add_AT_flag (type_die, DW_AT_declaration, 1);
13133
13134 /* We don't need to do this for function-local types. */
13135 if (TYPE_STUB_DECL (type)
13136 && ! decl_function_context (TYPE_STUB_DECL (type)))
13137 VEC_safe_push (tree, gc, incomplete_types, type);
13138 }
13139
13140 if (get_AT (type_die, DW_AT_name))
13141 add_pubtype (type, type_die);
13142 }
13143
13144 /* Generate a DIE for a subroutine _type_. */
13145
13146 static void
13147 gen_subroutine_type_die (tree type, dw_die_ref context_die)
13148 {
13149 tree return_type = TREE_TYPE (type);
13150 dw_die_ref subr_die
13151 = new_die (DW_TAG_subroutine_type,
13152 scope_die_for (type, context_die), type);
13153
13154 equate_type_number_to_die (type, subr_die);
13155 add_prototyped_attribute (subr_die, type);
13156 add_type_attribute (subr_die, return_type, 0, 0, context_die);
13157 gen_formal_types_die (type, subr_die);
13158
13159 if (get_AT (subr_die, DW_AT_name))
13160 add_pubtype (type, subr_die);
13161 }
13162
13163 /* Generate a DIE for a type definition. */
13164
13165 static void
13166 gen_typedef_die (tree decl, dw_die_ref context_die)
13167 {
13168 dw_die_ref type_die;
13169 tree origin;
13170
13171 if (TREE_ASM_WRITTEN (decl))
13172 return;
13173
13174 TREE_ASM_WRITTEN (decl) = 1;
13175 type_die = new_die (DW_TAG_typedef, context_die, decl);
13176 origin = decl_ultimate_origin (decl);
13177 if (origin != NULL)
13178 add_abstract_origin_attribute (type_die, origin);
13179 else
13180 {
13181 tree type;
13182
13183 add_name_and_src_coords_attributes (type_die, decl);
13184 if (DECL_ORIGINAL_TYPE (decl))
13185 {
13186 type = DECL_ORIGINAL_TYPE (decl);
13187
13188 gcc_assert (type != TREE_TYPE (decl));
13189 equate_type_number_to_die (TREE_TYPE (decl), type_die);
13190 }
13191 else
13192 type = TREE_TYPE (decl);
13193
13194 add_type_attribute (type_die, type, TREE_READONLY (decl),
13195 TREE_THIS_VOLATILE (decl), context_die);
13196 }
13197
13198 if (DECL_ABSTRACT (decl))
13199 equate_decl_number_to_die (decl, type_die);
13200
13201 if (get_AT (type_die, DW_AT_name))
13202 add_pubtype (decl, type_die);
13203 }
13204
13205 /* Generate a type description DIE. */
13206
13207 static void
13208 gen_type_die_with_usage (tree type, dw_die_ref context_die,
13209 enum debug_info_usage usage)
13210 {
13211 int need_pop;
13212 struct array_descr_info info;
13213
13214 if (type == NULL_TREE || type == error_mark_node)
13215 return;
13216
13217 if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
13218 && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
13219 {
13220 if (TREE_ASM_WRITTEN (type))
13221 return;
13222
13223 /* Prevent broken recursion; we can't hand off to the same type. */
13224 gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
13225
13226 TREE_ASM_WRITTEN (type) = 1;
13227 gen_decl_die (TYPE_NAME (type), context_die);
13228 return;
13229 }
13230
13231 /* If this is an array type with hidden descriptor, handle it first. */
13232 if (!TREE_ASM_WRITTEN (type)
13233 && lang_hooks.types.get_array_descr_info
13234 && lang_hooks.types.get_array_descr_info (type, &info))
13235 {
13236 gen_descr_array_type_die (type, &info, context_die);
13237 TREE_ASM_WRITTEN (type) = 1;
13238 return;
13239 }
13240
13241 /* We are going to output a DIE to represent the unqualified version
13242 of this type (i.e. without any const or volatile qualifiers) so
13243 get the main variant (i.e. the unqualified version) of this type
13244 now. (Vectors are special because the debugging info is in the
13245 cloned type itself). */
13246 if (TREE_CODE (type) != VECTOR_TYPE)
13247 type = type_main_variant (type);
13248
13249 if (TREE_ASM_WRITTEN (type))
13250 return;
13251
13252 switch (TREE_CODE (type))
13253 {
13254 case ERROR_MARK:
13255 break;
13256
13257 case POINTER_TYPE:
13258 case REFERENCE_TYPE:
13259 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
13260 ensures that the gen_type_die recursion will terminate even if the
13261 type is recursive. Recursive types are possible in Ada. */
13262 /* ??? We could perhaps do this for all types before the switch
13263 statement. */
13264 TREE_ASM_WRITTEN (type) = 1;
13265
13266 /* For these types, all that is required is that we output a DIE (or a
13267 set of DIEs) to represent the "basis" type. */
13268 gen_type_die_with_usage (TREE_TYPE (type), context_die,
13269 DINFO_USAGE_IND_USE);
13270 break;
13271
13272 case OFFSET_TYPE:
13273 /* This code is used for C++ pointer-to-data-member types.
13274 Output a description of the relevant class type. */
13275 gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
13276 DINFO_USAGE_IND_USE);
13277
13278 /* Output a description of the type of the object pointed to. */
13279 gen_type_die_with_usage (TREE_TYPE (type), context_die,
13280 DINFO_USAGE_IND_USE);
13281
13282 /* Now output a DIE to represent this pointer-to-data-member type
13283 itself. */
13284 gen_ptr_to_mbr_type_die (type, context_die);
13285 break;
13286
13287 case FUNCTION_TYPE:
13288 /* Force out return type (in case it wasn't forced out already). */
13289 gen_type_die_with_usage (TREE_TYPE (type), context_die,
13290 DINFO_USAGE_DIR_USE);
13291 gen_subroutine_type_die (type, context_die);
13292 break;
13293
13294 case METHOD_TYPE:
13295 /* Force out return type (in case it wasn't forced out already). */
13296 gen_type_die_with_usage (TREE_TYPE (type), context_die,
13297 DINFO_USAGE_DIR_USE);
13298 gen_subroutine_type_die (type, context_die);
13299 break;
13300
13301 case ARRAY_TYPE:
13302 gen_array_type_die (type, context_die);
13303 break;
13304
13305 case VECTOR_TYPE:
13306 gen_array_type_die (type, context_die);
13307 break;
13308
13309 case ENUMERAL_TYPE:
13310 case RECORD_TYPE:
13311 case UNION_TYPE:
13312 case QUAL_UNION_TYPE:
13313 /* If this is a nested type whose containing class hasn't been written
13314 out yet, writing it out will cover this one, too. This does not apply
13315 to instantiations of member class templates; they need to be added to
13316 the containing class as they are generated. FIXME: This hurts the
13317 idea of combining type decls from multiple TUs, since we can't predict
13318 what set of template instantiations we'll get. */
13319 if (TYPE_CONTEXT (type)
13320 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
13321 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
13322 {
13323 gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
13324
13325 if (TREE_ASM_WRITTEN (type))
13326 return;
13327
13328 /* If that failed, attach ourselves to the stub. */
13329 push_decl_scope (TYPE_CONTEXT (type));
13330 context_die = lookup_type_die (TYPE_CONTEXT (type));
13331 need_pop = 1;
13332 }
13333 else
13334 {
13335 declare_in_namespace (type, context_die);
13336 need_pop = 0;
13337 }
13338
13339 if (TREE_CODE (type) == ENUMERAL_TYPE)
13340 {
13341 /* This might have been written out by the call to
13342 declare_in_namespace. */
13343 if (!TREE_ASM_WRITTEN (type))
13344 gen_enumeration_type_die (type, context_die);
13345 }
13346 else
13347 gen_struct_or_union_type_die (type, context_die, usage);
13348
13349 if (need_pop)
13350 pop_decl_scope ();
13351
13352 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
13353 it up if it is ever completed. gen_*_type_die will set it for us
13354 when appropriate. */
13355 return;
13356
13357 case VOID_TYPE:
13358 case INTEGER_TYPE:
13359 case REAL_TYPE:
13360 case FIXED_POINT_TYPE:
13361 case COMPLEX_TYPE:
13362 case BOOLEAN_TYPE:
13363 /* No DIEs needed for fundamental types. */
13364 break;
13365
13366 case LANG_TYPE:
13367 /* No Dwarf representation currently defined. */
13368 break;
13369
13370 default:
13371 gcc_unreachable ();
13372 }
13373
13374 TREE_ASM_WRITTEN (type) = 1;
13375 }
13376
13377 static void
13378 gen_type_die (tree type, dw_die_ref context_die)
13379 {
13380 gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
13381 }
13382
13383 /* Generate a DIE for a tagged type instantiation. */
13384
13385 static void
13386 gen_tagged_type_instantiation_die (tree type, dw_die_ref context_die)
13387 {
13388 if (type == NULL_TREE || type == error_mark_node)
13389 return;
13390
13391 /* We are going to output a DIE to represent the unqualified version of
13392 this type (i.e. without any const or volatile qualifiers) so make sure
13393 that we have the main variant (i.e. the unqualified version) of this
13394 type now. */
13395 gcc_assert (type == type_main_variant (type));
13396
13397 /* Do not check TREE_ASM_WRITTEN (type) as it may not be set if this is
13398 an instance of an unresolved type. */
13399
13400 switch (TREE_CODE (type))
13401 {
13402 case ERROR_MARK:
13403 break;
13404
13405 case ENUMERAL_TYPE:
13406 gen_inlined_enumeration_type_die (type, context_die);
13407 break;
13408
13409 case RECORD_TYPE:
13410 gen_inlined_structure_type_die (type, context_die);
13411 break;
13412
13413 case UNION_TYPE:
13414 case QUAL_UNION_TYPE:
13415 gen_inlined_union_type_die (type, context_die);
13416 break;
13417
13418 default:
13419 gcc_unreachable ();
13420 }
13421 }
13422
13423 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
13424 things which are local to the given block. */
13425
13426 static void
13427 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
13428 {
13429 int must_output_die = 0;
13430 tree origin;
13431 tree decl;
13432 enum tree_code origin_code;
13433
13434 /* Ignore blocks that are NULL. */
13435 if (stmt == NULL_TREE)
13436 return;
13437
13438 /* If the block is one fragment of a non-contiguous block, do not
13439 process the variables, since they will have been done by the
13440 origin block. Do process subblocks. */
13441 if (BLOCK_FRAGMENT_ORIGIN (stmt))
13442 {
13443 tree sub;
13444
13445 for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
13446 gen_block_die (sub, context_die, depth + 1);
13447
13448 return;
13449 }
13450
13451 /* Determine the "ultimate origin" of this block. This block may be an
13452 inlined instance of an inlined instance of inline function, so we have
13453 to trace all of the way back through the origin chain to find out what
13454 sort of node actually served as the original seed for the creation of
13455 the current block. */
13456 origin = block_ultimate_origin (stmt);
13457 origin_code = (origin != NULL) ? TREE_CODE (origin) : ERROR_MARK;
13458
13459 /* Determine if we need to output any Dwarf DIEs at all to represent this
13460 block. */
13461 if (origin_code == FUNCTION_DECL)
13462 /* The outer scopes for inlinings *must* always be represented. We
13463 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
13464 must_output_die = 1;
13465 else
13466 {
13467 /* In the case where the current block represents an inlining of the
13468 "body block" of an inline function, we must *NOT* output any DIE for
13469 this block because we have already output a DIE to represent the whole
13470 inlined function scope and the "body block" of any function doesn't
13471 really represent a different scope according to ANSI C rules. So we
13472 check here to make sure that this block does not represent a "body
13473 block inlining" before trying to set the MUST_OUTPUT_DIE flag. */
13474 if (! is_body_block (origin ? origin : stmt))
13475 {
13476 /* Determine if this block directly contains any "significant"
13477 local declarations which we will need to output DIEs for. */
13478 if (debug_info_level > DINFO_LEVEL_TERSE)
13479 /* We are not in terse mode so *any* local declaration counts
13480 as being a "significant" one. */
13481 must_output_die = (BLOCK_VARS (stmt) != NULL
13482 && (TREE_USED (stmt)
13483 || TREE_ASM_WRITTEN (stmt)
13484 || BLOCK_ABSTRACT (stmt)));
13485 else
13486 /* We are in terse mode, so only local (nested) function
13487 definitions count as "significant" local declarations. */
13488 for (decl = BLOCK_VARS (stmt);
13489 decl != NULL; decl = TREE_CHAIN (decl))
13490 if (TREE_CODE (decl) == FUNCTION_DECL
13491 && DECL_INITIAL (decl))
13492 {
13493 must_output_die = 1;
13494 break;
13495 }
13496 }
13497 }
13498
13499 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
13500 DIE for any block which contains no significant local declarations at
13501 all. Rather, in such cases we just call `decls_for_scope' so that any
13502 needed Dwarf info for any sub-blocks will get properly generated. Note
13503 that in terse mode, our definition of what constitutes a "significant"
13504 local declaration gets restricted to include only inlined function
13505 instances and local (nested) function definitions. */
13506 if (must_output_die)
13507 {
13508 if (origin_code == FUNCTION_DECL)
13509 gen_inlined_subroutine_die (stmt, context_die, depth);
13510 else
13511 gen_lexical_block_die (stmt, context_die, depth);
13512 }
13513 else
13514 decls_for_scope (stmt, context_die, depth);
13515 }
13516
13517 /* Generate all of the decls declared within a given scope and (recursively)
13518 all of its sub-blocks. */
13519
13520 static void
13521 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
13522 {
13523 tree decl;
13524 tree subblocks;
13525
13526 /* Ignore NULL blocks. */
13527 if (stmt == NULL_TREE)
13528 return;
13529
13530 if (TREE_USED (stmt))
13531 {
13532 /* Output the DIEs to represent all of the data objects and typedefs
13533 declared directly within this block but not within any nested
13534 sub-blocks. Also, nested function and tag DIEs have been
13535 generated with a parent of NULL; fix that up now. */
13536 for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
13537 {
13538 dw_die_ref die;
13539
13540 if (TREE_CODE (decl) == FUNCTION_DECL)
13541 die = lookup_decl_die (decl);
13542 else if (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))
13543 die = lookup_type_die (TREE_TYPE (decl));
13544 else
13545 die = NULL;
13546
13547 if (die != NULL && die->die_parent == NULL)
13548 add_child_die (context_die, die);
13549 /* Do not produce debug information for static variables since
13550 these might be optimized out. We are called for these later
13551 in varpool_analyze_pending_decls. */
13552 if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
13553 ;
13554 else
13555 gen_decl_die (decl, context_die);
13556 }
13557 }
13558
13559 /* If we're at -g1, we're not interested in subblocks. */
13560 if (debug_info_level <= DINFO_LEVEL_TERSE)
13561 return;
13562
13563 /* Output the DIEs to represent all sub-blocks (and the items declared
13564 therein) of this block. */
13565 for (subblocks = BLOCK_SUBBLOCKS (stmt);
13566 subblocks != NULL;
13567 subblocks = BLOCK_CHAIN (subblocks))
13568 gen_block_die (subblocks, context_die, depth + 1);
13569 }
13570
13571 /* Is this a typedef we can avoid emitting? */
13572
13573 static inline int
13574 is_redundant_typedef (const_tree decl)
13575 {
13576 if (TYPE_DECL_IS_STUB (decl))
13577 return 1;
13578
13579 if (DECL_ARTIFICIAL (decl)
13580 && DECL_CONTEXT (decl)
13581 && is_tagged_type (DECL_CONTEXT (decl))
13582 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
13583 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
13584 /* Also ignore the artificial member typedef for the class name. */
13585 return 1;
13586
13587 return 0;
13588 }
13589
13590 /* Returns the DIE for decl. A DIE will always be returned. */
13591
13592 static dw_die_ref
13593 force_decl_die (tree decl)
13594 {
13595 dw_die_ref decl_die;
13596 unsigned saved_external_flag;
13597 tree save_fn = NULL_TREE;
13598 decl_die = lookup_decl_die (decl);
13599 if (!decl_die)
13600 {
13601 dw_die_ref context_die;
13602 tree decl_context = DECL_CONTEXT (decl);
13603 if (decl_context)
13604 {
13605 /* Find die that represents this context. */
13606 if (TYPE_P (decl_context))
13607 context_die = force_type_die (decl_context);
13608 else
13609 context_die = force_decl_die (decl_context);
13610 }
13611 else
13612 context_die = comp_unit_die;
13613
13614 decl_die = lookup_decl_die (decl);
13615 if (decl_die)
13616 return decl_die;
13617
13618 switch (TREE_CODE (decl))
13619 {
13620 case FUNCTION_DECL:
13621 /* Clear current_function_decl, so that gen_subprogram_die thinks
13622 that this is a declaration. At this point, we just want to force
13623 declaration die. */
13624 save_fn = current_function_decl;
13625 current_function_decl = NULL_TREE;
13626 gen_subprogram_die (decl, context_die);
13627 current_function_decl = save_fn;
13628 break;
13629
13630 case VAR_DECL:
13631 /* Set external flag to force declaration die. Restore it after
13632 gen_decl_die() call. */
13633 saved_external_flag = DECL_EXTERNAL (decl);
13634 DECL_EXTERNAL (decl) = 1;
13635 gen_decl_die (decl, context_die);
13636 DECL_EXTERNAL (decl) = saved_external_flag;
13637 break;
13638
13639 case NAMESPACE_DECL:
13640 dwarf2out_decl (decl);
13641 break;
13642
13643 default:
13644 gcc_unreachable ();
13645 }
13646
13647 /* We should be able to find the DIE now. */
13648 if (!decl_die)
13649 decl_die = lookup_decl_die (decl);
13650 gcc_assert (decl_die);
13651 }
13652
13653 return decl_die;
13654 }
13655
13656 /* Returns the DIE for TYPE, that must not be a base type. A DIE is
13657 always returned. */
13658
13659 static dw_die_ref
13660 force_type_die (tree type)
13661 {
13662 dw_die_ref type_die;
13663
13664 type_die = lookup_type_die (type);
13665 if (!type_die)
13666 {
13667 dw_die_ref context_die;
13668 if (TYPE_CONTEXT (type))
13669 {
13670 if (TYPE_P (TYPE_CONTEXT (type)))
13671 context_die = force_type_die (TYPE_CONTEXT (type));
13672 else
13673 context_die = force_decl_die (TYPE_CONTEXT (type));
13674 }
13675 else
13676 context_die = comp_unit_die;
13677
13678 type_die = lookup_type_die (type);
13679 if (type_die)
13680 return type_die;
13681 gen_type_die (type, context_die);
13682 type_die = lookup_type_die (type);
13683 gcc_assert (type_die);
13684 }
13685 return type_die;
13686 }
13687
13688 /* Force out any required namespaces to be able to output DECL,
13689 and return the new context_die for it, if it's changed. */
13690
13691 static dw_die_ref
13692 setup_namespace_context (tree thing, dw_die_ref context_die)
13693 {
13694 tree context = (DECL_P (thing)
13695 ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
13696 if (context && TREE_CODE (context) == NAMESPACE_DECL)
13697 /* Force out the namespace. */
13698 context_die = force_decl_die (context);
13699
13700 return context_die;
13701 }
13702
13703 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
13704 type) within its namespace, if appropriate.
13705
13706 For compatibility with older debuggers, namespace DIEs only contain
13707 declarations; all definitions are emitted at CU scope. */
13708
13709 static void
13710 declare_in_namespace (tree thing, dw_die_ref context_die)
13711 {
13712 dw_die_ref ns_context;
13713
13714 if (debug_info_level <= DINFO_LEVEL_TERSE)
13715 return;
13716
13717 /* If this decl is from an inlined function, then don't try to emit it in its
13718 namespace, as we will get confused. It would have already been emitted
13719 when the abstract instance of the inline function was emitted anyways. */
13720 if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
13721 return;
13722
13723 ns_context = setup_namespace_context (thing, context_die);
13724
13725 if (ns_context != context_die)
13726 {
13727 if (DECL_P (thing))
13728 gen_decl_die (thing, ns_context);
13729 else
13730 gen_type_die (thing, ns_context);
13731 }
13732 }
13733
13734 /* Generate a DIE for a namespace or namespace alias. */
13735
13736 static void
13737 gen_namespace_die (tree decl)
13738 {
13739 dw_die_ref context_die = setup_namespace_context (decl, comp_unit_die);
13740
13741 /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
13742 they are an alias of. */
13743 if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
13744 {
13745 /* Output a real namespace. */
13746 dw_die_ref namespace_die
13747 = new_die (DW_TAG_namespace, context_die, decl);
13748 add_name_and_src_coords_attributes (namespace_die, decl);
13749 equate_decl_number_to_die (decl, namespace_die);
13750 }
13751 else
13752 {
13753 /* Output a namespace alias. */
13754
13755 /* Force out the namespace we are an alias of, if necessary. */
13756 dw_die_ref origin_die
13757 = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
13758
13759 /* Now create the namespace alias DIE. */
13760 dw_die_ref namespace_die
13761 = new_die (DW_TAG_imported_declaration, context_die, decl);
13762 add_name_and_src_coords_attributes (namespace_die, decl);
13763 add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
13764 equate_decl_number_to_die (decl, namespace_die);
13765 }
13766 }
13767
13768 /* Generate Dwarf debug information for a decl described by DECL. */
13769
13770 static void
13771 gen_decl_die (tree decl, dw_die_ref context_die)
13772 {
13773 tree origin;
13774
13775 if (DECL_P (decl) && DECL_IGNORED_P (decl))
13776 return;
13777
13778 switch (TREE_CODE (decl))
13779 {
13780 case ERROR_MARK:
13781 break;
13782
13783 case CONST_DECL:
13784 /* The individual enumerators of an enum type get output when we output
13785 the Dwarf representation of the relevant enum type itself. */
13786 break;
13787
13788 case FUNCTION_DECL:
13789 /* Don't output any DIEs to represent mere function declarations,
13790 unless they are class members or explicit block externs. */
13791 if (DECL_INITIAL (decl) == NULL_TREE && DECL_CONTEXT (decl) == NULL_TREE
13792 && (current_function_decl == NULL_TREE || DECL_ARTIFICIAL (decl)))
13793 break;
13794
13795 #if 0
13796 /* FIXME */
13797 /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
13798 on local redeclarations of global functions. That seems broken. */
13799 if (current_function_decl != decl)
13800 /* This is only a declaration. */;
13801 #endif
13802
13803 /* If we're emitting a clone, emit info for the abstract instance. */
13804 if (DECL_ORIGIN (decl) != decl)
13805 dwarf2out_abstract_function (DECL_ABSTRACT_ORIGIN (decl));
13806
13807 /* If we're emitting an out-of-line copy of an inline function,
13808 emit info for the abstract instance and set up to refer to it. */
13809 else if (cgraph_function_possibly_inlined_p (decl)
13810 && ! DECL_ABSTRACT (decl)
13811 && ! class_or_namespace_scope_p (context_die)
13812 /* dwarf2out_abstract_function won't emit a die if this is just
13813 a declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
13814 that case, because that works only if we have a die. */
13815 && DECL_INITIAL (decl) != NULL_TREE)
13816 {
13817 dwarf2out_abstract_function (decl);
13818 set_decl_origin_self (decl);
13819 }
13820
13821 /* Otherwise we're emitting the primary DIE for this decl. */
13822 else if (debug_info_level > DINFO_LEVEL_TERSE)
13823 {
13824 /* Before we describe the FUNCTION_DECL itself, make sure that we
13825 have described its return type. */
13826 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
13827
13828 /* And its virtual context. */
13829 if (DECL_VINDEX (decl) != NULL_TREE)
13830 gen_type_die (DECL_CONTEXT (decl), context_die);
13831
13832 /* And its containing type. */
13833 origin = decl_class_context (decl);
13834 if (origin != NULL_TREE)
13835 gen_type_die_for_member (origin, decl, context_die);
13836
13837 /* And its containing namespace. */
13838 declare_in_namespace (decl, context_die);
13839 }
13840
13841 /* Now output a DIE to represent the function itself. */
13842 gen_subprogram_die (decl, context_die);
13843 break;
13844
13845 case TYPE_DECL:
13846 /* If we are in terse mode, don't generate any DIEs to represent any
13847 actual typedefs. */
13848 if (debug_info_level <= DINFO_LEVEL_TERSE)
13849 break;
13850
13851 /* In the special case of a TYPE_DECL node representing the declaration
13852 of some type tag, if the given TYPE_DECL is marked as having been
13853 instantiated from some other (original) TYPE_DECL node (e.g. one which
13854 was generated within the original definition of an inline function) we
13855 have to generate a special (abbreviated) DW_TAG_structure_type,
13856 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. */
13857 if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE
13858 && is_tagged_type (TREE_TYPE (decl)))
13859 {
13860 gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die);
13861 break;
13862 }
13863
13864 if (is_redundant_typedef (decl))
13865 gen_type_die (TREE_TYPE (decl), context_die);
13866 else
13867 /* Output a DIE to represent the typedef itself. */
13868 gen_typedef_die (decl, context_die);
13869 break;
13870
13871 case LABEL_DECL:
13872 if (debug_info_level >= DINFO_LEVEL_NORMAL)
13873 gen_label_die (decl, context_die);
13874 break;
13875
13876 case VAR_DECL:
13877 case RESULT_DECL:
13878 /* If we are in terse mode, don't generate any DIEs to represent any
13879 variable declarations or definitions. */
13880 if (debug_info_level <= DINFO_LEVEL_TERSE)
13881 break;
13882
13883 /* Output any DIEs that are needed to specify the type of this data
13884 object. */
13885 if (TREE_CODE (decl) == RESULT_DECL && DECL_BY_REFERENCE (decl))
13886 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
13887 else
13888 gen_type_die (TREE_TYPE (decl), context_die);
13889
13890 /* And its containing type. */
13891 origin = decl_class_context (decl);
13892 if (origin != NULL_TREE)
13893 gen_type_die_for_member (origin, decl, context_die);
13894
13895 /* And its containing namespace. */
13896 declare_in_namespace (decl, context_die);
13897
13898 /* Now output the DIE to represent the data object itself. This gets
13899 complicated because of the possibility that the VAR_DECL really
13900 represents an inlined instance of a formal parameter for an inline
13901 function. */
13902 origin = decl_ultimate_origin (decl);
13903 if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
13904 gen_formal_parameter_die (decl, context_die);
13905 else
13906 gen_variable_die (decl, context_die);
13907 break;
13908
13909 case FIELD_DECL:
13910 /* Ignore the nameless fields that are used to skip bits but handle C++
13911 anonymous unions and structs. */
13912 if (DECL_NAME (decl) != NULL_TREE
13913 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
13914 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
13915 {
13916 gen_type_die (member_declared_type (decl), context_die);
13917 gen_field_die (decl, context_die);
13918 }
13919 break;
13920
13921 case PARM_DECL:
13922 if (DECL_BY_REFERENCE (decl))
13923 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
13924 else
13925 gen_type_die (TREE_TYPE (decl), context_die);
13926 gen_formal_parameter_die (decl, context_die);
13927 break;
13928
13929 case NAMESPACE_DECL:
13930 gen_namespace_die (decl);
13931 break;
13932
13933 default:
13934 /* Probably some frontend-internal decl. Assume we don't care. */
13935 gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
13936 break;
13937 }
13938 }
13939 \f
13940 /* Output debug information for global decl DECL. Called from toplev.c after
13941 compilation proper has finished. */
13942
13943 static void
13944 dwarf2out_global_decl (tree decl)
13945 {
13946 /* Output DWARF2 information for file-scope tentative data object
13947 declarations, file-scope (extern) function declarations (which had no
13948 corresponding body) and file-scope tagged type declarations and
13949 definitions which have not yet been forced out. */
13950 if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
13951 dwarf2out_decl (decl);
13952 }
13953
13954 /* Output debug information for type decl DECL. Called from toplev.c
13955 and from language front ends (to record built-in types). */
13956 static void
13957 dwarf2out_type_decl (tree decl, int local)
13958 {
13959 if (!local)
13960 dwarf2out_decl (decl);
13961 }
13962
13963 /* Output debug information for imported module or decl. */
13964
13965 static void
13966 dwarf2out_imported_module_or_decl (tree decl, tree context)
13967 {
13968 dw_die_ref imported_die, at_import_die;
13969 dw_die_ref scope_die;
13970 expanded_location xloc;
13971
13972 if (debug_info_level <= DINFO_LEVEL_TERSE)
13973 return;
13974
13975 gcc_assert (decl);
13976
13977 /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
13978 We need decl DIE for reference and scope die. First, get DIE for the decl
13979 itself. */
13980
13981 /* Get the scope die for decl context. Use comp_unit_die for global module
13982 or decl. If die is not found for non globals, force new die. */
13983 if (!context)
13984 scope_die = comp_unit_die;
13985 else if (TYPE_P (context))
13986 {
13987 if (!should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
13988 return;
13989 scope_die = force_type_die (context);
13990 }
13991 else
13992 scope_die = force_decl_die (context);
13993
13994 /* For TYPE_DECL or CONST_DECL, lookup TREE_TYPE. */
13995 if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
13996 {
13997 if (is_base_type (TREE_TYPE (decl)))
13998 at_import_die = base_type_die (TREE_TYPE (decl));
13999 else
14000 at_import_die = force_type_die (TREE_TYPE (decl));
14001 }
14002 else
14003 {
14004 at_import_die = lookup_decl_die (decl);
14005 if (!at_import_die)
14006 {
14007 /* If we're trying to avoid duplicate debug info, we may not have
14008 emitted the member decl for this field. Emit it now. */
14009 if (TREE_CODE (decl) == FIELD_DECL)
14010 {
14011 tree type = DECL_CONTEXT (decl);
14012 dw_die_ref type_context_die;
14013
14014 if (TYPE_CONTEXT (type))
14015 if (TYPE_P (TYPE_CONTEXT (type)))
14016 {
14017 if (!should_emit_struct_debug (TYPE_CONTEXT (type),
14018 DINFO_USAGE_DIR_USE))
14019 return;
14020 type_context_die = force_type_die (TYPE_CONTEXT (type));
14021 }
14022 else
14023 type_context_die = force_decl_die (TYPE_CONTEXT (type));
14024 else
14025 type_context_die = comp_unit_die;
14026 gen_type_die_for_member (type, decl, type_context_die);
14027 }
14028 at_import_die = force_decl_die (decl);
14029 }
14030 }
14031
14032 /* OK, now we have DIEs for decl as well as scope. Emit imported die. */
14033 if (TREE_CODE (decl) == NAMESPACE_DECL)
14034 imported_die = new_die (DW_TAG_imported_module, scope_die, context);
14035 else
14036 imported_die = new_die (DW_TAG_imported_declaration, scope_die, context);
14037
14038 xloc = expand_location (input_location);
14039 add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
14040 add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
14041 add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
14042 }
14043
14044 /* Write the debugging output for DECL. */
14045
14046 void
14047 dwarf2out_decl (tree decl)
14048 {
14049 dw_die_ref context_die = comp_unit_die;
14050
14051 switch (TREE_CODE (decl))
14052 {
14053 case ERROR_MARK:
14054 return;
14055
14056 case FUNCTION_DECL:
14057 /* What we would really like to do here is to filter out all mere
14058 file-scope declarations of file-scope functions which are never
14059 referenced later within this translation unit (and keep all of ones
14060 that *are* referenced later on) but we aren't clairvoyant, so we have
14061 no idea which functions will be referenced in the future (i.e. later
14062 on within the current translation unit). So here we just ignore all
14063 file-scope function declarations which are not also definitions. If
14064 and when the debugger needs to know something about these functions,
14065 it will have to hunt around and find the DWARF information associated
14066 with the definition of the function.
14067
14068 We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
14069 nodes represent definitions and which ones represent mere
14070 declarations. We have to check DECL_INITIAL instead. That's because
14071 the C front-end supports some weird semantics for "extern inline"
14072 function definitions. These can get inlined within the current
14073 translation unit (and thus, we need to generate Dwarf info for their
14074 abstract instances so that the Dwarf info for the concrete inlined
14075 instances can have something to refer to) but the compiler never
14076 generates any out-of-lines instances of such things (despite the fact
14077 that they *are* definitions).
14078
14079 The important point is that the C front-end marks these "extern
14080 inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
14081 them anyway. Note that the C++ front-end also plays some similar games
14082 for inline function definitions appearing within include files which
14083 also contain `#pragma interface' pragmas. */
14084 if (DECL_INITIAL (decl) == NULL_TREE)
14085 return;
14086
14087 /* If we're a nested function, initially use a parent of NULL; if we're
14088 a plain function, this will be fixed up in decls_for_scope. If
14089 we're a method, it will be ignored, since we already have a DIE. */
14090 if (decl_function_context (decl)
14091 /* But if we're in terse mode, we don't care about scope. */
14092 && debug_info_level > DINFO_LEVEL_TERSE)
14093 context_die = NULL;
14094 break;
14095
14096 case VAR_DECL:
14097 /* Ignore this VAR_DECL if it refers to a file-scope extern data object
14098 declaration and if the declaration was never even referenced from
14099 within this entire compilation unit. We suppress these DIEs in
14100 order to save space in the .debug section (by eliminating entries
14101 which are probably useless). Note that we must not suppress
14102 block-local extern declarations (whether used or not) because that
14103 would screw-up the debugger's name lookup mechanism and cause it to
14104 miss things which really ought to be in scope at a given point. */
14105 if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
14106 return;
14107
14108 /* For local statics lookup proper context die. */
14109 if (TREE_STATIC (decl) && decl_function_context (decl))
14110 context_die = lookup_decl_die (DECL_CONTEXT (decl));
14111
14112 /* If we are in terse mode, don't generate any DIEs to represent any
14113 variable declarations or definitions. */
14114 if (debug_info_level <= DINFO_LEVEL_TERSE)
14115 return;
14116 break;
14117
14118 case NAMESPACE_DECL:
14119 if (debug_info_level <= DINFO_LEVEL_TERSE)
14120 return;
14121 if (lookup_decl_die (decl) != NULL)
14122 return;
14123 break;
14124
14125 case TYPE_DECL:
14126 /* Don't emit stubs for types unless they are needed by other DIEs. */
14127 if (TYPE_DECL_SUPPRESS_DEBUG (decl))
14128 return;
14129
14130 /* Don't bother trying to generate any DIEs to represent any of the
14131 normal built-in types for the language we are compiling. */
14132 if (DECL_IS_BUILTIN (decl))
14133 {
14134 /* OK, we need to generate one for `bool' so GDB knows what type
14135 comparisons have. */
14136 if (is_cxx ()
14137 && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
14138 && ! DECL_IGNORED_P (decl))
14139 modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
14140
14141 return;
14142 }
14143
14144 /* If we are in terse mode, don't generate any DIEs for types. */
14145 if (debug_info_level <= DINFO_LEVEL_TERSE)
14146 return;
14147
14148 /* If we're a function-scope tag, initially use a parent of NULL;
14149 this will be fixed up in decls_for_scope. */
14150 if (decl_function_context (decl))
14151 context_die = NULL;
14152
14153 break;
14154
14155 default:
14156 return;
14157 }
14158
14159 gen_decl_die (decl, context_die);
14160 }
14161
14162 /* Output a marker (i.e. a label) for the beginning of the generated code for
14163 a lexical block. */
14164
14165 static void
14166 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
14167 unsigned int blocknum)
14168 {
14169 switch_to_section (current_function_section ());
14170 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
14171 }
14172
14173 /* Output a marker (i.e. a label) for the end of the generated code for a
14174 lexical block. */
14175
14176 static void
14177 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
14178 {
14179 switch_to_section (current_function_section ());
14180 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
14181 }
14182
14183 /* Returns nonzero if it is appropriate not to emit any debugging
14184 information for BLOCK, because it doesn't contain any instructions.
14185
14186 Don't allow this for blocks with nested functions or local classes
14187 as we would end up with orphans, and in the presence of scheduling
14188 we may end up calling them anyway. */
14189
14190 static bool
14191 dwarf2out_ignore_block (const_tree block)
14192 {
14193 tree decl;
14194
14195 for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
14196 if (TREE_CODE (decl) == FUNCTION_DECL
14197 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
14198 return 0;
14199
14200 return 1;
14201 }
14202
14203 /* Hash table routines for file_hash. */
14204
14205 static int
14206 file_table_eq (const void *p1_p, const void *p2_p)
14207 {
14208 const struct dwarf_file_data * p1 = p1_p;
14209 const char * p2 = p2_p;
14210 return strcmp (p1->filename, p2) == 0;
14211 }
14212
14213 static hashval_t
14214 file_table_hash (const void *p_p)
14215 {
14216 const struct dwarf_file_data * p = p_p;
14217 return htab_hash_string (p->filename);
14218 }
14219
14220 /* Lookup FILE_NAME (in the list of filenames that we know about here in
14221 dwarf2out.c) and return its "index". The index of each (known) filename is
14222 just a unique number which is associated with only that one filename. We
14223 need such numbers for the sake of generating labels (in the .debug_sfnames
14224 section) and references to those files numbers (in the .debug_srcinfo
14225 and.debug_macinfo sections). If the filename given as an argument is not
14226 found in our current list, add it to the list and assign it the next
14227 available unique index number. In order to speed up searches, we remember
14228 the index of the filename was looked up last. This handles the majority of
14229 all searches. */
14230
14231 static struct dwarf_file_data *
14232 lookup_filename (const char *file_name)
14233 {
14234 void ** slot;
14235 struct dwarf_file_data * created;
14236
14237 /* Check to see if the file name that was searched on the previous
14238 call matches this file name. If so, return the index. */
14239 if (file_table_last_lookup
14240 && (file_name == file_table_last_lookup->filename
14241 || strcmp (file_table_last_lookup->filename, file_name) == 0))
14242 return file_table_last_lookup;
14243
14244 /* Didn't match the previous lookup, search the table. */
14245 slot = htab_find_slot_with_hash (file_table, file_name,
14246 htab_hash_string (file_name), INSERT);
14247 if (*slot)
14248 return *slot;
14249
14250 created = ggc_alloc (sizeof (struct dwarf_file_data));
14251 created->filename = file_name;
14252 created->emitted_number = 0;
14253 *slot = created;
14254 return created;
14255 }
14256
14257 /* If the assembler will construct the file table, then translate the compiler
14258 internal file table number into the assembler file table number, and emit
14259 a .file directive if we haven't already emitted one yet. The file table
14260 numbers are different because we prune debug info for unused variables and
14261 types, which may include filenames. */
14262
14263 static int
14264 maybe_emit_file (struct dwarf_file_data * fd)
14265 {
14266 if (! fd->emitted_number)
14267 {
14268 if (last_emitted_file)
14269 fd->emitted_number = last_emitted_file->emitted_number + 1;
14270 else
14271 fd->emitted_number = 1;
14272 last_emitted_file = fd;
14273
14274 if (DWARF2_ASM_LINE_DEBUG_INFO)
14275 {
14276 fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
14277 output_quoted_string (asm_out_file,
14278 remap_debug_filename (fd->filename));
14279 fputc ('\n', asm_out_file);
14280 }
14281 }
14282
14283 return fd->emitted_number;
14284 }
14285
14286 /* Called by the final INSN scan whenever we see a var location. We
14287 use it to drop labels in the right places, and throw the location in
14288 our lookup table. */
14289
14290 static void
14291 dwarf2out_var_location (rtx loc_note)
14292 {
14293 char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
14294 struct var_loc_node *newloc;
14295 rtx prev_insn;
14296 static rtx last_insn;
14297 static const char *last_label;
14298 tree decl;
14299
14300 if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
14301 return;
14302 prev_insn = PREV_INSN (loc_note);
14303
14304 newloc = ggc_alloc_cleared (sizeof (struct var_loc_node));
14305 /* If the insn we processed last time is the previous insn
14306 and it is also a var location note, use the label we emitted
14307 last time. */
14308 if (last_insn != NULL_RTX
14309 && last_insn == prev_insn
14310 && NOTE_P (prev_insn)
14311 && NOTE_KIND (prev_insn) == NOTE_INSN_VAR_LOCATION)
14312 {
14313 newloc->label = last_label;
14314 }
14315 else
14316 {
14317 ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
14318 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
14319 loclabel_num++;
14320 newloc->label = ggc_strdup (loclabel);
14321 }
14322 newloc->var_loc_note = loc_note;
14323 newloc->next = NULL;
14324
14325 if (cfun && in_cold_section_p)
14326 newloc->section_label = cfun->cold_section_label;
14327 else
14328 newloc->section_label = text_section_label;
14329
14330 last_insn = loc_note;
14331 last_label = newloc->label;
14332 decl = NOTE_VAR_LOCATION_DECL (loc_note);
14333 add_var_loc_to_decl (decl, newloc);
14334 }
14335
14336 /* We need to reset the locations at the beginning of each
14337 function. We can't do this in the end_function hook, because the
14338 declarations that use the locations won't have been output when
14339 that hook is called. Also compute have_multiple_function_sections here. */
14340
14341 static void
14342 dwarf2out_begin_function (tree fun)
14343 {
14344 htab_empty (decl_loc_table);
14345
14346 if (function_section (fun) != text_section)
14347 have_multiple_function_sections = true;
14348
14349 dwarf2out_note_section_used ();
14350 }
14351
14352 /* Output a label to mark the beginning of a source code line entry
14353 and record information relating to this source line, in
14354 'line_info_table' for later output of the .debug_line section. */
14355
14356 static void
14357 dwarf2out_source_line (unsigned int line, const char *filename)
14358 {
14359 if (debug_info_level >= DINFO_LEVEL_NORMAL
14360 && line != 0)
14361 {
14362 int file_num = maybe_emit_file (lookup_filename (filename));
14363
14364 switch_to_section (current_function_section ());
14365
14366 /* If requested, emit something human-readable. */
14367 if (flag_debug_asm)
14368 fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
14369 filename, line);
14370
14371 if (DWARF2_ASM_LINE_DEBUG_INFO)
14372 {
14373 /* Emit the .loc directive understood by GNU as. */
14374 fprintf (asm_out_file, "\t.loc %d %d 0\n", file_num, line);
14375
14376 /* Indicate that line number info exists. */
14377 line_info_table_in_use++;
14378 }
14379 else if (function_section (current_function_decl) != text_section)
14380 {
14381 dw_separate_line_info_ref line_info;
14382 targetm.asm_out.internal_label (asm_out_file,
14383 SEPARATE_LINE_CODE_LABEL,
14384 separate_line_info_table_in_use);
14385
14386 /* Expand the line info table if necessary. */
14387 if (separate_line_info_table_in_use
14388 == separate_line_info_table_allocated)
14389 {
14390 separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
14391 separate_line_info_table
14392 = ggc_realloc (separate_line_info_table,
14393 separate_line_info_table_allocated
14394 * sizeof (dw_separate_line_info_entry));
14395 memset (separate_line_info_table
14396 + separate_line_info_table_in_use,
14397 0,
14398 (LINE_INFO_TABLE_INCREMENT
14399 * sizeof (dw_separate_line_info_entry)));
14400 }
14401
14402 /* Add the new entry at the end of the line_info_table. */
14403 line_info
14404 = &separate_line_info_table[separate_line_info_table_in_use++];
14405 line_info->dw_file_num = file_num;
14406 line_info->dw_line_num = line;
14407 line_info->function = current_function_funcdef_no;
14408 }
14409 else
14410 {
14411 dw_line_info_ref line_info;
14412
14413 targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
14414 line_info_table_in_use);
14415
14416 /* Expand the line info table if necessary. */
14417 if (line_info_table_in_use == line_info_table_allocated)
14418 {
14419 line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
14420 line_info_table
14421 = ggc_realloc (line_info_table,
14422 (line_info_table_allocated
14423 * sizeof (dw_line_info_entry)));
14424 memset (line_info_table + line_info_table_in_use, 0,
14425 LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
14426 }
14427
14428 /* Add the new entry at the end of the line_info_table. */
14429 line_info = &line_info_table[line_info_table_in_use++];
14430 line_info->dw_file_num = file_num;
14431 line_info->dw_line_num = line;
14432 }
14433 }
14434 }
14435
14436 /* Record the beginning of a new source file. */
14437
14438 static void
14439 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
14440 {
14441 if (flag_eliminate_dwarf2_dups)
14442 {
14443 /* Record the beginning of the file for break_out_includes. */
14444 dw_die_ref bincl_die;
14445
14446 bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
14447 add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
14448 }
14449
14450 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14451 {
14452 int file_num = maybe_emit_file (lookup_filename (filename));
14453
14454 switch_to_section (debug_macinfo_section);
14455 dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
14456 dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
14457 lineno);
14458
14459 dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
14460 }
14461 }
14462
14463 /* Record the end of a source file. */
14464
14465 static void
14466 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
14467 {
14468 if (flag_eliminate_dwarf2_dups)
14469 /* Record the end of the file for break_out_includes. */
14470 new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
14471
14472 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14473 {
14474 switch_to_section (debug_macinfo_section);
14475 dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
14476 }
14477 }
14478
14479 /* Called from debug_define in toplev.c. The `buffer' parameter contains
14480 the tail part of the directive line, i.e. the part which is past the
14481 initial whitespace, #, whitespace, directive-name, whitespace part. */
14482
14483 static void
14484 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
14485 const char *buffer ATTRIBUTE_UNUSED)
14486 {
14487 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14488 {
14489 switch_to_section (debug_macinfo_section);
14490 dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
14491 dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
14492 dw2_asm_output_nstring (buffer, -1, "The macro");
14493 }
14494 }
14495
14496 /* Called from debug_undef in toplev.c. The `buffer' parameter contains
14497 the tail part of the directive line, i.e. the part which is past the
14498 initial whitespace, #, whitespace, directive-name, whitespace part. */
14499
14500 static void
14501 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
14502 const char *buffer ATTRIBUTE_UNUSED)
14503 {
14504 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14505 {
14506 switch_to_section (debug_macinfo_section);
14507 dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
14508 dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
14509 dw2_asm_output_nstring (buffer, -1, "The macro");
14510 }
14511 }
14512
14513 /* Set up for Dwarf output at the start of compilation. */
14514
14515 static void
14516 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
14517 {
14518 /* Allocate the file_table. */
14519 file_table = htab_create_ggc (50, file_table_hash,
14520 file_table_eq, NULL);
14521
14522 /* Allocate the decl_die_table. */
14523 decl_die_table = htab_create_ggc (10, decl_die_table_hash,
14524 decl_die_table_eq, NULL);
14525
14526 /* Allocate the decl_loc_table. */
14527 decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
14528 decl_loc_table_eq, NULL);
14529
14530 /* Allocate the initial hunk of the decl_scope_table. */
14531 decl_scope_table = VEC_alloc (tree, gc, 256);
14532
14533 /* Allocate the initial hunk of the abbrev_die_table. */
14534 abbrev_die_table = ggc_alloc_cleared (ABBREV_DIE_TABLE_INCREMENT
14535 * sizeof (dw_die_ref));
14536 abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
14537 /* Zero-th entry is allocated, but unused. */
14538 abbrev_die_table_in_use = 1;
14539
14540 /* Allocate the initial hunk of the line_info_table. */
14541 line_info_table = ggc_alloc_cleared (LINE_INFO_TABLE_INCREMENT
14542 * sizeof (dw_line_info_entry));
14543 line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
14544
14545 /* Zero-th entry is allocated, but unused. */
14546 line_info_table_in_use = 1;
14547
14548 /* Allocate the pubtypes and pubnames vectors. */
14549 pubname_table = VEC_alloc (pubname_entry, gc, 32);
14550 pubtype_table = VEC_alloc (pubname_entry, gc, 32);
14551
14552 /* Generate the initial DIE for the .debug section. Note that the (string)
14553 value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
14554 will (typically) be a relative pathname and that this pathname should be
14555 taken as being relative to the directory from which the compiler was
14556 invoked when the given (base) source file was compiled. We will fill
14557 in this value in dwarf2out_finish. */
14558 comp_unit_die = gen_compile_unit_die (NULL);
14559
14560 incomplete_types = VEC_alloc (tree, gc, 64);
14561
14562 used_rtx_array = VEC_alloc (rtx, gc, 32);
14563
14564 debug_info_section = get_section (DEBUG_INFO_SECTION,
14565 SECTION_DEBUG, NULL);
14566 debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
14567 SECTION_DEBUG, NULL);
14568 debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
14569 SECTION_DEBUG, NULL);
14570 debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
14571 SECTION_DEBUG, NULL);
14572 debug_line_section = get_section (DEBUG_LINE_SECTION,
14573 SECTION_DEBUG, NULL);
14574 debug_loc_section = get_section (DEBUG_LOC_SECTION,
14575 SECTION_DEBUG, NULL);
14576 debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
14577 SECTION_DEBUG, NULL);
14578 #ifdef DEBUG_PUBTYPES_SECTION
14579 debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
14580 SECTION_DEBUG, NULL);
14581 #endif
14582 debug_str_section = get_section (DEBUG_STR_SECTION,
14583 DEBUG_STR_SECTION_FLAGS, NULL);
14584 debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
14585 SECTION_DEBUG, NULL);
14586 debug_frame_section = get_section (DEBUG_FRAME_SECTION,
14587 SECTION_DEBUG, NULL);
14588
14589 ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
14590 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
14591 DEBUG_ABBREV_SECTION_LABEL, 0);
14592 ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
14593 ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
14594 COLD_TEXT_SECTION_LABEL, 0);
14595 ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
14596
14597 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
14598 DEBUG_INFO_SECTION_LABEL, 0);
14599 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
14600 DEBUG_LINE_SECTION_LABEL, 0);
14601 ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
14602 DEBUG_RANGES_SECTION_LABEL, 0);
14603 switch_to_section (debug_abbrev_section);
14604 ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
14605 switch_to_section (debug_info_section);
14606 ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
14607 switch_to_section (debug_line_section);
14608 ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
14609
14610 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14611 {
14612 switch_to_section (debug_macinfo_section);
14613 ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
14614 DEBUG_MACINFO_SECTION_LABEL, 0);
14615 ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
14616 }
14617
14618 switch_to_section (text_section);
14619 ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
14620 if (flag_reorder_blocks_and_partition)
14621 {
14622 cold_text_section = unlikely_text_section ();
14623 switch_to_section (cold_text_section);
14624 ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
14625 }
14626 }
14627
14628 /* A helper function for dwarf2out_finish called through
14629 ht_forall. Emit one queued .debug_str string. */
14630
14631 static int
14632 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
14633 {
14634 struct indirect_string_node *node = (struct indirect_string_node *) *h;
14635
14636 if (node->form == DW_FORM_strp)
14637 {
14638 switch_to_section (debug_str_section);
14639 ASM_OUTPUT_LABEL (asm_out_file, node->label);
14640 assemble_string (node->str, strlen (node->str) + 1);
14641 }
14642
14643 return 1;
14644 }
14645
14646 #if ENABLE_ASSERT_CHECKING
14647 /* Verify that all marks are clear. */
14648
14649 static void
14650 verify_marks_clear (dw_die_ref die)
14651 {
14652 dw_die_ref c;
14653
14654 gcc_assert (! die->die_mark);
14655 FOR_EACH_CHILD (die, c, verify_marks_clear (c));
14656 }
14657 #endif /* ENABLE_ASSERT_CHECKING */
14658
14659 /* Clear the marks for a die and its children.
14660 Be cool if the mark isn't set. */
14661
14662 static void
14663 prune_unmark_dies (dw_die_ref die)
14664 {
14665 dw_die_ref c;
14666
14667 if (die->die_mark)
14668 die->die_mark = 0;
14669 FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
14670 }
14671
14672 /* Given DIE that we're marking as used, find any other dies
14673 it references as attributes and mark them as used. */
14674
14675 static void
14676 prune_unused_types_walk_attribs (dw_die_ref die)
14677 {
14678 dw_attr_ref a;
14679 unsigned ix;
14680
14681 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
14682 {
14683 if (a->dw_attr_val.val_class == dw_val_class_die_ref)
14684 {
14685 /* A reference to another DIE.
14686 Make sure that it will get emitted. */
14687 prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
14688 }
14689 /* Set the string's refcount to 0 so that prune_unused_types_mark
14690 accounts properly for it. */
14691 if (AT_class (a) == dw_val_class_str)
14692 a->dw_attr_val.v.val_str->refcount = 0;
14693 }
14694 }
14695
14696
14697 /* Mark DIE as being used. If DOKIDS is true, then walk down
14698 to DIE's children. */
14699
14700 static void
14701 prune_unused_types_mark (dw_die_ref die, int dokids)
14702 {
14703 dw_die_ref c;
14704
14705 if (die->die_mark == 0)
14706 {
14707 /* We haven't done this node yet. Mark it as used. */
14708 die->die_mark = 1;
14709
14710 /* We also have to mark its parents as used.
14711 (But we don't want to mark our parents' kids due to this.) */
14712 if (die->die_parent)
14713 prune_unused_types_mark (die->die_parent, 0);
14714
14715 /* Mark any referenced nodes. */
14716 prune_unused_types_walk_attribs (die);
14717
14718 /* If this node is a specification,
14719 also mark the definition, if it exists. */
14720 if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
14721 prune_unused_types_mark (die->die_definition, 1);
14722 }
14723
14724 if (dokids && die->die_mark != 2)
14725 {
14726 /* We need to walk the children, but haven't done so yet.
14727 Remember that we've walked the kids. */
14728 die->die_mark = 2;
14729
14730 /* If this is an array type, we need to make sure our
14731 kids get marked, even if they're types. */
14732 if (die->die_tag == DW_TAG_array_type)
14733 FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
14734 else
14735 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
14736 }
14737 }
14738
14739
14740 /* Walk the tree DIE and mark types that we actually use. */
14741
14742 static void
14743 prune_unused_types_walk (dw_die_ref die)
14744 {
14745 dw_die_ref c;
14746
14747 /* Don't do anything if this node is already marked. */
14748 if (die->die_mark)
14749 return;
14750
14751 switch (die->die_tag)
14752 {
14753 case DW_TAG_const_type:
14754 case DW_TAG_packed_type:
14755 case DW_TAG_pointer_type:
14756 case DW_TAG_reference_type:
14757 case DW_TAG_volatile_type:
14758 case DW_TAG_typedef:
14759 case DW_TAG_array_type:
14760 case DW_TAG_structure_type:
14761 case DW_TAG_union_type:
14762 case DW_TAG_class_type:
14763 case DW_TAG_friend:
14764 case DW_TAG_variant_part:
14765 case DW_TAG_enumeration_type:
14766 case DW_TAG_subroutine_type:
14767 case DW_TAG_string_type:
14768 case DW_TAG_set_type:
14769 case DW_TAG_subrange_type:
14770 case DW_TAG_ptr_to_member_type:
14771 case DW_TAG_file_type:
14772 if (die->die_perennial_p)
14773 break;
14774
14775 /* It's a type node --- don't mark it. */
14776 return;
14777
14778 default:
14779 /* Mark everything else. */
14780 break;
14781 }
14782
14783 die->die_mark = 1;
14784
14785 /* Now, mark any dies referenced from here. */
14786 prune_unused_types_walk_attribs (die);
14787
14788 /* Mark children. */
14789 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
14790 }
14791
14792 /* Increment the string counts on strings referred to from DIE's
14793 attributes. */
14794
14795 static void
14796 prune_unused_types_update_strings (dw_die_ref die)
14797 {
14798 dw_attr_ref a;
14799 unsigned ix;
14800
14801 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
14802 if (AT_class (a) == dw_val_class_str)
14803 {
14804 struct indirect_string_node *s = a->dw_attr_val.v.val_str;
14805 s->refcount++;
14806 /* Avoid unnecessarily putting strings that are used less than
14807 twice in the hash table. */
14808 if (s->refcount
14809 == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
14810 {
14811 void ** slot;
14812 slot = htab_find_slot_with_hash (debug_str_hash, s->str,
14813 htab_hash_string (s->str),
14814 INSERT);
14815 gcc_assert (*slot == NULL);
14816 *slot = s;
14817 }
14818 }
14819 }
14820
14821 /* Remove from the tree DIE any dies that aren't marked. */
14822
14823 static void
14824 prune_unused_types_prune (dw_die_ref die)
14825 {
14826 dw_die_ref c;
14827
14828 gcc_assert (die->die_mark);
14829 prune_unused_types_update_strings (die);
14830
14831 if (! die->die_child)
14832 return;
14833
14834 c = die->die_child;
14835 do {
14836 dw_die_ref prev = c;
14837 for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
14838 if (c == die->die_child)
14839 {
14840 /* No marked children between 'prev' and the end of the list. */
14841 if (prev == c)
14842 /* No marked children at all. */
14843 die->die_child = NULL;
14844 else
14845 {
14846 prev->die_sib = c->die_sib;
14847 die->die_child = prev;
14848 }
14849 return;
14850 }
14851
14852 if (c != prev->die_sib)
14853 prev->die_sib = c;
14854 prune_unused_types_prune (c);
14855 } while (c != die->die_child);
14856 }
14857
14858
14859 /* Remove dies representing declarations that we never use. */
14860
14861 static void
14862 prune_unused_types (void)
14863 {
14864 unsigned int i;
14865 limbo_die_node *node;
14866 pubname_ref pub;
14867
14868 #if ENABLE_ASSERT_CHECKING
14869 /* All the marks should already be clear. */
14870 verify_marks_clear (comp_unit_die);
14871 for (node = limbo_die_list; node; node = node->next)
14872 verify_marks_clear (node->die);
14873 #endif /* ENABLE_ASSERT_CHECKING */
14874
14875 /* Set the mark on nodes that are actually used. */
14876 prune_unused_types_walk (comp_unit_die);
14877 for (node = limbo_die_list; node; node = node->next)
14878 prune_unused_types_walk (node->die);
14879
14880 /* Also set the mark on nodes referenced from the
14881 pubname_table or arange_table. */
14882 for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
14883 prune_unused_types_mark (pub->die, 1);
14884 for (i = 0; i < arange_table_in_use; i++)
14885 prune_unused_types_mark (arange_table[i], 1);
14886
14887 /* Get rid of nodes that aren't marked; and update the string counts. */
14888 if (debug_str_hash)
14889 htab_empty (debug_str_hash);
14890 prune_unused_types_prune (comp_unit_die);
14891 for (node = limbo_die_list; node; node = node->next)
14892 prune_unused_types_prune (node->die);
14893
14894 /* Leave the marks clear. */
14895 prune_unmark_dies (comp_unit_die);
14896 for (node = limbo_die_list; node; node = node->next)
14897 prune_unmark_dies (node->die);
14898 }
14899
14900 /* Set the parameter to true if there are any relative pathnames in
14901 the file table. */
14902 static int
14903 file_table_relative_p (void ** slot, void *param)
14904 {
14905 bool *p = param;
14906 struct dwarf_file_data *d = *slot;
14907 if (!IS_ABSOLUTE_PATH (d->filename))
14908 {
14909 *p = true;
14910 return 0;
14911 }
14912 return 1;
14913 }
14914
14915 /* Output stuff that dwarf requires at the end of every file,
14916 and generate the DWARF-2 debugging info. */
14917
14918 static void
14919 dwarf2out_finish (const char *filename)
14920 {
14921 limbo_die_node *node, *next_node;
14922 dw_die_ref die = 0;
14923
14924 /* Add the name for the main input file now. We delayed this from
14925 dwarf2out_init to avoid complications with PCH. */
14926 add_name_attribute (comp_unit_die, remap_debug_filename (filename));
14927 if (!IS_ABSOLUTE_PATH (filename))
14928 add_comp_dir_attribute (comp_unit_die);
14929 else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
14930 {
14931 bool p = false;
14932 htab_traverse (file_table, file_table_relative_p, &p);
14933 if (p)
14934 add_comp_dir_attribute (comp_unit_die);
14935 }
14936
14937 /* Traverse the limbo die list, and add parent/child links. The only
14938 dies without parents that should be here are concrete instances of
14939 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
14940 For concrete instances, we can get the parent die from the abstract
14941 instance. */
14942 for (node = limbo_die_list; node; node = next_node)
14943 {
14944 next_node = node->next;
14945 die = node->die;
14946
14947 if (die->die_parent == NULL)
14948 {
14949 dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
14950
14951 if (origin)
14952 add_child_die (origin->die_parent, die);
14953 else if (die == comp_unit_die)
14954 ;
14955 else if (errorcount > 0 || sorrycount > 0)
14956 /* It's OK to be confused by errors in the input. */
14957 add_child_die (comp_unit_die, die);
14958 else
14959 {
14960 /* In certain situations, the lexical block containing a
14961 nested function can be optimized away, which results
14962 in the nested function die being orphaned. Likewise
14963 with the return type of that nested function. Force
14964 this to be a child of the containing function.
14965
14966 It may happen that even the containing function got fully
14967 inlined and optimized out. In that case we are lost and
14968 assign the empty child. This should not be big issue as
14969 the function is likely unreachable too. */
14970 tree context = NULL_TREE;
14971
14972 gcc_assert (node->created_for);
14973
14974 if (DECL_P (node->created_for))
14975 context = DECL_CONTEXT (node->created_for);
14976 else if (TYPE_P (node->created_for))
14977 context = TYPE_CONTEXT (node->created_for);
14978
14979 gcc_assert (context
14980 && (TREE_CODE (context) == FUNCTION_DECL
14981 || TREE_CODE (context) == NAMESPACE_DECL));
14982
14983 origin = lookup_decl_die (context);
14984 if (origin)
14985 add_child_die (origin, die);
14986 else
14987 add_child_die (comp_unit_die, die);
14988 }
14989 }
14990 }
14991
14992 limbo_die_list = NULL;
14993
14994 /* Walk through the list of incomplete types again, trying once more to
14995 emit full debugging info for them. */
14996 retry_incomplete_types ();
14997
14998 if (flag_eliminate_unused_debug_types)
14999 prune_unused_types ();
15000
15001 /* Generate separate CUs for each of the include files we've seen.
15002 They will go into limbo_die_list. */
15003 if (flag_eliminate_dwarf2_dups)
15004 break_out_includes (comp_unit_die);
15005
15006 /* Traverse the DIE's and add add sibling attributes to those DIE's
15007 that have children. */
15008 add_sibling_attributes (comp_unit_die);
15009 for (node = limbo_die_list; node; node = node->next)
15010 add_sibling_attributes (node->die);
15011
15012 /* Output a terminator label for the .text section. */
15013 switch_to_section (text_section);
15014 targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
15015 if (flag_reorder_blocks_and_partition)
15016 {
15017 switch_to_section (unlikely_text_section ());
15018 targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
15019 }
15020
15021 /* We can only use the low/high_pc attributes if all of the code was
15022 in .text. */
15023 if (!have_multiple_function_sections)
15024 {
15025 add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
15026 add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
15027 }
15028
15029 else
15030 {
15031 unsigned fde_idx = 0;
15032
15033 /* We need to give .debug_loc and .debug_ranges an appropriate
15034 "base address". Use zero so that these addresses become
15035 absolute. Historically, we've emitted the unexpected
15036 DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
15037 Emit both to give time for other tools to adapt. */
15038 add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
15039 add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
15040
15041 add_AT_range_list (comp_unit_die, DW_AT_ranges,
15042 add_ranges_by_labels (text_section_label,
15043 text_end_label));
15044 if (flag_reorder_blocks_and_partition)
15045 add_ranges_by_labels (cold_text_section_label,
15046 cold_end_label);
15047
15048 for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
15049 {
15050 dw_fde_ref fde = &fde_table[fde_idx];
15051
15052 if (fde->dw_fde_switched_sections)
15053 {
15054 add_ranges_by_labels (fde->dw_fde_hot_section_label,
15055 fde->dw_fde_hot_section_end_label);
15056 add_ranges_by_labels (fde->dw_fde_unlikely_section_label,
15057 fde->dw_fde_unlikely_section_end_label);
15058 }
15059 else
15060 add_ranges_by_labels (fde->dw_fde_begin,
15061 fde->dw_fde_end);
15062 }
15063
15064 add_ranges (NULL);
15065 }
15066
15067 /* Output location list section if necessary. */
15068 if (have_location_lists)
15069 {
15070 /* Output the location lists info. */
15071 switch_to_section (debug_loc_section);
15072 ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
15073 DEBUG_LOC_SECTION_LABEL, 0);
15074 ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
15075 output_location_lists (die);
15076 }
15077
15078 if (debug_info_level >= DINFO_LEVEL_NORMAL)
15079 add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
15080 debug_line_section_label);
15081
15082 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
15083 add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
15084
15085 /* Output all of the compilation units. We put the main one last so that
15086 the offsets are available to output_pubnames. */
15087 for (node = limbo_die_list; node; node = node->next)
15088 output_comp_unit (node->die, 0);
15089
15090 output_comp_unit (comp_unit_die, 0);
15091
15092 /* Output the abbreviation table. */
15093 switch_to_section (debug_abbrev_section);
15094 output_abbrev_section ();
15095
15096 /* Output public names table if necessary. */
15097 if (!VEC_empty (pubname_entry, pubname_table))
15098 {
15099 switch_to_section (debug_pubnames_section);
15100 output_pubnames (pubname_table);
15101 }
15102
15103 #ifdef DEBUG_PUBTYPES_SECTION
15104 /* Output public types table if necessary. */
15105 if (!VEC_empty (pubname_entry, pubtype_table))
15106 {
15107 switch_to_section (debug_pubtypes_section);
15108 output_pubnames (pubtype_table);
15109 }
15110 #endif
15111
15112 /* Output the address range information. We only put functions in the arange
15113 table, so don't write it out if we don't have any. */
15114 if (fde_table_in_use)
15115 {
15116 switch_to_section (debug_aranges_section);
15117 output_aranges ();
15118 }
15119
15120 /* Output ranges section if necessary. */
15121 if (ranges_table_in_use)
15122 {
15123 switch_to_section (debug_ranges_section);
15124 ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
15125 output_ranges ();
15126 }
15127
15128 /* Output the source line correspondence table. We must do this
15129 even if there is no line information. Otherwise, on an empty
15130 translation unit, we will generate a present, but empty,
15131 .debug_info section. IRIX 6.5 `nm' will then complain when
15132 examining the file. This is done late so that any filenames
15133 used by the debug_info section are marked as 'used'. */
15134 if (! DWARF2_ASM_LINE_DEBUG_INFO)
15135 {
15136 switch_to_section (debug_line_section);
15137 output_line_info ();
15138 }
15139
15140 /* Have to end the macro section. */
15141 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
15142 {
15143 switch_to_section (debug_macinfo_section);
15144 dw2_asm_output_data (1, 0, "End compilation unit");
15145 }
15146
15147 /* If we emitted any DW_FORM_strp form attribute, output the string
15148 table too. */
15149 if (debug_str_hash)
15150 htab_traverse (debug_str_hash, output_indirect_string, NULL);
15151 }
15152 #else
15153
15154 /* This should never be used, but its address is needed for comparisons. */
15155 const struct gcc_debug_hooks dwarf2_debug_hooks;
15156
15157 #endif /* DWARF2_DEBUGGING_INFO */
15158
15159 #include "gt-dwarf2out.h"