omp-low.c (optimize_omp_library_calls): Use types_compatible_p instead of comparing...
[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, 2008, 2009 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 *, int, bool);
95
96 static rtx last_var_location_insn;
97 #endif
98
99 #ifdef VMS_DEBUGGING_INFO
100 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
101
102 /* Define this macro to be a nonzero value if the directory specifications
103 which are output in the debug info should end with a separator. */
104 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
105 /* Define this macro to evaluate to a nonzero value if GCC should refrain
106 from generating indirect strings in DWARF2 debug information, for instance
107 if your target is stuck with an old version of GDB that is unable to
108 process them properly or uses VMS Debug. */
109 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
110 #else
111 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
112 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
113 #endif
114
115 #ifndef DWARF2_FRAME_INFO
116 # ifdef DWARF2_DEBUGGING_INFO
117 # define DWARF2_FRAME_INFO \
118 (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
119 # else
120 # define DWARF2_FRAME_INFO 0
121 # endif
122 #endif
123
124 /* Map register numbers held in the call frame info that gcc has
125 collected using DWARF_FRAME_REGNUM to those that should be output in
126 .debug_frame and .eh_frame. */
127 #ifndef DWARF2_FRAME_REG_OUT
128 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
129 #endif
130
131 /* Save the result of dwarf2out_do_frame across PCH. */
132 static GTY(()) bool saved_do_cfi_asm = 0;
133
134 /* Decide whether we want to emit frame unwind information for the current
135 translation unit. */
136
137 int
138 dwarf2out_do_frame (void)
139 {
140 /* We want to emit correct CFA location expressions or lists, so we
141 have to return true if we're going to output debug info, even if
142 we're not going to output frame or unwind info. */
143 return (write_symbols == DWARF2_DEBUG
144 || write_symbols == VMS_AND_DWARF2_DEBUG
145 || DWARF2_FRAME_INFO || saved_do_cfi_asm
146 #ifdef DWARF2_UNWIND_INFO
147 || (DWARF2_UNWIND_INFO
148 && (flag_unwind_tables
149 || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)))
150 #endif
151 );
152 }
153
154 /* Decide whether to emit frame unwind via assembler directives. */
155
156 int
157 dwarf2out_do_cfi_asm (void)
158 {
159 int enc;
160
161 #ifdef MIPS_DEBUGGING_INFO
162 return false;
163 #endif
164 if (!flag_dwarf2_cfi_asm || !dwarf2out_do_frame ())
165 return false;
166 if (saved_do_cfi_asm || !eh_personality_libfunc)
167 return true;
168 if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
169 return false;
170
171 /* Make sure the personality encoding is one the assembler can support.
172 In particular, aligned addresses can't be handled. */
173 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,/*global=*/1);
174 if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
175 return false;
176 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,/*global=*/0);
177 if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
178 return false;
179
180 saved_do_cfi_asm = true;
181 return true;
182 }
183
184 /* The size of the target's pointer type. */
185 #ifndef PTR_SIZE
186 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
187 #endif
188
189 /* Array of RTXes referenced by the debugging information, which therefore
190 must be kept around forever. */
191 static GTY(()) VEC(rtx,gc) *used_rtx_array;
192
193 /* A pointer to the base of a list of incomplete types which might be
194 completed at some later time. incomplete_types_list needs to be a
195 VEC(tree,gc) because we want to tell the garbage collector about
196 it. */
197 static GTY(()) VEC(tree,gc) *incomplete_types;
198
199 /* A pointer to the base of a table of references to declaration
200 scopes. This table is a display which tracks the nesting
201 of declaration scopes at the current scope and containing
202 scopes. This table is used to find the proper place to
203 define type declaration DIE's. */
204 static GTY(()) VEC(tree,gc) *decl_scope_table;
205
206 /* Pointers to various DWARF2 sections. */
207 static GTY(()) section *debug_info_section;
208 static GTY(()) section *debug_abbrev_section;
209 static GTY(()) section *debug_aranges_section;
210 static GTY(()) section *debug_macinfo_section;
211 static GTY(()) section *debug_line_section;
212 static GTY(()) section *debug_loc_section;
213 static GTY(()) section *debug_pubnames_section;
214 static GTY(()) section *debug_pubtypes_section;
215 static GTY(()) section *debug_str_section;
216 static GTY(()) section *debug_ranges_section;
217 static GTY(()) section *debug_frame_section;
218
219 /* How to start an assembler comment. */
220 #ifndef ASM_COMMENT_START
221 #define ASM_COMMENT_START ";#"
222 #endif
223
224 typedef struct dw_cfi_struct *dw_cfi_ref;
225 typedef struct dw_fde_struct *dw_fde_ref;
226 typedef union dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
227
228 /* Call frames are described using a sequence of Call Frame
229 Information instructions. The register number, offset
230 and address fields are provided as possible operands;
231 their use is selected by the opcode field. */
232
233 enum dw_cfi_oprnd_type {
234 dw_cfi_oprnd_unused,
235 dw_cfi_oprnd_reg_num,
236 dw_cfi_oprnd_offset,
237 dw_cfi_oprnd_addr,
238 dw_cfi_oprnd_loc
239 };
240
241 typedef union GTY(()) dw_cfi_oprnd_struct {
242 unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
243 HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
244 const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
245 struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
246 }
247 dw_cfi_oprnd;
248
249 typedef struct GTY(()) dw_cfi_struct {
250 dw_cfi_ref dw_cfi_next;
251 enum dwarf_call_frame_info dw_cfi_opc;
252 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
253 dw_cfi_oprnd1;
254 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
255 dw_cfi_oprnd2;
256 }
257 dw_cfi_node;
258
259 /* This is how we define the location of the CFA. We use to handle it
260 as REG + OFFSET all the time, but now it can be more complex.
261 It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
262 Instead of passing around REG and OFFSET, we pass a copy
263 of this structure. */
264 typedef struct GTY(()) cfa_loc {
265 HOST_WIDE_INT offset;
266 HOST_WIDE_INT base_offset;
267 unsigned int reg;
268 BOOL_BITFIELD indirect : 1; /* 1 if CFA is accessed via a dereference. */
269 BOOL_BITFIELD in_use : 1; /* 1 if a saved cfa is stored here. */
270 } dw_cfa_location;
271
272 /* All call frame descriptions (FDE's) in the GCC generated DWARF
273 refer to a single Common Information Entry (CIE), defined at
274 the beginning of the .debug_frame section. This use of a single
275 CIE obviates the need to keep track of multiple CIE's
276 in the DWARF generation routines below. */
277
278 typedef struct GTY(()) dw_fde_struct {
279 tree decl;
280 const char *dw_fde_begin;
281 const char *dw_fde_current_label;
282 const char *dw_fde_end;
283 const char *dw_fde_hot_section_label;
284 const char *dw_fde_hot_section_end_label;
285 const char *dw_fde_unlikely_section_label;
286 const char *dw_fde_unlikely_section_end_label;
287 dw_cfi_ref dw_fde_cfi;
288 dw_cfi_ref dw_fde_switch_cfi; /* Last CFI before switching sections. */
289 unsigned funcdef_number;
290 HOST_WIDE_INT stack_realignment;
291 /* Dynamic realign argument pointer register. */
292 unsigned int drap_reg;
293 /* Virtual dynamic realign argument pointer register. */
294 unsigned int vdrap_reg;
295 unsigned all_throwers_are_sibcalls : 1;
296 unsigned nothrow : 1;
297 unsigned uses_eh_lsda : 1;
298 /* Whether we did stack realign in this call frame. */
299 unsigned stack_realign : 1;
300 /* Whether dynamic realign argument pointer register has been saved. */
301 unsigned drap_reg_saved: 1;
302 /* True iff dw_fde_begin label is in text_section or cold_text_section. */
303 unsigned in_std_section : 1;
304 /* True iff dw_fde_unlikely_section_label is in text_section or
305 cold_text_section. */
306 unsigned cold_in_std_section : 1;
307 /* True iff switched sections. */
308 unsigned dw_fde_switched_sections : 1;
309 /* True iff switching from cold to hot section. */
310 unsigned dw_fde_switched_cold_to_hot : 1;
311 }
312 dw_fde_node;
313
314 /* Maximum size (in bytes) of an artificially generated label. */
315 #define MAX_ARTIFICIAL_LABEL_BYTES 30
316
317 /* The size of addresses as they appear in the Dwarf 2 data.
318 Some architectures use word addresses to refer to code locations,
319 but Dwarf 2 info always uses byte addresses. On such machines,
320 Dwarf 2 addresses need to be larger than the architecture's
321 pointers. */
322 #ifndef DWARF2_ADDR_SIZE
323 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
324 #endif
325
326 /* The size in bytes of a DWARF field indicating an offset or length
327 relative to a debug info section, specified to be 4 bytes in the
328 DWARF-2 specification. The SGI/MIPS ABI defines it to be the same
329 as PTR_SIZE. */
330
331 #ifndef DWARF_OFFSET_SIZE
332 #define DWARF_OFFSET_SIZE 4
333 #endif
334
335 /* According to the (draft) DWARF 3 specification, the initial length
336 should either be 4 or 12 bytes. When it's 12 bytes, the first 4
337 bytes are 0xffffffff, followed by the length stored in the next 8
338 bytes.
339
340 However, the SGI/MIPS ABI uses an initial length which is equal to
341 DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
342
343 #ifndef DWARF_INITIAL_LENGTH_SIZE
344 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
345 #endif
346
347 /* Round SIZE up to the nearest BOUNDARY. */
348 #define DWARF_ROUND(SIZE,BOUNDARY) \
349 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
350
351 /* Offsets recorded in opcodes are a multiple of this alignment factor. */
352 #ifndef DWARF_CIE_DATA_ALIGNMENT
353 #ifdef STACK_GROWS_DOWNWARD
354 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
355 #else
356 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
357 #endif
358 #endif
359
360 /* CIE identifier. */
361 #if HOST_BITS_PER_WIDE_INT >= 64
362 #define DWARF_CIE_ID \
363 (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
364 #else
365 #define DWARF_CIE_ID DW_CIE_ID
366 #endif
367
368 /* A pointer to the base of a table that contains frame description
369 information for each routine. */
370 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
371
372 /* Number of elements currently allocated for fde_table. */
373 static GTY(()) unsigned fde_table_allocated;
374
375 /* Number of elements in fde_table currently in use. */
376 static GTY(()) unsigned fde_table_in_use;
377
378 /* Size (in elements) of increments by which we may expand the
379 fde_table. */
380 #define FDE_TABLE_INCREMENT 256
381
382 /* Get the current fde_table entry we should use. */
383
384 static inline dw_fde_ref
385 current_fde (void)
386 {
387 return fde_table_in_use ? &fde_table[fde_table_in_use - 1] : NULL;
388 }
389
390 /* A list of call frame insns for the CIE. */
391 static GTY(()) dw_cfi_ref cie_cfi_head;
392
393 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
394 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
395 attribute that accelerates the lookup of the FDE associated
396 with the subprogram. This variable holds the table index of the FDE
397 associated with the current function (body) definition. */
398 static unsigned current_funcdef_fde;
399 #endif
400
401 struct GTY(()) indirect_string_node {
402 const char *str;
403 unsigned int refcount;
404 enum dwarf_form form;
405 char *label;
406 };
407
408 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
409
410 static GTY(()) int dw2_string_counter;
411 static GTY(()) unsigned long dwarf2out_cfi_label_num;
412
413 /* True if the compilation unit places functions in more than one section. */
414 static GTY(()) bool have_multiple_function_sections = false;
415
416 /* Whether the default text and cold text sections have been used at all. */
417
418 static GTY(()) bool text_section_used = false;
419 static GTY(()) bool cold_text_section_used = false;
420
421 /* The default cold text section. */
422 static GTY(()) section *cold_text_section;
423
424 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
425
426 /* Forward declarations for functions defined in this file. */
427
428 static char *stripattributes (const char *);
429 static const char *dwarf_cfi_name (unsigned);
430 static dw_cfi_ref new_cfi (void);
431 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
432 static void add_fde_cfi (const char *, dw_cfi_ref);
433 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *, dw_cfa_location *);
434 static void lookup_cfa (dw_cfa_location *);
435 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
436 #ifdef DWARF2_UNWIND_INFO
437 static void initial_return_save (rtx);
438 #endif
439 static HOST_WIDE_INT stack_adjust_offset (const_rtx, HOST_WIDE_INT,
440 HOST_WIDE_INT);
441 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
442 static void output_cfi_directive (dw_cfi_ref);
443 static void output_call_frame_info (int);
444 static void dwarf2out_note_section_used (void);
445 static void dwarf2out_stack_adjust (rtx, bool);
446 static void dwarf2out_args_size_adjust (HOST_WIDE_INT, const char *);
447 static void flush_queued_reg_saves (void);
448 static bool clobbers_queued_reg_save (const_rtx);
449 static void dwarf2out_frame_debug_expr (rtx, const char *);
450
451 /* Support for complex CFA locations. */
452 static void output_cfa_loc (dw_cfi_ref);
453 static void output_cfa_loc_raw (dw_cfi_ref);
454 static void get_cfa_from_loc_descr (dw_cfa_location *,
455 struct dw_loc_descr_struct *);
456 static struct dw_loc_descr_struct *build_cfa_loc
457 (dw_cfa_location *, HOST_WIDE_INT);
458 static struct dw_loc_descr_struct *build_cfa_aligned_loc
459 (HOST_WIDE_INT, HOST_WIDE_INT);
460 static void def_cfa_1 (const char *, dw_cfa_location *);
461
462 /* How to start an assembler comment. */
463 #ifndef ASM_COMMENT_START
464 #define ASM_COMMENT_START ";#"
465 #endif
466
467 /* Data and reference forms for relocatable data. */
468 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
469 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
470
471 #ifndef DEBUG_FRAME_SECTION
472 #define DEBUG_FRAME_SECTION ".debug_frame"
473 #endif
474
475 #ifndef FUNC_BEGIN_LABEL
476 #define FUNC_BEGIN_LABEL "LFB"
477 #endif
478
479 #ifndef FUNC_END_LABEL
480 #define FUNC_END_LABEL "LFE"
481 #endif
482
483 #ifndef FRAME_BEGIN_LABEL
484 #define FRAME_BEGIN_LABEL "Lframe"
485 #endif
486 #define CIE_AFTER_SIZE_LABEL "LSCIE"
487 #define CIE_END_LABEL "LECIE"
488 #define FDE_LABEL "LSFDE"
489 #define FDE_AFTER_SIZE_LABEL "LASFDE"
490 #define FDE_END_LABEL "LEFDE"
491 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
492 #define LINE_NUMBER_END_LABEL "LELT"
493 #define LN_PROLOG_AS_LABEL "LASLTP"
494 #define LN_PROLOG_END_LABEL "LELTP"
495 #define DIE_LABEL_PREFIX "DW"
496
497 /* The DWARF 2 CFA column which tracks the return address. Normally this
498 is the column for PC, or the first column after all of the hard
499 registers. */
500 #ifndef DWARF_FRAME_RETURN_COLUMN
501 #ifdef PC_REGNUM
502 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM)
503 #else
504 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGISTERS
505 #endif
506 #endif
507
508 /* The mapping from gcc register number to DWARF 2 CFA column number. By
509 default, we just provide columns for all registers. */
510 #ifndef DWARF_FRAME_REGNUM
511 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
512 #endif
513 \f
514 /* Hook used by __throw. */
515
516 rtx
517 expand_builtin_dwarf_sp_column (void)
518 {
519 unsigned int dwarf_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
520 return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1));
521 }
522
523 /* Return a pointer to a copy of the section string name S with all
524 attributes stripped off, and an asterisk prepended (for assemble_name). */
525
526 static inline char *
527 stripattributes (const char *s)
528 {
529 char *stripped = XNEWVEC (char, strlen (s) + 2);
530 char *p = stripped;
531
532 *p++ = '*';
533
534 while (*s && *s != ',')
535 *p++ = *s++;
536
537 *p = '\0';
538 return stripped;
539 }
540
541 /* MEM is a memory reference for the register size table, each element of
542 which has mode MODE. Initialize column C as a return address column. */
543
544 static void
545 init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c)
546 {
547 HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode);
548 HOST_WIDE_INT size = GET_MODE_SIZE (Pmode);
549 emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
550 }
551
552 /* Divide OFF by DWARF_CIE_DATA_ALIGNMENT, asserting no remainder. */
553
554 static inline HOST_WIDE_INT
555 div_data_align (HOST_WIDE_INT off)
556 {
557 HOST_WIDE_INT r = off / DWARF_CIE_DATA_ALIGNMENT;
558 gcc_assert (r * DWARF_CIE_DATA_ALIGNMENT == off);
559 return r;
560 }
561
562 /* Return true if we need a signed version of a given opcode
563 (e.g. DW_CFA_offset_extended_sf vs DW_CFA_offset_extended). */
564
565 static inline bool
566 need_data_align_sf_opcode (HOST_WIDE_INT off)
567 {
568 return DWARF_CIE_DATA_ALIGNMENT < 0 ? off > 0 : off < 0;
569 }
570
571 /* Generate code to initialize the register size table. */
572
573 void
574 expand_builtin_init_dwarf_reg_sizes (tree address)
575 {
576 unsigned int i;
577 enum machine_mode mode = TYPE_MODE (char_type_node);
578 rtx addr = expand_normal (address);
579 rtx mem = gen_rtx_MEM (BLKmode, addr);
580 bool wrote_return_column = false;
581
582 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
583 {
584 int rnum = DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), 1);
585
586 if (rnum < DWARF_FRAME_REGISTERS)
587 {
588 HOST_WIDE_INT offset = rnum * GET_MODE_SIZE (mode);
589 enum machine_mode save_mode = reg_raw_mode[i];
590 HOST_WIDE_INT size;
591
592 if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
593 save_mode = choose_hard_reg_mode (i, 1, true);
594 if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
595 {
596 if (save_mode == VOIDmode)
597 continue;
598 wrote_return_column = true;
599 }
600 size = GET_MODE_SIZE (save_mode);
601 if (offset < 0)
602 continue;
603
604 emit_move_insn (adjust_address (mem, mode, offset),
605 gen_int_mode (size, mode));
606 }
607 }
608
609 if (!wrote_return_column)
610 init_return_column_size (mode, mem, DWARF_FRAME_RETURN_COLUMN);
611
612 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
613 init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN);
614 #endif
615
616 targetm.init_dwarf_reg_sizes_extra (address);
617 }
618
619 /* Convert a DWARF call frame info. operation to its string name */
620
621 static const char *
622 dwarf_cfi_name (unsigned int cfi_opc)
623 {
624 switch (cfi_opc)
625 {
626 case DW_CFA_advance_loc:
627 return "DW_CFA_advance_loc";
628 case DW_CFA_offset:
629 return "DW_CFA_offset";
630 case DW_CFA_restore:
631 return "DW_CFA_restore";
632 case DW_CFA_nop:
633 return "DW_CFA_nop";
634 case DW_CFA_set_loc:
635 return "DW_CFA_set_loc";
636 case DW_CFA_advance_loc1:
637 return "DW_CFA_advance_loc1";
638 case DW_CFA_advance_loc2:
639 return "DW_CFA_advance_loc2";
640 case DW_CFA_advance_loc4:
641 return "DW_CFA_advance_loc4";
642 case DW_CFA_offset_extended:
643 return "DW_CFA_offset_extended";
644 case DW_CFA_restore_extended:
645 return "DW_CFA_restore_extended";
646 case DW_CFA_undefined:
647 return "DW_CFA_undefined";
648 case DW_CFA_same_value:
649 return "DW_CFA_same_value";
650 case DW_CFA_register:
651 return "DW_CFA_register";
652 case DW_CFA_remember_state:
653 return "DW_CFA_remember_state";
654 case DW_CFA_restore_state:
655 return "DW_CFA_restore_state";
656 case DW_CFA_def_cfa:
657 return "DW_CFA_def_cfa";
658 case DW_CFA_def_cfa_register:
659 return "DW_CFA_def_cfa_register";
660 case DW_CFA_def_cfa_offset:
661 return "DW_CFA_def_cfa_offset";
662
663 /* DWARF 3 */
664 case DW_CFA_def_cfa_expression:
665 return "DW_CFA_def_cfa_expression";
666 case DW_CFA_expression:
667 return "DW_CFA_expression";
668 case DW_CFA_offset_extended_sf:
669 return "DW_CFA_offset_extended_sf";
670 case DW_CFA_def_cfa_sf:
671 return "DW_CFA_def_cfa_sf";
672 case DW_CFA_def_cfa_offset_sf:
673 return "DW_CFA_def_cfa_offset_sf";
674
675 /* SGI/MIPS specific */
676 case DW_CFA_MIPS_advance_loc8:
677 return "DW_CFA_MIPS_advance_loc8";
678
679 /* GNU extensions */
680 case DW_CFA_GNU_window_save:
681 return "DW_CFA_GNU_window_save";
682 case DW_CFA_GNU_args_size:
683 return "DW_CFA_GNU_args_size";
684 case DW_CFA_GNU_negative_offset_extended:
685 return "DW_CFA_GNU_negative_offset_extended";
686
687 default:
688 return "DW_CFA_<unknown>";
689 }
690 }
691
692 /* Return a pointer to a newly allocated Call Frame Instruction. */
693
694 static inline dw_cfi_ref
695 new_cfi (void)
696 {
697 dw_cfi_ref cfi = GGC_NEW (dw_cfi_node);
698
699 cfi->dw_cfi_next = NULL;
700 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
701 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
702
703 return cfi;
704 }
705
706 /* Add a Call Frame Instruction to list of instructions. */
707
708 static inline void
709 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
710 {
711 dw_cfi_ref *p;
712 dw_fde_ref fde = current_fde ();
713
714 /* When DRAP is used, CFA is defined with an expression. Redefine
715 CFA may lead to a different CFA value. */
716 /* ??? Of course, this heuristic fails when we're annotating epilogues,
717 because of course we'll always want to redefine the CFA back to the
718 stack pointer on the way out. Where should we move this check? */
719 if (0 && fde && fde->drap_reg != INVALID_REGNUM)
720 switch (cfi->dw_cfi_opc)
721 {
722 case DW_CFA_def_cfa_register:
723 case DW_CFA_def_cfa_offset:
724 case DW_CFA_def_cfa_offset_sf:
725 case DW_CFA_def_cfa:
726 case DW_CFA_def_cfa_sf:
727 gcc_unreachable ();
728
729 default:
730 break;
731 }
732
733 /* Find the end of the chain. */
734 for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
735 ;
736
737 *p = cfi;
738 }
739
740 /* Generate a new label for the CFI info to refer to. FORCE is true
741 if a label needs to be output even when using .cfi_* directives. */
742
743 char *
744 dwarf2out_cfi_label (bool force)
745 {
746 static char label[20];
747
748 if (!force && dwarf2out_do_cfi_asm ())
749 {
750 /* In this case, we will be emitting the asm directive instead of
751 the label, so just return a placeholder to keep the rest of the
752 interfaces happy. */
753 strcpy (label, "<do not output>");
754 }
755 else
756 {
757 ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
758 ASM_OUTPUT_LABEL (asm_out_file, label);
759 }
760
761 return label;
762 }
763
764 /* True if remember_state should be emitted before following CFI directive. */
765 static bool emit_cfa_remember;
766
767 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
768 or to the CIE if LABEL is NULL. */
769
770 static void
771 add_fde_cfi (const char *label, dw_cfi_ref cfi)
772 {
773 dw_cfi_ref *list_head;
774
775 if (emit_cfa_remember)
776 {
777 dw_cfi_ref cfi_remember;
778
779 /* Emit the state save. */
780 emit_cfa_remember = false;
781 cfi_remember = new_cfi ();
782 cfi_remember->dw_cfi_opc = DW_CFA_remember_state;
783 add_fde_cfi (label, cfi_remember);
784 }
785
786 list_head = &cie_cfi_head;
787
788 if (dwarf2out_do_cfi_asm ())
789 {
790 if (label)
791 {
792 dw_fde_ref fde = current_fde ();
793
794 gcc_assert (fde != NULL);
795
796 /* We still have to add the cfi to the list so that lookup_cfa
797 works later on. When -g2 and above we even need to force
798 emitting of CFI labels and add to list a DW_CFA_set_loc for
799 convert_cfa_to_fb_loc_list purposes. If we're generating
800 DWARF3 output we use DW_OP_call_frame_cfa and so don't use
801 convert_cfa_to_fb_loc_list. */
802 if (dwarf_version == 2
803 && debug_info_level > DINFO_LEVEL_TERSE
804 && (write_symbols == DWARF2_DEBUG
805 || write_symbols == VMS_AND_DWARF2_DEBUG))
806 {
807 switch (cfi->dw_cfi_opc)
808 {
809 case DW_CFA_def_cfa_offset:
810 case DW_CFA_def_cfa_offset_sf:
811 case DW_CFA_def_cfa_register:
812 case DW_CFA_def_cfa:
813 case DW_CFA_def_cfa_sf:
814 case DW_CFA_def_cfa_expression:
815 case DW_CFA_restore_state:
816 if (*label == 0 || strcmp (label, "<do not output>") == 0)
817 label = dwarf2out_cfi_label (true);
818
819 if (fde->dw_fde_current_label == NULL
820 || strcmp (label, fde->dw_fde_current_label) != 0)
821 {
822 dw_cfi_ref xcfi;
823
824 label = xstrdup (label);
825
826 /* Set the location counter to the new label. */
827 xcfi = new_cfi ();
828 /* It doesn't metter whether DW_CFA_set_loc
829 or DW_CFA_advance_loc4 is added here, those aren't
830 emitted into assembly, only looked up by
831 convert_cfa_to_fb_loc_list. */
832 xcfi->dw_cfi_opc = DW_CFA_set_loc;
833 xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
834 add_cfi (&fde->dw_fde_cfi, xcfi);
835 fde->dw_fde_current_label = label;
836 }
837 break;
838 default:
839 break;
840 }
841 }
842
843 output_cfi_directive (cfi);
844
845 list_head = &fde->dw_fde_cfi;
846 }
847 /* ??? If this is a CFI for the CIE, we don't emit. This
848 assumes that the standard CIE contents that the assembler
849 uses matches the standard CIE contents that the compiler
850 uses. This is probably a bad assumption. I'm not quite
851 sure how to address this for now. */
852 }
853 else if (label)
854 {
855 dw_fde_ref fde = current_fde ();
856
857 gcc_assert (fde != NULL);
858
859 if (*label == 0)
860 label = dwarf2out_cfi_label (false);
861
862 if (fde->dw_fde_current_label == NULL
863 || strcmp (label, fde->dw_fde_current_label) != 0)
864 {
865 dw_cfi_ref xcfi;
866
867 label = xstrdup (label);
868
869 /* Set the location counter to the new label. */
870 xcfi = new_cfi ();
871 /* If we have a current label, advance from there, otherwise
872 set the location directly using set_loc. */
873 xcfi->dw_cfi_opc = fde->dw_fde_current_label
874 ? DW_CFA_advance_loc4
875 : DW_CFA_set_loc;
876 xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
877 add_cfi (&fde->dw_fde_cfi, xcfi);
878
879 fde->dw_fde_current_label = label;
880 }
881
882 list_head = &fde->dw_fde_cfi;
883 }
884
885 add_cfi (list_head, cfi);
886 }
887
888 /* Subroutine of lookup_cfa. */
889
890 static void
891 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc, dw_cfa_location *remember)
892 {
893 switch (cfi->dw_cfi_opc)
894 {
895 case DW_CFA_def_cfa_offset:
896 case DW_CFA_def_cfa_offset_sf:
897 loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
898 break;
899 case DW_CFA_def_cfa_register:
900 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
901 break;
902 case DW_CFA_def_cfa:
903 case DW_CFA_def_cfa_sf:
904 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
905 loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
906 break;
907 case DW_CFA_def_cfa_expression:
908 get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
909 break;
910
911 case DW_CFA_remember_state:
912 gcc_assert (!remember->in_use);
913 *remember = *loc;
914 remember->in_use = 1;
915 break;
916 case DW_CFA_restore_state:
917 gcc_assert (remember->in_use);
918 *loc = *remember;
919 remember->in_use = 0;
920 break;
921
922 default:
923 break;
924 }
925 }
926
927 /* Find the previous value for the CFA. */
928
929 static void
930 lookup_cfa (dw_cfa_location *loc)
931 {
932 dw_cfi_ref cfi;
933 dw_fde_ref fde;
934 dw_cfa_location remember;
935
936 memset (loc, 0, sizeof (*loc));
937 loc->reg = INVALID_REGNUM;
938 remember = *loc;
939
940 for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
941 lookup_cfa_1 (cfi, loc, &remember);
942
943 fde = current_fde ();
944 if (fde)
945 for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
946 lookup_cfa_1 (cfi, loc, &remember);
947 }
948
949 /* The current rule for calculating the DWARF2 canonical frame address. */
950 static dw_cfa_location cfa;
951
952 /* The register used for saving registers to the stack, and its offset
953 from the CFA. */
954 static dw_cfa_location cfa_store;
955
956 /* The current save location around an epilogue. */
957 static dw_cfa_location cfa_remember;
958
959 /* The running total of the size of arguments pushed onto the stack. */
960 static HOST_WIDE_INT args_size;
961
962 /* The last args_size we actually output. */
963 static HOST_WIDE_INT old_args_size;
964
965 /* Entry point to update the canonical frame address (CFA).
966 LABEL is passed to add_fde_cfi. The value of CFA is now to be
967 calculated from REG+OFFSET. */
968
969 void
970 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
971 {
972 dw_cfa_location loc;
973 loc.indirect = 0;
974 loc.base_offset = 0;
975 loc.reg = reg;
976 loc.offset = offset;
977 def_cfa_1 (label, &loc);
978 }
979
980 /* Determine if two dw_cfa_location structures define the same data. */
981
982 static bool
983 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
984 {
985 return (loc1->reg == loc2->reg
986 && loc1->offset == loc2->offset
987 && loc1->indirect == loc2->indirect
988 && (loc1->indirect == 0
989 || loc1->base_offset == loc2->base_offset));
990 }
991
992 /* This routine does the actual work. The CFA is now calculated from
993 the dw_cfa_location structure. */
994
995 static void
996 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
997 {
998 dw_cfi_ref cfi;
999 dw_cfa_location old_cfa, loc;
1000
1001 cfa = *loc_p;
1002 loc = *loc_p;
1003
1004 if (cfa_store.reg == loc.reg && loc.indirect == 0)
1005 cfa_store.offset = loc.offset;
1006
1007 loc.reg = DWARF_FRAME_REGNUM (loc.reg);
1008 lookup_cfa (&old_cfa);
1009
1010 /* If nothing changed, no need to issue any call frame instructions. */
1011 if (cfa_equal_p (&loc, &old_cfa))
1012 return;
1013
1014 cfi = new_cfi ();
1015
1016 if (loc.reg == old_cfa.reg && !loc.indirect)
1017 {
1018 /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
1019 the CFA register did not change but the offset did. The data
1020 factoring for DW_CFA_def_cfa_offset_sf happens in output_cfi, or
1021 in the assembler via the .cfi_def_cfa_offset directive. */
1022 if (loc.offset < 0)
1023 cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
1024 else
1025 cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
1026 cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
1027 }
1028
1029 #ifndef MIPS_DEBUGGING_INFO /* SGI dbx thinks this means no offset. */
1030 else if (loc.offset == old_cfa.offset
1031 && old_cfa.reg != INVALID_REGNUM
1032 && !loc.indirect)
1033 {
1034 /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
1035 indicating the CFA register has changed to <register> but the
1036 offset has not changed. */
1037 cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
1038 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1039 }
1040 #endif
1041
1042 else if (loc.indirect == 0)
1043 {
1044 /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
1045 indicating the CFA register has changed to <register> with
1046 the specified offset. The data factoring for DW_CFA_def_cfa_sf
1047 happens in output_cfi, or in the assembler via the .cfi_def_cfa
1048 directive. */
1049 if (loc.offset < 0)
1050 cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
1051 else
1052 cfi->dw_cfi_opc = DW_CFA_def_cfa;
1053 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1054 cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
1055 }
1056 else
1057 {
1058 /* Construct a DW_CFA_def_cfa_expression instruction to
1059 calculate the CFA using a full location expression since no
1060 register-offset pair is available. */
1061 struct dw_loc_descr_struct *loc_list;
1062
1063 cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
1064 loc_list = build_cfa_loc (&loc, 0);
1065 cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
1066 }
1067
1068 add_fde_cfi (label, cfi);
1069 }
1070
1071 /* Add the CFI for saving a register. REG is the CFA column number.
1072 LABEL is passed to add_fde_cfi.
1073 If SREG is -1, the register is saved at OFFSET from the CFA;
1074 otherwise it is saved in SREG. */
1075
1076 static void
1077 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
1078 {
1079 dw_cfi_ref cfi = new_cfi ();
1080 dw_fde_ref fde = current_fde ();
1081
1082 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1083
1084 /* When stack is aligned, store REG using DW_CFA_expression with
1085 FP. */
1086 if (fde
1087 && fde->stack_realign
1088 && sreg == INVALID_REGNUM)
1089 {
1090 cfi->dw_cfi_opc = DW_CFA_expression;
1091 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = reg;
1092 cfi->dw_cfi_oprnd1.dw_cfi_loc
1093 = build_cfa_aligned_loc (offset, fde->stack_realignment);
1094 }
1095 else if (sreg == INVALID_REGNUM)
1096 {
1097 if (need_data_align_sf_opcode (offset))
1098 cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
1099 else if (reg & ~0x3f)
1100 cfi->dw_cfi_opc = DW_CFA_offset_extended;
1101 else
1102 cfi->dw_cfi_opc = DW_CFA_offset;
1103 cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
1104 }
1105 else if (sreg == reg)
1106 cfi->dw_cfi_opc = DW_CFA_same_value;
1107 else
1108 {
1109 cfi->dw_cfi_opc = DW_CFA_register;
1110 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
1111 }
1112
1113 add_fde_cfi (label, cfi);
1114 }
1115
1116 /* Add the CFI for saving a register window. LABEL is passed to reg_save.
1117 This CFI tells the unwinder that it needs to restore the window registers
1118 from the previous frame's window save area.
1119
1120 ??? Perhaps we should note in the CIE where windows are saved (instead of
1121 assuming 0(cfa)) and what registers are in the window. */
1122
1123 void
1124 dwarf2out_window_save (const char *label)
1125 {
1126 dw_cfi_ref cfi = new_cfi ();
1127
1128 cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
1129 add_fde_cfi (label, cfi);
1130 }
1131
1132 /* Add a CFI to update the running total of the size of arguments
1133 pushed onto the stack. */
1134
1135 void
1136 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
1137 {
1138 dw_cfi_ref cfi;
1139
1140 if (size == old_args_size)
1141 return;
1142
1143 old_args_size = size;
1144
1145 cfi = new_cfi ();
1146 cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
1147 cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
1148 add_fde_cfi (label, cfi);
1149 }
1150
1151 /* Entry point for saving a register to the stack. REG is the GCC register
1152 number. LABEL and OFFSET are passed to reg_save. */
1153
1154 void
1155 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
1156 {
1157 reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
1158 }
1159
1160 /* Entry point for saving the return address in the stack.
1161 LABEL and OFFSET are passed to reg_save. */
1162
1163 void
1164 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
1165 {
1166 reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
1167 }
1168
1169 /* Entry point for saving the return address in a register.
1170 LABEL and SREG are passed to reg_save. */
1171
1172 void
1173 dwarf2out_return_reg (const char *label, unsigned int sreg)
1174 {
1175 reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
1176 }
1177
1178 #ifdef DWARF2_UNWIND_INFO
1179 /* Record the initial position of the return address. RTL is
1180 INCOMING_RETURN_ADDR_RTX. */
1181
1182 static void
1183 initial_return_save (rtx rtl)
1184 {
1185 unsigned int reg = INVALID_REGNUM;
1186 HOST_WIDE_INT offset = 0;
1187
1188 switch (GET_CODE (rtl))
1189 {
1190 case REG:
1191 /* RA is in a register. */
1192 reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1193 break;
1194
1195 case MEM:
1196 /* RA is on the stack. */
1197 rtl = XEXP (rtl, 0);
1198 switch (GET_CODE (rtl))
1199 {
1200 case REG:
1201 gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
1202 offset = 0;
1203 break;
1204
1205 case PLUS:
1206 gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1207 offset = INTVAL (XEXP (rtl, 1));
1208 break;
1209
1210 case MINUS:
1211 gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1212 offset = -INTVAL (XEXP (rtl, 1));
1213 break;
1214
1215 default:
1216 gcc_unreachable ();
1217 }
1218
1219 break;
1220
1221 case PLUS:
1222 /* The return address is at some offset from any value we can
1223 actually load. For instance, on the SPARC it is in %i7+8. Just
1224 ignore the offset for now; it doesn't matter for unwinding frames. */
1225 gcc_assert (CONST_INT_P (XEXP (rtl, 1)));
1226 initial_return_save (XEXP (rtl, 0));
1227 return;
1228
1229 default:
1230 gcc_unreachable ();
1231 }
1232
1233 if (reg != DWARF_FRAME_RETURN_COLUMN)
1234 reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1235 }
1236 #endif
1237
1238 /* Given a SET, calculate the amount of stack adjustment it
1239 contains. */
1240
1241 static HOST_WIDE_INT
1242 stack_adjust_offset (const_rtx pattern, HOST_WIDE_INT cur_args_size,
1243 HOST_WIDE_INT cur_offset)
1244 {
1245 const_rtx src = SET_SRC (pattern);
1246 const_rtx dest = SET_DEST (pattern);
1247 HOST_WIDE_INT offset = 0;
1248 enum rtx_code code;
1249
1250 if (dest == stack_pointer_rtx)
1251 {
1252 code = GET_CODE (src);
1253
1254 /* Assume (set (reg sp) (reg whatever)) sets args_size
1255 level to 0. */
1256 if (code == REG && src != stack_pointer_rtx)
1257 {
1258 offset = -cur_args_size;
1259 #ifndef STACK_GROWS_DOWNWARD
1260 offset = -offset;
1261 #endif
1262 return offset - cur_offset;
1263 }
1264
1265 if (! (code == PLUS || code == MINUS)
1266 || XEXP (src, 0) != stack_pointer_rtx
1267 || !CONST_INT_P (XEXP (src, 1)))
1268 return 0;
1269
1270 /* (set (reg sp) (plus (reg sp) (const_int))) */
1271 offset = INTVAL (XEXP (src, 1));
1272 if (code == PLUS)
1273 offset = -offset;
1274 return offset;
1275 }
1276
1277 if (MEM_P (src) && !MEM_P (dest))
1278 dest = src;
1279 if (MEM_P (dest))
1280 {
1281 /* (set (mem (pre_dec (reg sp))) (foo)) */
1282 src = XEXP (dest, 0);
1283 code = GET_CODE (src);
1284
1285 switch (code)
1286 {
1287 case PRE_MODIFY:
1288 case POST_MODIFY:
1289 if (XEXP (src, 0) == stack_pointer_rtx)
1290 {
1291 rtx val = XEXP (XEXP (src, 1), 1);
1292 /* We handle only adjustments by constant amount. */
1293 gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1294 && CONST_INT_P (val));
1295 offset = -INTVAL (val);
1296 break;
1297 }
1298 return 0;
1299
1300 case PRE_DEC:
1301 case POST_DEC:
1302 if (XEXP (src, 0) == stack_pointer_rtx)
1303 {
1304 offset = GET_MODE_SIZE (GET_MODE (dest));
1305 break;
1306 }
1307 return 0;
1308
1309 case PRE_INC:
1310 case POST_INC:
1311 if (XEXP (src, 0) == stack_pointer_rtx)
1312 {
1313 offset = -GET_MODE_SIZE (GET_MODE (dest));
1314 break;
1315 }
1316 return 0;
1317
1318 default:
1319 return 0;
1320 }
1321 }
1322 else
1323 return 0;
1324
1325 return offset;
1326 }
1327
1328 /* Precomputed args_size for CODE_LABELs and BARRIERs preceeding them,
1329 indexed by INSN_UID. */
1330
1331 static HOST_WIDE_INT *barrier_args_size;
1332
1333 /* Helper function for compute_barrier_args_size. Handle one insn. */
1334
1335 static HOST_WIDE_INT
1336 compute_barrier_args_size_1 (rtx insn, HOST_WIDE_INT cur_args_size,
1337 VEC (rtx, heap) **next)
1338 {
1339 HOST_WIDE_INT offset = 0;
1340 int i;
1341
1342 if (! RTX_FRAME_RELATED_P (insn))
1343 {
1344 if (prologue_epilogue_contains (insn))
1345 /* Nothing */;
1346 else if (GET_CODE (PATTERN (insn)) == SET)
1347 offset = stack_adjust_offset (PATTERN (insn), cur_args_size, 0);
1348 else if (GET_CODE (PATTERN (insn)) == PARALLEL
1349 || GET_CODE (PATTERN (insn)) == SEQUENCE)
1350 {
1351 /* There may be stack adjustments inside compound insns. Search
1352 for them. */
1353 for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1354 if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1355 offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1356 cur_args_size, offset);
1357 }
1358 }
1359 else
1360 {
1361 rtx expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1362
1363 if (expr)
1364 {
1365 expr = XEXP (expr, 0);
1366 if (GET_CODE (expr) == PARALLEL
1367 || GET_CODE (expr) == SEQUENCE)
1368 for (i = 1; i < XVECLEN (expr, 0); i++)
1369 {
1370 rtx elem = XVECEXP (expr, 0, i);
1371
1372 if (GET_CODE (elem) == SET && !RTX_FRAME_RELATED_P (elem))
1373 offset += stack_adjust_offset (elem, cur_args_size, offset);
1374 }
1375 }
1376 }
1377
1378 #ifndef STACK_GROWS_DOWNWARD
1379 offset = -offset;
1380 #endif
1381
1382 cur_args_size += offset;
1383 if (cur_args_size < 0)
1384 cur_args_size = 0;
1385
1386 if (JUMP_P (insn))
1387 {
1388 rtx dest = JUMP_LABEL (insn);
1389
1390 if (dest)
1391 {
1392 if (barrier_args_size [INSN_UID (dest)] < 0)
1393 {
1394 barrier_args_size [INSN_UID (dest)] = cur_args_size;
1395 VEC_safe_push (rtx, heap, *next, dest);
1396 }
1397 }
1398 }
1399
1400 return cur_args_size;
1401 }
1402
1403 /* Walk the whole function and compute args_size on BARRIERs. */
1404
1405 static void
1406 compute_barrier_args_size (void)
1407 {
1408 int max_uid = get_max_uid (), i;
1409 rtx insn;
1410 VEC (rtx, heap) *worklist, *next, *tmp;
1411
1412 barrier_args_size = XNEWVEC (HOST_WIDE_INT, max_uid);
1413 for (i = 0; i < max_uid; i++)
1414 barrier_args_size[i] = -1;
1415
1416 worklist = VEC_alloc (rtx, heap, 20);
1417 next = VEC_alloc (rtx, heap, 20);
1418 insn = get_insns ();
1419 barrier_args_size[INSN_UID (insn)] = 0;
1420 VEC_quick_push (rtx, worklist, insn);
1421 for (;;)
1422 {
1423 while (!VEC_empty (rtx, worklist))
1424 {
1425 rtx prev, body, first_insn;
1426 HOST_WIDE_INT cur_args_size;
1427
1428 first_insn = insn = VEC_pop (rtx, worklist);
1429 cur_args_size = barrier_args_size[INSN_UID (insn)];
1430 prev = prev_nonnote_insn (insn);
1431 if (prev && BARRIER_P (prev))
1432 barrier_args_size[INSN_UID (prev)] = cur_args_size;
1433
1434 for (; insn; insn = NEXT_INSN (insn))
1435 {
1436 if (INSN_DELETED_P (insn) || NOTE_P (insn))
1437 continue;
1438 if (BARRIER_P (insn))
1439 break;
1440
1441 if (LABEL_P (insn))
1442 {
1443 if (insn == first_insn)
1444 continue;
1445 else if (barrier_args_size[INSN_UID (insn)] < 0)
1446 {
1447 barrier_args_size[INSN_UID (insn)] = cur_args_size;
1448 continue;
1449 }
1450 else
1451 {
1452 /* The insns starting with this label have been
1453 already scanned or are in the worklist. */
1454 break;
1455 }
1456 }
1457
1458 body = PATTERN (insn);
1459 if (GET_CODE (body) == SEQUENCE)
1460 {
1461 HOST_WIDE_INT dest_args_size = cur_args_size;
1462 for (i = 1; i < XVECLEN (body, 0); i++)
1463 if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0))
1464 && INSN_FROM_TARGET_P (XVECEXP (body, 0, i)))
1465 dest_args_size
1466 = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1467 dest_args_size, &next);
1468 else
1469 cur_args_size
1470 = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1471 cur_args_size, &next);
1472
1473 if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0)))
1474 compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1475 dest_args_size, &next);
1476 else
1477 cur_args_size
1478 = compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1479 cur_args_size, &next);
1480 }
1481 else
1482 cur_args_size
1483 = compute_barrier_args_size_1 (insn, cur_args_size, &next);
1484 }
1485 }
1486
1487 if (VEC_empty (rtx, next))
1488 break;
1489
1490 /* Swap WORKLIST with NEXT and truncate NEXT for next iteration. */
1491 tmp = next;
1492 next = worklist;
1493 worklist = tmp;
1494 VEC_truncate (rtx, next, 0);
1495 }
1496
1497 VEC_free (rtx, heap, worklist);
1498 VEC_free (rtx, heap, next);
1499 }
1500
1501
1502 /* Check INSN to see if it looks like a push or a stack adjustment, and
1503 make a note of it if it does. EH uses this information to find out how
1504 much extra space it needs to pop off the stack. */
1505
1506 static void
1507 dwarf2out_stack_adjust (rtx insn, bool after_p)
1508 {
1509 HOST_WIDE_INT offset;
1510 const char *label;
1511 int i;
1512
1513 /* Don't handle epilogues at all. Certainly it would be wrong to do so
1514 with this function. Proper support would require all frame-related
1515 insns to be marked, and to be able to handle saving state around
1516 epilogues textually in the middle of the function. */
1517 if (prologue_epilogue_contains (insn))
1518 return;
1519
1520 /* If INSN is an instruction from target of an annulled branch, the
1521 effects are for the target only and so current argument size
1522 shouldn't change at all. */
1523 if (final_sequence
1524 && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
1525 && INSN_FROM_TARGET_P (insn))
1526 return;
1527
1528 /* If only calls can throw, and we have a frame pointer,
1529 save up adjustments until we see the CALL_INSN. */
1530 if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1531 {
1532 if (CALL_P (insn) && !after_p)
1533 {
1534 /* Extract the size of the args from the CALL rtx itself. */
1535 insn = PATTERN (insn);
1536 if (GET_CODE (insn) == PARALLEL)
1537 insn = XVECEXP (insn, 0, 0);
1538 if (GET_CODE (insn) == SET)
1539 insn = SET_SRC (insn);
1540 gcc_assert (GET_CODE (insn) == CALL);
1541 dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1542 }
1543 return;
1544 }
1545
1546 if (CALL_P (insn) && !after_p)
1547 {
1548 if (!flag_asynchronous_unwind_tables)
1549 dwarf2out_args_size ("", args_size);
1550 return;
1551 }
1552 else if (BARRIER_P (insn))
1553 {
1554 /* Don't call compute_barrier_args_size () if the only
1555 BARRIER is at the end of function. */
1556 if (barrier_args_size == NULL && next_nonnote_insn (insn))
1557 compute_barrier_args_size ();
1558 if (barrier_args_size == NULL)
1559 offset = 0;
1560 else
1561 {
1562 offset = barrier_args_size[INSN_UID (insn)];
1563 if (offset < 0)
1564 offset = 0;
1565 }
1566
1567 offset -= args_size;
1568 #ifndef STACK_GROWS_DOWNWARD
1569 offset = -offset;
1570 #endif
1571 }
1572 else if (GET_CODE (PATTERN (insn)) == SET)
1573 offset = stack_adjust_offset (PATTERN (insn), args_size, 0);
1574 else if (GET_CODE (PATTERN (insn)) == PARALLEL
1575 || GET_CODE (PATTERN (insn)) == SEQUENCE)
1576 {
1577 /* There may be stack adjustments inside compound insns. Search
1578 for them. */
1579 for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1580 if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1581 offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1582 args_size, offset);
1583 }
1584 else
1585 return;
1586
1587 if (offset == 0)
1588 return;
1589
1590 label = dwarf2out_cfi_label (false);
1591 dwarf2out_args_size_adjust (offset, label);
1592 }
1593
1594 /* Adjust args_size based on stack adjustment OFFSET. */
1595
1596 static void
1597 dwarf2out_args_size_adjust (HOST_WIDE_INT offset, const char *label)
1598 {
1599 if (cfa.reg == STACK_POINTER_REGNUM)
1600 cfa.offset += offset;
1601
1602 if (cfa_store.reg == STACK_POINTER_REGNUM)
1603 cfa_store.offset += offset;
1604
1605 #ifndef STACK_GROWS_DOWNWARD
1606 offset = -offset;
1607 #endif
1608
1609 args_size += offset;
1610 if (args_size < 0)
1611 args_size = 0;
1612
1613 def_cfa_1 (label, &cfa);
1614 if (flag_asynchronous_unwind_tables)
1615 dwarf2out_args_size (label, args_size);
1616 }
1617
1618 #endif
1619
1620 /* We delay emitting a register save until either (a) we reach the end
1621 of the prologue or (b) the register is clobbered. This clusters
1622 register saves so that there are fewer pc advances. */
1623
1624 struct GTY(()) queued_reg_save {
1625 struct queued_reg_save *next;
1626 rtx reg;
1627 HOST_WIDE_INT cfa_offset;
1628 rtx saved_reg;
1629 };
1630
1631 static GTY(()) struct queued_reg_save *queued_reg_saves;
1632
1633 /* The caller's ORIG_REG is saved in SAVED_IN_REG. */
1634 struct GTY(()) reg_saved_in_data {
1635 rtx orig_reg;
1636 rtx saved_in_reg;
1637 };
1638
1639 /* A list of registers saved in other registers.
1640 The list intentionally has a small maximum capacity of 4; if your
1641 port needs more than that, you might consider implementing a
1642 more efficient data structure. */
1643 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1644 static GTY(()) size_t num_regs_saved_in_regs;
1645
1646 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1647 static const char *last_reg_save_label;
1648
1649 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1650 SREG, or if SREG is NULL then it is saved at OFFSET to the CFA. */
1651
1652 static void
1653 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1654 {
1655 struct queued_reg_save *q;
1656
1657 /* Duplicates waste space, but it's also necessary to remove them
1658 for correctness, since the queue gets output in reverse
1659 order. */
1660 for (q = queued_reg_saves; q != NULL; q = q->next)
1661 if (REGNO (q->reg) == REGNO (reg))
1662 break;
1663
1664 if (q == NULL)
1665 {
1666 q = GGC_NEW (struct queued_reg_save);
1667 q->next = queued_reg_saves;
1668 queued_reg_saves = q;
1669 }
1670
1671 q->reg = reg;
1672 q->cfa_offset = offset;
1673 q->saved_reg = sreg;
1674
1675 last_reg_save_label = label;
1676 }
1677
1678 /* Output all the entries in QUEUED_REG_SAVES. */
1679
1680 static void
1681 flush_queued_reg_saves (void)
1682 {
1683 struct queued_reg_save *q;
1684
1685 for (q = queued_reg_saves; q; q = q->next)
1686 {
1687 size_t i;
1688 unsigned int reg, sreg;
1689
1690 for (i = 0; i < num_regs_saved_in_regs; i++)
1691 if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1692 break;
1693 if (q->saved_reg && i == num_regs_saved_in_regs)
1694 {
1695 gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1696 num_regs_saved_in_regs++;
1697 }
1698 if (i != num_regs_saved_in_regs)
1699 {
1700 regs_saved_in_regs[i].orig_reg = q->reg;
1701 regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1702 }
1703
1704 reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1705 if (q->saved_reg)
1706 sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1707 else
1708 sreg = INVALID_REGNUM;
1709 reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1710 }
1711
1712 queued_reg_saves = NULL;
1713 last_reg_save_label = NULL;
1714 }
1715
1716 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1717 location for? Or, does it clobber a register which we've previously
1718 said that some other register is saved in, and for which we now
1719 have a new location for? */
1720
1721 static bool
1722 clobbers_queued_reg_save (const_rtx insn)
1723 {
1724 struct queued_reg_save *q;
1725
1726 for (q = queued_reg_saves; q; q = q->next)
1727 {
1728 size_t i;
1729 if (modified_in_p (q->reg, insn))
1730 return true;
1731 for (i = 0; i < num_regs_saved_in_regs; i++)
1732 if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1733 && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1734 return true;
1735 }
1736
1737 return false;
1738 }
1739
1740 /* Entry point for saving the first register into the second. */
1741
1742 void
1743 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1744 {
1745 size_t i;
1746 unsigned int regno, sregno;
1747
1748 for (i = 0; i < num_regs_saved_in_regs; i++)
1749 if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1750 break;
1751 if (i == num_regs_saved_in_regs)
1752 {
1753 gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1754 num_regs_saved_in_regs++;
1755 }
1756 regs_saved_in_regs[i].orig_reg = reg;
1757 regs_saved_in_regs[i].saved_in_reg = sreg;
1758
1759 regno = DWARF_FRAME_REGNUM (REGNO (reg));
1760 sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1761 reg_save (label, regno, sregno, 0);
1762 }
1763
1764 /* What register, if any, is currently saved in REG? */
1765
1766 static rtx
1767 reg_saved_in (rtx reg)
1768 {
1769 unsigned int regn = REGNO (reg);
1770 size_t i;
1771 struct queued_reg_save *q;
1772
1773 for (q = queued_reg_saves; q; q = q->next)
1774 if (q->saved_reg && regn == REGNO (q->saved_reg))
1775 return q->reg;
1776
1777 for (i = 0; i < num_regs_saved_in_regs; i++)
1778 if (regs_saved_in_regs[i].saved_in_reg
1779 && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1780 return regs_saved_in_regs[i].orig_reg;
1781
1782 return NULL_RTX;
1783 }
1784
1785
1786 /* A temporary register holding an integral value used in adjusting SP
1787 or setting up the store_reg. The "offset" field holds the integer
1788 value, not an offset. */
1789 static dw_cfa_location cfa_temp;
1790
1791 /* A subroutine of dwarf2out_frame_debug, process a REG_DEF_CFA note. */
1792
1793 static void
1794 dwarf2out_frame_debug_def_cfa (rtx pat, const char *label)
1795 {
1796 memset (&cfa, 0, sizeof (cfa));
1797
1798 switch (GET_CODE (pat))
1799 {
1800 case PLUS:
1801 cfa.reg = REGNO (XEXP (pat, 0));
1802 cfa.offset = INTVAL (XEXP (pat, 1));
1803 break;
1804
1805 case REG:
1806 cfa.reg = REGNO (pat);
1807 break;
1808
1809 default:
1810 /* Recurse and define an expression. */
1811 gcc_unreachable ();
1812 }
1813
1814 def_cfa_1 (label, &cfa);
1815 }
1816
1817 /* A subroutine of dwarf2out_frame_debug, process a REG_ADJUST_CFA note. */
1818
1819 static void
1820 dwarf2out_frame_debug_adjust_cfa (rtx pat, const char *label)
1821 {
1822 rtx src, dest;
1823
1824 gcc_assert (GET_CODE (pat) == SET);
1825 dest = XEXP (pat, 0);
1826 src = XEXP (pat, 1);
1827
1828 switch (GET_CODE (src))
1829 {
1830 case PLUS:
1831 gcc_assert (REGNO (XEXP (src, 0)) == cfa.reg);
1832 cfa.offset -= INTVAL (XEXP (src, 1));
1833 break;
1834
1835 case REG:
1836 break;
1837
1838 default:
1839 gcc_unreachable ();
1840 }
1841
1842 cfa.reg = REGNO (dest);
1843 gcc_assert (cfa.indirect == 0);
1844
1845 def_cfa_1 (label, &cfa);
1846 }
1847
1848 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_OFFSET note. */
1849
1850 static void
1851 dwarf2out_frame_debug_cfa_offset (rtx set, const char *label)
1852 {
1853 HOST_WIDE_INT offset;
1854 rtx src, addr, span;
1855
1856 src = XEXP (set, 1);
1857 addr = XEXP (set, 0);
1858 gcc_assert (MEM_P (addr));
1859 addr = XEXP (addr, 0);
1860
1861 /* As documented, only consider extremely simple addresses. */
1862 switch (GET_CODE (addr))
1863 {
1864 case REG:
1865 gcc_assert (REGNO (addr) == cfa.reg);
1866 offset = -cfa.offset;
1867 break;
1868 case PLUS:
1869 gcc_assert (REGNO (XEXP (addr, 0)) == cfa.reg);
1870 offset = INTVAL (XEXP (addr, 1)) - cfa.offset;
1871 break;
1872 default:
1873 gcc_unreachable ();
1874 }
1875
1876 span = targetm.dwarf_register_span (src);
1877
1878 /* ??? We'd like to use queue_reg_save, but we need to come up with
1879 a different flushing heuristic for epilogues. */
1880 if (!span)
1881 reg_save (label, DWARF_FRAME_REGNUM (REGNO (src)), INVALID_REGNUM, offset);
1882 else
1883 {
1884 /* We have a PARALLEL describing where the contents of SRC live.
1885 Queue register saves for each piece of the PARALLEL. */
1886 int par_index;
1887 int limit;
1888 HOST_WIDE_INT span_offset = offset;
1889
1890 gcc_assert (GET_CODE (span) == PARALLEL);
1891
1892 limit = XVECLEN (span, 0);
1893 for (par_index = 0; par_index < limit; par_index++)
1894 {
1895 rtx elem = XVECEXP (span, 0, par_index);
1896
1897 reg_save (label, DWARF_FRAME_REGNUM (REGNO (elem)),
1898 INVALID_REGNUM, span_offset);
1899 span_offset += GET_MODE_SIZE (GET_MODE (elem));
1900 }
1901 }
1902 }
1903
1904 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_REGISTER note. */
1905
1906 static void
1907 dwarf2out_frame_debug_cfa_register (rtx set, const char *label)
1908 {
1909 rtx src, dest;
1910 unsigned sregno, dregno;
1911
1912 src = XEXP (set, 1);
1913 dest = XEXP (set, 0);
1914
1915 if (src == pc_rtx)
1916 sregno = DWARF_FRAME_RETURN_COLUMN;
1917 else
1918 sregno = DWARF_FRAME_REGNUM (REGNO (src));
1919
1920 dregno = DWARF_FRAME_REGNUM (REGNO (dest));
1921
1922 /* ??? We'd like to use queue_reg_save, but we need to come up with
1923 a different flushing heuristic for epilogues. */
1924 reg_save (label, sregno, dregno, 0);
1925 }
1926
1927 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note. */
1928
1929 static void
1930 dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
1931 {
1932 dw_cfi_ref cfi = new_cfi ();
1933 unsigned int regno = DWARF_FRAME_REGNUM (REGNO (reg));
1934
1935 cfi->dw_cfi_opc = (regno & ~0x3f ? DW_CFA_restore_extended : DW_CFA_restore);
1936 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = regno;
1937
1938 add_fde_cfi (label, cfi);
1939 }
1940
1941 /* Record call frame debugging information for an expression EXPR,
1942 which either sets SP or FP (adjusting how we calculate the frame
1943 address) or saves a register to the stack or another register.
1944 LABEL indicates the address of EXPR.
1945
1946 This function encodes a state machine mapping rtxes to actions on
1947 cfa, cfa_store, and cfa_temp.reg. We describe these rules so
1948 users need not read the source code.
1949
1950 The High-Level Picture
1951
1952 Changes in the register we use to calculate the CFA: Currently we
1953 assume that if you copy the CFA register into another register, we
1954 should take the other one as the new CFA register; this seems to
1955 work pretty well. If it's wrong for some target, it's simple
1956 enough not to set RTX_FRAME_RELATED_P on the insn in question.
1957
1958 Changes in the register we use for saving registers to the stack:
1959 This is usually SP, but not always. Again, we deduce that if you
1960 copy SP into another register (and SP is not the CFA register),
1961 then the new register is the one we will be using for register
1962 saves. This also seems to work.
1963
1964 Register saves: There's not much guesswork about this one; if
1965 RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1966 register save, and the register used to calculate the destination
1967 had better be the one we think we're using for this purpose.
1968 It's also assumed that a copy from a call-saved register to another
1969 register is saving that register if RTX_FRAME_RELATED_P is set on
1970 that instruction. If the copy is from a call-saved register to
1971 the *same* register, that means that the register is now the same
1972 value as in the caller.
1973
1974 Except: If the register being saved is the CFA register, and the
1975 offset is nonzero, we are saving the CFA, so we assume we have to
1976 use DW_CFA_def_cfa_expression. If the offset is 0, we assume that
1977 the intent is to save the value of SP from the previous frame.
1978
1979 In addition, if a register has previously been saved to a different
1980 register,
1981
1982 Invariants / Summaries of Rules
1983
1984 cfa current rule for calculating the CFA. It usually
1985 consists of a register and an offset.
1986 cfa_store register used by prologue code to save things to the stack
1987 cfa_store.offset is the offset from the value of
1988 cfa_store.reg to the actual CFA
1989 cfa_temp register holding an integral value. cfa_temp.offset
1990 stores the value, which will be used to adjust the
1991 stack pointer. cfa_temp is also used like cfa_store,
1992 to track stores to the stack via fp or a temp reg.
1993
1994 Rules 1- 4: Setting a register's value to cfa.reg or an expression
1995 with cfa.reg as the first operand changes the cfa.reg and its
1996 cfa.offset. Rule 1 and 4 also set cfa_temp.reg and
1997 cfa_temp.offset.
1998
1999 Rules 6- 9: Set a non-cfa.reg register value to a constant or an
2000 expression yielding a constant. This sets cfa_temp.reg
2001 and cfa_temp.offset.
2002
2003 Rule 5: Create a new register cfa_store used to save items to the
2004 stack.
2005
2006 Rules 10-14: Save a register to the stack. Define offset as the
2007 difference of the original location and cfa_store's
2008 location (or cfa_temp's location if cfa_temp is used).
2009
2010 Rules 16-20: If AND operation happens on sp in prologue, we assume
2011 stack is realigned. We will use a group of DW_OP_XXX
2012 expressions to represent the location of the stored
2013 register instead of CFA+offset.
2014
2015 The Rules
2016
2017 "{a,b}" indicates a choice of a xor b.
2018 "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
2019
2020 Rule 1:
2021 (set <reg1> <reg2>:cfa.reg)
2022 effects: cfa.reg = <reg1>
2023 cfa.offset unchanged
2024 cfa_temp.reg = <reg1>
2025 cfa_temp.offset = cfa.offset
2026
2027 Rule 2:
2028 (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
2029 {<const_int>,<reg>:cfa_temp.reg}))
2030 effects: cfa.reg = sp if fp used
2031 cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
2032 cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
2033 if cfa_store.reg==sp
2034
2035 Rule 3:
2036 (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
2037 effects: cfa.reg = fp
2038 cfa_offset += +/- <const_int>
2039
2040 Rule 4:
2041 (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
2042 constraints: <reg1> != fp
2043 <reg1> != sp
2044 effects: cfa.reg = <reg1>
2045 cfa_temp.reg = <reg1>
2046 cfa_temp.offset = cfa.offset
2047
2048 Rule 5:
2049 (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
2050 constraints: <reg1> != fp
2051 <reg1> != sp
2052 effects: cfa_store.reg = <reg1>
2053 cfa_store.offset = cfa.offset - cfa_temp.offset
2054
2055 Rule 6:
2056 (set <reg> <const_int>)
2057 effects: cfa_temp.reg = <reg>
2058 cfa_temp.offset = <const_int>
2059
2060 Rule 7:
2061 (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
2062 effects: cfa_temp.reg = <reg1>
2063 cfa_temp.offset |= <const_int>
2064
2065 Rule 8:
2066 (set <reg> (high <exp>))
2067 effects: none
2068
2069 Rule 9:
2070 (set <reg> (lo_sum <exp> <const_int>))
2071 effects: cfa_temp.reg = <reg>
2072 cfa_temp.offset = <const_int>
2073
2074 Rule 10:
2075 (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
2076 effects: cfa_store.offset -= <const_int>
2077 cfa.offset = cfa_store.offset if cfa.reg == sp
2078 cfa.reg = sp
2079 cfa.base_offset = -cfa_store.offset
2080
2081 Rule 11:
2082 (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
2083 effects: cfa_store.offset += -/+ mode_size(mem)
2084 cfa.offset = cfa_store.offset if cfa.reg == sp
2085 cfa.reg = sp
2086 cfa.base_offset = -cfa_store.offset
2087
2088 Rule 12:
2089 (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
2090
2091 <reg2>)
2092 effects: cfa.reg = <reg1>
2093 cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
2094
2095 Rule 13:
2096 (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
2097 effects: cfa.reg = <reg1>
2098 cfa.base_offset = -{cfa_store,cfa_temp}.offset
2099
2100 Rule 14:
2101 (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
2102 effects: cfa.reg = <reg1>
2103 cfa.base_offset = -cfa_temp.offset
2104 cfa_temp.offset -= mode_size(mem)
2105
2106 Rule 15:
2107 (set <reg> {unspec, unspec_volatile})
2108 effects: target-dependent
2109
2110 Rule 16:
2111 (set sp (and: sp <const_int>))
2112 constraints: cfa_store.reg == sp
2113 effects: current_fde.stack_realign = 1
2114 cfa_store.offset = 0
2115 fde->drap_reg = cfa.reg if cfa.reg != sp and cfa.reg != fp
2116
2117 Rule 17:
2118 (set (mem ({pre_inc, pre_dec} sp)) (mem (plus (cfa.reg) (const_int))))
2119 effects: cfa_store.offset += -/+ mode_size(mem)
2120
2121 Rule 18:
2122 (set (mem ({pre_inc, pre_dec} sp)) fp)
2123 constraints: fde->stack_realign == 1
2124 effects: cfa_store.offset = 0
2125 cfa.reg != HARD_FRAME_POINTER_REGNUM
2126
2127 Rule 19:
2128 (set (mem ({pre_inc, pre_dec} sp)) cfa.reg)
2129 constraints: fde->stack_realign == 1
2130 && cfa.offset == 0
2131 && cfa.indirect == 0
2132 && cfa.reg != HARD_FRAME_POINTER_REGNUM
2133 effects: Use DW_CFA_def_cfa_expression to define cfa
2134 cfa.reg == fde->drap_reg
2135
2136 Rule 20:
2137 (set reg fde->drap_reg)
2138 constraints: fde->vdrap_reg == INVALID_REGNUM
2139 effects: fde->vdrap_reg = reg.
2140 (set mem fde->drap_reg)
2141 constraints: fde->drap_reg_saved == 1
2142 effects: none. */
2143
2144 static void
2145 dwarf2out_frame_debug_expr (rtx expr, const char *label)
2146 {
2147 rtx src, dest, span;
2148 HOST_WIDE_INT offset;
2149 dw_fde_ref fde;
2150
2151 /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
2152 the PARALLEL independently. The first element is always processed if
2153 it is a SET. This is for backward compatibility. Other elements
2154 are processed only if they are SETs and the RTX_FRAME_RELATED_P
2155 flag is set in them. */
2156 if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
2157 {
2158 int par_index;
2159 int limit = XVECLEN (expr, 0);
2160 rtx elem;
2161
2162 /* PARALLELs have strict read-modify-write semantics, so we
2163 ought to evaluate every rvalue before changing any lvalue.
2164 It's cumbersome to do that in general, but there's an
2165 easy approximation that is enough for all current users:
2166 handle register saves before register assignments. */
2167 if (GET_CODE (expr) == PARALLEL)
2168 for (par_index = 0; par_index < limit; par_index++)
2169 {
2170 elem = XVECEXP (expr, 0, par_index);
2171 if (GET_CODE (elem) == SET
2172 && MEM_P (SET_DEST (elem))
2173 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2174 dwarf2out_frame_debug_expr (elem, label);
2175 }
2176
2177 for (par_index = 0; par_index < limit; par_index++)
2178 {
2179 elem = XVECEXP (expr, 0, par_index);
2180 if (GET_CODE (elem) == SET
2181 && (!MEM_P (SET_DEST (elem)) || GET_CODE (expr) == SEQUENCE)
2182 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2183 dwarf2out_frame_debug_expr (elem, label);
2184 else if (GET_CODE (elem) == SET
2185 && par_index != 0
2186 && !RTX_FRAME_RELATED_P (elem))
2187 {
2188 /* Stack adjustment combining might combine some post-prologue
2189 stack adjustment into a prologue stack adjustment. */
2190 HOST_WIDE_INT offset = stack_adjust_offset (elem, args_size, 0);
2191
2192 if (offset != 0)
2193 dwarf2out_args_size_adjust (offset, label);
2194 }
2195 }
2196 return;
2197 }
2198
2199 gcc_assert (GET_CODE (expr) == SET);
2200
2201 src = SET_SRC (expr);
2202 dest = SET_DEST (expr);
2203
2204 if (REG_P (src))
2205 {
2206 rtx rsi = reg_saved_in (src);
2207 if (rsi)
2208 src = rsi;
2209 }
2210
2211 fde = current_fde ();
2212
2213 if (REG_P (src)
2214 && fde
2215 && fde->drap_reg == REGNO (src)
2216 && (fde->drap_reg_saved
2217 || REG_P (dest)))
2218 {
2219 /* Rule 20 */
2220 /* If we are saving dynamic realign argument pointer to a
2221 register, the destination is virtual dynamic realign
2222 argument pointer. It may be used to access argument. */
2223 if (REG_P (dest))
2224 {
2225 gcc_assert (fde->vdrap_reg == INVALID_REGNUM);
2226 fde->vdrap_reg = REGNO (dest);
2227 }
2228 return;
2229 }
2230
2231 switch (GET_CODE (dest))
2232 {
2233 case REG:
2234 switch (GET_CODE (src))
2235 {
2236 /* Setting FP from SP. */
2237 case REG:
2238 if (cfa.reg == (unsigned) REGNO (src))
2239 {
2240 /* Rule 1 */
2241 /* Update the CFA rule wrt SP or FP. Make sure src is
2242 relative to the current CFA register.
2243
2244 We used to require that dest be either SP or FP, but the
2245 ARM copies SP to a temporary register, and from there to
2246 FP. So we just rely on the backends to only set
2247 RTX_FRAME_RELATED_P on appropriate insns. */
2248 cfa.reg = REGNO (dest);
2249 cfa_temp.reg = cfa.reg;
2250 cfa_temp.offset = cfa.offset;
2251 }
2252 else
2253 {
2254 /* Saving a register in a register. */
2255 gcc_assert (!fixed_regs [REGNO (dest)]
2256 /* For the SPARC and its register window. */
2257 || (DWARF_FRAME_REGNUM (REGNO (src))
2258 == DWARF_FRAME_RETURN_COLUMN));
2259
2260 /* After stack is aligned, we can only save SP in FP
2261 if drap register is used. In this case, we have
2262 to restore stack pointer with the CFA value and we
2263 don't generate this DWARF information. */
2264 if (fde
2265 && fde->stack_realign
2266 && REGNO (src) == STACK_POINTER_REGNUM)
2267 gcc_assert (REGNO (dest) == HARD_FRAME_POINTER_REGNUM
2268 && fde->drap_reg != INVALID_REGNUM
2269 && cfa.reg != REGNO (src));
2270 else
2271 queue_reg_save (label, src, dest, 0);
2272 }
2273 break;
2274
2275 case PLUS:
2276 case MINUS:
2277 case LO_SUM:
2278 if (dest == stack_pointer_rtx)
2279 {
2280 /* Rule 2 */
2281 /* Adjusting SP. */
2282 switch (GET_CODE (XEXP (src, 1)))
2283 {
2284 case CONST_INT:
2285 offset = INTVAL (XEXP (src, 1));
2286 break;
2287 case REG:
2288 gcc_assert ((unsigned) REGNO (XEXP (src, 1))
2289 == cfa_temp.reg);
2290 offset = cfa_temp.offset;
2291 break;
2292 default:
2293 gcc_unreachable ();
2294 }
2295
2296 if (XEXP (src, 0) == hard_frame_pointer_rtx)
2297 {
2298 /* Restoring SP from FP in the epilogue. */
2299 gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
2300 cfa.reg = STACK_POINTER_REGNUM;
2301 }
2302 else if (GET_CODE (src) == LO_SUM)
2303 /* Assume we've set the source reg of the LO_SUM from sp. */
2304 ;
2305 else
2306 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
2307
2308 if (GET_CODE (src) != MINUS)
2309 offset = -offset;
2310 if (cfa.reg == STACK_POINTER_REGNUM)
2311 cfa.offset += offset;
2312 if (cfa_store.reg == STACK_POINTER_REGNUM)
2313 cfa_store.offset += offset;
2314 }
2315 else if (dest == hard_frame_pointer_rtx)
2316 {
2317 /* Rule 3 */
2318 /* Either setting the FP from an offset of the SP,
2319 or adjusting the FP */
2320 gcc_assert (frame_pointer_needed);
2321
2322 gcc_assert (REG_P (XEXP (src, 0))
2323 && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
2324 && CONST_INT_P (XEXP (src, 1)));
2325 offset = INTVAL (XEXP (src, 1));
2326 if (GET_CODE (src) != MINUS)
2327 offset = -offset;
2328 cfa.offset += offset;
2329 cfa.reg = HARD_FRAME_POINTER_REGNUM;
2330 }
2331 else
2332 {
2333 gcc_assert (GET_CODE (src) != MINUS);
2334
2335 /* Rule 4 */
2336 if (REG_P (XEXP (src, 0))
2337 && REGNO (XEXP (src, 0)) == cfa.reg
2338 && CONST_INT_P (XEXP (src, 1)))
2339 {
2340 /* Setting a temporary CFA register that will be copied
2341 into the FP later on. */
2342 offset = - INTVAL (XEXP (src, 1));
2343 cfa.offset += offset;
2344 cfa.reg = REGNO (dest);
2345 /* Or used to save regs to the stack. */
2346 cfa_temp.reg = cfa.reg;
2347 cfa_temp.offset = cfa.offset;
2348 }
2349
2350 /* Rule 5 */
2351 else if (REG_P (XEXP (src, 0))
2352 && REGNO (XEXP (src, 0)) == cfa_temp.reg
2353 && XEXP (src, 1) == stack_pointer_rtx)
2354 {
2355 /* Setting a scratch register that we will use instead
2356 of SP for saving registers to the stack. */
2357 gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
2358 cfa_store.reg = REGNO (dest);
2359 cfa_store.offset = cfa.offset - cfa_temp.offset;
2360 }
2361
2362 /* Rule 9 */
2363 else if (GET_CODE (src) == LO_SUM
2364 && CONST_INT_P (XEXP (src, 1)))
2365 {
2366 cfa_temp.reg = REGNO (dest);
2367 cfa_temp.offset = INTVAL (XEXP (src, 1));
2368 }
2369 else
2370 gcc_unreachable ();
2371 }
2372 break;
2373
2374 /* Rule 6 */
2375 case CONST_INT:
2376 cfa_temp.reg = REGNO (dest);
2377 cfa_temp.offset = INTVAL (src);
2378 break;
2379
2380 /* Rule 7 */
2381 case IOR:
2382 gcc_assert (REG_P (XEXP (src, 0))
2383 && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
2384 && CONST_INT_P (XEXP (src, 1)));
2385
2386 if ((unsigned) REGNO (dest) != cfa_temp.reg)
2387 cfa_temp.reg = REGNO (dest);
2388 cfa_temp.offset |= INTVAL (XEXP (src, 1));
2389 break;
2390
2391 /* Skip over HIGH, assuming it will be followed by a LO_SUM,
2392 which will fill in all of the bits. */
2393 /* Rule 8 */
2394 case HIGH:
2395 break;
2396
2397 /* Rule 15 */
2398 case UNSPEC:
2399 case UNSPEC_VOLATILE:
2400 gcc_assert (targetm.dwarf_handle_frame_unspec);
2401 targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
2402 return;
2403
2404 /* Rule 16 */
2405 case AND:
2406 /* If this AND operation happens on stack pointer in prologue,
2407 we assume the stack is realigned and we extract the
2408 alignment. */
2409 if (fde && XEXP (src, 0) == stack_pointer_rtx)
2410 {
2411 gcc_assert (cfa_store.reg == REGNO (XEXP (src, 0)));
2412 fde->stack_realign = 1;
2413 fde->stack_realignment = INTVAL (XEXP (src, 1));
2414 cfa_store.offset = 0;
2415
2416 if (cfa.reg != STACK_POINTER_REGNUM
2417 && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2418 fde->drap_reg = cfa.reg;
2419 }
2420 return;
2421
2422 default:
2423 gcc_unreachable ();
2424 }
2425
2426 def_cfa_1 (label, &cfa);
2427 break;
2428
2429 case MEM:
2430
2431 /* Saving a register to the stack. Make sure dest is relative to the
2432 CFA register. */
2433 switch (GET_CODE (XEXP (dest, 0)))
2434 {
2435 /* Rule 10 */
2436 /* With a push. */
2437 case PRE_MODIFY:
2438 /* We can't handle variable size modifications. */
2439 gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
2440 == CONST_INT);
2441 offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
2442
2443 gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
2444 && cfa_store.reg == STACK_POINTER_REGNUM);
2445
2446 cfa_store.offset += offset;
2447 if (cfa.reg == STACK_POINTER_REGNUM)
2448 cfa.offset = cfa_store.offset;
2449
2450 offset = -cfa_store.offset;
2451 break;
2452
2453 /* Rule 11 */
2454 case PRE_INC:
2455 case PRE_DEC:
2456 offset = GET_MODE_SIZE (GET_MODE (dest));
2457 if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
2458 offset = -offset;
2459
2460 gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0))
2461 == STACK_POINTER_REGNUM)
2462 && cfa_store.reg == STACK_POINTER_REGNUM);
2463
2464 cfa_store.offset += offset;
2465
2466 /* Rule 18: If stack is aligned, we will use FP as a
2467 reference to represent the address of the stored
2468 regiser. */
2469 if (fde
2470 && fde->stack_realign
2471 && src == hard_frame_pointer_rtx)
2472 {
2473 gcc_assert (cfa.reg != HARD_FRAME_POINTER_REGNUM);
2474 cfa_store.offset = 0;
2475 }
2476
2477 if (cfa.reg == STACK_POINTER_REGNUM)
2478 cfa.offset = cfa_store.offset;
2479
2480 offset = -cfa_store.offset;
2481 break;
2482
2483 /* Rule 12 */
2484 /* With an offset. */
2485 case PLUS:
2486 case MINUS:
2487 case LO_SUM:
2488 {
2489 int regno;
2490
2491 gcc_assert (CONST_INT_P (XEXP (XEXP (dest, 0), 1))
2492 && REG_P (XEXP (XEXP (dest, 0), 0)));
2493 offset = INTVAL (XEXP (XEXP (dest, 0), 1));
2494 if (GET_CODE (XEXP (dest, 0)) == MINUS)
2495 offset = -offset;
2496
2497 regno = REGNO (XEXP (XEXP (dest, 0), 0));
2498
2499 if (cfa_store.reg == (unsigned) regno)
2500 offset -= cfa_store.offset;
2501 else
2502 {
2503 gcc_assert (cfa_temp.reg == (unsigned) regno);
2504 offset -= cfa_temp.offset;
2505 }
2506 }
2507 break;
2508
2509 /* Rule 13 */
2510 /* Without an offset. */
2511 case REG:
2512 {
2513 int regno = REGNO (XEXP (dest, 0));
2514
2515 if (cfa_store.reg == (unsigned) regno)
2516 offset = -cfa_store.offset;
2517 else
2518 {
2519 gcc_assert (cfa_temp.reg == (unsigned) regno);
2520 offset = -cfa_temp.offset;
2521 }
2522 }
2523 break;
2524
2525 /* Rule 14 */
2526 case POST_INC:
2527 gcc_assert (cfa_temp.reg
2528 == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
2529 offset = -cfa_temp.offset;
2530 cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
2531 break;
2532
2533 default:
2534 gcc_unreachable ();
2535 }
2536
2537 /* Rule 17 */
2538 /* If the source operand of this MEM operation is not a
2539 register, basically the source is return address. Here
2540 we only care how much stack grew and we don't save it. */
2541 if (!REG_P (src))
2542 break;
2543
2544 if (REGNO (src) != STACK_POINTER_REGNUM
2545 && REGNO (src) != HARD_FRAME_POINTER_REGNUM
2546 && (unsigned) REGNO (src) == cfa.reg)
2547 {
2548 /* We're storing the current CFA reg into the stack. */
2549
2550 if (cfa.offset == 0)
2551 {
2552 /* Rule 19 */
2553 /* If stack is aligned, putting CFA reg into stack means
2554 we can no longer use reg + offset to represent CFA.
2555 Here we use DW_CFA_def_cfa_expression instead. The
2556 result of this expression equals to the original CFA
2557 value. */
2558 if (fde
2559 && fde->stack_realign
2560 && cfa.indirect == 0
2561 && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2562 {
2563 dw_cfa_location cfa_exp;
2564
2565 gcc_assert (fde->drap_reg == cfa.reg);
2566
2567 cfa_exp.indirect = 1;
2568 cfa_exp.reg = HARD_FRAME_POINTER_REGNUM;
2569 cfa_exp.base_offset = offset;
2570 cfa_exp.offset = 0;
2571
2572 fde->drap_reg_saved = 1;
2573
2574 def_cfa_1 (label, &cfa_exp);
2575 break;
2576 }
2577
2578 /* If the source register is exactly the CFA, assume
2579 we're saving SP like any other register; this happens
2580 on the ARM. */
2581 def_cfa_1 (label, &cfa);
2582 queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
2583 break;
2584 }
2585 else
2586 {
2587 /* Otherwise, we'll need to look in the stack to
2588 calculate the CFA. */
2589 rtx x = XEXP (dest, 0);
2590
2591 if (!REG_P (x))
2592 x = XEXP (x, 0);
2593 gcc_assert (REG_P (x));
2594
2595 cfa.reg = REGNO (x);
2596 cfa.base_offset = offset;
2597 cfa.indirect = 1;
2598 def_cfa_1 (label, &cfa);
2599 break;
2600 }
2601 }
2602
2603 def_cfa_1 (label, &cfa);
2604 {
2605 span = targetm.dwarf_register_span (src);
2606
2607 if (!span)
2608 queue_reg_save (label, src, NULL_RTX, offset);
2609 else
2610 {
2611 /* We have a PARALLEL describing where the contents of SRC
2612 live. Queue register saves for each piece of the
2613 PARALLEL. */
2614 int par_index;
2615 int limit;
2616 HOST_WIDE_INT span_offset = offset;
2617
2618 gcc_assert (GET_CODE (span) == PARALLEL);
2619
2620 limit = XVECLEN (span, 0);
2621 for (par_index = 0; par_index < limit; par_index++)
2622 {
2623 rtx elem = XVECEXP (span, 0, par_index);
2624
2625 queue_reg_save (label, elem, NULL_RTX, span_offset);
2626 span_offset += GET_MODE_SIZE (GET_MODE (elem));
2627 }
2628 }
2629 }
2630 break;
2631
2632 default:
2633 gcc_unreachable ();
2634 }
2635 }
2636
2637 /* Record call frame debugging information for INSN, which either
2638 sets SP or FP (adjusting how we calculate the frame address) or saves a
2639 register to the stack. If INSN is NULL_RTX, initialize our state.
2640
2641 If AFTER_P is false, we're being called before the insn is emitted,
2642 otherwise after. Call instructions get invoked twice. */
2643
2644 void
2645 dwarf2out_frame_debug (rtx insn, bool after_p)
2646 {
2647 const char *label;
2648 rtx note, n;
2649 bool handled_one = false;
2650
2651 if (insn == NULL_RTX)
2652 {
2653 size_t i;
2654
2655 /* Flush any queued register saves. */
2656 flush_queued_reg_saves ();
2657
2658 /* Set up state for generating call frame debug info. */
2659 lookup_cfa (&cfa);
2660 gcc_assert (cfa.reg
2661 == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
2662
2663 cfa.reg = STACK_POINTER_REGNUM;
2664 cfa_store = cfa;
2665 cfa_temp.reg = -1;
2666 cfa_temp.offset = 0;
2667
2668 for (i = 0; i < num_regs_saved_in_regs; i++)
2669 {
2670 regs_saved_in_regs[i].orig_reg = NULL_RTX;
2671 regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
2672 }
2673 num_regs_saved_in_regs = 0;
2674
2675 if (barrier_args_size)
2676 {
2677 XDELETEVEC (barrier_args_size);
2678 barrier_args_size = NULL;
2679 }
2680 return;
2681 }
2682
2683 if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
2684 flush_queued_reg_saves ();
2685
2686 if (! RTX_FRAME_RELATED_P (insn))
2687 {
2688 if (!ACCUMULATE_OUTGOING_ARGS)
2689 dwarf2out_stack_adjust (insn, after_p);
2690 return;
2691 }
2692
2693 label = dwarf2out_cfi_label (false);
2694
2695 for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2696 switch (REG_NOTE_KIND (note))
2697 {
2698 case REG_FRAME_RELATED_EXPR:
2699 insn = XEXP (note, 0);
2700 goto found;
2701
2702 case REG_CFA_DEF_CFA:
2703 dwarf2out_frame_debug_def_cfa (XEXP (note, 0), label);
2704 handled_one = true;
2705 break;
2706
2707 case REG_CFA_ADJUST_CFA:
2708 n = XEXP (note, 0);
2709 if (n == NULL)
2710 {
2711 n = PATTERN (insn);
2712 if (GET_CODE (n) == PARALLEL)
2713 n = XVECEXP (n, 0, 0);
2714 }
2715 dwarf2out_frame_debug_adjust_cfa (n, label);
2716 handled_one = true;
2717 break;
2718
2719 case REG_CFA_OFFSET:
2720 n = XEXP (note, 0);
2721 if (n == NULL)
2722 n = single_set (insn);
2723 dwarf2out_frame_debug_cfa_offset (n, label);
2724 handled_one = true;
2725 break;
2726
2727 case REG_CFA_REGISTER:
2728 n = XEXP (note, 0);
2729 if (n == NULL)
2730 {
2731 n = PATTERN (insn);
2732 if (GET_CODE (n) == PARALLEL)
2733 n = XVECEXP (n, 0, 0);
2734 }
2735 dwarf2out_frame_debug_cfa_register (n, label);
2736 handled_one = true;
2737 break;
2738
2739 case REG_CFA_RESTORE:
2740 n = XEXP (note, 0);
2741 if (n == NULL)
2742 {
2743 n = PATTERN (insn);
2744 if (GET_CODE (n) == PARALLEL)
2745 n = XVECEXP (n, 0, 0);
2746 n = XEXP (n, 0);
2747 }
2748 dwarf2out_frame_debug_cfa_restore (n, label);
2749 handled_one = true;
2750 break;
2751
2752 default:
2753 break;
2754 }
2755 if (handled_one)
2756 return;
2757
2758 insn = PATTERN (insn);
2759 found:
2760 dwarf2out_frame_debug_expr (insn, label);
2761 }
2762
2763 /* Determine if we need to save and restore CFI information around this
2764 epilogue. If SIBCALL is true, then this is a sibcall epilogue. If
2765 we do need to save/restore, then emit the save now, and insert a
2766 NOTE_INSN_CFA_RESTORE_STATE at the appropriate place in the stream. */
2767
2768 void
2769 dwarf2out_begin_epilogue (rtx insn)
2770 {
2771 bool saw_frp = false;
2772 rtx i;
2773
2774 /* Scan forward to the return insn, noticing if there are possible
2775 frame related insns. */
2776 for (i = NEXT_INSN (insn); i ; i = NEXT_INSN (i))
2777 {
2778 if (!INSN_P (i))
2779 continue;
2780
2781 /* Look for both regular and sibcalls to end the block. */
2782 if (returnjump_p (i))
2783 break;
2784 if (CALL_P (i) && SIBLING_CALL_P (i))
2785 break;
2786
2787 if (GET_CODE (PATTERN (i)) == SEQUENCE)
2788 {
2789 int idx;
2790 rtx seq = PATTERN (i);
2791
2792 if (returnjump_p (XVECEXP (seq, 0, 0)))
2793 break;
2794 if (CALL_P (XVECEXP (seq, 0, 0))
2795 && SIBLING_CALL_P (XVECEXP (seq, 0, 0)))
2796 break;
2797
2798 for (idx = 0; idx < XVECLEN (seq, 0); idx++)
2799 if (RTX_FRAME_RELATED_P (XVECEXP (seq, 0, idx)))
2800 saw_frp = true;
2801 }
2802
2803 if (RTX_FRAME_RELATED_P (i))
2804 saw_frp = true;
2805 }
2806
2807 /* If the port doesn't emit epilogue unwind info, we don't need a
2808 save/restore pair. */
2809 if (!saw_frp)
2810 return;
2811
2812 /* Otherwise, search forward to see if the return insn was the last
2813 basic block of the function. If so, we don't need save/restore. */
2814 gcc_assert (i != NULL);
2815 i = next_real_insn (i);
2816 if (i == NULL)
2817 return;
2818
2819 /* Insert the restore before that next real insn in the stream, and before
2820 a potential NOTE_INSN_EPILOGUE_BEG -- we do need these notes to be
2821 properly nested. This should be after any label or alignment. This
2822 will be pushed into the CFI stream by the function below. */
2823 while (1)
2824 {
2825 rtx p = PREV_INSN (i);
2826 if (!NOTE_P (p))
2827 break;
2828 if (NOTE_KIND (p) == NOTE_INSN_BASIC_BLOCK)
2829 break;
2830 i = p;
2831 }
2832 emit_note_before (NOTE_INSN_CFA_RESTORE_STATE, i);
2833
2834 emit_cfa_remember = true;
2835
2836 /* And emulate the state save. */
2837 gcc_assert (!cfa_remember.in_use);
2838 cfa_remember = cfa;
2839 cfa_remember.in_use = 1;
2840 }
2841
2842 /* A "subroutine" of dwarf2out_begin_epilogue. Emit the restore required. */
2843
2844 void
2845 dwarf2out_frame_debug_restore_state (void)
2846 {
2847 dw_cfi_ref cfi = new_cfi ();
2848 const char *label = dwarf2out_cfi_label (false);
2849
2850 cfi->dw_cfi_opc = DW_CFA_restore_state;
2851 add_fde_cfi (label, cfi);
2852
2853 gcc_assert (cfa_remember.in_use);
2854 cfa = cfa_remember;
2855 cfa_remember.in_use = 0;
2856 }
2857
2858 #endif
2859
2860 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used. */
2861 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
2862 (enum dwarf_call_frame_info cfi);
2863
2864 static enum dw_cfi_oprnd_type
2865 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
2866 {
2867 switch (cfi)
2868 {
2869 case DW_CFA_nop:
2870 case DW_CFA_GNU_window_save:
2871 case DW_CFA_remember_state:
2872 case DW_CFA_restore_state:
2873 return dw_cfi_oprnd_unused;
2874
2875 case DW_CFA_set_loc:
2876 case DW_CFA_advance_loc1:
2877 case DW_CFA_advance_loc2:
2878 case DW_CFA_advance_loc4:
2879 case DW_CFA_MIPS_advance_loc8:
2880 return dw_cfi_oprnd_addr;
2881
2882 case DW_CFA_offset:
2883 case DW_CFA_offset_extended:
2884 case DW_CFA_def_cfa:
2885 case DW_CFA_offset_extended_sf:
2886 case DW_CFA_def_cfa_sf:
2887 case DW_CFA_restore:
2888 case DW_CFA_restore_extended:
2889 case DW_CFA_undefined:
2890 case DW_CFA_same_value:
2891 case DW_CFA_def_cfa_register:
2892 case DW_CFA_register:
2893 return dw_cfi_oprnd_reg_num;
2894
2895 case DW_CFA_def_cfa_offset:
2896 case DW_CFA_GNU_args_size:
2897 case DW_CFA_def_cfa_offset_sf:
2898 return dw_cfi_oprnd_offset;
2899
2900 case DW_CFA_def_cfa_expression:
2901 case DW_CFA_expression:
2902 return dw_cfi_oprnd_loc;
2903
2904 default:
2905 gcc_unreachable ();
2906 }
2907 }
2908
2909 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */
2910 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
2911 (enum dwarf_call_frame_info cfi);
2912
2913 static enum dw_cfi_oprnd_type
2914 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
2915 {
2916 switch (cfi)
2917 {
2918 case DW_CFA_def_cfa:
2919 case DW_CFA_def_cfa_sf:
2920 case DW_CFA_offset:
2921 case DW_CFA_offset_extended_sf:
2922 case DW_CFA_offset_extended:
2923 return dw_cfi_oprnd_offset;
2924
2925 case DW_CFA_register:
2926 return dw_cfi_oprnd_reg_num;
2927
2928 default:
2929 return dw_cfi_oprnd_unused;
2930 }
2931 }
2932
2933 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2934
2935 /* Switch to eh_frame_section. If we don't have an eh_frame_section,
2936 switch to the data section instead, and write out a synthetic label
2937 for collect2. */
2938
2939 static void
2940 switch_to_eh_frame_section (void)
2941 {
2942 tree label;
2943
2944 #ifdef EH_FRAME_SECTION_NAME
2945 if (eh_frame_section == 0)
2946 {
2947 int flags;
2948
2949 if (EH_TABLES_CAN_BE_READ_ONLY)
2950 {
2951 int fde_encoding;
2952 int per_encoding;
2953 int lsda_encoding;
2954
2955 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2956 /*global=*/0);
2957 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2958 /*global=*/1);
2959 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2960 /*global=*/0);
2961 flags = ((! flag_pic
2962 || ((fde_encoding & 0x70) != DW_EH_PE_absptr
2963 && (fde_encoding & 0x70) != DW_EH_PE_aligned
2964 && (per_encoding & 0x70) != DW_EH_PE_absptr
2965 && (per_encoding & 0x70) != DW_EH_PE_aligned
2966 && (lsda_encoding & 0x70) != DW_EH_PE_absptr
2967 && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
2968 ? 0 : SECTION_WRITE);
2969 }
2970 else
2971 flags = SECTION_WRITE;
2972 eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
2973 }
2974 #endif
2975
2976 if (eh_frame_section)
2977 switch_to_section (eh_frame_section);
2978 else
2979 {
2980 /* We have no special eh_frame section. Put the information in
2981 the data section and emit special labels to guide collect2. */
2982 switch_to_section (data_section);
2983 label = get_file_function_name ("F");
2984 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2985 targetm.asm_out.globalize_label (asm_out_file,
2986 IDENTIFIER_POINTER (label));
2987 ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
2988 }
2989 }
2990
2991 /* Output a Call Frame Information opcode and its operand(s). */
2992
2993 static void
2994 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
2995 {
2996 unsigned long r;
2997 HOST_WIDE_INT off;
2998
2999 if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
3000 dw2_asm_output_data (1, (cfi->dw_cfi_opc
3001 | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
3002 "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
3003 ((unsigned HOST_WIDE_INT)
3004 cfi->dw_cfi_oprnd1.dw_cfi_offset));
3005 else if (cfi->dw_cfi_opc == DW_CFA_offset)
3006 {
3007 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3008 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3009 "DW_CFA_offset, column 0x%lx", r);
3010 off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3011 dw2_asm_output_data_uleb128 (off, NULL);
3012 }
3013 else if (cfi->dw_cfi_opc == DW_CFA_restore)
3014 {
3015 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3016 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3017 "DW_CFA_restore, column 0x%lx", r);
3018 }
3019 else
3020 {
3021 dw2_asm_output_data (1, cfi->dw_cfi_opc,
3022 "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
3023
3024 switch (cfi->dw_cfi_opc)
3025 {
3026 case DW_CFA_set_loc:
3027 if (for_eh)
3028 dw2_asm_output_encoded_addr_rtx (
3029 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
3030 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
3031 false, NULL);
3032 else
3033 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
3034 cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
3035 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3036 break;
3037
3038 case DW_CFA_advance_loc1:
3039 dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3040 fde->dw_fde_current_label, NULL);
3041 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3042 break;
3043
3044 case DW_CFA_advance_loc2:
3045 dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3046 fde->dw_fde_current_label, NULL);
3047 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3048 break;
3049
3050 case DW_CFA_advance_loc4:
3051 dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3052 fde->dw_fde_current_label, NULL);
3053 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3054 break;
3055
3056 case DW_CFA_MIPS_advance_loc8:
3057 dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3058 fde->dw_fde_current_label, NULL);
3059 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3060 break;
3061
3062 case DW_CFA_offset_extended:
3063 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3064 dw2_asm_output_data_uleb128 (r, NULL);
3065 off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3066 dw2_asm_output_data_uleb128 (off, NULL);
3067 break;
3068
3069 case DW_CFA_def_cfa:
3070 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3071 dw2_asm_output_data_uleb128 (r, NULL);
3072 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
3073 break;
3074
3075 case DW_CFA_offset_extended_sf:
3076 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3077 dw2_asm_output_data_uleb128 (r, NULL);
3078 off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3079 dw2_asm_output_data_sleb128 (off, NULL);
3080 break;
3081
3082 case DW_CFA_def_cfa_sf:
3083 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3084 dw2_asm_output_data_uleb128 (r, NULL);
3085 off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3086 dw2_asm_output_data_sleb128 (off, NULL);
3087 break;
3088
3089 case DW_CFA_restore_extended:
3090 case DW_CFA_undefined:
3091 case DW_CFA_same_value:
3092 case DW_CFA_def_cfa_register:
3093 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3094 dw2_asm_output_data_uleb128 (r, NULL);
3095 break;
3096
3097 case DW_CFA_register:
3098 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3099 dw2_asm_output_data_uleb128 (r, NULL);
3100 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
3101 dw2_asm_output_data_uleb128 (r, NULL);
3102 break;
3103
3104 case DW_CFA_def_cfa_offset:
3105 case DW_CFA_GNU_args_size:
3106 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
3107 break;
3108
3109 case DW_CFA_def_cfa_offset_sf:
3110 off = div_data_align (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3111 dw2_asm_output_data_sleb128 (off, NULL);
3112 break;
3113
3114 case DW_CFA_GNU_window_save:
3115 break;
3116
3117 case DW_CFA_def_cfa_expression:
3118 case DW_CFA_expression:
3119 output_cfa_loc (cfi);
3120 break;
3121
3122 case DW_CFA_GNU_negative_offset_extended:
3123 /* Obsoleted by DW_CFA_offset_extended_sf. */
3124 gcc_unreachable ();
3125
3126 default:
3127 break;
3128 }
3129 }
3130 }
3131
3132 /* Similar, but do it via assembler directives instead. */
3133
3134 static void
3135 output_cfi_directive (dw_cfi_ref cfi)
3136 {
3137 unsigned long r, r2;
3138
3139 switch (cfi->dw_cfi_opc)
3140 {
3141 case DW_CFA_advance_loc:
3142 case DW_CFA_advance_loc1:
3143 case DW_CFA_advance_loc2:
3144 case DW_CFA_advance_loc4:
3145 case DW_CFA_MIPS_advance_loc8:
3146 case DW_CFA_set_loc:
3147 /* Should only be created by add_fde_cfi in a code path not
3148 followed when emitting via directives. The assembler is
3149 going to take care of this for us. */
3150 gcc_unreachable ();
3151
3152 case DW_CFA_offset:
3153 case DW_CFA_offset_extended:
3154 case DW_CFA_offset_extended_sf:
3155 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3156 fprintf (asm_out_file, "\t.cfi_offset %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3157 r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3158 break;
3159
3160 case DW_CFA_restore:
3161 case DW_CFA_restore_extended:
3162 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3163 fprintf (asm_out_file, "\t.cfi_restore %lu\n", r);
3164 break;
3165
3166 case DW_CFA_undefined:
3167 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3168 fprintf (asm_out_file, "\t.cfi_undefined %lu\n", r);
3169 break;
3170
3171 case DW_CFA_same_value:
3172 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3173 fprintf (asm_out_file, "\t.cfi_same_value %lu\n", r);
3174 break;
3175
3176 case DW_CFA_def_cfa:
3177 case DW_CFA_def_cfa_sf:
3178 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3179 fprintf (asm_out_file, "\t.cfi_def_cfa %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3180 r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3181 break;
3182
3183 case DW_CFA_def_cfa_register:
3184 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3185 fprintf (asm_out_file, "\t.cfi_def_cfa_register %lu\n", r);
3186 break;
3187
3188 case DW_CFA_register:
3189 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3190 r2 = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, 1);
3191 fprintf (asm_out_file, "\t.cfi_register %lu, %lu\n", r, r2);
3192 break;
3193
3194 case DW_CFA_def_cfa_offset:
3195 case DW_CFA_def_cfa_offset_sf:
3196 fprintf (asm_out_file, "\t.cfi_def_cfa_offset "
3197 HOST_WIDE_INT_PRINT_DEC"\n",
3198 cfi->dw_cfi_oprnd1.dw_cfi_offset);
3199 break;
3200
3201 case DW_CFA_remember_state:
3202 fprintf (asm_out_file, "\t.cfi_remember_state\n");
3203 break;
3204 case DW_CFA_restore_state:
3205 fprintf (asm_out_file, "\t.cfi_restore_state\n");
3206 break;
3207
3208 case DW_CFA_GNU_args_size:
3209 fprintf (asm_out_file, "\t.cfi_escape 0x%x,", DW_CFA_GNU_args_size);
3210 dw2_asm_output_data_uleb128_raw (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3211 if (flag_debug_asm)
3212 fprintf (asm_out_file, "\t%s args_size "HOST_WIDE_INT_PRINT_DEC,
3213 ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
3214 fputc ('\n', asm_out_file);
3215 break;
3216
3217 case DW_CFA_GNU_window_save:
3218 fprintf (asm_out_file, "\t.cfi_window_save\n");
3219 break;
3220
3221 case DW_CFA_def_cfa_expression:
3222 case DW_CFA_expression:
3223 fprintf (asm_out_file, "\t.cfi_escape 0x%x,", cfi->dw_cfi_opc);
3224 output_cfa_loc_raw (cfi);
3225 fputc ('\n', asm_out_file);
3226 break;
3227
3228 default:
3229 gcc_unreachable ();
3230 }
3231 }
3232
3233 DEF_VEC_P (dw_cfi_ref);
3234 DEF_VEC_ALLOC_P (dw_cfi_ref, heap);
3235
3236 /* Output CFIs to bring current FDE to the same state as after executing
3237 CFIs in CFI chain. DO_CFI_ASM is true if .cfi_* directives shall
3238 be emitted, false otherwise. If it is false, FDE and FOR_EH are the
3239 other arguments to pass to output_cfi. */
3240
3241 static void
3242 output_cfis (dw_cfi_ref cfi, bool do_cfi_asm, dw_fde_ref fde, bool for_eh)
3243 {
3244 struct dw_cfi_struct cfi_buf;
3245 dw_cfi_ref cfi2;
3246 dw_cfi_ref cfi_args_size = NULL, cfi_cfa = NULL, cfi_cfa_offset = NULL;
3247 VEC (dw_cfi_ref, heap) *regs = VEC_alloc (dw_cfi_ref, heap, 32);
3248 unsigned int len, idx;
3249
3250 for (;; cfi = cfi->dw_cfi_next)
3251 switch (cfi ? cfi->dw_cfi_opc : DW_CFA_nop)
3252 {
3253 case DW_CFA_advance_loc:
3254 case DW_CFA_advance_loc1:
3255 case DW_CFA_advance_loc2:
3256 case DW_CFA_advance_loc4:
3257 case DW_CFA_MIPS_advance_loc8:
3258 case DW_CFA_set_loc:
3259 /* All advances should be ignored. */
3260 break;
3261 case DW_CFA_remember_state:
3262 {
3263 dw_cfi_ref args_size = cfi_args_size;
3264
3265 /* Skip everything between .cfi_remember_state and
3266 .cfi_restore_state. */
3267 for (cfi2 = cfi->dw_cfi_next; cfi2; cfi2 = cfi2->dw_cfi_next)
3268 if (cfi2->dw_cfi_opc == DW_CFA_restore_state)
3269 break;
3270 else if (cfi2->dw_cfi_opc == DW_CFA_GNU_args_size)
3271 args_size = cfi2;
3272 else
3273 gcc_assert (cfi2->dw_cfi_opc != DW_CFA_remember_state);
3274
3275 if (cfi2 == NULL)
3276 goto flush_all;
3277 else
3278 {
3279 cfi = cfi2;
3280 cfi_args_size = args_size;
3281 }
3282 break;
3283 }
3284 case DW_CFA_GNU_args_size:
3285 cfi_args_size = cfi;
3286 break;
3287 case DW_CFA_GNU_window_save:
3288 goto flush_all;
3289 case DW_CFA_offset:
3290 case DW_CFA_offset_extended:
3291 case DW_CFA_offset_extended_sf:
3292 case DW_CFA_restore:
3293 case DW_CFA_restore_extended:
3294 case DW_CFA_undefined:
3295 case DW_CFA_same_value:
3296 case DW_CFA_register:
3297 case DW_CFA_val_offset:
3298 case DW_CFA_val_offset_sf:
3299 case DW_CFA_expression:
3300 case DW_CFA_val_expression:
3301 case DW_CFA_GNU_negative_offset_extended:
3302 if (VEC_length (dw_cfi_ref, regs) <= cfi->dw_cfi_oprnd1.dw_cfi_reg_num)
3303 VEC_safe_grow_cleared (dw_cfi_ref, heap, regs,
3304 cfi->dw_cfi_oprnd1.dw_cfi_reg_num + 1);
3305 VEC_replace (dw_cfi_ref, regs, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, cfi);
3306 break;
3307 case DW_CFA_def_cfa:
3308 case DW_CFA_def_cfa_sf:
3309 case DW_CFA_def_cfa_expression:
3310 cfi_cfa = cfi;
3311 cfi_cfa_offset = cfi;
3312 break;
3313 case DW_CFA_def_cfa_register:
3314 cfi_cfa = cfi;
3315 break;
3316 case DW_CFA_def_cfa_offset:
3317 case DW_CFA_def_cfa_offset_sf:
3318 cfi_cfa_offset = cfi;
3319 break;
3320 case DW_CFA_nop:
3321 gcc_assert (cfi == NULL);
3322 flush_all:
3323 len = VEC_length (dw_cfi_ref, regs);
3324 for (idx = 0; idx < len; idx++)
3325 {
3326 cfi2 = VEC_replace (dw_cfi_ref, regs, idx, NULL);
3327 if (cfi2 != NULL
3328 && cfi2->dw_cfi_opc != DW_CFA_restore
3329 && cfi2->dw_cfi_opc != DW_CFA_restore_extended)
3330 {
3331 if (do_cfi_asm)
3332 output_cfi_directive (cfi2);
3333 else
3334 output_cfi (cfi2, fde, for_eh);
3335 }
3336 }
3337 if (cfi_cfa && cfi_cfa_offset && cfi_cfa_offset != cfi_cfa)
3338 {
3339 gcc_assert (cfi_cfa->dw_cfi_opc != DW_CFA_def_cfa_expression);
3340 cfi_buf = *cfi_cfa;
3341 switch (cfi_cfa_offset->dw_cfi_opc)
3342 {
3343 case DW_CFA_def_cfa_offset:
3344 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa;
3345 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3346 break;
3347 case DW_CFA_def_cfa_offset_sf:
3348 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa_sf;
3349 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3350 break;
3351 case DW_CFA_def_cfa:
3352 case DW_CFA_def_cfa_sf:
3353 cfi_buf.dw_cfi_opc = cfi_cfa_offset->dw_cfi_opc;
3354 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd2;
3355 break;
3356 default:
3357 gcc_unreachable ();
3358 }
3359 cfi_cfa = &cfi_buf;
3360 }
3361 else if (cfi_cfa_offset)
3362 cfi_cfa = cfi_cfa_offset;
3363 if (cfi_cfa)
3364 {
3365 if (do_cfi_asm)
3366 output_cfi_directive (cfi_cfa);
3367 else
3368 output_cfi (cfi_cfa, fde, for_eh);
3369 }
3370 cfi_cfa = NULL;
3371 cfi_cfa_offset = NULL;
3372 if (cfi_args_size
3373 && cfi_args_size->dw_cfi_oprnd1.dw_cfi_offset)
3374 {
3375 if (do_cfi_asm)
3376 output_cfi_directive (cfi_args_size);
3377 else
3378 output_cfi (cfi_args_size, fde, for_eh);
3379 }
3380 cfi_args_size = NULL;
3381 if (cfi == NULL)
3382 {
3383 VEC_free (dw_cfi_ref, heap, regs);
3384 return;
3385 }
3386 else if (do_cfi_asm)
3387 output_cfi_directive (cfi);
3388 else
3389 output_cfi (cfi, fde, for_eh);
3390 break;
3391 default:
3392 gcc_unreachable ();
3393 }
3394 }
3395
3396 /* Output one FDE. */
3397
3398 static void
3399 output_fde (dw_fde_ref fde, bool for_eh, bool second,
3400 char *section_start_label, int fde_encoding, char *augmentation,
3401 bool any_lsda_needed, int lsda_encoding)
3402 {
3403 const char *begin, *end;
3404 static unsigned int j;
3405 char l1[20], l2[20];
3406 dw_cfi_ref cfi;
3407
3408 targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh,
3409 /* empty */ 0);
3410 targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
3411 for_eh + j);
3412 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
3413 ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
3414 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3415 dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
3416 " indicating 64-bit DWARF extension");
3417 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3418 "FDE Length");
3419 ASM_OUTPUT_LABEL (asm_out_file, l1);
3420
3421 if (for_eh)
3422 dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
3423 else
3424 dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
3425 debug_frame_section, "FDE CIE offset");
3426
3427 if (!fde->dw_fde_switched_sections)
3428 {
3429 begin = fde->dw_fde_begin;
3430 end = fde->dw_fde_end;
3431 }
3432 else
3433 {
3434 /* For the first section, prefer dw_fde_begin over
3435 dw_fde_{hot,cold}_section_label, as the latter
3436 might be separated from the real start of the
3437 function by alignment padding. */
3438 if (!second)
3439 begin = fde->dw_fde_begin;
3440 else if (fde->dw_fde_switched_cold_to_hot)
3441 begin = fde->dw_fde_hot_section_label;
3442 else
3443 begin = fde->dw_fde_unlikely_section_label;
3444 if (second ^ fde->dw_fde_switched_cold_to_hot)
3445 end = fde->dw_fde_unlikely_section_end_label;
3446 else
3447 end = fde->dw_fde_hot_section_end_label;
3448 }
3449
3450 if (for_eh)
3451 {
3452 rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
3453 SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
3454 dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
3455 "FDE initial location");
3456 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3457 end, begin, "FDE address range");
3458 }
3459 else
3460 {
3461 dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
3462 dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
3463 }
3464
3465 if (augmentation[0])
3466 {
3467 if (any_lsda_needed)
3468 {
3469 int size = size_of_encoded_value (lsda_encoding);
3470
3471 if (lsda_encoding == DW_EH_PE_aligned)
3472 {
3473 int offset = ( 4 /* Length */
3474 + 4 /* CIE offset */
3475 + 2 * size_of_encoded_value (fde_encoding)
3476 + 1 /* Augmentation size */ );
3477 int pad = -offset & (PTR_SIZE - 1);
3478
3479 size += pad;
3480 gcc_assert (size_of_uleb128 (size) == 1);
3481 }
3482
3483 dw2_asm_output_data_uleb128 (size, "Augmentation size");
3484
3485 if (fde->uses_eh_lsda)
3486 {
3487 ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
3488 fde->funcdef_number);
3489 dw2_asm_output_encoded_addr_rtx (lsda_encoding,
3490 gen_rtx_SYMBOL_REF (Pmode, l1),
3491 false,
3492 "Language Specific Data Area");
3493 }
3494 else
3495 {
3496 if (lsda_encoding == DW_EH_PE_aligned)
3497 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3498 dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
3499 "Language Specific Data Area (none)");
3500 }
3501 }
3502 else
3503 dw2_asm_output_data_uleb128 (0, "Augmentation size");
3504 }
3505
3506 /* Loop through the Call Frame Instructions associated with
3507 this FDE. */
3508 fde->dw_fde_current_label = begin;
3509 if (!fde->dw_fde_switched_sections)
3510 for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3511 output_cfi (cfi, fde, for_eh);
3512 else if (!second)
3513 {
3514 if (fde->dw_fde_switch_cfi)
3515 for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3516 {
3517 output_cfi (cfi, fde, for_eh);
3518 if (cfi == fde->dw_fde_switch_cfi)
3519 break;
3520 }
3521 }
3522 else
3523 {
3524 dw_cfi_ref cfi_next = fde->dw_fde_cfi;
3525
3526 if (fde->dw_fde_switch_cfi)
3527 {
3528 cfi_next = fde->dw_fde_switch_cfi->dw_cfi_next;
3529 fde->dw_fde_switch_cfi->dw_cfi_next = NULL;
3530 output_cfis (fde->dw_fde_cfi, false, fde, for_eh);
3531 fde->dw_fde_switch_cfi->dw_cfi_next = cfi_next;
3532 }
3533 for (cfi = cfi_next; cfi != NULL; cfi = cfi->dw_cfi_next)
3534 output_cfi (cfi, fde, for_eh);
3535 }
3536
3537 /* Pad the FDE out to an address sized boundary. */
3538 ASM_OUTPUT_ALIGN (asm_out_file,
3539 floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
3540 ASM_OUTPUT_LABEL (asm_out_file, l2);
3541
3542 j += 2;
3543 }
3544
3545
3546 /* Output the call frame information used to record information
3547 that relates to calculating the frame pointer, and records the
3548 location of saved registers. */
3549
3550 static void
3551 output_call_frame_info (int for_eh)
3552 {
3553 unsigned int i;
3554 dw_fde_ref fde;
3555 dw_cfi_ref cfi;
3556 char l1[20], l2[20], section_start_label[20];
3557 bool any_lsda_needed = false;
3558 char augmentation[6];
3559 int augmentation_size;
3560 int fde_encoding = DW_EH_PE_absptr;
3561 int per_encoding = DW_EH_PE_absptr;
3562 int lsda_encoding = DW_EH_PE_absptr;
3563 int return_reg;
3564 int dw_cie_version;
3565
3566 /* Don't emit a CIE if there won't be any FDEs. */
3567 if (fde_table_in_use == 0)
3568 return;
3569
3570 /* Nothing to do if the assembler's doing it all. */
3571 if (dwarf2out_do_cfi_asm ())
3572 return;
3573
3574 /* If we make FDEs linkonce, we may have to emit an empty label for
3575 an FDE that wouldn't otherwise be emitted. We want to avoid
3576 having an FDE kept around when the function it refers to is
3577 discarded. Example where this matters: a primary function
3578 template in C++ requires EH information, but an explicit
3579 specialization doesn't. */
3580 if (TARGET_USES_WEAK_UNWIND_INFO
3581 && ! flag_asynchronous_unwind_tables
3582 && flag_exceptions
3583 && for_eh)
3584 for (i = 0; i < fde_table_in_use; i++)
3585 if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
3586 && !fde_table[i].uses_eh_lsda
3587 && ! DECL_WEAK (fde_table[i].decl))
3588 targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
3589 for_eh, /* empty */ 1);
3590
3591 /* If we don't have any functions we'll want to unwind out of, don't
3592 emit any EH unwind information. Note that if exceptions aren't
3593 enabled, we won't have collected nothrow information, and if we
3594 asked for asynchronous tables, we always want this info. */
3595 if (for_eh)
3596 {
3597 bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
3598
3599 for (i = 0; i < fde_table_in_use; i++)
3600 if (fde_table[i].uses_eh_lsda)
3601 any_eh_needed = any_lsda_needed = true;
3602 else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3603 any_eh_needed = true;
3604 else if (! fde_table[i].nothrow
3605 && ! fde_table[i].all_throwers_are_sibcalls)
3606 any_eh_needed = true;
3607
3608 if (! any_eh_needed)
3609 return;
3610 }
3611
3612 /* We're going to be generating comments, so turn on app. */
3613 if (flag_debug_asm)
3614 app_enable ();
3615
3616 if (for_eh)
3617 switch_to_eh_frame_section ();
3618 else
3619 {
3620 if (!debug_frame_section)
3621 debug_frame_section = get_section (DEBUG_FRAME_SECTION,
3622 SECTION_DEBUG, NULL);
3623 switch_to_section (debug_frame_section);
3624 }
3625
3626 ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
3627 ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
3628
3629 /* Output the CIE. */
3630 ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
3631 ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
3632 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3633 dw2_asm_output_data (4, 0xffffffff,
3634 "Initial length escape value indicating 64-bit DWARF extension");
3635 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3636 "Length of Common Information Entry");
3637 ASM_OUTPUT_LABEL (asm_out_file, l1);
3638
3639 /* Now that the CIE pointer is PC-relative for EH,
3640 use 0 to identify the CIE. */
3641 dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
3642 (for_eh ? 0 : DWARF_CIE_ID),
3643 "CIE Identifier Tag");
3644
3645 /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
3646 use CIE version 1, unless that would produce incorrect results
3647 due to overflowing the return register column. */
3648 return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
3649 dw_cie_version = 1;
3650 if (return_reg >= 256 || dwarf_version > 2)
3651 dw_cie_version = 3;
3652 dw2_asm_output_data (1, dw_cie_version, "CIE Version");
3653
3654 augmentation[0] = 0;
3655 augmentation_size = 0;
3656 if (for_eh)
3657 {
3658 char *p;
3659
3660 /* Augmentation:
3661 z Indicates that a uleb128 is present to size the
3662 augmentation section.
3663 L Indicates the encoding (and thus presence) of
3664 an LSDA pointer in the FDE augmentation.
3665 R Indicates a non-default pointer encoding for
3666 FDE code pointers.
3667 P Indicates the presence of an encoding + language
3668 personality routine in the CIE augmentation. */
3669
3670 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
3671 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3672 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3673
3674 p = augmentation + 1;
3675 if (eh_personality_libfunc)
3676 {
3677 *p++ = 'P';
3678 augmentation_size += 1 + size_of_encoded_value (per_encoding);
3679 assemble_external_libcall (eh_personality_libfunc);
3680 }
3681 if (any_lsda_needed)
3682 {
3683 *p++ = 'L';
3684 augmentation_size += 1;
3685 }
3686 if (fde_encoding != DW_EH_PE_absptr)
3687 {
3688 *p++ = 'R';
3689 augmentation_size += 1;
3690 }
3691 if (p > augmentation + 1)
3692 {
3693 augmentation[0] = 'z';
3694 *p = '\0';
3695 }
3696
3697 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */
3698 if (eh_personality_libfunc && per_encoding == DW_EH_PE_aligned)
3699 {
3700 int offset = ( 4 /* Length */
3701 + 4 /* CIE Id */
3702 + 1 /* CIE version */
3703 + strlen (augmentation) + 1 /* Augmentation */
3704 + size_of_uleb128 (1) /* Code alignment */
3705 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
3706 + 1 /* RA column */
3707 + 1 /* Augmentation size */
3708 + 1 /* Personality encoding */ );
3709 int pad = -offset & (PTR_SIZE - 1);
3710
3711 augmentation_size += pad;
3712
3713 /* Augmentations should be small, so there's scarce need to
3714 iterate for a solution. Die if we exceed one uleb128 byte. */
3715 gcc_assert (size_of_uleb128 (augmentation_size) == 1);
3716 }
3717 }
3718
3719 dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
3720 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
3721 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
3722 "CIE Data Alignment Factor");
3723
3724 if (dw_cie_version == 1)
3725 dw2_asm_output_data (1, return_reg, "CIE RA Column");
3726 else
3727 dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
3728
3729 if (augmentation[0])
3730 {
3731 dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
3732 if (eh_personality_libfunc)
3733 {
3734 dw2_asm_output_data (1, per_encoding, "Personality (%s)",
3735 eh_data_format_name (per_encoding));
3736 dw2_asm_output_encoded_addr_rtx (per_encoding,
3737 eh_personality_libfunc,
3738 true, NULL);
3739 }
3740
3741 if (any_lsda_needed)
3742 dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
3743 eh_data_format_name (lsda_encoding));
3744
3745 if (fde_encoding != DW_EH_PE_absptr)
3746 dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
3747 eh_data_format_name (fde_encoding));
3748 }
3749
3750 for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
3751 output_cfi (cfi, NULL, for_eh);
3752
3753 /* Pad the CIE out to an address sized boundary. */
3754 ASM_OUTPUT_ALIGN (asm_out_file,
3755 floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
3756 ASM_OUTPUT_LABEL (asm_out_file, l2);
3757
3758 /* Loop through all of the FDE's. */
3759 for (i = 0; i < fde_table_in_use; i++)
3760 {
3761 unsigned int k;
3762 fde = &fde_table[i];
3763
3764 /* Don't emit EH unwind info for leaf functions that don't need it. */
3765 if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
3766 && (fde->nothrow || fde->all_throwers_are_sibcalls)
3767 && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3768 && !fde->uses_eh_lsda)
3769 continue;
3770
3771 for (k = 0; k < (fde->dw_fde_switched_sections ? 2 : 1); k++)
3772 output_fde (fde, for_eh, k, section_start_label, fde_encoding,
3773 augmentation, any_lsda_needed, lsda_encoding);
3774 }
3775
3776 if (for_eh && targetm.terminate_dw2_eh_frame_info)
3777 dw2_asm_output_data (4, 0, "End of Table");
3778 #ifdef MIPS_DEBUGGING_INFO
3779 /* Work around Irix 6 assembler bug whereby labels at the end of a section
3780 get a value of 0. Putting .align 0 after the label fixes it. */
3781 ASM_OUTPUT_ALIGN (asm_out_file, 0);
3782 #endif
3783
3784 /* Turn off app to make assembly quicker. */
3785 if (flag_debug_asm)
3786 app_disable ();
3787 }
3788
3789 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed. */
3790
3791 static void
3792 dwarf2out_do_cfi_startproc (bool second)
3793 {
3794 int enc;
3795 rtx ref;
3796
3797 fprintf (asm_out_file, "\t.cfi_startproc\n");
3798
3799 if (eh_personality_libfunc)
3800 {
3801 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3802 ref = eh_personality_libfunc;
3803
3804 /* ??? The GAS support isn't entirely consistent. We have to
3805 handle indirect support ourselves, but PC-relative is done
3806 in the assembler. Further, the assembler can't handle any
3807 of the weirder relocation types. */
3808 if (enc & DW_EH_PE_indirect)
3809 ref = dw2_force_const_mem (ref, true);
3810
3811 fprintf (asm_out_file, "\t.cfi_personality 0x%x,", enc);
3812 output_addr_const (asm_out_file, ref);
3813 fputc ('\n', asm_out_file);
3814 }
3815
3816 if (crtl->uses_eh_lsda)
3817 {
3818 char lab[20];
3819
3820 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3821 ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
3822 current_function_funcdef_no);
3823 ref = gen_rtx_SYMBOL_REF (Pmode, lab);
3824 SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
3825
3826 if (enc & DW_EH_PE_indirect)
3827 ref = dw2_force_const_mem (ref, true);
3828
3829 fprintf (asm_out_file, "\t.cfi_lsda 0x%x,", enc);
3830 output_addr_const (asm_out_file, ref);
3831 fputc ('\n', asm_out_file);
3832 }
3833 }
3834
3835 /* Output a marker (i.e. a label) for the beginning of a function, before
3836 the prologue. */
3837
3838 void
3839 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
3840 const char *file ATTRIBUTE_UNUSED)
3841 {
3842 char label[MAX_ARTIFICIAL_LABEL_BYTES];
3843 char * dup_label;
3844 dw_fde_ref fde;
3845 section *fnsec;
3846
3847 current_function_func_begin_label = NULL;
3848
3849 #ifdef TARGET_UNWIND_INFO
3850 /* ??? current_function_func_begin_label is also used by except.c
3851 for call-site information. We must emit this label if it might
3852 be used. */
3853 if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
3854 && ! dwarf2out_do_frame ())
3855 return;
3856 #else
3857 if (! dwarf2out_do_frame ())
3858 return;
3859 #endif
3860
3861 fnsec = function_section (current_function_decl);
3862 switch_to_section (fnsec);
3863 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
3864 current_function_funcdef_no);
3865 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
3866 current_function_funcdef_no);
3867 dup_label = xstrdup (label);
3868 current_function_func_begin_label = dup_label;
3869
3870 #ifdef TARGET_UNWIND_INFO
3871 /* We can elide the fde allocation if we're not emitting debug info. */
3872 if (! dwarf2out_do_frame ())
3873 return;
3874 #endif
3875
3876 /* Expand the fde table if necessary. */
3877 if (fde_table_in_use == fde_table_allocated)
3878 {
3879 fde_table_allocated += FDE_TABLE_INCREMENT;
3880 fde_table = GGC_RESIZEVEC (dw_fde_node, fde_table, fde_table_allocated);
3881 memset (fde_table + fde_table_in_use, 0,
3882 FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
3883 }
3884
3885 /* Record the FDE associated with this function. */
3886 current_funcdef_fde = fde_table_in_use;
3887
3888 /* Add the new FDE at the end of the fde_table. */
3889 fde = &fde_table[fde_table_in_use++];
3890 fde->decl = current_function_decl;
3891 fde->dw_fde_begin = dup_label;
3892 fde->dw_fde_current_label = dup_label;
3893 fde->dw_fde_hot_section_label = NULL;
3894 fde->dw_fde_hot_section_end_label = NULL;
3895 fde->dw_fde_unlikely_section_label = NULL;
3896 fde->dw_fde_unlikely_section_end_label = NULL;
3897 fde->dw_fde_switched_sections = 0;
3898 fde->dw_fde_switched_cold_to_hot = 0;
3899 fde->dw_fde_end = NULL;
3900 fde->dw_fde_cfi = NULL;
3901 fde->dw_fde_switch_cfi = NULL;
3902 fde->funcdef_number = current_function_funcdef_no;
3903 fde->nothrow = crtl->nothrow;
3904 fde->uses_eh_lsda = crtl->uses_eh_lsda;
3905 fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
3906 fde->drap_reg = INVALID_REGNUM;
3907 fde->vdrap_reg = INVALID_REGNUM;
3908 if (flag_reorder_blocks_and_partition)
3909 {
3910 section *unlikelysec;
3911 if (first_function_block_is_cold)
3912 fde->in_std_section = 1;
3913 else
3914 fde->in_std_section
3915 = (fnsec == text_section
3916 || (cold_text_section && fnsec == cold_text_section));
3917 unlikelysec = unlikely_text_section ();
3918 fde->cold_in_std_section
3919 = (unlikelysec == text_section
3920 || (cold_text_section && unlikelysec == cold_text_section));
3921 }
3922 else
3923 {
3924 fde->in_std_section
3925 = (fnsec == text_section
3926 || (cold_text_section && fnsec == cold_text_section));
3927 fde->cold_in_std_section = 0;
3928 }
3929
3930 args_size = old_args_size = 0;
3931
3932 /* We only want to output line number information for the genuine dwarf2
3933 prologue case, not the eh frame case. */
3934 #ifdef DWARF2_DEBUGGING_INFO
3935 if (file)
3936 dwarf2out_source_line (line, file, 0, true);
3937 #endif
3938
3939 if (dwarf2out_do_cfi_asm ())
3940 dwarf2out_do_cfi_startproc (false);
3941 }
3942
3943 /* Output a marker (i.e. a label) for the absolute end of the generated code
3944 for a function definition. This gets called *after* the epilogue code has
3945 been generated. */
3946
3947 void
3948 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
3949 const char *file ATTRIBUTE_UNUSED)
3950 {
3951 dw_fde_ref fde;
3952 char label[MAX_ARTIFICIAL_LABEL_BYTES];
3953
3954 #ifdef DWARF2_DEBUGGING_INFO
3955 last_var_location_insn = NULL_RTX;
3956 #endif
3957
3958 if (dwarf2out_do_cfi_asm ())
3959 fprintf (asm_out_file, "\t.cfi_endproc\n");
3960
3961 /* Output a label to mark the endpoint of the code generated for this
3962 function. */
3963 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
3964 current_function_funcdef_no);
3965 ASM_OUTPUT_LABEL (asm_out_file, label);
3966 fde = current_fde ();
3967 gcc_assert (fde != NULL);
3968 fde->dw_fde_end = xstrdup (label);
3969 }
3970
3971 void
3972 dwarf2out_frame_init (void)
3973 {
3974 /* Allocate the initial hunk of the fde_table. */
3975 fde_table = GGC_CNEWVEC (dw_fde_node, FDE_TABLE_INCREMENT);
3976 fde_table_allocated = FDE_TABLE_INCREMENT;
3977 fde_table_in_use = 0;
3978
3979 /* Generate the CFA instructions common to all FDE's. Do it now for the
3980 sake of lookup_cfa. */
3981
3982 /* On entry, the Canonical Frame Address is at SP. */
3983 dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
3984
3985 #ifdef DWARF2_UNWIND_INFO
3986 if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
3987 initial_return_save (INCOMING_RETURN_ADDR_RTX);
3988 #endif
3989 }
3990
3991 void
3992 dwarf2out_frame_finish (void)
3993 {
3994 /* Output call frame information. */
3995 if (DWARF2_FRAME_INFO)
3996 output_call_frame_info (0);
3997
3998 #ifndef TARGET_UNWIND_INFO
3999 /* Output another copy for the unwinder. */
4000 if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
4001 output_call_frame_info (1);
4002 #endif
4003 }
4004
4005 /* Note that the current function section is being used for code. */
4006
4007 static void
4008 dwarf2out_note_section_used (void)
4009 {
4010 section *sec = current_function_section ();
4011 if (sec == text_section)
4012 text_section_used = true;
4013 else if (sec == cold_text_section)
4014 cold_text_section_used = true;
4015 }
4016
4017 void
4018 dwarf2out_switch_text_section (void)
4019 {
4020 dw_fde_ref fde = current_fde ();
4021
4022 gcc_assert (cfun && fde && !fde->dw_fde_switched_sections);
4023
4024 fde->dw_fde_switched_sections = 1;
4025 fde->dw_fde_switched_cold_to_hot = !in_cold_section_p;
4026
4027 fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
4028 fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
4029 fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
4030 fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
4031 have_multiple_function_sections = true;
4032
4033 /* Reset the current label on switching text sections, so that we
4034 don't attempt to advance_loc4 between labels in different sections. */
4035 fde->dw_fde_current_label = NULL;
4036
4037 /* There is no need to mark used sections when not debugging. */
4038 if (cold_text_section != NULL)
4039 dwarf2out_note_section_used ();
4040
4041 if (dwarf2out_do_cfi_asm ())
4042 fprintf (asm_out_file, "\t.cfi_endproc\n");
4043
4044 /* Now do the real section switch. */
4045 switch_to_section (current_function_section ());
4046
4047 if (dwarf2out_do_cfi_asm ())
4048 {
4049 dwarf2out_do_cfi_startproc (true);
4050 /* As this is a different FDE, insert all current CFI instructions
4051 again. */
4052 output_cfis (fde->dw_fde_cfi, true, fde, true);
4053 }
4054 else
4055 {
4056 dw_cfi_ref cfi = fde->dw_fde_cfi;
4057
4058 cfi = fde->dw_fde_cfi;
4059 if (cfi)
4060 while (cfi->dw_cfi_next != NULL)
4061 cfi = cfi->dw_cfi_next;
4062 fde->dw_fde_switch_cfi = cfi;
4063 }
4064 }
4065 #endif
4066 \f
4067 /* And now, the subset of the debugging information support code necessary
4068 for emitting location expressions. */
4069
4070 /* Data about a single source file. */
4071 struct GTY(()) dwarf_file_data {
4072 const char * filename;
4073 int emitted_number;
4074 };
4075
4076 typedef struct dw_val_struct *dw_val_ref;
4077 typedef struct die_struct *dw_die_ref;
4078 typedef const struct die_struct *const_dw_die_ref;
4079 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
4080 typedef struct dw_loc_list_struct *dw_loc_list_ref;
4081
4082 typedef struct GTY(()) deferred_locations_struct
4083 {
4084 tree variable;
4085 dw_die_ref die;
4086 } deferred_locations;
4087
4088 DEF_VEC_O(deferred_locations);
4089 DEF_VEC_ALLOC_O(deferred_locations,gc);
4090
4091 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
4092
4093 /* Each DIE may have a series of attribute/value pairs. Values
4094 can take on several forms. The forms that are used in this
4095 implementation are listed below. */
4096
4097 enum dw_val_class
4098 {
4099 dw_val_class_addr,
4100 dw_val_class_offset,
4101 dw_val_class_loc,
4102 dw_val_class_loc_list,
4103 dw_val_class_range_list,
4104 dw_val_class_const,
4105 dw_val_class_unsigned_const,
4106 dw_val_class_long_long,
4107 dw_val_class_vec,
4108 dw_val_class_flag,
4109 dw_val_class_die_ref,
4110 dw_val_class_fde_ref,
4111 dw_val_class_lbl_id,
4112 dw_val_class_lineptr,
4113 dw_val_class_str,
4114 dw_val_class_macptr,
4115 dw_val_class_file
4116 };
4117
4118 /* Describe a double word constant value. */
4119 /* ??? Every instance of long_long in the code really means CONST_DOUBLE. */
4120
4121 typedef struct GTY(()) dw_long_long_struct {
4122 unsigned long hi;
4123 unsigned long low;
4124 }
4125 dw_long_long_const;
4126
4127 /* Describe a floating point constant value, or a vector constant value. */
4128
4129 typedef struct GTY(()) dw_vec_struct {
4130 unsigned char * GTY((length ("%h.length"))) array;
4131 unsigned length;
4132 unsigned elt_size;
4133 }
4134 dw_vec_const;
4135
4136 /* The dw_val_node describes an attribute's value, as it is
4137 represented internally. */
4138
4139 typedef struct GTY(()) dw_val_struct {
4140 enum dw_val_class val_class;
4141 union dw_val_struct_union
4142 {
4143 rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
4144 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
4145 dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
4146 dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
4147 HOST_WIDE_INT GTY ((default)) val_int;
4148 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
4149 dw_long_long_const GTY ((tag ("dw_val_class_long_long"))) val_long_long;
4150 dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
4151 struct dw_val_die_union
4152 {
4153 dw_die_ref die;
4154 int external;
4155 } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
4156 unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
4157 struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
4158 char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
4159 unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
4160 struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
4161 }
4162 GTY ((desc ("%1.val_class"))) v;
4163 }
4164 dw_val_node;
4165
4166 /* Locations in memory are described using a sequence of stack machine
4167 operations. */
4168
4169 typedef struct GTY(()) dw_loc_descr_struct {
4170 dw_loc_descr_ref dw_loc_next;
4171 ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
4172 /* Used to distinguish DW_OP_addr with a direct symbol relocation
4173 from DW_OP_addr with a dtp-relative symbol relocation. */
4174 unsigned int dtprel : 1;
4175 int dw_loc_addr;
4176 dw_val_node dw_loc_oprnd1;
4177 dw_val_node dw_loc_oprnd2;
4178 }
4179 dw_loc_descr_node;
4180
4181 /* Location lists are ranges + location descriptions for that range,
4182 so you can track variables that are in different places over
4183 their entire life. */
4184 typedef struct GTY(()) dw_loc_list_struct {
4185 dw_loc_list_ref dw_loc_next;
4186 const char *begin; /* Label for begin address of range */
4187 const char *end; /* Label for end address of range */
4188 char *ll_symbol; /* Label for beginning of location list.
4189 Only on head of list */
4190 const char *section; /* Section this loclist is relative to */
4191 dw_loc_descr_ref expr;
4192 } dw_loc_list_node;
4193
4194 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
4195
4196 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4197
4198 /* Convert a DWARF stack opcode into its string name. */
4199
4200 static const char *
4201 dwarf_stack_op_name (unsigned int op)
4202 {
4203 switch (op)
4204 {
4205 case DW_OP_addr:
4206 return "DW_OP_addr";
4207 case DW_OP_deref:
4208 return "DW_OP_deref";
4209 case DW_OP_const1u:
4210 return "DW_OP_const1u";
4211 case DW_OP_const1s:
4212 return "DW_OP_const1s";
4213 case DW_OP_const2u:
4214 return "DW_OP_const2u";
4215 case DW_OP_const2s:
4216 return "DW_OP_const2s";
4217 case DW_OP_const4u:
4218 return "DW_OP_const4u";
4219 case DW_OP_const4s:
4220 return "DW_OP_const4s";
4221 case DW_OP_const8u:
4222 return "DW_OP_const8u";
4223 case DW_OP_const8s:
4224 return "DW_OP_const8s";
4225 case DW_OP_constu:
4226 return "DW_OP_constu";
4227 case DW_OP_consts:
4228 return "DW_OP_consts";
4229 case DW_OP_dup:
4230 return "DW_OP_dup";
4231 case DW_OP_drop:
4232 return "DW_OP_drop";
4233 case DW_OP_over:
4234 return "DW_OP_over";
4235 case DW_OP_pick:
4236 return "DW_OP_pick";
4237 case DW_OP_swap:
4238 return "DW_OP_swap";
4239 case DW_OP_rot:
4240 return "DW_OP_rot";
4241 case DW_OP_xderef:
4242 return "DW_OP_xderef";
4243 case DW_OP_abs:
4244 return "DW_OP_abs";
4245 case DW_OP_and:
4246 return "DW_OP_and";
4247 case DW_OP_div:
4248 return "DW_OP_div";
4249 case DW_OP_minus:
4250 return "DW_OP_minus";
4251 case DW_OP_mod:
4252 return "DW_OP_mod";
4253 case DW_OP_mul:
4254 return "DW_OP_mul";
4255 case DW_OP_neg:
4256 return "DW_OP_neg";
4257 case DW_OP_not:
4258 return "DW_OP_not";
4259 case DW_OP_or:
4260 return "DW_OP_or";
4261 case DW_OP_plus:
4262 return "DW_OP_plus";
4263 case DW_OP_plus_uconst:
4264 return "DW_OP_plus_uconst";
4265 case DW_OP_shl:
4266 return "DW_OP_shl";
4267 case DW_OP_shr:
4268 return "DW_OP_shr";
4269 case DW_OP_shra:
4270 return "DW_OP_shra";
4271 case DW_OP_xor:
4272 return "DW_OP_xor";
4273 case DW_OP_bra:
4274 return "DW_OP_bra";
4275 case DW_OP_eq:
4276 return "DW_OP_eq";
4277 case DW_OP_ge:
4278 return "DW_OP_ge";
4279 case DW_OP_gt:
4280 return "DW_OP_gt";
4281 case DW_OP_le:
4282 return "DW_OP_le";
4283 case DW_OP_lt:
4284 return "DW_OP_lt";
4285 case DW_OP_ne:
4286 return "DW_OP_ne";
4287 case DW_OP_skip:
4288 return "DW_OP_skip";
4289 case DW_OP_lit0:
4290 return "DW_OP_lit0";
4291 case DW_OP_lit1:
4292 return "DW_OP_lit1";
4293 case DW_OP_lit2:
4294 return "DW_OP_lit2";
4295 case DW_OP_lit3:
4296 return "DW_OP_lit3";
4297 case DW_OP_lit4:
4298 return "DW_OP_lit4";
4299 case DW_OP_lit5:
4300 return "DW_OP_lit5";
4301 case DW_OP_lit6:
4302 return "DW_OP_lit6";
4303 case DW_OP_lit7:
4304 return "DW_OP_lit7";
4305 case DW_OP_lit8:
4306 return "DW_OP_lit8";
4307 case DW_OP_lit9:
4308 return "DW_OP_lit9";
4309 case DW_OP_lit10:
4310 return "DW_OP_lit10";
4311 case DW_OP_lit11:
4312 return "DW_OP_lit11";
4313 case DW_OP_lit12:
4314 return "DW_OP_lit12";
4315 case DW_OP_lit13:
4316 return "DW_OP_lit13";
4317 case DW_OP_lit14:
4318 return "DW_OP_lit14";
4319 case DW_OP_lit15:
4320 return "DW_OP_lit15";
4321 case DW_OP_lit16:
4322 return "DW_OP_lit16";
4323 case DW_OP_lit17:
4324 return "DW_OP_lit17";
4325 case DW_OP_lit18:
4326 return "DW_OP_lit18";
4327 case DW_OP_lit19:
4328 return "DW_OP_lit19";
4329 case DW_OP_lit20:
4330 return "DW_OP_lit20";
4331 case DW_OP_lit21:
4332 return "DW_OP_lit21";
4333 case DW_OP_lit22:
4334 return "DW_OP_lit22";
4335 case DW_OP_lit23:
4336 return "DW_OP_lit23";
4337 case DW_OP_lit24:
4338 return "DW_OP_lit24";
4339 case DW_OP_lit25:
4340 return "DW_OP_lit25";
4341 case DW_OP_lit26:
4342 return "DW_OP_lit26";
4343 case DW_OP_lit27:
4344 return "DW_OP_lit27";
4345 case DW_OP_lit28:
4346 return "DW_OP_lit28";
4347 case DW_OP_lit29:
4348 return "DW_OP_lit29";
4349 case DW_OP_lit30:
4350 return "DW_OP_lit30";
4351 case DW_OP_lit31:
4352 return "DW_OP_lit31";
4353 case DW_OP_reg0:
4354 return "DW_OP_reg0";
4355 case DW_OP_reg1:
4356 return "DW_OP_reg1";
4357 case DW_OP_reg2:
4358 return "DW_OP_reg2";
4359 case DW_OP_reg3:
4360 return "DW_OP_reg3";
4361 case DW_OP_reg4:
4362 return "DW_OP_reg4";
4363 case DW_OP_reg5:
4364 return "DW_OP_reg5";
4365 case DW_OP_reg6:
4366 return "DW_OP_reg6";
4367 case DW_OP_reg7:
4368 return "DW_OP_reg7";
4369 case DW_OP_reg8:
4370 return "DW_OP_reg8";
4371 case DW_OP_reg9:
4372 return "DW_OP_reg9";
4373 case DW_OP_reg10:
4374 return "DW_OP_reg10";
4375 case DW_OP_reg11:
4376 return "DW_OP_reg11";
4377 case DW_OP_reg12:
4378 return "DW_OP_reg12";
4379 case DW_OP_reg13:
4380 return "DW_OP_reg13";
4381 case DW_OP_reg14:
4382 return "DW_OP_reg14";
4383 case DW_OP_reg15:
4384 return "DW_OP_reg15";
4385 case DW_OP_reg16:
4386 return "DW_OP_reg16";
4387 case DW_OP_reg17:
4388 return "DW_OP_reg17";
4389 case DW_OP_reg18:
4390 return "DW_OP_reg18";
4391 case DW_OP_reg19:
4392 return "DW_OP_reg19";
4393 case DW_OP_reg20:
4394 return "DW_OP_reg20";
4395 case DW_OP_reg21:
4396 return "DW_OP_reg21";
4397 case DW_OP_reg22:
4398 return "DW_OP_reg22";
4399 case DW_OP_reg23:
4400 return "DW_OP_reg23";
4401 case DW_OP_reg24:
4402 return "DW_OP_reg24";
4403 case DW_OP_reg25:
4404 return "DW_OP_reg25";
4405 case DW_OP_reg26:
4406 return "DW_OP_reg26";
4407 case DW_OP_reg27:
4408 return "DW_OP_reg27";
4409 case DW_OP_reg28:
4410 return "DW_OP_reg28";
4411 case DW_OP_reg29:
4412 return "DW_OP_reg29";
4413 case DW_OP_reg30:
4414 return "DW_OP_reg30";
4415 case DW_OP_reg31:
4416 return "DW_OP_reg31";
4417 case DW_OP_breg0:
4418 return "DW_OP_breg0";
4419 case DW_OP_breg1:
4420 return "DW_OP_breg1";
4421 case DW_OP_breg2:
4422 return "DW_OP_breg2";
4423 case DW_OP_breg3:
4424 return "DW_OP_breg3";
4425 case DW_OP_breg4:
4426 return "DW_OP_breg4";
4427 case DW_OP_breg5:
4428 return "DW_OP_breg5";
4429 case DW_OP_breg6:
4430 return "DW_OP_breg6";
4431 case DW_OP_breg7:
4432 return "DW_OP_breg7";
4433 case DW_OP_breg8:
4434 return "DW_OP_breg8";
4435 case DW_OP_breg9:
4436 return "DW_OP_breg9";
4437 case DW_OP_breg10:
4438 return "DW_OP_breg10";
4439 case DW_OP_breg11:
4440 return "DW_OP_breg11";
4441 case DW_OP_breg12:
4442 return "DW_OP_breg12";
4443 case DW_OP_breg13:
4444 return "DW_OP_breg13";
4445 case DW_OP_breg14:
4446 return "DW_OP_breg14";
4447 case DW_OP_breg15:
4448 return "DW_OP_breg15";
4449 case DW_OP_breg16:
4450 return "DW_OP_breg16";
4451 case DW_OP_breg17:
4452 return "DW_OP_breg17";
4453 case DW_OP_breg18:
4454 return "DW_OP_breg18";
4455 case DW_OP_breg19:
4456 return "DW_OP_breg19";
4457 case DW_OP_breg20:
4458 return "DW_OP_breg20";
4459 case DW_OP_breg21:
4460 return "DW_OP_breg21";
4461 case DW_OP_breg22:
4462 return "DW_OP_breg22";
4463 case DW_OP_breg23:
4464 return "DW_OP_breg23";
4465 case DW_OP_breg24:
4466 return "DW_OP_breg24";
4467 case DW_OP_breg25:
4468 return "DW_OP_breg25";
4469 case DW_OP_breg26:
4470 return "DW_OP_breg26";
4471 case DW_OP_breg27:
4472 return "DW_OP_breg27";
4473 case DW_OP_breg28:
4474 return "DW_OP_breg28";
4475 case DW_OP_breg29:
4476 return "DW_OP_breg29";
4477 case DW_OP_breg30:
4478 return "DW_OP_breg30";
4479 case DW_OP_breg31:
4480 return "DW_OP_breg31";
4481 case DW_OP_regx:
4482 return "DW_OP_regx";
4483 case DW_OP_fbreg:
4484 return "DW_OP_fbreg";
4485 case DW_OP_bregx:
4486 return "DW_OP_bregx";
4487 case DW_OP_piece:
4488 return "DW_OP_piece";
4489 case DW_OP_deref_size:
4490 return "DW_OP_deref_size";
4491 case DW_OP_xderef_size:
4492 return "DW_OP_xderef_size";
4493 case DW_OP_nop:
4494 return "DW_OP_nop";
4495
4496 case DW_OP_push_object_address:
4497 return "DW_OP_push_object_address";
4498 case DW_OP_call2:
4499 return "DW_OP_call2";
4500 case DW_OP_call4:
4501 return "DW_OP_call4";
4502 case DW_OP_call_ref:
4503 return "DW_OP_call_ref";
4504 case DW_OP_form_tls_address:
4505 return "DW_OP_form_tls_address";
4506 case DW_OP_call_frame_cfa:
4507 return "DW_OP_call_frame_cfa";
4508 case DW_OP_bit_piece:
4509 return "DW_OP_bit_piece";
4510
4511 case DW_OP_GNU_push_tls_address:
4512 return "DW_OP_GNU_push_tls_address";
4513 case DW_OP_GNU_uninit:
4514 return "DW_OP_GNU_uninit";
4515 case DW_OP_GNU_encoded_addr:
4516 return "DW_OP_GNU_encoded_addr";
4517
4518 default:
4519 return "OP_<unknown>";
4520 }
4521 }
4522
4523 /* Return a pointer to a newly allocated location description. Location
4524 descriptions are simple expression terms that can be strung
4525 together to form more complicated location (address) descriptions. */
4526
4527 static inline dw_loc_descr_ref
4528 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
4529 unsigned HOST_WIDE_INT oprnd2)
4530 {
4531 dw_loc_descr_ref descr = GGC_CNEW (dw_loc_descr_node);
4532
4533 descr->dw_loc_opc = op;
4534 descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
4535 descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
4536 descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
4537 descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
4538
4539 return descr;
4540 }
4541
4542 /* Return a pointer to a newly allocated location description for
4543 REG and OFFSET. */
4544
4545 static inline dw_loc_descr_ref
4546 new_reg_loc_descr (unsigned int reg, unsigned HOST_WIDE_INT offset)
4547 {
4548 if (reg <= 31)
4549 return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
4550 offset, 0);
4551 else
4552 return new_loc_descr (DW_OP_bregx, reg, offset);
4553 }
4554
4555 /* Add a location description term to a location description expression. */
4556
4557 static inline void
4558 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
4559 {
4560 dw_loc_descr_ref *d;
4561
4562 /* Find the end of the chain. */
4563 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
4564 ;
4565
4566 *d = descr;
4567 }
4568
4569 /* Add a constant OFFSET to a location expression. */
4570
4571 static void
4572 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
4573 {
4574 dw_loc_descr_ref loc;
4575 HOST_WIDE_INT *p;
4576
4577 gcc_assert (*list_head != NULL);
4578
4579 if (!offset)
4580 return;
4581
4582 /* Find the end of the chain. */
4583 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
4584 ;
4585
4586 p = NULL;
4587 if (loc->dw_loc_opc == DW_OP_fbreg
4588 || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
4589 p = &loc->dw_loc_oprnd1.v.val_int;
4590 else if (loc->dw_loc_opc == DW_OP_bregx)
4591 p = &loc->dw_loc_oprnd2.v.val_int;
4592
4593 /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
4594 offset. Don't optimize if an signed integer overflow would happen. */
4595 if (p != NULL
4596 && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
4597 || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
4598 *p += offset;
4599
4600 else if (offset > 0)
4601 loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
4602
4603 else
4604 {
4605 loc->dw_loc_next = int_loc_descriptor (offset);
4606 add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_plus, 0, 0));
4607 }
4608 }
4609
4610 /* Return the size of a location descriptor. */
4611
4612 static unsigned long
4613 size_of_loc_descr (dw_loc_descr_ref loc)
4614 {
4615 unsigned long size = 1;
4616
4617 switch (loc->dw_loc_opc)
4618 {
4619 case DW_OP_addr:
4620 size += DWARF2_ADDR_SIZE;
4621 break;
4622 case DW_OP_const1u:
4623 case DW_OP_const1s:
4624 size += 1;
4625 break;
4626 case DW_OP_const2u:
4627 case DW_OP_const2s:
4628 size += 2;
4629 break;
4630 case DW_OP_const4u:
4631 case DW_OP_const4s:
4632 size += 4;
4633 break;
4634 case DW_OP_const8u:
4635 case DW_OP_const8s:
4636 size += 8;
4637 break;
4638 case DW_OP_constu:
4639 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4640 break;
4641 case DW_OP_consts:
4642 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4643 break;
4644 case DW_OP_pick:
4645 size += 1;
4646 break;
4647 case DW_OP_plus_uconst:
4648 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4649 break;
4650 case DW_OP_skip:
4651 case DW_OP_bra:
4652 size += 2;
4653 break;
4654 case DW_OP_breg0:
4655 case DW_OP_breg1:
4656 case DW_OP_breg2:
4657 case DW_OP_breg3:
4658 case DW_OP_breg4:
4659 case DW_OP_breg5:
4660 case DW_OP_breg6:
4661 case DW_OP_breg7:
4662 case DW_OP_breg8:
4663 case DW_OP_breg9:
4664 case DW_OP_breg10:
4665 case DW_OP_breg11:
4666 case DW_OP_breg12:
4667 case DW_OP_breg13:
4668 case DW_OP_breg14:
4669 case DW_OP_breg15:
4670 case DW_OP_breg16:
4671 case DW_OP_breg17:
4672 case DW_OP_breg18:
4673 case DW_OP_breg19:
4674 case DW_OP_breg20:
4675 case DW_OP_breg21:
4676 case DW_OP_breg22:
4677 case DW_OP_breg23:
4678 case DW_OP_breg24:
4679 case DW_OP_breg25:
4680 case DW_OP_breg26:
4681 case DW_OP_breg27:
4682 case DW_OP_breg28:
4683 case DW_OP_breg29:
4684 case DW_OP_breg30:
4685 case DW_OP_breg31:
4686 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4687 break;
4688 case DW_OP_regx:
4689 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4690 break;
4691 case DW_OP_fbreg:
4692 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4693 break;
4694 case DW_OP_bregx:
4695 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4696 size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
4697 break;
4698 case DW_OP_piece:
4699 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4700 break;
4701 case DW_OP_deref_size:
4702 case DW_OP_xderef_size:
4703 size += 1;
4704 break;
4705 case DW_OP_call2:
4706 size += 2;
4707 break;
4708 case DW_OP_call4:
4709 size += 4;
4710 break;
4711 case DW_OP_call_ref:
4712 size += DWARF2_ADDR_SIZE;
4713 break;
4714 default:
4715 break;
4716 }
4717
4718 return size;
4719 }
4720
4721 /* Return the size of a series of location descriptors. */
4722
4723 static unsigned long
4724 size_of_locs (dw_loc_descr_ref loc)
4725 {
4726 dw_loc_descr_ref l;
4727 unsigned long size;
4728
4729 /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4730 field, to avoid writing to a PCH file. */
4731 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4732 {
4733 if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
4734 break;
4735 size += size_of_loc_descr (l);
4736 }
4737 if (! l)
4738 return size;
4739
4740 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4741 {
4742 l->dw_loc_addr = size;
4743 size += size_of_loc_descr (l);
4744 }
4745
4746 return size;
4747 }
4748
4749 /* Output location description stack opcode's operands (if any). */
4750
4751 static void
4752 output_loc_operands (dw_loc_descr_ref loc)
4753 {
4754 dw_val_ref val1 = &loc->dw_loc_oprnd1;
4755 dw_val_ref val2 = &loc->dw_loc_oprnd2;
4756
4757 switch (loc->dw_loc_opc)
4758 {
4759 #ifdef DWARF2_DEBUGGING_INFO
4760 case DW_OP_const2u:
4761 case DW_OP_const2s:
4762 dw2_asm_output_data (2, val1->v.val_int, NULL);
4763 break;
4764 case DW_OP_const4u:
4765 case DW_OP_const4s:
4766 dw2_asm_output_data (4, val1->v.val_int, NULL);
4767 break;
4768 case DW_OP_const8u:
4769 case DW_OP_const8s:
4770 gcc_assert (HOST_BITS_PER_LONG >= 64);
4771 dw2_asm_output_data (8, val1->v.val_int, NULL);
4772 break;
4773 case DW_OP_skip:
4774 case DW_OP_bra:
4775 {
4776 int offset;
4777
4778 gcc_assert (val1->val_class == dw_val_class_loc);
4779 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4780
4781 dw2_asm_output_data (2, offset, NULL);
4782 }
4783 break;
4784 #else
4785 case DW_OP_const2u:
4786 case DW_OP_const2s:
4787 case DW_OP_const4u:
4788 case DW_OP_const4s:
4789 case DW_OP_const8u:
4790 case DW_OP_const8s:
4791 case DW_OP_skip:
4792 case DW_OP_bra:
4793 /* We currently don't make any attempt to make sure these are
4794 aligned properly like we do for the main unwind info, so
4795 don't support emitting things larger than a byte if we're
4796 only doing unwinding. */
4797 gcc_unreachable ();
4798 #endif
4799 case DW_OP_const1u:
4800 case DW_OP_const1s:
4801 dw2_asm_output_data (1, val1->v.val_int, NULL);
4802 break;
4803 case DW_OP_constu:
4804 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4805 break;
4806 case DW_OP_consts:
4807 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4808 break;
4809 case DW_OP_pick:
4810 dw2_asm_output_data (1, val1->v.val_int, NULL);
4811 break;
4812 case DW_OP_plus_uconst:
4813 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4814 break;
4815 case DW_OP_breg0:
4816 case DW_OP_breg1:
4817 case DW_OP_breg2:
4818 case DW_OP_breg3:
4819 case DW_OP_breg4:
4820 case DW_OP_breg5:
4821 case DW_OP_breg6:
4822 case DW_OP_breg7:
4823 case DW_OP_breg8:
4824 case DW_OP_breg9:
4825 case DW_OP_breg10:
4826 case DW_OP_breg11:
4827 case DW_OP_breg12:
4828 case DW_OP_breg13:
4829 case DW_OP_breg14:
4830 case DW_OP_breg15:
4831 case DW_OP_breg16:
4832 case DW_OP_breg17:
4833 case DW_OP_breg18:
4834 case DW_OP_breg19:
4835 case DW_OP_breg20:
4836 case DW_OP_breg21:
4837 case DW_OP_breg22:
4838 case DW_OP_breg23:
4839 case DW_OP_breg24:
4840 case DW_OP_breg25:
4841 case DW_OP_breg26:
4842 case DW_OP_breg27:
4843 case DW_OP_breg28:
4844 case DW_OP_breg29:
4845 case DW_OP_breg30:
4846 case DW_OP_breg31:
4847 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4848 break;
4849 case DW_OP_regx:
4850 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4851 break;
4852 case DW_OP_fbreg:
4853 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4854 break;
4855 case DW_OP_bregx:
4856 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4857 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
4858 break;
4859 case DW_OP_piece:
4860 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4861 break;
4862 case DW_OP_deref_size:
4863 case DW_OP_xderef_size:
4864 dw2_asm_output_data (1, val1->v.val_int, NULL);
4865 break;
4866
4867 case DW_OP_addr:
4868 if (loc->dtprel)
4869 {
4870 if (targetm.asm_out.output_dwarf_dtprel)
4871 {
4872 targetm.asm_out.output_dwarf_dtprel (asm_out_file,
4873 DWARF2_ADDR_SIZE,
4874 val1->v.val_addr);
4875 fputc ('\n', asm_out_file);
4876 }
4877 else
4878 gcc_unreachable ();
4879 }
4880 else
4881 {
4882 #ifdef DWARF2_DEBUGGING_INFO
4883 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
4884 #else
4885 gcc_unreachable ();
4886 #endif
4887 }
4888 break;
4889
4890 default:
4891 /* Other codes have no operands. */
4892 break;
4893 }
4894 }
4895
4896 /* Output a sequence of location operations. */
4897
4898 static void
4899 output_loc_sequence (dw_loc_descr_ref loc)
4900 {
4901 for (; loc != NULL; loc = loc->dw_loc_next)
4902 {
4903 /* Output the opcode. */
4904 dw2_asm_output_data (1, loc->dw_loc_opc,
4905 "%s", dwarf_stack_op_name (loc->dw_loc_opc));
4906
4907 /* Output the operand(s) (if any). */
4908 output_loc_operands (loc);
4909 }
4910 }
4911
4912 /* Output location description stack opcode's operands (if any).
4913 The output is single bytes on a line, suitable for .cfi_escape. */
4914
4915 static void
4916 output_loc_operands_raw (dw_loc_descr_ref loc)
4917 {
4918 dw_val_ref val1 = &loc->dw_loc_oprnd1;
4919 dw_val_ref val2 = &loc->dw_loc_oprnd2;
4920
4921 switch (loc->dw_loc_opc)
4922 {
4923 case DW_OP_addr:
4924 /* We cannot output addresses in .cfi_escape, only bytes. */
4925 gcc_unreachable ();
4926
4927 case DW_OP_const1u:
4928 case DW_OP_const1s:
4929 case DW_OP_pick:
4930 case DW_OP_deref_size:
4931 case DW_OP_xderef_size:
4932 fputc (',', asm_out_file);
4933 dw2_asm_output_data_raw (1, val1->v.val_int);
4934 break;
4935
4936 case DW_OP_const2u:
4937 case DW_OP_const2s:
4938 fputc (',', asm_out_file);
4939 dw2_asm_output_data_raw (2, val1->v.val_int);
4940 break;
4941
4942 case DW_OP_const4u:
4943 case DW_OP_const4s:
4944 fputc (',', asm_out_file);
4945 dw2_asm_output_data_raw (4, val1->v.val_int);
4946 break;
4947
4948 case DW_OP_const8u:
4949 case DW_OP_const8s:
4950 gcc_assert (HOST_BITS_PER_LONG >= 64);
4951 fputc (',', asm_out_file);
4952 dw2_asm_output_data_raw (8, val1->v.val_int);
4953 break;
4954
4955 case DW_OP_skip:
4956 case DW_OP_bra:
4957 {
4958 int offset;
4959
4960 gcc_assert (val1->val_class == dw_val_class_loc);
4961 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4962
4963 fputc (',', asm_out_file);
4964 dw2_asm_output_data_raw (2, offset);
4965 }
4966 break;
4967
4968 case DW_OP_constu:
4969 case DW_OP_plus_uconst:
4970 case DW_OP_regx:
4971 case DW_OP_piece:
4972 fputc (',', asm_out_file);
4973 dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
4974 break;
4975
4976 case DW_OP_consts:
4977 case DW_OP_breg0:
4978 case DW_OP_breg1:
4979 case DW_OP_breg2:
4980 case DW_OP_breg3:
4981 case DW_OP_breg4:
4982 case DW_OP_breg5:
4983 case DW_OP_breg6:
4984 case DW_OP_breg7:
4985 case DW_OP_breg8:
4986 case DW_OP_breg9:
4987 case DW_OP_breg10:
4988 case DW_OP_breg11:
4989 case DW_OP_breg12:
4990 case DW_OP_breg13:
4991 case DW_OP_breg14:
4992 case DW_OP_breg15:
4993 case DW_OP_breg16:
4994 case DW_OP_breg17:
4995 case DW_OP_breg18:
4996 case DW_OP_breg19:
4997 case DW_OP_breg20:
4998 case DW_OP_breg21:
4999 case DW_OP_breg22:
5000 case DW_OP_breg23:
5001 case DW_OP_breg24:
5002 case DW_OP_breg25:
5003 case DW_OP_breg26:
5004 case DW_OP_breg27:
5005 case DW_OP_breg28:
5006 case DW_OP_breg29:
5007 case DW_OP_breg30:
5008 case DW_OP_breg31:
5009 case DW_OP_fbreg:
5010 fputc (',', asm_out_file);
5011 dw2_asm_output_data_sleb128_raw (val1->v.val_int);
5012 break;
5013
5014 case DW_OP_bregx:
5015 fputc (',', asm_out_file);
5016 dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5017 fputc (',', asm_out_file);
5018 dw2_asm_output_data_sleb128_raw (val2->v.val_int);
5019 break;
5020
5021 default:
5022 /* Other codes have no operands. */
5023 break;
5024 }
5025 }
5026
5027 static void
5028 output_loc_sequence_raw (dw_loc_descr_ref loc)
5029 {
5030 while (1)
5031 {
5032 /* Output the opcode. */
5033 fprintf (asm_out_file, "0x%x", loc->dw_loc_opc);
5034 output_loc_operands_raw (loc);
5035
5036 if (!loc->dw_loc_next)
5037 break;
5038 loc = loc->dw_loc_next;
5039
5040 fputc (',', asm_out_file);
5041 }
5042 }
5043
5044 /* This routine will generate the correct assembly data for a location
5045 description based on a cfi entry with a complex address. */
5046
5047 static void
5048 output_cfa_loc (dw_cfi_ref cfi)
5049 {
5050 dw_loc_descr_ref loc;
5051 unsigned long size;
5052
5053 if (cfi->dw_cfi_opc == DW_CFA_expression)
5054 dw2_asm_output_data (1, cfi->dw_cfi_oprnd2.dw_cfi_reg_num, NULL);
5055
5056 /* Output the size of the block. */
5057 loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5058 size = size_of_locs (loc);
5059 dw2_asm_output_data_uleb128 (size, NULL);
5060
5061 /* Now output the operations themselves. */
5062 output_loc_sequence (loc);
5063 }
5064
5065 /* Similar, but used for .cfi_escape. */
5066
5067 static void
5068 output_cfa_loc_raw (dw_cfi_ref cfi)
5069 {
5070 dw_loc_descr_ref loc;
5071 unsigned long size;
5072
5073 if (cfi->dw_cfi_opc == DW_CFA_expression)
5074 fprintf (asm_out_file, "0x%x,", cfi->dw_cfi_oprnd2.dw_cfi_reg_num);
5075
5076 /* Output the size of the block. */
5077 loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5078 size = size_of_locs (loc);
5079 dw2_asm_output_data_uleb128_raw (size);
5080 fputc (',', asm_out_file);
5081
5082 /* Now output the operations themselves. */
5083 output_loc_sequence_raw (loc);
5084 }
5085
5086 /* This function builds a dwarf location descriptor sequence from a
5087 dw_cfa_location, adding the given OFFSET to the result of the
5088 expression. */
5089
5090 static struct dw_loc_descr_struct *
5091 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
5092 {
5093 struct dw_loc_descr_struct *head, *tmp;
5094
5095 offset += cfa->offset;
5096
5097 if (cfa->indirect)
5098 {
5099 head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
5100 head->dw_loc_oprnd1.val_class = dw_val_class_const;
5101 tmp = new_loc_descr (DW_OP_deref, 0, 0);
5102 add_loc_descr (&head, tmp);
5103 if (offset != 0)
5104 {
5105 tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
5106 add_loc_descr (&head, tmp);
5107 }
5108 }
5109 else
5110 head = new_reg_loc_descr (cfa->reg, offset);
5111
5112 return head;
5113 }
5114
5115 /* This function builds a dwarf location descriptor sequence for
5116 the address at OFFSET from the CFA when stack is aligned to
5117 ALIGNMENT byte. */
5118
5119 static struct dw_loc_descr_struct *
5120 build_cfa_aligned_loc (HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
5121 {
5122 struct dw_loc_descr_struct *head;
5123 unsigned int dwarf_fp
5124 = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
5125
5126 /* When CFA is defined as FP+OFFSET, emulate stack alignment. */
5127 if (cfa.reg == HARD_FRAME_POINTER_REGNUM && cfa.indirect == 0)
5128 {
5129 head = new_reg_loc_descr (dwarf_fp, 0);
5130 add_loc_descr (&head, int_loc_descriptor (alignment));
5131 add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
5132 loc_descr_plus_const (&head, offset);
5133 }
5134 else
5135 head = new_reg_loc_descr (dwarf_fp, offset);
5136 return head;
5137 }
5138
5139 /* This function fills in aa dw_cfa_location structure from a dwarf location
5140 descriptor sequence. */
5141
5142 static void
5143 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
5144 {
5145 struct dw_loc_descr_struct *ptr;
5146 cfa->offset = 0;
5147 cfa->base_offset = 0;
5148 cfa->indirect = 0;
5149 cfa->reg = -1;
5150
5151 for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
5152 {
5153 enum dwarf_location_atom op = ptr->dw_loc_opc;
5154
5155 switch (op)
5156 {
5157 case DW_OP_reg0:
5158 case DW_OP_reg1:
5159 case DW_OP_reg2:
5160 case DW_OP_reg3:
5161 case DW_OP_reg4:
5162 case DW_OP_reg5:
5163 case DW_OP_reg6:
5164 case DW_OP_reg7:
5165 case DW_OP_reg8:
5166 case DW_OP_reg9:
5167 case DW_OP_reg10:
5168 case DW_OP_reg11:
5169 case DW_OP_reg12:
5170 case DW_OP_reg13:
5171 case DW_OP_reg14:
5172 case DW_OP_reg15:
5173 case DW_OP_reg16:
5174 case DW_OP_reg17:
5175 case DW_OP_reg18:
5176 case DW_OP_reg19:
5177 case DW_OP_reg20:
5178 case DW_OP_reg21:
5179 case DW_OP_reg22:
5180 case DW_OP_reg23:
5181 case DW_OP_reg24:
5182 case DW_OP_reg25:
5183 case DW_OP_reg26:
5184 case DW_OP_reg27:
5185 case DW_OP_reg28:
5186 case DW_OP_reg29:
5187 case DW_OP_reg30:
5188 case DW_OP_reg31:
5189 cfa->reg = op - DW_OP_reg0;
5190 break;
5191 case DW_OP_regx:
5192 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5193 break;
5194 case DW_OP_breg0:
5195 case DW_OP_breg1:
5196 case DW_OP_breg2:
5197 case DW_OP_breg3:
5198 case DW_OP_breg4:
5199 case DW_OP_breg5:
5200 case DW_OP_breg6:
5201 case DW_OP_breg7:
5202 case DW_OP_breg8:
5203 case DW_OP_breg9:
5204 case DW_OP_breg10:
5205 case DW_OP_breg11:
5206 case DW_OP_breg12:
5207 case DW_OP_breg13:
5208 case DW_OP_breg14:
5209 case DW_OP_breg15:
5210 case DW_OP_breg16:
5211 case DW_OP_breg17:
5212 case DW_OP_breg18:
5213 case DW_OP_breg19:
5214 case DW_OP_breg20:
5215 case DW_OP_breg21:
5216 case DW_OP_breg22:
5217 case DW_OP_breg23:
5218 case DW_OP_breg24:
5219 case DW_OP_breg25:
5220 case DW_OP_breg26:
5221 case DW_OP_breg27:
5222 case DW_OP_breg28:
5223 case DW_OP_breg29:
5224 case DW_OP_breg30:
5225 case DW_OP_breg31:
5226 cfa->reg = op - DW_OP_breg0;
5227 cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
5228 break;
5229 case DW_OP_bregx:
5230 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5231 cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
5232 break;
5233 case DW_OP_deref:
5234 cfa->indirect = 1;
5235 break;
5236 case DW_OP_plus_uconst:
5237 cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
5238 break;
5239 default:
5240 internal_error ("DW_LOC_OP %s not implemented",
5241 dwarf_stack_op_name (ptr->dw_loc_opc));
5242 }
5243 }
5244 }
5245 #endif /* .debug_frame support */
5246 \f
5247 /* And now, the support for symbolic debugging information. */
5248 #ifdef DWARF2_DEBUGGING_INFO
5249
5250 /* .debug_str support. */
5251 static int output_indirect_string (void **, void *);
5252
5253 static void dwarf2out_init (const char *);
5254 static void dwarf2out_finish (const char *);
5255 static void dwarf2out_define (unsigned int, const char *);
5256 static void dwarf2out_undef (unsigned int, const char *);
5257 static void dwarf2out_start_source_file (unsigned, const char *);
5258 static void dwarf2out_end_source_file (unsigned);
5259 static void dwarf2out_begin_block (unsigned, unsigned);
5260 static void dwarf2out_end_block (unsigned, unsigned);
5261 static bool dwarf2out_ignore_block (const_tree);
5262 static void dwarf2out_global_decl (tree);
5263 static void dwarf2out_type_decl (tree, int);
5264 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
5265 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
5266 dw_die_ref);
5267 static void dwarf2out_abstract_function (tree);
5268 static void dwarf2out_var_location (rtx);
5269 static void dwarf2out_begin_function (tree);
5270 static void dwarf2out_set_name (tree, tree);
5271
5272 /* The debug hooks structure. */
5273
5274 const struct gcc_debug_hooks dwarf2_debug_hooks =
5275 {
5276 dwarf2out_init,
5277 dwarf2out_finish,
5278 dwarf2out_define,
5279 dwarf2out_undef,
5280 dwarf2out_start_source_file,
5281 dwarf2out_end_source_file,
5282 dwarf2out_begin_block,
5283 dwarf2out_end_block,
5284 dwarf2out_ignore_block,
5285 dwarf2out_source_line,
5286 dwarf2out_begin_prologue,
5287 debug_nothing_int_charstar, /* end_prologue */
5288 dwarf2out_end_epilogue,
5289 dwarf2out_begin_function,
5290 debug_nothing_int, /* end_function */
5291 dwarf2out_decl, /* function_decl */
5292 dwarf2out_global_decl,
5293 dwarf2out_type_decl, /* type_decl */
5294 dwarf2out_imported_module_or_decl,
5295 debug_nothing_tree, /* deferred_inline_function */
5296 /* The DWARF 2 backend tries to reduce debugging bloat by not
5297 emitting the abstract description of inline functions until
5298 something tries to reference them. */
5299 dwarf2out_abstract_function, /* outlining_inline_function */
5300 debug_nothing_rtx, /* label */
5301 debug_nothing_int, /* handle_pch */
5302 dwarf2out_var_location,
5303 dwarf2out_switch_text_section,
5304 dwarf2out_set_name,
5305 1 /* start_end_main_source_file */
5306 };
5307 #endif
5308 \f
5309 /* NOTE: In the comments in this file, many references are made to
5310 "Debugging Information Entries". This term is abbreviated as `DIE'
5311 throughout the remainder of this file. */
5312
5313 /* An internal representation of the DWARF output is built, and then
5314 walked to generate the DWARF debugging info. The walk of the internal
5315 representation is done after the entire program has been compiled.
5316 The types below are used to describe the internal representation. */
5317
5318 /* Various DIE's use offsets relative to the beginning of the
5319 .debug_info section to refer to each other. */
5320
5321 typedef long int dw_offset;
5322
5323 /* Define typedefs here to avoid circular dependencies. */
5324
5325 typedef struct dw_attr_struct *dw_attr_ref;
5326 typedef struct dw_line_info_struct *dw_line_info_ref;
5327 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
5328 typedef struct pubname_struct *pubname_ref;
5329 typedef struct dw_ranges_struct *dw_ranges_ref;
5330 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
5331
5332 /* Each entry in the line_info_table maintains the file and
5333 line number associated with the label generated for that
5334 entry. The label gives the PC value associated with
5335 the line number entry. */
5336
5337 typedef struct GTY(()) dw_line_info_struct {
5338 unsigned long dw_file_num;
5339 unsigned long dw_line_num;
5340 }
5341 dw_line_info_entry;
5342
5343 /* Line information for functions in separate sections; each one gets its
5344 own sequence. */
5345 typedef struct GTY(()) dw_separate_line_info_struct {
5346 unsigned long dw_file_num;
5347 unsigned long dw_line_num;
5348 unsigned long function;
5349 }
5350 dw_separate_line_info_entry;
5351
5352 /* Each DIE attribute has a field specifying the attribute kind,
5353 a link to the next attribute in the chain, and an attribute value.
5354 Attributes are typically linked below the DIE they modify. */
5355
5356 typedef struct GTY(()) dw_attr_struct {
5357 enum dwarf_attribute dw_attr;
5358 dw_val_node dw_attr_val;
5359 }
5360 dw_attr_node;
5361
5362 DEF_VEC_O(dw_attr_node);
5363 DEF_VEC_ALLOC_O(dw_attr_node,gc);
5364
5365 /* The Debugging Information Entry (DIE) structure. DIEs form a tree.
5366 The children of each node form a circular list linked by
5367 die_sib. die_child points to the node *before* the "first" child node. */
5368
5369 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
5370 enum dwarf_tag die_tag;
5371 char *die_symbol;
5372 VEC(dw_attr_node,gc) * die_attr;
5373 dw_die_ref die_parent;
5374 dw_die_ref die_child;
5375 dw_die_ref die_sib;
5376 dw_die_ref die_definition; /* ref from a specification to its definition */
5377 dw_offset die_offset;
5378 unsigned long die_abbrev;
5379 int die_mark;
5380 /* Die is used and must not be pruned as unused. */
5381 int die_perennial_p;
5382 unsigned int decl_id;
5383 }
5384 die_node;
5385
5386 /* Evaluate 'expr' while 'c' is set to each child of DIE in order. */
5387 #define FOR_EACH_CHILD(die, c, expr) do { \
5388 c = die->die_child; \
5389 if (c) do { \
5390 c = c->die_sib; \
5391 expr; \
5392 } while (c != die->die_child); \
5393 } while (0)
5394
5395 /* The pubname structure */
5396
5397 typedef struct GTY(()) pubname_struct {
5398 dw_die_ref die;
5399 const char *name;
5400 }
5401 pubname_entry;
5402
5403 DEF_VEC_O(pubname_entry);
5404 DEF_VEC_ALLOC_O(pubname_entry, gc);
5405
5406 struct GTY(()) dw_ranges_struct {
5407 /* If this is positive, it's a block number, otherwise it's a
5408 bitwise-negated index into dw_ranges_by_label. */
5409 int num;
5410 };
5411
5412 struct GTY(()) dw_ranges_by_label_struct {
5413 const char *begin;
5414 const char *end;
5415 };
5416
5417 /* The limbo die list structure. */
5418 typedef struct GTY(()) limbo_die_struct {
5419 dw_die_ref die;
5420 tree created_for;
5421 struct limbo_die_struct *next;
5422 }
5423 limbo_die_node;
5424
5425 /* How to start an assembler comment. */
5426 #ifndef ASM_COMMENT_START
5427 #define ASM_COMMENT_START ";#"
5428 #endif
5429
5430 /* Define a macro which returns nonzero for a TYPE_DECL which was
5431 implicitly generated for a tagged type.
5432
5433 Note that unlike the gcc front end (which generates a NULL named
5434 TYPE_DECL node for each complete tagged type, each array type, and
5435 each function type node created) the g++ front end generates a
5436 _named_ TYPE_DECL node for each tagged type node created.
5437 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
5438 generate a DW_TAG_typedef DIE for them. */
5439
5440 #define TYPE_DECL_IS_STUB(decl) \
5441 (DECL_NAME (decl) == NULL_TREE \
5442 || (DECL_ARTIFICIAL (decl) \
5443 && is_tagged_type (TREE_TYPE (decl)) \
5444 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
5445 /* This is necessary for stub decls that \
5446 appear in nested inline functions. */ \
5447 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
5448 && (decl_ultimate_origin (decl) \
5449 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
5450
5451 /* Information concerning the compilation unit's programming
5452 language, and compiler version. */
5453
5454 /* Fixed size portion of the DWARF compilation unit header. */
5455 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
5456 (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
5457
5458 /* Fixed size portion of public names info. */
5459 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
5460
5461 /* Fixed size portion of the address range info. */
5462 #define DWARF_ARANGES_HEADER_SIZE \
5463 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5464 DWARF2_ADDR_SIZE * 2) \
5465 - DWARF_INITIAL_LENGTH_SIZE)
5466
5467 /* Size of padding portion in the address range info. It must be
5468 aligned to twice the pointer size. */
5469 #define DWARF_ARANGES_PAD_SIZE \
5470 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5471 DWARF2_ADDR_SIZE * 2) \
5472 - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
5473
5474 /* Use assembler line directives if available. */
5475 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
5476 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
5477 #define DWARF2_ASM_LINE_DEBUG_INFO 1
5478 #else
5479 #define DWARF2_ASM_LINE_DEBUG_INFO 0
5480 #endif
5481 #endif
5482
5483 /* Minimum line offset in a special line info. opcode.
5484 This value was chosen to give a reasonable range of values. */
5485 #define DWARF_LINE_BASE -10
5486
5487 /* First special line opcode - leave room for the standard opcodes. */
5488 #define DWARF_LINE_OPCODE_BASE 10
5489
5490 /* Range of line offsets in a special line info. opcode. */
5491 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
5492
5493 /* Flag that indicates the initial value of the is_stmt_start flag.
5494 In the present implementation, we do not mark any lines as
5495 the beginning of a source statement, because that information
5496 is not made available by the GCC front-end. */
5497 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
5498
5499 #ifdef DWARF2_DEBUGGING_INFO
5500 /* This location is used by calc_die_sizes() to keep track
5501 the offset of each DIE within the .debug_info section. */
5502 static unsigned long next_die_offset;
5503 #endif
5504
5505 /* Record the root of the DIE's built for the current compilation unit. */
5506 static GTY(()) dw_die_ref comp_unit_die;
5507
5508 /* A list of DIEs with a NULL parent waiting to be relocated. */
5509 static GTY(()) limbo_die_node *limbo_die_list;
5510
5511 /* A list of DIEs for which we may have to generate
5512 DW_AT_MIPS_linkage_name once their DECL_ASSEMBLER_NAMEs are
5513 set. */
5514 static GTY(()) limbo_die_node *deferred_asm_name;
5515
5516 /* Filenames referenced by this compilation unit. */
5517 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
5518
5519 /* A hash table of references to DIE's that describe declarations.
5520 The key is a DECL_UID() which is a unique number identifying each decl. */
5521 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
5522
5523 /* A hash table of references to DIE's that describe COMMON blocks.
5524 The key is DECL_UID() ^ die_parent. */
5525 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
5526
5527 /* Node of the variable location list. */
5528 struct GTY ((chain_next ("%h.next"))) var_loc_node {
5529 rtx GTY (()) var_loc_note;
5530 const char * GTY (()) label;
5531 const char * GTY (()) section_label;
5532 struct var_loc_node * GTY (()) next;
5533 };
5534
5535 /* Variable location list. */
5536 struct GTY (()) var_loc_list_def {
5537 struct var_loc_node * GTY (()) first;
5538
5539 /* Do not mark the last element of the chained list because
5540 it is marked through the chain. */
5541 struct var_loc_node * GTY ((skip ("%h"))) last;
5542
5543 /* DECL_UID of the variable decl. */
5544 unsigned int decl_id;
5545 };
5546 typedef struct var_loc_list_def var_loc_list;
5547
5548
5549 /* Table of decl location linked lists. */
5550 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
5551
5552 /* A pointer to the base of a list of references to DIE's that
5553 are uniquely identified by their tag, presence/absence of
5554 children DIE's, and list of attribute/value pairs. */
5555 static GTY((length ("abbrev_die_table_allocated")))
5556 dw_die_ref *abbrev_die_table;
5557
5558 /* Number of elements currently allocated for abbrev_die_table. */
5559 static GTY(()) unsigned abbrev_die_table_allocated;
5560
5561 /* Number of elements in type_die_table currently in use. */
5562 static GTY(()) unsigned abbrev_die_table_in_use;
5563
5564 /* Size (in elements) of increments by which we may expand the
5565 abbrev_die_table. */
5566 #define ABBREV_DIE_TABLE_INCREMENT 256
5567
5568 /* A pointer to the base of a table that contains line information
5569 for each source code line in .text in the compilation unit. */
5570 static GTY((length ("line_info_table_allocated")))
5571 dw_line_info_ref line_info_table;
5572
5573 /* Number of elements currently allocated for line_info_table. */
5574 static GTY(()) unsigned line_info_table_allocated;
5575
5576 /* Number of elements in line_info_table currently in use. */
5577 static GTY(()) unsigned line_info_table_in_use;
5578
5579 /* A pointer to the base of a table that contains line information
5580 for each source code line outside of .text in the compilation unit. */
5581 static GTY ((length ("separate_line_info_table_allocated")))
5582 dw_separate_line_info_ref separate_line_info_table;
5583
5584 /* Number of elements currently allocated for separate_line_info_table. */
5585 static GTY(()) unsigned separate_line_info_table_allocated;
5586
5587 /* Number of elements in separate_line_info_table currently in use. */
5588 static GTY(()) unsigned separate_line_info_table_in_use;
5589
5590 /* Size (in elements) of increments by which we may expand the
5591 line_info_table. */
5592 #define LINE_INFO_TABLE_INCREMENT 1024
5593
5594 /* A pointer to the base of a table that contains a list of publicly
5595 accessible names. */
5596 static GTY (()) VEC (pubname_entry, gc) * pubname_table;
5597
5598 /* A pointer to the base of a table that contains a list of publicly
5599 accessible types. */
5600 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
5601
5602 /* Array of dies for which we should generate .debug_arange info. */
5603 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
5604
5605 /* Number of elements currently allocated for arange_table. */
5606 static GTY(()) unsigned arange_table_allocated;
5607
5608 /* Number of elements in arange_table currently in use. */
5609 static GTY(()) unsigned arange_table_in_use;
5610
5611 /* Size (in elements) of increments by which we may expand the
5612 arange_table. */
5613 #define ARANGE_TABLE_INCREMENT 64
5614
5615 /* Array of dies for which we should generate .debug_ranges info. */
5616 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
5617
5618 /* Number of elements currently allocated for ranges_table. */
5619 static GTY(()) unsigned ranges_table_allocated;
5620
5621 /* Number of elements in ranges_table currently in use. */
5622 static GTY(()) unsigned ranges_table_in_use;
5623
5624 /* Array of pairs of labels referenced in ranges_table. */
5625 static GTY ((length ("ranges_by_label_allocated")))
5626 dw_ranges_by_label_ref ranges_by_label;
5627
5628 /* Number of elements currently allocated for ranges_by_label. */
5629 static GTY(()) unsigned ranges_by_label_allocated;
5630
5631 /* Number of elements in ranges_by_label currently in use. */
5632 static GTY(()) unsigned ranges_by_label_in_use;
5633
5634 /* Size (in elements) of increments by which we may expand the
5635 ranges_table. */
5636 #define RANGES_TABLE_INCREMENT 64
5637
5638 /* Whether we have location lists that need outputting */
5639 static GTY(()) bool have_location_lists;
5640
5641 /* Unique label counter. */
5642 static GTY(()) unsigned int loclabel_num;
5643
5644 #ifdef DWARF2_DEBUGGING_INFO
5645 /* Record whether the function being analyzed contains inlined functions. */
5646 static int current_function_has_inlines;
5647 #endif
5648 #if 0 && defined (MIPS_DEBUGGING_INFO)
5649 static int comp_unit_has_inlines;
5650 #endif
5651
5652 /* The last file entry emitted by maybe_emit_file(). */
5653 static GTY(()) struct dwarf_file_data * last_emitted_file;
5654
5655 /* Number of internal labels generated by gen_internal_sym(). */
5656 static GTY(()) int label_num;
5657
5658 /* Cached result of previous call to lookup_filename. */
5659 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
5660
5661 #ifdef DWARF2_DEBUGGING_INFO
5662
5663 /* Offset from the "steady-state frame pointer" to the frame base,
5664 within the current function. */
5665 static HOST_WIDE_INT frame_pointer_fb_offset;
5666
5667 /* Forward declarations for functions defined in this file. */
5668
5669 static int is_pseudo_reg (const_rtx);
5670 static tree type_main_variant (tree);
5671 static int is_tagged_type (const_tree);
5672 static const char *dwarf_tag_name (unsigned);
5673 static const char *dwarf_attr_name (unsigned);
5674 static const char *dwarf_form_name (unsigned);
5675 static tree decl_ultimate_origin (const_tree);
5676 static tree decl_class_context (tree);
5677 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
5678 static inline enum dw_val_class AT_class (dw_attr_ref);
5679 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
5680 static inline unsigned AT_flag (dw_attr_ref);
5681 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
5682 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
5683 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
5684 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
5685 static void add_AT_long_long (dw_die_ref, enum dwarf_attribute, unsigned long,
5686 unsigned long);
5687 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
5688 unsigned int, unsigned char *);
5689 static hashval_t debug_str_do_hash (const void *);
5690 static int debug_str_eq (const void *, const void *);
5691 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
5692 static inline const char *AT_string (dw_attr_ref);
5693 static enum dwarf_form AT_string_form (dw_attr_ref);
5694 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
5695 static void add_AT_specification (dw_die_ref, dw_die_ref);
5696 static inline dw_die_ref AT_ref (dw_attr_ref);
5697 static inline int AT_ref_external (dw_attr_ref);
5698 static inline void set_AT_ref_external (dw_attr_ref, int);
5699 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
5700 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
5701 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
5702 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
5703 dw_loc_list_ref);
5704 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
5705 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
5706 static inline rtx AT_addr (dw_attr_ref);
5707 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
5708 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
5709 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
5710 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
5711 unsigned HOST_WIDE_INT);
5712 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
5713 unsigned long);
5714 static inline const char *AT_lbl (dw_attr_ref);
5715 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
5716 static const char *get_AT_low_pc (dw_die_ref);
5717 static const char *get_AT_hi_pc (dw_die_ref);
5718 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
5719 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
5720 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
5721 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
5722 static bool is_c_family (void);
5723 static bool is_cxx (void);
5724 static bool is_java (void);
5725 static bool is_fortran (void);
5726 static bool is_ada (void);
5727 static void remove_AT (dw_die_ref, enum dwarf_attribute);
5728 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
5729 static void add_child_die (dw_die_ref, dw_die_ref);
5730 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
5731 static dw_die_ref lookup_type_die (tree);
5732 static void equate_type_number_to_die (tree, dw_die_ref);
5733 static hashval_t decl_die_table_hash (const void *);
5734 static int decl_die_table_eq (const void *, const void *);
5735 static dw_die_ref lookup_decl_die (tree);
5736 static hashval_t common_block_die_table_hash (const void *);
5737 static int common_block_die_table_eq (const void *, const void *);
5738 static hashval_t decl_loc_table_hash (const void *);
5739 static int decl_loc_table_eq (const void *, const void *);
5740 static var_loc_list *lookup_decl_loc (const_tree);
5741 static void equate_decl_number_to_die (tree, dw_die_ref);
5742 static void add_var_loc_to_decl (tree, struct var_loc_node *);
5743 static void print_spaces (FILE *);
5744 static void print_die (dw_die_ref, FILE *);
5745 static void print_dwarf_line_table (FILE *);
5746 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
5747 static dw_die_ref pop_compile_unit (dw_die_ref);
5748 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
5749 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
5750 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
5751 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
5752 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
5753 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
5754 static int same_die_p (dw_die_ref, dw_die_ref, int *);
5755 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
5756 static void compute_section_prefix (dw_die_ref);
5757 static int is_type_die (dw_die_ref);
5758 static int is_comdat_die (dw_die_ref);
5759 static int is_symbol_die (dw_die_ref);
5760 static void assign_symbol_names (dw_die_ref);
5761 static void break_out_includes (dw_die_ref);
5762 static hashval_t htab_cu_hash (const void *);
5763 static int htab_cu_eq (const void *, const void *);
5764 static void htab_cu_del (void *);
5765 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
5766 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
5767 static void add_sibling_attributes (dw_die_ref);
5768 static void build_abbrev_table (dw_die_ref);
5769 static void output_location_lists (dw_die_ref);
5770 static int constant_size (unsigned HOST_WIDE_INT);
5771 static unsigned long size_of_die (dw_die_ref);
5772 static void calc_die_sizes (dw_die_ref);
5773 static void mark_dies (dw_die_ref);
5774 static void unmark_dies (dw_die_ref);
5775 static void unmark_all_dies (dw_die_ref);
5776 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
5777 static unsigned long size_of_aranges (void);
5778 static enum dwarf_form value_format (dw_attr_ref);
5779 static void output_value_format (dw_attr_ref);
5780 static void output_abbrev_section (void);
5781 static void output_die_symbol (dw_die_ref);
5782 static void output_die (dw_die_ref);
5783 static void output_compilation_unit_header (void);
5784 static void output_comp_unit (dw_die_ref, int);
5785 static const char *dwarf2_name (tree, int);
5786 static void add_pubname (tree, dw_die_ref);
5787 static void add_pubname_string (const char *, dw_die_ref);
5788 static void add_pubtype (tree, dw_die_ref);
5789 static void output_pubnames (VEC (pubname_entry,gc) *);
5790 static void add_arange (tree, dw_die_ref);
5791 static void output_aranges (void);
5792 static unsigned int add_ranges_num (int);
5793 static unsigned int add_ranges (const_tree);
5794 static unsigned int add_ranges_by_labels (const char *, const char *);
5795 static void output_ranges (void);
5796 static void output_line_info (void);
5797 static void output_file_names (void);
5798 static dw_die_ref base_type_die (tree);
5799 static int is_base_type (tree);
5800 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
5801 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
5802 static int type_is_enum (const_tree);
5803 static unsigned int dbx_reg_number (const_rtx);
5804 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
5805 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
5806 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
5807 enum var_init_status);
5808 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
5809 enum var_init_status);
5810 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
5811 enum var_init_status);
5812 static int is_based_loc (const_rtx);
5813 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
5814 enum var_init_status);
5815 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
5816 enum var_init_status);
5817 static dw_loc_descr_ref loc_descriptor (rtx, enum var_init_status);
5818 static dw_loc_descr_ref loc_descriptor_from_tree_1 (tree, int);
5819 static dw_loc_descr_ref loc_descriptor_from_tree (tree);
5820 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
5821 static tree field_type (const_tree);
5822 static unsigned int simple_type_align_in_bits (const_tree);
5823 static unsigned int simple_decl_align_in_bits (const_tree);
5824 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
5825 static HOST_WIDE_INT field_byte_offset (const_tree);
5826 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
5827 dw_loc_descr_ref);
5828 static void add_data_member_location_attribute (dw_die_ref, tree);
5829 static void add_const_value_attribute (dw_die_ref, rtx);
5830 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
5831 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
5832 static void insert_float (const_rtx, unsigned char *);
5833 static rtx rtl_for_decl_location (tree);
5834 static void add_location_or_const_value_attribute (dw_die_ref, tree,
5835 enum dwarf_attribute);
5836 static void tree_add_const_value_attribute (dw_die_ref, tree);
5837 static void add_name_attribute (dw_die_ref, const char *);
5838 static void add_comp_dir_attribute (dw_die_ref);
5839 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
5840 static void add_subscript_info (dw_die_ref, tree, bool);
5841 static void add_byte_size_attribute (dw_die_ref, tree);
5842 static void add_bit_offset_attribute (dw_die_ref, tree);
5843 static void add_bit_size_attribute (dw_die_ref, tree);
5844 static void add_prototyped_attribute (dw_die_ref, tree);
5845 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
5846 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
5847 static void add_src_coords_attributes (dw_die_ref, tree);
5848 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
5849 static void push_decl_scope (tree);
5850 static void pop_decl_scope (void);
5851 static dw_die_ref scope_die_for (tree, dw_die_ref);
5852 static inline int local_scope_p (dw_die_ref);
5853 static inline int class_scope_p (dw_die_ref);
5854 static inline int class_or_namespace_scope_p (dw_die_ref);
5855 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
5856 static void add_calling_convention_attribute (dw_die_ref, tree);
5857 static const char *type_tag (const_tree);
5858 static tree member_declared_type (const_tree);
5859 #if 0
5860 static const char *decl_start_label (tree);
5861 #endif
5862 static void gen_array_type_die (tree, dw_die_ref);
5863 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
5864 #if 0
5865 static void gen_entry_point_die (tree, dw_die_ref);
5866 #endif
5867 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
5868 static dw_die_ref gen_formal_parameter_die (tree, tree, dw_die_ref);
5869 static void gen_unspecified_parameters_die (tree, dw_die_ref);
5870 static void gen_formal_types_die (tree, dw_die_ref);
5871 static void gen_subprogram_die (tree, dw_die_ref);
5872 static void gen_variable_die (tree, tree, dw_die_ref);
5873 static void gen_const_die (tree, dw_die_ref);
5874 static void gen_label_die (tree, dw_die_ref);
5875 static void gen_lexical_block_die (tree, dw_die_ref, int);
5876 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
5877 static void gen_field_die (tree, dw_die_ref);
5878 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
5879 static dw_die_ref gen_compile_unit_die (const char *);
5880 static void gen_inheritance_die (tree, tree, dw_die_ref);
5881 static void gen_member_die (tree, dw_die_ref);
5882 static void gen_struct_or_union_type_die (tree, dw_die_ref,
5883 enum debug_info_usage);
5884 static void gen_subroutine_type_die (tree, dw_die_ref);
5885 static void gen_typedef_die (tree, dw_die_ref);
5886 static void gen_type_die (tree, dw_die_ref);
5887 static void gen_block_die (tree, dw_die_ref, int);
5888 static void decls_for_scope (tree, dw_die_ref, int);
5889 static int is_redundant_typedef (const_tree);
5890 static void gen_namespace_die (tree, dw_die_ref);
5891 static void gen_decl_die (tree, tree, dw_die_ref);
5892 static dw_die_ref force_decl_die (tree);
5893 static dw_die_ref force_type_die (tree);
5894 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
5895 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
5896 static struct dwarf_file_data * lookup_filename (const char *);
5897 static void retry_incomplete_types (void);
5898 static void gen_type_die_for_member (tree, tree, dw_die_ref);
5899 static void splice_child_die (dw_die_ref, dw_die_ref);
5900 static int file_info_cmp (const void *, const void *);
5901 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
5902 const char *, const char *, unsigned);
5903 static void add_loc_descr_to_loc_list (dw_loc_list_ref *, dw_loc_descr_ref,
5904 const char *, const char *,
5905 const char *);
5906 static void output_loc_list (dw_loc_list_ref);
5907 static char *gen_internal_sym (const char *);
5908
5909 static void prune_unmark_dies (dw_die_ref);
5910 static void prune_unused_types_mark (dw_die_ref, int);
5911 static void prune_unused_types_walk (dw_die_ref);
5912 static void prune_unused_types_walk_attribs (dw_die_ref);
5913 static void prune_unused_types_prune (dw_die_ref);
5914 static void prune_unused_types (void);
5915 static int maybe_emit_file (struct dwarf_file_data *fd);
5916
5917 /* Section names used to hold DWARF debugging information. */
5918 #ifndef DEBUG_INFO_SECTION
5919 #define DEBUG_INFO_SECTION ".debug_info"
5920 #endif
5921 #ifndef DEBUG_ABBREV_SECTION
5922 #define DEBUG_ABBREV_SECTION ".debug_abbrev"
5923 #endif
5924 #ifndef DEBUG_ARANGES_SECTION
5925 #define DEBUG_ARANGES_SECTION ".debug_aranges"
5926 #endif
5927 #ifndef DEBUG_MACINFO_SECTION
5928 #define DEBUG_MACINFO_SECTION ".debug_macinfo"
5929 #endif
5930 #ifndef DEBUG_LINE_SECTION
5931 #define DEBUG_LINE_SECTION ".debug_line"
5932 #endif
5933 #ifndef DEBUG_LOC_SECTION
5934 #define DEBUG_LOC_SECTION ".debug_loc"
5935 #endif
5936 #ifndef DEBUG_PUBNAMES_SECTION
5937 #define DEBUG_PUBNAMES_SECTION ".debug_pubnames"
5938 #endif
5939 #ifndef DEBUG_PUBTYPES_SECTION
5940 #define DEBUG_PUBTYPES_SECTION ".debug_pubtypes"
5941 #endif
5942 #ifndef DEBUG_STR_SECTION
5943 #define DEBUG_STR_SECTION ".debug_str"
5944 #endif
5945 #ifndef DEBUG_RANGES_SECTION
5946 #define DEBUG_RANGES_SECTION ".debug_ranges"
5947 #endif
5948
5949 /* Standard ELF section names for compiled code and data. */
5950 #ifndef TEXT_SECTION_NAME
5951 #define TEXT_SECTION_NAME ".text"
5952 #endif
5953
5954 /* Section flags for .debug_str section. */
5955 #define DEBUG_STR_SECTION_FLAGS \
5956 (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings \
5957 ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1 \
5958 : SECTION_DEBUG)
5959
5960 /* Labels we insert at beginning sections we can reference instead of
5961 the section names themselves. */
5962
5963 #ifndef TEXT_SECTION_LABEL
5964 #define TEXT_SECTION_LABEL "Ltext"
5965 #endif
5966 #ifndef COLD_TEXT_SECTION_LABEL
5967 #define COLD_TEXT_SECTION_LABEL "Ltext_cold"
5968 #endif
5969 #ifndef DEBUG_LINE_SECTION_LABEL
5970 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
5971 #endif
5972 #ifndef DEBUG_INFO_SECTION_LABEL
5973 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
5974 #endif
5975 #ifndef DEBUG_ABBREV_SECTION_LABEL
5976 #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev"
5977 #endif
5978 #ifndef DEBUG_LOC_SECTION_LABEL
5979 #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc"
5980 #endif
5981 #ifndef DEBUG_RANGES_SECTION_LABEL
5982 #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges"
5983 #endif
5984 #ifndef DEBUG_MACINFO_SECTION_LABEL
5985 #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo"
5986 #endif
5987
5988 /* Definitions of defaults for formats and names of various special
5989 (artificial) labels which may be generated within this file (when the -g
5990 options is used and DWARF2_DEBUGGING_INFO is in effect.
5991 If necessary, these may be overridden from within the tm.h file, but
5992 typically, overriding these defaults is unnecessary. */
5993
5994 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
5995 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
5996 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
5997 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
5998 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
5999 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6000 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6001 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6002 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6003 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6004
6005 #ifndef TEXT_END_LABEL
6006 #define TEXT_END_LABEL "Letext"
6007 #endif
6008 #ifndef COLD_END_LABEL
6009 #define COLD_END_LABEL "Letext_cold"
6010 #endif
6011 #ifndef BLOCK_BEGIN_LABEL
6012 #define BLOCK_BEGIN_LABEL "LBB"
6013 #endif
6014 #ifndef BLOCK_END_LABEL
6015 #define BLOCK_END_LABEL "LBE"
6016 #endif
6017 #ifndef LINE_CODE_LABEL
6018 #define LINE_CODE_LABEL "LM"
6019 #endif
6020 #ifndef SEPARATE_LINE_CODE_LABEL
6021 #define SEPARATE_LINE_CODE_LABEL "LSM"
6022 #endif
6023
6024 \f
6025 /* We allow a language front-end to designate a function that is to be
6026 called to "demangle" any name before it is put into a DIE. */
6027
6028 static const char *(*demangle_name_func) (const char *);
6029
6030 void
6031 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6032 {
6033 demangle_name_func = func;
6034 }
6035
6036 /* Test if rtl node points to a pseudo register. */
6037
6038 static inline int
6039 is_pseudo_reg (const_rtx rtl)
6040 {
6041 return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6042 || (GET_CODE (rtl) == SUBREG
6043 && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6044 }
6045
6046 /* Return a reference to a type, with its const and volatile qualifiers
6047 removed. */
6048
6049 static inline tree
6050 type_main_variant (tree type)
6051 {
6052 type = TYPE_MAIN_VARIANT (type);
6053
6054 /* ??? There really should be only one main variant among any group of
6055 variants of a given type (and all of the MAIN_VARIANT values for all
6056 members of the group should point to that one type) but sometimes the C
6057 front-end messes this up for array types, so we work around that bug
6058 here. */
6059 if (TREE_CODE (type) == ARRAY_TYPE)
6060 while (type != TYPE_MAIN_VARIANT (type))
6061 type = TYPE_MAIN_VARIANT (type);
6062
6063 return type;
6064 }
6065
6066 /* Return nonzero if the given type node represents a tagged type. */
6067
6068 static inline int
6069 is_tagged_type (const_tree type)
6070 {
6071 enum tree_code code = TREE_CODE (type);
6072
6073 return (code == RECORD_TYPE || code == UNION_TYPE
6074 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6075 }
6076
6077 /* Convert a DIE tag into its string name. */
6078
6079 static const char *
6080 dwarf_tag_name (unsigned int tag)
6081 {
6082 switch (tag)
6083 {
6084 case DW_TAG_padding:
6085 return "DW_TAG_padding";
6086 case DW_TAG_array_type:
6087 return "DW_TAG_array_type";
6088 case DW_TAG_class_type:
6089 return "DW_TAG_class_type";
6090 case DW_TAG_entry_point:
6091 return "DW_TAG_entry_point";
6092 case DW_TAG_enumeration_type:
6093 return "DW_TAG_enumeration_type";
6094 case DW_TAG_formal_parameter:
6095 return "DW_TAG_formal_parameter";
6096 case DW_TAG_imported_declaration:
6097 return "DW_TAG_imported_declaration";
6098 case DW_TAG_label:
6099 return "DW_TAG_label";
6100 case DW_TAG_lexical_block:
6101 return "DW_TAG_lexical_block";
6102 case DW_TAG_member:
6103 return "DW_TAG_member";
6104 case DW_TAG_pointer_type:
6105 return "DW_TAG_pointer_type";
6106 case DW_TAG_reference_type:
6107 return "DW_TAG_reference_type";
6108 case DW_TAG_compile_unit:
6109 return "DW_TAG_compile_unit";
6110 case DW_TAG_string_type:
6111 return "DW_TAG_string_type";
6112 case DW_TAG_structure_type:
6113 return "DW_TAG_structure_type";
6114 case DW_TAG_subroutine_type:
6115 return "DW_TAG_subroutine_type";
6116 case DW_TAG_typedef:
6117 return "DW_TAG_typedef";
6118 case DW_TAG_union_type:
6119 return "DW_TAG_union_type";
6120 case DW_TAG_unspecified_parameters:
6121 return "DW_TAG_unspecified_parameters";
6122 case DW_TAG_variant:
6123 return "DW_TAG_variant";
6124 case DW_TAG_common_block:
6125 return "DW_TAG_common_block";
6126 case DW_TAG_common_inclusion:
6127 return "DW_TAG_common_inclusion";
6128 case DW_TAG_inheritance:
6129 return "DW_TAG_inheritance";
6130 case DW_TAG_inlined_subroutine:
6131 return "DW_TAG_inlined_subroutine";
6132 case DW_TAG_module:
6133 return "DW_TAG_module";
6134 case DW_TAG_ptr_to_member_type:
6135 return "DW_TAG_ptr_to_member_type";
6136 case DW_TAG_set_type:
6137 return "DW_TAG_set_type";
6138 case DW_TAG_subrange_type:
6139 return "DW_TAG_subrange_type";
6140 case DW_TAG_with_stmt:
6141 return "DW_TAG_with_stmt";
6142 case DW_TAG_access_declaration:
6143 return "DW_TAG_access_declaration";
6144 case DW_TAG_base_type:
6145 return "DW_TAG_base_type";
6146 case DW_TAG_catch_block:
6147 return "DW_TAG_catch_block";
6148 case DW_TAG_const_type:
6149 return "DW_TAG_const_type";
6150 case DW_TAG_constant:
6151 return "DW_TAG_constant";
6152 case DW_TAG_enumerator:
6153 return "DW_TAG_enumerator";
6154 case DW_TAG_file_type:
6155 return "DW_TAG_file_type";
6156 case DW_TAG_friend:
6157 return "DW_TAG_friend";
6158 case DW_TAG_namelist:
6159 return "DW_TAG_namelist";
6160 case DW_TAG_namelist_item:
6161 return "DW_TAG_namelist_item";
6162 case DW_TAG_packed_type:
6163 return "DW_TAG_packed_type";
6164 case DW_TAG_subprogram:
6165 return "DW_TAG_subprogram";
6166 case DW_TAG_template_type_param:
6167 return "DW_TAG_template_type_param";
6168 case DW_TAG_template_value_param:
6169 return "DW_TAG_template_value_param";
6170 case DW_TAG_thrown_type:
6171 return "DW_TAG_thrown_type";
6172 case DW_TAG_try_block:
6173 return "DW_TAG_try_block";
6174 case DW_TAG_variant_part:
6175 return "DW_TAG_variant_part";
6176 case DW_TAG_variable:
6177 return "DW_TAG_variable";
6178 case DW_TAG_volatile_type:
6179 return "DW_TAG_volatile_type";
6180 case DW_TAG_dwarf_procedure:
6181 return "DW_TAG_dwarf_procedure";
6182 case DW_TAG_restrict_type:
6183 return "DW_TAG_restrict_type";
6184 case DW_TAG_interface_type:
6185 return "DW_TAG_interface_type";
6186 case DW_TAG_namespace:
6187 return "DW_TAG_namespace";
6188 case DW_TAG_imported_module:
6189 return "DW_TAG_imported_module";
6190 case DW_TAG_unspecified_type:
6191 return "DW_TAG_unspecified_type";
6192 case DW_TAG_partial_unit:
6193 return "DW_TAG_partial_unit";
6194 case DW_TAG_imported_unit:
6195 return "DW_TAG_imported_unit";
6196 case DW_TAG_condition:
6197 return "DW_TAG_condition";
6198 case DW_TAG_shared_type:
6199 return "DW_TAG_shared_type";
6200 case DW_TAG_MIPS_loop:
6201 return "DW_TAG_MIPS_loop";
6202 case DW_TAG_format_label:
6203 return "DW_TAG_format_label";
6204 case DW_TAG_function_template:
6205 return "DW_TAG_function_template";
6206 case DW_TAG_class_template:
6207 return "DW_TAG_class_template";
6208 case DW_TAG_GNU_BINCL:
6209 return "DW_TAG_GNU_BINCL";
6210 case DW_TAG_GNU_EINCL:
6211 return "DW_TAG_GNU_EINCL";
6212 default:
6213 return "DW_TAG_<unknown>";
6214 }
6215 }
6216
6217 /* Convert a DWARF attribute code into its string name. */
6218
6219 static const char *
6220 dwarf_attr_name (unsigned int attr)
6221 {
6222 switch (attr)
6223 {
6224 case DW_AT_sibling:
6225 return "DW_AT_sibling";
6226 case DW_AT_location:
6227 return "DW_AT_location";
6228 case DW_AT_name:
6229 return "DW_AT_name";
6230 case DW_AT_ordering:
6231 return "DW_AT_ordering";
6232 case DW_AT_subscr_data:
6233 return "DW_AT_subscr_data";
6234 case DW_AT_byte_size:
6235 return "DW_AT_byte_size";
6236 case DW_AT_bit_offset:
6237 return "DW_AT_bit_offset";
6238 case DW_AT_bit_size:
6239 return "DW_AT_bit_size";
6240 case DW_AT_element_list:
6241 return "DW_AT_element_list";
6242 case DW_AT_stmt_list:
6243 return "DW_AT_stmt_list";
6244 case DW_AT_low_pc:
6245 return "DW_AT_low_pc";
6246 case DW_AT_high_pc:
6247 return "DW_AT_high_pc";
6248 case DW_AT_language:
6249 return "DW_AT_language";
6250 case DW_AT_member:
6251 return "DW_AT_member";
6252 case DW_AT_discr:
6253 return "DW_AT_discr";
6254 case DW_AT_discr_value:
6255 return "DW_AT_discr_value";
6256 case DW_AT_visibility:
6257 return "DW_AT_visibility";
6258 case DW_AT_import:
6259 return "DW_AT_import";
6260 case DW_AT_string_length:
6261 return "DW_AT_string_length";
6262 case DW_AT_common_reference:
6263 return "DW_AT_common_reference";
6264 case DW_AT_comp_dir:
6265 return "DW_AT_comp_dir";
6266 case DW_AT_const_value:
6267 return "DW_AT_const_value";
6268 case DW_AT_containing_type:
6269 return "DW_AT_containing_type";
6270 case DW_AT_default_value:
6271 return "DW_AT_default_value";
6272 case DW_AT_inline:
6273 return "DW_AT_inline";
6274 case DW_AT_is_optional:
6275 return "DW_AT_is_optional";
6276 case DW_AT_lower_bound:
6277 return "DW_AT_lower_bound";
6278 case DW_AT_producer:
6279 return "DW_AT_producer";
6280 case DW_AT_prototyped:
6281 return "DW_AT_prototyped";
6282 case DW_AT_return_addr:
6283 return "DW_AT_return_addr";
6284 case DW_AT_start_scope:
6285 return "DW_AT_start_scope";
6286 case DW_AT_bit_stride:
6287 return "DW_AT_bit_stride";
6288 case DW_AT_upper_bound:
6289 return "DW_AT_upper_bound";
6290 case DW_AT_abstract_origin:
6291 return "DW_AT_abstract_origin";
6292 case DW_AT_accessibility:
6293 return "DW_AT_accessibility";
6294 case DW_AT_address_class:
6295 return "DW_AT_address_class";
6296 case DW_AT_artificial:
6297 return "DW_AT_artificial";
6298 case DW_AT_base_types:
6299 return "DW_AT_base_types";
6300 case DW_AT_calling_convention:
6301 return "DW_AT_calling_convention";
6302 case DW_AT_count:
6303 return "DW_AT_count";
6304 case DW_AT_data_member_location:
6305 return "DW_AT_data_member_location";
6306 case DW_AT_decl_column:
6307 return "DW_AT_decl_column";
6308 case DW_AT_decl_file:
6309 return "DW_AT_decl_file";
6310 case DW_AT_decl_line:
6311 return "DW_AT_decl_line";
6312 case DW_AT_declaration:
6313 return "DW_AT_declaration";
6314 case DW_AT_discr_list:
6315 return "DW_AT_discr_list";
6316 case DW_AT_encoding:
6317 return "DW_AT_encoding";
6318 case DW_AT_external:
6319 return "DW_AT_external";
6320 case DW_AT_explicit:
6321 return "DW_AT_explicit";
6322 case DW_AT_frame_base:
6323 return "DW_AT_frame_base";
6324 case DW_AT_friend:
6325 return "DW_AT_friend";
6326 case DW_AT_identifier_case:
6327 return "DW_AT_identifier_case";
6328 case DW_AT_macro_info:
6329 return "DW_AT_macro_info";
6330 case DW_AT_namelist_items:
6331 return "DW_AT_namelist_items";
6332 case DW_AT_priority:
6333 return "DW_AT_priority";
6334 case DW_AT_segment:
6335 return "DW_AT_segment";
6336 case DW_AT_specification:
6337 return "DW_AT_specification";
6338 case DW_AT_static_link:
6339 return "DW_AT_static_link";
6340 case DW_AT_type:
6341 return "DW_AT_type";
6342 case DW_AT_use_location:
6343 return "DW_AT_use_location";
6344 case DW_AT_variable_parameter:
6345 return "DW_AT_variable_parameter";
6346 case DW_AT_virtuality:
6347 return "DW_AT_virtuality";
6348 case DW_AT_vtable_elem_location:
6349 return "DW_AT_vtable_elem_location";
6350
6351 case DW_AT_allocated:
6352 return "DW_AT_allocated";
6353 case DW_AT_associated:
6354 return "DW_AT_associated";
6355 case DW_AT_data_location:
6356 return "DW_AT_data_location";
6357 case DW_AT_byte_stride:
6358 return "DW_AT_byte_stride";
6359 case DW_AT_entry_pc:
6360 return "DW_AT_entry_pc";
6361 case DW_AT_use_UTF8:
6362 return "DW_AT_use_UTF8";
6363 case DW_AT_extension:
6364 return "DW_AT_extension";
6365 case DW_AT_ranges:
6366 return "DW_AT_ranges";
6367 case DW_AT_trampoline:
6368 return "DW_AT_trampoline";
6369 case DW_AT_call_column:
6370 return "DW_AT_call_column";
6371 case DW_AT_call_file:
6372 return "DW_AT_call_file";
6373 case DW_AT_call_line:
6374 return "DW_AT_call_line";
6375
6376 case DW_AT_MIPS_fde:
6377 return "DW_AT_MIPS_fde";
6378 case DW_AT_MIPS_loop_begin:
6379 return "DW_AT_MIPS_loop_begin";
6380 case DW_AT_MIPS_tail_loop_begin:
6381 return "DW_AT_MIPS_tail_loop_begin";
6382 case DW_AT_MIPS_epilog_begin:
6383 return "DW_AT_MIPS_epilog_begin";
6384 case DW_AT_MIPS_loop_unroll_factor:
6385 return "DW_AT_MIPS_loop_unroll_factor";
6386 case DW_AT_MIPS_software_pipeline_depth:
6387 return "DW_AT_MIPS_software_pipeline_depth";
6388 case DW_AT_MIPS_linkage_name:
6389 return "DW_AT_MIPS_linkage_name";
6390 case DW_AT_MIPS_stride:
6391 return "DW_AT_MIPS_stride";
6392 case DW_AT_MIPS_abstract_name:
6393 return "DW_AT_MIPS_abstract_name";
6394 case DW_AT_MIPS_clone_origin:
6395 return "DW_AT_MIPS_clone_origin";
6396 case DW_AT_MIPS_has_inlines:
6397 return "DW_AT_MIPS_has_inlines";
6398
6399 case DW_AT_sf_names:
6400 return "DW_AT_sf_names";
6401 case DW_AT_src_info:
6402 return "DW_AT_src_info";
6403 case DW_AT_mac_info:
6404 return "DW_AT_mac_info";
6405 case DW_AT_src_coords:
6406 return "DW_AT_src_coords";
6407 case DW_AT_body_begin:
6408 return "DW_AT_body_begin";
6409 case DW_AT_body_end:
6410 return "DW_AT_body_end";
6411 case DW_AT_GNU_vector:
6412 return "DW_AT_GNU_vector";
6413
6414 case DW_AT_VMS_rtnbeg_pd_address:
6415 return "DW_AT_VMS_rtnbeg_pd_address";
6416
6417 default:
6418 return "DW_AT_<unknown>";
6419 }
6420 }
6421
6422 /* Convert a DWARF value form code into its string name. */
6423
6424 static const char *
6425 dwarf_form_name (unsigned int form)
6426 {
6427 switch (form)
6428 {
6429 case DW_FORM_addr:
6430 return "DW_FORM_addr";
6431 case DW_FORM_block2:
6432 return "DW_FORM_block2";
6433 case DW_FORM_block4:
6434 return "DW_FORM_block4";
6435 case DW_FORM_data2:
6436 return "DW_FORM_data2";
6437 case DW_FORM_data4:
6438 return "DW_FORM_data4";
6439 case DW_FORM_data8:
6440 return "DW_FORM_data8";
6441 case DW_FORM_string:
6442 return "DW_FORM_string";
6443 case DW_FORM_block:
6444 return "DW_FORM_block";
6445 case DW_FORM_block1:
6446 return "DW_FORM_block1";
6447 case DW_FORM_data1:
6448 return "DW_FORM_data1";
6449 case DW_FORM_flag:
6450 return "DW_FORM_flag";
6451 case DW_FORM_sdata:
6452 return "DW_FORM_sdata";
6453 case DW_FORM_strp:
6454 return "DW_FORM_strp";
6455 case DW_FORM_udata:
6456 return "DW_FORM_udata";
6457 case DW_FORM_ref_addr:
6458 return "DW_FORM_ref_addr";
6459 case DW_FORM_ref1:
6460 return "DW_FORM_ref1";
6461 case DW_FORM_ref2:
6462 return "DW_FORM_ref2";
6463 case DW_FORM_ref4:
6464 return "DW_FORM_ref4";
6465 case DW_FORM_ref8:
6466 return "DW_FORM_ref8";
6467 case DW_FORM_ref_udata:
6468 return "DW_FORM_ref_udata";
6469 case DW_FORM_indirect:
6470 return "DW_FORM_indirect";
6471 default:
6472 return "DW_FORM_<unknown>";
6473 }
6474 }
6475 \f
6476 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
6477 instance of an inlined instance of a decl which is local to an inline
6478 function, so we have to trace all of the way back through the origin chain
6479 to find out what sort of node actually served as the original seed for the
6480 given block. */
6481
6482 static tree
6483 decl_ultimate_origin (const_tree decl)
6484 {
6485 if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6486 return NULL_TREE;
6487
6488 /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6489 nodes in the function to point to themselves; ignore that if
6490 we're trying to output the abstract instance of this function. */
6491 if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6492 return NULL_TREE;
6493
6494 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6495 most distant ancestor, this should never happen. */
6496 gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6497
6498 return DECL_ABSTRACT_ORIGIN (decl);
6499 }
6500
6501 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
6502 of a virtual function may refer to a base class, so we check the 'this'
6503 parameter. */
6504
6505 static tree
6506 decl_class_context (tree decl)
6507 {
6508 tree context = NULL_TREE;
6509
6510 if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6511 context = DECL_CONTEXT (decl);
6512 else
6513 context = TYPE_MAIN_VARIANT
6514 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6515
6516 if (context && !TYPE_P (context))
6517 context = NULL_TREE;
6518
6519 return context;
6520 }
6521 \f
6522 /* Add an attribute/value pair to a DIE. */
6523
6524 static inline void
6525 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
6526 {
6527 /* Maybe this should be an assert? */
6528 if (die == NULL)
6529 return;
6530
6531 if (die->die_attr == NULL)
6532 die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
6533 VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
6534 }
6535
6536 static inline enum dw_val_class
6537 AT_class (dw_attr_ref a)
6538 {
6539 return a->dw_attr_val.val_class;
6540 }
6541
6542 /* Add a flag value attribute to a DIE. */
6543
6544 static inline void
6545 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
6546 {
6547 dw_attr_node attr;
6548
6549 attr.dw_attr = attr_kind;
6550 attr.dw_attr_val.val_class = dw_val_class_flag;
6551 attr.dw_attr_val.v.val_flag = flag;
6552 add_dwarf_attr (die, &attr);
6553 }
6554
6555 static inline unsigned
6556 AT_flag (dw_attr_ref a)
6557 {
6558 gcc_assert (a && AT_class (a) == dw_val_class_flag);
6559 return a->dw_attr_val.v.val_flag;
6560 }
6561
6562 /* Add a signed integer attribute value to a DIE. */
6563
6564 static inline void
6565 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
6566 {
6567 dw_attr_node attr;
6568
6569 attr.dw_attr = attr_kind;
6570 attr.dw_attr_val.val_class = dw_val_class_const;
6571 attr.dw_attr_val.v.val_int = int_val;
6572 add_dwarf_attr (die, &attr);
6573 }
6574
6575 static inline HOST_WIDE_INT
6576 AT_int (dw_attr_ref a)
6577 {
6578 gcc_assert (a && AT_class (a) == dw_val_class_const);
6579 return a->dw_attr_val.v.val_int;
6580 }
6581
6582 /* Add an unsigned integer attribute value to a DIE. */
6583
6584 static inline void
6585 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
6586 unsigned HOST_WIDE_INT unsigned_val)
6587 {
6588 dw_attr_node attr;
6589
6590 attr.dw_attr = attr_kind;
6591 attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
6592 attr.dw_attr_val.v.val_unsigned = unsigned_val;
6593 add_dwarf_attr (die, &attr);
6594 }
6595
6596 static inline unsigned HOST_WIDE_INT
6597 AT_unsigned (dw_attr_ref a)
6598 {
6599 gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
6600 return a->dw_attr_val.v.val_unsigned;
6601 }
6602
6603 /* Add an unsigned double integer attribute value to a DIE. */
6604
6605 static inline void
6606 add_AT_long_long (dw_die_ref die, enum dwarf_attribute attr_kind,
6607 long unsigned int val_hi, long unsigned int val_low)
6608 {
6609 dw_attr_node attr;
6610
6611 attr.dw_attr = attr_kind;
6612 attr.dw_attr_val.val_class = dw_val_class_long_long;
6613 attr.dw_attr_val.v.val_long_long.hi = val_hi;
6614 attr.dw_attr_val.v.val_long_long.low = val_low;
6615 add_dwarf_attr (die, &attr);
6616 }
6617
6618 /* Add a floating point attribute value to a DIE and return it. */
6619
6620 static inline void
6621 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
6622 unsigned int length, unsigned int elt_size, unsigned char *array)
6623 {
6624 dw_attr_node attr;
6625
6626 attr.dw_attr = attr_kind;
6627 attr.dw_attr_val.val_class = dw_val_class_vec;
6628 attr.dw_attr_val.v.val_vec.length = length;
6629 attr.dw_attr_val.v.val_vec.elt_size = elt_size;
6630 attr.dw_attr_val.v.val_vec.array = array;
6631 add_dwarf_attr (die, &attr);
6632 }
6633
6634 /* Hash and equality functions for debug_str_hash. */
6635
6636 static hashval_t
6637 debug_str_do_hash (const void *x)
6638 {
6639 return htab_hash_string (((const struct indirect_string_node *)x)->str);
6640 }
6641
6642 static int
6643 debug_str_eq (const void *x1, const void *x2)
6644 {
6645 return strcmp ((((const struct indirect_string_node *)x1)->str),
6646 (const char *)x2) == 0;
6647 }
6648
6649 static struct indirect_string_node *
6650 find_AT_string (const char *str)
6651 {
6652 struct indirect_string_node *node;
6653 void **slot;
6654
6655 if (! debug_str_hash)
6656 debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
6657 debug_str_eq, NULL);
6658
6659 slot = htab_find_slot_with_hash (debug_str_hash, str,
6660 htab_hash_string (str), INSERT);
6661 if (*slot == NULL)
6662 {
6663 node = (struct indirect_string_node *)
6664 ggc_alloc_cleared (sizeof (struct indirect_string_node));
6665 node->str = ggc_strdup (str);
6666 *slot = node;
6667 }
6668 else
6669 node = (struct indirect_string_node *) *slot;
6670
6671 node->refcount++;
6672 return node;
6673 }
6674
6675 /* Add a string attribute value to a DIE. */
6676
6677 static inline void
6678 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
6679 {
6680 dw_attr_node attr;
6681 struct indirect_string_node *node;
6682
6683 node = find_AT_string (str);
6684
6685 attr.dw_attr = attr_kind;
6686 attr.dw_attr_val.val_class = dw_val_class_str;
6687 attr.dw_attr_val.v.val_str = node;
6688 add_dwarf_attr (die, &attr);
6689 }
6690
6691 static inline const char *
6692 AT_string (dw_attr_ref a)
6693 {
6694 gcc_assert (a && AT_class (a) == dw_val_class_str);
6695 return a->dw_attr_val.v.val_str->str;
6696 }
6697
6698 /* Find out whether a string should be output inline in DIE
6699 or out-of-line in .debug_str section. */
6700
6701 static enum dwarf_form
6702 AT_string_form (dw_attr_ref a)
6703 {
6704 struct indirect_string_node *node;
6705 unsigned int len;
6706 char label[32];
6707
6708 gcc_assert (a && AT_class (a) == dw_val_class_str);
6709
6710 node = a->dw_attr_val.v.val_str;
6711 if (node->form)
6712 return node->form;
6713
6714 len = strlen (node->str) + 1;
6715
6716 /* If the string is shorter or equal to the size of the reference, it is
6717 always better to put it inline. */
6718 if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
6719 return node->form = DW_FORM_string;
6720
6721 /* If we cannot expect the linker to merge strings in .debug_str
6722 section, only put it into .debug_str if it is worth even in this
6723 single module. */
6724 if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
6725 || ((debug_str_section->common.flags & SECTION_MERGE) == 0
6726 && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
6727 return node->form = DW_FORM_string;
6728
6729 ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
6730 ++dw2_string_counter;
6731 node->label = xstrdup (label);
6732
6733 return node->form = DW_FORM_strp;
6734 }
6735
6736 /* Add a DIE reference attribute value to a DIE. */
6737
6738 static inline void
6739 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
6740 {
6741 dw_attr_node attr;
6742
6743 attr.dw_attr = attr_kind;
6744 attr.dw_attr_val.val_class = dw_val_class_die_ref;
6745 attr.dw_attr_val.v.val_die_ref.die = targ_die;
6746 attr.dw_attr_val.v.val_die_ref.external = 0;
6747 add_dwarf_attr (die, &attr);
6748 }
6749
6750 /* Add an AT_specification attribute to a DIE, and also make the back
6751 pointer from the specification to the definition. */
6752
6753 static inline void
6754 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
6755 {
6756 add_AT_die_ref (die, DW_AT_specification, targ_die);
6757 gcc_assert (!targ_die->die_definition);
6758 targ_die->die_definition = die;
6759 }
6760
6761 static inline dw_die_ref
6762 AT_ref (dw_attr_ref a)
6763 {
6764 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
6765 return a->dw_attr_val.v.val_die_ref.die;
6766 }
6767
6768 static inline int
6769 AT_ref_external (dw_attr_ref a)
6770 {
6771 if (a && AT_class (a) == dw_val_class_die_ref)
6772 return a->dw_attr_val.v.val_die_ref.external;
6773
6774 return 0;
6775 }
6776
6777 static inline void
6778 set_AT_ref_external (dw_attr_ref a, int i)
6779 {
6780 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
6781 a->dw_attr_val.v.val_die_ref.external = i;
6782 }
6783
6784 /* Add an FDE reference attribute value to a DIE. */
6785
6786 static inline void
6787 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
6788 {
6789 dw_attr_node attr;
6790
6791 attr.dw_attr = attr_kind;
6792 attr.dw_attr_val.val_class = dw_val_class_fde_ref;
6793 attr.dw_attr_val.v.val_fde_index = targ_fde;
6794 add_dwarf_attr (die, &attr);
6795 }
6796
6797 /* Add a location description attribute value to a DIE. */
6798
6799 static inline void
6800 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
6801 {
6802 dw_attr_node attr;
6803
6804 attr.dw_attr = attr_kind;
6805 attr.dw_attr_val.val_class = dw_val_class_loc;
6806 attr.dw_attr_val.v.val_loc = loc;
6807 add_dwarf_attr (die, &attr);
6808 }
6809
6810 static inline dw_loc_descr_ref
6811 AT_loc (dw_attr_ref a)
6812 {
6813 gcc_assert (a && AT_class (a) == dw_val_class_loc);
6814 return a->dw_attr_val.v.val_loc;
6815 }
6816
6817 static inline void
6818 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
6819 {
6820 dw_attr_node attr;
6821
6822 attr.dw_attr = attr_kind;
6823 attr.dw_attr_val.val_class = dw_val_class_loc_list;
6824 attr.dw_attr_val.v.val_loc_list = loc_list;
6825 add_dwarf_attr (die, &attr);
6826 have_location_lists = true;
6827 }
6828
6829 static inline dw_loc_list_ref
6830 AT_loc_list (dw_attr_ref a)
6831 {
6832 gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
6833 return a->dw_attr_val.v.val_loc_list;
6834 }
6835
6836 /* Add an address constant attribute value to a DIE. */
6837
6838 static inline void
6839 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
6840 {
6841 dw_attr_node attr;
6842
6843 attr.dw_attr = attr_kind;
6844 attr.dw_attr_val.val_class = dw_val_class_addr;
6845 attr.dw_attr_val.v.val_addr = addr;
6846 add_dwarf_attr (die, &attr);
6847 }
6848
6849 /* Get the RTX from to an address DIE attribute. */
6850
6851 static inline rtx
6852 AT_addr (dw_attr_ref a)
6853 {
6854 gcc_assert (a && AT_class (a) == dw_val_class_addr);
6855 return a->dw_attr_val.v.val_addr;
6856 }
6857
6858 /* Add a file attribute value to a DIE. */
6859
6860 static inline void
6861 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
6862 struct dwarf_file_data *fd)
6863 {
6864 dw_attr_node attr;
6865
6866 attr.dw_attr = attr_kind;
6867 attr.dw_attr_val.val_class = dw_val_class_file;
6868 attr.dw_attr_val.v.val_file = fd;
6869 add_dwarf_attr (die, &attr);
6870 }
6871
6872 /* Get the dwarf_file_data from a file DIE attribute. */
6873
6874 static inline struct dwarf_file_data *
6875 AT_file (dw_attr_ref a)
6876 {
6877 gcc_assert (a && AT_class (a) == dw_val_class_file);
6878 return a->dw_attr_val.v.val_file;
6879 }
6880
6881 /* Add a label identifier attribute value to a DIE. */
6882
6883 static inline void
6884 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
6885 {
6886 dw_attr_node attr;
6887
6888 attr.dw_attr = attr_kind;
6889 attr.dw_attr_val.val_class = dw_val_class_lbl_id;
6890 attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
6891 add_dwarf_attr (die, &attr);
6892 }
6893
6894 /* Add a section offset attribute value to a DIE, an offset into the
6895 debug_line section. */
6896
6897 static inline void
6898 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
6899 const char *label)
6900 {
6901 dw_attr_node attr;
6902
6903 attr.dw_attr = attr_kind;
6904 attr.dw_attr_val.val_class = dw_val_class_lineptr;
6905 attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
6906 add_dwarf_attr (die, &attr);
6907 }
6908
6909 /* Add a section offset attribute value to a DIE, an offset into the
6910 debug_macinfo section. */
6911
6912 static inline void
6913 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
6914 const char *label)
6915 {
6916 dw_attr_node attr;
6917
6918 attr.dw_attr = attr_kind;
6919 attr.dw_attr_val.val_class = dw_val_class_macptr;
6920 attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
6921 add_dwarf_attr (die, &attr);
6922 }
6923
6924 /* Add an offset attribute value to a DIE. */
6925
6926 static inline void
6927 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
6928 unsigned HOST_WIDE_INT offset)
6929 {
6930 dw_attr_node attr;
6931
6932 attr.dw_attr = attr_kind;
6933 attr.dw_attr_val.val_class = dw_val_class_offset;
6934 attr.dw_attr_val.v.val_offset = offset;
6935 add_dwarf_attr (die, &attr);
6936 }
6937
6938 /* Add an range_list attribute value to a DIE. */
6939
6940 static void
6941 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
6942 long unsigned int offset)
6943 {
6944 dw_attr_node attr;
6945
6946 attr.dw_attr = attr_kind;
6947 attr.dw_attr_val.val_class = dw_val_class_range_list;
6948 attr.dw_attr_val.v.val_offset = offset;
6949 add_dwarf_attr (die, &attr);
6950 }
6951
6952 static inline const char *
6953 AT_lbl (dw_attr_ref a)
6954 {
6955 gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
6956 || AT_class (a) == dw_val_class_lineptr
6957 || AT_class (a) == dw_val_class_macptr));
6958 return a->dw_attr_val.v.val_lbl_id;
6959 }
6960
6961 /* Get the attribute of type attr_kind. */
6962
6963 static dw_attr_ref
6964 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
6965 {
6966 dw_attr_ref a;
6967 unsigned ix;
6968 dw_die_ref spec = NULL;
6969
6970 if (! die)
6971 return NULL;
6972
6973 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6974 if (a->dw_attr == attr_kind)
6975 return a;
6976 else if (a->dw_attr == DW_AT_specification
6977 || a->dw_attr == DW_AT_abstract_origin)
6978 spec = AT_ref (a);
6979
6980 if (spec)
6981 return get_AT (spec, attr_kind);
6982
6983 return NULL;
6984 }
6985
6986 /* Return the "low pc" attribute value, typically associated with a subprogram
6987 DIE. Return null if the "low pc" attribute is either not present, or if it
6988 cannot be represented as an assembler label identifier. */
6989
6990 static inline const char *
6991 get_AT_low_pc (dw_die_ref die)
6992 {
6993 dw_attr_ref a = get_AT (die, DW_AT_low_pc);
6994
6995 return a ? AT_lbl (a) : NULL;
6996 }
6997
6998 /* Return the "high pc" attribute value, typically associated with a subprogram
6999 DIE. Return null if the "high pc" attribute is either not present, or if it
7000 cannot be represented as an assembler label identifier. */
7001
7002 static inline const char *
7003 get_AT_hi_pc (dw_die_ref die)
7004 {
7005 dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7006
7007 return a ? AT_lbl (a) : NULL;
7008 }
7009
7010 /* Return the value of the string attribute designated by ATTR_KIND, or
7011 NULL if it is not present. */
7012
7013 static inline const char *
7014 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7015 {
7016 dw_attr_ref a = get_AT (die, attr_kind);
7017
7018 return a ? AT_string (a) : NULL;
7019 }
7020
7021 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7022 if it is not present. */
7023
7024 static inline int
7025 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7026 {
7027 dw_attr_ref a = get_AT (die, attr_kind);
7028
7029 return a ? AT_flag (a) : 0;
7030 }
7031
7032 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7033 if it is not present. */
7034
7035 static inline unsigned
7036 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7037 {
7038 dw_attr_ref a = get_AT (die, attr_kind);
7039
7040 return a ? AT_unsigned (a) : 0;
7041 }
7042
7043 static inline dw_die_ref
7044 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7045 {
7046 dw_attr_ref a = get_AT (die, attr_kind);
7047
7048 return a ? AT_ref (a) : NULL;
7049 }
7050
7051 static inline struct dwarf_file_data *
7052 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7053 {
7054 dw_attr_ref a = get_AT (die, attr_kind);
7055
7056 return a ? AT_file (a) : NULL;
7057 }
7058
7059 /* Return TRUE if the language is C or C++. */
7060
7061 static inline bool
7062 is_c_family (void)
7063 {
7064 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7065
7066 return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_ObjC
7067 || lang == DW_LANG_C99
7068 || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus);
7069 }
7070
7071 /* Return TRUE if the language is C++. */
7072
7073 static inline bool
7074 is_cxx (void)
7075 {
7076 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7077
7078 return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7079 }
7080
7081 /* Return TRUE if the language is Fortran. */
7082
7083 static inline bool
7084 is_fortran (void)
7085 {
7086 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7087
7088 return (lang == DW_LANG_Fortran77
7089 || lang == DW_LANG_Fortran90
7090 || lang == DW_LANG_Fortran95);
7091 }
7092
7093 /* Return TRUE if the language is Java. */
7094
7095 static inline bool
7096 is_java (void)
7097 {
7098 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7099
7100 return lang == DW_LANG_Java;
7101 }
7102
7103 /* Return TRUE if the language is Ada. */
7104
7105 static inline bool
7106 is_ada (void)
7107 {
7108 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7109
7110 return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7111 }
7112
7113 /* Remove the specified attribute if present. */
7114
7115 static void
7116 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7117 {
7118 dw_attr_ref a;
7119 unsigned ix;
7120
7121 if (! die)
7122 return;
7123
7124 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7125 if (a->dw_attr == attr_kind)
7126 {
7127 if (AT_class (a) == dw_val_class_str)
7128 if (a->dw_attr_val.v.val_str->refcount)
7129 a->dw_attr_val.v.val_str->refcount--;
7130
7131 /* VEC_ordered_remove should help reduce the number of abbrevs
7132 that are needed. */
7133 VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7134 return;
7135 }
7136 }
7137
7138 /* Remove CHILD from its parent. PREV must have the property that
7139 PREV->DIE_SIB == CHILD. Does not alter CHILD. */
7140
7141 static void
7142 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7143 {
7144 gcc_assert (child->die_parent == prev->die_parent);
7145 gcc_assert (prev->die_sib == child);
7146 if (prev == child)
7147 {
7148 gcc_assert (child->die_parent->die_child == child);
7149 prev = NULL;
7150 }
7151 else
7152 prev->die_sib = child->die_sib;
7153 if (child->die_parent->die_child == child)
7154 child->die_parent->die_child = prev;
7155 }
7156
7157 /* Remove child DIE whose die_tag is TAG. Do nothing if no child
7158 matches TAG. */
7159
7160 static void
7161 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7162 {
7163 dw_die_ref c;
7164
7165 c = die->die_child;
7166 if (c) do {
7167 dw_die_ref prev = c;
7168 c = c->die_sib;
7169 while (c->die_tag == tag)
7170 {
7171 remove_child_with_prev (c, prev);
7172 /* Might have removed every child. */
7173 if (c == c->die_sib)
7174 return;
7175 c = c->die_sib;
7176 }
7177 } while (c != die->die_child);
7178 }
7179
7180 /* Add a CHILD_DIE as the last child of DIE. */
7181
7182 static void
7183 add_child_die (dw_die_ref die, dw_die_ref child_die)
7184 {
7185 /* FIXME this should probably be an assert. */
7186 if (! die || ! child_die)
7187 return;
7188 gcc_assert (die != child_die);
7189
7190 child_die->die_parent = die;
7191 if (die->die_child)
7192 {
7193 child_die->die_sib = die->die_child->die_sib;
7194 die->die_child->die_sib = child_die;
7195 }
7196 else
7197 child_die->die_sib = child_die;
7198 die->die_child = child_die;
7199 }
7200
7201 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7202 is the specification, to the end of PARENT's list of children.
7203 This is done by removing and re-adding it. */
7204
7205 static void
7206 splice_child_die (dw_die_ref parent, dw_die_ref child)
7207 {
7208 dw_die_ref p;
7209
7210 /* We want the declaration DIE from inside the class, not the
7211 specification DIE at toplevel. */
7212 if (child->die_parent != parent)
7213 {
7214 dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7215
7216 if (tmp)
7217 child = tmp;
7218 }
7219
7220 gcc_assert (child->die_parent == parent
7221 || (child->die_parent
7222 == get_AT_ref (parent, DW_AT_specification)));
7223
7224 for (p = child->die_parent->die_child; ; p = p->die_sib)
7225 if (p->die_sib == child)
7226 {
7227 remove_child_with_prev (child, p);
7228 break;
7229 }
7230
7231 add_child_die (parent, child);
7232 }
7233
7234 /* Return a pointer to a newly created DIE node. */
7235
7236 static inline dw_die_ref
7237 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7238 {
7239 dw_die_ref die = GGC_CNEW (die_node);
7240
7241 die->die_tag = tag_value;
7242
7243 if (parent_die != NULL)
7244 add_child_die (parent_die, die);
7245 else
7246 {
7247 limbo_die_node *limbo_node;
7248
7249 limbo_node = GGC_CNEW (limbo_die_node);
7250 limbo_node->die = die;
7251 limbo_node->created_for = t;
7252 limbo_node->next = limbo_die_list;
7253 limbo_die_list = limbo_node;
7254 }
7255
7256 return die;
7257 }
7258
7259 /* Return the DIE associated with the given type specifier. */
7260
7261 static inline dw_die_ref
7262 lookup_type_die (tree type)
7263 {
7264 return TYPE_SYMTAB_DIE (type);
7265 }
7266
7267 /* Equate a DIE to a given type specifier. */
7268
7269 static inline void
7270 equate_type_number_to_die (tree type, dw_die_ref type_die)
7271 {
7272 TYPE_SYMTAB_DIE (type) = type_die;
7273 }
7274
7275 /* Returns a hash value for X (which really is a die_struct). */
7276
7277 static hashval_t
7278 decl_die_table_hash (const void *x)
7279 {
7280 return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7281 }
7282
7283 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y. */
7284
7285 static int
7286 decl_die_table_eq (const void *x, const void *y)
7287 {
7288 return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7289 }
7290
7291 /* Return the DIE associated with a given declaration. */
7292
7293 static inline dw_die_ref
7294 lookup_decl_die (tree decl)
7295 {
7296 return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7297 }
7298
7299 /* Returns a hash value for X (which really is a var_loc_list). */
7300
7301 static hashval_t
7302 decl_loc_table_hash (const void *x)
7303 {
7304 return (hashval_t) ((const var_loc_list *) x)->decl_id;
7305 }
7306
7307 /* Return nonzero if decl_id of var_loc_list X is the same as
7308 UID of decl *Y. */
7309
7310 static int
7311 decl_loc_table_eq (const void *x, const void *y)
7312 {
7313 return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7314 }
7315
7316 /* Return the var_loc list associated with a given declaration. */
7317
7318 static inline var_loc_list *
7319 lookup_decl_loc (const_tree decl)
7320 {
7321 return (var_loc_list *)
7322 htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7323 }
7324
7325 /* Equate a DIE to a particular declaration. */
7326
7327 static void
7328 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7329 {
7330 unsigned int decl_id = DECL_UID (decl);
7331 void **slot;
7332
7333 slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7334 *slot = decl_die;
7335 decl_die->decl_id = decl_id;
7336 }
7337
7338 /* Add a variable location node to the linked list for DECL. */
7339
7340 static void
7341 add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
7342 {
7343 unsigned int decl_id = DECL_UID (decl);
7344 var_loc_list *temp;
7345 void **slot;
7346
7347 slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
7348 if (*slot == NULL)
7349 {
7350 temp = GGC_CNEW (var_loc_list);
7351 temp->decl_id = decl_id;
7352 *slot = temp;
7353 }
7354 else
7355 temp = (var_loc_list *) *slot;
7356
7357 if (temp->last)
7358 {
7359 /* If the current location is the same as the end of the list,
7360 and either both or neither of the locations is uninitialized,
7361 we have nothing to do. */
7362 if ((!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
7363 NOTE_VAR_LOCATION_LOC (loc->var_loc_note)))
7364 || ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7365 != NOTE_VAR_LOCATION_STATUS (loc->var_loc_note))
7366 && ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7367 == VAR_INIT_STATUS_UNINITIALIZED)
7368 || (NOTE_VAR_LOCATION_STATUS (loc->var_loc_note)
7369 == VAR_INIT_STATUS_UNINITIALIZED))))
7370 {
7371 /* Add LOC to the end of list and update LAST. */
7372 temp->last->next = loc;
7373 temp->last = loc;
7374 }
7375 }
7376 /* Do not add empty location to the beginning of the list. */
7377 else if (NOTE_VAR_LOCATION_LOC (loc->var_loc_note) != NULL_RTX)
7378 {
7379 temp->first = loc;
7380 temp->last = loc;
7381 }
7382 }
7383 \f
7384 /* Keep track of the number of spaces used to indent the
7385 output of the debugging routines that print the structure of
7386 the DIE internal representation. */
7387 static int print_indent;
7388
7389 /* Indent the line the number of spaces given by print_indent. */
7390
7391 static inline void
7392 print_spaces (FILE *outfile)
7393 {
7394 fprintf (outfile, "%*s", print_indent, "");
7395 }
7396
7397 /* Print the information associated with a given DIE, and its children.
7398 This routine is a debugging aid only. */
7399
7400 static void
7401 print_die (dw_die_ref die, FILE *outfile)
7402 {
7403 dw_attr_ref a;
7404 dw_die_ref c;
7405 unsigned ix;
7406
7407 print_spaces (outfile);
7408 fprintf (outfile, "DIE %4ld: %s\n",
7409 die->die_offset, dwarf_tag_name (die->die_tag));
7410 print_spaces (outfile);
7411 fprintf (outfile, " abbrev id: %lu", die->die_abbrev);
7412 fprintf (outfile, " offset: %ld\n", die->die_offset);
7413
7414 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7415 {
7416 print_spaces (outfile);
7417 fprintf (outfile, " %s: ", dwarf_attr_name (a->dw_attr));
7418
7419 switch (AT_class (a))
7420 {
7421 case dw_val_class_addr:
7422 fprintf (outfile, "address");
7423 break;
7424 case dw_val_class_offset:
7425 fprintf (outfile, "offset");
7426 break;
7427 case dw_val_class_loc:
7428 fprintf (outfile, "location descriptor");
7429 break;
7430 case dw_val_class_loc_list:
7431 fprintf (outfile, "location list -> label:%s",
7432 AT_loc_list (a)->ll_symbol);
7433 break;
7434 case dw_val_class_range_list:
7435 fprintf (outfile, "range list");
7436 break;
7437 case dw_val_class_const:
7438 fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
7439 break;
7440 case dw_val_class_unsigned_const:
7441 fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
7442 break;
7443 case dw_val_class_long_long:
7444 fprintf (outfile, "constant (%lu,%lu)",
7445 a->dw_attr_val.v.val_long_long.hi,
7446 a->dw_attr_val.v.val_long_long.low);
7447 break;
7448 case dw_val_class_vec:
7449 fprintf (outfile, "floating-point or vector constant");
7450 break;
7451 case dw_val_class_flag:
7452 fprintf (outfile, "%u", AT_flag (a));
7453 break;
7454 case dw_val_class_die_ref:
7455 if (AT_ref (a) != NULL)
7456 {
7457 if (AT_ref (a)->die_symbol)
7458 fprintf (outfile, "die -> label: %s", AT_ref (a)->die_symbol);
7459 else
7460 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
7461 }
7462 else
7463 fprintf (outfile, "die -> <null>");
7464 break;
7465 case dw_val_class_lbl_id:
7466 case dw_val_class_lineptr:
7467 case dw_val_class_macptr:
7468 fprintf (outfile, "label: %s", AT_lbl (a));
7469 break;
7470 case dw_val_class_str:
7471 if (AT_string (a) != NULL)
7472 fprintf (outfile, "\"%s\"", AT_string (a));
7473 else
7474 fprintf (outfile, "<null>");
7475 break;
7476 case dw_val_class_file:
7477 fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
7478 AT_file (a)->emitted_number);
7479 break;
7480 default:
7481 break;
7482 }
7483
7484 fprintf (outfile, "\n");
7485 }
7486
7487 if (die->die_child != NULL)
7488 {
7489 print_indent += 4;
7490 FOR_EACH_CHILD (die, c, print_die (c, outfile));
7491 print_indent -= 4;
7492 }
7493 if (print_indent == 0)
7494 fprintf (outfile, "\n");
7495 }
7496
7497 /* Print the contents of the source code line number correspondence table.
7498 This routine is a debugging aid only. */
7499
7500 static void
7501 print_dwarf_line_table (FILE *outfile)
7502 {
7503 unsigned i;
7504 dw_line_info_ref line_info;
7505
7506 fprintf (outfile, "\n\nDWARF source line information\n");
7507 for (i = 1; i < line_info_table_in_use; i++)
7508 {
7509 line_info = &line_info_table[i];
7510 fprintf (outfile, "%5d: %4ld %6ld\n", i,
7511 line_info->dw_file_num,
7512 line_info->dw_line_num);
7513 }
7514
7515 fprintf (outfile, "\n\n");
7516 }
7517
7518 /* Print the information collected for a given DIE. */
7519
7520 void
7521 debug_dwarf_die (dw_die_ref die)
7522 {
7523 print_die (die, stderr);
7524 }
7525
7526 /* Print all DWARF information collected for the compilation unit.
7527 This routine is a debugging aid only. */
7528
7529 void
7530 debug_dwarf (void)
7531 {
7532 print_indent = 0;
7533 print_die (comp_unit_die, stderr);
7534 if (! DWARF2_ASM_LINE_DEBUG_INFO)
7535 print_dwarf_line_table (stderr);
7536 }
7537 \f
7538 /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU
7539 for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL
7540 DIE that marks the start of the DIEs for this include file. */
7541
7542 static dw_die_ref
7543 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
7544 {
7545 const char *filename = get_AT_string (bincl_die, DW_AT_name);
7546 dw_die_ref new_unit = gen_compile_unit_die (filename);
7547
7548 new_unit->die_sib = old_unit;
7549 return new_unit;
7550 }
7551
7552 /* Close an include-file CU and reopen the enclosing one. */
7553
7554 static dw_die_ref
7555 pop_compile_unit (dw_die_ref old_unit)
7556 {
7557 dw_die_ref new_unit = old_unit->die_sib;
7558
7559 old_unit->die_sib = NULL;
7560 return new_unit;
7561 }
7562
7563 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
7564 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
7565
7566 /* Calculate the checksum of a location expression. */
7567
7568 static inline void
7569 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
7570 {
7571 int tem;
7572
7573 tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
7574 CHECKSUM (tem);
7575 CHECKSUM (loc->dw_loc_oprnd1);
7576 CHECKSUM (loc->dw_loc_oprnd2);
7577 }
7578
7579 /* Calculate the checksum of an attribute. */
7580
7581 static void
7582 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
7583 {
7584 dw_loc_descr_ref loc;
7585 rtx r;
7586
7587 CHECKSUM (at->dw_attr);
7588
7589 /* We don't care that this was compiled with a different compiler
7590 snapshot; if the output is the same, that's what matters. */
7591 if (at->dw_attr == DW_AT_producer)
7592 return;
7593
7594 switch (AT_class (at))
7595 {
7596 case dw_val_class_const:
7597 CHECKSUM (at->dw_attr_val.v.val_int);
7598 break;
7599 case dw_val_class_unsigned_const:
7600 CHECKSUM (at->dw_attr_val.v.val_unsigned);
7601 break;
7602 case dw_val_class_long_long:
7603 CHECKSUM (at->dw_attr_val.v.val_long_long);
7604 break;
7605 case dw_val_class_vec:
7606 CHECKSUM (at->dw_attr_val.v.val_vec);
7607 break;
7608 case dw_val_class_flag:
7609 CHECKSUM (at->dw_attr_val.v.val_flag);
7610 break;
7611 case dw_val_class_str:
7612 CHECKSUM_STRING (AT_string (at));
7613 break;
7614
7615 case dw_val_class_addr:
7616 r = AT_addr (at);
7617 gcc_assert (GET_CODE (r) == SYMBOL_REF);
7618 CHECKSUM_STRING (XSTR (r, 0));
7619 break;
7620
7621 case dw_val_class_offset:
7622 CHECKSUM (at->dw_attr_val.v.val_offset);
7623 break;
7624
7625 case dw_val_class_loc:
7626 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
7627 loc_checksum (loc, ctx);
7628 break;
7629
7630 case dw_val_class_die_ref:
7631 die_checksum (AT_ref (at), ctx, mark);
7632 break;
7633
7634 case dw_val_class_fde_ref:
7635 case dw_val_class_lbl_id:
7636 case dw_val_class_lineptr:
7637 case dw_val_class_macptr:
7638 break;
7639
7640 case dw_val_class_file:
7641 CHECKSUM_STRING (AT_file (at)->filename);
7642 break;
7643
7644 default:
7645 break;
7646 }
7647 }
7648
7649 /* Calculate the checksum of a DIE. */
7650
7651 static void
7652 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
7653 {
7654 dw_die_ref c;
7655 dw_attr_ref a;
7656 unsigned ix;
7657
7658 /* To avoid infinite recursion. */
7659 if (die->die_mark)
7660 {
7661 CHECKSUM (die->die_mark);
7662 return;
7663 }
7664 die->die_mark = ++(*mark);
7665
7666 CHECKSUM (die->die_tag);
7667
7668 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7669 attr_checksum (a, ctx, mark);
7670
7671 FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
7672 }
7673
7674 #undef CHECKSUM
7675 #undef CHECKSUM_STRING
7676
7677 /* Do the location expressions look same? */
7678 static inline int
7679 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
7680 {
7681 return loc1->dw_loc_opc == loc2->dw_loc_opc
7682 && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
7683 && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
7684 }
7685
7686 /* Do the values look the same? */
7687 static int
7688 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
7689 {
7690 dw_loc_descr_ref loc1, loc2;
7691 rtx r1, r2;
7692
7693 if (v1->val_class != v2->val_class)
7694 return 0;
7695
7696 switch (v1->val_class)
7697 {
7698 case dw_val_class_const:
7699 return v1->v.val_int == v2->v.val_int;
7700 case dw_val_class_unsigned_const:
7701 return v1->v.val_unsigned == v2->v.val_unsigned;
7702 case dw_val_class_long_long:
7703 return v1->v.val_long_long.hi == v2->v.val_long_long.hi
7704 && v1->v.val_long_long.low == v2->v.val_long_long.low;
7705 case dw_val_class_vec:
7706 if (v1->v.val_vec.length != v2->v.val_vec.length
7707 || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
7708 return 0;
7709 if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
7710 v1->v.val_vec.length * v1->v.val_vec.elt_size))
7711 return 0;
7712 return 1;
7713 case dw_val_class_flag:
7714 return v1->v.val_flag == v2->v.val_flag;
7715 case dw_val_class_str:
7716 return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
7717
7718 case dw_val_class_addr:
7719 r1 = v1->v.val_addr;
7720 r2 = v2->v.val_addr;
7721 if (GET_CODE (r1) != GET_CODE (r2))
7722 return 0;
7723 gcc_assert (GET_CODE (r1) == SYMBOL_REF);
7724 return !strcmp (XSTR (r1, 0), XSTR (r2, 0));
7725
7726 case dw_val_class_offset:
7727 return v1->v.val_offset == v2->v.val_offset;
7728
7729 case dw_val_class_loc:
7730 for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
7731 loc1 && loc2;
7732 loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
7733 if (!same_loc_p (loc1, loc2, mark))
7734 return 0;
7735 return !loc1 && !loc2;
7736
7737 case dw_val_class_die_ref:
7738 return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
7739
7740 case dw_val_class_fde_ref:
7741 case dw_val_class_lbl_id:
7742 case dw_val_class_lineptr:
7743 case dw_val_class_macptr:
7744 return 1;
7745
7746 case dw_val_class_file:
7747 return v1->v.val_file == v2->v.val_file;
7748
7749 default:
7750 return 1;
7751 }
7752 }
7753
7754 /* Do the attributes look the same? */
7755
7756 static int
7757 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
7758 {
7759 if (at1->dw_attr != at2->dw_attr)
7760 return 0;
7761
7762 /* We don't care that this was compiled with a different compiler
7763 snapshot; if the output is the same, that's what matters. */
7764 if (at1->dw_attr == DW_AT_producer)
7765 return 1;
7766
7767 return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
7768 }
7769
7770 /* Do the dies look the same? */
7771
7772 static int
7773 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
7774 {
7775 dw_die_ref c1, c2;
7776 dw_attr_ref a1;
7777 unsigned ix;
7778
7779 /* To avoid infinite recursion. */
7780 if (die1->die_mark)
7781 return die1->die_mark == die2->die_mark;
7782 die1->die_mark = die2->die_mark = ++(*mark);
7783
7784 if (die1->die_tag != die2->die_tag)
7785 return 0;
7786
7787 if (VEC_length (dw_attr_node, die1->die_attr)
7788 != VEC_length (dw_attr_node, die2->die_attr))
7789 return 0;
7790
7791 for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
7792 if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
7793 return 0;
7794
7795 c1 = die1->die_child;
7796 c2 = die2->die_child;
7797 if (! c1)
7798 {
7799 if (c2)
7800 return 0;
7801 }
7802 else
7803 for (;;)
7804 {
7805 if (!same_die_p (c1, c2, mark))
7806 return 0;
7807 c1 = c1->die_sib;
7808 c2 = c2->die_sib;
7809 if (c1 == die1->die_child)
7810 {
7811 if (c2 == die2->die_child)
7812 break;
7813 else
7814 return 0;
7815 }
7816 }
7817
7818 return 1;
7819 }
7820
7821 /* Do the dies look the same? Wrapper around same_die_p. */
7822
7823 static int
7824 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
7825 {
7826 int mark = 0;
7827 int ret = same_die_p (die1, die2, &mark);
7828
7829 unmark_all_dies (die1);
7830 unmark_all_dies (die2);
7831
7832 return ret;
7833 }
7834
7835 /* The prefix to attach to symbols on DIEs in the current comdat debug
7836 info section. */
7837 static char *comdat_symbol_id;
7838
7839 /* The index of the current symbol within the current comdat CU. */
7840 static unsigned int comdat_symbol_number;
7841
7842 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
7843 children, and set comdat_symbol_id accordingly. */
7844
7845 static void
7846 compute_section_prefix (dw_die_ref unit_die)
7847 {
7848 const char *die_name = get_AT_string (unit_die, DW_AT_name);
7849 const char *base = die_name ? lbasename (die_name) : "anonymous";
7850 char *name = XALLOCAVEC (char, strlen (base) + 64);
7851 char *p;
7852 int i, mark;
7853 unsigned char checksum[16];
7854 struct md5_ctx ctx;
7855
7856 /* Compute the checksum of the DIE, then append part of it as hex digits to
7857 the name filename of the unit. */
7858
7859 md5_init_ctx (&ctx);
7860 mark = 0;
7861 die_checksum (unit_die, &ctx, &mark);
7862 unmark_all_dies (unit_die);
7863 md5_finish_ctx (&ctx, checksum);
7864
7865 sprintf (name, "%s.", base);
7866 clean_symbol_name (name);
7867
7868 p = name + strlen (name);
7869 for (i = 0; i < 4; i++)
7870 {
7871 sprintf (p, "%.2x", checksum[i]);
7872 p += 2;
7873 }
7874
7875 comdat_symbol_id = unit_die->die_symbol = xstrdup (name);
7876 comdat_symbol_number = 0;
7877 }
7878
7879 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */
7880
7881 static int
7882 is_type_die (dw_die_ref die)
7883 {
7884 switch (die->die_tag)
7885 {
7886 case DW_TAG_array_type:
7887 case DW_TAG_class_type:
7888 case DW_TAG_interface_type:
7889 case DW_TAG_enumeration_type:
7890 case DW_TAG_pointer_type:
7891 case DW_TAG_reference_type:
7892 case DW_TAG_string_type:
7893 case DW_TAG_structure_type:
7894 case DW_TAG_subroutine_type:
7895 case DW_TAG_union_type:
7896 case DW_TAG_ptr_to_member_type:
7897 case DW_TAG_set_type:
7898 case DW_TAG_subrange_type:
7899 case DW_TAG_base_type:
7900 case DW_TAG_const_type:
7901 case DW_TAG_file_type:
7902 case DW_TAG_packed_type:
7903 case DW_TAG_volatile_type:
7904 case DW_TAG_typedef:
7905 return 1;
7906 default:
7907 return 0;
7908 }
7909 }
7910
7911 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
7912 Basically, we want to choose the bits that are likely to be shared between
7913 compilations (types) and leave out the bits that are specific to individual
7914 compilations (functions). */
7915
7916 static int
7917 is_comdat_die (dw_die_ref c)
7918 {
7919 /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
7920 we do for stabs. The advantage is a greater likelihood of sharing between
7921 objects that don't include headers in the same order (and therefore would
7922 put the base types in a different comdat). jason 8/28/00 */
7923
7924 if (c->die_tag == DW_TAG_base_type)
7925 return 0;
7926
7927 if (c->die_tag == DW_TAG_pointer_type
7928 || c->die_tag == DW_TAG_reference_type
7929 || c->die_tag == DW_TAG_const_type
7930 || c->die_tag == DW_TAG_volatile_type)
7931 {
7932 dw_die_ref t = get_AT_ref (c, DW_AT_type);
7933
7934 return t ? is_comdat_die (t) : 0;
7935 }
7936
7937 return is_type_die (c);
7938 }
7939
7940 /* Returns 1 iff C is the sort of DIE that might be referred to from another
7941 compilation unit. */
7942
7943 static int
7944 is_symbol_die (dw_die_ref c)
7945 {
7946 return (is_type_die (c)
7947 || (get_AT (c, DW_AT_declaration)
7948 && !get_AT (c, DW_AT_specification))
7949 || c->die_tag == DW_TAG_namespace
7950 || c->die_tag == DW_TAG_module);
7951 }
7952
7953 static char *
7954 gen_internal_sym (const char *prefix)
7955 {
7956 char buf[256];
7957
7958 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
7959 return xstrdup (buf);
7960 }
7961
7962 /* Assign symbols to all worthy DIEs under DIE. */
7963
7964 static void
7965 assign_symbol_names (dw_die_ref die)
7966 {
7967 dw_die_ref c;
7968
7969 if (is_symbol_die (die))
7970 {
7971 if (comdat_symbol_id)
7972 {
7973 char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
7974
7975 sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
7976 comdat_symbol_id, comdat_symbol_number++);
7977 die->die_symbol = xstrdup (p);
7978 }
7979 else
7980 die->die_symbol = gen_internal_sym ("LDIE");
7981 }
7982
7983 FOR_EACH_CHILD (die, c, assign_symbol_names (c));
7984 }
7985
7986 struct cu_hash_table_entry
7987 {
7988 dw_die_ref cu;
7989 unsigned min_comdat_num, max_comdat_num;
7990 struct cu_hash_table_entry *next;
7991 };
7992
7993 /* Routines to manipulate hash table of CUs. */
7994 static hashval_t
7995 htab_cu_hash (const void *of)
7996 {
7997 const struct cu_hash_table_entry *const entry =
7998 (const struct cu_hash_table_entry *) of;
7999
8000 return htab_hash_string (entry->cu->die_symbol);
8001 }
8002
8003 static int
8004 htab_cu_eq (const void *of1, const void *of2)
8005 {
8006 const struct cu_hash_table_entry *const entry1 =
8007 (const struct cu_hash_table_entry *) of1;
8008 const struct die_struct *const entry2 = (const struct die_struct *) of2;
8009
8010 return !strcmp (entry1->cu->die_symbol, entry2->die_symbol);
8011 }
8012
8013 static void
8014 htab_cu_del (void *what)
8015 {
8016 struct cu_hash_table_entry *next,
8017 *entry = (struct cu_hash_table_entry *) what;
8018
8019 while (entry)
8020 {
8021 next = entry->next;
8022 free (entry);
8023 entry = next;
8024 }
8025 }
8026
8027 /* Check whether we have already seen this CU and set up SYM_NUM
8028 accordingly. */
8029 static int
8030 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
8031 {
8032 struct cu_hash_table_entry dummy;
8033 struct cu_hash_table_entry **slot, *entry, *last = &dummy;
8034
8035 dummy.max_comdat_num = 0;
8036
8037 slot = (struct cu_hash_table_entry **)
8038 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
8039 INSERT);
8040 entry = *slot;
8041
8042 for (; entry; last = entry, entry = entry->next)
8043 {
8044 if (same_die_p_wrap (cu, entry->cu))
8045 break;
8046 }
8047
8048 if (entry)
8049 {
8050 *sym_num = entry->min_comdat_num;
8051 return 1;
8052 }
8053
8054 entry = XCNEW (struct cu_hash_table_entry);
8055 entry->cu = cu;
8056 entry->min_comdat_num = *sym_num = last->max_comdat_num;
8057 entry->next = *slot;
8058 *slot = entry;
8059
8060 return 0;
8061 }
8062
8063 /* Record SYM_NUM to record of CU in HTABLE. */
8064 static void
8065 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
8066 {
8067 struct cu_hash_table_entry **slot, *entry;
8068
8069 slot = (struct cu_hash_table_entry **)
8070 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
8071 NO_INSERT);
8072 entry = *slot;
8073
8074 entry->max_comdat_num = sym_num;
8075 }
8076
8077 /* Traverse the DIE (which is always comp_unit_die), and set up
8078 additional compilation units for each of the include files we see
8079 bracketed by BINCL/EINCL. */
8080
8081 static void
8082 break_out_includes (dw_die_ref die)
8083 {
8084 dw_die_ref c;
8085 dw_die_ref unit = NULL;
8086 limbo_die_node *node, **pnode;
8087 htab_t cu_hash_table;
8088
8089 c = die->die_child;
8090 if (c) do {
8091 dw_die_ref prev = c;
8092 c = c->die_sib;
8093 while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
8094 || (unit && is_comdat_die (c)))
8095 {
8096 dw_die_ref next = c->die_sib;
8097
8098 /* This DIE is for a secondary CU; remove it from the main one. */
8099 remove_child_with_prev (c, prev);
8100
8101 if (c->die_tag == DW_TAG_GNU_BINCL)
8102 unit = push_new_compile_unit (unit, c);
8103 else if (c->die_tag == DW_TAG_GNU_EINCL)
8104 unit = pop_compile_unit (unit);
8105 else
8106 add_child_die (unit, c);
8107 c = next;
8108 if (c == die->die_child)
8109 break;
8110 }
8111 } while (c != die->die_child);
8112
8113 #if 0
8114 /* We can only use this in debugging, since the frontend doesn't check
8115 to make sure that we leave every include file we enter. */
8116 gcc_assert (!unit);
8117 #endif
8118
8119 assign_symbol_names (die);
8120 cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
8121 for (node = limbo_die_list, pnode = &limbo_die_list;
8122 node;
8123 node = node->next)
8124 {
8125 int is_dupl;
8126
8127 compute_section_prefix (node->die);
8128 is_dupl = check_duplicate_cu (node->die, cu_hash_table,
8129 &comdat_symbol_number);
8130 assign_symbol_names (node->die);
8131 if (is_dupl)
8132 *pnode = node->next;
8133 else
8134 {
8135 pnode = &node->next;
8136 record_comdat_symbol_number (node->die, cu_hash_table,
8137 comdat_symbol_number);
8138 }
8139 }
8140 htab_delete (cu_hash_table);
8141 }
8142
8143 /* Traverse the DIE and add a sibling attribute if it may have the
8144 effect of speeding up access to siblings. To save some space,
8145 avoid generating sibling attributes for DIE's without children. */
8146
8147 static void
8148 add_sibling_attributes (dw_die_ref die)
8149 {
8150 dw_die_ref c;
8151
8152 if (! die->die_child)
8153 return;
8154
8155 if (die->die_parent && die != die->die_parent->die_child)
8156 add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
8157
8158 FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
8159 }
8160
8161 /* Output all location lists for the DIE and its children. */
8162
8163 static void
8164 output_location_lists (dw_die_ref die)
8165 {
8166 dw_die_ref c;
8167 dw_attr_ref a;
8168 unsigned ix;
8169
8170 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8171 if (AT_class (a) == dw_val_class_loc_list)
8172 output_loc_list (AT_loc_list (a));
8173
8174 FOR_EACH_CHILD (die, c, output_location_lists (c));
8175 }
8176
8177 /* The format of each DIE (and its attribute value pairs) is encoded in an
8178 abbreviation table. This routine builds the abbreviation table and assigns
8179 a unique abbreviation id for each abbreviation entry. The children of each
8180 die are visited recursively. */
8181
8182 static void
8183 build_abbrev_table (dw_die_ref die)
8184 {
8185 unsigned long abbrev_id;
8186 unsigned int n_alloc;
8187 dw_die_ref c;
8188 dw_attr_ref a;
8189 unsigned ix;
8190
8191 /* Scan the DIE references, and mark as external any that refer to
8192 DIEs from other CUs (i.e. those which are not marked). */
8193 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8194 if (AT_class (a) == dw_val_class_die_ref
8195 && AT_ref (a)->die_mark == 0)
8196 {
8197 gcc_assert (AT_ref (a)->die_symbol);
8198 set_AT_ref_external (a, 1);
8199 }
8200
8201 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
8202 {
8203 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
8204 dw_attr_ref die_a, abbrev_a;
8205 unsigned ix;
8206 bool ok = true;
8207
8208 if (abbrev->die_tag != die->die_tag)
8209 continue;
8210 if ((abbrev->die_child != NULL) != (die->die_child != NULL))
8211 continue;
8212
8213 if (VEC_length (dw_attr_node, abbrev->die_attr)
8214 != VEC_length (dw_attr_node, die->die_attr))
8215 continue;
8216
8217 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
8218 {
8219 abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
8220 if ((abbrev_a->dw_attr != die_a->dw_attr)
8221 || (value_format (abbrev_a) != value_format (die_a)))
8222 {
8223 ok = false;
8224 break;
8225 }
8226 }
8227 if (ok)
8228 break;
8229 }
8230
8231 if (abbrev_id >= abbrev_die_table_in_use)
8232 {
8233 if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
8234 {
8235 n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
8236 abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
8237 n_alloc);
8238
8239 memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
8240 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
8241 abbrev_die_table_allocated = n_alloc;
8242 }
8243
8244 ++abbrev_die_table_in_use;
8245 abbrev_die_table[abbrev_id] = die;
8246 }
8247
8248 die->die_abbrev = abbrev_id;
8249 FOR_EACH_CHILD (die, c, build_abbrev_table (c));
8250 }
8251 \f
8252 /* Return the power-of-two number of bytes necessary to represent VALUE. */
8253
8254 static int
8255 constant_size (unsigned HOST_WIDE_INT value)
8256 {
8257 int log;
8258
8259 if (value == 0)
8260 log = 0;
8261 else
8262 log = floor_log2 (value);
8263
8264 log = log / 8;
8265 log = 1 << (floor_log2 (log) + 1);
8266
8267 return log;
8268 }
8269
8270 /* Return the size of a DIE as it is represented in the
8271 .debug_info section. */
8272
8273 static unsigned long
8274 size_of_die (dw_die_ref die)
8275 {
8276 unsigned long size = 0;
8277 dw_attr_ref a;
8278 unsigned ix;
8279
8280 size += size_of_uleb128 (die->die_abbrev);
8281 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8282 {
8283 switch (AT_class (a))
8284 {
8285 case dw_val_class_addr:
8286 size += DWARF2_ADDR_SIZE;
8287 break;
8288 case dw_val_class_offset:
8289 size += DWARF_OFFSET_SIZE;
8290 break;
8291 case dw_val_class_loc:
8292 {
8293 unsigned long lsize = size_of_locs (AT_loc (a));
8294
8295 /* Block length. */
8296 size += constant_size (lsize);
8297 size += lsize;
8298 }
8299 break;
8300 case dw_val_class_loc_list:
8301 size += DWARF_OFFSET_SIZE;
8302 break;
8303 case dw_val_class_range_list:
8304 size += DWARF_OFFSET_SIZE;
8305 break;
8306 case dw_val_class_const:
8307 size += size_of_sleb128 (AT_int (a));
8308 break;
8309 case dw_val_class_unsigned_const:
8310 size += constant_size (AT_unsigned (a));
8311 break;
8312 case dw_val_class_long_long:
8313 size += 1 + 2*HOST_BITS_PER_LONG/HOST_BITS_PER_CHAR; /* block */
8314 break;
8315 case dw_val_class_vec:
8316 size += constant_size (a->dw_attr_val.v.val_vec.length
8317 * a->dw_attr_val.v.val_vec.elt_size)
8318 + a->dw_attr_val.v.val_vec.length
8319 * a->dw_attr_val.v.val_vec.elt_size; /* block */
8320 break;
8321 case dw_val_class_flag:
8322 size += 1;
8323 break;
8324 case dw_val_class_die_ref:
8325 /* In DWARF2, DW_FORM_ref_addr is sized by target address length,
8326 whereas in DWARF3 it's always sized as an offset. */
8327 if (AT_ref_external (a) && dwarf_version == 2)
8328 size += DWARF2_ADDR_SIZE;
8329 else
8330 size += DWARF_OFFSET_SIZE;
8331 break;
8332 case dw_val_class_fde_ref:
8333 size += DWARF_OFFSET_SIZE;
8334 break;
8335 case dw_val_class_lbl_id:
8336 size += DWARF2_ADDR_SIZE;
8337 break;
8338 case dw_val_class_lineptr:
8339 case dw_val_class_macptr:
8340 size += DWARF_OFFSET_SIZE;
8341 break;
8342 case dw_val_class_str:
8343 if (AT_string_form (a) == DW_FORM_strp)
8344 size += DWARF_OFFSET_SIZE;
8345 else
8346 size += strlen (a->dw_attr_val.v.val_str->str) + 1;
8347 break;
8348 case dw_val_class_file:
8349 size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
8350 break;
8351 default:
8352 gcc_unreachable ();
8353 }
8354 }
8355
8356 return size;
8357 }
8358
8359 /* Size the debugging information associated with a given DIE. Visits the
8360 DIE's children recursively. Updates the global variable next_die_offset, on
8361 each time through. Uses the current value of next_die_offset to update the
8362 die_offset field in each DIE. */
8363
8364 static void
8365 calc_die_sizes (dw_die_ref die)
8366 {
8367 dw_die_ref c;
8368
8369 die->die_offset = next_die_offset;
8370 next_die_offset += size_of_die (die);
8371
8372 FOR_EACH_CHILD (die, c, calc_die_sizes (c));
8373
8374 if (die->die_child != NULL)
8375 /* Count the null byte used to terminate sibling lists. */
8376 next_die_offset += 1;
8377 }
8378
8379 /* Set the marks for a die and its children. We do this so
8380 that we know whether or not a reference needs to use FORM_ref_addr; only
8381 DIEs in the same CU will be marked. We used to clear out the offset
8382 and use that as the flag, but ran into ordering problems. */
8383
8384 static void
8385 mark_dies (dw_die_ref die)
8386 {
8387 dw_die_ref c;
8388
8389 gcc_assert (!die->die_mark);
8390
8391 die->die_mark = 1;
8392 FOR_EACH_CHILD (die, c, mark_dies (c));
8393 }
8394
8395 /* Clear the marks for a die and its children. */
8396
8397 static void
8398 unmark_dies (dw_die_ref die)
8399 {
8400 dw_die_ref c;
8401
8402 gcc_assert (die->die_mark);
8403
8404 die->die_mark = 0;
8405 FOR_EACH_CHILD (die, c, unmark_dies (c));
8406 }
8407
8408 /* Clear the marks for a die, its children and referred dies. */
8409
8410 static void
8411 unmark_all_dies (dw_die_ref die)
8412 {
8413 dw_die_ref c;
8414 dw_attr_ref a;
8415 unsigned ix;
8416
8417 if (!die->die_mark)
8418 return;
8419 die->die_mark = 0;
8420
8421 FOR_EACH_CHILD (die, c, unmark_all_dies (c));
8422
8423 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8424 if (AT_class (a) == dw_val_class_die_ref)
8425 unmark_all_dies (AT_ref (a));
8426 }
8427
8428 /* Return the size of the .debug_pubnames or .debug_pubtypes table
8429 generated for the compilation unit. */
8430
8431 static unsigned long
8432 size_of_pubnames (VEC (pubname_entry, gc) * names)
8433 {
8434 unsigned long size;
8435 unsigned i;
8436 pubname_ref p;
8437
8438 size = DWARF_PUBNAMES_HEADER_SIZE;
8439 for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
8440 if (names != pubtype_table
8441 || p->die->die_offset != 0
8442 || !flag_eliminate_unused_debug_types)
8443 size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
8444
8445 size += DWARF_OFFSET_SIZE;
8446 return size;
8447 }
8448
8449 /* Return the size of the information in the .debug_aranges section. */
8450
8451 static unsigned long
8452 size_of_aranges (void)
8453 {
8454 unsigned long size;
8455
8456 size = DWARF_ARANGES_HEADER_SIZE;
8457
8458 /* Count the address/length pair for this compilation unit. */
8459 if (text_section_used)
8460 size += 2 * DWARF2_ADDR_SIZE;
8461 if (cold_text_section_used)
8462 size += 2 * DWARF2_ADDR_SIZE;
8463 size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
8464
8465 /* Count the two zero words used to terminated the address range table. */
8466 size += 2 * DWARF2_ADDR_SIZE;
8467 return size;
8468 }
8469 \f
8470 /* Select the encoding of an attribute value. */
8471
8472 static enum dwarf_form
8473 value_format (dw_attr_ref a)
8474 {
8475 switch (a->dw_attr_val.val_class)
8476 {
8477 case dw_val_class_addr:
8478 return DW_FORM_addr;
8479 case dw_val_class_range_list:
8480 case dw_val_class_offset:
8481 case dw_val_class_loc_list:
8482 switch (DWARF_OFFSET_SIZE)
8483 {
8484 case 4:
8485 return DW_FORM_data4;
8486 case 8:
8487 return DW_FORM_data8;
8488 default:
8489 gcc_unreachable ();
8490 }
8491 case dw_val_class_loc:
8492 switch (constant_size (size_of_locs (AT_loc (a))))
8493 {
8494 case 1:
8495 return DW_FORM_block1;
8496 case 2:
8497 return DW_FORM_block2;
8498 default:
8499 gcc_unreachable ();
8500 }
8501 case dw_val_class_const:
8502 return DW_FORM_sdata;
8503 case dw_val_class_unsigned_const:
8504 switch (constant_size (AT_unsigned (a)))
8505 {
8506 case 1:
8507 return DW_FORM_data1;
8508 case 2:
8509 return DW_FORM_data2;
8510 case 4:
8511 return DW_FORM_data4;
8512 case 8:
8513 return DW_FORM_data8;
8514 default:
8515 gcc_unreachable ();
8516 }
8517 case dw_val_class_long_long:
8518 return DW_FORM_block1;
8519 case dw_val_class_vec:
8520 switch (constant_size (a->dw_attr_val.v.val_vec.length
8521 * a->dw_attr_val.v.val_vec.elt_size))
8522 {
8523 case 1:
8524 return DW_FORM_block1;
8525 case 2:
8526 return DW_FORM_block2;
8527 case 4:
8528 return DW_FORM_block4;
8529 default:
8530 gcc_unreachable ();
8531 }
8532 case dw_val_class_flag:
8533 return DW_FORM_flag;
8534 case dw_val_class_die_ref:
8535 if (AT_ref_external (a))
8536 return DW_FORM_ref_addr;
8537 else
8538 return DW_FORM_ref;
8539 case dw_val_class_fde_ref:
8540 return DW_FORM_data;
8541 case dw_val_class_lbl_id:
8542 return DW_FORM_addr;
8543 case dw_val_class_lineptr:
8544 case dw_val_class_macptr:
8545 return DW_FORM_data;
8546 case dw_val_class_str:
8547 return AT_string_form (a);
8548 case dw_val_class_file:
8549 switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
8550 {
8551 case 1:
8552 return DW_FORM_data1;
8553 case 2:
8554 return DW_FORM_data2;
8555 case 4:
8556 return DW_FORM_data4;
8557 default:
8558 gcc_unreachable ();
8559 }
8560
8561 default:
8562 gcc_unreachable ();
8563 }
8564 }
8565
8566 /* Output the encoding of an attribute value. */
8567
8568 static void
8569 output_value_format (dw_attr_ref a)
8570 {
8571 enum dwarf_form form = value_format (a);
8572
8573 dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
8574 }
8575
8576 /* Output the .debug_abbrev section which defines the DIE abbreviation
8577 table. */
8578
8579 static void
8580 output_abbrev_section (void)
8581 {
8582 unsigned long abbrev_id;
8583
8584 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
8585 {
8586 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
8587 unsigned ix;
8588 dw_attr_ref a_attr;
8589
8590 dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
8591 dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
8592 dwarf_tag_name (abbrev->die_tag));
8593
8594 if (abbrev->die_child != NULL)
8595 dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
8596 else
8597 dw2_asm_output_data (1, DW_children_no, "DW_children_no");
8598
8599 for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
8600 ix++)
8601 {
8602 dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
8603 dwarf_attr_name (a_attr->dw_attr));
8604 output_value_format (a_attr);
8605 }
8606
8607 dw2_asm_output_data (1, 0, NULL);
8608 dw2_asm_output_data (1, 0, NULL);
8609 }
8610
8611 /* Terminate the table. */
8612 dw2_asm_output_data (1, 0, NULL);
8613 }
8614
8615 /* Output a symbol we can use to refer to this DIE from another CU. */
8616
8617 static inline void
8618 output_die_symbol (dw_die_ref die)
8619 {
8620 char *sym = die->die_symbol;
8621
8622 if (sym == 0)
8623 return;
8624
8625 if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
8626 /* We make these global, not weak; if the target doesn't support
8627 .linkonce, it doesn't support combining the sections, so debugging
8628 will break. */
8629 targetm.asm_out.globalize_label (asm_out_file, sym);
8630
8631 ASM_OUTPUT_LABEL (asm_out_file, sym);
8632 }
8633
8634 /* Return a new location list, given the begin and end range, and the
8635 expression. gensym tells us whether to generate a new internal symbol for
8636 this location list node, which is done for the head of the list only. */
8637
8638 static inline dw_loc_list_ref
8639 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
8640 const char *section, unsigned int gensym)
8641 {
8642 dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
8643
8644 retlist->begin = begin;
8645 retlist->end = end;
8646 retlist->expr = expr;
8647 retlist->section = section;
8648 if (gensym)
8649 retlist->ll_symbol = gen_internal_sym ("LLST");
8650
8651 return retlist;
8652 }
8653
8654 /* Add a location description expression to a location list. */
8655
8656 static inline void
8657 add_loc_descr_to_loc_list (dw_loc_list_ref *list_head, dw_loc_descr_ref descr,
8658 const char *begin, const char *end,
8659 const char *section)
8660 {
8661 dw_loc_list_ref *d;
8662
8663 /* Find the end of the chain. */
8664 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
8665 ;
8666
8667 /* Add a new location list node to the list. */
8668 *d = new_loc_list (descr, begin, end, section, 0);
8669 }
8670
8671 /* Output the location list given to us. */
8672
8673 static void
8674 output_loc_list (dw_loc_list_ref list_head)
8675 {
8676 dw_loc_list_ref curr = list_head;
8677
8678 ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
8679
8680 /* Walk the location list, and output each range + expression. */
8681 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
8682 {
8683 unsigned long size;
8684 /* Don't output an entry that starts and ends at the same address. */
8685 if (strcmp (curr->begin, curr->end) == 0)
8686 continue;
8687 if (!have_multiple_function_sections)
8688 {
8689 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
8690 "Location list begin address (%s)",
8691 list_head->ll_symbol);
8692 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
8693 "Location list end address (%s)",
8694 list_head->ll_symbol);
8695 }
8696 else
8697 {
8698 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
8699 "Location list begin address (%s)",
8700 list_head->ll_symbol);
8701 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
8702 "Location list end address (%s)",
8703 list_head->ll_symbol);
8704 }
8705 size = size_of_locs (curr->expr);
8706
8707 /* Output the block length for this list of location operations. */
8708 gcc_assert (size <= 0xffff);
8709 dw2_asm_output_data (2, size, "%s", "Location expression size");
8710
8711 output_loc_sequence (curr->expr);
8712 }
8713
8714 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8715 "Location list terminator begin (%s)",
8716 list_head->ll_symbol);
8717 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
8718 "Location list terminator end (%s)",
8719 list_head->ll_symbol);
8720 }
8721
8722 /* Output the DIE and its attributes. Called recursively to generate
8723 the definitions of each child DIE. */
8724
8725 static void
8726 output_die (dw_die_ref die)
8727 {
8728 dw_attr_ref a;
8729 dw_die_ref c;
8730 unsigned long size;
8731 unsigned ix;
8732
8733 /* If someone in another CU might refer to us, set up a symbol for
8734 them to point to. */
8735 if (die->die_symbol)
8736 output_die_symbol (die);
8737
8738 dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
8739 (unsigned long)die->die_offset,
8740 dwarf_tag_name (die->die_tag));
8741
8742 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8743 {
8744 const char *name = dwarf_attr_name (a->dw_attr);
8745
8746 switch (AT_class (a))
8747 {
8748 case dw_val_class_addr:
8749 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
8750 break;
8751
8752 case dw_val_class_offset:
8753 dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
8754 "%s", name);
8755 break;
8756
8757 case dw_val_class_range_list:
8758 {
8759 char *p = strchr (ranges_section_label, '\0');
8760
8761 sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
8762 a->dw_attr_val.v.val_offset);
8763 dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
8764 debug_ranges_section, "%s", name);
8765 *p = '\0';
8766 }
8767 break;
8768
8769 case dw_val_class_loc:
8770 size = size_of_locs (AT_loc (a));
8771
8772 /* Output the block length for this list of location operations. */
8773 dw2_asm_output_data (constant_size (size), size, "%s", name);
8774
8775 output_loc_sequence (AT_loc (a));
8776 break;
8777
8778 case dw_val_class_const:
8779 /* ??? It would be slightly more efficient to use a scheme like is
8780 used for unsigned constants below, but gdb 4.x does not sign
8781 extend. Gdb 5.x does sign extend. */
8782 dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
8783 break;
8784
8785 case dw_val_class_unsigned_const:
8786 dw2_asm_output_data (constant_size (AT_unsigned (a)),
8787 AT_unsigned (a), "%s", name);
8788 break;
8789
8790 case dw_val_class_long_long:
8791 {
8792 unsigned HOST_WIDE_INT first, second;
8793
8794 dw2_asm_output_data (1,
8795 2 * HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
8796 "%s", name);
8797
8798 if (WORDS_BIG_ENDIAN)
8799 {
8800 first = a->dw_attr_val.v.val_long_long.hi;
8801 second = a->dw_attr_val.v.val_long_long.low;
8802 }
8803 else
8804 {
8805 first = a->dw_attr_val.v.val_long_long.low;
8806 second = a->dw_attr_val.v.val_long_long.hi;
8807 }
8808
8809 dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
8810 first, "long long constant");
8811 dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
8812 second, NULL);
8813 }
8814 break;
8815
8816 case dw_val_class_vec:
8817 {
8818 unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
8819 unsigned int len = a->dw_attr_val.v.val_vec.length;
8820 unsigned int i;
8821 unsigned char *p;
8822
8823 dw2_asm_output_data (constant_size (len * elt_size),
8824 len * elt_size, "%s", name);
8825 if (elt_size > sizeof (HOST_WIDE_INT))
8826 {
8827 elt_size /= 2;
8828 len *= 2;
8829 }
8830 for (i = 0, p = a->dw_attr_val.v.val_vec.array;
8831 i < len;
8832 i++, p += elt_size)
8833 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
8834 "fp or vector constant word %u", i);
8835 break;
8836 }
8837
8838 case dw_val_class_flag:
8839 dw2_asm_output_data (1, AT_flag (a), "%s", name);
8840 break;
8841
8842 case dw_val_class_loc_list:
8843 {
8844 char *sym = AT_loc_list (a)->ll_symbol;
8845
8846 gcc_assert (sym);
8847 dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
8848 "%s", name);
8849 }
8850 break;
8851
8852 case dw_val_class_die_ref:
8853 if (AT_ref_external (a))
8854 {
8855 char *sym = AT_ref (a)->die_symbol;
8856 int size;
8857
8858 gcc_assert (sym);
8859
8860 /* In DWARF2, DW_FORM_ref_addr is sized by target address
8861 length, whereas in DWARF3 it's always sized as an offset. */
8862 if (dwarf_version == 2)
8863 size = DWARF2_ADDR_SIZE;
8864 else
8865 size = DWARF_OFFSET_SIZE;
8866 dw2_asm_output_offset (size, sym, debug_info_section, "%s", name);
8867 }
8868 else
8869 {
8870 gcc_assert (AT_ref (a)->die_offset);
8871 dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
8872 "%s", name);
8873 }
8874 break;
8875
8876 case dw_val_class_fde_ref:
8877 {
8878 char l1[20];
8879
8880 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
8881 a->dw_attr_val.v.val_fde_index * 2);
8882 dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
8883 "%s", name);
8884 }
8885 break;
8886
8887 case dw_val_class_lbl_id:
8888 dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
8889 break;
8890
8891 case dw_val_class_lineptr:
8892 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8893 debug_line_section, "%s", name);
8894 break;
8895
8896 case dw_val_class_macptr:
8897 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8898 debug_macinfo_section, "%s", name);
8899 break;
8900
8901 case dw_val_class_str:
8902 if (AT_string_form (a) == DW_FORM_strp)
8903 dw2_asm_output_offset (DWARF_OFFSET_SIZE,
8904 a->dw_attr_val.v.val_str->label,
8905 debug_str_section,
8906 "%s: \"%s\"", name, AT_string (a));
8907 else
8908 dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
8909 break;
8910
8911 case dw_val_class_file:
8912 {
8913 int f = maybe_emit_file (a->dw_attr_val.v.val_file);
8914
8915 dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
8916 a->dw_attr_val.v.val_file->filename);
8917 break;
8918 }
8919
8920 default:
8921 gcc_unreachable ();
8922 }
8923 }
8924
8925 FOR_EACH_CHILD (die, c, output_die (c));
8926
8927 /* Add null byte to terminate sibling list. */
8928 if (die->die_child != NULL)
8929 dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
8930 (unsigned long) die->die_offset);
8931 }
8932
8933 /* Output the compilation unit that appears at the beginning of the
8934 .debug_info section, and precedes the DIE descriptions. */
8935
8936 static void
8937 output_compilation_unit_header (void)
8938 {
8939 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8940 dw2_asm_output_data (4, 0xffffffff,
8941 "Initial length escape value indicating 64-bit DWARF extension");
8942 dw2_asm_output_data (DWARF_OFFSET_SIZE,
8943 next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
8944 "Length of Compilation Unit Info");
8945 dw2_asm_output_data (2, dwarf_version, "DWARF version number");
8946 dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
8947 debug_abbrev_section,
8948 "Offset Into Abbrev. Section");
8949 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
8950 }
8951
8952 /* Output the compilation unit DIE and its children. */
8953
8954 static void
8955 output_comp_unit (dw_die_ref die, int output_if_empty)
8956 {
8957 const char *secname;
8958 char *oldsym, *tmp;
8959
8960 /* Unless we are outputting main CU, we may throw away empty ones. */
8961 if (!output_if_empty && die->die_child == NULL)
8962 return;
8963
8964 /* Even if there are no children of this DIE, we must output the information
8965 about the compilation unit. Otherwise, on an empty translation unit, we
8966 will generate a present, but empty, .debug_info section. IRIX 6.5 `nm'
8967 will then complain when examining the file. First mark all the DIEs in
8968 this CU so we know which get local refs. */
8969 mark_dies (die);
8970
8971 build_abbrev_table (die);
8972
8973 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
8974 next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
8975 calc_die_sizes (die);
8976
8977 oldsym = die->die_symbol;
8978 if (oldsym)
8979 {
8980 tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
8981
8982 sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
8983 secname = tmp;
8984 die->die_symbol = NULL;
8985 switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
8986 }
8987 else
8988 switch_to_section (debug_info_section);
8989
8990 /* Output debugging information. */
8991 output_compilation_unit_header ();
8992 output_die (die);
8993
8994 /* Leave the marks on the main CU, so we can check them in
8995 output_pubnames. */
8996 if (oldsym)
8997 {
8998 unmark_dies (die);
8999 die->die_symbol = oldsym;
9000 }
9001 }
9002
9003 /* Return the DWARF2/3 pubname associated with a decl. */
9004
9005 static const char *
9006 dwarf2_name (tree decl, int scope)
9007 {
9008 return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
9009 }
9010
9011 /* Add a new entry to .debug_pubnames if appropriate. */
9012
9013 static void
9014 add_pubname_string (const char *str, dw_die_ref die)
9015 {
9016 pubname_entry e;
9017
9018 e.die = die;
9019 e.name = xstrdup (str);
9020 VEC_safe_push (pubname_entry, gc, pubname_table, &e);
9021 }
9022
9023 static void
9024 add_pubname (tree decl, dw_die_ref die)
9025 {
9026 if (TREE_PUBLIC (decl))
9027 add_pubname_string (dwarf2_name (decl, 1), die);
9028 }
9029
9030 /* Add a new entry to .debug_pubtypes if appropriate. */
9031
9032 static void
9033 add_pubtype (tree decl, dw_die_ref die)
9034 {
9035 pubname_entry e;
9036
9037 e.name = NULL;
9038 if ((TREE_PUBLIC (decl)
9039 || die->die_parent == comp_unit_die)
9040 && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
9041 {
9042 e.die = die;
9043 if (TYPE_P (decl))
9044 {
9045 if (TYPE_NAME (decl))
9046 {
9047 if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
9048 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
9049 else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
9050 && DECL_NAME (TYPE_NAME (decl)))
9051 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
9052 else
9053 e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
9054 }
9055 }
9056 else
9057 e.name = xstrdup (dwarf2_name (decl, 1));
9058
9059 /* If we don't have a name for the type, there's no point in adding
9060 it to the table. */
9061 if (e.name && e.name[0] != '\0')
9062 VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
9063 }
9064 }
9065
9066 /* Output the public names table used to speed up access to externally
9067 visible names; or the public types table used to find type definitions. */
9068
9069 static void
9070 output_pubnames (VEC (pubname_entry, gc) * names)
9071 {
9072 unsigned i;
9073 unsigned long pubnames_length = size_of_pubnames (names);
9074 pubname_ref pub;
9075
9076 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9077 dw2_asm_output_data (4, 0xffffffff,
9078 "Initial length escape value indicating 64-bit DWARF extension");
9079 if (names == pubname_table)
9080 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
9081 "Length of Public Names Info");
9082 else
9083 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
9084 "Length of Public Type Names Info");
9085 /* Version number for pubnames/pubtypes is still 2, even in DWARF3. */
9086 dw2_asm_output_data (2, 2, "DWARF Version");
9087 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
9088 debug_info_section,
9089 "Offset of Compilation Unit Info");
9090 dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
9091 "Compilation Unit Length");
9092
9093 for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
9094 {
9095 /* We shouldn't see pubnames for DIEs outside of the main CU. */
9096 if (names == pubname_table)
9097 gcc_assert (pub->die->die_mark);
9098
9099 if (names != pubtype_table
9100 || pub->die->die_offset != 0
9101 || !flag_eliminate_unused_debug_types)
9102 {
9103 dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
9104 "DIE offset");
9105
9106 dw2_asm_output_nstring (pub->name, -1, "external name");
9107 }
9108 }
9109
9110 dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
9111 }
9112
9113 /* Add a new entry to .debug_aranges if appropriate. */
9114
9115 static void
9116 add_arange (tree decl, dw_die_ref die)
9117 {
9118 if (! DECL_SECTION_NAME (decl))
9119 return;
9120
9121 if (arange_table_in_use == arange_table_allocated)
9122 {
9123 arange_table_allocated += ARANGE_TABLE_INCREMENT;
9124 arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
9125 arange_table_allocated);
9126 memset (arange_table + arange_table_in_use, 0,
9127 ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
9128 }
9129
9130 arange_table[arange_table_in_use++] = die;
9131 }
9132
9133 /* Output the information that goes into the .debug_aranges table.
9134 Namely, define the beginning and ending address range of the
9135 text section generated for this compilation unit. */
9136
9137 static void
9138 output_aranges (void)
9139 {
9140 unsigned i;
9141 unsigned long aranges_length = size_of_aranges ();
9142
9143 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9144 dw2_asm_output_data (4, 0xffffffff,
9145 "Initial length escape value indicating 64-bit DWARF extension");
9146 dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
9147 "Length of Address Ranges Info");
9148 /* Version number for aranges is still 2, even in DWARF3. */
9149 dw2_asm_output_data (2, 2, "DWARF Version");
9150 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
9151 debug_info_section,
9152 "Offset of Compilation Unit Info");
9153 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
9154 dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
9155
9156 /* We need to align to twice the pointer size here. */
9157 if (DWARF_ARANGES_PAD_SIZE)
9158 {
9159 /* Pad using a 2 byte words so that padding is correct for any
9160 pointer size. */
9161 dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
9162 2 * DWARF2_ADDR_SIZE);
9163 for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
9164 dw2_asm_output_data (2, 0, NULL);
9165 }
9166
9167 /* It is necessary not to output these entries if the sections were
9168 not used; if the sections were not used, the length will be 0 and
9169 the address may end up as 0 if the section is discarded by ld
9170 --gc-sections, leaving an invalid (0, 0) entry that can be
9171 confused with the terminator. */
9172 if (text_section_used)
9173 {
9174 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
9175 dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
9176 text_section_label, "Length");
9177 }
9178 if (cold_text_section_used)
9179 {
9180 dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
9181 "Address");
9182 dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
9183 cold_text_section_label, "Length");
9184 }
9185
9186 for (i = 0; i < arange_table_in_use; i++)
9187 {
9188 dw_die_ref die = arange_table[i];
9189
9190 /* We shouldn't see aranges for DIEs outside of the main CU. */
9191 gcc_assert (die->die_mark);
9192
9193 if (die->die_tag == DW_TAG_subprogram)
9194 {
9195 dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
9196 "Address");
9197 dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
9198 get_AT_low_pc (die), "Length");
9199 }
9200 else
9201 {
9202 /* A static variable; extract the symbol from DW_AT_location.
9203 Note that this code isn't currently hit, as we only emit
9204 aranges for functions (jason 9/23/99). */
9205 dw_attr_ref a = get_AT (die, DW_AT_location);
9206 dw_loc_descr_ref loc;
9207
9208 gcc_assert (a && AT_class (a) == dw_val_class_loc);
9209
9210 loc = AT_loc (a);
9211 gcc_assert (loc->dw_loc_opc == DW_OP_addr);
9212
9213 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
9214 loc->dw_loc_oprnd1.v.val_addr, "Address");
9215 dw2_asm_output_data (DWARF2_ADDR_SIZE,
9216 get_AT_unsigned (die, DW_AT_byte_size),
9217 "Length");
9218 }
9219 }
9220
9221 /* Output the terminator words. */
9222 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9223 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9224 }
9225
9226 /* Add a new entry to .debug_ranges. Return the offset at which it
9227 was placed. */
9228
9229 static unsigned int
9230 add_ranges_num (int num)
9231 {
9232 unsigned int in_use = ranges_table_in_use;
9233
9234 if (in_use == ranges_table_allocated)
9235 {
9236 ranges_table_allocated += RANGES_TABLE_INCREMENT;
9237 ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
9238 ranges_table_allocated);
9239 memset (ranges_table + ranges_table_in_use, 0,
9240 RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
9241 }
9242
9243 ranges_table[in_use].num = num;
9244 ranges_table_in_use = in_use + 1;
9245
9246 return in_use * 2 * DWARF2_ADDR_SIZE;
9247 }
9248
9249 /* Add a new entry to .debug_ranges corresponding to a block, or a
9250 range terminator if BLOCK is NULL. */
9251
9252 static unsigned int
9253 add_ranges (const_tree block)
9254 {
9255 return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
9256 }
9257
9258 /* Add a new entry to .debug_ranges corresponding to a pair of
9259 labels. */
9260
9261 static unsigned int
9262 add_ranges_by_labels (const char *begin, const char *end)
9263 {
9264 unsigned int in_use = ranges_by_label_in_use;
9265
9266 if (in_use == ranges_by_label_allocated)
9267 {
9268 ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
9269 ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
9270 ranges_by_label,
9271 ranges_by_label_allocated);
9272 memset (ranges_by_label + ranges_by_label_in_use, 0,
9273 RANGES_TABLE_INCREMENT
9274 * sizeof (struct dw_ranges_by_label_struct));
9275 }
9276
9277 ranges_by_label[in_use].begin = begin;
9278 ranges_by_label[in_use].end = end;
9279 ranges_by_label_in_use = in_use + 1;
9280
9281 return add_ranges_num (-(int)in_use - 1);
9282 }
9283
9284 static void
9285 output_ranges (void)
9286 {
9287 unsigned i;
9288 static const char *const start_fmt = "Offset 0x%x";
9289 const char *fmt = start_fmt;
9290
9291 for (i = 0; i < ranges_table_in_use; i++)
9292 {
9293 int block_num = ranges_table[i].num;
9294
9295 if (block_num > 0)
9296 {
9297 char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
9298 char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
9299
9300 ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
9301 ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
9302
9303 /* If all code is in the text section, then the compilation
9304 unit base address defaults to DW_AT_low_pc, which is the
9305 base of the text section. */
9306 if (!have_multiple_function_sections)
9307 {
9308 dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
9309 text_section_label,
9310 fmt, i * 2 * DWARF2_ADDR_SIZE);
9311 dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
9312 text_section_label, NULL);
9313 }
9314
9315 /* Otherwise, the compilation unit base address is zero,
9316 which allows us to use absolute addresses, and not worry
9317 about whether the target supports cross-section
9318 arithmetic. */
9319 else
9320 {
9321 dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
9322 fmt, i * 2 * DWARF2_ADDR_SIZE);
9323 dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
9324 }
9325
9326 fmt = NULL;
9327 }
9328
9329 /* Negative block_num stands for an index into ranges_by_label. */
9330 else if (block_num < 0)
9331 {
9332 int lab_idx = - block_num - 1;
9333
9334 if (!have_multiple_function_sections)
9335 {
9336 gcc_unreachable ();
9337 #if 0
9338 /* If we ever use add_ranges_by_labels () for a single
9339 function section, all we have to do is to take out
9340 the #if 0 above. */
9341 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
9342 ranges_by_label[lab_idx].begin,
9343 text_section_label,
9344 fmt, i * 2 * DWARF2_ADDR_SIZE);
9345 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
9346 ranges_by_label[lab_idx].end,
9347 text_section_label, NULL);
9348 #endif
9349 }
9350 else
9351 {
9352 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
9353 ranges_by_label[lab_idx].begin,
9354 fmt, i * 2 * DWARF2_ADDR_SIZE);
9355 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
9356 ranges_by_label[lab_idx].end,
9357 NULL);
9358 }
9359 }
9360 else
9361 {
9362 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9363 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
9364 fmt = start_fmt;
9365 }
9366 }
9367 }
9368
9369 /* Data structure containing information about input files. */
9370 struct file_info
9371 {
9372 const char *path; /* Complete file name. */
9373 const char *fname; /* File name part. */
9374 int length; /* Length of entire string. */
9375 struct dwarf_file_data * file_idx; /* Index in input file table. */
9376 int dir_idx; /* Index in directory table. */
9377 };
9378
9379 /* Data structure containing information about directories with source
9380 files. */
9381 struct dir_info
9382 {
9383 const char *path; /* Path including directory name. */
9384 int length; /* Path length. */
9385 int prefix; /* Index of directory entry which is a prefix. */
9386 int count; /* Number of files in this directory. */
9387 int dir_idx; /* Index of directory used as base. */
9388 };
9389
9390 /* Callback function for file_info comparison. We sort by looking at
9391 the directories in the path. */
9392
9393 static int
9394 file_info_cmp (const void *p1, const void *p2)
9395 {
9396 const struct file_info *const s1 = (const struct file_info *) p1;
9397 const struct file_info *const s2 = (const struct file_info *) p2;
9398 const unsigned char *cp1;
9399 const unsigned char *cp2;
9400
9401 /* Take care of file names without directories. We need to make sure that
9402 we return consistent values to qsort since some will get confused if
9403 we return the same value when identical operands are passed in opposite
9404 orders. So if neither has a directory, return 0 and otherwise return
9405 1 or -1 depending on which one has the directory. */
9406 if ((s1->path == s1->fname || s2->path == s2->fname))
9407 return (s2->path == s2->fname) - (s1->path == s1->fname);
9408
9409 cp1 = (const unsigned char *) s1->path;
9410 cp2 = (const unsigned char *) s2->path;
9411
9412 while (1)
9413 {
9414 ++cp1;
9415 ++cp2;
9416 /* Reached the end of the first path? If so, handle like above. */
9417 if ((cp1 == (const unsigned char *) s1->fname)
9418 || (cp2 == (const unsigned char *) s2->fname))
9419 return ((cp2 == (const unsigned char *) s2->fname)
9420 - (cp1 == (const unsigned char *) s1->fname));
9421
9422 /* Character of current path component the same? */
9423 else if (*cp1 != *cp2)
9424 return *cp1 - *cp2;
9425 }
9426 }
9427
9428 struct file_name_acquire_data
9429 {
9430 struct file_info *files;
9431 int used_files;
9432 int max_files;
9433 };
9434
9435 /* Traversal function for the hash table. */
9436
9437 static int
9438 file_name_acquire (void ** slot, void *data)
9439 {
9440 struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
9441 struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
9442 struct file_info *fi;
9443 const char *f;
9444
9445 gcc_assert (fnad->max_files >= d->emitted_number);
9446
9447 if (! d->emitted_number)
9448 return 1;
9449
9450 gcc_assert (fnad->max_files != fnad->used_files);
9451
9452 fi = fnad->files + fnad->used_files++;
9453
9454 /* Skip all leading "./". */
9455 f = d->filename;
9456 while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
9457 f += 2;
9458
9459 /* Create a new array entry. */
9460 fi->path = f;
9461 fi->length = strlen (f);
9462 fi->file_idx = d;
9463
9464 /* Search for the file name part. */
9465 f = strrchr (f, DIR_SEPARATOR);
9466 #if defined (DIR_SEPARATOR_2)
9467 {
9468 char *g = strrchr (fi->path, DIR_SEPARATOR_2);
9469
9470 if (g != NULL)
9471 {
9472 if (f == NULL || f < g)
9473 f = g;
9474 }
9475 }
9476 #endif
9477
9478 fi->fname = f == NULL ? fi->path : f + 1;
9479 return 1;
9480 }
9481
9482 /* Output the directory table and the file name table. We try to minimize
9483 the total amount of memory needed. A heuristic is used to avoid large
9484 slowdowns with many input files. */
9485
9486 static void
9487 output_file_names (void)
9488 {
9489 struct file_name_acquire_data fnad;
9490 int numfiles;
9491 struct file_info *files;
9492 struct dir_info *dirs;
9493 int *saved;
9494 int *savehere;
9495 int *backmap;
9496 int ndirs;
9497 int idx_offset;
9498 int i;
9499 int idx;
9500
9501 if (!last_emitted_file)
9502 {
9503 dw2_asm_output_data (1, 0, "End directory table");
9504 dw2_asm_output_data (1, 0, "End file name table");
9505 return;
9506 }
9507
9508 numfiles = last_emitted_file->emitted_number;
9509
9510 /* Allocate the various arrays we need. */
9511 files = XALLOCAVEC (struct file_info, numfiles);
9512 dirs = XALLOCAVEC (struct dir_info, numfiles);
9513
9514 fnad.files = files;
9515 fnad.used_files = 0;
9516 fnad.max_files = numfiles;
9517 htab_traverse (file_table, file_name_acquire, &fnad);
9518 gcc_assert (fnad.used_files == fnad.max_files);
9519
9520 qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
9521
9522 /* Find all the different directories used. */
9523 dirs[0].path = files[0].path;
9524 dirs[0].length = files[0].fname - files[0].path;
9525 dirs[0].prefix = -1;
9526 dirs[0].count = 1;
9527 dirs[0].dir_idx = 0;
9528 files[0].dir_idx = 0;
9529 ndirs = 1;
9530
9531 for (i = 1; i < numfiles; i++)
9532 if (files[i].fname - files[i].path == dirs[ndirs - 1].length
9533 && memcmp (dirs[ndirs - 1].path, files[i].path,
9534 dirs[ndirs - 1].length) == 0)
9535 {
9536 /* Same directory as last entry. */
9537 files[i].dir_idx = ndirs - 1;
9538 ++dirs[ndirs - 1].count;
9539 }
9540 else
9541 {
9542 int j;
9543
9544 /* This is a new directory. */
9545 dirs[ndirs].path = files[i].path;
9546 dirs[ndirs].length = files[i].fname - files[i].path;
9547 dirs[ndirs].count = 1;
9548 dirs[ndirs].dir_idx = ndirs;
9549 files[i].dir_idx = ndirs;
9550
9551 /* Search for a prefix. */
9552 dirs[ndirs].prefix = -1;
9553 for (j = 0; j < ndirs; j++)
9554 if (dirs[j].length < dirs[ndirs].length
9555 && dirs[j].length > 1
9556 && (dirs[ndirs].prefix == -1
9557 || dirs[j].length > dirs[dirs[ndirs].prefix].length)
9558 && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
9559 dirs[ndirs].prefix = j;
9560
9561 ++ndirs;
9562 }
9563
9564 /* Now to the actual work. We have to find a subset of the directories which
9565 allow expressing the file name using references to the directory table
9566 with the least amount of characters. We do not do an exhaustive search
9567 where we would have to check out every combination of every single
9568 possible prefix. Instead we use a heuristic which provides nearly optimal
9569 results in most cases and never is much off. */
9570 saved = XALLOCAVEC (int, ndirs);
9571 savehere = XALLOCAVEC (int, ndirs);
9572
9573 memset (saved, '\0', ndirs * sizeof (saved[0]));
9574 for (i = 0; i < ndirs; i++)
9575 {
9576 int j;
9577 int total;
9578
9579 /* We can always save some space for the current directory. But this
9580 does not mean it will be enough to justify adding the directory. */
9581 savehere[i] = dirs[i].length;
9582 total = (savehere[i] - saved[i]) * dirs[i].count;
9583
9584 for (j = i + 1; j < ndirs; j++)
9585 {
9586 savehere[j] = 0;
9587 if (saved[j] < dirs[i].length)
9588 {
9589 /* Determine whether the dirs[i] path is a prefix of the
9590 dirs[j] path. */
9591 int k;
9592
9593 k = dirs[j].prefix;
9594 while (k != -1 && k != (int) i)
9595 k = dirs[k].prefix;
9596
9597 if (k == (int) i)
9598 {
9599 /* Yes it is. We can possibly save some memory by
9600 writing the filenames in dirs[j] relative to
9601 dirs[i]. */
9602 savehere[j] = dirs[i].length;
9603 total += (savehere[j] - saved[j]) * dirs[j].count;
9604 }
9605 }
9606 }
9607
9608 /* Check whether we can save enough to justify adding the dirs[i]
9609 directory. */
9610 if (total > dirs[i].length + 1)
9611 {
9612 /* It's worthwhile adding. */
9613 for (j = i; j < ndirs; j++)
9614 if (savehere[j] > 0)
9615 {
9616 /* Remember how much we saved for this directory so far. */
9617 saved[j] = savehere[j];
9618
9619 /* Remember the prefix directory. */
9620 dirs[j].dir_idx = i;
9621 }
9622 }
9623 }
9624
9625 /* Emit the directory name table. */
9626 idx = 1;
9627 idx_offset = dirs[0].length > 0 ? 1 : 0;
9628 for (i = 1 - idx_offset; i < ndirs; i++)
9629 dw2_asm_output_nstring (dirs[i].path,
9630 dirs[i].length
9631 - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
9632 "Directory Entry: 0x%x", i + idx_offset);
9633
9634 dw2_asm_output_data (1, 0, "End directory table");
9635
9636 /* We have to emit them in the order of emitted_number since that's
9637 used in the debug info generation. To do this efficiently we
9638 generate a back-mapping of the indices first. */
9639 backmap = XALLOCAVEC (int, numfiles);
9640 for (i = 0; i < numfiles; i++)
9641 backmap[files[i].file_idx->emitted_number - 1] = i;
9642
9643 /* Now write all the file names. */
9644 for (i = 0; i < numfiles; i++)
9645 {
9646 int file_idx = backmap[i];
9647 int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
9648
9649 #ifdef VMS_DEBUGGING_INFO
9650 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
9651
9652 /* Setting these fields can lead to debugger miscomparisons,
9653 but VMS Debug requires them to be set correctly. */
9654
9655 int ver;
9656 long long cdt;
9657 long siz;
9658 int maxfilelen = strlen (files[file_idx].path)
9659 + dirs[dir_idx].length
9660 + MAX_VMS_VERSION_LEN + 1;
9661 char *filebuf = XALLOCAVEC (char, maxfilelen);
9662
9663 vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
9664 snprintf (filebuf, maxfilelen, "%s;%d",
9665 files[file_idx].path + dirs[dir_idx].length, ver);
9666
9667 dw2_asm_output_nstring
9668 (filebuf, -1, "File Entry: 0x%x", (unsigned) i + 1);
9669
9670 /* Include directory index. */
9671 dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9672
9673 /* Modification time. */
9674 dw2_asm_output_data_uleb128
9675 ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
9676 ? cdt : 0,
9677 NULL);
9678
9679 /* File length in bytes. */
9680 dw2_asm_output_data_uleb128
9681 ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
9682 ? siz : 0,
9683 NULL);
9684 #else
9685 dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
9686 "File Entry: 0x%x", (unsigned) i + 1);
9687
9688 /* Include directory index. */
9689 dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
9690
9691 /* Modification time. */
9692 dw2_asm_output_data_uleb128 (0, NULL);
9693
9694 /* File length in bytes. */
9695 dw2_asm_output_data_uleb128 (0, NULL);
9696 #endif
9697 }
9698
9699 dw2_asm_output_data (1, 0, "End file name table");
9700 }
9701
9702
9703 /* Output the source line number correspondence information. This
9704 information goes into the .debug_line section. */
9705
9706 static void
9707 output_line_info (void)
9708 {
9709 char l1[20], l2[20], p1[20], p2[20];
9710 char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
9711 char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
9712 unsigned opc;
9713 unsigned n_op_args;
9714 unsigned long lt_index;
9715 unsigned long current_line;
9716 long line_offset;
9717 long line_delta;
9718 unsigned long current_file;
9719 unsigned long function;
9720
9721 ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
9722 ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
9723 ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
9724 ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
9725
9726 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
9727 dw2_asm_output_data (4, 0xffffffff,
9728 "Initial length escape value indicating 64-bit DWARF extension");
9729 dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
9730 "Length of Source Line Info");
9731 ASM_OUTPUT_LABEL (asm_out_file, l1);
9732
9733 dw2_asm_output_data (2, dwarf_version, "DWARF Version");
9734 dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
9735 ASM_OUTPUT_LABEL (asm_out_file, p1);
9736
9737 /* Define the architecture-dependent minimum instruction length (in
9738 bytes). In this implementation of DWARF, this field is used for
9739 information purposes only. Since GCC generates assembly language,
9740 we have no a priori knowledge of how many instruction bytes are
9741 generated for each source line, and therefore can use only the
9742 DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
9743 commands. Accordingly, we fix this as `1', which is "correct
9744 enough" for all architectures, and don't let the target override. */
9745 dw2_asm_output_data (1, 1,
9746 "Minimum Instruction Length");
9747
9748 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
9749 "Default is_stmt_start flag");
9750 dw2_asm_output_data (1, DWARF_LINE_BASE,
9751 "Line Base Value (Special Opcodes)");
9752 dw2_asm_output_data (1, DWARF_LINE_RANGE,
9753 "Line Range Value (Special Opcodes)");
9754 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
9755 "Special Opcode Base");
9756
9757 for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
9758 {
9759 switch (opc)
9760 {
9761 case DW_LNS_advance_pc:
9762 case DW_LNS_advance_line:
9763 case DW_LNS_set_file:
9764 case DW_LNS_set_column:
9765 case DW_LNS_fixed_advance_pc:
9766 n_op_args = 1;
9767 break;
9768 default:
9769 n_op_args = 0;
9770 break;
9771 }
9772
9773 dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
9774 opc, n_op_args);
9775 }
9776
9777 /* Write out the information about the files we use. */
9778 output_file_names ();
9779 ASM_OUTPUT_LABEL (asm_out_file, p2);
9780
9781 /* We used to set the address register to the first location in the text
9782 section here, but that didn't accomplish anything since we already
9783 have a line note for the opening brace of the first function. */
9784
9785 /* Generate the line number to PC correspondence table, encoded as
9786 a series of state machine operations. */
9787 current_file = 1;
9788 current_line = 1;
9789
9790 if (cfun && in_cold_section_p)
9791 strcpy (prev_line_label, crtl->subsections.cold_section_label);
9792 else
9793 strcpy (prev_line_label, text_section_label);
9794 for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
9795 {
9796 dw_line_info_ref line_info = &line_info_table[lt_index];
9797
9798 #if 0
9799 /* Disable this optimization for now; GDB wants to see two line notes
9800 at the beginning of a function so it can find the end of the
9801 prologue. */
9802
9803 /* Don't emit anything for redundant notes. Just updating the
9804 address doesn't accomplish anything, because we already assume
9805 that anything after the last address is this line. */
9806 if (line_info->dw_line_num == current_line
9807 && line_info->dw_file_num == current_file)
9808 continue;
9809 #endif
9810
9811 /* Emit debug info for the address of the current line.
9812
9813 Unfortunately, we have little choice here currently, and must always
9814 use the most general form. GCC does not know the address delta
9815 itself, so we can't use DW_LNS_advance_pc. Many ports do have length
9816 attributes which will give an upper bound on the address range. We
9817 could perhaps use length attributes to determine when it is safe to
9818 use DW_LNS_fixed_advance_pc. */
9819
9820 ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
9821 if (0)
9822 {
9823 /* This can handle deltas up to 0xffff. This takes 3 bytes. */
9824 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
9825 "DW_LNS_fixed_advance_pc");
9826 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
9827 }
9828 else
9829 {
9830 /* This can handle any delta. This takes
9831 4+DWARF2_ADDR_SIZE bytes. */
9832 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9833 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9834 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9835 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
9836 }
9837
9838 strcpy (prev_line_label, line_label);
9839
9840 /* Emit debug info for the source file of the current line, if
9841 different from the previous line. */
9842 if (line_info->dw_file_num != current_file)
9843 {
9844 current_file = line_info->dw_file_num;
9845 dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
9846 dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
9847 }
9848
9849 /* Emit debug info for the current line number, choosing the encoding
9850 that uses the least amount of space. */
9851 if (line_info->dw_line_num != current_line)
9852 {
9853 line_offset = line_info->dw_line_num - current_line;
9854 line_delta = line_offset - DWARF_LINE_BASE;
9855 current_line = line_info->dw_line_num;
9856 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
9857 /* This can handle deltas from -10 to 234, using the current
9858 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE. This
9859 takes 1 byte. */
9860 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
9861 "line %lu", current_line);
9862 else
9863 {
9864 /* This can handle any delta. This takes at least 4 bytes,
9865 depending on the value being encoded. */
9866 dw2_asm_output_data (1, DW_LNS_advance_line,
9867 "advance to line %lu", current_line);
9868 dw2_asm_output_data_sleb128 (line_offset, NULL);
9869 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
9870 }
9871 }
9872 else
9873 /* We still need to start a new row, so output a copy insn. */
9874 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
9875 }
9876
9877 /* Emit debug info for the address of the end of the function. */
9878 if (0)
9879 {
9880 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
9881 "DW_LNS_fixed_advance_pc");
9882 dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
9883 }
9884 else
9885 {
9886 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9887 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9888 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9889 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
9890 }
9891
9892 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
9893 dw2_asm_output_data_uleb128 (1, NULL);
9894 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
9895
9896 function = 0;
9897 current_file = 1;
9898 current_line = 1;
9899 for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
9900 {
9901 dw_separate_line_info_ref line_info
9902 = &separate_line_info_table[lt_index];
9903
9904 #if 0
9905 /* Don't emit anything for redundant notes. */
9906 if (line_info->dw_line_num == current_line
9907 && line_info->dw_file_num == current_file
9908 && line_info->function == function)
9909 goto cont;
9910 #endif
9911
9912 /* Emit debug info for the address of the current line. If this is
9913 a new function, or the first line of a function, then we need
9914 to handle it differently. */
9915 ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
9916 lt_index);
9917 if (function != line_info->function)
9918 {
9919 function = line_info->function;
9920
9921 /* Set the address register to the first line in the function. */
9922 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9923 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9924 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9925 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
9926 }
9927 else
9928 {
9929 /* ??? See the DW_LNS_advance_pc comment above. */
9930 if (0)
9931 {
9932 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
9933 "DW_LNS_fixed_advance_pc");
9934 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
9935 }
9936 else
9937 {
9938 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9939 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9940 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9941 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
9942 }
9943 }
9944
9945 strcpy (prev_line_label, line_label);
9946
9947 /* Emit debug info for the source file of the current line, if
9948 different from the previous line. */
9949 if (line_info->dw_file_num != current_file)
9950 {
9951 current_file = line_info->dw_file_num;
9952 dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
9953 dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
9954 }
9955
9956 /* Emit debug info for the current line number, choosing the encoding
9957 that uses the least amount of space. */
9958 if (line_info->dw_line_num != current_line)
9959 {
9960 line_offset = line_info->dw_line_num - current_line;
9961 line_delta = line_offset - DWARF_LINE_BASE;
9962 current_line = line_info->dw_line_num;
9963 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
9964 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
9965 "line %lu", current_line);
9966 else
9967 {
9968 dw2_asm_output_data (1, DW_LNS_advance_line,
9969 "advance to line %lu", current_line);
9970 dw2_asm_output_data_sleb128 (line_offset, NULL);
9971 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
9972 }
9973 }
9974 else
9975 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
9976
9977 #if 0
9978 cont:
9979 #endif
9980
9981 lt_index++;
9982
9983 /* If we're done with a function, end its sequence. */
9984 if (lt_index == separate_line_info_table_in_use
9985 || separate_line_info_table[lt_index].function != function)
9986 {
9987 current_file = 1;
9988 current_line = 1;
9989
9990 /* Emit debug info for the address of the end of the function. */
9991 ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
9992 if (0)
9993 {
9994 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
9995 "DW_LNS_fixed_advance_pc");
9996 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
9997 }
9998 else
9999 {
10000 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
10001 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
10002 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
10003 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
10004 }
10005
10006 /* Output the marker for the end of this sequence. */
10007 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
10008 dw2_asm_output_data_uleb128 (1, NULL);
10009 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
10010 }
10011 }
10012
10013 /* Output the marker for the end of the line number info. */
10014 ASM_OUTPUT_LABEL (asm_out_file, l2);
10015 }
10016 \f
10017 /* Given a pointer to a tree node for some base type, return a pointer to
10018 a DIE that describes the given type.
10019
10020 This routine must only be called for GCC type nodes that correspond to
10021 Dwarf base (fundamental) types. */
10022
10023 static dw_die_ref
10024 base_type_die (tree type)
10025 {
10026 dw_die_ref base_type_result;
10027 enum dwarf_type encoding;
10028
10029 if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
10030 return 0;
10031
10032 /* If this is a subtype that should not be emitted as a subrange type,
10033 use the base type. See subrange_type_for_debug_p. */
10034 if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
10035 type = TREE_TYPE (type);
10036
10037 switch (TREE_CODE (type))
10038 {
10039 case INTEGER_TYPE:
10040 if (TYPE_STRING_FLAG (type))
10041 {
10042 if (TYPE_UNSIGNED (type))
10043 encoding = DW_ATE_unsigned_char;
10044 else
10045 encoding = DW_ATE_signed_char;
10046 }
10047 else if (TYPE_UNSIGNED (type))
10048 encoding = DW_ATE_unsigned;
10049 else
10050 encoding = DW_ATE_signed;
10051 break;
10052
10053 case REAL_TYPE:
10054 if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
10055 encoding = DW_ATE_decimal_float;
10056 else
10057 encoding = DW_ATE_float;
10058 break;
10059
10060 case FIXED_POINT_TYPE:
10061 if (TYPE_UNSIGNED (type))
10062 encoding = DW_ATE_unsigned_fixed;
10063 else
10064 encoding = DW_ATE_signed_fixed;
10065 break;
10066
10067 /* Dwarf2 doesn't know anything about complex ints, so use
10068 a user defined type for it. */
10069 case COMPLEX_TYPE:
10070 if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
10071 encoding = DW_ATE_complex_float;
10072 else
10073 encoding = DW_ATE_lo_user;
10074 break;
10075
10076 case BOOLEAN_TYPE:
10077 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
10078 encoding = DW_ATE_boolean;
10079 break;
10080
10081 default:
10082 /* No other TREE_CODEs are Dwarf fundamental types. */
10083 gcc_unreachable ();
10084 }
10085
10086 base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
10087
10088 /* This probably indicates a bug. */
10089 if (! TYPE_NAME (type))
10090 add_name_attribute (base_type_result, "__unknown__");
10091
10092 add_AT_unsigned (base_type_result, DW_AT_byte_size,
10093 int_size_in_bytes (type));
10094 add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
10095
10096 return base_type_result;
10097 }
10098
10099 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
10100 given input type is a Dwarf "fundamental" type. Otherwise return null. */
10101
10102 static inline int
10103 is_base_type (tree type)
10104 {
10105 switch (TREE_CODE (type))
10106 {
10107 case ERROR_MARK:
10108 case VOID_TYPE:
10109 case INTEGER_TYPE:
10110 case REAL_TYPE:
10111 case FIXED_POINT_TYPE:
10112 case COMPLEX_TYPE:
10113 case BOOLEAN_TYPE:
10114 return 1;
10115
10116 case ARRAY_TYPE:
10117 case RECORD_TYPE:
10118 case UNION_TYPE:
10119 case QUAL_UNION_TYPE:
10120 case ENUMERAL_TYPE:
10121 case FUNCTION_TYPE:
10122 case METHOD_TYPE:
10123 case POINTER_TYPE:
10124 case REFERENCE_TYPE:
10125 case OFFSET_TYPE:
10126 case LANG_TYPE:
10127 case VECTOR_TYPE:
10128 return 0;
10129
10130 default:
10131 gcc_unreachable ();
10132 }
10133
10134 return 0;
10135 }
10136
10137 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
10138 node, return the size in bits for the type if it is a constant, or else
10139 return the alignment for the type if the type's size is not constant, or
10140 else return BITS_PER_WORD if the type actually turns out to be an
10141 ERROR_MARK node. */
10142
10143 static inline unsigned HOST_WIDE_INT
10144 simple_type_size_in_bits (const_tree type)
10145 {
10146 if (TREE_CODE (type) == ERROR_MARK)
10147 return BITS_PER_WORD;
10148 else if (TYPE_SIZE (type) == NULL_TREE)
10149 return 0;
10150 else if (host_integerp (TYPE_SIZE (type), 1))
10151 return tree_low_cst (TYPE_SIZE (type), 1);
10152 else
10153 return TYPE_ALIGN (type);
10154 }
10155
10156 /* Given a pointer to a tree node for a subrange type, return a pointer
10157 to a DIE that describes the given type. */
10158
10159 static dw_die_ref
10160 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
10161 {
10162 dw_die_ref subrange_die;
10163 const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
10164
10165 if (context_die == NULL)
10166 context_die = comp_unit_die;
10167
10168 subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
10169
10170 if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
10171 {
10172 /* The size of the subrange type and its base type do not match,
10173 so we need to generate a size attribute for the subrange type. */
10174 add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
10175 }
10176
10177 if (low)
10178 add_bound_info (subrange_die, DW_AT_lower_bound, low);
10179 if (high)
10180 add_bound_info (subrange_die, DW_AT_upper_bound, high);
10181
10182 return subrange_die;
10183 }
10184
10185 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
10186 entry that chains various modifiers in front of the given type. */
10187
10188 static dw_die_ref
10189 modified_type_die (tree type, int is_const_type, int is_volatile_type,
10190 dw_die_ref context_die)
10191 {
10192 enum tree_code code = TREE_CODE (type);
10193 dw_die_ref mod_type_die;
10194 dw_die_ref sub_die = NULL;
10195 tree item_type = NULL;
10196 tree qualified_type;
10197 tree name, low, high;
10198
10199 if (code == ERROR_MARK)
10200 return NULL;
10201
10202 /* See if we already have the appropriately qualified variant of
10203 this type. */
10204 qualified_type
10205 = get_qualified_type (type,
10206 ((is_const_type ? TYPE_QUAL_CONST : 0)
10207 | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
10208
10209 /* If we do, then we can just use its DIE, if it exists. */
10210 if (qualified_type)
10211 {
10212 mod_type_die = lookup_type_die (qualified_type);
10213 if (mod_type_die)
10214 return mod_type_die;
10215 }
10216
10217 name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
10218
10219 /* Handle C typedef types. */
10220 if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name))
10221 {
10222 tree dtype = TREE_TYPE (name);
10223
10224 if (qualified_type == dtype)
10225 {
10226 /* For a named type, use the typedef. */
10227 gen_type_die (qualified_type, context_die);
10228 return lookup_type_die (qualified_type);
10229 }
10230 else if (is_const_type < TYPE_READONLY (dtype)
10231 || is_volatile_type < TYPE_VOLATILE (dtype)
10232 || (is_const_type <= TYPE_READONLY (dtype)
10233 && is_volatile_type <= TYPE_VOLATILE (dtype)
10234 && DECL_ORIGINAL_TYPE (name) != type))
10235 /* cv-unqualified version of named type. Just use the unnamed
10236 type to which it refers. */
10237 return modified_type_die (DECL_ORIGINAL_TYPE (name),
10238 is_const_type, is_volatile_type,
10239 context_die);
10240 /* Else cv-qualified version of named type; fall through. */
10241 }
10242
10243 if (is_const_type)
10244 {
10245 mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
10246 sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
10247 }
10248 else if (is_volatile_type)
10249 {
10250 mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
10251 sub_die = modified_type_die (type, 0, 0, context_die);
10252 }
10253 else if (code == POINTER_TYPE)
10254 {
10255 mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
10256 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
10257 simple_type_size_in_bits (type) / BITS_PER_UNIT);
10258 item_type = TREE_TYPE (type);
10259 }
10260 else if (code == REFERENCE_TYPE)
10261 {
10262 mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
10263 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
10264 simple_type_size_in_bits (type) / BITS_PER_UNIT);
10265 item_type = TREE_TYPE (type);
10266 }
10267 else if (code == INTEGER_TYPE
10268 && TREE_TYPE (type) != NULL_TREE
10269 && subrange_type_for_debug_p (type, &low, &high))
10270 {
10271 mod_type_die = subrange_type_die (type, low, high, context_die);
10272 item_type = TREE_TYPE (type);
10273 }
10274 else if (is_base_type (type))
10275 mod_type_die = base_type_die (type);
10276 else
10277 {
10278 gen_type_die (type, context_die);
10279
10280 /* We have to get the type_main_variant here (and pass that to the
10281 `lookup_type_die' routine) because the ..._TYPE node we have
10282 might simply be a *copy* of some original type node (where the
10283 copy was created to help us keep track of typedef names) and
10284 that copy might have a different TYPE_UID from the original
10285 ..._TYPE node. */
10286 if (TREE_CODE (type) != VECTOR_TYPE)
10287 return lookup_type_die (type_main_variant (type));
10288 else
10289 /* Vectors have the debugging information in the type,
10290 not the main variant. */
10291 return lookup_type_die (type);
10292 }
10293
10294 /* Builtin types don't have a DECL_ORIGINAL_TYPE. For those,
10295 don't output a DW_TAG_typedef, since there isn't one in the
10296 user's program; just attach a DW_AT_name to the type. */
10297 if (name
10298 && (TREE_CODE (name) != TYPE_DECL
10299 || (TREE_TYPE (name) == qualified_type && DECL_NAME (name))))
10300 {
10301 if (TREE_CODE (name) == TYPE_DECL)
10302 /* Could just call add_name_and_src_coords_attributes here,
10303 but since this is a builtin type it doesn't have any
10304 useful source coordinates anyway. */
10305 name = DECL_NAME (name);
10306 add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
10307 }
10308
10309 if (qualified_type)
10310 equate_type_number_to_die (qualified_type, mod_type_die);
10311
10312 if (item_type)
10313 /* We must do this after the equate_type_number_to_die call, in case
10314 this is a recursive type. This ensures that the modified_type_die
10315 recursion will terminate even if the type is recursive. Recursive
10316 types are possible in Ada. */
10317 sub_die = modified_type_die (item_type,
10318 TYPE_READONLY (item_type),
10319 TYPE_VOLATILE (item_type),
10320 context_die);
10321
10322 if (sub_die != NULL)
10323 add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
10324
10325 return mod_type_die;
10326 }
10327
10328 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
10329 an enumerated type. */
10330
10331 static inline int
10332 type_is_enum (const_tree type)
10333 {
10334 return TREE_CODE (type) == ENUMERAL_TYPE;
10335 }
10336
10337 /* Return the DBX register number described by a given RTL node. */
10338
10339 static unsigned int
10340 dbx_reg_number (const_rtx rtl)
10341 {
10342 unsigned regno = REGNO (rtl);
10343
10344 gcc_assert (regno < FIRST_PSEUDO_REGISTER);
10345
10346 #ifdef LEAF_REG_REMAP
10347 if (current_function_uses_only_leaf_regs)
10348 {
10349 int leaf_reg = LEAF_REG_REMAP (regno);
10350 if (leaf_reg != -1)
10351 regno = (unsigned) leaf_reg;
10352 }
10353 #endif
10354
10355 return DBX_REGISTER_NUMBER (regno);
10356 }
10357
10358 /* Optionally add a DW_OP_piece term to a location description expression.
10359 DW_OP_piece is only added if the location description expression already
10360 doesn't end with DW_OP_piece. */
10361
10362 static void
10363 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
10364 {
10365 dw_loc_descr_ref loc;
10366
10367 if (*list_head != NULL)
10368 {
10369 /* Find the end of the chain. */
10370 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
10371 ;
10372
10373 if (loc->dw_loc_opc != DW_OP_piece)
10374 loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
10375 }
10376 }
10377
10378 /* Return a location descriptor that designates a machine register or
10379 zero if there is none. */
10380
10381 static dw_loc_descr_ref
10382 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
10383 {
10384 rtx regs;
10385
10386 if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
10387 return 0;
10388
10389 regs = targetm.dwarf_register_span (rtl);
10390
10391 if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
10392 return multiple_reg_loc_descriptor (rtl, regs, initialized);
10393 else
10394 return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
10395 }
10396
10397 /* Return a location descriptor that designates a machine register for
10398 a given hard register number. */
10399
10400 static dw_loc_descr_ref
10401 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
10402 {
10403 dw_loc_descr_ref reg_loc_descr;
10404
10405 if (regno <= 31)
10406 reg_loc_descr
10407 = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
10408 else
10409 reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
10410
10411 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10412 add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10413
10414 return reg_loc_descr;
10415 }
10416
10417 /* Given an RTL of a register, return a location descriptor that
10418 designates a value that spans more than one register. */
10419
10420 static dw_loc_descr_ref
10421 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
10422 enum var_init_status initialized)
10423 {
10424 int nregs, size, i;
10425 unsigned reg;
10426 dw_loc_descr_ref loc_result = NULL;
10427
10428 reg = REGNO (rtl);
10429 #ifdef LEAF_REG_REMAP
10430 if (current_function_uses_only_leaf_regs)
10431 {
10432 int leaf_reg = LEAF_REG_REMAP (reg);
10433 if (leaf_reg != -1)
10434 reg = (unsigned) leaf_reg;
10435 }
10436 #endif
10437 gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
10438 nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
10439
10440 /* Simple, contiguous registers. */
10441 if (regs == NULL_RTX)
10442 {
10443 size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
10444
10445 loc_result = NULL;
10446 while (nregs--)
10447 {
10448 dw_loc_descr_ref t;
10449
10450 t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
10451 VAR_INIT_STATUS_INITIALIZED);
10452 add_loc_descr (&loc_result, t);
10453 add_loc_descr_op_piece (&loc_result, size);
10454 ++reg;
10455 }
10456 return loc_result;
10457 }
10458
10459 /* Now onto stupid register sets in non contiguous locations. */
10460
10461 gcc_assert (GET_CODE (regs) == PARALLEL);
10462
10463 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10464 loc_result = NULL;
10465
10466 for (i = 0; i < XVECLEN (regs, 0); ++i)
10467 {
10468 dw_loc_descr_ref t;
10469
10470 t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
10471 VAR_INIT_STATUS_INITIALIZED);
10472 add_loc_descr (&loc_result, t);
10473 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
10474 add_loc_descr_op_piece (&loc_result, size);
10475 }
10476
10477 if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
10478 add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10479 return loc_result;
10480 }
10481
10482 #endif /* DWARF2_DEBUGGING_INFO */
10483
10484 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
10485
10486 /* Return a location descriptor that designates a constant. */
10487
10488 static dw_loc_descr_ref
10489 int_loc_descriptor (HOST_WIDE_INT i)
10490 {
10491 enum dwarf_location_atom op;
10492
10493 /* Pick the smallest representation of a constant, rather than just
10494 defaulting to the LEB encoding. */
10495 if (i >= 0)
10496 {
10497 if (i <= 31)
10498 op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
10499 else if (i <= 0xff)
10500 op = DW_OP_const1u;
10501 else if (i <= 0xffff)
10502 op = DW_OP_const2u;
10503 else if (HOST_BITS_PER_WIDE_INT == 32
10504 || i <= 0xffffffff)
10505 op = DW_OP_const4u;
10506 else
10507 op = DW_OP_constu;
10508 }
10509 else
10510 {
10511 if (i >= -0x80)
10512 op = DW_OP_const1s;
10513 else if (i >= -0x8000)
10514 op = DW_OP_const2s;
10515 else if (HOST_BITS_PER_WIDE_INT == 32
10516 || i >= -0x80000000)
10517 op = DW_OP_const4s;
10518 else
10519 op = DW_OP_consts;
10520 }
10521
10522 return new_loc_descr (op, i, 0);
10523 }
10524 #endif
10525
10526 #ifdef DWARF2_DEBUGGING_INFO
10527
10528 /* Return a location descriptor that designates a base+offset location. */
10529
10530 static dw_loc_descr_ref
10531 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
10532 enum var_init_status initialized)
10533 {
10534 unsigned int regno;
10535 dw_loc_descr_ref result;
10536 dw_fde_ref fde = current_fde ();
10537
10538 /* We only use "frame base" when we're sure we're talking about the
10539 post-prologue local stack frame. We do this by *not* running
10540 register elimination until this point, and recognizing the special
10541 argument pointer and soft frame pointer rtx's. */
10542 if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
10543 {
10544 rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
10545
10546 if (elim != reg)
10547 {
10548 if (GET_CODE (elim) == PLUS)
10549 {
10550 offset += INTVAL (XEXP (elim, 1));
10551 elim = XEXP (elim, 0);
10552 }
10553 gcc_assert ((SUPPORTS_STACK_ALIGNMENT
10554 && (elim == hard_frame_pointer_rtx
10555 || elim == stack_pointer_rtx))
10556 || elim == (frame_pointer_needed
10557 ? hard_frame_pointer_rtx
10558 : stack_pointer_rtx));
10559
10560 /* If drap register is used to align stack, use frame
10561 pointer + offset to access stack variables. If stack
10562 is aligned without drap, use stack pointer + offset to
10563 access stack variables. */
10564 if (crtl->stack_realign_tried
10565 && reg == frame_pointer_rtx)
10566 {
10567 int base_reg
10568 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
10569 ? HARD_FRAME_POINTER_REGNUM
10570 : STACK_POINTER_REGNUM);
10571 return new_reg_loc_descr (base_reg, offset);
10572 }
10573
10574 offset += frame_pointer_fb_offset;
10575 return new_loc_descr (DW_OP_fbreg, offset, 0);
10576 }
10577 }
10578 else if (fde
10579 && fde->drap_reg != INVALID_REGNUM
10580 && (fde->drap_reg == REGNO (reg)
10581 || fde->vdrap_reg == REGNO (reg)))
10582 {
10583 /* Use cfa+offset to represent the location of arguments passed
10584 on stack when drap is used to align stack. */
10585 return new_loc_descr (DW_OP_fbreg, offset, 0);
10586 }
10587
10588 regno = dbx_reg_number (reg);
10589 if (regno <= 31)
10590 result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
10591 offset, 0);
10592 else
10593 result = new_loc_descr (DW_OP_bregx, regno, offset);
10594
10595 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10596 add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10597
10598 return result;
10599 }
10600
10601 /* Return true if this RTL expression describes a base+offset calculation. */
10602
10603 static inline int
10604 is_based_loc (const_rtx rtl)
10605 {
10606 return (GET_CODE (rtl) == PLUS
10607 && ((REG_P (XEXP (rtl, 0))
10608 && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
10609 && CONST_INT_P (XEXP (rtl, 1)))));
10610 }
10611
10612 /* Return a descriptor that describes the concatenation of N locations
10613 used to form the address of a memory location. */
10614
10615 static dw_loc_descr_ref
10616 concatn_mem_loc_descriptor (rtx concatn, enum machine_mode mode,
10617 enum var_init_status initialized)
10618 {
10619 unsigned int i;
10620 dw_loc_descr_ref cc_loc_result = NULL;
10621 unsigned int n = XVECLEN (concatn, 0);
10622
10623 for (i = 0; i < n; ++i)
10624 {
10625 dw_loc_descr_ref ref;
10626 rtx x = XVECEXP (concatn, 0, i);
10627
10628 ref = mem_loc_descriptor (x, mode, VAR_INIT_STATUS_INITIALIZED);
10629 if (ref == NULL)
10630 return NULL;
10631
10632 add_loc_descr (&cc_loc_result, ref);
10633 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
10634 }
10635
10636 if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
10637 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10638
10639 return cc_loc_result;
10640 }
10641
10642 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
10643 failed. */
10644
10645 static dw_loc_descr_ref
10646 tls_mem_loc_descriptor (rtx mem)
10647 {
10648 tree base;
10649 dw_loc_descr_ref loc_result;
10650
10651 if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
10652 return NULL;
10653
10654 base = get_base_address (MEM_EXPR (mem));
10655 if (base == NULL
10656 || TREE_CODE (base) != VAR_DECL
10657 || !DECL_THREAD_LOCAL_P (base))
10658 return NULL;
10659
10660 loc_result = loc_descriptor_from_tree_1 (MEM_EXPR (mem), 2);
10661 if (loc_result == NULL)
10662 return NULL;
10663
10664 if (INTVAL (MEM_OFFSET (mem)))
10665 loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
10666
10667 return loc_result;
10668 }
10669
10670 /* The following routine converts the RTL for a variable or parameter
10671 (resident in memory) into an equivalent Dwarf representation of a
10672 mechanism for getting the address of that same variable onto the top of a
10673 hypothetical "address evaluation" stack.
10674
10675 When creating memory location descriptors, we are effectively transforming
10676 the RTL for a memory-resident object into its Dwarf postfix expression
10677 equivalent. This routine recursively descends an RTL tree, turning
10678 it into Dwarf postfix code as it goes.
10679
10680 MODE is the mode of the memory reference, needed to handle some
10681 autoincrement addressing modes.
10682
10683 CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
10684 location list for RTL.
10685
10686 Return 0 if we can't represent the location. */
10687
10688 static dw_loc_descr_ref
10689 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
10690 enum var_init_status initialized)
10691 {
10692 dw_loc_descr_ref mem_loc_result = NULL;
10693 enum dwarf_location_atom op;
10694
10695 /* Note that for a dynamically sized array, the location we will generate a
10696 description of here will be the lowest numbered location which is
10697 actually within the array. That's *not* necessarily the same as the
10698 zeroth element of the array. */
10699
10700 rtl = targetm.delegitimize_address (rtl);
10701
10702 switch (GET_CODE (rtl))
10703 {
10704 case POST_INC:
10705 case POST_DEC:
10706 case POST_MODIFY:
10707 /* POST_INC and POST_DEC can be handled just like a SUBREG. So we
10708 just fall into the SUBREG code. */
10709
10710 /* ... fall through ... */
10711
10712 case SUBREG:
10713 /* The case of a subreg may arise when we have a local (register)
10714 variable or a formal (register) parameter which doesn't quite fill
10715 up an entire register. For now, just assume that it is
10716 legitimate to make the Dwarf info refer to the whole register which
10717 contains the given subreg. */
10718 rtl = XEXP (rtl, 0);
10719
10720 /* ... fall through ... */
10721
10722 case REG:
10723 /* Whenever a register number forms a part of the description of the
10724 method for calculating the (dynamic) address of a memory resident
10725 object, DWARF rules require the register number be referred to as
10726 a "base register". This distinction is not based in any way upon
10727 what category of register the hardware believes the given register
10728 belongs to. This is strictly DWARF terminology we're dealing with
10729 here. Note that in cases where the location of a memory-resident
10730 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
10731 OP_CONST (0)) the actual DWARF location descriptor that we generate
10732 may just be OP_BASEREG (basereg). This may look deceptively like
10733 the object in question was allocated to a register (rather than in
10734 memory) so DWARF consumers need to be aware of the subtle
10735 distinction between OP_REG and OP_BASEREG. */
10736 if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
10737 mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
10738 else if (stack_realign_drap
10739 && crtl->drap_reg
10740 && crtl->args.internal_arg_pointer == rtl
10741 && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
10742 {
10743 /* If RTL is internal_arg_pointer, which has been optimized
10744 out, use DRAP instead. */
10745 mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
10746 VAR_INIT_STATUS_INITIALIZED);
10747 }
10748 break;
10749
10750 case MEM:
10751 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
10752 VAR_INIT_STATUS_INITIALIZED);
10753 if (mem_loc_result == NULL)
10754 mem_loc_result = tls_mem_loc_descriptor (rtl);
10755 if (mem_loc_result != 0)
10756 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
10757 break;
10758
10759 case LO_SUM:
10760 rtl = XEXP (rtl, 1);
10761
10762 /* ... fall through ... */
10763
10764 case LABEL_REF:
10765 /* Some ports can transform a symbol ref into a label ref, because
10766 the symbol ref is too far away and has to be dumped into a constant
10767 pool. */
10768 case CONST:
10769 case SYMBOL_REF:
10770 /* Alternatively, the symbol in the constant pool might be referenced
10771 by a different symbol. */
10772 if (GET_CODE (rtl) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (rtl))
10773 {
10774 bool marked;
10775 rtx tmp = get_pool_constant_mark (rtl, &marked);
10776
10777 if (GET_CODE (tmp) == SYMBOL_REF)
10778 {
10779 rtl = tmp;
10780 if (CONSTANT_POOL_ADDRESS_P (tmp))
10781 get_pool_constant_mark (tmp, &marked);
10782 else
10783 marked = true;
10784 }
10785
10786 /* If all references to this pool constant were optimized away,
10787 it was not output and thus we can't represent it.
10788 FIXME: might try to use DW_OP_const_value here, though
10789 DW_OP_piece complicates it. */
10790 if (!marked)
10791 return 0;
10792 }
10793
10794 mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
10795 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
10796 mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
10797 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
10798 break;
10799
10800 case PRE_MODIFY:
10801 /* Extract the PLUS expression nested inside and fall into
10802 PLUS code below. */
10803 rtl = XEXP (rtl, 1);
10804 goto plus;
10805
10806 case PRE_INC:
10807 case PRE_DEC:
10808 /* Turn these into a PLUS expression and fall into the PLUS code
10809 below. */
10810 rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
10811 GEN_INT (GET_CODE (rtl) == PRE_INC
10812 ? GET_MODE_UNIT_SIZE (mode)
10813 : -GET_MODE_UNIT_SIZE (mode)));
10814
10815 /* ... fall through ... */
10816
10817 case PLUS:
10818 plus:
10819 if (is_based_loc (rtl))
10820 mem_loc_result = based_loc_descr (XEXP (rtl, 0),
10821 INTVAL (XEXP (rtl, 1)),
10822 VAR_INIT_STATUS_INITIALIZED);
10823 else
10824 {
10825 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
10826 VAR_INIT_STATUS_INITIALIZED);
10827 if (mem_loc_result == 0)
10828 break;
10829
10830 if (CONST_INT_P (XEXP (rtl, 1)))
10831 loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
10832 else
10833 {
10834 dw_loc_descr_ref mem_loc_result2
10835 = mem_loc_descriptor (XEXP (rtl, 1), mode,
10836 VAR_INIT_STATUS_INITIALIZED);
10837 if (mem_loc_result2 == 0)
10838 break;
10839 add_loc_descr (&mem_loc_result, mem_loc_result2);
10840 add_loc_descr (&mem_loc_result,
10841 new_loc_descr (DW_OP_plus, 0, 0));
10842 }
10843 }
10844 break;
10845
10846 /* If a pseudo-reg is optimized away, it is possible for it to
10847 be replaced with a MEM containing a multiply or shift. */
10848 case MULT:
10849 op = DW_OP_mul;
10850 goto do_binop;
10851
10852 case ASHIFT:
10853 op = DW_OP_shl;
10854 goto do_binop;
10855
10856 case ASHIFTRT:
10857 op = DW_OP_shra;
10858 goto do_binop;
10859
10860 case LSHIFTRT:
10861 op = DW_OP_shr;
10862 goto do_binop;
10863
10864 do_binop:
10865 {
10866 dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
10867 VAR_INIT_STATUS_INITIALIZED);
10868 dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
10869 VAR_INIT_STATUS_INITIALIZED);
10870
10871 if (op0 == 0 || op1 == 0)
10872 break;
10873
10874 mem_loc_result = op0;
10875 add_loc_descr (&mem_loc_result, op1);
10876 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
10877 break;
10878 }
10879
10880 case CONST_INT:
10881 mem_loc_result = int_loc_descriptor (INTVAL (rtl));
10882 break;
10883
10884 case CONCATN:
10885 mem_loc_result = concatn_mem_loc_descriptor (rtl, mode,
10886 VAR_INIT_STATUS_INITIALIZED);
10887 break;
10888
10889 case UNSPEC:
10890 /* If delegitimize_address couldn't do anything with the UNSPEC, we
10891 can't express it in the debug info. This can happen e.g. with some
10892 TLS UNSPECs. */
10893 break;
10894
10895 default:
10896 gcc_unreachable ();
10897 }
10898
10899 if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
10900 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10901
10902 return mem_loc_result;
10903 }
10904
10905 /* Return a descriptor that describes the concatenation of two locations.
10906 This is typically a complex variable. */
10907
10908 static dw_loc_descr_ref
10909 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
10910 {
10911 dw_loc_descr_ref cc_loc_result = NULL;
10912 dw_loc_descr_ref x0_ref = loc_descriptor (x0, VAR_INIT_STATUS_INITIALIZED);
10913 dw_loc_descr_ref x1_ref = loc_descriptor (x1, VAR_INIT_STATUS_INITIALIZED);
10914
10915 if (x0_ref == 0 || x1_ref == 0)
10916 return 0;
10917
10918 cc_loc_result = x0_ref;
10919 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
10920
10921 add_loc_descr (&cc_loc_result, x1_ref);
10922 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
10923
10924 if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10925 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10926
10927 return cc_loc_result;
10928 }
10929
10930 /* Return a descriptor that describes the concatenation of N
10931 locations. */
10932
10933 static dw_loc_descr_ref
10934 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
10935 {
10936 unsigned int i;
10937 dw_loc_descr_ref cc_loc_result = NULL;
10938 unsigned int n = XVECLEN (concatn, 0);
10939
10940 for (i = 0; i < n; ++i)
10941 {
10942 dw_loc_descr_ref ref;
10943 rtx x = XVECEXP (concatn, 0, i);
10944
10945 ref = loc_descriptor (x, VAR_INIT_STATUS_INITIALIZED);
10946 if (ref == NULL)
10947 return NULL;
10948
10949 add_loc_descr (&cc_loc_result, ref);
10950 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
10951 }
10952
10953 if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
10954 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10955
10956 return cc_loc_result;
10957 }
10958
10959 /* Output a proper Dwarf location descriptor for a variable or parameter
10960 which is either allocated in a register or in a memory location. For a
10961 register, we just generate an OP_REG and the register number. For a
10962 memory location we provide a Dwarf postfix expression describing how to
10963 generate the (dynamic) address of the object onto the address stack.
10964
10965 If we don't know how to describe it, return 0. */
10966
10967 static dw_loc_descr_ref
10968 loc_descriptor (rtx rtl, enum var_init_status initialized)
10969 {
10970 dw_loc_descr_ref loc_result = NULL;
10971
10972 switch (GET_CODE (rtl))
10973 {
10974 case SUBREG:
10975 /* The case of a subreg may arise when we have a local (register)
10976 variable or a formal (register) parameter which doesn't quite fill
10977 up an entire register. For now, just assume that it is
10978 legitimate to make the Dwarf info refer to the whole register which
10979 contains the given subreg. */
10980 rtl = SUBREG_REG (rtl);
10981
10982 /* ... fall through ... */
10983
10984 case REG:
10985 loc_result = reg_loc_descriptor (rtl, initialized);
10986 break;
10987
10988 case MEM:
10989 loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
10990 initialized);
10991 if (loc_result == NULL)
10992 loc_result = tls_mem_loc_descriptor (rtl);
10993 break;
10994
10995 case CONCAT:
10996 loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
10997 initialized);
10998 break;
10999
11000 case CONCATN:
11001 loc_result = concatn_loc_descriptor (rtl, initialized);
11002 break;
11003
11004 case VAR_LOCATION:
11005 /* Single part. */
11006 if (GET_CODE (XEXP (rtl, 1)) != PARALLEL)
11007 {
11008 loc_result = loc_descriptor (XEXP (XEXP (rtl, 1), 0), initialized);
11009 break;
11010 }
11011
11012 rtl = XEXP (rtl, 1);
11013 /* FALLTHRU */
11014
11015 case PARALLEL:
11016 {
11017 rtvec par_elems = XVEC (rtl, 0);
11018 int num_elem = GET_NUM_ELEM (par_elems);
11019 enum machine_mode mode;
11020 int i;
11021
11022 /* Create the first one, so we have something to add to. */
11023 loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
11024 initialized);
11025 if (loc_result == NULL)
11026 return NULL;
11027 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
11028 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
11029 for (i = 1; i < num_elem; i++)
11030 {
11031 dw_loc_descr_ref temp;
11032
11033 temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
11034 initialized);
11035 if (temp == NULL)
11036 return NULL;
11037 add_loc_descr (&loc_result, temp);
11038 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
11039 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
11040 }
11041 }
11042 break;
11043
11044 default:
11045 gcc_unreachable ();
11046 }
11047
11048 return loc_result;
11049 }
11050
11051 /* Similar, but generate the descriptor from trees instead of rtl. This comes
11052 up particularly with variable length arrays. WANT_ADDRESS is 2 if this is
11053 a top-level invocation of loc_descriptor_from_tree; is 1 if this is not a
11054 top-level invocation, and we require the address of LOC; is 0 if we require
11055 the value of LOC. */
11056
11057 static dw_loc_descr_ref
11058 loc_descriptor_from_tree_1 (tree loc, int want_address)
11059 {
11060 dw_loc_descr_ref ret, ret1;
11061 int have_address = 0;
11062 enum dwarf_location_atom op;
11063
11064 /* ??? Most of the time we do not take proper care for sign/zero
11065 extending the values properly. Hopefully this won't be a real
11066 problem... */
11067
11068 switch (TREE_CODE (loc))
11069 {
11070 case ERROR_MARK:
11071 return 0;
11072
11073 case PLACEHOLDER_EXPR:
11074 /* This case involves extracting fields from an object to determine the
11075 position of other fields. We don't try to encode this here. The
11076 only user of this is Ada, which encodes the needed information using
11077 the names of types. */
11078 return 0;
11079
11080 case CALL_EXPR:
11081 return 0;
11082
11083 case PREINCREMENT_EXPR:
11084 case PREDECREMENT_EXPR:
11085 case POSTINCREMENT_EXPR:
11086 case POSTDECREMENT_EXPR:
11087 /* There are no opcodes for these operations. */
11088 return 0;
11089
11090 case ADDR_EXPR:
11091 /* If we already want an address, there's nothing we can do. */
11092 if (want_address)
11093 return 0;
11094
11095 /* Otherwise, process the argument and look for the address. */
11096 return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 1);
11097
11098 case VAR_DECL:
11099 if (DECL_THREAD_LOCAL_P (loc))
11100 {
11101 rtx rtl;
11102 enum dwarf_location_atom first_op;
11103 enum dwarf_location_atom second_op;
11104 bool dtprel = false;
11105
11106 if (targetm.have_tls)
11107 {
11108 /* If this is not defined, we have no way to emit the
11109 data. */
11110 if (!targetm.asm_out.output_dwarf_dtprel)
11111 return 0;
11112
11113 /* The way DW_OP_GNU_push_tls_address is specified, we
11114 can only look up addresses of objects in the current
11115 module. */
11116 if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
11117 return 0;
11118 first_op = DW_OP_addr;
11119 dtprel = true;
11120 second_op = DW_OP_GNU_push_tls_address;
11121 }
11122 else
11123 {
11124 if (!targetm.emutls.debug_form_tls_address)
11125 return 0;
11126 loc = emutls_decl (loc);
11127 first_op = DW_OP_addr;
11128 second_op = DW_OP_form_tls_address;
11129 }
11130
11131 rtl = rtl_for_decl_location (loc);
11132 if (rtl == NULL_RTX)
11133 return 0;
11134
11135 if (!MEM_P (rtl))
11136 return 0;
11137 rtl = XEXP (rtl, 0);
11138 if (! CONSTANT_P (rtl))
11139 return 0;
11140
11141 ret = new_loc_descr (first_op, 0, 0);
11142 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
11143 ret->dw_loc_oprnd1.v.val_addr = rtl;
11144 ret->dtprel = dtprel;
11145
11146 ret1 = new_loc_descr (second_op, 0, 0);
11147 add_loc_descr (&ret, ret1);
11148
11149 have_address = 1;
11150 break;
11151 }
11152 /* FALLTHRU */
11153
11154 case PARM_DECL:
11155 if (DECL_HAS_VALUE_EXPR_P (loc))
11156 return loc_descriptor_from_tree_1 (DECL_VALUE_EXPR (loc),
11157 want_address);
11158 /* FALLTHRU */
11159
11160 case RESULT_DECL:
11161 case FUNCTION_DECL:
11162 {
11163 rtx rtl = rtl_for_decl_location (loc);
11164
11165 if (rtl == NULL_RTX)
11166 return 0;
11167 else if (CONST_INT_P (rtl))
11168 {
11169 HOST_WIDE_INT val = INTVAL (rtl);
11170 if (TYPE_UNSIGNED (TREE_TYPE (loc)))
11171 val &= GET_MODE_MASK (DECL_MODE (loc));
11172 ret = int_loc_descriptor (val);
11173 }
11174 else if (GET_CODE (rtl) == CONST_STRING)
11175 return 0;
11176 else if (CONSTANT_P (rtl))
11177 {
11178 ret = new_loc_descr (DW_OP_addr, 0, 0);
11179 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
11180 ret->dw_loc_oprnd1.v.val_addr = rtl;
11181 }
11182 else
11183 {
11184 enum machine_mode mode;
11185
11186 /* Certain constructs can only be represented at top-level. */
11187 if (want_address == 2)
11188 return loc_descriptor (rtl, VAR_INIT_STATUS_INITIALIZED);
11189
11190 mode = GET_MODE (rtl);
11191 if (MEM_P (rtl))
11192 {
11193 rtl = XEXP (rtl, 0);
11194 have_address = 1;
11195 }
11196 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
11197 }
11198 }
11199 break;
11200
11201 case INDIRECT_REF:
11202 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
11203 have_address = 1;
11204 break;
11205
11206 case COMPOUND_EXPR:
11207 return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), want_address);
11208
11209 CASE_CONVERT:
11210 case VIEW_CONVERT_EXPR:
11211 case SAVE_EXPR:
11212 case MODIFY_EXPR:
11213 return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), want_address);
11214
11215 case COMPONENT_REF:
11216 case BIT_FIELD_REF:
11217 case ARRAY_REF:
11218 case ARRAY_RANGE_REF:
11219 {
11220 tree obj, offset;
11221 HOST_WIDE_INT bitsize, bitpos, bytepos;
11222 enum machine_mode mode;
11223 int volatilep;
11224 int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
11225
11226 obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
11227 &unsignedp, &volatilep, false);
11228
11229 if (obj == loc)
11230 return 0;
11231
11232 ret = loc_descriptor_from_tree_1 (obj, 1);
11233 if (ret == 0
11234 || bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
11235 return 0;
11236
11237 if (offset != NULL_TREE)
11238 {
11239 /* Variable offset. */
11240 ret1 = loc_descriptor_from_tree_1 (offset, 0);
11241 if (ret1 == 0)
11242 return 0;
11243 add_loc_descr (&ret, ret1);
11244 add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
11245 }
11246
11247 bytepos = bitpos / BITS_PER_UNIT;
11248 loc_descr_plus_const (&ret, bytepos);
11249
11250 have_address = 1;
11251 break;
11252 }
11253
11254 case INTEGER_CST:
11255 if (host_integerp (loc, 0))
11256 ret = int_loc_descriptor (tree_low_cst (loc, 0));
11257 else
11258 return 0;
11259 break;
11260
11261 case CONSTRUCTOR:
11262 {
11263 /* Get an RTL for this, if something has been emitted. */
11264 rtx rtl = lookup_constant_def (loc);
11265 enum machine_mode mode;
11266
11267 if (!rtl || !MEM_P (rtl))
11268 return 0;
11269 mode = GET_MODE (rtl);
11270 rtl = XEXP (rtl, 0);
11271 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
11272 have_address = 1;
11273 break;
11274 }
11275
11276 case TRUTH_AND_EXPR:
11277 case TRUTH_ANDIF_EXPR:
11278 case BIT_AND_EXPR:
11279 op = DW_OP_and;
11280 goto do_binop;
11281
11282 case TRUTH_XOR_EXPR:
11283 case BIT_XOR_EXPR:
11284 op = DW_OP_xor;
11285 goto do_binop;
11286
11287 case TRUTH_OR_EXPR:
11288 case TRUTH_ORIF_EXPR:
11289 case BIT_IOR_EXPR:
11290 op = DW_OP_or;
11291 goto do_binop;
11292
11293 case FLOOR_DIV_EXPR:
11294 case CEIL_DIV_EXPR:
11295 case ROUND_DIV_EXPR:
11296 case TRUNC_DIV_EXPR:
11297 op = DW_OP_div;
11298 goto do_binop;
11299
11300 case MINUS_EXPR:
11301 op = DW_OP_minus;
11302 goto do_binop;
11303
11304 case FLOOR_MOD_EXPR:
11305 case CEIL_MOD_EXPR:
11306 case ROUND_MOD_EXPR:
11307 case TRUNC_MOD_EXPR:
11308 op = DW_OP_mod;
11309 goto do_binop;
11310
11311 case MULT_EXPR:
11312 op = DW_OP_mul;
11313 goto do_binop;
11314
11315 case LSHIFT_EXPR:
11316 op = DW_OP_shl;
11317 goto do_binop;
11318
11319 case RSHIFT_EXPR:
11320 op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
11321 goto do_binop;
11322
11323 case POINTER_PLUS_EXPR:
11324 case PLUS_EXPR:
11325 if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
11326 && host_integerp (TREE_OPERAND (loc, 1), 0))
11327 {
11328 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
11329 if (ret == 0)
11330 return 0;
11331
11332 loc_descr_plus_const (&ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
11333 break;
11334 }
11335
11336 op = DW_OP_plus;
11337 goto do_binop;
11338
11339 case LE_EXPR:
11340 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
11341 return 0;
11342
11343 op = DW_OP_le;
11344 goto do_binop;
11345
11346 case GE_EXPR:
11347 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
11348 return 0;
11349
11350 op = DW_OP_ge;
11351 goto do_binop;
11352
11353 case LT_EXPR:
11354 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
11355 return 0;
11356
11357 op = DW_OP_lt;
11358 goto do_binop;
11359
11360 case GT_EXPR:
11361 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
11362 return 0;
11363
11364 op = DW_OP_gt;
11365 goto do_binop;
11366
11367 case EQ_EXPR:
11368 op = DW_OP_eq;
11369 goto do_binop;
11370
11371 case NE_EXPR:
11372 op = DW_OP_ne;
11373 goto do_binop;
11374
11375 do_binop:
11376 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
11377 ret1 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
11378 if (ret == 0 || ret1 == 0)
11379 return 0;
11380
11381 add_loc_descr (&ret, ret1);
11382 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
11383 break;
11384
11385 case TRUTH_NOT_EXPR:
11386 case BIT_NOT_EXPR:
11387 op = DW_OP_not;
11388 goto do_unop;
11389
11390 case ABS_EXPR:
11391 op = DW_OP_abs;
11392 goto do_unop;
11393
11394 case NEGATE_EXPR:
11395 op = DW_OP_neg;
11396 goto do_unop;
11397
11398 do_unop:
11399 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
11400 if (ret == 0)
11401 return 0;
11402
11403 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
11404 break;
11405
11406 case MIN_EXPR:
11407 case MAX_EXPR:
11408 {
11409 const enum tree_code code =
11410 TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
11411
11412 loc = build3 (COND_EXPR, TREE_TYPE (loc),
11413 build2 (code, integer_type_node,
11414 TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
11415 TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
11416 }
11417
11418 /* ... fall through ... */
11419
11420 case COND_EXPR:
11421 {
11422 dw_loc_descr_ref lhs
11423 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
11424 dw_loc_descr_ref rhs
11425 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 2), 0);
11426 dw_loc_descr_ref bra_node, jump_node, tmp;
11427
11428 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
11429 if (ret == 0 || lhs == 0 || rhs == 0)
11430 return 0;
11431
11432 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
11433 add_loc_descr (&ret, bra_node);
11434
11435 add_loc_descr (&ret, rhs);
11436 jump_node = new_loc_descr (DW_OP_skip, 0, 0);
11437 add_loc_descr (&ret, jump_node);
11438
11439 add_loc_descr (&ret, lhs);
11440 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
11441 bra_node->dw_loc_oprnd1.v.val_loc = lhs;
11442
11443 /* ??? Need a node to point the skip at. Use a nop. */
11444 tmp = new_loc_descr (DW_OP_nop, 0, 0);
11445 add_loc_descr (&ret, tmp);
11446 jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
11447 jump_node->dw_loc_oprnd1.v.val_loc = tmp;
11448 }
11449 break;
11450
11451 case FIX_TRUNC_EXPR:
11452 return 0;
11453
11454 default:
11455 /* Leave front-end specific codes as simply unknown. This comes
11456 up, for instance, with the C STMT_EXPR. */
11457 if ((unsigned int) TREE_CODE (loc)
11458 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
11459 return 0;
11460
11461 #ifdef ENABLE_CHECKING
11462 /* Otherwise this is a generic code; we should just lists all of
11463 these explicitly. We forgot one. */
11464 gcc_unreachable ();
11465 #else
11466 /* In a release build, we want to degrade gracefully: better to
11467 generate incomplete debugging information than to crash. */
11468 return NULL;
11469 #endif
11470 }
11471
11472 /* Show if we can't fill the request for an address. */
11473 if (want_address && !have_address)
11474 return 0;
11475
11476 /* If we've got an address and don't want one, dereference. */
11477 if (!want_address && have_address && ret)
11478 {
11479 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
11480
11481 if (size > DWARF2_ADDR_SIZE || size == -1)
11482 return 0;
11483 else if (size == DWARF2_ADDR_SIZE)
11484 op = DW_OP_deref;
11485 else
11486 op = DW_OP_deref_size;
11487
11488 add_loc_descr (&ret, new_loc_descr (op, size, 0));
11489 }
11490
11491 return ret;
11492 }
11493
11494 static inline dw_loc_descr_ref
11495 loc_descriptor_from_tree (tree loc)
11496 {
11497 return loc_descriptor_from_tree_1 (loc, 2);
11498 }
11499
11500 /* Given a value, round it up to the lowest multiple of `boundary'
11501 which is not less than the value itself. */
11502
11503 static inline HOST_WIDE_INT
11504 ceiling (HOST_WIDE_INT value, unsigned int boundary)
11505 {
11506 return (((value + boundary - 1) / boundary) * boundary);
11507 }
11508
11509 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
11510 pointer to the declared type for the relevant field variable, or return
11511 `integer_type_node' if the given node turns out to be an
11512 ERROR_MARK node. */
11513
11514 static inline tree
11515 field_type (const_tree decl)
11516 {
11517 tree type;
11518
11519 if (TREE_CODE (decl) == ERROR_MARK)
11520 return integer_type_node;
11521
11522 type = DECL_BIT_FIELD_TYPE (decl);
11523 if (type == NULL_TREE)
11524 type = TREE_TYPE (decl);
11525
11526 return type;
11527 }
11528
11529 /* Given a pointer to a tree node, return the alignment in bits for
11530 it, or else return BITS_PER_WORD if the node actually turns out to
11531 be an ERROR_MARK node. */
11532
11533 static inline unsigned
11534 simple_type_align_in_bits (const_tree type)
11535 {
11536 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
11537 }
11538
11539 static inline unsigned
11540 simple_decl_align_in_bits (const_tree decl)
11541 {
11542 return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
11543 }
11544
11545 /* Return the result of rounding T up to ALIGN. */
11546
11547 static inline HOST_WIDE_INT
11548 round_up_to_align (HOST_WIDE_INT t, unsigned int align)
11549 {
11550 /* We must be careful if T is negative because HOST_WIDE_INT can be
11551 either "above" or "below" unsigned int as per the C promotion
11552 rules, depending on the host, thus making the signedness of the
11553 direct multiplication and division unpredictable. */
11554 unsigned HOST_WIDE_INT u = (unsigned HOST_WIDE_INT) t;
11555
11556 u += align - 1;
11557 u /= align;
11558 u *= align;
11559
11560 return (HOST_WIDE_INT) u;
11561 }
11562
11563 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
11564 lowest addressed byte of the "containing object" for the given FIELD_DECL,
11565 or return 0 if we are unable to determine what that offset is, either
11566 because the argument turns out to be a pointer to an ERROR_MARK node, or
11567 because the offset is actually variable. (We can't handle the latter case
11568 just yet). */
11569
11570 static HOST_WIDE_INT
11571 field_byte_offset (const_tree decl)
11572 {
11573 HOST_WIDE_INT object_offset_in_bits;
11574 HOST_WIDE_INT bitpos_int;
11575
11576 if (TREE_CODE (decl) == ERROR_MARK)
11577 return 0;
11578
11579 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
11580
11581 /* We cannot yet cope with fields whose positions are variable, so
11582 for now, when we see such things, we simply return 0. Someday, we may
11583 be able to handle such cases, but it will be damn difficult. */
11584 if (! host_integerp (bit_position (decl), 0))
11585 return 0;
11586
11587 bitpos_int = int_bit_position (decl);
11588
11589 #ifdef PCC_BITFIELD_TYPE_MATTERS
11590 if (PCC_BITFIELD_TYPE_MATTERS)
11591 {
11592 tree type;
11593 tree field_size_tree;
11594 HOST_WIDE_INT deepest_bitpos;
11595 unsigned HOST_WIDE_INT field_size_in_bits;
11596 unsigned int type_align_in_bits;
11597 unsigned int decl_align_in_bits;
11598 unsigned HOST_WIDE_INT type_size_in_bits;
11599
11600 type = field_type (decl);
11601 type_size_in_bits = simple_type_size_in_bits (type);
11602 type_align_in_bits = simple_type_align_in_bits (type);
11603
11604 field_size_tree = DECL_SIZE (decl);
11605
11606 /* The size could be unspecified if there was an error, or for
11607 a flexible array member. */
11608 if (!field_size_tree)
11609 field_size_tree = bitsize_zero_node;
11610
11611 /* If the size of the field is not constant, use the type size. */
11612 if (host_integerp (field_size_tree, 1))
11613 field_size_in_bits = tree_low_cst (field_size_tree, 1);
11614 else
11615 field_size_in_bits = type_size_in_bits;
11616
11617 decl_align_in_bits = simple_decl_align_in_bits (decl);
11618
11619 /* The GCC front-end doesn't make any attempt to keep track of the
11620 starting bit offset (relative to the start of the containing
11621 structure type) of the hypothetical "containing object" for a
11622 bit-field. Thus, when computing the byte offset value for the
11623 start of the "containing object" of a bit-field, we must deduce
11624 this information on our own. This can be rather tricky to do in
11625 some cases. For example, handling the following structure type
11626 definition when compiling for an i386/i486 target (which only
11627 aligns long long's to 32-bit boundaries) can be very tricky:
11628
11629 struct S { int field1; long long field2:31; };
11630
11631 Fortunately, there is a simple rule-of-thumb which can be used
11632 in such cases. When compiling for an i386/i486, GCC will
11633 allocate 8 bytes for the structure shown above. It decides to
11634 do this based upon one simple rule for bit-field allocation.
11635 GCC allocates each "containing object" for each bit-field at
11636 the first (i.e. lowest addressed) legitimate alignment boundary
11637 (based upon the required minimum alignment for the declared
11638 type of the field) which it can possibly use, subject to the
11639 condition that there is still enough available space remaining
11640 in the containing object (when allocated at the selected point)
11641 to fully accommodate all of the bits of the bit-field itself.
11642
11643 This simple rule makes it obvious why GCC allocates 8 bytes for
11644 each object of the structure type shown above. When looking
11645 for a place to allocate the "containing object" for `field2',
11646 the compiler simply tries to allocate a 64-bit "containing
11647 object" at each successive 32-bit boundary (starting at zero)
11648 until it finds a place to allocate that 64- bit field such that
11649 at least 31 contiguous (and previously unallocated) bits remain
11650 within that selected 64 bit field. (As it turns out, for the
11651 example above, the compiler finds it is OK to allocate the
11652 "containing object" 64-bit field at bit-offset zero within the
11653 structure type.)
11654
11655 Here we attempt to work backwards from the limited set of facts
11656 we're given, and we try to deduce from those facts, where GCC
11657 must have believed that the containing object started (within
11658 the structure type). The value we deduce is then used (by the
11659 callers of this routine) to generate DW_AT_location and
11660 DW_AT_bit_offset attributes for fields (both bit-fields and, in
11661 the case of DW_AT_location, regular fields as well). */
11662
11663 /* Figure out the bit-distance from the start of the structure to
11664 the "deepest" bit of the bit-field. */
11665 deepest_bitpos = bitpos_int + field_size_in_bits;
11666
11667 /* This is the tricky part. Use some fancy footwork to deduce
11668 where the lowest addressed bit of the containing object must
11669 be. */
11670 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
11671
11672 /* Round up to type_align by default. This works best for
11673 bitfields. */
11674 object_offset_in_bits
11675 = round_up_to_align (object_offset_in_bits, type_align_in_bits);
11676
11677 if (object_offset_in_bits > bitpos_int)
11678 {
11679 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
11680
11681 /* Round up to decl_align instead. */
11682 object_offset_in_bits
11683 = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
11684 }
11685 }
11686 else
11687 #endif
11688 object_offset_in_bits = bitpos_int;
11689
11690 return object_offset_in_bits / BITS_PER_UNIT;
11691 }
11692 \f
11693 /* The following routines define various Dwarf attributes and any data
11694 associated with them. */
11695
11696 /* Add a location description attribute value to a DIE.
11697
11698 This emits location attributes suitable for whole variables and
11699 whole parameters. Note that the location attributes for struct fields are
11700 generated by the routine `data_member_location_attribute' below. */
11701
11702 static inline void
11703 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
11704 dw_loc_descr_ref descr)
11705 {
11706 if (descr != 0)
11707 add_AT_loc (die, attr_kind, descr);
11708 }
11709
11710 /* Attach the specialized form of location attribute used for data members of
11711 struct and union types. In the special case of a FIELD_DECL node which
11712 represents a bit-field, the "offset" part of this special location
11713 descriptor must indicate the distance in bytes from the lowest-addressed
11714 byte of the containing struct or union type to the lowest-addressed byte of
11715 the "containing object" for the bit-field. (See the `field_byte_offset'
11716 function above).
11717
11718 For any given bit-field, the "containing object" is a hypothetical object
11719 (of some integral or enum type) within which the given bit-field lives. The
11720 type of this hypothetical "containing object" is always the same as the
11721 declared type of the individual bit-field itself (for GCC anyway... the
11722 DWARF spec doesn't actually mandate this). Note that it is the size (in
11723 bytes) of the hypothetical "containing object" which will be given in the
11724 DW_AT_byte_size attribute for this bit-field. (See the
11725 `byte_size_attribute' function below.) It is also used when calculating the
11726 value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute'
11727 function below.) */
11728
11729 static void
11730 add_data_member_location_attribute (dw_die_ref die, tree decl)
11731 {
11732 HOST_WIDE_INT offset;
11733 dw_loc_descr_ref loc_descr = 0;
11734
11735 if (TREE_CODE (decl) == TREE_BINFO)
11736 {
11737 /* We're working on the TAG_inheritance for a base class. */
11738 if (BINFO_VIRTUAL_P (decl) && is_cxx ())
11739 {
11740 /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
11741 aren't at a fixed offset from all (sub)objects of the same
11742 type. We need to extract the appropriate offset from our
11743 vtable. The following dwarf expression means
11744
11745 BaseAddr = ObAddr + *((*ObAddr) - Offset)
11746
11747 This is specific to the V3 ABI, of course. */
11748
11749 dw_loc_descr_ref tmp;
11750
11751 /* Make a copy of the object address. */
11752 tmp = new_loc_descr (DW_OP_dup, 0, 0);
11753 add_loc_descr (&loc_descr, tmp);
11754
11755 /* Extract the vtable address. */
11756 tmp = new_loc_descr (DW_OP_deref, 0, 0);
11757 add_loc_descr (&loc_descr, tmp);
11758
11759 /* Calculate the address of the offset. */
11760 offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
11761 gcc_assert (offset < 0);
11762
11763 tmp = int_loc_descriptor (-offset);
11764 add_loc_descr (&loc_descr, tmp);
11765 tmp = new_loc_descr (DW_OP_minus, 0, 0);
11766 add_loc_descr (&loc_descr, tmp);
11767
11768 /* Extract the offset. */
11769 tmp = new_loc_descr (DW_OP_deref, 0, 0);
11770 add_loc_descr (&loc_descr, tmp);
11771
11772 /* Add it to the object address. */
11773 tmp = new_loc_descr (DW_OP_plus, 0, 0);
11774 add_loc_descr (&loc_descr, tmp);
11775 }
11776 else
11777 offset = tree_low_cst (BINFO_OFFSET (decl), 0);
11778 }
11779 else
11780 offset = field_byte_offset (decl);
11781
11782 if (! loc_descr)
11783 {
11784 if (dwarf_version > 2)
11785 {
11786 /* Don't need to output a location expression, just the constant. */
11787 add_AT_int (die, DW_AT_data_member_location, offset);
11788 return;
11789 }
11790 else
11791 {
11792 enum dwarf_location_atom op;
11793
11794 /* The DWARF2 standard says that we should assume that the structure
11795 address is already on the stack, so we can specify a structure
11796 field address by using DW_OP_plus_uconst. */
11797
11798 #ifdef MIPS_DEBUGGING_INFO
11799 /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
11800 operator correctly. It works only if we leave the offset on the
11801 stack. */
11802 op = DW_OP_constu;
11803 #else
11804 op = DW_OP_plus_uconst;
11805 #endif
11806
11807 loc_descr = new_loc_descr (op, offset, 0);
11808 }
11809 }
11810
11811 add_AT_loc (die, DW_AT_data_member_location, loc_descr);
11812 }
11813
11814 /* Writes integer values to dw_vec_const array. */
11815
11816 static void
11817 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
11818 {
11819 while (size != 0)
11820 {
11821 *dest++ = val & 0xff;
11822 val >>= 8;
11823 --size;
11824 }
11825 }
11826
11827 /* Reads integers from dw_vec_const array. Inverse of insert_int. */
11828
11829 static HOST_WIDE_INT
11830 extract_int (const unsigned char *src, unsigned int size)
11831 {
11832 HOST_WIDE_INT val = 0;
11833
11834 src += size;
11835 while (size != 0)
11836 {
11837 val <<= 8;
11838 val |= *--src & 0xff;
11839 --size;
11840 }
11841 return val;
11842 }
11843
11844 /* Writes floating point values to dw_vec_const array. */
11845
11846 static void
11847 insert_float (const_rtx rtl, unsigned char *array)
11848 {
11849 REAL_VALUE_TYPE rv;
11850 long val[4];
11851 int i;
11852
11853 REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
11854 real_to_target (val, &rv, GET_MODE (rtl));
11855
11856 /* real_to_target puts 32-bit pieces in each long. Pack them. */
11857 for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
11858 {
11859 insert_int (val[i], 4, array);
11860 array += 4;
11861 }
11862 }
11863
11864 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
11865 does not have a "location" either in memory or in a register. These
11866 things can arise in GNU C when a constant is passed as an actual parameter
11867 to an inlined function. They can also arise in C++ where declared
11868 constants do not necessarily get memory "homes". */
11869
11870 static void
11871 add_const_value_attribute (dw_die_ref die, rtx rtl)
11872 {
11873 switch (GET_CODE (rtl))
11874 {
11875 case CONST_INT:
11876 {
11877 HOST_WIDE_INT val = INTVAL (rtl);
11878
11879 if (val < 0)
11880 add_AT_int (die, DW_AT_const_value, val);
11881 else
11882 add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
11883 }
11884 break;
11885
11886 case CONST_DOUBLE:
11887 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
11888 floating-point constant. A CONST_DOUBLE is used whenever the
11889 constant requires more than one word in order to be adequately
11890 represented. We output CONST_DOUBLEs as blocks. */
11891 {
11892 enum machine_mode mode = GET_MODE (rtl);
11893
11894 if (SCALAR_FLOAT_MODE_P (mode))
11895 {
11896 unsigned int length = GET_MODE_SIZE (mode);
11897 unsigned char *array = GGC_NEWVEC (unsigned char, length);
11898
11899 insert_float (rtl, array);
11900 add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
11901 }
11902 else
11903 {
11904 /* ??? We really should be using HOST_WIDE_INT throughout. */
11905 gcc_assert (HOST_BITS_PER_LONG == HOST_BITS_PER_WIDE_INT);
11906
11907 add_AT_long_long (die, DW_AT_const_value,
11908 CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
11909 }
11910 }
11911 break;
11912
11913 case CONST_VECTOR:
11914 {
11915 enum machine_mode mode = GET_MODE (rtl);
11916 unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
11917 unsigned int length = CONST_VECTOR_NUNITS (rtl);
11918 unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
11919 unsigned int i;
11920 unsigned char *p;
11921
11922 switch (GET_MODE_CLASS (mode))
11923 {
11924 case MODE_VECTOR_INT:
11925 for (i = 0, p = array; i < length; i++, p += elt_size)
11926 {
11927 rtx elt = CONST_VECTOR_ELT (rtl, i);
11928 HOST_WIDE_INT lo, hi;
11929
11930 switch (GET_CODE (elt))
11931 {
11932 case CONST_INT:
11933 lo = INTVAL (elt);
11934 hi = -(lo < 0);
11935 break;
11936
11937 case CONST_DOUBLE:
11938 lo = CONST_DOUBLE_LOW (elt);
11939 hi = CONST_DOUBLE_HIGH (elt);
11940 break;
11941
11942 default:
11943 gcc_unreachable ();
11944 }
11945
11946 if (elt_size <= sizeof (HOST_WIDE_INT))
11947 insert_int (lo, elt_size, p);
11948 else
11949 {
11950 unsigned char *p0 = p;
11951 unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
11952
11953 gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
11954 if (WORDS_BIG_ENDIAN)
11955 {
11956 p0 = p1;
11957 p1 = p;
11958 }
11959 insert_int (lo, sizeof (HOST_WIDE_INT), p0);
11960 insert_int (hi, sizeof (HOST_WIDE_INT), p1);
11961 }
11962 }
11963 break;
11964
11965 case MODE_VECTOR_FLOAT:
11966 for (i = 0, p = array; i < length; i++, p += elt_size)
11967 {
11968 rtx elt = CONST_VECTOR_ELT (rtl, i);
11969 insert_float (elt, p);
11970 }
11971 break;
11972
11973 default:
11974 gcc_unreachable ();
11975 }
11976
11977 add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
11978 }
11979 break;
11980
11981 case CONST_STRING:
11982 add_AT_string (die, DW_AT_const_value, XSTR (rtl, 0));
11983 break;
11984
11985 case SYMBOL_REF:
11986 case LABEL_REF:
11987 case CONST:
11988 add_AT_addr (die, DW_AT_const_value, rtl);
11989 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
11990 break;
11991
11992 case PLUS:
11993 /* In cases where an inlined instance of an inline function is passed
11994 the address of an `auto' variable (which is local to the caller) we
11995 can get a situation where the DECL_RTL of the artificial local
11996 variable (for the inlining) which acts as a stand-in for the
11997 corresponding formal parameter (of the inline function) will look
11998 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
11999 exactly a compile-time constant expression, but it isn't the address
12000 of the (artificial) local variable either. Rather, it represents the
12001 *value* which the artificial local variable always has during its
12002 lifetime. We currently have no way to represent such quasi-constant
12003 values in Dwarf, so for now we just punt and generate nothing. */
12004 break;
12005
12006 default:
12007 /* No other kinds of rtx should be possible here. */
12008 gcc_unreachable ();
12009 }
12010
12011 }
12012
12013 /* Determine whether the evaluation of EXPR references any variables
12014 or functions which aren't otherwise used (and therefore may not be
12015 output). */
12016 static tree
12017 reference_to_unused (tree * tp, int * walk_subtrees,
12018 void * data ATTRIBUTE_UNUSED)
12019 {
12020 if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
12021 *walk_subtrees = 0;
12022
12023 if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
12024 && ! TREE_ASM_WRITTEN (*tp))
12025 return *tp;
12026 /* ??? The C++ FE emits debug information for using decls, so
12027 putting gcc_unreachable here falls over. See PR31899. For now
12028 be conservative. */
12029 else if (!cgraph_global_info_ready
12030 && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
12031 return *tp;
12032 else if (DECL_P (*tp) && TREE_CODE (*tp) == VAR_DECL)
12033 {
12034 struct varpool_node *node = varpool_node (*tp);
12035 if (!node->needed)
12036 return *tp;
12037 }
12038 else if (DECL_P (*tp) && TREE_CODE (*tp) == FUNCTION_DECL
12039 && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
12040 {
12041 struct cgraph_node *node = cgraph_node (*tp);
12042 if (node->process || TREE_ASM_WRITTEN (*tp))
12043 return *tp;
12044 }
12045 else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
12046 return *tp;
12047
12048 return NULL_TREE;
12049 }
12050
12051 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
12052 for use in a later add_const_value_attribute call. */
12053
12054 static rtx
12055 rtl_for_decl_init (tree init, tree type)
12056 {
12057 rtx rtl = NULL_RTX;
12058
12059 /* If a variable is initialized with a string constant without embedded
12060 zeros, build CONST_STRING. */
12061 if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
12062 {
12063 tree enttype = TREE_TYPE (type);
12064 tree domain = TYPE_DOMAIN (type);
12065 enum machine_mode mode = TYPE_MODE (enttype);
12066
12067 if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
12068 && domain
12069 && integer_zerop (TYPE_MIN_VALUE (domain))
12070 && compare_tree_int (TYPE_MAX_VALUE (domain),
12071 TREE_STRING_LENGTH (init) - 1) == 0
12072 && ((size_t) TREE_STRING_LENGTH (init)
12073 == strlen (TREE_STRING_POINTER (init)) + 1))
12074 rtl = gen_rtx_CONST_STRING (VOIDmode,
12075 ggc_strdup (TREE_STRING_POINTER (init)));
12076 }
12077 /* Other aggregates, and complex values, could be represented using
12078 CONCAT: FIXME! */
12079 else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
12080 ;
12081 /* Vectors only work if their mode is supported by the target.
12082 FIXME: generic vectors ought to work too. */
12083 else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
12084 ;
12085 /* If the initializer is something that we know will expand into an
12086 immediate RTL constant, expand it now. We must be careful not to
12087 reference variables which won't be output. */
12088 else if (initializer_constant_valid_p (init, type)
12089 && ! walk_tree (&init, reference_to_unused, NULL, NULL))
12090 {
12091 /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
12092 possible. */
12093 if (TREE_CODE (type) == VECTOR_TYPE)
12094 switch (TREE_CODE (init))
12095 {
12096 case VECTOR_CST:
12097 break;
12098 case CONSTRUCTOR:
12099 if (TREE_CONSTANT (init))
12100 {
12101 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
12102 bool constant_p = true;
12103 tree value;
12104 unsigned HOST_WIDE_INT ix;
12105
12106 /* Even when ctor is constant, it might contain non-*_CST
12107 elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
12108 belong into VECTOR_CST nodes. */
12109 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
12110 if (!CONSTANT_CLASS_P (value))
12111 {
12112 constant_p = false;
12113 break;
12114 }
12115
12116 if (constant_p)
12117 {
12118 init = build_vector_from_ctor (type, elts);
12119 break;
12120 }
12121 }
12122 /* FALLTHRU */
12123
12124 default:
12125 return NULL;
12126 }
12127
12128 rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
12129
12130 /* If expand_expr returns a MEM, it wasn't immediate. */
12131 gcc_assert (!rtl || !MEM_P (rtl));
12132 }
12133
12134 return rtl;
12135 }
12136
12137 /* Generate RTL for the variable DECL to represent its location. */
12138
12139 static rtx
12140 rtl_for_decl_location (tree decl)
12141 {
12142 rtx rtl;
12143
12144 /* Here we have to decide where we are going to say the parameter "lives"
12145 (as far as the debugger is concerned). We only have a couple of
12146 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
12147
12148 DECL_RTL normally indicates where the parameter lives during most of the
12149 activation of the function. If optimization is enabled however, this
12150 could be either NULL or else a pseudo-reg. Both of those cases indicate
12151 that the parameter doesn't really live anywhere (as far as the code
12152 generation parts of GCC are concerned) during most of the function's
12153 activation. That will happen (for example) if the parameter is never
12154 referenced within the function.
12155
12156 We could just generate a location descriptor here for all non-NULL
12157 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
12158 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
12159 where DECL_RTL is NULL or is a pseudo-reg.
12160
12161 Note however that we can only get away with using DECL_INCOMING_RTL as
12162 a backup substitute for DECL_RTL in certain limited cases. In cases
12163 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
12164 we can be sure that the parameter was passed using the same type as it is
12165 declared to have within the function, and that its DECL_INCOMING_RTL
12166 points us to a place where a value of that type is passed.
12167
12168 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
12169 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
12170 because in these cases DECL_INCOMING_RTL points us to a value of some
12171 type which is *different* from the type of the parameter itself. Thus,
12172 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
12173 such cases, the debugger would end up (for example) trying to fetch a
12174 `float' from a place which actually contains the first part of a
12175 `double'. That would lead to really incorrect and confusing
12176 output at debug-time.
12177
12178 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
12179 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
12180 are a couple of exceptions however. On little-endian machines we can
12181 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
12182 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
12183 an integral type that is smaller than TREE_TYPE (decl). These cases arise
12184 when (on a little-endian machine) a non-prototyped function has a
12185 parameter declared to be of type `short' or `char'. In such cases,
12186 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
12187 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
12188 passed `int' value. If the debugger then uses that address to fetch
12189 a `short' or a `char' (on a little-endian machine) the result will be
12190 the correct data, so we allow for such exceptional cases below.
12191
12192 Note that our goal here is to describe the place where the given formal
12193 parameter lives during most of the function's activation (i.e. between the
12194 end of the prologue and the start of the epilogue). We'll do that as best
12195 as we can. Note however that if the given formal parameter is modified
12196 sometime during the execution of the function, then a stack backtrace (at
12197 debug-time) will show the function as having been called with the *new*
12198 value rather than the value which was originally passed in. This happens
12199 rarely enough that it is not a major problem, but it *is* a problem, and
12200 I'd like to fix it.
12201
12202 A future version of dwarf2out.c may generate two additional attributes for
12203 any given DW_TAG_formal_parameter DIE which will describe the "passed
12204 type" and the "passed location" for the given formal parameter in addition
12205 to the attributes we now generate to indicate the "declared type" and the
12206 "active location" for each parameter. This additional set of attributes
12207 could be used by debuggers for stack backtraces. Separately, note that
12208 sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
12209 This happens (for example) for inlined-instances of inline function formal
12210 parameters which are never referenced. This really shouldn't be
12211 happening. All PARM_DECL nodes should get valid non-NULL
12212 DECL_INCOMING_RTL values. FIXME. */
12213
12214 /* Use DECL_RTL as the "location" unless we find something better. */
12215 rtl = DECL_RTL_IF_SET (decl);
12216
12217 /* When generating abstract instances, ignore everything except
12218 constants, symbols living in memory, and symbols living in
12219 fixed registers. */
12220 if (! reload_completed)
12221 {
12222 if (rtl
12223 && (CONSTANT_P (rtl)
12224 || (MEM_P (rtl)
12225 && CONSTANT_P (XEXP (rtl, 0)))
12226 || (REG_P (rtl)
12227 && TREE_CODE (decl) == VAR_DECL
12228 && TREE_STATIC (decl))))
12229 {
12230 rtl = targetm.delegitimize_address (rtl);
12231 return rtl;
12232 }
12233 rtl = NULL_RTX;
12234 }
12235 else if (TREE_CODE (decl) == PARM_DECL)
12236 {
12237 if (rtl == NULL_RTX || is_pseudo_reg (rtl))
12238 {
12239 tree declared_type = TREE_TYPE (decl);
12240 tree passed_type = DECL_ARG_TYPE (decl);
12241 enum machine_mode dmode = TYPE_MODE (declared_type);
12242 enum machine_mode pmode = TYPE_MODE (passed_type);
12243
12244 /* This decl represents a formal parameter which was optimized out.
12245 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
12246 all cases where (rtl == NULL_RTX) just below. */
12247 if (dmode == pmode)
12248 rtl = DECL_INCOMING_RTL (decl);
12249 else if (SCALAR_INT_MODE_P (dmode)
12250 && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
12251 && DECL_INCOMING_RTL (decl))
12252 {
12253 rtx inc = DECL_INCOMING_RTL (decl);
12254 if (REG_P (inc))
12255 rtl = inc;
12256 else if (MEM_P (inc))
12257 {
12258 if (BYTES_BIG_ENDIAN)
12259 rtl = adjust_address_nv (inc, dmode,
12260 GET_MODE_SIZE (pmode)
12261 - GET_MODE_SIZE (dmode));
12262 else
12263 rtl = inc;
12264 }
12265 }
12266 }
12267
12268 /* If the parm was passed in registers, but lives on the stack, then
12269 make a big endian correction if the mode of the type of the
12270 parameter is not the same as the mode of the rtl. */
12271 /* ??? This is the same series of checks that are made in dbxout.c before
12272 we reach the big endian correction code there. It isn't clear if all
12273 of these checks are necessary here, but keeping them all is the safe
12274 thing to do. */
12275 else if (MEM_P (rtl)
12276 && XEXP (rtl, 0) != const0_rtx
12277 && ! CONSTANT_P (XEXP (rtl, 0))
12278 /* Not passed in memory. */
12279 && !MEM_P (DECL_INCOMING_RTL (decl))
12280 /* Not passed by invisible reference. */
12281 && (!REG_P (XEXP (rtl, 0))
12282 || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
12283 || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
12284 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
12285 || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
12286 #endif
12287 )
12288 /* Big endian correction check. */
12289 && BYTES_BIG_ENDIAN
12290 && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
12291 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
12292 < UNITS_PER_WORD))
12293 {
12294 int offset = (UNITS_PER_WORD
12295 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
12296
12297 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
12298 plus_constant (XEXP (rtl, 0), offset));
12299 }
12300 }
12301 else if (TREE_CODE (decl) == VAR_DECL
12302 && rtl
12303 && MEM_P (rtl)
12304 && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
12305 && BYTES_BIG_ENDIAN)
12306 {
12307 int rsize = GET_MODE_SIZE (GET_MODE (rtl));
12308 int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
12309
12310 /* If a variable is declared "register" yet is smaller than
12311 a register, then if we store the variable to memory, it
12312 looks like we're storing a register-sized value, when in
12313 fact we are not. We need to adjust the offset of the
12314 storage location to reflect the actual value's bytes,
12315 else gdb will not be able to display it. */
12316 if (rsize > dsize)
12317 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
12318 plus_constant (XEXP (rtl, 0), rsize-dsize));
12319 }
12320
12321 /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
12322 and will have been substituted directly into all expressions that use it.
12323 C does not have such a concept, but C++ and other languages do. */
12324 if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
12325 rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
12326
12327 if (rtl)
12328 rtl = targetm.delegitimize_address (rtl);
12329
12330 /* If we don't look past the constant pool, we risk emitting a
12331 reference to a constant pool entry that isn't referenced from
12332 code, and thus is not emitted. */
12333 if (rtl)
12334 rtl = avoid_constant_pool_reference (rtl);
12335
12336 return rtl;
12337 }
12338
12339 /* We need to figure out what section we should use as the base for the
12340 address ranges where a given location is valid.
12341 1. If this particular DECL has a section associated with it, use that.
12342 2. If this function has a section associated with it, use that.
12343 3. Otherwise, use the text section.
12344 XXX: If you split a variable across multiple sections, we won't notice. */
12345
12346 static const char *
12347 secname_for_decl (const_tree decl)
12348 {
12349 const char *secname;
12350
12351 if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
12352 {
12353 tree sectree = DECL_SECTION_NAME (decl);
12354 secname = TREE_STRING_POINTER (sectree);
12355 }
12356 else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
12357 {
12358 tree sectree = DECL_SECTION_NAME (current_function_decl);
12359 secname = TREE_STRING_POINTER (sectree);
12360 }
12361 else if (cfun && in_cold_section_p)
12362 secname = crtl->subsections.cold_section_label;
12363 else
12364 secname = text_section_label;
12365
12366 return secname;
12367 }
12368
12369 /* Check whether decl is a Fortran COMMON symbol. If not, NULL_TREE is
12370 returned. If so, the decl for the COMMON block is returned, and the
12371 value is the offset into the common block for the symbol. */
12372
12373 static tree
12374 fortran_common (tree decl, HOST_WIDE_INT *value)
12375 {
12376 tree val_expr, cvar;
12377 enum machine_mode mode;
12378 HOST_WIDE_INT bitsize, bitpos;
12379 tree offset;
12380 int volatilep = 0, unsignedp = 0;
12381
12382 /* If the decl isn't a VAR_DECL, or if it isn't public or static, or if
12383 it does not have a value (the offset into the common area), or if it
12384 is thread local (as opposed to global) then it isn't common, and shouldn't
12385 be handled as such. */
12386 if (TREE_CODE (decl) != VAR_DECL
12387 || !TREE_PUBLIC (decl)
12388 || !TREE_STATIC (decl)
12389 || !DECL_HAS_VALUE_EXPR_P (decl)
12390 || !is_fortran ())
12391 return NULL_TREE;
12392
12393 val_expr = DECL_VALUE_EXPR (decl);
12394 if (TREE_CODE (val_expr) != COMPONENT_REF)
12395 return NULL_TREE;
12396
12397 cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
12398 &mode, &unsignedp, &volatilep, true);
12399
12400 if (cvar == NULL_TREE
12401 || TREE_CODE (cvar) != VAR_DECL
12402 || DECL_ARTIFICIAL (cvar)
12403 || !TREE_PUBLIC (cvar))
12404 return NULL_TREE;
12405
12406 *value = 0;
12407 if (offset != NULL)
12408 {
12409 if (!host_integerp (offset, 0))
12410 return NULL_TREE;
12411 *value = tree_low_cst (offset, 0);
12412 }
12413 if (bitpos != 0)
12414 *value += bitpos / BITS_PER_UNIT;
12415
12416 return cvar;
12417 }
12418
12419 /* Dereference a location expression LOC if DECL is passed by invisible
12420 reference. */
12421
12422 static dw_loc_descr_ref
12423 loc_by_reference (dw_loc_descr_ref loc, tree decl)
12424 {
12425 HOST_WIDE_INT size;
12426 enum dwarf_location_atom op;
12427
12428 if (loc == NULL)
12429 return NULL;
12430
12431 if ((TREE_CODE (decl) != PARM_DECL
12432 && TREE_CODE (decl) != RESULT_DECL
12433 && TREE_CODE (decl) != VAR_DECL)
12434 || !DECL_BY_REFERENCE (decl))
12435 return loc;
12436
12437 /* If loc is DW_OP_reg{0...31,x}, don't add DW_OP_deref, instead
12438 change it into corresponding DW_OP_breg{0...31,x} 0. Then the
12439 location expression is considered to be address of a memory location,
12440 rather than the register itself. */
12441 if (((loc->dw_loc_opc >= DW_OP_reg0 && loc->dw_loc_opc <= DW_OP_reg31)
12442 || loc->dw_loc_opc == DW_OP_regx)
12443 && (loc->dw_loc_next == NULL
12444 || (loc->dw_loc_next->dw_loc_opc == DW_OP_GNU_uninit
12445 && loc->dw_loc_next->dw_loc_next == NULL)))
12446 {
12447 if (loc->dw_loc_opc == DW_OP_regx)
12448 {
12449 loc->dw_loc_opc = DW_OP_bregx;
12450 loc->dw_loc_oprnd2.v.val_int = 0;
12451 }
12452 else
12453 {
12454 loc->dw_loc_opc
12455 = (enum dwarf_location_atom)
12456 (loc->dw_loc_opc + (DW_OP_breg0 - DW_OP_reg0));
12457 loc->dw_loc_oprnd1.v.val_int = 0;
12458 }
12459 return loc;
12460 }
12461
12462 size = int_size_in_bytes (TREE_TYPE (decl));
12463 if (size > DWARF2_ADDR_SIZE || size == -1)
12464 return 0;
12465 else if (size == DWARF2_ADDR_SIZE)
12466 op = DW_OP_deref;
12467 else
12468 op = DW_OP_deref_size;
12469 add_loc_descr (&loc, new_loc_descr (op, size, 0));
12470 return loc;
12471 }
12472
12473 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
12474 data attribute for a variable or a parameter. We generate the
12475 DW_AT_const_value attribute only in those cases where the given variable
12476 or parameter does not have a true "location" either in memory or in a
12477 register. This can happen (for example) when a constant is passed as an
12478 actual argument in a call to an inline function. (It's possible that
12479 these things can crop up in other ways also.) Note that one type of
12480 constant value which can be passed into an inlined function is a constant
12481 pointer. This can happen for example if an actual argument in an inlined
12482 function call evaluates to a compile-time constant address. */
12483
12484 static void
12485 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
12486 enum dwarf_attribute attr)
12487 {
12488 rtx rtl;
12489 dw_loc_descr_ref descr;
12490 var_loc_list *loc_list;
12491 struct var_loc_node *node;
12492 if (TREE_CODE (decl) == ERROR_MARK)
12493 return;
12494
12495 gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
12496 || TREE_CODE (decl) == RESULT_DECL);
12497
12498 /* See if we possibly have multiple locations for this variable. */
12499 loc_list = lookup_decl_loc (decl);
12500
12501 /* If it truly has multiple locations, the first and last node will
12502 differ. */
12503 if (loc_list && loc_list->first != loc_list->last)
12504 {
12505 const char *endname, *secname;
12506 dw_loc_list_ref list;
12507 rtx varloc;
12508 enum var_init_status initialized;
12509
12510 /* Now that we know what section we are using for a base,
12511 actually construct the list of locations.
12512 The first location information is what is passed to the
12513 function that creates the location list, and the remaining
12514 locations just get added on to that list.
12515 Note that we only know the start address for a location
12516 (IE location changes), so to build the range, we use
12517 the range [current location start, next location start].
12518 This means we have to special case the last node, and generate
12519 a range of [last location start, end of function label]. */
12520
12521 node = loc_list->first;
12522 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
12523 secname = secname_for_decl (decl);
12524
12525 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note))
12526 initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
12527 else
12528 initialized = VAR_INIT_STATUS_INITIALIZED;
12529
12530 descr = loc_by_reference (loc_descriptor (varloc, initialized), decl);
12531 list = new_loc_list (descr, node->label, node->next->label, secname, 1);
12532 node = node->next;
12533
12534 for (; node->next; node = node->next)
12535 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
12536 {
12537 /* The variable has a location between NODE->LABEL and
12538 NODE->NEXT->LABEL. */
12539 enum var_init_status initialized =
12540 NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
12541 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
12542 descr = loc_by_reference (loc_descriptor (varloc, initialized),
12543 decl);
12544 add_loc_descr_to_loc_list (&list, descr,
12545 node->label, node->next->label, secname);
12546 }
12547
12548 /* If the variable has a location at the last label
12549 it keeps its location until the end of function. */
12550 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
12551 {
12552 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
12553 enum var_init_status initialized =
12554 NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
12555
12556 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
12557 if (!current_function_decl)
12558 endname = text_end_label;
12559 else
12560 {
12561 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
12562 current_function_funcdef_no);
12563 endname = ggc_strdup (label_id);
12564 }
12565 descr = loc_by_reference (loc_descriptor (varloc, initialized),
12566 decl);
12567 add_loc_descr_to_loc_list (&list, descr,
12568 node->label, endname, secname);
12569 }
12570
12571 /* Finally, add the location list to the DIE, and we are done. */
12572 add_AT_loc_list (die, attr, list);
12573 return;
12574 }
12575
12576 /* Try to get some constant RTL for this decl, and use that as the value of
12577 the location. */
12578
12579 rtl = rtl_for_decl_location (decl);
12580 if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING))
12581 {
12582 add_const_value_attribute (die, rtl);
12583 return;
12584 }
12585
12586 /* If we have tried to generate the location otherwise, and it
12587 didn't work out (we wouldn't be here if we did), and we have a one entry
12588 location list, try generating a location from that. */
12589 if (loc_list && loc_list->first)
12590 {
12591 enum var_init_status status;
12592 node = loc_list->first;
12593 status = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
12594 descr = loc_descriptor (NOTE_VAR_LOCATION (node->var_loc_note), status);
12595 if (descr)
12596 {
12597 descr = loc_by_reference (descr, decl);
12598 add_AT_location_description (die, attr, descr);
12599 return;
12600 }
12601 }
12602
12603 /* We couldn't get any rtl, so try directly generating the location
12604 description from the tree. */
12605 descr = loc_descriptor_from_tree (decl);
12606 if (descr)
12607 {
12608 descr = loc_by_reference (descr, decl);
12609 add_AT_location_description (die, attr, descr);
12610 return;
12611 }
12612 /* None of that worked, so it must not really have a location;
12613 try adding a constant value attribute from the DECL_INITIAL. */
12614 tree_add_const_value_attribute (die, decl);
12615 }
12616
12617 /* Add VARIABLE and DIE into deferred locations list. */
12618
12619 static void
12620 defer_location (tree variable, dw_die_ref die)
12621 {
12622 deferred_locations entry;
12623 entry.variable = variable;
12624 entry.die = die;
12625 VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
12626 }
12627
12628 /* Helper function for tree_add_const_value_attribute. Natively encode
12629 initializer INIT into an array. Return true if successful. */
12630
12631 static bool
12632 native_encode_initializer (tree init, unsigned char *array, int size)
12633 {
12634 tree type;
12635
12636 if (init == NULL_TREE)
12637 return false;
12638
12639 STRIP_NOPS (init);
12640 switch (TREE_CODE (init))
12641 {
12642 case STRING_CST:
12643 type = TREE_TYPE (init);
12644 if (TREE_CODE (type) == ARRAY_TYPE)
12645 {
12646 tree enttype = TREE_TYPE (type);
12647 enum machine_mode mode = TYPE_MODE (enttype);
12648
12649 if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
12650 return false;
12651 if (int_size_in_bytes (type) != size)
12652 return false;
12653 if (size > TREE_STRING_LENGTH (init))
12654 {
12655 memcpy (array, TREE_STRING_POINTER (init),
12656 TREE_STRING_LENGTH (init));
12657 memset (array + TREE_STRING_LENGTH (init),
12658 '\0', size - TREE_STRING_LENGTH (init));
12659 }
12660 else
12661 memcpy (array, TREE_STRING_POINTER (init), size);
12662 return true;
12663 }
12664 return false;
12665 case CONSTRUCTOR:
12666 type = TREE_TYPE (init);
12667 if (int_size_in_bytes (type) != size)
12668 return false;
12669 if (TREE_CODE (type) == ARRAY_TYPE)
12670 {
12671 HOST_WIDE_INT min_index;
12672 unsigned HOST_WIDE_INT cnt;
12673 int curpos = 0, fieldsize;
12674 constructor_elt *ce;
12675
12676 if (TYPE_DOMAIN (type) == NULL_TREE
12677 || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
12678 return false;
12679
12680 fieldsize = int_size_in_bytes (TREE_TYPE (type));
12681 if (fieldsize <= 0)
12682 return false;
12683
12684 min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
12685 memset (array, '\0', size);
12686 for (cnt = 0;
12687 VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
12688 cnt++)
12689 {
12690 tree val = ce->value;
12691 tree index = ce->index;
12692 int pos = curpos;
12693 if (index && TREE_CODE (index) == RANGE_EXPR)
12694 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
12695 * fieldsize;
12696 else if (index)
12697 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
12698
12699 if (val)
12700 {
12701 STRIP_NOPS (val);
12702 if (!native_encode_initializer (val, array + pos, fieldsize))
12703 return false;
12704 }
12705 curpos = pos + fieldsize;
12706 if (index && TREE_CODE (index) == RANGE_EXPR)
12707 {
12708 int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
12709 - tree_low_cst (TREE_OPERAND (index, 0), 0);
12710 while (count > 0)
12711 {
12712 if (val)
12713 memcpy (array + curpos, array + pos, fieldsize);
12714 curpos += fieldsize;
12715 }
12716 }
12717 gcc_assert (curpos <= size);
12718 }
12719 return true;
12720 }
12721 else if (TREE_CODE (type) == RECORD_TYPE
12722 || TREE_CODE (type) == UNION_TYPE)
12723 {
12724 tree field = NULL_TREE;
12725 unsigned HOST_WIDE_INT cnt;
12726 constructor_elt *ce;
12727
12728 if (int_size_in_bytes (type) != size)
12729 return false;
12730
12731 if (TREE_CODE (type) == RECORD_TYPE)
12732 field = TYPE_FIELDS (type);
12733
12734 for (cnt = 0;
12735 VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
12736 cnt++, field = field ? TREE_CHAIN (field) : 0)
12737 {
12738 tree val = ce->value;
12739 int pos, fieldsize;
12740
12741 if (ce->index != 0)
12742 field = ce->index;
12743
12744 if (val)
12745 STRIP_NOPS (val);
12746
12747 if (field == NULL_TREE || DECL_BIT_FIELD (field))
12748 return false;
12749
12750 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
12751 && TYPE_DOMAIN (TREE_TYPE (field))
12752 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
12753 return false;
12754 else if (DECL_SIZE_UNIT (field) == NULL_TREE
12755 || !host_integerp (DECL_SIZE_UNIT (field), 0))
12756 return false;
12757 fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
12758 pos = int_byte_position (field);
12759 gcc_assert (pos + fieldsize <= size);
12760 if (val
12761 && !native_encode_initializer (val, array + pos, fieldsize))
12762 return false;
12763 }
12764 return true;
12765 }
12766 return false;
12767 case VIEW_CONVERT_EXPR:
12768 case NON_LVALUE_EXPR:
12769 return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
12770 default:
12771 return native_encode_expr (init, array, size) == size;
12772 }
12773 }
12774
12775 /* If we don't have a copy of this variable in memory for some reason (such
12776 as a C++ member constant that doesn't have an out-of-line definition),
12777 we should tell the debugger about the constant value. */
12778
12779 static void
12780 tree_add_const_value_attribute (dw_die_ref var_die, tree decl)
12781 {
12782 tree init;
12783 tree type = TREE_TYPE (decl);
12784 rtx rtl;
12785
12786 if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != CONST_DECL)
12787 return;
12788
12789 init = DECL_INITIAL (decl);
12790 if (TREE_READONLY (decl) && ! TREE_THIS_VOLATILE (decl) && init)
12791 /* OK */;
12792 else
12793 return;
12794
12795 rtl = rtl_for_decl_init (init, type);
12796 if (rtl)
12797 add_const_value_attribute (var_die, rtl);
12798 /* If the host and target are sane, try harder. */
12799 else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
12800 && initializer_constant_valid_p (init, type))
12801 {
12802 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
12803 if (size > 0 && (int) size == size)
12804 {
12805 unsigned char *array = GGC_CNEWVEC (unsigned char, size);
12806
12807 if (native_encode_initializer (init, array, size))
12808 add_AT_vec (var_die, DW_AT_const_value, size, 1, array);
12809 }
12810 }
12811 }
12812
12813 /* Convert the CFI instructions for the current function into a
12814 location list. This is used for DW_AT_frame_base when we targeting
12815 a dwarf2 consumer that does not support the dwarf3
12816 DW_OP_call_frame_cfa. OFFSET is a constant to be added to all CFA
12817 expressions. */
12818
12819 static dw_loc_list_ref
12820 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
12821 {
12822 dw_fde_ref fde;
12823 dw_loc_list_ref list, *list_tail;
12824 dw_cfi_ref cfi;
12825 dw_cfa_location last_cfa, next_cfa;
12826 const char *start_label, *last_label, *section;
12827 dw_cfa_location remember;
12828
12829 fde = current_fde ();
12830 gcc_assert (fde != NULL);
12831
12832 section = secname_for_decl (current_function_decl);
12833 list_tail = &list;
12834 list = NULL;
12835
12836 memset (&next_cfa, 0, sizeof (next_cfa));
12837 next_cfa.reg = INVALID_REGNUM;
12838 remember = next_cfa;
12839
12840 start_label = fde->dw_fde_begin;
12841
12842 /* ??? Bald assumption that the CIE opcode list does not contain
12843 advance opcodes. */
12844 for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
12845 lookup_cfa_1 (cfi, &next_cfa, &remember);
12846
12847 last_cfa = next_cfa;
12848 last_label = start_label;
12849
12850 for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
12851 switch (cfi->dw_cfi_opc)
12852 {
12853 case DW_CFA_set_loc:
12854 case DW_CFA_advance_loc1:
12855 case DW_CFA_advance_loc2:
12856 case DW_CFA_advance_loc4:
12857 if (!cfa_equal_p (&last_cfa, &next_cfa))
12858 {
12859 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
12860 start_label, last_label, section,
12861 list == NULL);
12862
12863 list_tail = &(*list_tail)->dw_loc_next;
12864 last_cfa = next_cfa;
12865 start_label = last_label;
12866 }
12867 last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
12868 break;
12869
12870 case DW_CFA_advance_loc:
12871 /* The encoding is complex enough that we should never emit this. */
12872 gcc_unreachable ();
12873
12874 default:
12875 lookup_cfa_1 (cfi, &next_cfa, &remember);
12876 break;
12877 }
12878
12879 if (!cfa_equal_p (&last_cfa, &next_cfa))
12880 {
12881 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
12882 start_label, last_label, section,
12883 list == NULL);
12884 list_tail = &(*list_tail)->dw_loc_next;
12885 start_label = last_label;
12886 }
12887 *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
12888 start_label, fde->dw_fde_end, section,
12889 list == NULL);
12890
12891 return list;
12892 }
12893
12894 /* Compute a displacement from the "steady-state frame pointer" to the
12895 frame base (often the same as the CFA), and store it in
12896 frame_pointer_fb_offset. OFFSET is added to the displacement
12897 before the latter is negated. */
12898
12899 static void
12900 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
12901 {
12902 rtx reg, elim;
12903
12904 #ifdef FRAME_POINTER_CFA_OFFSET
12905 reg = frame_pointer_rtx;
12906 offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
12907 #else
12908 reg = arg_pointer_rtx;
12909 offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
12910 #endif
12911
12912 elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
12913 if (GET_CODE (elim) == PLUS)
12914 {
12915 offset += INTVAL (XEXP (elim, 1));
12916 elim = XEXP (elim, 0);
12917 }
12918
12919 gcc_assert ((SUPPORTS_STACK_ALIGNMENT
12920 && (elim == hard_frame_pointer_rtx
12921 || elim == stack_pointer_rtx))
12922 || elim == (frame_pointer_needed
12923 ? hard_frame_pointer_rtx
12924 : stack_pointer_rtx));
12925
12926 frame_pointer_fb_offset = -offset;
12927 }
12928
12929 /* Generate a DW_AT_name attribute given some string value to be included as
12930 the value of the attribute. */
12931
12932 static void
12933 add_name_attribute (dw_die_ref die, const char *name_string)
12934 {
12935 if (name_string != NULL && *name_string != 0)
12936 {
12937 if (demangle_name_func)
12938 name_string = (*demangle_name_func) (name_string);
12939
12940 add_AT_string (die, DW_AT_name, name_string);
12941 }
12942 }
12943
12944 /* Generate a DW_AT_comp_dir attribute for DIE. */
12945
12946 static void
12947 add_comp_dir_attribute (dw_die_ref die)
12948 {
12949 const char *wd = get_src_pwd ();
12950 char *wd1;
12951
12952 if (wd == NULL)
12953 return;
12954
12955 if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
12956 {
12957 int wdlen;
12958
12959 wdlen = strlen (wd);
12960 wd1 = GGC_NEWVEC (char, wdlen + 2);
12961 strcpy (wd1, wd);
12962 wd1 [wdlen] = DIR_SEPARATOR;
12963 wd1 [wdlen + 1] = 0;
12964 wd = wd1;
12965 }
12966
12967 add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
12968 }
12969
12970 /* Given a tree node describing an array bound (either lower or upper) output
12971 a representation for that bound. */
12972
12973 static void
12974 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
12975 {
12976 switch (TREE_CODE (bound))
12977 {
12978 case ERROR_MARK:
12979 return;
12980
12981 /* All fixed-bounds are represented by INTEGER_CST nodes. */
12982 case INTEGER_CST:
12983 if (! host_integerp (bound, 0)
12984 || (bound_attr == DW_AT_lower_bound
12985 && (((is_c_family () || is_java ()) && integer_zerop (bound))
12986 || (is_fortran () && integer_onep (bound)))))
12987 /* Use the default. */
12988 ;
12989 else
12990 add_AT_unsigned (subrange_die, bound_attr, tree_low_cst (bound, 0));
12991 break;
12992
12993 CASE_CONVERT:
12994 case VIEW_CONVERT_EXPR:
12995 add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
12996 break;
12997
12998 case SAVE_EXPR:
12999 break;
13000
13001 case VAR_DECL:
13002 case PARM_DECL:
13003 case RESULT_DECL:
13004 {
13005 dw_die_ref decl_die = lookup_decl_die (bound);
13006 dw_loc_descr_ref loc;
13007
13008 /* ??? Can this happen, or should the variable have been bound
13009 first? Probably it can, since I imagine that we try to create
13010 the types of parameters in the order in which they exist in
13011 the list, and won't have created a forward reference to a
13012 later parameter. */
13013 if (decl_die != NULL)
13014 add_AT_die_ref (subrange_die, bound_attr, decl_die);
13015 else
13016 {
13017 loc = loc_descriptor_from_tree_1 (bound, 0);
13018 add_AT_location_description (subrange_die, bound_attr, loc);
13019 }
13020 break;
13021 }
13022
13023 default:
13024 {
13025 /* Otherwise try to create a stack operation procedure to
13026 evaluate the value of the array bound. */
13027
13028 dw_die_ref ctx, decl_die;
13029 dw_loc_descr_ref loc;
13030
13031 loc = loc_descriptor_from_tree (bound);
13032 if (loc == NULL)
13033 break;
13034
13035 if (current_function_decl == 0)
13036 ctx = comp_unit_die;
13037 else
13038 ctx = lookup_decl_die (current_function_decl);
13039
13040 decl_die = new_die (DW_TAG_variable, ctx, bound);
13041 add_AT_flag (decl_die, DW_AT_artificial, 1);
13042 add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
13043 add_AT_loc (decl_die, DW_AT_location, loc);
13044
13045 add_AT_die_ref (subrange_die, bound_attr, decl_die);
13046 break;
13047 }
13048 }
13049 }
13050
13051 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
13052 possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
13053 Note that the block of subscript information for an array type also
13054 includes information about the element type of the given array type. */
13055
13056 static void
13057 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
13058 {
13059 unsigned dimension_number;
13060 tree lower, upper;
13061 dw_die_ref subrange_die;
13062
13063 for (dimension_number = 0;
13064 TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
13065 type = TREE_TYPE (type), dimension_number++)
13066 {
13067 tree domain = TYPE_DOMAIN (type);
13068
13069 if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
13070 break;
13071
13072 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
13073 and (in GNU C only) variable bounds. Handle all three forms
13074 here. */
13075 subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
13076 if (domain)
13077 {
13078 /* We have an array type with specified bounds. */
13079 lower = TYPE_MIN_VALUE (domain);
13080 upper = TYPE_MAX_VALUE (domain);
13081
13082 /* Define the index type. */
13083 if (TREE_TYPE (domain))
13084 {
13085 /* ??? This is probably an Ada unnamed subrange type. Ignore the
13086 TREE_TYPE field. We can't emit debug info for this
13087 because it is an unnamed integral type. */
13088 if (TREE_CODE (domain) == INTEGER_TYPE
13089 && TYPE_NAME (domain) == NULL_TREE
13090 && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
13091 && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
13092 ;
13093 else
13094 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
13095 type_die);
13096 }
13097
13098 /* ??? If upper is NULL, the array has unspecified length,
13099 but it does have a lower bound. This happens with Fortran
13100 dimension arr(N:*)
13101 Since the debugger is definitely going to need to know N
13102 to produce useful results, go ahead and output the lower
13103 bound solo, and hope the debugger can cope. */
13104
13105 add_bound_info (subrange_die, DW_AT_lower_bound, lower);
13106 if (upper)
13107 add_bound_info (subrange_die, DW_AT_upper_bound, upper);
13108 }
13109
13110 /* Otherwise we have an array type with an unspecified length. The
13111 DWARF-2 spec does not say how to handle this; let's just leave out the
13112 bounds. */
13113 }
13114 }
13115
13116 static void
13117 add_byte_size_attribute (dw_die_ref die, tree tree_node)
13118 {
13119 unsigned size;
13120
13121 switch (TREE_CODE (tree_node))
13122 {
13123 case ERROR_MARK:
13124 size = 0;
13125 break;
13126 case ENUMERAL_TYPE:
13127 case RECORD_TYPE:
13128 case UNION_TYPE:
13129 case QUAL_UNION_TYPE:
13130 size = int_size_in_bytes (tree_node);
13131 break;
13132 case FIELD_DECL:
13133 /* For a data member of a struct or union, the DW_AT_byte_size is
13134 generally given as the number of bytes normally allocated for an
13135 object of the *declared* type of the member itself. This is true
13136 even for bit-fields. */
13137 size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
13138 break;
13139 default:
13140 gcc_unreachable ();
13141 }
13142
13143 /* Note that `size' might be -1 when we get to this point. If it is, that
13144 indicates that the byte size of the entity in question is variable. We
13145 have no good way of expressing this fact in Dwarf at the present time,
13146 so just let the -1 pass on through. */
13147 add_AT_unsigned (die, DW_AT_byte_size, size);
13148 }
13149
13150 /* For a FIELD_DECL node which represents a bit-field, output an attribute
13151 which specifies the distance in bits from the highest order bit of the
13152 "containing object" for the bit-field to the highest order bit of the
13153 bit-field itself.
13154
13155 For any given bit-field, the "containing object" is a hypothetical object
13156 (of some integral or enum type) within which the given bit-field lives. The
13157 type of this hypothetical "containing object" is always the same as the
13158 declared type of the individual bit-field itself. The determination of the
13159 exact location of the "containing object" for a bit-field is rather
13160 complicated. It's handled by the `field_byte_offset' function (above).
13161
13162 Note that it is the size (in bytes) of the hypothetical "containing object"
13163 which will be given in the DW_AT_byte_size attribute for this bit-field.
13164 (See `byte_size_attribute' above). */
13165
13166 static inline void
13167 add_bit_offset_attribute (dw_die_ref die, tree decl)
13168 {
13169 HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
13170 tree type = DECL_BIT_FIELD_TYPE (decl);
13171 HOST_WIDE_INT bitpos_int;
13172 HOST_WIDE_INT highest_order_object_bit_offset;
13173 HOST_WIDE_INT highest_order_field_bit_offset;
13174 HOST_WIDE_INT unsigned bit_offset;
13175
13176 /* Must be a field and a bit field. */
13177 gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
13178
13179 /* We can't yet handle bit-fields whose offsets are variable, so if we
13180 encounter such things, just return without generating any attribute
13181 whatsoever. Likewise for variable or too large size. */
13182 if (! host_integerp (bit_position (decl), 0)
13183 || ! host_integerp (DECL_SIZE (decl), 1))
13184 return;
13185
13186 bitpos_int = int_bit_position (decl);
13187
13188 /* Note that the bit offset is always the distance (in bits) from the
13189 highest-order bit of the "containing object" to the highest-order bit of
13190 the bit-field itself. Since the "high-order end" of any object or field
13191 is different on big-endian and little-endian machines, the computation
13192 below must take account of these differences. */
13193 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
13194 highest_order_field_bit_offset = bitpos_int;
13195
13196 if (! BYTES_BIG_ENDIAN)
13197 {
13198 highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
13199 highest_order_object_bit_offset += simple_type_size_in_bits (type);
13200 }
13201
13202 bit_offset
13203 = (! BYTES_BIG_ENDIAN
13204 ? highest_order_object_bit_offset - highest_order_field_bit_offset
13205 : highest_order_field_bit_offset - highest_order_object_bit_offset);
13206
13207 add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
13208 }
13209
13210 /* For a FIELD_DECL node which represents a bit field, output an attribute
13211 which specifies the length in bits of the given field. */
13212
13213 static inline void
13214 add_bit_size_attribute (dw_die_ref die, tree decl)
13215 {
13216 /* Must be a field and a bit field. */
13217 gcc_assert (TREE_CODE (decl) == FIELD_DECL
13218 && DECL_BIT_FIELD_TYPE (decl));
13219
13220 if (host_integerp (DECL_SIZE (decl), 1))
13221 add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
13222 }
13223
13224 /* If the compiled language is ANSI C, then add a 'prototyped'
13225 attribute, if arg types are given for the parameters of a function. */
13226
13227 static inline void
13228 add_prototyped_attribute (dw_die_ref die, tree func_type)
13229 {
13230 if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
13231 && TYPE_ARG_TYPES (func_type) != NULL)
13232 add_AT_flag (die, DW_AT_prototyped, 1);
13233 }
13234
13235 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
13236 by looking in either the type declaration or object declaration
13237 equate table. */
13238
13239 static inline dw_die_ref
13240 add_abstract_origin_attribute (dw_die_ref die, tree origin)
13241 {
13242 dw_die_ref origin_die = NULL;
13243
13244 if (TREE_CODE (origin) != FUNCTION_DECL)
13245 {
13246 /* We may have gotten separated from the block for the inlined
13247 function, if we're in an exception handler or some such; make
13248 sure that the abstract function has been written out.
13249
13250 Doing this for nested functions is wrong, however; functions are
13251 distinct units, and our context might not even be inline. */
13252 tree fn = origin;
13253
13254 if (TYPE_P (fn))
13255 fn = TYPE_STUB_DECL (fn);
13256
13257 fn = decl_function_context (fn);
13258 if (fn)
13259 dwarf2out_abstract_function (fn);
13260 }
13261
13262 if (DECL_P (origin))
13263 origin_die = lookup_decl_die (origin);
13264 else if (TYPE_P (origin))
13265 origin_die = lookup_type_die (origin);
13266
13267 /* XXX: Functions that are never lowered don't always have correct block
13268 trees (in the case of java, they simply have no block tree, in some other
13269 languages). For these functions, there is nothing we can really do to
13270 output correct debug info for inlined functions in all cases. Rather
13271 than die, we'll just produce deficient debug info now, in that we will
13272 have variables without a proper abstract origin. In the future, when all
13273 functions are lowered, we should re-add a gcc_assert (origin_die)
13274 here. */
13275
13276 if (origin_die)
13277 add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
13278 return origin_die;
13279 }
13280
13281 /* We do not currently support the pure_virtual attribute. */
13282
13283 static inline void
13284 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
13285 {
13286 if (DECL_VINDEX (func_decl))
13287 {
13288 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
13289
13290 if (host_integerp (DECL_VINDEX (func_decl), 0))
13291 add_AT_loc (die, DW_AT_vtable_elem_location,
13292 new_loc_descr (DW_OP_constu,
13293 tree_low_cst (DECL_VINDEX (func_decl), 0),
13294 0));
13295
13296 /* GNU extension: Record what type this method came from originally. */
13297 if (debug_info_level > DINFO_LEVEL_TERSE)
13298 add_AT_die_ref (die, DW_AT_containing_type,
13299 lookup_type_die (DECL_CONTEXT (func_decl)));
13300 }
13301 }
13302 \f
13303 /* Add source coordinate attributes for the given decl. */
13304
13305 static void
13306 add_src_coords_attributes (dw_die_ref die, tree decl)
13307 {
13308 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
13309
13310 add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
13311 add_AT_unsigned (die, DW_AT_decl_line, s.line);
13312 }
13313
13314 /* Add a DW_AT_name attribute and source coordinate attribute for the
13315 given decl, but only if it actually has a name. */
13316
13317 static void
13318 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
13319 {
13320 tree decl_name;
13321
13322 decl_name = DECL_NAME (decl);
13323 if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
13324 {
13325 add_name_attribute (die, dwarf2_name (decl, 0));
13326 if (! DECL_ARTIFICIAL (decl))
13327 add_src_coords_attributes (die, decl);
13328
13329 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
13330 && TREE_PUBLIC (decl)
13331 && !DECL_ABSTRACT (decl)
13332 && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
13333 && !is_fortran ())
13334 {
13335 /* Defer until we have an assembler name set. */
13336 if (!DECL_ASSEMBLER_NAME_SET_P (decl))
13337 {
13338 limbo_die_node *asm_name;
13339
13340 asm_name = GGC_CNEW (limbo_die_node);
13341 asm_name->die = die;
13342 asm_name->created_for = decl;
13343 asm_name->next = deferred_asm_name;
13344 deferred_asm_name = asm_name;
13345 }
13346 else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
13347 add_AT_string (die, DW_AT_MIPS_linkage_name,
13348 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
13349 }
13350 }
13351
13352 #ifdef VMS_DEBUGGING_INFO
13353 /* Get the function's name, as described by its RTL. This may be different
13354 from the DECL_NAME name used in the source file. */
13355 if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
13356 {
13357 add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
13358 XEXP (DECL_RTL (decl), 0));
13359 VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
13360 }
13361 #endif
13362 }
13363
13364 /* Push a new declaration scope. */
13365
13366 static void
13367 push_decl_scope (tree scope)
13368 {
13369 VEC_safe_push (tree, gc, decl_scope_table, scope);
13370 }
13371
13372 /* Pop a declaration scope. */
13373
13374 static inline void
13375 pop_decl_scope (void)
13376 {
13377 VEC_pop (tree, decl_scope_table);
13378 }
13379
13380 /* Return the DIE for the scope that immediately contains this type.
13381 Non-named types get global scope. Named types nested in other
13382 types get their containing scope if it's open, or global scope
13383 otherwise. All other types (i.e. function-local named types) get
13384 the current active scope. */
13385
13386 static dw_die_ref
13387 scope_die_for (tree t, dw_die_ref context_die)
13388 {
13389 dw_die_ref scope_die = NULL;
13390 tree containing_scope;
13391 int i;
13392
13393 /* Non-types always go in the current scope. */
13394 gcc_assert (TYPE_P (t));
13395
13396 containing_scope = TYPE_CONTEXT (t);
13397
13398 /* Use the containing namespace if it was passed in (for a declaration). */
13399 if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
13400 {
13401 if (context_die == lookup_decl_die (containing_scope))
13402 /* OK */;
13403 else
13404 containing_scope = NULL_TREE;
13405 }
13406
13407 /* Ignore function type "scopes" from the C frontend. They mean that
13408 a tagged type is local to a parmlist of a function declarator, but
13409 that isn't useful to DWARF. */
13410 if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
13411 containing_scope = NULL_TREE;
13412
13413 if (containing_scope == NULL_TREE)
13414 scope_die = comp_unit_die;
13415 else if (TYPE_P (containing_scope))
13416 {
13417 /* For types, we can just look up the appropriate DIE. But
13418 first we check to see if we're in the middle of emitting it
13419 so we know where the new DIE should go. */
13420 for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
13421 if (VEC_index (tree, decl_scope_table, i) == containing_scope)
13422 break;
13423
13424 if (i < 0)
13425 {
13426 gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
13427 || TREE_ASM_WRITTEN (containing_scope));
13428
13429 /* If none of the current dies are suitable, we get file scope. */
13430 scope_die = comp_unit_die;
13431 }
13432 else
13433 scope_die = lookup_type_die (containing_scope);
13434 }
13435 else
13436 scope_die = context_die;
13437
13438 return scope_die;
13439 }
13440
13441 /* Returns nonzero if CONTEXT_DIE is internal to a function. */
13442
13443 static inline int
13444 local_scope_p (dw_die_ref context_die)
13445 {
13446 for (; context_die; context_die = context_die->die_parent)
13447 if (context_die->die_tag == DW_TAG_inlined_subroutine
13448 || context_die->die_tag == DW_TAG_subprogram)
13449 return 1;
13450
13451 return 0;
13452 }
13453
13454 /* Returns nonzero if CONTEXT_DIE is a class. */
13455
13456 static inline int
13457 class_scope_p (dw_die_ref context_die)
13458 {
13459 return (context_die
13460 && (context_die->die_tag == DW_TAG_structure_type
13461 || context_die->die_tag == DW_TAG_class_type
13462 || context_die->die_tag == DW_TAG_interface_type
13463 || context_die->die_tag == DW_TAG_union_type));
13464 }
13465
13466 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
13467 whether or not to treat a DIE in this context as a declaration. */
13468
13469 static inline int
13470 class_or_namespace_scope_p (dw_die_ref context_die)
13471 {
13472 return (class_scope_p (context_die)
13473 || (context_die && context_die->die_tag == DW_TAG_namespace));
13474 }
13475
13476 /* Many forms of DIEs require a "type description" attribute. This
13477 routine locates the proper "type descriptor" die for the type given
13478 by 'type', and adds a DW_AT_type attribute below the given die. */
13479
13480 static void
13481 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
13482 int decl_volatile, dw_die_ref context_die)
13483 {
13484 enum tree_code code = TREE_CODE (type);
13485 dw_die_ref type_die = NULL;
13486
13487 /* ??? If this type is an unnamed subrange type of an integral, floating-point
13488 or fixed-point type, use the inner type. This is because we have no
13489 support for unnamed types in base_type_die. This can happen if this is
13490 an Ada subrange type. Correct solution is emit a subrange type die. */
13491 if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
13492 && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
13493 type = TREE_TYPE (type), code = TREE_CODE (type);
13494
13495 if (code == ERROR_MARK
13496 /* Handle a special case. For functions whose return type is void, we
13497 generate *no* type attribute. (Note that no object may have type
13498 `void', so this only applies to function return types). */
13499 || code == VOID_TYPE)
13500 return;
13501
13502 type_die = modified_type_die (type,
13503 decl_const || TYPE_READONLY (type),
13504 decl_volatile || TYPE_VOLATILE (type),
13505 context_die);
13506
13507 if (type_die != NULL)
13508 add_AT_die_ref (object_die, DW_AT_type, type_die);
13509 }
13510
13511 /* Given an object die, add the calling convention attribute for the
13512 function call type. */
13513 static void
13514 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
13515 {
13516 enum dwarf_calling_convention value = DW_CC_normal;
13517
13518 value = ((enum dwarf_calling_convention)
13519 targetm.dwarf_calling_convention (TREE_TYPE (decl)));
13520
13521 /* DWARF doesn't provide a way to identify a program's source-level
13522 entry point. DW_AT_calling_convention attributes are only meant
13523 to describe functions' calling conventions. However, lacking a
13524 better way to signal the Fortran main program, we use this for the
13525 time being, following existing custom. */
13526 if (is_fortran ()
13527 && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
13528 value = DW_CC_program;
13529
13530 /* Only add the attribute if the backend requests it, and
13531 is not DW_CC_normal. */
13532 if (value && (value != DW_CC_normal))
13533 add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
13534 }
13535
13536 /* Given a tree pointer to a struct, class, union, or enum type node, return
13537 a pointer to the (string) tag name for the given type, or zero if the type
13538 was declared without a tag. */
13539
13540 static const char *
13541 type_tag (const_tree type)
13542 {
13543 const char *name = 0;
13544
13545 if (TYPE_NAME (type) != 0)
13546 {
13547 tree t = 0;
13548
13549 /* Find the IDENTIFIER_NODE for the type name. */
13550 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
13551 t = TYPE_NAME (type);
13552
13553 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
13554 a TYPE_DECL node, regardless of whether or not a `typedef' was
13555 involved. */
13556 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
13557 && ! DECL_IGNORED_P (TYPE_NAME (type)))
13558 {
13559 /* We want to be extra verbose. Don't call dwarf_name if
13560 DECL_NAME isn't set. The default hook for decl_printable_name
13561 doesn't like that, and in this context it's correct to return
13562 0, instead of "<anonymous>" or the like. */
13563 if (DECL_NAME (TYPE_NAME (type)))
13564 name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
13565 }
13566
13567 /* Now get the name as a string, or invent one. */
13568 if (!name && t != 0)
13569 name = IDENTIFIER_POINTER (t);
13570 }
13571
13572 return (name == 0 || *name == '\0') ? 0 : name;
13573 }
13574
13575 /* Return the type associated with a data member, make a special check
13576 for bit field types. */
13577
13578 static inline tree
13579 member_declared_type (const_tree member)
13580 {
13581 return (DECL_BIT_FIELD_TYPE (member)
13582 ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
13583 }
13584
13585 /* Get the decl's label, as described by its RTL. This may be different
13586 from the DECL_NAME name used in the source file. */
13587
13588 #if 0
13589 static const char *
13590 decl_start_label (tree decl)
13591 {
13592 rtx x;
13593 const char *fnname;
13594
13595 x = DECL_RTL (decl);
13596 gcc_assert (MEM_P (x));
13597
13598 x = XEXP (x, 0);
13599 gcc_assert (GET_CODE (x) == SYMBOL_REF);
13600
13601 fnname = XSTR (x, 0);
13602 return fnname;
13603 }
13604 #endif
13605 \f
13606 /* These routines generate the internal representation of the DIE's for
13607 the compilation unit. Debugging information is collected by walking
13608 the declaration trees passed in from dwarf2out_decl(). */
13609
13610 static void
13611 gen_array_type_die (tree type, dw_die_ref context_die)
13612 {
13613 dw_die_ref scope_die = scope_die_for (type, context_die);
13614 dw_die_ref array_die;
13615
13616 /* GNU compilers represent multidimensional array types as sequences of one
13617 dimensional array types whose element types are themselves array types.
13618 We sometimes squish that down to a single array_type DIE with multiple
13619 subscripts in the Dwarf debugging info. The draft Dwarf specification
13620 say that we are allowed to do this kind of compression in C, because
13621 there is no difference between an array of arrays and a multidimensional
13622 array. We don't do this for Ada to remain as close as possible to the
13623 actual representation, which is especially important against the language
13624 flexibilty wrt arrays of variable size. */
13625
13626 bool collapse_nested_arrays = !is_ada ();
13627 tree element_type;
13628
13629 /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
13630 DW_TAG_string_type doesn't have DW_AT_type attribute). */
13631 if (TYPE_STRING_FLAG (type)
13632 && TREE_CODE (type) == ARRAY_TYPE
13633 && is_fortran ()
13634 && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
13635 {
13636 HOST_WIDE_INT size;
13637
13638 array_die = new_die (DW_TAG_string_type, scope_die, type);
13639 add_name_attribute (array_die, type_tag (type));
13640 equate_type_number_to_die (type, array_die);
13641 size = int_size_in_bytes (type);
13642 if (size >= 0)
13643 add_AT_unsigned (array_die, DW_AT_byte_size, size);
13644 else if (TYPE_DOMAIN (type) != NULL_TREE
13645 && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
13646 && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
13647 {
13648 tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
13649 dw_loc_descr_ref loc = loc_descriptor_from_tree (szdecl);
13650
13651 size = int_size_in_bytes (TREE_TYPE (szdecl));
13652 if (loc && size > 0)
13653 {
13654 add_AT_loc (array_die, DW_AT_string_length, loc);
13655 if (size != DWARF2_ADDR_SIZE)
13656 add_AT_unsigned (array_die, DW_AT_byte_size, size);
13657 }
13658 }
13659 return;
13660 }
13661
13662 /* ??? The SGI dwarf reader fails for array of array of enum types
13663 (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
13664 array type comes before the outer array type. We thus call gen_type_die
13665 before we new_die and must prevent nested array types collapsing for this
13666 target. */
13667
13668 #ifdef MIPS_DEBUGGING_INFO
13669 gen_type_die (TREE_TYPE (type), context_die);
13670 collapse_nested_arrays = false;
13671 #endif
13672
13673 array_die = new_die (DW_TAG_array_type, scope_die, type);
13674 add_name_attribute (array_die, type_tag (type));
13675 equate_type_number_to_die (type, array_die);
13676
13677 if (TREE_CODE (type) == VECTOR_TYPE)
13678 {
13679 /* The frontend feeds us a representation for the vector as a struct
13680 containing an array. Pull out the array type. */
13681 type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
13682 add_AT_flag (array_die, DW_AT_GNU_vector, 1);
13683 }
13684
13685 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
13686 if (is_fortran ()
13687 && TREE_CODE (type) == ARRAY_TYPE
13688 && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
13689 && !TYPE_STRING_FLAG (TREE_TYPE (type)))
13690 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
13691
13692 #if 0
13693 /* We default the array ordering. SDB will probably do
13694 the right things even if DW_AT_ordering is not present. It's not even
13695 an issue until we start to get into multidimensional arrays anyway. If
13696 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
13697 then we'll have to put the DW_AT_ordering attribute back in. (But if
13698 and when we find out that we need to put these in, we will only do so
13699 for multidimensional arrays. */
13700 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
13701 #endif
13702
13703 #ifdef MIPS_DEBUGGING_INFO
13704 /* The SGI compilers handle arrays of unknown bound by setting
13705 AT_declaration and not emitting any subrange DIEs. */
13706 if (! TYPE_DOMAIN (type))
13707 add_AT_flag (array_die, DW_AT_declaration, 1);
13708 else
13709 #endif
13710 add_subscript_info (array_die, type, collapse_nested_arrays);
13711
13712 /* Add representation of the type of the elements of this array type and
13713 emit the corresponding DIE if we haven't done it already. */
13714 element_type = TREE_TYPE (type);
13715 if (collapse_nested_arrays)
13716 while (TREE_CODE (element_type) == ARRAY_TYPE)
13717 {
13718 if (TYPE_STRING_FLAG (element_type) && is_fortran ())
13719 break;
13720 element_type = TREE_TYPE (element_type);
13721 }
13722
13723 #ifndef MIPS_DEBUGGING_INFO
13724 gen_type_die (element_type, context_die);
13725 #endif
13726
13727 add_type_attribute (array_die, element_type, 0, 0, context_die);
13728
13729 if (get_AT (array_die, DW_AT_name))
13730 add_pubtype (type, array_die);
13731 }
13732
13733 static dw_loc_descr_ref
13734 descr_info_loc (tree val, tree base_decl)
13735 {
13736 HOST_WIDE_INT size;
13737 dw_loc_descr_ref loc, loc2;
13738 enum dwarf_location_atom op;
13739
13740 if (val == base_decl)
13741 return new_loc_descr (DW_OP_push_object_address, 0, 0);
13742
13743 switch (TREE_CODE (val))
13744 {
13745 CASE_CONVERT:
13746 return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
13747 case VAR_DECL:
13748 return loc_descriptor_from_tree_1 (val, 0);
13749 case INTEGER_CST:
13750 if (host_integerp (val, 0))
13751 return int_loc_descriptor (tree_low_cst (val, 0));
13752 break;
13753 case INDIRECT_REF:
13754 size = int_size_in_bytes (TREE_TYPE (val));
13755 if (size < 0)
13756 break;
13757 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
13758 if (!loc)
13759 break;
13760 if (size == DWARF2_ADDR_SIZE)
13761 add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
13762 else
13763 add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
13764 return loc;
13765 case POINTER_PLUS_EXPR:
13766 case PLUS_EXPR:
13767 if (host_integerp (TREE_OPERAND (val, 1), 1)
13768 && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
13769 < 16384)
13770 {
13771 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
13772 if (!loc)
13773 break;
13774 loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
13775 }
13776 else
13777 {
13778 op = DW_OP_plus;
13779 do_binop:
13780 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
13781 if (!loc)
13782 break;
13783 loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
13784 if (!loc2)
13785 break;
13786 add_loc_descr (&loc, loc2);
13787 add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
13788 }
13789 return loc;
13790 case MINUS_EXPR:
13791 op = DW_OP_minus;
13792 goto do_binop;
13793 case MULT_EXPR:
13794 op = DW_OP_mul;
13795 goto do_binop;
13796 case EQ_EXPR:
13797 op = DW_OP_eq;
13798 goto do_binop;
13799 case NE_EXPR:
13800 op = DW_OP_ne;
13801 goto do_binop;
13802 default:
13803 break;
13804 }
13805 return NULL;
13806 }
13807
13808 static void
13809 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
13810 tree val, tree base_decl)
13811 {
13812 dw_loc_descr_ref loc;
13813
13814 if (host_integerp (val, 0))
13815 {
13816 add_AT_unsigned (die, attr, tree_low_cst (val, 0));
13817 return;
13818 }
13819
13820 loc = descr_info_loc (val, base_decl);
13821 if (!loc)
13822 return;
13823
13824 add_AT_loc (die, attr, loc);
13825 }
13826
13827 /* This routine generates DIE for array with hidden descriptor, details
13828 are filled into *info by a langhook. */
13829
13830 static void
13831 gen_descr_array_type_die (tree type, struct array_descr_info *info,
13832 dw_die_ref context_die)
13833 {
13834 dw_die_ref scope_die = scope_die_for (type, context_die);
13835 dw_die_ref array_die;
13836 int dim;
13837
13838 array_die = new_die (DW_TAG_array_type, scope_die, type);
13839 add_name_attribute (array_die, type_tag (type));
13840 equate_type_number_to_die (type, array_die);
13841
13842 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */
13843 if (is_fortran ()
13844 && info->ndimensions >= 2)
13845 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
13846
13847 if (info->data_location)
13848 add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
13849 info->base_decl);
13850 if (info->associated)
13851 add_descr_info_field (array_die, DW_AT_associated, info->associated,
13852 info->base_decl);
13853 if (info->allocated)
13854 add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
13855 info->base_decl);
13856
13857 for (dim = 0; dim < info->ndimensions; dim++)
13858 {
13859 dw_die_ref subrange_die
13860 = new_die (DW_TAG_subrange_type, array_die, NULL);
13861
13862 if (info->dimen[dim].lower_bound)
13863 {
13864 /* If it is the default value, omit it. */
13865 if ((is_c_family () || is_java ())
13866 && integer_zerop (info->dimen[dim].lower_bound))
13867 ;
13868 else if (is_fortran ()
13869 && integer_onep (info->dimen[dim].lower_bound))
13870 ;
13871 else
13872 add_descr_info_field (subrange_die, DW_AT_lower_bound,
13873 info->dimen[dim].lower_bound,
13874 info->base_decl);
13875 }
13876 if (info->dimen[dim].upper_bound)
13877 add_descr_info_field (subrange_die, DW_AT_upper_bound,
13878 info->dimen[dim].upper_bound,
13879 info->base_decl);
13880 if (info->dimen[dim].stride)
13881 add_descr_info_field (subrange_die, DW_AT_byte_stride,
13882 info->dimen[dim].stride,
13883 info->base_decl);
13884 }
13885
13886 gen_type_die (info->element_type, context_die);
13887 add_type_attribute (array_die, info->element_type, 0, 0, context_die);
13888
13889 if (get_AT (array_die, DW_AT_name))
13890 add_pubtype (type, array_die);
13891 }
13892
13893 #if 0
13894 static void
13895 gen_entry_point_die (tree decl, dw_die_ref context_die)
13896 {
13897 tree origin = decl_ultimate_origin (decl);
13898 dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
13899
13900 if (origin != NULL)
13901 add_abstract_origin_attribute (decl_die, origin);
13902 else
13903 {
13904 add_name_and_src_coords_attributes (decl_die, decl);
13905 add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
13906 0, 0, context_die);
13907 }
13908
13909 if (DECL_ABSTRACT (decl))
13910 equate_decl_number_to_die (decl, decl_die);
13911 else
13912 add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
13913 }
13914 #endif
13915
13916 /* Walk through the list of incomplete types again, trying once more to
13917 emit full debugging info for them. */
13918
13919 static void
13920 retry_incomplete_types (void)
13921 {
13922 int i;
13923
13924 for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
13925 gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
13926 }
13927
13928 /* Determine what tag to use for a record type. */
13929
13930 static enum dwarf_tag
13931 record_type_tag (tree type)
13932 {
13933 if (! lang_hooks.types.classify_record)
13934 return DW_TAG_structure_type;
13935
13936 switch (lang_hooks.types.classify_record (type))
13937 {
13938 case RECORD_IS_STRUCT:
13939 return DW_TAG_structure_type;
13940
13941 case RECORD_IS_CLASS:
13942 return DW_TAG_class_type;
13943
13944 case RECORD_IS_INTERFACE:
13945 return DW_TAG_interface_type;
13946
13947 default:
13948 gcc_unreachable ();
13949 }
13950 }
13951
13952 /* Generate a DIE to represent an enumeration type. Note that these DIEs
13953 include all of the information about the enumeration values also. Each
13954 enumerated type name/value is listed as a child of the enumerated type
13955 DIE. */
13956
13957 static dw_die_ref
13958 gen_enumeration_type_die (tree type, dw_die_ref context_die)
13959 {
13960 dw_die_ref type_die = lookup_type_die (type);
13961
13962 if (type_die == NULL)
13963 {
13964 type_die = new_die (DW_TAG_enumeration_type,
13965 scope_die_for (type, context_die), type);
13966 equate_type_number_to_die (type, type_die);
13967 add_name_attribute (type_die, type_tag (type));
13968 }
13969 else if (! TYPE_SIZE (type))
13970 return type_die;
13971 else
13972 remove_AT (type_die, DW_AT_declaration);
13973
13974 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
13975 given enum type is incomplete, do not generate the DW_AT_byte_size
13976 attribute or the DW_AT_element_list attribute. */
13977 if (TYPE_SIZE (type))
13978 {
13979 tree link;
13980
13981 TREE_ASM_WRITTEN (type) = 1;
13982 add_byte_size_attribute (type_die, type);
13983 if (TYPE_STUB_DECL (type) != NULL_TREE)
13984 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
13985
13986 /* If the first reference to this type was as the return type of an
13987 inline function, then it may not have a parent. Fix this now. */
13988 if (type_die->die_parent == NULL)
13989 add_child_die (scope_die_for (type, context_die), type_die);
13990
13991 for (link = TYPE_VALUES (type);
13992 link != NULL; link = TREE_CHAIN (link))
13993 {
13994 dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
13995 tree value = TREE_VALUE (link);
13996
13997 add_name_attribute (enum_die,
13998 IDENTIFIER_POINTER (TREE_PURPOSE (link)));
13999
14000 if (TREE_CODE (value) == CONST_DECL)
14001 value = DECL_INITIAL (value);
14002
14003 if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
14004 /* DWARF2 does not provide a way of indicating whether or
14005 not enumeration constants are signed or unsigned. GDB
14006 always assumes the values are signed, so we output all
14007 values as if they were signed. That means that
14008 enumeration constants with very large unsigned values
14009 will appear to have negative values in the debugger. */
14010 add_AT_int (enum_die, DW_AT_const_value,
14011 tree_low_cst (value, tree_int_cst_sgn (value) > 0));
14012 }
14013 }
14014 else
14015 add_AT_flag (type_die, DW_AT_declaration, 1);
14016
14017 if (get_AT (type_die, DW_AT_name))
14018 add_pubtype (type, type_die);
14019
14020 return type_die;
14021 }
14022
14023 /* Generate a DIE to represent either a real live formal parameter decl or to
14024 represent just the type of some formal parameter position in some function
14025 type.
14026
14027 Note that this routine is a bit unusual because its argument may be a
14028 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
14029 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
14030 node. If it's the former then this function is being called to output a
14031 DIE to represent a formal parameter object (or some inlining thereof). If
14032 it's the latter, then this function is only being called to output a
14033 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
14034 argument type of some subprogram type. */
14035
14036 static dw_die_ref
14037 gen_formal_parameter_die (tree node, tree origin, dw_die_ref context_die)
14038 {
14039 tree node_or_origin = node ? node : origin;
14040 dw_die_ref parm_die
14041 = new_die (DW_TAG_formal_parameter, context_die, node);
14042
14043 switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
14044 {
14045 case tcc_declaration:
14046 if (!origin)
14047 origin = decl_ultimate_origin (node);
14048 if (origin != NULL)
14049 add_abstract_origin_attribute (parm_die, origin);
14050 else
14051 {
14052 tree type = TREE_TYPE (node);
14053 add_name_and_src_coords_attributes (parm_die, node);
14054 if (DECL_BY_REFERENCE (node))
14055 add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
14056 context_die);
14057 else
14058 add_type_attribute (parm_die, type,
14059 TREE_READONLY (node),
14060 TREE_THIS_VOLATILE (node),
14061 context_die);
14062 if (DECL_ARTIFICIAL (node))
14063 add_AT_flag (parm_die, DW_AT_artificial, 1);
14064 }
14065
14066 if (node && node != origin)
14067 equate_decl_number_to_die (node, parm_die);
14068 if (! DECL_ABSTRACT (node_or_origin))
14069 add_location_or_const_value_attribute (parm_die, node_or_origin,
14070 DW_AT_location);
14071
14072 break;
14073
14074 case tcc_type:
14075 /* We were called with some kind of a ..._TYPE node. */
14076 add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
14077 break;
14078
14079 default:
14080 gcc_unreachable ();
14081 }
14082
14083 return parm_die;
14084 }
14085
14086 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
14087 at the end of an (ANSI prototyped) formal parameters list. */
14088
14089 static void
14090 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
14091 {
14092 new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
14093 }
14094
14095 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
14096 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
14097 parameters as specified in some function type specification (except for
14098 those which appear as part of a function *definition*). */
14099
14100 static void
14101 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
14102 {
14103 tree link;
14104 tree formal_type = NULL;
14105 tree first_parm_type;
14106 tree arg;
14107
14108 if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
14109 {
14110 arg = DECL_ARGUMENTS (function_or_method_type);
14111 function_or_method_type = TREE_TYPE (function_or_method_type);
14112 }
14113 else
14114 arg = NULL_TREE;
14115
14116 first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
14117
14118 /* Make our first pass over the list of formal parameter types and output a
14119 DW_TAG_formal_parameter DIE for each one. */
14120 for (link = first_parm_type; link; )
14121 {
14122 dw_die_ref parm_die;
14123
14124 formal_type = TREE_VALUE (link);
14125 if (formal_type == void_type_node)
14126 break;
14127
14128 /* Output a (nameless) DIE to represent the formal parameter itself. */
14129 parm_die = gen_formal_parameter_die (formal_type, NULL, context_die);
14130 if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
14131 && link == first_parm_type)
14132 || (arg && DECL_ARTIFICIAL (arg)))
14133 add_AT_flag (parm_die, DW_AT_artificial, 1);
14134
14135 link = TREE_CHAIN (link);
14136 if (arg)
14137 arg = TREE_CHAIN (arg);
14138 }
14139
14140 /* If this function type has an ellipsis, add a
14141 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
14142 if (formal_type != void_type_node)
14143 gen_unspecified_parameters_die (function_or_method_type, context_die);
14144
14145 /* Make our second (and final) pass over the list of formal parameter types
14146 and output DIEs to represent those types (as necessary). */
14147 for (link = TYPE_ARG_TYPES (function_or_method_type);
14148 link && TREE_VALUE (link);
14149 link = TREE_CHAIN (link))
14150 gen_type_die (TREE_VALUE (link), context_die);
14151 }
14152
14153 /* We want to generate the DIE for TYPE so that we can generate the
14154 die for MEMBER, which has been defined; we will need to refer back
14155 to the member declaration nested within TYPE. If we're trying to
14156 generate minimal debug info for TYPE, processing TYPE won't do the
14157 trick; we need to attach the member declaration by hand. */
14158
14159 static void
14160 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
14161 {
14162 gen_type_die (type, context_die);
14163
14164 /* If we're trying to avoid duplicate debug info, we may not have
14165 emitted the member decl for this function. Emit it now. */
14166 if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
14167 && ! lookup_decl_die (member))
14168 {
14169 dw_die_ref type_die;
14170 gcc_assert (!decl_ultimate_origin (member));
14171
14172 push_decl_scope (type);
14173 type_die = lookup_type_die (type);
14174 if (TREE_CODE (member) == FUNCTION_DECL)
14175 gen_subprogram_die (member, type_die);
14176 else if (TREE_CODE (member) == FIELD_DECL)
14177 {
14178 /* Ignore the nameless fields that are used to skip bits but handle
14179 C++ anonymous unions and structs. */
14180 if (DECL_NAME (member) != NULL_TREE
14181 || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
14182 || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
14183 {
14184 gen_type_die (member_declared_type (member), type_die);
14185 gen_field_die (member, type_die);
14186 }
14187 }
14188 else
14189 gen_variable_die (member, NULL_TREE, type_die);
14190
14191 pop_decl_scope ();
14192 }
14193 }
14194
14195 /* Generate the DWARF2 info for the "abstract" instance of a function which we
14196 may later generate inlined and/or out-of-line instances of. */
14197
14198 static void
14199 dwarf2out_abstract_function (tree decl)
14200 {
14201 dw_die_ref old_die;
14202 tree save_fn;
14203 tree context;
14204 int was_abstract = DECL_ABSTRACT (decl);
14205
14206 /* Make sure we have the actual abstract inline, not a clone. */
14207 decl = DECL_ORIGIN (decl);
14208 htab_empty (decl_loc_table);
14209
14210 old_die = lookup_decl_die (decl);
14211 if (old_die && get_AT (old_die, DW_AT_inline))
14212 /* We've already generated the abstract instance. */
14213 return;
14214
14215 /* Be sure we've emitted the in-class declaration DIE (if any) first, so
14216 we don't get confused by DECL_ABSTRACT. */
14217 if (debug_info_level > DINFO_LEVEL_TERSE)
14218 {
14219 context = decl_class_context (decl);
14220 if (context)
14221 gen_type_die_for_member
14222 (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
14223 }
14224
14225 /* Pretend we've just finished compiling this function. */
14226 save_fn = current_function_decl;
14227 current_function_decl = decl;
14228 push_cfun (DECL_STRUCT_FUNCTION (decl));
14229
14230 set_decl_abstract_flags (decl, 1);
14231 dwarf2out_decl (decl);
14232 if (! was_abstract)
14233 set_decl_abstract_flags (decl, 0);
14234
14235 current_function_decl = save_fn;
14236 pop_cfun ();
14237 }
14238
14239 /* Helper function of premark_used_types() which gets called through
14240 htab_traverse_resize().
14241
14242 Marks the DIE of a given type in *SLOT as perennial, so it never gets
14243 marked as unused by prune_unused_types. */
14244 static int
14245 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
14246 {
14247 tree type;
14248 dw_die_ref die;
14249
14250 type = (tree) *slot;
14251 die = lookup_type_die (type);
14252 if (die != NULL)
14253 die->die_perennial_p = 1;
14254 return 1;
14255 }
14256
14257 /* Mark all members of used_types_hash as perennial. */
14258 static void
14259 premark_used_types (void)
14260 {
14261 if (cfun && cfun->used_types_hash)
14262 htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
14263 }
14264
14265 /* Generate a DIE to represent a declared function (either file-scope or
14266 block-local). */
14267
14268 static void
14269 gen_subprogram_die (tree decl, dw_die_ref context_die)
14270 {
14271 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14272 tree origin = decl_ultimate_origin (decl);
14273 dw_die_ref subr_die;
14274 tree fn_arg_types;
14275 tree outer_scope;
14276 dw_die_ref old_die = lookup_decl_die (decl);
14277 int declaration = (current_function_decl != decl
14278 || class_or_namespace_scope_p (context_die));
14279
14280 premark_used_types ();
14281
14282 /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
14283 started to generate the abstract instance of an inline, decided to output
14284 its containing class, and proceeded to emit the declaration of the inline
14285 from the member list for the class. If so, DECLARATION takes priority;
14286 we'll get back to the abstract instance when done with the class. */
14287
14288 /* The class-scope declaration DIE must be the primary DIE. */
14289 if (origin && declaration && class_or_namespace_scope_p (context_die))
14290 {
14291 origin = NULL;
14292 gcc_assert (!old_die);
14293 }
14294
14295 /* Now that the C++ front end lazily declares artificial member fns, we
14296 might need to retrofit the declaration into its class. */
14297 if (!declaration && !origin && !old_die
14298 && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
14299 && !class_or_namespace_scope_p (context_die)
14300 && debug_info_level > DINFO_LEVEL_TERSE)
14301 old_die = force_decl_die (decl);
14302
14303 if (origin != NULL)
14304 {
14305 gcc_assert (!declaration || local_scope_p (context_die));
14306
14307 /* Fixup die_parent for the abstract instance of a nested
14308 inline function. */
14309 if (old_die && old_die->die_parent == NULL)
14310 add_child_die (context_die, old_die);
14311
14312 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
14313 add_abstract_origin_attribute (subr_die, origin);
14314 }
14315 else if (old_die)
14316 {
14317 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
14318 struct dwarf_file_data * file_index = lookup_filename (s.file);
14319
14320 if (!get_AT_flag (old_die, DW_AT_declaration)
14321 /* We can have a normal definition following an inline one in the
14322 case of redefinition of GNU C extern inlines.
14323 It seems reasonable to use AT_specification in this case. */
14324 && !get_AT (old_die, DW_AT_inline))
14325 {
14326 /* Detect and ignore this case, where we are trying to output
14327 something we have already output. */
14328 return;
14329 }
14330
14331 /* If the definition comes from the same place as the declaration,
14332 maybe use the old DIE. We always want the DIE for this function
14333 that has the *_pc attributes to be under comp_unit_die so the
14334 debugger can find it. We also need to do this for abstract
14335 instances of inlines, since the spec requires the out-of-line copy
14336 to have the same parent. For local class methods, this doesn't
14337 apply; we just use the old DIE. */
14338 if ((old_die->die_parent == comp_unit_die || context_die == NULL)
14339 && (DECL_ARTIFICIAL (decl)
14340 || (get_AT_file (old_die, DW_AT_decl_file) == file_index
14341 && (get_AT_unsigned (old_die, DW_AT_decl_line)
14342 == (unsigned) s.line))))
14343 {
14344 subr_die = old_die;
14345
14346 /* Clear out the declaration attribute and the formal parameters.
14347 Do not remove all children, because it is possible that this
14348 declaration die was forced using force_decl_die(). In such
14349 cases die that forced declaration die (e.g. TAG_imported_module)
14350 is one of the children that we do not want to remove. */
14351 remove_AT (subr_die, DW_AT_declaration);
14352 remove_child_TAG (subr_die, DW_TAG_formal_parameter);
14353 }
14354 else
14355 {
14356 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
14357 add_AT_specification (subr_die, old_die);
14358 if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
14359 add_AT_file (subr_die, DW_AT_decl_file, file_index);
14360 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
14361 add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
14362 }
14363 }
14364 else
14365 {
14366 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
14367
14368 if (TREE_PUBLIC (decl))
14369 add_AT_flag (subr_die, DW_AT_external, 1);
14370
14371 add_name_and_src_coords_attributes (subr_die, decl);
14372 if (debug_info_level > DINFO_LEVEL_TERSE)
14373 {
14374 add_prototyped_attribute (subr_die, TREE_TYPE (decl));
14375 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
14376 0, 0, context_die);
14377 }
14378
14379 add_pure_or_virtual_attribute (subr_die, decl);
14380 if (DECL_ARTIFICIAL (decl))
14381 add_AT_flag (subr_die, DW_AT_artificial, 1);
14382
14383 if (TREE_PROTECTED (decl))
14384 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
14385 else if (TREE_PRIVATE (decl))
14386 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
14387 }
14388
14389 if (declaration)
14390 {
14391 if (!old_die || !get_AT (old_die, DW_AT_inline))
14392 {
14393 add_AT_flag (subr_die, DW_AT_declaration, 1);
14394
14395 /* If this is an explicit function declaration then generate
14396 a DW_AT_explicit attribute. */
14397 if (lang_hooks.decls.function_decl_explicit_p (decl))
14398 add_AT_flag (subr_die, DW_AT_explicit, 1);
14399
14400 /* The first time we see a member function, it is in the context of
14401 the class to which it belongs. We make sure of this by emitting
14402 the class first. The next time is the definition, which is
14403 handled above. The two may come from the same source text.
14404
14405 Note that force_decl_die() forces function declaration die. It is
14406 later reused to represent definition. */
14407 equate_decl_number_to_die (decl, subr_die);
14408 }
14409 }
14410 else if (DECL_ABSTRACT (decl))
14411 {
14412 if (DECL_DECLARED_INLINE_P (decl))
14413 {
14414 if (cgraph_function_possibly_inlined_p (decl))
14415 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
14416 else
14417 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
14418 }
14419 else
14420 {
14421 if (cgraph_function_possibly_inlined_p (decl))
14422 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
14423 else
14424 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
14425 }
14426
14427 if (DECL_DECLARED_INLINE_P (decl)
14428 && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
14429 add_AT_flag (subr_die, DW_AT_artificial, 1);
14430
14431 equate_decl_number_to_die (decl, subr_die);
14432 }
14433 else if (!DECL_EXTERNAL (decl))
14434 {
14435 HOST_WIDE_INT cfa_fb_offset;
14436
14437 if (!old_die || !get_AT (old_die, DW_AT_inline))
14438 equate_decl_number_to_die (decl, subr_die);
14439
14440 if (!flag_reorder_blocks_and_partition)
14441 {
14442 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
14443 current_function_funcdef_no);
14444 add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
14445 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14446 current_function_funcdef_no);
14447 add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
14448
14449 add_pubname (decl, subr_die);
14450 add_arange (decl, subr_die);
14451 }
14452 else
14453 { /* Do nothing for now; maybe need to duplicate die, one for
14454 hot section and one for cold section, then use the hot/cold
14455 section begin/end labels to generate the aranges... */
14456 /*
14457 add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
14458 add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
14459 add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
14460 add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
14461
14462 add_pubname (decl, subr_die);
14463 add_arange (decl, subr_die);
14464 add_arange (decl, subr_die);
14465 */
14466 }
14467
14468 #ifdef MIPS_DEBUGGING_INFO
14469 /* Add a reference to the FDE for this routine. */
14470 add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
14471 #endif
14472
14473 cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
14474
14475 /* We define the "frame base" as the function's CFA. This is more
14476 convenient for several reasons: (1) It's stable across the prologue
14477 and epilogue, which makes it better than just a frame pointer,
14478 (2) With dwarf3, there exists a one-byte encoding that allows us
14479 to reference the .debug_frame data by proxy, but failing that,
14480 (3) We can at least reuse the code inspection and interpretation
14481 code that determines the CFA position at various points in the
14482 function. */
14483 if (dwarf_version >= 3)
14484 {
14485 dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
14486 add_AT_loc (subr_die, DW_AT_frame_base, op);
14487 }
14488 else
14489 {
14490 dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
14491 if (list->dw_loc_next)
14492 add_AT_loc_list (subr_die, DW_AT_frame_base, list);
14493 else
14494 add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
14495 }
14496
14497 /* Compute a displacement from the "steady-state frame pointer" to
14498 the CFA. The former is what all stack slots and argument slots
14499 will reference in the rtl; the later is what we've told the
14500 debugger about. We'll need to adjust all frame_base references
14501 by this displacement. */
14502 compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
14503
14504 if (cfun->static_chain_decl)
14505 add_AT_location_description (subr_die, DW_AT_static_link,
14506 loc_descriptor_from_tree (cfun->static_chain_decl));
14507 }
14508
14509 /* Now output descriptions of the arguments for this function. This gets
14510 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
14511 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
14512 `...' at the end of the formal parameter list. In order to find out if
14513 there was a trailing ellipsis or not, we must instead look at the type
14514 associated with the FUNCTION_DECL. This will be a node of type
14515 FUNCTION_TYPE. If the chain of type nodes hanging off of this
14516 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
14517 an ellipsis at the end. */
14518
14519 /* In the case where we are describing a mere function declaration, all we
14520 need to do here (and all we *can* do here) is to describe the *types* of
14521 its formal parameters. */
14522 if (debug_info_level <= DINFO_LEVEL_TERSE)
14523 ;
14524 else if (declaration)
14525 gen_formal_types_die (decl, subr_die);
14526 else
14527 {
14528 /* Generate DIEs to represent all known formal parameters. */
14529 tree arg_decls = DECL_ARGUMENTS (decl);
14530 tree parm;
14531
14532 /* When generating DIEs, generate the unspecified_parameters DIE
14533 instead if we come across the arg "__builtin_va_alist" */
14534 for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
14535 if (TREE_CODE (parm) == PARM_DECL)
14536 {
14537 if (DECL_NAME (parm)
14538 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
14539 "__builtin_va_alist"))
14540 gen_unspecified_parameters_die (parm, subr_die);
14541 else
14542 gen_decl_die (parm, NULL, subr_die);
14543 }
14544
14545 /* Decide whether we need an unspecified_parameters DIE at the end.
14546 There are 2 more cases to do this for: 1) the ansi ... declaration -
14547 this is detectable when the end of the arg list is not a
14548 void_type_node 2) an unprototyped function declaration (not a
14549 definition). This just means that we have no info about the
14550 parameters at all. */
14551 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
14552 if (fn_arg_types != NULL)
14553 {
14554 /* This is the prototyped case, check for.... */
14555 if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
14556 gen_unspecified_parameters_die (decl, subr_die);
14557 }
14558 else if (DECL_INITIAL (decl) == NULL_TREE)
14559 gen_unspecified_parameters_die (decl, subr_die);
14560 }
14561
14562 /* Output Dwarf info for all of the stuff within the body of the function
14563 (if it has one - it may be just a declaration). */
14564 outer_scope = DECL_INITIAL (decl);
14565
14566 /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
14567 a function. This BLOCK actually represents the outermost binding contour
14568 for the function, i.e. the contour in which the function's formal
14569 parameters and labels get declared. Curiously, it appears that the front
14570 end doesn't actually put the PARM_DECL nodes for the current function onto
14571 the BLOCK_VARS list for this outer scope, but are strung off of the
14572 DECL_ARGUMENTS list for the function instead.
14573
14574 The BLOCK_VARS list for the `outer_scope' does provide us with a list of
14575 the LABEL_DECL nodes for the function however, and we output DWARF info
14576 for those in decls_for_scope. Just within the `outer_scope' there will be
14577 a BLOCK node representing the function's outermost pair of curly braces,
14578 and any blocks used for the base and member initializers of a C++
14579 constructor function. */
14580 if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
14581 {
14582 /* Emit a DW_TAG_variable DIE for a named return value. */
14583 if (DECL_NAME (DECL_RESULT (decl)))
14584 gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
14585
14586 current_function_has_inlines = 0;
14587 decls_for_scope (outer_scope, subr_die, 0);
14588
14589 #if 0 && defined (MIPS_DEBUGGING_INFO)
14590 if (current_function_has_inlines)
14591 {
14592 add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
14593 if (! comp_unit_has_inlines)
14594 {
14595 add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
14596 comp_unit_has_inlines = 1;
14597 }
14598 }
14599 #endif
14600 }
14601 /* Add the calling convention attribute if requested. */
14602 add_calling_convention_attribute (subr_die, decl);
14603
14604 }
14605
14606 /* Returns a hash value for X (which really is a die_struct). */
14607
14608 static hashval_t
14609 common_block_die_table_hash (const void *x)
14610 {
14611 const_dw_die_ref d = (const_dw_die_ref) x;
14612 return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
14613 }
14614
14615 /* Return nonzero if decl_id and die_parent of die_struct X is the same
14616 as decl_id and die_parent of die_struct Y. */
14617
14618 static int
14619 common_block_die_table_eq (const void *x, const void *y)
14620 {
14621 const_dw_die_ref d = (const_dw_die_ref) x;
14622 const_dw_die_ref e = (const_dw_die_ref) y;
14623 return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
14624 }
14625
14626 /* Generate a DIE to represent a declared data object.
14627 Either DECL or ORIGIN must be non-null. */
14628
14629 static void
14630 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
14631 {
14632 HOST_WIDE_INT off;
14633 tree com_decl;
14634 tree decl_or_origin = decl ? decl : origin;
14635 dw_die_ref var_die;
14636 dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
14637 dw_die_ref origin_die;
14638 int declaration = (DECL_EXTERNAL (decl_or_origin)
14639 /* If DECL is COMDAT and has not actually been
14640 emitted, we cannot take its address; there
14641 might end up being no definition anywhere in
14642 the program. For example, consider the C++
14643 test case:
14644
14645 template <class T>
14646 struct S { static const int i = 7; };
14647
14648 template <class T>
14649 const int S<T>::i;
14650
14651 int f() { return S<int>::i; }
14652
14653 Here, S<int>::i is not DECL_EXTERNAL, but no
14654 definition is required, so the compiler will
14655 not emit a definition. */
14656 || (TREE_CODE (decl_or_origin) == VAR_DECL
14657 && DECL_COMDAT (decl_or_origin)
14658 && !TREE_ASM_WRITTEN (decl_or_origin))
14659 || class_or_namespace_scope_p (context_die));
14660
14661 if (!origin)
14662 origin = decl_ultimate_origin (decl);
14663
14664 com_decl = fortran_common (decl_or_origin, &off);
14665
14666 /* Symbol in common gets emitted as a child of the common block, in the form
14667 of a data member. */
14668 if (com_decl)
14669 {
14670 tree field;
14671 dw_die_ref com_die;
14672 dw_loc_descr_ref loc;
14673 die_node com_die_arg;
14674
14675 var_die = lookup_decl_die (decl_or_origin);
14676 if (var_die)
14677 {
14678 if (get_AT (var_die, DW_AT_location) == NULL)
14679 {
14680 loc = loc_descriptor_from_tree (com_decl);
14681 if (loc)
14682 {
14683 if (off)
14684 {
14685 /* Optimize the common case. */
14686 if (loc->dw_loc_opc == DW_OP_addr
14687 && loc->dw_loc_next == NULL
14688 && GET_CODE (loc->dw_loc_oprnd1.v.val_addr)
14689 == SYMBOL_REF)
14690 loc->dw_loc_oprnd1.v.val_addr
14691 = plus_constant (loc->dw_loc_oprnd1.v.val_addr, off);
14692 else
14693 loc_descr_plus_const (&loc, off);
14694 }
14695 add_AT_loc (var_die, DW_AT_location, loc);
14696 remove_AT (var_die, DW_AT_declaration);
14697 }
14698 }
14699 return;
14700 }
14701
14702 if (common_block_die_table == NULL)
14703 common_block_die_table
14704 = htab_create_ggc (10, common_block_die_table_hash,
14705 common_block_die_table_eq, NULL);
14706
14707 field = TREE_OPERAND (DECL_VALUE_EXPR (decl), 0);
14708 com_die_arg.decl_id = DECL_UID (com_decl);
14709 com_die_arg.die_parent = context_die;
14710 com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
14711 loc = loc_descriptor_from_tree (com_decl);
14712 if (com_die == NULL)
14713 {
14714 const char *cnam
14715 = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
14716 void **slot;
14717
14718 com_die = new_die (DW_TAG_common_block, context_die, decl);
14719 add_name_and_src_coords_attributes (com_die, com_decl);
14720 if (loc)
14721 {
14722 add_AT_loc (com_die, DW_AT_location, loc);
14723 /* Avoid sharing the same loc descriptor between
14724 DW_TAG_common_block and DW_TAG_variable. */
14725 loc = loc_descriptor_from_tree (com_decl);
14726 }
14727 else if (DECL_EXTERNAL (decl))
14728 add_AT_flag (com_die, DW_AT_declaration, 1);
14729 add_pubname_string (cnam, com_die); /* ??? needed? */
14730 com_die->decl_id = DECL_UID (com_decl);
14731 slot = htab_find_slot (common_block_die_table, com_die, INSERT);
14732 *slot = (void *) com_die;
14733 }
14734 else if (get_AT (com_die, DW_AT_location) == NULL && loc)
14735 {
14736 add_AT_loc (com_die, DW_AT_location, loc);
14737 loc = loc_descriptor_from_tree (com_decl);
14738 remove_AT (com_die, DW_AT_declaration);
14739 }
14740 var_die = new_die (DW_TAG_variable, com_die, decl);
14741 add_name_and_src_coords_attributes (var_die, decl);
14742 add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
14743 TREE_THIS_VOLATILE (decl), context_die);
14744 add_AT_flag (var_die, DW_AT_external, 1);
14745 if (loc)
14746 {
14747 if (off)
14748 {
14749 /* Optimize the common case. */
14750 if (loc->dw_loc_opc == DW_OP_addr
14751 && loc->dw_loc_next == NULL
14752 && GET_CODE (loc->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
14753 loc->dw_loc_oprnd1.v.val_addr
14754 = plus_constant (loc->dw_loc_oprnd1.v.val_addr, off);
14755 else
14756 loc_descr_plus_const (&loc, off);
14757 }
14758 add_AT_loc (var_die, DW_AT_location, loc);
14759 }
14760 else if (DECL_EXTERNAL (decl))
14761 add_AT_flag (var_die, DW_AT_declaration, 1);
14762 equate_decl_number_to_die (decl, var_die);
14763 return;
14764 }
14765
14766 /* If the compiler emitted a definition for the DECL declaration
14767 and if we already emitted a DIE for it, don't emit a second
14768 DIE for it again. */
14769 if (old_die
14770 && declaration
14771 && old_die->die_parent == context_die)
14772 return;
14773
14774 /* For static data members, the declaration in the class is supposed
14775 to have DW_TAG_member tag; the specification should still be
14776 DW_TAG_variable referencing the DW_TAG_member DIE. */
14777 if (declaration && class_scope_p (context_die))
14778 var_die = new_die (DW_TAG_member, context_die, decl);
14779 else
14780 var_die = new_die (DW_TAG_variable, context_die, decl);
14781
14782 origin_die = NULL;
14783 if (origin != NULL)
14784 origin_die = add_abstract_origin_attribute (var_die, origin);
14785
14786 /* Loop unrolling can create multiple blocks that refer to the same
14787 static variable, so we must test for the DW_AT_declaration flag.
14788
14789 ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
14790 copy decls and set the DECL_ABSTRACT flag on them instead of
14791 sharing them.
14792
14793 ??? Duplicated blocks have been rewritten to use .debug_ranges.
14794
14795 ??? The declare_in_namespace support causes us to get two DIEs for one
14796 variable, both of which are declarations. We want to avoid considering
14797 one to be a specification, so we must test that this DIE is not a
14798 declaration. */
14799 else if (old_die && TREE_STATIC (decl) && ! declaration
14800 && get_AT_flag (old_die, DW_AT_declaration) == 1)
14801 {
14802 /* This is a definition of a C++ class level static. */
14803 add_AT_specification (var_die, old_die);
14804 if (DECL_NAME (decl))
14805 {
14806 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
14807 struct dwarf_file_data * file_index = lookup_filename (s.file);
14808
14809 if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
14810 add_AT_file (var_die, DW_AT_decl_file, file_index);
14811
14812 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
14813 add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
14814 }
14815 }
14816 else
14817 {
14818 tree type = TREE_TYPE (decl);
14819
14820 add_name_and_src_coords_attributes (var_die, decl);
14821 if ((TREE_CODE (decl) == PARM_DECL
14822 || TREE_CODE (decl) == RESULT_DECL
14823 || TREE_CODE (decl) == VAR_DECL)
14824 && DECL_BY_REFERENCE (decl))
14825 add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
14826 else
14827 add_type_attribute (var_die, type, TREE_READONLY (decl),
14828 TREE_THIS_VOLATILE (decl), context_die);
14829
14830 if (TREE_PUBLIC (decl))
14831 add_AT_flag (var_die, DW_AT_external, 1);
14832
14833 if (DECL_ARTIFICIAL (decl))
14834 add_AT_flag (var_die, DW_AT_artificial, 1);
14835
14836 if (TREE_PROTECTED (decl))
14837 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
14838 else if (TREE_PRIVATE (decl))
14839 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
14840 }
14841
14842 if (declaration)
14843 add_AT_flag (var_die, DW_AT_declaration, 1);
14844
14845 if (decl && (DECL_ABSTRACT (decl) || declaration))
14846 equate_decl_number_to_die (decl, var_die);
14847
14848 if (! declaration
14849 && (! DECL_ABSTRACT (decl_or_origin)
14850 /* Local static vars are shared between all clones/inlines,
14851 so emit DW_AT_location on the abstract DIE if DECL_RTL is
14852 already set. */
14853 || (TREE_CODE (decl_or_origin) == VAR_DECL
14854 && TREE_STATIC (decl_or_origin)
14855 && DECL_RTL_SET_P (decl_or_origin)))
14856 /* When abstract origin already has DW_AT_location attribute, no need
14857 to add it again. */
14858 && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
14859 {
14860 if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
14861 && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
14862 defer_location (decl_or_origin, var_die);
14863 else
14864 add_location_or_const_value_attribute (var_die,
14865 decl_or_origin,
14866 DW_AT_location);
14867 add_pubname (decl_or_origin, var_die);
14868 }
14869 else
14870 tree_add_const_value_attribute (var_die, decl_or_origin);
14871 }
14872
14873 /* Generate a DIE to represent a named constant. */
14874
14875 static void
14876 gen_const_die (tree decl, dw_die_ref context_die)
14877 {
14878 dw_die_ref const_die;
14879 tree type = TREE_TYPE (decl);
14880
14881 const_die = new_die (DW_TAG_constant, context_die, decl);
14882 add_name_and_src_coords_attributes (const_die, decl);
14883 add_type_attribute (const_die, type, 1, 0, context_die);
14884 if (TREE_PUBLIC (decl))
14885 add_AT_flag (const_die, DW_AT_external, 1);
14886 if (DECL_ARTIFICIAL (decl))
14887 add_AT_flag (const_die, DW_AT_artificial, 1);
14888 tree_add_const_value_attribute (const_die, decl);
14889 }
14890
14891 /* Generate a DIE to represent a label identifier. */
14892
14893 static void
14894 gen_label_die (tree decl, dw_die_ref context_die)
14895 {
14896 tree origin = decl_ultimate_origin (decl);
14897 dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
14898 rtx insn;
14899 char label[MAX_ARTIFICIAL_LABEL_BYTES];
14900
14901 if (origin != NULL)
14902 add_abstract_origin_attribute (lbl_die, origin);
14903 else
14904 add_name_and_src_coords_attributes (lbl_die, decl);
14905
14906 if (DECL_ABSTRACT (decl))
14907 equate_decl_number_to_die (decl, lbl_die);
14908 else
14909 {
14910 insn = DECL_RTL_IF_SET (decl);
14911
14912 /* Deleted labels are programmer specified labels which have been
14913 eliminated because of various optimizations. We still emit them
14914 here so that it is possible to put breakpoints on them. */
14915 if (insn
14916 && (LABEL_P (insn)
14917 || ((NOTE_P (insn)
14918 && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
14919 {
14920 /* When optimization is enabled (via -O) some parts of the compiler
14921 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
14922 represent source-level labels which were explicitly declared by
14923 the user. This really shouldn't be happening though, so catch
14924 it if it ever does happen. */
14925 gcc_assert (!INSN_DELETED_P (insn));
14926
14927 ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
14928 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
14929 }
14930 }
14931 }
14932
14933 /* A helper function for gen_inlined_subroutine_die. Add source coordinate
14934 attributes to the DIE for a block STMT, to describe where the inlined
14935 function was called from. This is similar to add_src_coords_attributes. */
14936
14937 static inline void
14938 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
14939 {
14940 expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
14941
14942 add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
14943 add_AT_unsigned (die, DW_AT_call_line, s.line);
14944 }
14945
14946
14947 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
14948 Add low_pc and high_pc attributes to the DIE for a block STMT. */
14949
14950 static inline void
14951 add_high_low_attributes (tree stmt, dw_die_ref die)
14952 {
14953 char label[MAX_ARTIFICIAL_LABEL_BYTES];
14954
14955 if (BLOCK_FRAGMENT_CHAIN (stmt))
14956 {
14957 tree chain;
14958
14959 if (inlined_function_outer_scope_p (stmt))
14960 {
14961 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
14962 BLOCK_NUMBER (stmt));
14963 add_AT_lbl_id (die, DW_AT_entry_pc, label);
14964 }
14965
14966 add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
14967
14968 chain = BLOCK_FRAGMENT_CHAIN (stmt);
14969 do
14970 {
14971 add_ranges (chain);
14972 chain = BLOCK_FRAGMENT_CHAIN (chain);
14973 }
14974 while (chain);
14975 add_ranges (NULL);
14976 }
14977 else
14978 {
14979 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
14980 BLOCK_NUMBER (stmt));
14981 add_AT_lbl_id (die, DW_AT_low_pc, label);
14982 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
14983 BLOCK_NUMBER (stmt));
14984 add_AT_lbl_id (die, DW_AT_high_pc, label);
14985 }
14986 }
14987
14988 /* Generate a DIE for a lexical block. */
14989
14990 static void
14991 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
14992 {
14993 dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
14994
14995 if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
14996 add_high_low_attributes (stmt, stmt_die);
14997
14998 decls_for_scope (stmt, stmt_die, depth);
14999 }
15000
15001 /* Generate a DIE for an inlined subprogram. */
15002
15003 static void
15004 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
15005 {
15006 tree decl;
15007
15008 /* The instance of function that is effectively being inlined shall not
15009 be abstract. */
15010 gcc_assert (! BLOCK_ABSTRACT (stmt));
15011
15012 decl = block_ultimate_origin (stmt);
15013
15014 /* Emit info for the abstract instance first, if we haven't yet. We
15015 must emit this even if the block is abstract, otherwise when we
15016 emit the block below (or elsewhere), we may end up trying to emit
15017 a die whose origin die hasn't been emitted, and crashing. */
15018 dwarf2out_abstract_function (decl);
15019
15020 if (! BLOCK_ABSTRACT (stmt))
15021 {
15022 dw_die_ref subr_die
15023 = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
15024
15025 add_abstract_origin_attribute (subr_die, decl);
15026 if (TREE_ASM_WRITTEN (stmt))
15027 add_high_low_attributes (stmt, subr_die);
15028 add_call_src_coords_attributes (stmt, subr_die);
15029
15030 decls_for_scope (stmt, subr_die, depth);
15031 current_function_has_inlines = 1;
15032 }
15033 }
15034
15035 /* Generate a DIE for a field in a record, or structure. */
15036
15037 static void
15038 gen_field_die (tree decl, dw_die_ref context_die)
15039 {
15040 dw_die_ref decl_die;
15041
15042 if (TREE_TYPE (decl) == error_mark_node)
15043 return;
15044
15045 decl_die = new_die (DW_TAG_member, context_die, decl);
15046 add_name_and_src_coords_attributes (decl_die, decl);
15047 add_type_attribute (decl_die, member_declared_type (decl),
15048 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
15049 context_die);
15050
15051 if (DECL_BIT_FIELD_TYPE (decl))
15052 {
15053 add_byte_size_attribute (decl_die, decl);
15054 add_bit_size_attribute (decl_die, decl);
15055 add_bit_offset_attribute (decl_die, decl);
15056 }
15057
15058 if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
15059 add_data_member_location_attribute (decl_die, decl);
15060
15061 if (DECL_ARTIFICIAL (decl))
15062 add_AT_flag (decl_die, DW_AT_artificial, 1);
15063
15064 if (TREE_PROTECTED (decl))
15065 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
15066 else if (TREE_PRIVATE (decl))
15067 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
15068
15069 /* Equate decl number to die, so that we can look up this decl later on. */
15070 equate_decl_number_to_die (decl, decl_die);
15071 }
15072
15073 #if 0
15074 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
15075 Use modified_type_die instead.
15076 We keep this code here just in case these types of DIEs may be needed to
15077 represent certain things in other languages (e.g. Pascal) someday. */
15078
15079 static void
15080 gen_pointer_type_die (tree type, dw_die_ref context_die)
15081 {
15082 dw_die_ref ptr_die
15083 = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
15084
15085 equate_type_number_to_die (type, ptr_die);
15086 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
15087 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
15088 }
15089
15090 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
15091 Use modified_type_die instead.
15092 We keep this code here just in case these types of DIEs may be needed to
15093 represent certain things in other languages (e.g. Pascal) someday. */
15094
15095 static void
15096 gen_reference_type_die (tree type, dw_die_ref context_die)
15097 {
15098 dw_die_ref ref_die
15099 = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
15100
15101 equate_type_number_to_die (type, ref_die);
15102 add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
15103 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
15104 }
15105 #endif
15106
15107 /* Generate a DIE for a pointer to a member type. */
15108
15109 static void
15110 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
15111 {
15112 dw_die_ref ptr_die
15113 = new_die (DW_TAG_ptr_to_member_type,
15114 scope_die_for (type, context_die), type);
15115
15116 equate_type_number_to_die (type, ptr_die);
15117 add_AT_die_ref (ptr_die, DW_AT_containing_type,
15118 lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
15119 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
15120 }
15121
15122 /* Generate the DIE for the compilation unit. */
15123
15124 static dw_die_ref
15125 gen_compile_unit_die (const char *filename)
15126 {
15127 dw_die_ref die;
15128 char producer[250];
15129 const char *language_string = lang_hooks.name;
15130 int language;
15131
15132 die = new_die (DW_TAG_compile_unit, NULL, NULL);
15133
15134 if (filename)
15135 {
15136 add_name_attribute (die, filename);
15137 /* Don't add cwd for <built-in>. */
15138 if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
15139 add_comp_dir_attribute (die);
15140 }
15141
15142 sprintf (producer, "%s %s", language_string, version_string);
15143
15144 #ifdef MIPS_DEBUGGING_INFO
15145 /* The MIPS/SGI compilers place the 'cc' command line options in the producer
15146 string. The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
15147 not appear in the producer string, the debugger reaches the conclusion
15148 that the object file is stripped and has no debugging information.
15149 To get the MIPS/SGI debugger to believe that there is debugging
15150 information in the object file, we add a -g to the producer string. */
15151 if (debug_info_level > DINFO_LEVEL_TERSE)
15152 strcat (producer, " -g");
15153 #endif
15154
15155 add_AT_string (die, DW_AT_producer, producer);
15156
15157 if (strcmp (language_string, "GNU C++") == 0)
15158 language = DW_LANG_C_plus_plus;
15159 else if (strcmp (language_string, "GNU Ada") == 0)
15160 language = DW_LANG_Ada95;
15161 else if (strcmp (language_string, "GNU F77") == 0)
15162 language = DW_LANG_Fortran77;
15163 else if (strcmp (language_string, "GNU Fortran") == 0)
15164 language = DW_LANG_Fortran95;
15165 else if (strcmp (language_string, "GNU Pascal") == 0)
15166 language = DW_LANG_Pascal83;
15167 else if (strcmp (language_string, "GNU Java") == 0)
15168 language = DW_LANG_Java;
15169 else if (strcmp (language_string, "GNU Objective-C") == 0)
15170 language = DW_LANG_ObjC;
15171 else if (strcmp (language_string, "GNU Objective-C++") == 0)
15172 language = DW_LANG_ObjC_plus_plus;
15173 else
15174 language = DW_LANG_C89;
15175
15176 add_AT_unsigned (die, DW_AT_language, language);
15177 return die;
15178 }
15179
15180 /* Generate the DIE for a base class. */
15181
15182 static void
15183 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
15184 {
15185 dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
15186
15187 add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
15188 add_data_member_location_attribute (die, binfo);
15189
15190 if (BINFO_VIRTUAL_P (binfo))
15191 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
15192
15193 if (access == access_public_node)
15194 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
15195 else if (access == access_protected_node)
15196 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
15197 }
15198
15199 /* Generate a DIE for a class member. */
15200
15201 static void
15202 gen_member_die (tree type, dw_die_ref context_die)
15203 {
15204 tree member;
15205 tree binfo = TYPE_BINFO (type);
15206 dw_die_ref child;
15207
15208 /* If this is not an incomplete type, output descriptions of each of its
15209 members. Note that as we output the DIEs necessary to represent the
15210 members of this record or union type, we will also be trying to output
15211 DIEs to represent the *types* of those members. However the `type'
15212 function (above) will specifically avoid generating type DIEs for member
15213 types *within* the list of member DIEs for this (containing) type except
15214 for those types (of members) which are explicitly marked as also being
15215 members of this (containing) type themselves. The g++ front- end can
15216 force any given type to be treated as a member of some other (containing)
15217 type by setting the TYPE_CONTEXT of the given (member) type to point to
15218 the TREE node representing the appropriate (containing) type. */
15219
15220 /* First output info about the base classes. */
15221 if (binfo)
15222 {
15223 VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
15224 int i;
15225 tree base;
15226
15227 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
15228 gen_inheritance_die (base,
15229 (accesses ? VEC_index (tree, accesses, i)
15230 : access_public_node), context_die);
15231 }
15232
15233 /* Now output info about the data members and type members. */
15234 for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
15235 {
15236 /* If we thought we were generating minimal debug info for TYPE
15237 and then changed our minds, some of the member declarations
15238 may have already been defined. Don't define them again, but
15239 do put them in the right order. */
15240
15241 child = lookup_decl_die (member);
15242 if (child)
15243 splice_child_die (context_die, child);
15244 else
15245 gen_decl_die (member, NULL, context_die);
15246 }
15247
15248 /* Now output info about the function members (if any). */
15249 for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
15250 {
15251 /* Don't include clones in the member list. */
15252 if (DECL_ABSTRACT_ORIGIN (member))
15253 continue;
15254
15255 child = lookup_decl_die (member);
15256 if (child)
15257 splice_child_die (context_die, child);
15258 else
15259 gen_decl_die (member, NULL, context_die);
15260 }
15261 }
15262
15263 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
15264 is set, we pretend that the type was never defined, so we only get the
15265 member DIEs needed by later specification DIEs. */
15266
15267 static void
15268 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
15269 enum debug_info_usage usage)
15270 {
15271 dw_die_ref type_die = lookup_type_die (type);
15272 dw_die_ref scope_die = 0;
15273 int nested = 0;
15274 int complete = (TYPE_SIZE (type)
15275 && (! TYPE_STUB_DECL (type)
15276 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
15277 int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
15278 complete = complete && should_emit_struct_debug (type, usage);
15279
15280 if (type_die && ! complete)
15281 return;
15282
15283 if (TYPE_CONTEXT (type) != NULL_TREE
15284 && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
15285 || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
15286 nested = 1;
15287
15288 scope_die = scope_die_for (type, context_die);
15289
15290 if (! type_die || (nested && scope_die == comp_unit_die))
15291 /* First occurrence of type or toplevel definition of nested class. */
15292 {
15293 dw_die_ref old_die = type_die;
15294
15295 type_die = new_die (TREE_CODE (type) == RECORD_TYPE
15296 ? record_type_tag (type) : DW_TAG_union_type,
15297 scope_die, type);
15298 equate_type_number_to_die (type, type_die);
15299 if (old_die)
15300 add_AT_specification (type_die, old_die);
15301 else
15302 add_name_attribute (type_die, type_tag (type));
15303 }
15304 else
15305 remove_AT (type_die, DW_AT_declaration);
15306
15307 /* If this type has been completed, then give it a byte_size attribute and
15308 then give a list of members. */
15309 if (complete && !ns_decl)
15310 {
15311 /* Prevent infinite recursion in cases where the type of some member of
15312 this type is expressed in terms of this type itself. */
15313 TREE_ASM_WRITTEN (type) = 1;
15314 add_byte_size_attribute (type_die, type);
15315 if (TYPE_STUB_DECL (type) != NULL_TREE)
15316 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
15317
15318 /* If the first reference to this type was as the return type of an
15319 inline function, then it may not have a parent. Fix this now. */
15320 if (type_die->die_parent == NULL)
15321 add_child_die (scope_die, type_die);
15322
15323 push_decl_scope (type);
15324 gen_member_die (type, type_die);
15325 pop_decl_scope ();
15326
15327 /* GNU extension: Record what type our vtable lives in. */
15328 if (TYPE_VFIELD (type))
15329 {
15330 tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
15331
15332 gen_type_die (vtype, context_die);
15333 add_AT_die_ref (type_die, DW_AT_containing_type,
15334 lookup_type_die (vtype));
15335 }
15336 }
15337 else
15338 {
15339 add_AT_flag (type_die, DW_AT_declaration, 1);
15340
15341 /* We don't need to do this for function-local types. */
15342 if (TYPE_STUB_DECL (type)
15343 && ! decl_function_context (TYPE_STUB_DECL (type)))
15344 VEC_safe_push (tree, gc, incomplete_types, type);
15345 }
15346
15347 if (get_AT (type_die, DW_AT_name))
15348 add_pubtype (type, type_die);
15349 }
15350
15351 /* Generate a DIE for a subroutine _type_. */
15352
15353 static void
15354 gen_subroutine_type_die (tree type, dw_die_ref context_die)
15355 {
15356 tree return_type = TREE_TYPE (type);
15357 dw_die_ref subr_die
15358 = new_die (DW_TAG_subroutine_type,
15359 scope_die_for (type, context_die), type);
15360
15361 equate_type_number_to_die (type, subr_die);
15362 add_prototyped_attribute (subr_die, type);
15363 add_type_attribute (subr_die, return_type, 0, 0, context_die);
15364 gen_formal_types_die (type, subr_die);
15365
15366 if (get_AT (subr_die, DW_AT_name))
15367 add_pubtype (type, subr_die);
15368 }
15369
15370 /* Generate a DIE for a type definition. */
15371
15372 static void
15373 gen_typedef_die (tree decl, dw_die_ref context_die)
15374 {
15375 dw_die_ref type_die;
15376 tree origin;
15377
15378 if (TREE_ASM_WRITTEN (decl))
15379 return;
15380
15381 TREE_ASM_WRITTEN (decl) = 1;
15382 type_die = new_die (DW_TAG_typedef, context_die, decl);
15383 origin = decl_ultimate_origin (decl);
15384 if (origin != NULL)
15385 add_abstract_origin_attribute (type_die, origin);
15386 else
15387 {
15388 tree type;
15389
15390 add_name_and_src_coords_attributes (type_die, decl);
15391 if (DECL_ORIGINAL_TYPE (decl))
15392 {
15393 type = DECL_ORIGINAL_TYPE (decl);
15394
15395 gcc_assert (type != TREE_TYPE (decl));
15396 equate_type_number_to_die (TREE_TYPE (decl), type_die);
15397 }
15398 else
15399 type = TREE_TYPE (decl);
15400
15401 add_type_attribute (type_die, type, TREE_READONLY (decl),
15402 TREE_THIS_VOLATILE (decl), context_die);
15403 }
15404
15405 if (DECL_ABSTRACT (decl))
15406 equate_decl_number_to_die (decl, type_die);
15407
15408 if (get_AT (type_die, DW_AT_name))
15409 add_pubtype (decl, type_die);
15410 }
15411
15412 /* Generate a type description DIE. */
15413
15414 static void
15415 gen_type_die_with_usage (tree type, dw_die_ref context_die,
15416 enum debug_info_usage usage)
15417 {
15418 int need_pop;
15419 struct array_descr_info info;
15420
15421 if (type == NULL_TREE || type == error_mark_node)
15422 return;
15423
15424 /* If TYPE is a typedef type variant, let's generate debug info
15425 for the parent typedef which TYPE is a type of. */
15426 if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
15427 && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
15428 {
15429 if (TREE_ASM_WRITTEN (type))
15430 return;
15431
15432 /* Prevent broken recursion; we can't hand off to the same type. */
15433 gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
15434
15435 /* Use the DIE of the containing namespace as the parent DIE of
15436 the type description DIE we want to generate. */
15437 if (DECL_CONTEXT (TYPE_NAME (type))
15438 && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
15439 context_die = lookup_decl_die (DECL_CONTEXT (TYPE_NAME (type)));
15440
15441 TREE_ASM_WRITTEN (type) = 1;
15442 gen_decl_die (TYPE_NAME (type), NULL, context_die);
15443 return;
15444 }
15445
15446 /* If this is an array type with hidden descriptor, handle it first. */
15447 if (!TREE_ASM_WRITTEN (type)
15448 && lang_hooks.types.get_array_descr_info
15449 && lang_hooks.types.get_array_descr_info (type, &info))
15450 {
15451 gen_descr_array_type_die (type, &info, context_die);
15452 TREE_ASM_WRITTEN (type) = 1;
15453 return;
15454 }
15455
15456 /* We are going to output a DIE to represent the unqualified version
15457 of this type (i.e. without any const or volatile qualifiers) so
15458 get the main variant (i.e. the unqualified version) of this type
15459 now. (Vectors are special because the debugging info is in the
15460 cloned type itself). */
15461 if (TREE_CODE (type) != VECTOR_TYPE)
15462 type = type_main_variant (type);
15463
15464 if (TREE_ASM_WRITTEN (type))
15465 return;
15466
15467 switch (TREE_CODE (type))
15468 {
15469 case ERROR_MARK:
15470 break;
15471
15472 case POINTER_TYPE:
15473 case REFERENCE_TYPE:
15474 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
15475 ensures that the gen_type_die recursion will terminate even if the
15476 type is recursive. Recursive types are possible in Ada. */
15477 /* ??? We could perhaps do this for all types before the switch
15478 statement. */
15479 TREE_ASM_WRITTEN (type) = 1;
15480
15481 /* For these types, all that is required is that we output a DIE (or a
15482 set of DIEs) to represent the "basis" type. */
15483 gen_type_die_with_usage (TREE_TYPE (type), context_die,
15484 DINFO_USAGE_IND_USE);
15485 break;
15486
15487 case OFFSET_TYPE:
15488 /* This code is used for C++ pointer-to-data-member types.
15489 Output a description of the relevant class type. */
15490 gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
15491 DINFO_USAGE_IND_USE);
15492
15493 /* Output a description of the type of the object pointed to. */
15494 gen_type_die_with_usage (TREE_TYPE (type), context_die,
15495 DINFO_USAGE_IND_USE);
15496
15497 /* Now output a DIE to represent this pointer-to-data-member type
15498 itself. */
15499 gen_ptr_to_mbr_type_die (type, context_die);
15500 break;
15501
15502 case FUNCTION_TYPE:
15503 /* Force out return type (in case it wasn't forced out already). */
15504 gen_type_die_with_usage (TREE_TYPE (type), context_die,
15505 DINFO_USAGE_DIR_USE);
15506 gen_subroutine_type_die (type, context_die);
15507 break;
15508
15509 case METHOD_TYPE:
15510 /* Force out return type (in case it wasn't forced out already). */
15511 gen_type_die_with_usage (TREE_TYPE (type), context_die,
15512 DINFO_USAGE_DIR_USE);
15513 gen_subroutine_type_die (type, context_die);
15514 break;
15515
15516 case ARRAY_TYPE:
15517 gen_array_type_die (type, context_die);
15518 break;
15519
15520 case VECTOR_TYPE:
15521 gen_array_type_die (type, context_die);
15522 break;
15523
15524 case ENUMERAL_TYPE:
15525 case RECORD_TYPE:
15526 case UNION_TYPE:
15527 case QUAL_UNION_TYPE:
15528 /* If this is a nested type whose containing class hasn't been written
15529 out yet, writing it out will cover this one, too. This does not apply
15530 to instantiations of member class templates; they need to be added to
15531 the containing class as they are generated. FIXME: This hurts the
15532 idea of combining type decls from multiple TUs, since we can't predict
15533 what set of template instantiations we'll get. */
15534 if (TYPE_CONTEXT (type)
15535 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
15536 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
15537 {
15538 gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
15539
15540 if (TREE_ASM_WRITTEN (type))
15541 return;
15542
15543 /* If that failed, attach ourselves to the stub. */
15544 push_decl_scope (TYPE_CONTEXT (type));
15545 context_die = lookup_type_die (TYPE_CONTEXT (type));
15546 need_pop = 1;
15547 }
15548 else
15549 {
15550 context_die = declare_in_namespace (type, context_die);
15551 need_pop = 0;
15552 }
15553
15554 if (TREE_CODE (type) == ENUMERAL_TYPE)
15555 {
15556 /* This might have been written out by the call to
15557 declare_in_namespace. */
15558 if (!TREE_ASM_WRITTEN (type))
15559 gen_enumeration_type_die (type, context_die);
15560 }
15561 else
15562 gen_struct_or_union_type_die (type, context_die, usage);
15563
15564 if (need_pop)
15565 pop_decl_scope ();
15566
15567 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
15568 it up if it is ever completed. gen_*_type_die will set it for us
15569 when appropriate. */
15570 return;
15571
15572 case VOID_TYPE:
15573 case INTEGER_TYPE:
15574 case REAL_TYPE:
15575 case FIXED_POINT_TYPE:
15576 case COMPLEX_TYPE:
15577 case BOOLEAN_TYPE:
15578 /* No DIEs needed for fundamental types. */
15579 break;
15580
15581 case LANG_TYPE:
15582 /* No Dwarf representation currently defined. */
15583 break;
15584
15585 default:
15586 gcc_unreachable ();
15587 }
15588
15589 TREE_ASM_WRITTEN (type) = 1;
15590 }
15591
15592 static void
15593 gen_type_die (tree type, dw_die_ref context_die)
15594 {
15595 gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
15596 }
15597
15598 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
15599 things which are local to the given block. */
15600
15601 static void
15602 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
15603 {
15604 int must_output_die = 0;
15605 bool inlined_func;
15606
15607 /* Ignore blocks that are NULL. */
15608 if (stmt == NULL_TREE)
15609 return;
15610
15611 inlined_func = inlined_function_outer_scope_p (stmt);
15612
15613 /* If the block is one fragment of a non-contiguous block, do not
15614 process the variables, since they will have been done by the
15615 origin block. Do process subblocks. */
15616 if (BLOCK_FRAGMENT_ORIGIN (stmt))
15617 {
15618 tree sub;
15619
15620 for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
15621 gen_block_die (sub, context_die, depth + 1);
15622
15623 return;
15624 }
15625
15626 /* Determine if we need to output any Dwarf DIEs at all to represent this
15627 block. */
15628 if (inlined_func)
15629 /* The outer scopes for inlinings *must* always be represented. We
15630 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
15631 must_output_die = 1;
15632 else
15633 {
15634 /* Determine if this block directly contains any "significant"
15635 local declarations which we will need to output DIEs for. */
15636 if (debug_info_level > DINFO_LEVEL_TERSE)
15637 /* We are not in terse mode so *any* local declaration counts
15638 as being a "significant" one. */
15639 must_output_die = ((BLOCK_VARS (stmt) != NULL
15640 || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
15641 && (TREE_USED (stmt)
15642 || TREE_ASM_WRITTEN (stmt)
15643 || BLOCK_ABSTRACT (stmt)));
15644 else if ((TREE_USED (stmt)
15645 || TREE_ASM_WRITTEN (stmt)
15646 || BLOCK_ABSTRACT (stmt))
15647 && !dwarf2out_ignore_block (stmt))
15648 must_output_die = 1;
15649 }
15650
15651 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
15652 DIE for any block which contains no significant local declarations at
15653 all. Rather, in such cases we just call `decls_for_scope' so that any
15654 needed Dwarf info for any sub-blocks will get properly generated. Note
15655 that in terse mode, our definition of what constitutes a "significant"
15656 local declaration gets restricted to include only inlined function
15657 instances and local (nested) function definitions. */
15658 if (must_output_die)
15659 {
15660 if (inlined_func)
15661 {
15662 /* If STMT block is abstract, that means we have been called
15663 indirectly from dwarf2out_abstract_function.
15664 That function rightfully marks the descendent blocks (of
15665 the abstract function it is dealing with) as being abstract,
15666 precisely to prevent us from emitting any
15667 DW_TAG_inlined_subroutine DIE as a descendent
15668 of an abstract function instance. So in that case, we should
15669 not call gen_inlined_subroutine_die.
15670
15671 Later though, when cgraph asks dwarf2out to emit info
15672 for the concrete instance of the function decl into which
15673 the concrete instance of STMT got inlined, the later will lead
15674 to the generation of a DW_TAG_inlined_subroutine DIE. */
15675 if (! BLOCK_ABSTRACT (stmt))
15676 gen_inlined_subroutine_die (stmt, context_die, depth);
15677 }
15678 else
15679 gen_lexical_block_die (stmt, context_die, depth);
15680 }
15681 else
15682 decls_for_scope (stmt, context_die, depth);
15683 }
15684
15685 /* Process variable DECL (or variable with origin ORIGIN) within
15686 block STMT and add it to CONTEXT_DIE. */
15687 static void
15688 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
15689 {
15690 dw_die_ref die;
15691 tree decl_or_origin = decl ? decl : origin;
15692 tree ultimate_origin = origin ? decl_ultimate_origin (origin) : NULL;
15693
15694 if (ultimate_origin)
15695 origin = ultimate_origin;
15696
15697 if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
15698 die = lookup_decl_die (decl_or_origin);
15699 else if (TREE_CODE (decl_or_origin) == TYPE_DECL
15700 && TYPE_DECL_IS_STUB (decl_or_origin))
15701 die = lookup_type_die (TREE_TYPE (decl_or_origin));
15702 else
15703 die = NULL;
15704
15705 if (die != NULL && die->die_parent == NULL)
15706 add_child_die (context_die, die);
15707 else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
15708 dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
15709 stmt, context_die);
15710 else
15711 gen_decl_die (decl, origin, context_die);
15712 }
15713
15714 /* Generate all of the decls declared within a given scope and (recursively)
15715 all of its sub-blocks. */
15716
15717 static void
15718 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
15719 {
15720 tree decl;
15721 unsigned int i;
15722 tree subblocks;
15723
15724 /* Ignore NULL blocks. */
15725 if (stmt == NULL_TREE)
15726 return;
15727
15728 /* Output the DIEs to represent all of the data objects and typedefs
15729 declared directly within this block but not within any nested
15730 sub-blocks. Also, nested function and tag DIEs have been
15731 generated with a parent of NULL; fix that up now. */
15732 for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
15733 process_scope_var (stmt, decl, NULL_TREE, context_die);
15734 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
15735 process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
15736 context_die);
15737
15738 /* If we're at -g1, we're not interested in subblocks. */
15739 if (debug_info_level <= DINFO_LEVEL_TERSE)
15740 return;
15741
15742 /* Output the DIEs to represent all sub-blocks (and the items declared
15743 therein) of this block. */
15744 for (subblocks = BLOCK_SUBBLOCKS (stmt);
15745 subblocks != NULL;
15746 subblocks = BLOCK_CHAIN (subblocks))
15747 gen_block_die (subblocks, context_die, depth + 1);
15748 }
15749
15750 /* Is this a typedef we can avoid emitting? */
15751
15752 static inline int
15753 is_redundant_typedef (const_tree decl)
15754 {
15755 if (TYPE_DECL_IS_STUB (decl))
15756 return 1;
15757
15758 if (DECL_ARTIFICIAL (decl)
15759 && DECL_CONTEXT (decl)
15760 && is_tagged_type (DECL_CONTEXT (decl))
15761 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
15762 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
15763 /* Also ignore the artificial member typedef for the class name. */
15764 return 1;
15765
15766 return 0;
15767 }
15768
15769 /* Returns the DIE for a context. */
15770
15771 static inline dw_die_ref
15772 get_context_die (tree context)
15773 {
15774 if (context)
15775 {
15776 /* Find die that represents this context. */
15777 if (TYPE_P (context))
15778 return force_type_die (context);
15779 else
15780 return force_decl_die (context);
15781 }
15782 return comp_unit_die;
15783 }
15784
15785 /* Returns the DIE for decl. A DIE will always be returned. */
15786
15787 static dw_die_ref
15788 force_decl_die (tree decl)
15789 {
15790 dw_die_ref decl_die;
15791 unsigned saved_external_flag;
15792 tree save_fn = NULL_TREE;
15793 decl_die = lookup_decl_die (decl);
15794 if (!decl_die)
15795 {
15796 dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
15797
15798 decl_die = lookup_decl_die (decl);
15799 if (decl_die)
15800 return decl_die;
15801
15802 switch (TREE_CODE (decl))
15803 {
15804 case FUNCTION_DECL:
15805 /* Clear current_function_decl, so that gen_subprogram_die thinks
15806 that this is a declaration. At this point, we just want to force
15807 declaration die. */
15808 save_fn = current_function_decl;
15809 current_function_decl = NULL_TREE;
15810 gen_subprogram_die (decl, context_die);
15811 current_function_decl = save_fn;
15812 break;
15813
15814 case VAR_DECL:
15815 /* Set external flag to force declaration die. Restore it after
15816 gen_decl_die() call. */
15817 saved_external_flag = DECL_EXTERNAL (decl);
15818 DECL_EXTERNAL (decl) = 1;
15819 gen_decl_die (decl, NULL, context_die);
15820 DECL_EXTERNAL (decl) = saved_external_flag;
15821 break;
15822
15823 case NAMESPACE_DECL:
15824 dwarf2out_decl (decl);
15825 break;
15826
15827 default:
15828 gcc_unreachable ();
15829 }
15830
15831 /* We should be able to find the DIE now. */
15832 if (!decl_die)
15833 decl_die = lookup_decl_die (decl);
15834 gcc_assert (decl_die);
15835 }
15836
15837 return decl_die;
15838 }
15839
15840 /* Returns the DIE for TYPE, that must not be a base type. A DIE is
15841 always returned. */
15842
15843 static dw_die_ref
15844 force_type_die (tree type)
15845 {
15846 dw_die_ref type_die;
15847
15848 type_die = lookup_type_die (type);
15849 if (!type_die)
15850 {
15851 dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
15852
15853 type_die = modified_type_die (type, TYPE_READONLY (type),
15854 TYPE_VOLATILE (type), context_die);
15855 gcc_assert (type_die);
15856 }
15857 return type_die;
15858 }
15859
15860 /* Force out any required namespaces to be able to output DECL,
15861 and return the new context_die for it, if it's changed. */
15862
15863 static dw_die_ref
15864 setup_namespace_context (tree thing, dw_die_ref context_die)
15865 {
15866 tree context = (DECL_P (thing)
15867 ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
15868 if (context && TREE_CODE (context) == NAMESPACE_DECL)
15869 /* Force out the namespace. */
15870 context_die = force_decl_die (context);
15871
15872 return context_die;
15873 }
15874
15875 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
15876 type) within its namespace, if appropriate.
15877
15878 For compatibility with older debuggers, namespace DIEs only contain
15879 declarations; all definitions are emitted at CU scope. */
15880
15881 static dw_die_ref
15882 declare_in_namespace (tree thing, dw_die_ref context_die)
15883 {
15884 dw_die_ref ns_context;
15885
15886 if (debug_info_level <= DINFO_LEVEL_TERSE)
15887 return context_die;
15888
15889 /* If this decl is from an inlined function, then don't try to emit it in its
15890 namespace, as we will get confused. It would have already been emitted
15891 when the abstract instance of the inline function was emitted anyways. */
15892 if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
15893 return context_die;
15894
15895 ns_context = setup_namespace_context (thing, context_die);
15896
15897 if (ns_context != context_die)
15898 {
15899 if (is_fortran ())
15900 return ns_context;
15901 if (DECL_P (thing))
15902 gen_decl_die (thing, NULL, ns_context);
15903 else
15904 gen_type_die (thing, ns_context);
15905 }
15906 return context_die;
15907 }
15908
15909 /* Generate a DIE for a namespace or namespace alias. */
15910
15911 static void
15912 gen_namespace_die (tree decl, dw_die_ref context_die)
15913 {
15914 dw_die_ref namespace_die;
15915
15916 /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
15917 they are an alias of. */
15918 if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
15919 {
15920 /* Output a real namespace or module. */
15921 context_die = setup_namespace_context (decl, comp_unit_die);
15922 namespace_die = new_die (is_fortran ()
15923 ? DW_TAG_module : DW_TAG_namespace,
15924 context_die, decl);
15925 /* For Fortran modules defined in different CU don't add src coords. */
15926 if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
15927 add_name_attribute (namespace_die, dwarf2_name (decl, 0));
15928 else
15929 add_name_and_src_coords_attributes (namespace_die, decl);
15930 if (DECL_EXTERNAL (decl))
15931 add_AT_flag (namespace_die, DW_AT_declaration, 1);
15932 equate_decl_number_to_die (decl, namespace_die);
15933 }
15934 else
15935 {
15936 /* Output a namespace alias. */
15937
15938 /* Force out the namespace we are an alias of, if necessary. */
15939 dw_die_ref origin_die
15940 = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
15941
15942 if (DECL_CONTEXT (decl) == NULL_TREE
15943 || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
15944 context_die = setup_namespace_context (decl, comp_unit_die);
15945 /* Now create the namespace alias DIE. */
15946 namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
15947 add_name_and_src_coords_attributes (namespace_die, decl);
15948 add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
15949 equate_decl_number_to_die (decl, namespace_die);
15950 }
15951 }
15952
15953 /* Generate Dwarf debug information for a decl described by DECL. */
15954
15955 static void
15956 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
15957 {
15958 tree decl_or_origin = decl ? decl : origin;
15959 tree class_origin = NULL;
15960
15961 if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
15962 return;
15963
15964 switch (TREE_CODE (decl_or_origin))
15965 {
15966 case ERROR_MARK:
15967 break;
15968
15969 case CONST_DECL:
15970 if (!is_fortran ())
15971 {
15972 /* The individual enumerators of an enum type get output when we output
15973 the Dwarf representation of the relevant enum type itself. */
15974 break;
15975 }
15976
15977 /* Emit its type. */
15978 gen_type_die (TREE_TYPE (decl), context_die);
15979
15980 /* And its containing namespace. */
15981 context_die = declare_in_namespace (decl, context_die);
15982
15983 gen_const_die (decl, context_die);
15984 break;
15985
15986 case FUNCTION_DECL:
15987 /* Don't output any DIEs to represent mere function declarations,
15988 unless they are class members or explicit block externs. */
15989 if (DECL_INITIAL (decl_or_origin) == NULL_TREE
15990 && DECL_CONTEXT (decl_or_origin) == NULL_TREE
15991 && (current_function_decl == NULL_TREE
15992 || DECL_ARTIFICIAL (decl_or_origin)))
15993 break;
15994
15995 #if 0
15996 /* FIXME */
15997 /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
15998 on local redeclarations of global functions. That seems broken. */
15999 if (current_function_decl != decl)
16000 /* This is only a declaration. */;
16001 #endif
16002
16003 /* If we're emitting a clone, emit info for the abstract instance. */
16004 if (origin || DECL_ORIGIN (decl) != decl)
16005 dwarf2out_abstract_function (origin ? origin : DECL_ABSTRACT_ORIGIN (decl));
16006
16007 /* If we're emitting an out-of-line copy of an inline function,
16008 emit info for the abstract instance and set up to refer to it. */
16009 else if (cgraph_function_possibly_inlined_p (decl)
16010 && ! DECL_ABSTRACT (decl)
16011 && ! class_or_namespace_scope_p (context_die)
16012 /* dwarf2out_abstract_function won't emit a die if this is just
16013 a declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
16014 that case, because that works only if we have a die. */
16015 && DECL_INITIAL (decl) != NULL_TREE)
16016 {
16017 dwarf2out_abstract_function (decl);
16018 set_decl_origin_self (decl);
16019 }
16020
16021 /* Otherwise we're emitting the primary DIE for this decl. */
16022 else if (debug_info_level > DINFO_LEVEL_TERSE)
16023 {
16024 /* Before we describe the FUNCTION_DECL itself, make sure that we
16025 have described its return type. */
16026 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
16027
16028 /* And its virtual context. */
16029 if (DECL_VINDEX (decl) != NULL_TREE)
16030 gen_type_die (DECL_CONTEXT (decl), context_die);
16031
16032 /* And its containing type. */
16033 if (!origin)
16034 origin = decl_class_context (decl);
16035 if (origin != NULL_TREE)
16036 gen_type_die_for_member (origin, decl, context_die);
16037
16038 /* And its containing namespace. */
16039 context_die = declare_in_namespace (decl, context_die);
16040 }
16041
16042 /* Now output a DIE to represent the function itself. */
16043 if (decl)
16044 gen_subprogram_die (decl, context_die);
16045 break;
16046
16047 case TYPE_DECL:
16048 /* If we are in terse mode, don't generate any DIEs to represent any
16049 actual typedefs. */
16050 if (debug_info_level <= DINFO_LEVEL_TERSE)
16051 break;
16052
16053 /* In the special case of a TYPE_DECL node representing the declaration
16054 of some type tag, if the given TYPE_DECL is marked as having been
16055 instantiated from some other (original) TYPE_DECL node (e.g. one which
16056 was generated within the original definition of an inline function) we
16057 used to generate a special (abbreviated) DW_TAG_structure_type,
16058 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. But nothing
16059 should be actually referencing those DIEs, as variable DIEs with that
16060 type would be emitted already in the abstract origin, so it was always
16061 removed during unused type prunning. Don't add anything in this
16062 case. */
16063 if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
16064 break;
16065
16066 if (is_redundant_typedef (decl))
16067 gen_type_die (TREE_TYPE (decl), context_die);
16068 else
16069 /* Output a DIE to represent the typedef itself. */
16070 gen_typedef_die (decl, context_die);
16071 break;
16072
16073 case LABEL_DECL:
16074 if (debug_info_level >= DINFO_LEVEL_NORMAL)
16075 gen_label_die (decl, context_die);
16076 break;
16077
16078 case VAR_DECL:
16079 case RESULT_DECL:
16080 /* If we are in terse mode, don't generate any DIEs to represent any
16081 variable declarations or definitions. */
16082 if (debug_info_level <= DINFO_LEVEL_TERSE)
16083 break;
16084
16085 /* Output any DIEs that are needed to specify the type of this data
16086 object. */
16087 if ((TREE_CODE (decl_or_origin) == RESULT_DECL
16088 || TREE_CODE (decl_or_origin) == VAR_DECL)
16089 && DECL_BY_REFERENCE (decl_or_origin))
16090 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
16091 else
16092 gen_type_die (TREE_TYPE (decl_or_origin), context_die);
16093
16094 /* And its containing type. */
16095 class_origin = decl_class_context (decl_or_origin);
16096 if (class_origin != NULL_TREE)
16097 gen_type_die_for_member (class_origin, decl_or_origin, context_die);
16098
16099 /* And its containing namespace. */
16100 context_die = declare_in_namespace (decl_or_origin, context_die);
16101
16102 /* Now output the DIE to represent the data object itself. This gets
16103 complicated because of the possibility that the VAR_DECL really
16104 represents an inlined instance of a formal parameter for an inline
16105 function. */
16106 if (!origin)
16107 origin = decl_ultimate_origin (decl);
16108 if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
16109 gen_formal_parameter_die (decl, origin, context_die);
16110 else
16111 gen_variable_die (decl, origin, context_die);
16112 break;
16113
16114 case FIELD_DECL:
16115 /* Ignore the nameless fields that are used to skip bits but handle C++
16116 anonymous unions and structs. */
16117 if (DECL_NAME (decl) != NULL_TREE
16118 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
16119 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
16120 {
16121 gen_type_die (member_declared_type (decl), context_die);
16122 gen_field_die (decl, context_die);
16123 }
16124 break;
16125
16126 case PARM_DECL:
16127 if (DECL_BY_REFERENCE (decl_or_origin))
16128 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
16129 else
16130 gen_type_die (TREE_TYPE (decl_or_origin), context_die);
16131 gen_formal_parameter_die (decl, origin, context_die);
16132 break;
16133
16134 case NAMESPACE_DECL:
16135 case IMPORTED_DECL:
16136 gen_namespace_die (decl, context_die);
16137 break;
16138
16139 default:
16140 /* Probably some frontend-internal decl. Assume we don't care. */
16141 gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
16142 break;
16143 }
16144 }
16145 \f
16146 /* Output debug information for global decl DECL. Called from toplev.c after
16147 compilation proper has finished. */
16148
16149 static void
16150 dwarf2out_global_decl (tree decl)
16151 {
16152 /* Output DWARF2 information for file-scope tentative data object
16153 declarations, file-scope (extern) function declarations (which
16154 had no corresponding body) and file-scope tagged type declarations
16155 and definitions which have not yet been forced out. */
16156 if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
16157 dwarf2out_decl (decl);
16158 }
16159
16160 /* Output debug information for type decl DECL. Called from toplev.c
16161 and from language front ends (to record built-in types). */
16162 static void
16163 dwarf2out_type_decl (tree decl, int local)
16164 {
16165 if (!local)
16166 dwarf2out_decl (decl);
16167 }
16168
16169 /* Output debug information for imported module or decl DECL.
16170 NAME is non-NULL name in the lexical block if the decl has been renamed.
16171 LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
16172 that DECL belongs to.
16173 LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK. */
16174 static void
16175 dwarf2out_imported_module_or_decl_1 (tree decl,
16176 tree name,
16177 tree lexical_block,
16178 dw_die_ref lexical_block_die)
16179 {
16180 expanded_location xloc;
16181 dw_die_ref imported_die = NULL;
16182 dw_die_ref at_import_die;
16183
16184 if (TREE_CODE (decl) == IMPORTED_DECL)
16185 {
16186 xloc = expand_location (DECL_SOURCE_LOCATION (decl));
16187 decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
16188 gcc_assert (decl);
16189 }
16190 else
16191 xloc = expand_location (input_location);
16192
16193 if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
16194 {
16195 if (is_base_type (TREE_TYPE (decl)))
16196 at_import_die = base_type_die (TREE_TYPE (decl));
16197 else
16198 at_import_die = force_type_die (TREE_TYPE (decl));
16199 /* For namespace N { typedef void T; } using N::T; base_type_die
16200 returns NULL, but DW_TAG_imported_declaration requires
16201 the DW_AT_import tag. Force creation of DW_TAG_typedef. */
16202 if (!at_import_die)
16203 {
16204 gcc_assert (TREE_CODE (decl) == TYPE_DECL);
16205 gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
16206 at_import_die = lookup_type_die (TREE_TYPE (decl));
16207 gcc_assert (at_import_die);
16208 }
16209 }
16210 else
16211 {
16212 at_import_die = lookup_decl_die (decl);
16213 if (!at_import_die)
16214 {
16215 /* If we're trying to avoid duplicate debug info, we may not have
16216 emitted the member decl for this field. Emit it now. */
16217 if (TREE_CODE (decl) == FIELD_DECL)
16218 {
16219 tree type = DECL_CONTEXT (decl);
16220
16221 if (TYPE_CONTEXT (type)
16222 && TYPE_P (TYPE_CONTEXT (type))
16223 && !should_emit_struct_debug (TYPE_CONTEXT (type),
16224 DINFO_USAGE_DIR_USE))
16225 return;
16226 gen_type_die_for_member (type, decl,
16227 get_context_die (TYPE_CONTEXT (type)));
16228 }
16229 at_import_die = force_decl_die (decl);
16230 }
16231 }
16232
16233 if (TREE_CODE (decl) == NAMESPACE_DECL)
16234 imported_die = new_die (DW_TAG_imported_module,
16235 lexical_block_die,
16236 lexical_block);
16237 else
16238 imported_die = new_die (DW_TAG_imported_declaration,
16239 lexical_block_die,
16240 lexical_block);
16241
16242 add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
16243 add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
16244 if (name)
16245 add_AT_string (imported_die, DW_AT_name,
16246 IDENTIFIER_POINTER (name));
16247 add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
16248 }
16249
16250 /* Output debug information for imported module or decl DECL.
16251 NAME is non-NULL name in context if the decl has been renamed.
16252 CHILD is true if decl is one of the renamed decls as part of
16253 importing whole module. */
16254
16255 static void
16256 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
16257 bool child)
16258 {
16259 /* dw_die_ref at_import_die; */
16260 dw_die_ref scope_die;
16261
16262 if (debug_info_level <= DINFO_LEVEL_TERSE)
16263 return;
16264
16265 gcc_assert (decl);
16266
16267 /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
16268 We need decl DIE for reference and scope die. First, get DIE for the decl
16269 itself. */
16270
16271 /* Get the scope die for decl context. Use comp_unit_die for global module
16272 or decl. If die is not found for non globals, force new die. */
16273 if (context
16274 && TYPE_P (context)
16275 && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
16276 return;
16277 scope_die = get_context_die (context);
16278
16279 if (child)
16280 {
16281 gcc_assert (scope_die->die_child);
16282 gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
16283 gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
16284 scope_die = scope_die->die_child;
16285 }
16286
16287 /* OK, now we have DIEs for decl as well as scope. Emit imported die. */
16288 dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
16289
16290 }
16291
16292 /* Write the debugging output for DECL. */
16293
16294 void
16295 dwarf2out_decl (tree decl)
16296 {
16297 dw_die_ref context_die = comp_unit_die;
16298
16299 switch (TREE_CODE (decl))
16300 {
16301 case ERROR_MARK:
16302 return;
16303
16304 case FUNCTION_DECL:
16305 /* What we would really like to do here is to filter out all mere
16306 file-scope declarations of file-scope functions which are never
16307 referenced later within this translation unit (and keep all of ones
16308 that *are* referenced later on) but we aren't clairvoyant, so we have
16309 no idea which functions will be referenced in the future (i.e. later
16310 on within the current translation unit). So here we just ignore all
16311 file-scope function declarations which are not also definitions. If
16312 and when the debugger needs to know something about these functions,
16313 it will have to hunt around and find the DWARF information associated
16314 with the definition of the function.
16315
16316 We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
16317 nodes represent definitions and which ones represent mere
16318 declarations. We have to check DECL_INITIAL instead. That's because
16319 the C front-end supports some weird semantics for "extern inline"
16320 function definitions. These can get inlined within the current
16321 translation unit (and thus, we need to generate Dwarf info for their
16322 abstract instances so that the Dwarf info for the concrete inlined
16323 instances can have something to refer to) but the compiler never
16324 generates any out-of-lines instances of such things (despite the fact
16325 that they *are* definitions).
16326
16327 The important point is that the C front-end marks these "extern
16328 inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
16329 them anyway. Note that the C++ front-end also plays some similar games
16330 for inline function definitions appearing within include files which
16331 also contain `#pragma interface' pragmas. */
16332 if (DECL_INITIAL (decl) == NULL_TREE)
16333 return;
16334
16335 /* If we're a nested function, initially use a parent of NULL; if we're
16336 a plain function, this will be fixed up in decls_for_scope. If
16337 we're a method, it will be ignored, since we already have a DIE. */
16338 if (decl_function_context (decl)
16339 /* But if we're in terse mode, we don't care about scope. */
16340 && debug_info_level > DINFO_LEVEL_TERSE)
16341 context_die = NULL;
16342 break;
16343
16344 case VAR_DECL:
16345 /* Ignore this VAR_DECL if it refers to a file-scope extern data object
16346 declaration and if the declaration was never even referenced from
16347 within this entire compilation unit. We suppress these DIEs in
16348 order to save space in the .debug section (by eliminating entries
16349 which are probably useless). Note that we must not suppress
16350 block-local extern declarations (whether used or not) because that
16351 would screw-up the debugger's name lookup mechanism and cause it to
16352 miss things which really ought to be in scope at a given point. */
16353 if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
16354 return;
16355
16356 /* For local statics lookup proper context die. */
16357 if (TREE_STATIC (decl) && decl_function_context (decl))
16358 context_die = lookup_decl_die (DECL_CONTEXT (decl));
16359
16360 /* If we are in terse mode, don't generate any DIEs to represent any
16361 variable declarations or definitions. */
16362 if (debug_info_level <= DINFO_LEVEL_TERSE)
16363 return;
16364 break;
16365
16366 case CONST_DECL:
16367 if (debug_info_level <= DINFO_LEVEL_TERSE)
16368 return;
16369 if (!is_fortran ())
16370 return;
16371 if (TREE_STATIC (decl) && decl_function_context (decl))
16372 context_die = lookup_decl_die (DECL_CONTEXT (decl));
16373 break;
16374
16375 case NAMESPACE_DECL:
16376 case IMPORTED_DECL:
16377 if (debug_info_level <= DINFO_LEVEL_TERSE)
16378 return;
16379 if (lookup_decl_die (decl) != NULL)
16380 return;
16381 break;
16382
16383 case TYPE_DECL:
16384 /* Don't emit stubs for types unless they are needed by other DIEs. */
16385 if (TYPE_DECL_SUPPRESS_DEBUG (decl))
16386 return;
16387
16388 /* Don't bother trying to generate any DIEs to represent any of the
16389 normal built-in types for the language we are compiling. */
16390 if (DECL_IS_BUILTIN (decl))
16391 {
16392 /* OK, we need to generate one for `bool' so GDB knows what type
16393 comparisons have. */
16394 if (is_cxx ()
16395 && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
16396 && ! DECL_IGNORED_P (decl))
16397 modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
16398
16399 return;
16400 }
16401
16402 /* If we are in terse mode, don't generate any DIEs for types. */
16403 if (debug_info_level <= DINFO_LEVEL_TERSE)
16404 return;
16405
16406 /* If we're a function-scope tag, initially use a parent of NULL;
16407 this will be fixed up in decls_for_scope. */
16408 if (decl_function_context (decl))
16409 context_die = NULL;
16410
16411 break;
16412
16413 default:
16414 return;
16415 }
16416
16417 gen_decl_die (decl, NULL, context_die);
16418 }
16419
16420 /* Output a marker (i.e. a label) for the beginning of the generated code for
16421 a lexical block. */
16422
16423 static void
16424 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
16425 unsigned int blocknum)
16426 {
16427 switch_to_section (current_function_section ());
16428 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
16429 }
16430
16431 /* Output a marker (i.e. a label) for the end of the generated code for a
16432 lexical block. */
16433
16434 static void
16435 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
16436 {
16437 switch_to_section (current_function_section ());
16438 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
16439 }
16440
16441 /* Returns nonzero if it is appropriate not to emit any debugging
16442 information for BLOCK, because it doesn't contain any instructions.
16443
16444 Don't allow this for blocks with nested functions or local classes
16445 as we would end up with orphans, and in the presence of scheduling
16446 we may end up calling them anyway. */
16447
16448 static bool
16449 dwarf2out_ignore_block (const_tree block)
16450 {
16451 tree decl;
16452 unsigned int i;
16453
16454 for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
16455 if (TREE_CODE (decl) == FUNCTION_DECL
16456 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
16457 return 0;
16458 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
16459 {
16460 decl = BLOCK_NONLOCALIZED_VAR (block, i);
16461 if (TREE_CODE (decl) == FUNCTION_DECL
16462 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
16463 return 0;
16464 }
16465
16466 return 1;
16467 }
16468
16469 /* Hash table routines for file_hash. */
16470
16471 static int
16472 file_table_eq (const void *p1_p, const void *p2_p)
16473 {
16474 const struct dwarf_file_data *const p1 =
16475 (const struct dwarf_file_data *) p1_p;
16476 const char *const p2 = (const char *) p2_p;
16477 return strcmp (p1->filename, p2) == 0;
16478 }
16479
16480 static hashval_t
16481 file_table_hash (const void *p_p)
16482 {
16483 const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
16484 return htab_hash_string (p->filename);
16485 }
16486
16487 /* Lookup FILE_NAME (in the list of filenames that we know about here in
16488 dwarf2out.c) and return its "index". The index of each (known) filename is
16489 just a unique number which is associated with only that one filename. We
16490 need such numbers for the sake of generating labels (in the .debug_sfnames
16491 section) and references to those files numbers (in the .debug_srcinfo
16492 and.debug_macinfo sections). If the filename given as an argument is not
16493 found in our current list, add it to the list and assign it the next
16494 available unique index number. In order to speed up searches, we remember
16495 the index of the filename was looked up last. This handles the majority of
16496 all searches. */
16497
16498 static struct dwarf_file_data *
16499 lookup_filename (const char *file_name)
16500 {
16501 void ** slot;
16502 struct dwarf_file_data * created;
16503
16504 /* Check to see if the file name that was searched on the previous
16505 call matches this file name. If so, return the index. */
16506 if (file_table_last_lookup
16507 && (file_name == file_table_last_lookup->filename
16508 || strcmp (file_table_last_lookup->filename, file_name) == 0))
16509 return file_table_last_lookup;
16510
16511 /* Didn't match the previous lookup, search the table. */
16512 slot = htab_find_slot_with_hash (file_table, file_name,
16513 htab_hash_string (file_name), INSERT);
16514 if (*slot)
16515 return (struct dwarf_file_data *) *slot;
16516
16517 created = GGC_NEW (struct dwarf_file_data);
16518 created->filename = file_name;
16519 created->emitted_number = 0;
16520 *slot = created;
16521 return created;
16522 }
16523
16524 /* If the assembler will construct the file table, then translate the compiler
16525 internal file table number into the assembler file table number, and emit
16526 a .file directive if we haven't already emitted one yet. The file table
16527 numbers are different because we prune debug info for unused variables and
16528 types, which may include filenames. */
16529
16530 static int
16531 maybe_emit_file (struct dwarf_file_data * fd)
16532 {
16533 if (! fd->emitted_number)
16534 {
16535 if (last_emitted_file)
16536 fd->emitted_number = last_emitted_file->emitted_number + 1;
16537 else
16538 fd->emitted_number = 1;
16539 last_emitted_file = fd;
16540
16541 if (DWARF2_ASM_LINE_DEBUG_INFO)
16542 {
16543 fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
16544 output_quoted_string (asm_out_file,
16545 remap_debug_filename (fd->filename));
16546 fputc ('\n', asm_out_file);
16547 }
16548 }
16549
16550 return fd->emitted_number;
16551 }
16552
16553 /* Replace DW_AT_name for the decl with name. */
16554
16555 static void
16556 dwarf2out_set_name (tree decl, tree name)
16557 {
16558 dw_die_ref die;
16559 dw_attr_ref attr;
16560
16561 die = TYPE_SYMTAB_DIE (decl);
16562 if (!die)
16563 return;
16564
16565 attr = get_AT (die, DW_AT_name);
16566 if (attr)
16567 {
16568 struct indirect_string_node *node;
16569
16570 node = find_AT_string (dwarf2_name (name, 0));
16571 /* replace the string. */
16572 attr->dw_attr_val.v.val_str = node;
16573 }
16574
16575 else
16576 add_name_attribute (die, dwarf2_name (name, 0));
16577 }
16578
16579 /* Called by the final INSN scan whenever we see a var location. We
16580 use it to drop labels in the right places, and throw the location in
16581 our lookup table. */
16582
16583 static void
16584 dwarf2out_var_location (rtx loc_note)
16585 {
16586 char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
16587 struct var_loc_node *newloc;
16588 rtx next_real;
16589 static const char *last_label;
16590 static bool last_in_cold_section_p;
16591 tree decl;
16592
16593 if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
16594 return;
16595
16596 next_real = next_real_insn (loc_note);
16597 /* If there are no instructions which would be affected by this note,
16598 don't do anything. */
16599 if (next_real == NULL_RTX)
16600 return;
16601
16602 newloc = GGC_CNEW (struct var_loc_node);
16603 /* If there were no real insns between note we processed last time
16604 and this note, use the label we emitted last time. */
16605 if (last_var_location_insn != NULL_RTX
16606 && last_var_location_insn == next_real
16607 && last_in_cold_section_p == in_cold_section_p)
16608 newloc->label = last_label;
16609 else
16610 {
16611 ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
16612 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
16613 loclabel_num++;
16614 newloc->label = ggc_strdup (loclabel);
16615 }
16616 newloc->var_loc_note = loc_note;
16617 newloc->next = NULL;
16618
16619 if (cfun && in_cold_section_p)
16620 newloc->section_label = crtl->subsections.cold_section_label;
16621 else
16622 newloc->section_label = text_section_label;
16623
16624 last_var_location_insn = next_real;
16625 last_label = newloc->label;
16626 last_in_cold_section_p = in_cold_section_p;
16627 decl = NOTE_VAR_LOCATION_DECL (loc_note);
16628 add_var_loc_to_decl (decl, newloc);
16629 }
16630
16631 /* We need to reset the locations at the beginning of each
16632 function. We can't do this in the end_function hook, because the
16633 declarations that use the locations won't have been output when
16634 that hook is called. Also compute have_multiple_function_sections here. */
16635
16636 static void
16637 dwarf2out_begin_function (tree fun)
16638 {
16639 htab_empty (decl_loc_table);
16640
16641 if (function_section (fun) != text_section)
16642 have_multiple_function_sections = true;
16643
16644 dwarf2out_note_section_used ();
16645 }
16646
16647 /* Output a label to mark the beginning of a source code line entry
16648 and record information relating to this source line, in
16649 'line_info_table' for later output of the .debug_line section. */
16650
16651 static void
16652 dwarf2out_source_line (unsigned int line, const char *filename,
16653 int discriminator, bool is_stmt)
16654 {
16655 static bool last_is_stmt = true;
16656
16657 if (debug_info_level >= DINFO_LEVEL_NORMAL
16658 && line != 0)
16659 {
16660 int file_num = maybe_emit_file (lookup_filename (filename));
16661
16662 switch_to_section (current_function_section ());
16663
16664 /* If requested, emit something human-readable. */
16665 if (flag_debug_asm)
16666 fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
16667 filename, line);
16668
16669 if (DWARF2_ASM_LINE_DEBUG_INFO)
16670 {
16671 /* Emit the .loc directive understood by GNU as. */
16672 fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
16673 if (is_stmt != last_is_stmt)
16674 {
16675 fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
16676 last_is_stmt = is_stmt;
16677 }
16678 if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
16679 fprintf (asm_out_file, " discriminator %d", discriminator);
16680 fputc ('\n', asm_out_file);
16681
16682 /* Indicate that line number info exists. */
16683 line_info_table_in_use++;
16684 }
16685 else if (function_section (current_function_decl) != text_section)
16686 {
16687 dw_separate_line_info_ref line_info;
16688 targetm.asm_out.internal_label (asm_out_file,
16689 SEPARATE_LINE_CODE_LABEL,
16690 separate_line_info_table_in_use);
16691
16692 /* Expand the line info table if necessary. */
16693 if (separate_line_info_table_in_use
16694 == separate_line_info_table_allocated)
16695 {
16696 separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
16697 separate_line_info_table
16698 = GGC_RESIZEVEC (dw_separate_line_info_entry,
16699 separate_line_info_table,
16700 separate_line_info_table_allocated);
16701 memset (separate_line_info_table
16702 + separate_line_info_table_in_use,
16703 0,
16704 (LINE_INFO_TABLE_INCREMENT
16705 * sizeof (dw_separate_line_info_entry)));
16706 }
16707
16708 /* Add the new entry at the end of the line_info_table. */
16709 line_info
16710 = &separate_line_info_table[separate_line_info_table_in_use++];
16711 line_info->dw_file_num = file_num;
16712 line_info->dw_line_num = line;
16713 line_info->function = current_function_funcdef_no;
16714 }
16715 else
16716 {
16717 dw_line_info_ref line_info;
16718
16719 targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
16720 line_info_table_in_use);
16721
16722 /* Expand the line info table if necessary. */
16723 if (line_info_table_in_use == line_info_table_allocated)
16724 {
16725 line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
16726 line_info_table
16727 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
16728 line_info_table_allocated);
16729 memset (line_info_table + line_info_table_in_use, 0,
16730 LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
16731 }
16732
16733 /* Add the new entry at the end of the line_info_table. */
16734 line_info = &line_info_table[line_info_table_in_use++];
16735 line_info->dw_file_num = file_num;
16736 line_info->dw_line_num = line;
16737 }
16738 }
16739 }
16740
16741 /* Record the beginning of a new source file. */
16742
16743 static void
16744 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
16745 {
16746 if (flag_eliminate_dwarf2_dups)
16747 {
16748 /* Record the beginning of the file for break_out_includes. */
16749 dw_die_ref bincl_die;
16750
16751 bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
16752 add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
16753 }
16754
16755 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
16756 {
16757 int file_num = maybe_emit_file (lookup_filename (filename));
16758
16759 switch_to_section (debug_macinfo_section);
16760 dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
16761 dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
16762 lineno);
16763
16764 dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
16765 }
16766 }
16767
16768 /* Record the end of a source file. */
16769
16770 static void
16771 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
16772 {
16773 if (flag_eliminate_dwarf2_dups)
16774 /* Record the end of the file for break_out_includes. */
16775 new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
16776
16777 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
16778 {
16779 switch_to_section (debug_macinfo_section);
16780 dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
16781 }
16782 }
16783
16784 /* Called from debug_define in toplev.c. The `buffer' parameter contains
16785 the tail part of the directive line, i.e. the part which is past the
16786 initial whitespace, #, whitespace, directive-name, whitespace part. */
16787
16788 static void
16789 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
16790 const char *buffer ATTRIBUTE_UNUSED)
16791 {
16792 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
16793 {
16794 switch_to_section (debug_macinfo_section);
16795 dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
16796 dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
16797 dw2_asm_output_nstring (buffer, -1, "The macro");
16798 }
16799 }
16800
16801 /* Called from debug_undef in toplev.c. The `buffer' parameter contains
16802 the tail part of the directive line, i.e. the part which is past the
16803 initial whitespace, #, whitespace, directive-name, whitespace part. */
16804
16805 static void
16806 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
16807 const char *buffer ATTRIBUTE_UNUSED)
16808 {
16809 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
16810 {
16811 switch_to_section (debug_macinfo_section);
16812 dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
16813 dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
16814 dw2_asm_output_nstring (buffer, -1, "The macro");
16815 }
16816 }
16817
16818 /* Set up for Dwarf output at the start of compilation. */
16819
16820 static void
16821 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
16822 {
16823 /* Allocate the file_table. */
16824 file_table = htab_create_ggc (50, file_table_hash,
16825 file_table_eq, NULL);
16826
16827 /* Allocate the decl_die_table. */
16828 decl_die_table = htab_create_ggc (10, decl_die_table_hash,
16829 decl_die_table_eq, NULL);
16830
16831 /* Allocate the decl_loc_table. */
16832 decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
16833 decl_loc_table_eq, NULL);
16834
16835 /* Allocate the initial hunk of the decl_scope_table. */
16836 decl_scope_table = VEC_alloc (tree, gc, 256);
16837
16838 /* Allocate the initial hunk of the abbrev_die_table. */
16839 abbrev_die_table = GGC_CNEWVEC (dw_die_ref, ABBREV_DIE_TABLE_INCREMENT);
16840 abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
16841 /* Zero-th entry is allocated, but unused. */
16842 abbrev_die_table_in_use = 1;
16843
16844 /* Allocate the initial hunk of the line_info_table. */
16845 line_info_table = GGC_CNEWVEC (dw_line_info_entry, LINE_INFO_TABLE_INCREMENT);
16846 line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
16847
16848 /* Zero-th entry is allocated, but unused. */
16849 line_info_table_in_use = 1;
16850
16851 /* Allocate the pubtypes and pubnames vectors. */
16852 pubname_table = VEC_alloc (pubname_entry, gc, 32);
16853 pubtype_table = VEC_alloc (pubname_entry, gc, 32);
16854
16855 /* Generate the initial DIE for the .debug section. Note that the (string)
16856 value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
16857 will (typically) be a relative pathname and that this pathname should be
16858 taken as being relative to the directory from which the compiler was
16859 invoked when the given (base) source file was compiled. We will fill
16860 in this value in dwarf2out_finish. */
16861 comp_unit_die = gen_compile_unit_die (NULL);
16862
16863 incomplete_types = VEC_alloc (tree, gc, 64);
16864
16865 used_rtx_array = VEC_alloc (rtx, gc, 32);
16866
16867 debug_info_section = get_section (DEBUG_INFO_SECTION,
16868 SECTION_DEBUG, NULL);
16869 debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
16870 SECTION_DEBUG, NULL);
16871 debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
16872 SECTION_DEBUG, NULL);
16873 debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
16874 SECTION_DEBUG, NULL);
16875 debug_line_section = get_section (DEBUG_LINE_SECTION,
16876 SECTION_DEBUG, NULL);
16877 debug_loc_section = get_section (DEBUG_LOC_SECTION,
16878 SECTION_DEBUG, NULL);
16879 debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
16880 SECTION_DEBUG, NULL);
16881 debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
16882 SECTION_DEBUG, NULL);
16883 debug_str_section = get_section (DEBUG_STR_SECTION,
16884 DEBUG_STR_SECTION_FLAGS, NULL);
16885 debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
16886 SECTION_DEBUG, NULL);
16887 debug_frame_section = get_section (DEBUG_FRAME_SECTION,
16888 SECTION_DEBUG, NULL);
16889
16890 ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
16891 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
16892 DEBUG_ABBREV_SECTION_LABEL, 0);
16893 ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
16894 ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
16895 COLD_TEXT_SECTION_LABEL, 0);
16896 ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
16897
16898 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
16899 DEBUG_INFO_SECTION_LABEL, 0);
16900 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
16901 DEBUG_LINE_SECTION_LABEL, 0);
16902 ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
16903 DEBUG_RANGES_SECTION_LABEL, 0);
16904 switch_to_section (debug_abbrev_section);
16905 ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
16906 switch_to_section (debug_info_section);
16907 ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
16908 switch_to_section (debug_line_section);
16909 ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
16910
16911 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
16912 {
16913 switch_to_section (debug_macinfo_section);
16914 ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
16915 DEBUG_MACINFO_SECTION_LABEL, 0);
16916 ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
16917 }
16918
16919 switch_to_section (text_section);
16920 ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
16921 if (flag_reorder_blocks_and_partition)
16922 {
16923 cold_text_section = unlikely_text_section ();
16924 switch_to_section (cold_text_section);
16925 ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
16926 }
16927 }
16928
16929 /* A helper function for dwarf2out_finish called through
16930 ht_forall. Emit one queued .debug_str string. */
16931
16932 static int
16933 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
16934 {
16935 struct indirect_string_node *node = (struct indirect_string_node *) *h;
16936
16937 if (node->form == DW_FORM_strp)
16938 {
16939 switch_to_section (debug_str_section);
16940 ASM_OUTPUT_LABEL (asm_out_file, node->label);
16941 assemble_string (node->str, strlen (node->str) + 1);
16942 }
16943
16944 return 1;
16945 }
16946
16947 #if ENABLE_ASSERT_CHECKING
16948 /* Verify that all marks are clear. */
16949
16950 static void
16951 verify_marks_clear (dw_die_ref die)
16952 {
16953 dw_die_ref c;
16954
16955 gcc_assert (! die->die_mark);
16956 FOR_EACH_CHILD (die, c, verify_marks_clear (c));
16957 }
16958 #endif /* ENABLE_ASSERT_CHECKING */
16959
16960 /* Clear the marks for a die and its children.
16961 Be cool if the mark isn't set. */
16962
16963 static void
16964 prune_unmark_dies (dw_die_ref die)
16965 {
16966 dw_die_ref c;
16967
16968 if (die->die_mark)
16969 die->die_mark = 0;
16970 FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
16971 }
16972
16973 /* Given DIE that we're marking as used, find any other dies
16974 it references as attributes and mark them as used. */
16975
16976 static void
16977 prune_unused_types_walk_attribs (dw_die_ref die)
16978 {
16979 dw_attr_ref a;
16980 unsigned ix;
16981
16982 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
16983 {
16984 if (a->dw_attr_val.val_class == dw_val_class_die_ref)
16985 {
16986 /* A reference to another DIE.
16987 Make sure that it will get emitted. */
16988 prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
16989 }
16990 /* Set the string's refcount to 0 so that prune_unused_types_mark
16991 accounts properly for it. */
16992 if (AT_class (a) == dw_val_class_str)
16993 a->dw_attr_val.v.val_str->refcount = 0;
16994 }
16995 }
16996
16997
16998 /* Mark DIE as being used. If DOKIDS is true, then walk down
16999 to DIE's children. */
17000
17001 static void
17002 prune_unused_types_mark (dw_die_ref die, int dokids)
17003 {
17004 dw_die_ref c;
17005
17006 if (die->die_mark == 0)
17007 {
17008 /* We haven't done this node yet. Mark it as used. */
17009 die->die_mark = 1;
17010
17011 /* We also have to mark its parents as used.
17012 (But we don't want to mark our parents' kids due to this.) */
17013 if (die->die_parent)
17014 prune_unused_types_mark (die->die_parent, 0);
17015
17016 /* Mark any referenced nodes. */
17017 prune_unused_types_walk_attribs (die);
17018
17019 /* If this node is a specification,
17020 also mark the definition, if it exists. */
17021 if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
17022 prune_unused_types_mark (die->die_definition, 1);
17023 }
17024
17025 if (dokids && die->die_mark != 2)
17026 {
17027 /* We need to walk the children, but haven't done so yet.
17028 Remember that we've walked the kids. */
17029 die->die_mark = 2;
17030
17031 /* If this is an array type, we need to make sure our
17032 kids get marked, even if they're types. */
17033 if (die->die_tag == DW_TAG_array_type)
17034 FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
17035 else
17036 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
17037 }
17038 }
17039
17040 /* For local classes, look if any static member functions were emitted
17041 and if so, mark them. */
17042
17043 static void
17044 prune_unused_types_walk_local_classes (dw_die_ref die)
17045 {
17046 dw_die_ref c;
17047
17048 if (die->die_mark == 2)
17049 return;
17050
17051 switch (die->die_tag)
17052 {
17053 case DW_TAG_structure_type:
17054 case DW_TAG_union_type:
17055 case DW_TAG_class_type:
17056 break;
17057
17058 case DW_TAG_subprogram:
17059 if (!get_AT_flag (die, DW_AT_declaration)
17060 || die->die_definition != NULL)
17061 prune_unused_types_mark (die, 1);
17062 return;
17063
17064 default:
17065 return;
17066 }
17067
17068 /* Mark children. */
17069 FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
17070 }
17071
17072 /* Walk the tree DIE and mark types that we actually use. */
17073
17074 static void
17075 prune_unused_types_walk (dw_die_ref die)
17076 {
17077 dw_die_ref c;
17078
17079 /* Don't do anything if this node is already marked and
17080 children have been marked as well. */
17081 if (die->die_mark == 2)
17082 return;
17083
17084 switch (die->die_tag)
17085 {
17086 case DW_TAG_structure_type:
17087 case DW_TAG_union_type:
17088 case DW_TAG_class_type:
17089 if (die->die_perennial_p)
17090 break;
17091
17092 for (c = die->die_parent; c; c = c->die_parent)
17093 if (c->die_tag == DW_TAG_subprogram)
17094 break;
17095
17096 /* Finding used static member functions inside of classes
17097 is needed just for local classes, because for other classes
17098 static member function DIEs with DW_AT_specification
17099 are emitted outside of the DW_TAG_*_type. If we ever change
17100 it, we'd need to call this even for non-local classes. */
17101 if (c)
17102 prune_unused_types_walk_local_classes (die);
17103
17104 /* It's a type node --- don't mark it. */
17105 return;
17106
17107 case DW_TAG_const_type:
17108 case DW_TAG_packed_type:
17109 case DW_TAG_pointer_type:
17110 case DW_TAG_reference_type:
17111 case DW_TAG_volatile_type:
17112 case DW_TAG_typedef:
17113 case DW_TAG_array_type:
17114 case DW_TAG_interface_type:
17115 case DW_TAG_friend:
17116 case DW_TAG_variant_part:
17117 case DW_TAG_enumeration_type:
17118 case DW_TAG_subroutine_type:
17119 case DW_TAG_string_type:
17120 case DW_TAG_set_type:
17121 case DW_TAG_subrange_type:
17122 case DW_TAG_ptr_to_member_type:
17123 case DW_TAG_file_type:
17124 if (die->die_perennial_p)
17125 break;
17126
17127 /* It's a type node --- don't mark it. */
17128 return;
17129
17130 default:
17131 /* Mark everything else. */
17132 break;
17133 }
17134
17135 if (die->die_mark == 0)
17136 {
17137 die->die_mark = 1;
17138
17139 /* Now, mark any dies referenced from here. */
17140 prune_unused_types_walk_attribs (die);
17141 }
17142
17143 die->die_mark = 2;
17144
17145 /* Mark children. */
17146 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
17147 }
17148
17149 /* Increment the string counts on strings referred to from DIE's
17150 attributes. */
17151
17152 static void
17153 prune_unused_types_update_strings (dw_die_ref die)
17154 {
17155 dw_attr_ref a;
17156 unsigned ix;
17157
17158 for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
17159 if (AT_class (a) == dw_val_class_str)
17160 {
17161 struct indirect_string_node *s = a->dw_attr_val.v.val_str;
17162 s->refcount++;
17163 /* Avoid unnecessarily putting strings that are used less than
17164 twice in the hash table. */
17165 if (s->refcount
17166 == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
17167 {
17168 void ** slot;
17169 slot = htab_find_slot_with_hash (debug_str_hash, s->str,
17170 htab_hash_string (s->str),
17171 INSERT);
17172 gcc_assert (*slot == NULL);
17173 *slot = s;
17174 }
17175 }
17176 }
17177
17178 /* Remove from the tree DIE any dies that aren't marked. */
17179
17180 static void
17181 prune_unused_types_prune (dw_die_ref die)
17182 {
17183 dw_die_ref c;
17184
17185 gcc_assert (die->die_mark);
17186 prune_unused_types_update_strings (die);
17187
17188 if (! die->die_child)
17189 return;
17190
17191 c = die->die_child;
17192 do {
17193 dw_die_ref prev = c;
17194 for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
17195 if (c == die->die_child)
17196 {
17197 /* No marked children between 'prev' and the end of the list. */
17198 if (prev == c)
17199 /* No marked children at all. */
17200 die->die_child = NULL;
17201 else
17202 {
17203 prev->die_sib = c->die_sib;
17204 die->die_child = prev;
17205 }
17206 return;
17207 }
17208
17209 if (c != prev->die_sib)
17210 prev->die_sib = c;
17211 prune_unused_types_prune (c);
17212 } while (c != die->die_child);
17213 }
17214
17215
17216 /* Remove dies representing declarations that we never use. */
17217
17218 static void
17219 prune_unused_types (void)
17220 {
17221 unsigned int i;
17222 limbo_die_node *node;
17223 pubname_ref pub;
17224
17225 #if ENABLE_ASSERT_CHECKING
17226 /* All the marks should already be clear. */
17227 verify_marks_clear (comp_unit_die);
17228 for (node = limbo_die_list; node; node = node->next)
17229 verify_marks_clear (node->die);
17230 #endif /* ENABLE_ASSERT_CHECKING */
17231
17232 /* Set the mark on nodes that are actually used. */
17233 prune_unused_types_walk (comp_unit_die);
17234 for (node = limbo_die_list; node; node = node->next)
17235 prune_unused_types_walk (node->die);
17236
17237 /* Also set the mark on nodes referenced from the
17238 pubname_table or arange_table. */
17239 for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
17240 prune_unused_types_mark (pub->die, 1);
17241 for (i = 0; i < arange_table_in_use; i++)
17242 prune_unused_types_mark (arange_table[i], 1);
17243
17244 /* Get rid of nodes that aren't marked; and update the string counts. */
17245 if (debug_str_hash)
17246 htab_empty (debug_str_hash);
17247 prune_unused_types_prune (comp_unit_die);
17248 for (node = limbo_die_list; node; node = node->next)
17249 prune_unused_types_prune (node->die);
17250
17251 /* Leave the marks clear. */
17252 prune_unmark_dies (comp_unit_die);
17253 for (node = limbo_die_list; node; node = node->next)
17254 prune_unmark_dies (node->die);
17255 }
17256
17257 /* Set the parameter to true if there are any relative pathnames in
17258 the file table. */
17259 static int
17260 file_table_relative_p (void ** slot, void *param)
17261 {
17262 bool *p = (bool *) param;
17263 struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
17264 if (!IS_ABSOLUTE_PATH (d->filename))
17265 {
17266 *p = true;
17267 return 0;
17268 }
17269 return 1;
17270 }
17271
17272 /* Move a DW_AT_MIPS_linkage_name attribute just added to dw_die_ref
17273 to the location it would have been added, should we know its
17274 DECL_ASSEMBLER_NAME when we added other attributes. This will
17275 probably improve compactness of debug info, removing equivalent
17276 abbrevs, and hide any differences caused by deferring the
17277 computation of the assembler name, triggered by e.g. PCH. */
17278
17279 static inline void
17280 move_linkage_attr (dw_die_ref die)
17281 {
17282 unsigned ix = VEC_length (dw_attr_node, die->die_attr);
17283 dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
17284
17285 gcc_assert (linkage.dw_attr == DW_AT_MIPS_linkage_name);
17286
17287 while (--ix > 0)
17288 {
17289 dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
17290
17291 if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
17292 break;
17293 }
17294
17295 if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
17296 {
17297 VEC_pop (dw_attr_node, die->die_attr);
17298 VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
17299 }
17300 }
17301
17302 /* Output stuff that dwarf requires at the end of every file,
17303 and generate the DWARF-2 debugging info. */
17304
17305 static void
17306 dwarf2out_finish (const char *filename)
17307 {
17308 limbo_die_node *node, *next_node;
17309 dw_die_ref die = 0;
17310 unsigned int i;
17311
17312 /* Add the name for the main input file now. We delayed this from
17313 dwarf2out_init to avoid complications with PCH. */
17314 add_name_attribute (comp_unit_die, remap_debug_filename (filename));
17315 if (!IS_ABSOLUTE_PATH (filename))
17316 add_comp_dir_attribute (comp_unit_die);
17317 else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
17318 {
17319 bool p = false;
17320 htab_traverse (file_table, file_table_relative_p, &p);
17321 if (p)
17322 add_comp_dir_attribute (comp_unit_die);
17323 }
17324
17325 for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
17326 {
17327 add_location_or_const_value_attribute (
17328 VEC_index (deferred_locations, deferred_locations_list, i)->die,
17329 VEC_index (deferred_locations, deferred_locations_list, i)->variable,
17330 DW_AT_location);
17331 }
17332
17333 /* Traverse the limbo die list, and add parent/child links. The only
17334 dies without parents that should be here are concrete instances of
17335 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
17336 For concrete instances, we can get the parent die from the abstract
17337 instance. */
17338 for (node = limbo_die_list; node; node = next_node)
17339 {
17340 next_node = node->next;
17341 die = node->die;
17342
17343 if (die->die_parent == NULL)
17344 {
17345 dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
17346
17347 if (origin)
17348 add_child_die (origin->die_parent, die);
17349 else if (die == comp_unit_die)
17350 ;
17351 else if (errorcount > 0 || sorrycount > 0)
17352 /* It's OK to be confused by errors in the input. */
17353 add_child_die (comp_unit_die, die);
17354 else
17355 {
17356 /* In certain situations, the lexical block containing a
17357 nested function can be optimized away, which results
17358 in the nested function die being orphaned. Likewise
17359 with the return type of that nested function. Force
17360 this to be a child of the containing function.
17361
17362 It may happen that even the containing function got fully
17363 inlined and optimized out. In that case we are lost and
17364 assign the empty child. This should not be big issue as
17365 the function is likely unreachable too. */
17366 tree context = NULL_TREE;
17367
17368 gcc_assert (node->created_for);
17369
17370 if (DECL_P (node->created_for))
17371 context = DECL_CONTEXT (node->created_for);
17372 else if (TYPE_P (node->created_for))
17373 context = TYPE_CONTEXT (node->created_for);
17374
17375 gcc_assert (context
17376 && (TREE_CODE (context) == FUNCTION_DECL
17377 || TREE_CODE (context) == NAMESPACE_DECL));
17378
17379 origin = lookup_decl_die (context);
17380 if (origin)
17381 add_child_die (origin, die);
17382 else
17383 add_child_die (comp_unit_die, die);
17384 }
17385 }
17386 }
17387
17388 limbo_die_list = NULL;
17389
17390 for (node = deferred_asm_name; node; node = node->next)
17391 {
17392 tree decl = node->created_for;
17393 if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
17394 {
17395 add_AT_string (node->die, DW_AT_MIPS_linkage_name,
17396 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
17397 move_linkage_attr (node->die);
17398 }
17399 }
17400
17401 deferred_asm_name = NULL;
17402
17403 /* Walk through the list of incomplete types again, trying once more to
17404 emit full debugging info for them. */
17405 retry_incomplete_types ();
17406
17407 if (flag_eliminate_unused_debug_types)
17408 prune_unused_types ();
17409
17410 /* Generate separate CUs for each of the include files we've seen.
17411 They will go into limbo_die_list. */
17412 if (flag_eliminate_dwarf2_dups)
17413 break_out_includes (comp_unit_die);
17414
17415 /* Traverse the DIE's and add add sibling attributes to those DIE's
17416 that have children. */
17417 add_sibling_attributes (comp_unit_die);
17418 for (node = limbo_die_list; node; node = node->next)
17419 add_sibling_attributes (node->die);
17420
17421 /* Output a terminator label for the .text section. */
17422 switch_to_section (text_section);
17423 targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
17424 if (flag_reorder_blocks_and_partition)
17425 {
17426 switch_to_section (unlikely_text_section ());
17427 targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
17428 }
17429
17430 /* We can only use the low/high_pc attributes if all of the code was
17431 in .text. */
17432 if (!have_multiple_function_sections)
17433 {
17434 add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
17435 add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
17436 }
17437
17438 else
17439 {
17440 unsigned fde_idx = 0;
17441
17442 /* We need to give .debug_loc and .debug_ranges an appropriate
17443 "base address". Use zero so that these addresses become
17444 absolute. Historically, we've emitted the unexpected
17445 DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
17446 Emit both to give time for other tools to adapt. */
17447 add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
17448 add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
17449
17450 add_AT_range_list (comp_unit_die, DW_AT_ranges,
17451 add_ranges_by_labels (text_section_label,
17452 text_end_label));
17453 if (flag_reorder_blocks_and_partition)
17454 add_ranges_by_labels (cold_text_section_label,
17455 cold_end_label);
17456
17457 for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
17458 {
17459 dw_fde_ref fde = &fde_table[fde_idx];
17460
17461 if (fde->dw_fde_switched_sections)
17462 {
17463 if (!fde->in_std_section)
17464 add_ranges_by_labels (fde->dw_fde_hot_section_label,
17465 fde->dw_fde_hot_section_end_label);
17466 if (!fde->cold_in_std_section)
17467 add_ranges_by_labels (fde->dw_fde_unlikely_section_label,
17468 fde->dw_fde_unlikely_section_end_label);
17469 }
17470 else if (!fde->in_std_section)
17471 add_ranges_by_labels (fde->dw_fde_begin,
17472 fde->dw_fde_end);
17473 }
17474
17475 add_ranges (NULL);
17476 }
17477
17478 /* Output location list section if necessary. */
17479 if (have_location_lists)
17480 {
17481 /* Output the location lists info. */
17482 switch_to_section (debug_loc_section);
17483 ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
17484 DEBUG_LOC_SECTION_LABEL, 0);
17485 ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
17486 output_location_lists (die);
17487 }
17488
17489 if (debug_info_level >= DINFO_LEVEL_NORMAL)
17490 add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
17491 debug_line_section_label);
17492
17493 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
17494 add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
17495
17496 /* Output all of the compilation units. We put the main one last so that
17497 the offsets are available to output_pubnames. */
17498 for (node = limbo_die_list; node; node = node->next)
17499 output_comp_unit (node->die, 0);
17500
17501 /* Output the main compilation unit if non-empty or if .debug_macinfo
17502 has been emitted. */
17503 output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
17504
17505 /* Output the abbreviation table. */
17506 switch_to_section (debug_abbrev_section);
17507 output_abbrev_section ();
17508
17509 /* Output public names table if necessary. */
17510 if (!VEC_empty (pubname_entry, pubname_table))
17511 {
17512 switch_to_section (debug_pubnames_section);
17513 output_pubnames (pubname_table);
17514 }
17515
17516 /* Output public types table if necessary. */
17517 /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
17518 It shouldn't hurt to emit it always, since pure DWARF2 consumers
17519 simply won't look for the section. */
17520 if (!VEC_empty (pubname_entry, pubtype_table))
17521 {
17522 switch_to_section (debug_pubtypes_section);
17523 output_pubnames (pubtype_table);
17524 }
17525
17526 /* Output the address range information. We only put functions in the arange
17527 table, so don't write it out if we don't have any. */
17528 if (fde_table_in_use)
17529 {
17530 switch_to_section (debug_aranges_section);
17531 output_aranges ();
17532 }
17533
17534 /* Output ranges section if necessary. */
17535 if (ranges_table_in_use)
17536 {
17537 switch_to_section (debug_ranges_section);
17538 ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
17539 output_ranges ();
17540 }
17541
17542 /* Output the source line correspondence table. We must do this
17543 even if there is no line information. Otherwise, on an empty
17544 translation unit, we will generate a present, but empty,
17545 .debug_info section. IRIX 6.5 `nm' will then complain when
17546 examining the file. This is done late so that any filenames
17547 used by the debug_info section are marked as 'used'. */
17548 if (! DWARF2_ASM_LINE_DEBUG_INFO)
17549 {
17550 switch_to_section (debug_line_section);
17551 output_line_info ();
17552 }
17553
17554 /* Have to end the macro section. */
17555 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
17556 {
17557 switch_to_section (debug_macinfo_section);
17558 dw2_asm_output_data (1, 0, "End compilation unit");
17559 }
17560
17561 /* If we emitted any DW_FORM_strp form attribute, output the string
17562 table too. */
17563 if (debug_str_hash)
17564 htab_traverse (debug_str_hash, output_indirect_string, NULL);
17565 }
17566 #else
17567
17568 /* This should never be used, but its address is needed for comparisons. */
17569 const struct gcc_debug_hooks dwarf2_debug_hooks =
17570 {
17571 0, /* init */
17572 0, /* finish */
17573 0, /* define */
17574 0, /* undef */
17575 0, /* start_source_file */
17576 0, /* end_source_file */
17577 0, /* begin_block */
17578 0, /* end_block */
17579 0, /* ignore_block */
17580 0, /* source_line */
17581 0, /* begin_prologue */
17582 0, /* end_prologue */
17583 0, /* end_epilogue */
17584 0, /* begin_function */
17585 0, /* end_function */
17586 0, /* function_decl */
17587 0, /* global_decl */
17588 0, /* type_decl */
17589 0, /* imported_module_or_decl */
17590 0, /* deferred_inline_function */
17591 0, /* outlining_inline_function */
17592 0, /* label */
17593 0, /* handle_pch */
17594 0, /* var_location */
17595 0, /* switch_text_section */
17596 0, /* set_name */
17597 0 /* start_end_main_source_file */
17598 };
17599
17600 #endif /* DWARF2_DEBUGGING_INFO */
17601
17602 #include "gt-dwarf2out.h"