re PR debug/11983 (ICE in dwarf-2 on code using altivec)
[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 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 2, 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 COPYING. If not, write to the Free
22 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 02111-1307, USA. */
24
25 /* TODO: Emit .debug_line header even when there are no functions, since
26 the file numbers are used by .debug_info. Alternately, leave
27 out locations for types and decls.
28 Avoid talking about ctors and op= for PODs.
29 Factor out common prologue sequences into multiple CIEs. */
30
31 /* The first part of this file deals with the DWARF 2 frame unwind
32 information, which is also used by the GCC efficient exception handling
33 mechanism. The second part, controlled only by an #ifdef
34 DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
35 information. */
36
37 #include "config.h"
38 #include "system.h"
39 #include "coretypes.h"
40 #include "tm.h"
41 #include "tree.h"
42 #include "flags.h"
43 #include "real.h"
44 #include "rtl.h"
45 #include "hard-reg-set.h"
46 #include "regs.h"
47 #include "insn-config.h"
48 #include "reload.h"
49 #include "function.h"
50 #include "output.h"
51 #include "expr.h"
52 #include "libfuncs.h"
53 #include "except.h"
54 #include "dwarf2.h"
55 #include "dwarf2out.h"
56 #include "dwarf2asm.h"
57 #include "toplev.h"
58 #include "varray.h"
59 #include "ggc.h"
60 #include "md5.h"
61 #include "tm_p.h"
62 #include "diagnostic.h"
63 #include "debug.h"
64 #include "target.h"
65 #include "langhooks.h"
66 #include "hashtab.h"
67 #include "cgraph.h"
68 #include "input.h"
69
70 #ifdef DWARF2_DEBUGGING_INFO
71 static void dwarf2out_source_line (unsigned int, const char *);
72 #endif
73
74 /* DWARF2 Abbreviation Glossary:
75 CFA = Canonical Frame Address
76 a fixed address on the stack which identifies a call frame.
77 We define it to be the value of SP just before the call insn.
78 The CFA register and offset, which may change during the course
79 of the function, are used to calculate its value at runtime.
80 CFI = Call Frame Instruction
81 an instruction for the DWARF2 abstract machine
82 CIE = Common Information Entry
83 information describing information common to one or more FDEs
84 DIE = Debugging Information Entry
85 FDE = Frame Description Entry
86 information describing the stack call frame, in particular,
87 how to restore registers
88
89 DW_CFA_... = DWARF2 CFA call frame instruction
90 DW_TAG_... = DWARF2 DIE tag */
91
92 /* Decide whether we want to emit frame unwind information for the current
93 translation unit. */
94
95 int
96 dwarf2out_do_frame (void)
97 {
98 return (write_symbols == DWARF2_DEBUG
99 || write_symbols == VMS_AND_DWARF2_DEBUG
100 #ifdef DWARF2_FRAME_INFO
101 || DWARF2_FRAME_INFO
102 #endif
103 #ifdef DWARF2_UNWIND_INFO
104 || flag_unwind_tables
105 || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)
106 #endif
107 );
108 }
109
110 /* The size of the target's pointer type. */
111 #ifndef PTR_SIZE
112 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
113 #endif
114
115 /* Various versions of targetm.eh_frame_section. Note these must appear
116 outside the DWARF2_DEBUGGING_INFO || DWARF2_UNWIND_INFO macro guards. */
117
118 /* Version of targetm.eh_frame_section for systems with named sections. */
119 void
120 named_section_eh_frame_section (void)
121 {
122 #ifdef EH_FRAME_SECTION_NAME
123 #ifdef HAVE_LD_RO_RW_SECTION_MIXING
124 int fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
125 int per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
126 int lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
127 int flags;
128
129 flags = (! flag_pic
130 || ((fde_encoding & 0x70) != DW_EH_PE_absptr
131 && (fde_encoding & 0x70) != DW_EH_PE_aligned
132 && (per_encoding & 0x70) != DW_EH_PE_absptr
133 && (per_encoding & 0x70) != DW_EH_PE_aligned
134 && (lsda_encoding & 0x70) != DW_EH_PE_absptr
135 && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
136 ? 0 : SECTION_WRITE;
137 named_section_flags (EH_FRAME_SECTION_NAME, flags);
138 #else
139 named_section_flags (EH_FRAME_SECTION_NAME, SECTION_WRITE);
140 #endif
141 #endif
142 }
143
144 /* Version of targetm.eh_frame_section for systems using collect2. */
145 void
146 collect2_eh_frame_section (void)
147 {
148 tree label = get_file_function_name ('F');
149
150 data_section ();
151 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
152 (*targetm.asm_out.globalize_label) (asm_out_file, IDENTIFIER_POINTER (label));
153 ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
154 }
155
156 /* Default version of targetm.eh_frame_section. */
157 void
158 default_eh_frame_section (void)
159 {
160 #ifdef EH_FRAME_SECTION_NAME
161 named_section_eh_frame_section ();
162 #else
163 collect2_eh_frame_section ();
164 #endif
165 }
166
167 /* Array of RTXes referenced by the debugging information, which therefore
168 must be kept around forever. */
169 static GTY(()) varray_type used_rtx_varray;
170
171 /* A pointer to the base of a list of incomplete types which might be
172 completed at some later time. incomplete_types_list needs to be a VARRAY
173 because we want to tell the garbage collector about it. */
174 static GTY(()) varray_type incomplete_types;
175
176 /* A pointer to the base of a table of references to declaration
177 scopes. This table is a display which tracks the nesting
178 of declaration scopes at the current scope and containing
179 scopes. This table is used to find the proper place to
180 define type declaration DIE's. */
181 static GTY(()) varray_type decl_scope_table;
182
183 /* How to start an assembler comment. */
184 #ifndef ASM_COMMENT_START
185 #define ASM_COMMENT_START ";#"
186 #endif
187
188 typedef struct dw_cfi_struct *dw_cfi_ref;
189 typedef struct dw_fde_struct *dw_fde_ref;
190 typedef union dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
191
192 /* Call frames are described using a sequence of Call Frame
193 Information instructions. The register number, offset
194 and address fields are provided as possible operands;
195 their use is selected by the opcode field. */
196
197 enum dw_cfi_oprnd_type {
198 dw_cfi_oprnd_unused,
199 dw_cfi_oprnd_reg_num,
200 dw_cfi_oprnd_offset,
201 dw_cfi_oprnd_addr,
202 dw_cfi_oprnd_loc
203 };
204
205 typedef union dw_cfi_oprnd_struct GTY(())
206 {
207 unsigned long GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
208 HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
209 const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
210 struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
211 }
212 dw_cfi_oprnd;
213
214 typedef struct dw_cfi_struct GTY(())
215 {
216 dw_cfi_ref dw_cfi_next;
217 enum dwarf_call_frame_info dw_cfi_opc;
218 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
219 dw_cfi_oprnd1;
220 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
221 dw_cfi_oprnd2;
222 }
223 dw_cfi_node;
224
225 /* This is how we define the location of the CFA. We use to handle it
226 as REG + OFFSET all the time, but now it can be more complex.
227 It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
228 Instead of passing around REG and OFFSET, we pass a copy
229 of this structure. */
230 typedef struct cfa_loc GTY(())
231 {
232 unsigned long reg;
233 HOST_WIDE_INT offset;
234 HOST_WIDE_INT base_offset;
235 int indirect; /* 1 if CFA is accessed via a dereference. */
236 } dw_cfa_location;
237
238 /* All call frame descriptions (FDE's) in the GCC generated DWARF
239 refer to a single Common Information Entry (CIE), defined at
240 the beginning of the .debug_frame section. This use of a single
241 CIE obviates the need to keep track of multiple CIE's
242 in the DWARF generation routines below. */
243
244 typedef struct dw_fde_struct GTY(())
245 {
246 const char *dw_fde_begin;
247 const char *dw_fde_current_label;
248 const char *dw_fde_end;
249 dw_cfi_ref dw_fde_cfi;
250 unsigned funcdef_number;
251 unsigned all_throwers_are_sibcalls : 1;
252 unsigned nothrow : 1;
253 unsigned uses_eh_lsda : 1;
254 }
255 dw_fde_node;
256
257 /* Maximum size (in bytes) of an artificially generated label. */
258 #define MAX_ARTIFICIAL_LABEL_BYTES 30
259
260 /* The size of addresses as they appear in the Dwarf 2 data.
261 Some architectures use word addresses to refer to code locations,
262 but Dwarf 2 info always uses byte addresses. On such machines,
263 Dwarf 2 addresses need to be larger than the architecture's
264 pointers. */
265 #ifndef DWARF2_ADDR_SIZE
266 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
267 #endif
268
269 /* The size in bytes of a DWARF field indicating an offset or length
270 relative to a debug info section, specified to be 4 bytes in the
271 DWARF-2 specification. The SGI/MIPS ABI defines it to be the same
272 as PTR_SIZE. */
273
274 #ifndef DWARF_OFFSET_SIZE
275 #define DWARF_OFFSET_SIZE 4
276 #endif
277
278 /* According to the (draft) DWARF 3 specification, the initial length
279 should either be 4 or 12 bytes. When it's 12 bytes, the first 4
280 bytes are 0xffffffff, followed by the length stored in the next 8
281 bytes.
282
283 However, the SGI/MIPS ABI uses an initial length which is equal to
284 DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
285
286 #ifndef DWARF_INITIAL_LENGTH_SIZE
287 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
288 #endif
289
290 #define DWARF_VERSION 2
291
292 /* Round SIZE up to the nearest BOUNDARY. */
293 #define DWARF_ROUND(SIZE,BOUNDARY) \
294 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
295
296 /* Offsets recorded in opcodes are a multiple of this alignment factor. */
297 #ifndef DWARF_CIE_DATA_ALIGNMENT
298 #ifdef STACK_GROWS_DOWNWARD
299 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
300 #else
301 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
302 #endif
303 #endif
304
305 /* A pointer to the base of a table that contains frame description
306 information for each routine. */
307 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
308
309 /* Number of elements currently allocated for fde_table. */
310 static GTY(()) unsigned fde_table_allocated;
311
312 /* Number of elements in fde_table currently in use. */
313 static GTY(()) unsigned fde_table_in_use;
314
315 /* Size (in elements) of increments by which we may expand the
316 fde_table. */
317 #define FDE_TABLE_INCREMENT 256
318
319 /* A list of call frame insns for the CIE. */
320 static GTY(()) dw_cfi_ref cie_cfi_head;
321
322 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
323 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
324 attribute that accelerates the lookup of the FDE associated
325 with the subprogram. This variable holds the table index of the FDE
326 associated with the current function (body) definition. */
327 static unsigned current_funcdef_fde;
328 #endif
329
330 struct indirect_string_node GTY(())
331 {
332 const char *str;
333 unsigned int refcount;
334 unsigned int form;
335 char *label;
336 };
337
338 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
339
340 static GTY(()) int dw2_string_counter;
341 static GTY(()) unsigned long dwarf2out_cfi_label_num;
342
343 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
344
345 /* Forward declarations for functions defined in this file. */
346
347 static char *stripattributes (const char *);
348 static const char *dwarf_cfi_name (unsigned);
349 static dw_cfi_ref new_cfi (void);
350 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
351 static void add_fde_cfi (const char *, dw_cfi_ref);
352 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *);
353 static void lookup_cfa (dw_cfa_location *);
354 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
355 static void initial_return_save (rtx);
356 static HOST_WIDE_INT stack_adjust_offset (rtx);
357 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
358 static void output_call_frame_info (int);
359 static void dwarf2out_stack_adjust (rtx);
360 static void queue_reg_save (const char *, rtx, HOST_WIDE_INT);
361 static void flush_queued_reg_saves (void);
362 static bool clobbers_queued_reg_save (rtx);
363 static void dwarf2out_frame_debug_expr (rtx, const char *);
364
365 /* Support for complex CFA locations. */
366 static void output_cfa_loc (dw_cfi_ref);
367 static void get_cfa_from_loc_descr (dw_cfa_location *,
368 struct dw_loc_descr_struct *);
369 static struct dw_loc_descr_struct *build_cfa_loc
370 (dw_cfa_location *);
371 static void def_cfa_1 (const char *, dw_cfa_location *);
372
373 /* How to start an assembler comment. */
374 #ifndef ASM_COMMENT_START
375 #define ASM_COMMENT_START ";#"
376 #endif
377
378 /* Data and reference forms for relocatable data. */
379 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
380 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
381
382 #ifndef DEBUG_FRAME_SECTION
383 #define DEBUG_FRAME_SECTION ".debug_frame"
384 #endif
385
386 #ifndef FUNC_BEGIN_LABEL
387 #define FUNC_BEGIN_LABEL "LFB"
388 #endif
389
390 #ifndef FUNC_END_LABEL
391 #define FUNC_END_LABEL "LFE"
392 #endif
393
394 #define FRAME_BEGIN_LABEL "Lframe"
395 #define CIE_AFTER_SIZE_LABEL "LSCIE"
396 #define CIE_END_LABEL "LECIE"
397 #define FDE_LABEL "LSFDE"
398 #define FDE_AFTER_SIZE_LABEL "LASFDE"
399 #define FDE_END_LABEL "LEFDE"
400 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
401 #define LINE_NUMBER_END_LABEL "LELT"
402 #define LN_PROLOG_AS_LABEL "LASLTP"
403 #define LN_PROLOG_END_LABEL "LELTP"
404 #define DIE_LABEL_PREFIX "DW"
405
406 /* The DWARF 2 CFA column which tracks the return address. Normally this
407 is the column for PC, or the first column after all of the hard
408 registers. */
409 #ifndef DWARF_FRAME_RETURN_COLUMN
410 #ifdef PC_REGNUM
411 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM)
412 #else
413 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGISTERS
414 #endif
415 #endif
416
417 /* The mapping from gcc register number to DWARF 2 CFA column number. By
418 default, we just provide columns for all registers. */
419 #ifndef DWARF_FRAME_REGNUM
420 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
421 #endif
422
423 /* The offset from the incoming value of %sp to the top of the stack frame
424 for the current function. */
425 #ifndef INCOMING_FRAME_SP_OFFSET
426 #define INCOMING_FRAME_SP_OFFSET 0
427 #endif
428 \f
429 /* Hook used by __throw. */
430
431 rtx
432 expand_builtin_dwarf_sp_column (void)
433 {
434 return GEN_INT (DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
435 }
436
437 /* Return a pointer to a copy of the section string name S with all
438 attributes stripped off, and an asterisk prepended (for assemble_name). */
439
440 static inline char *
441 stripattributes (const char *s)
442 {
443 char *stripped = xmalloc (strlen (s) + 2);
444 char *p = stripped;
445
446 *p++ = '*';
447
448 while (*s && *s != ',')
449 *p++ = *s++;
450
451 *p = '\0';
452 return stripped;
453 }
454
455 /* Generate code to initialize the register size table. */
456
457 void
458 expand_builtin_init_dwarf_reg_sizes (tree address)
459 {
460 int i;
461 enum machine_mode mode = TYPE_MODE (char_type_node);
462 rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0);
463 rtx mem = gen_rtx_MEM (BLKmode, addr);
464 bool wrote_return_column = false;
465
466 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
467 if (DWARF_FRAME_REGNUM (i) < DWARF_FRAME_REGISTERS)
468 {
469 HOST_WIDE_INT offset = DWARF_FRAME_REGNUM (i) * GET_MODE_SIZE (mode);
470 enum machine_mode save_mode = reg_raw_mode[i];
471 HOST_WIDE_INT size;
472
473 if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
474 save_mode = choose_hard_reg_mode (i, 1, true);
475 if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
476 {
477 if (save_mode == VOIDmode)
478 continue;
479 wrote_return_column = true;
480 }
481 size = GET_MODE_SIZE (save_mode);
482 if (offset < 0)
483 continue;
484
485 emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
486 }
487
488 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
489 if (! wrote_return_column)
490 abort ();
491 i = DWARF_ALT_FRAME_RETURN_COLUMN;
492 wrote_return_column = false;
493 #else
494 i = DWARF_FRAME_RETURN_COLUMN;
495 #endif
496
497 if (! wrote_return_column)
498 {
499 enum machine_mode save_mode = Pmode;
500 HOST_WIDE_INT offset = i * GET_MODE_SIZE (mode);
501 HOST_WIDE_INT size = GET_MODE_SIZE (save_mode);
502 emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
503 }
504 }
505
506 /* Convert a DWARF call frame info. operation to its string name */
507
508 static const char *
509 dwarf_cfi_name (unsigned int cfi_opc)
510 {
511 switch (cfi_opc)
512 {
513 case DW_CFA_advance_loc:
514 return "DW_CFA_advance_loc";
515 case DW_CFA_offset:
516 return "DW_CFA_offset";
517 case DW_CFA_restore:
518 return "DW_CFA_restore";
519 case DW_CFA_nop:
520 return "DW_CFA_nop";
521 case DW_CFA_set_loc:
522 return "DW_CFA_set_loc";
523 case DW_CFA_advance_loc1:
524 return "DW_CFA_advance_loc1";
525 case DW_CFA_advance_loc2:
526 return "DW_CFA_advance_loc2";
527 case DW_CFA_advance_loc4:
528 return "DW_CFA_advance_loc4";
529 case DW_CFA_offset_extended:
530 return "DW_CFA_offset_extended";
531 case DW_CFA_restore_extended:
532 return "DW_CFA_restore_extended";
533 case DW_CFA_undefined:
534 return "DW_CFA_undefined";
535 case DW_CFA_same_value:
536 return "DW_CFA_same_value";
537 case DW_CFA_register:
538 return "DW_CFA_register";
539 case DW_CFA_remember_state:
540 return "DW_CFA_remember_state";
541 case DW_CFA_restore_state:
542 return "DW_CFA_restore_state";
543 case DW_CFA_def_cfa:
544 return "DW_CFA_def_cfa";
545 case DW_CFA_def_cfa_register:
546 return "DW_CFA_def_cfa_register";
547 case DW_CFA_def_cfa_offset:
548 return "DW_CFA_def_cfa_offset";
549
550 /* DWARF 3 */
551 case DW_CFA_def_cfa_expression:
552 return "DW_CFA_def_cfa_expression";
553 case DW_CFA_expression:
554 return "DW_CFA_expression";
555 case DW_CFA_offset_extended_sf:
556 return "DW_CFA_offset_extended_sf";
557 case DW_CFA_def_cfa_sf:
558 return "DW_CFA_def_cfa_sf";
559 case DW_CFA_def_cfa_offset_sf:
560 return "DW_CFA_def_cfa_offset_sf";
561
562 /* SGI/MIPS specific */
563 case DW_CFA_MIPS_advance_loc8:
564 return "DW_CFA_MIPS_advance_loc8";
565
566 /* GNU extensions */
567 case DW_CFA_GNU_window_save:
568 return "DW_CFA_GNU_window_save";
569 case DW_CFA_GNU_args_size:
570 return "DW_CFA_GNU_args_size";
571 case DW_CFA_GNU_negative_offset_extended:
572 return "DW_CFA_GNU_negative_offset_extended";
573
574 default:
575 return "DW_CFA_<unknown>";
576 }
577 }
578
579 /* Return a pointer to a newly allocated Call Frame Instruction. */
580
581 static inline dw_cfi_ref
582 new_cfi (void)
583 {
584 dw_cfi_ref cfi = ggc_alloc (sizeof (dw_cfi_node));
585
586 cfi->dw_cfi_next = NULL;
587 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
588 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
589
590 return cfi;
591 }
592
593 /* Add a Call Frame Instruction to list of instructions. */
594
595 static inline void
596 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
597 {
598 dw_cfi_ref *p;
599
600 /* Find the end of the chain. */
601 for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
602 ;
603
604 *p = cfi;
605 }
606
607 /* Generate a new label for the CFI info to refer to. */
608
609 char *
610 dwarf2out_cfi_label (void)
611 {
612 static char label[20];
613
614 ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
615 ASM_OUTPUT_LABEL (asm_out_file, label);
616 return label;
617 }
618
619 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
620 or to the CIE if LABEL is NULL. */
621
622 static void
623 add_fde_cfi (const char *label, dw_cfi_ref cfi)
624 {
625 if (label)
626 {
627 dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
628
629 if (*label == 0)
630 label = dwarf2out_cfi_label ();
631
632 if (fde->dw_fde_current_label == NULL
633 || strcmp (label, fde->dw_fde_current_label) != 0)
634 {
635 dw_cfi_ref xcfi;
636
637 fde->dw_fde_current_label = label = xstrdup (label);
638
639 /* Set the location counter to the new label. */
640 xcfi = new_cfi ();
641 xcfi->dw_cfi_opc = DW_CFA_advance_loc4;
642 xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
643 add_cfi (&fde->dw_fde_cfi, xcfi);
644 }
645
646 add_cfi (&fde->dw_fde_cfi, cfi);
647 }
648
649 else
650 add_cfi (&cie_cfi_head, cfi);
651 }
652
653 /* Subroutine of lookup_cfa. */
654
655 static inline void
656 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc)
657 {
658 switch (cfi->dw_cfi_opc)
659 {
660 case DW_CFA_def_cfa_offset:
661 loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
662 break;
663 case DW_CFA_def_cfa_register:
664 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
665 break;
666 case DW_CFA_def_cfa:
667 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
668 loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
669 break;
670 case DW_CFA_def_cfa_expression:
671 get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
672 break;
673 default:
674 break;
675 }
676 }
677
678 /* Find the previous value for the CFA. */
679
680 static void
681 lookup_cfa (dw_cfa_location *loc)
682 {
683 dw_cfi_ref cfi;
684
685 loc->reg = (unsigned long) -1;
686 loc->offset = 0;
687 loc->indirect = 0;
688 loc->base_offset = 0;
689
690 for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
691 lookup_cfa_1 (cfi, loc);
692
693 if (fde_table_in_use)
694 {
695 dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
696 for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
697 lookup_cfa_1 (cfi, loc);
698 }
699 }
700
701 /* The current rule for calculating the DWARF2 canonical frame address. */
702 static dw_cfa_location cfa;
703
704 /* The register used for saving registers to the stack, and its offset
705 from the CFA. */
706 static dw_cfa_location cfa_store;
707
708 /* The running total of the size of arguments pushed onto the stack. */
709 static HOST_WIDE_INT args_size;
710
711 /* The last args_size we actually output. */
712 static HOST_WIDE_INT old_args_size;
713
714 /* Entry point to update the canonical frame address (CFA).
715 LABEL is passed to add_fde_cfi. The value of CFA is now to be
716 calculated from REG+OFFSET. */
717
718 void
719 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
720 {
721 dw_cfa_location loc;
722 loc.indirect = 0;
723 loc.base_offset = 0;
724 loc.reg = reg;
725 loc.offset = offset;
726 def_cfa_1 (label, &loc);
727 }
728
729 /* This routine does the actual work. The CFA is now calculated from
730 the dw_cfa_location structure. */
731
732 static void
733 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
734 {
735 dw_cfi_ref cfi;
736 dw_cfa_location old_cfa, loc;
737
738 cfa = *loc_p;
739 loc = *loc_p;
740
741 if (cfa_store.reg == loc.reg && loc.indirect == 0)
742 cfa_store.offset = loc.offset;
743
744 loc.reg = DWARF_FRAME_REGNUM (loc.reg);
745 lookup_cfa (&old_cfa);
746
747 /* If nothing changed, no need to issue any call frame instructions. */
748 if (loc.reg == old_cfa.reg && loc.offset == old_cfa.offset
749 && loc.indirect == old_cfa.indirect
750 && (loc.indirect == 0 || loc.base_offset == old_cfa.base_offset))
751 return;
752
753 cfi = new_cfi ();
754
755 if (loc.reg == old_cfa.reg && !loc.indirect)
756 {
757 /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction,
758 indicating the CFA register did not change but the offset
759 did. */
760 cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
761 cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
762 }
763
764 #ifndef MIPS_DEBUGGING_INFO /* SGI dbx thinks this means no offset. */
765 else if (loc.offset == old_cfa.offset && old_cfa.reg != (unsigned long) -1
766 && !loc.indirect)
767 {
768 /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
769 indicating the CFA register has changed to <register> but the
770 offset has not changed. */
771 cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
772 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
773 }
774 #endif
775
776 else if (loc.indirect == 0)
777 {
778 /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
779 indicating the CFA register has changed to <register> with
780 the specified offset. */
781 cfi->dw_cfi_opc = DW_CFA_def_cfa;
782 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
783 cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
784 }
785 else
786 {
787 /* Construct a DW_CFA_def_cfa_expression instruction to
788 calculate the CFA using a full location expression since no
789 register-offset pair is available. */
790 struct dw_loc_descr_struct *loc_list;
791
792 cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
793 loc_list = build_cfa_loc (&loc);
794 cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
795 }
796
797 add_fde_cfi (label, cfi);
798 }
799
800 /* Add the CFI for saving a register. REG is the CFA column number.
801 LABEL is passed to add_fde_cfi.
802 If SREG is -1, the register is saved at OFFSET from the CFA;
803 otherwise it is saved in SREG. */
804
805 static void
806 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
807 {
808 dw_cfi_ref cfi = new_cfi ();
809
810 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
811
812 /* The following comparison is correct. -1 is used to indicate that
813 the value isn't a register number. */
814 if (sreg == (unsigned int) -1)
815 {
816 if (reg & ~0x3f)
817 /* The register number won't fit in 6 bits, so we have to use
818 the long form. */
819 cfi->dw_cfi_opc = DW_CFA_offset_extended;
820 else
821 cfi->dw_cfi_opc = DW_CFA_offset;
822
823 #ifdef ENABLE_CHECKING
824 {
825 /* If we get an offset that is not a multiple of
826 DWARF_CIE_DATA_ALIGNMENT, there is either a bug in the
827 definition of DWARF_CIE_DATA_ALIGNMENT, or a bug in the machine
828 description. */
829 HOST_WIDE_INT check_offset = offset / DWARF_CIE_DATA_ALIGNMENT;
830
831 if (check_offset * DWARF_CIE_DATA_ALIGNMENT != offset)
832 abort ();
833 }
834 #endif
835 offset /= DWARF_CIE_DATA_ALIGNMENT;
836 if (offset < 0)
837 cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
838
839 cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
840 }
841 else if (sreg == reg)
842 /* We could emit a DW_CFA_same_value in this case, but don't bother. */
843 return;
844 else
845 {
846 cfi->dw_cfi_opc = DW_CFA_register;
847 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
848 }
849
850 add_fde_cfi (label, cfi);
851 }
852
853 /* Add the CFI for saving a register window. LABEL is passed to reg_save.
854 This CFI tells the unwinder that it needs to restore the window registers
855 from the previous frame's window save area.
856
857 ??? Perhaps we should note in the CIE where windows are saved (instead of
858 assuming 0(cfa)) and what registers are in the window. */
859
860 void
861 dwarf2out_window_save (const char *label)
862 {
863 dw_cfi_ref cfi = new_cfi ();
864
865 cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
866 add_fde_cfi (label, cfi);
867 }
868
869 /* Add a CFI to update the running total of the size of arguments
870 pushed onto the stack. */
871
872 void
873 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
874 {
875 dw_cfi_ref cfi;
876
877 if (size == old_args_size)
878 return;
879
880 old_args_size = size;
881
882 cfi = new_cfi ();
883 cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
884 cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
885 add_fde_cfi (label, cfi);
886 }
887
888 /* Entry point for saving a register to the stack. REG is the GCC register
889 number. LABEL and OFFSET are passed to reg_save. */
890
891 void
892 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
893 {
894 reg_save (label, DWARF_FRAME_REGNUM (reg), -1, offset);
895 }
896
897 /* Entry point for saving the return address in the stack.
898 LABEL and OFFSET are passed to reg_save. */
899
900 void
901 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
902 {
903 reg_save (label, DWARF_FRAME_RETURN_COLUMN, -1, offset);
904 }
905
906 /* Entry point for saving the return address in a register.
907 LABEL and SREG are passed to reg_save. */
908
909 void
910 dwarf2out_return_reg (const char *label, unsigned int sreg)
911 {
912 reg_save (label, DWARF_FRAME_RETURN_COLUMN, sreg, 0);
913 }
914
915 /* Record the initial position of the return address. RTL is
916 INCOMING_RETURN_ADDR_RTX. */
917
918 static void
919 initial_return_save (rtx rtl)
920 {
921 unsigned int reg = (unsigned int) -1;
922 HOST_WIDE_INT offset = 0;
923
924 switch (GET_CODE (rtl))
925 {
926 case REG:
927 /* RA is in a register. */
928 reg = DWARF_FRAME_REGNUM (REGNO (rtl));
929 break;
930
931 case MEM:
932 /* RA is on the stack. */
933 rtl = XEXP (rtl, 0);
934 switch (GET_CODE (rtl))
935 {
936 case REG:
937 if (REGNO (rtl) != STACK_POINTER_REGNUM)
938 abort ();
939 offset = 0;
940 break;
941
942 case PLUS:
943 if (REGNO (XEXP (rtl, 0)) != STACK_POINTER_REGNUM)
944 abort ();
945 offset = INTVAL (XEXP (rtl, 1));
946 break;
947
948 case MINUS:
949 if (REGNO (XEXP (rtl, 0)) != STACK_POINTER_REGNUM)
950 abort ();
951 offset = -INTVAL (XEXP (rtl, 1));
952 break;
953
954 default:
955 abort ();
956 }
957
958 break;
959
960 case PLUS:
961 /* The return address is at some offset from any value we can
962 actually load. For instance, on the SPARC it is in %i7+8. Just
963 ignore the offset for now; it doesn't matter for unwinding frames. */
964 if (GET_CODE (XEXP (rtl, 1)) != CONST_INT)
965 abort ();
966 initial_return_save (XEXP (rtl, 0));
967 return;
968
969 default:
970 abort ();
971 }
972
973 reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
974 }
975
976 /* Given a SET, calculate the amount of stack adjustment it
977 contains. */
978
979 static HOST_WIDE_INT
980 stack_adjust_offset (rtx pattern)
981 {
982 rtx src = SET_SRC (pattern);
983 rtx dest = SET_DEST (pattern);
984 HOST_WIDE_INT offset = 0;
985 enum rtx_code code;
986
987 if (dest == stack_pointer_rtx)
988 {
989 /* (set (reg sp) (plus (reg sp) (const_int))) */
990 code = GET_CODE (src);
991 if (! (code == PLUS || code == MINUS)
992 || XEXP (src, 0) != stack_pointer_rtx
993 || GET_CODE (XEXP (src, 1)) != CONST_INT)
994 return 0;
995
996 offset = INTVAL (XEXP (src, 1));
997 if (code == PLUS)
998 offset = -offset;
999 }
1000 else if (GET_CODE (dest) == MEM)
1001 {
1002 /* (set (mem (pre_dec (reg sp))) (foo)) */
1003 src = XEXP (dest, 0);
1004 code = GET_CODE (src);
1005
1006 switch (code)
1007 {
1008 case PRE_MODIFY:
1009 case POST_MODIFY:
1010 if (XEXP (src, 0) == stack_pointer_rtx)
1011 {
1012 rtx val = XEXP (XEXP (src, 1), 1);
1013 /* We handle only adjustments by constant amount. */
1014 if (GET_CODE (XEXP (src, 1)) != PLUS ||
1015 GET_CODE (val) != CONST_INT)
1016 abort ();
1017 offset = -INTVAL (val);
1018 break;
1019 }
1020 return 0;
1021
1022 case PRE_DEC:
1023 case POST_DEC:
1024 if (XEXP (src, 0) == stack_pointer_rtx)
1025 {
1026 offset = GET_MODE_SIZE (GET_MODE (dest));
1027 break;
1028 }
1029 return 0;
1030
1031 case PRE_INC:
1032 case POST_INC:
1033 if (XEXP (src, 0) == stack_pointer_rtx)
1034 {
1035 offset = -GET_MODE_SIZE (GET_MODE (dest));
1036 break;
1037 }
1038 return 0;
1039
1040 default:
1041 return 0;
1042 }
1043 }
1044 else
1045 return 0;
1046
1047 return offset;
1048 }
1049
1050 /* Check INSN to see if it looks like a push or a stack adjustment, and
1051 make a note of it if it does. EH uses this information to find out how
1052 much extra space it needs to pop off the stack. */
1053
1054 static void
1055 dwarf2out_stack_adjust (rtx insn)
1056 {
1057 HOST_WIDE_INT offset;
1058 const char *label;
1059 int i;
1060
1061 /* Don't handle epilogues at all. Certainly it would be wrong to do so
1062 with this function. Proper support would require all frame-related
1063 insns to be marked, and to be able to handle saving state around
1064 epilogues textually in the middle of the function. */
1065 if (prologue_epilogue_contains (insn) || sibcall_epilogue_contains (insn))
1066 return;
1067
1068 if (!flag_asynchronous_unwind_tables && GET_CODE (insn) == CALL_INSN)
1069 {
1070 /* Extract the size of the args from the CALL rtx itself. */
1071 insn = PATTERN (insn);
1072 if (GET_CODE (insn) == PARALLEL)
1073 insn = XVECEXP (insn, 0, 0);
1074 if (GET_CODE (insn) == SET)
1075 insn = SET_SRC (insn);
1076 if (GET_CODE (insn) != CALL)
1077 abort ();
1078
1079 dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1080 return;
1081 }
1082
1083 /* If only calls can throw, and we have a frame pointer,
1084 save up adjustments until we see the CALL_INSN. */
1085 else if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1086 return;
1087
1088 if (GET_CODE (insn) == BARRIER)
1089 {
1090 /* When we see a BARRIER, we know to reset args_size to 0. Usually
1091 the compiler will have already emitted a stack adjustment, but
1092 doesn't bother for calls to noreturn functions. */
1093 #ifdef STACK_GROWS_DOWNWARD
1094 offset = -args_size;
1095 #else
1096 offset = args_size;
1097 #endif
1098 }
1099 else if (GET_CODE (PATTERN (insn)) == SET)
1100 offset = stack_adjust_offset (PATTERN (insn));
1101 else if (GET_CODE (PATTERN (insn)) == PARALLEL
1102 || GET_CODE (PATTERN (insn)) == SEQUENCE)
1103 {
1104 /* There may be stack adjustments inside compound insns. Search
1105 for them. */
1106 for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1107 if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1108 offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i));
1109 }
1110 else
1111 return;
1112
1113 if (offset == 0)
1114 return;
1115
1116 if (cfa.reg == STACK_POINTER_REGNUM)
1117 cfa.offset += offset;
1118
1119 #ifndef STACK_GROWS_DOWNWARD
1120 offset = -offset;
1121 #endif
1122
1123 args_size += offset;
1124 if (args_size < 0)
1125 args_size = 0;
1126
1127 label = dwarf2out_cfi_label ();
1128 def_cfa_1 (label, &cfa);
1129 dwarf2out_args_size (label, args_size);
1130 }
1131
1132 #endif
1133
1134 /* We delay emitting a register save until either (a) we reach the end
1135 of the prologue or (b) the register is clobbered. This clusters
1136 register saves so that there are fewer pc advances. */
1137
1138 struct queued_reg_save GTY(())
1139 {
1140 struct queued_reg_save *next;
1141 rtx reg;
1142 HOST_WIDE_INT cfa_offset;
1143 };
1144
1145 static GTY(()) struct queued_reg_save *queued_reg_saves;
1146
1147 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1148 static const char *last_reg_save_label;
1149
1150 static void
1151 queue_reg_save (const char *label, rtx reg, HOST_WIDE_INT offset)
1152 {
1153 struct queued_reg_save *q = ggc_alloc (sizeof (*q));
1154
1155 q->next = queued_reg_saves;
1156 q->reg = reg;
1157 q->cfa_offset = offset;
1158 queued_reg_saves = q;
1159
1160 last_reg_save_label = label;
1161 }
1162
1163 static void
1164 flush_queued_reg_saves (void)
1165 {
1166 struct queued_reg_save *q, *next;
1167
1168 for (q = queued_reg_saves; q; q = next)
1169 {
1170 dwarf2out_reg_save (last_reg_save_label, REGNO (q->reg), q->cfa_offset);
1171 next = q->next;
1172 }
1173
1174 queued_reg_saves = NULL;
1175 last_reg_save_label = NULL;
1176 }
1177
1178 static bool
1179 clobbers_queued_reg_save (rtx insn)
1180 {
1181 struct queued_reg_save *q;
1182
1183 for (q = queued_reg_saves; q; q = q->next)
1184 if (modified_in_p (q->reg, insn))
1185 return true;
1186
1187 return false;
1188 }
1189
1190
1191 /* A temporary register holding an integral value used in adjusting SP
1192 or setting up the store_reg. The "offset" field holds the integer
1193 value, not an offset. */
1194 static dw_cfa_location cfa_temp;
1195
1196 /* Record call frame debugging information for an expression EXPR,
1197 which either sets SP or FP (adjusting how we calculate the frame
1198 address) or saves a register to the stack. LABEL indicates the
1199 address of EXPR.
1200
1201 This function encodes a state machine mapping rtxes to actions on
1202 cfa, cfa_store, and cfa_temp.reg. We describe these rules so
1203 users need not read the source code.
1204
1205 The High-Level Picture
1206
1207 Changes in the register we use to calculate the CFA: Currently we
1208 assume that if you copy the CFA register into another register, we
1209 should take the other one as the new CFA register; this seems to
1210 work pretty well. If it's wrong for some target, it's simple
1211 enough not to set RTX_FRAME_RELATED_P on the insn in question.
1212
1213 Changes in the register we use for saving registers to the stack:
1214 This is usually SP, but not always. Again, we deduce that if you
1215 copy SP into another register (and SP is not the CFA register),
1216 then the new register is the one we will be using for register
1217 saves. This also seems to work.
1218
1219 Register saves: There's not much guesswork about this one; if
1220 RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1221 register save, and the register used to calculate the destination
1222 had better be the one we think we're using for this purpose.
1223
1224 Except: If the register being saved is the CFA register, and the
1225 offset is nonzero, we are saving the CFA, so we assume we have to
1226 use DW_CFA_def_cfa_expression. If the offset is 0, we assume that
1227 the intent is to save the value of SP from the previous frame.
1228
1229 Invariants / Summaries of Rules
1230
1231 cfa current rule for calculating the CFA. It usually
1232 consists of a register and an offset.
1233 cfa_store register used by prologue code to save things to the stack
1234 cfa_store.offset is the offset from the value of
1235 cfa_store.reg to the actual CFA
1236 cfa_temp register holding an integral value. cfa_temp.offset
1237 stores the value, which will be used to adjust the
1238 stack pointer. cfa_temp is also used like cfa_store,
1239 to track stores to the stack via fp or a temp reg.
1240
1241 Rules 1- 4: Setting a register's value to cfa.reg or an expression
1242 with cfa.reg as the first operand changes the cfa.reg and its
1243 cfa.offset. Rule 1 and 4 also set cfa_temp.reg and
1244 cfa_temp.offset.
1245
1246 Rules 6- 9: Set a non-cfa.reg register value to a constant or an
1247 expression yielding a constant. This sets cfa_temp.reg
1248 and cfa_temp.offset.
1249
1250 Rule 5: Create a new register cfa_store used to save items to the
1251 stack.
1252
1253 Rules 10-14: Save a register to the stack. Define offset as the
1254 difference of the original location and cfa_store's
1255 location (or cfa_temp's location if cfa_temp is used).
1256
1257 The Rules
1258
1259 "{a,b}" indicates a choice of a xor b.
1260 "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
1261
1262 Rule 1:
1263 (set <reg1> <reg2>:cfa.reg)
1264 effects: cfa.reg = <reg1>
1265 cfa.offset unchanged
1266 cfa_temp.reg = <reg1>
1267 cfa_temp.offset = cfa.offset
1268
1269 Rule 2:
1270 (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
1271 {<const_int>,<reg>:cfa_temp.reg}))
1272 effects: cfa.reg = sp if fp used
1273 cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
1274 cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
1275 if cfa_store.reg==sp
1276
1277 Rule 3:
1278 (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
1279 effects: cfa.reg = fp
1280 cfa_offset += +/- <const_int>
1281
1282 Rule 4:
1283 (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
1284 constraints: <reg1> != fp
1285 <reg1> != sp
1286 effects: cfa.reg = <reg1>
1287 cfa_temp.reg = <reg1>
1288 cfa_temp.offset = cfa.offset
1289
1290 Rule 5:
1291 (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
1292 constraints: <reg1> != fp
1293 <reg1> != sp
1294 effects: cfa_store.reg = <reg1>
1295 cfa_store.offset = cfa.offset - cfa_temp.offset
1296
1297 Rule 6:
1298 (set <reg> <const_int>)
1299 effects: cfa_temp.reg = <reg>
1300 cfa_temp.offset = <const_int>
1301
1302 Rule 7:
1303 (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
1304 effects: cfa_temp.reg = <reg1>
1305 cfa_temp.offset |= <const_int>
1306
1307 Rule 8:
1308 (set <reg> (high <exp>))
1309 effects: none
1310
1311 Rule 9:
1312 (set <reg> (lo_sum <exp> <const_int>))
1313 effects: cfa_temp.reg = <reg>
1314 cfa_temp.offset = <const_int>
1315
1316 Rule 10:
1317 (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
1318 effects: cfa_store.offset -= <const_int>
1319 cfa.offset = cfa_store.offset if cfa.reg == sp
1320 cfa.reg = sp
1321 cfa.base_offset = -cfa_store.offset
1322
1323 Rule 11:
1324 (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
1325 effects: cfa_store.offset += -/+ mode_size(mem)
1326 cfa.offset = cfa_store.offset if cfa.reg == sp
1327 cfa.reg = sp
1328 cfa.base_offset = -cfa_store.offset
1329
1330 Rule 12:
1331 (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
1332
1333 <reg2>)
1334 effects: cfa.reg = <reg1>
1335 cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
1336
1337 Rule 13:
1338 (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
1339 effects: cfa.reg = <reg1>
1340 cfa.base_offset = -{cfa_store,cfa_temp}.offset
1341
1342 Rule 14:
1343 (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
1344 effects: cfa.reg = <reg1>
1345 cfa.base_offset = -cfa_temp.offset
1346 cfa_temp.offset -= mode_size(mem) */
1347
1348 static void
1349 dwarf2out_frame_debug_expr (rtx expr, const char *label)
1350 {
1351 rtx src, dest;
1352 HOST_WIDE_INT offset;
1353
1354 /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
1355 the PARALLEL independently. The first element is always processed if
1356 it is a SET. This is for backward compatibility. Other elements
1357 are processed only if they are SETs and the RTX_FRAME_RELATED_P
1358 flag is set in them. */
1359 if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
1360 {
1361 int par_index;
1362 int limit = XVECLEN (expr, 0);
1363
1364 for (par_index = 0; par_index < limit; par_index++)
1365 if (GET_CODE (XVECEXP (expr, 0, par_index)) == SET
1366 && (RTX_FRAME_RELATED_P (XVECEXP (expr, 0, par_index))
1367 || par_index == 0))
1368 dwarf2out_frame_debug_expr (XVECEXP (expr, 0, par_index), label);
1369
1370 return;
1371 }
1372
1373 if (GET_CODE (expr) != SET)
1374 abort ();
1375
1376 src = SET_SRC (expr);
1377 dest = SET_DEST (expr);
1378
1379 switch (GET_CODE (dest))
1380 {
1381 case REG:
1382 /* Rule 1 */
1383 /* Update the CFA rule wrt SP or FP. Make sure src is
1384 relative to the current CFA register. */
1385 switch (GET_CODE (src))
1386 {
1387 /* Setting FP from SP. */
1388 case REG:
1389 if (cfa.reg == (unsigned) REGNO (src))
1390 /* OK. */
1391 ;
1392 else
1393 abort ();
1394
1395 /* We used to require that dest be either SP or FP, but the
1396 ARM copies SP to a temporary register, and from there to
1397 FP. So we just rely on the backends to only set
1398 RTX_FRAME_RELATED_P on appropriate insns. */
1399 cfa.reg = REGNO (dest);
1400 cfa_temp.reg = cfa.reg;
1401 cfa_temp.offset = cfa.offset;
1402 break;
1403
1404 case PLUS:
1405 case MINUS:
1406 case LO_SUM:
1407 if (dest == stack_pointer_rtx)
1408 {
1409 /* Rule 2 */
1410 /* Adjusting SP. */
1411 switch (GET_CODE (XEXP (src, 1)))
1412 {
1413 case CONST_INT:
1414 offset = INTVAL (XEXP (src, 1));
1415 break;
1416 case REG:
1417 if ((unsigned) REGNO (XEXP (src, 1)) != cfa_temp.reg)
1418 abort ();
1419 offset = cfa_temp.offset;
1420 break;
1421 default:
1422 abort ();
1423 }
1424
1425 if (XEXP (src, 0) == hard_frame_pointer_rtx)
1426 {
1427 /* Restoring SP from FP in the epilogue. */
1428 if (cfa.reg != (unsigned) HARD_FRAME_POINTER_REGNUM)
1429 abort ();
1430 cfa.reg = STACK_POINTER_REGNUM;
1431 }
1432 else if (GET_CODE (src) == LO_SUM)
1433 /* Assume we've set the source reg of the LO_SUM from sp. */
1434 ;
1435 else if (XEXP (src, 0) != stack_pointer_rtx)
1436 abort ();
1437
1438 if (GET_CODE (src) != MINUS)
1439 offset = -offset;
1440 if (cfa.reg == STACK_POINTER_REGNUM)
1441 cfa.offset += offset;
1442 if (cfa_store.reg == STACK_POINTER_REGNUM)
1443 cfa_store.offset += offset;
1444 }
1445 else if (dest == hard_frame_pointer_rtx)
1446 {
1447 /* Rule 3 */
1448 /* Either setting the FP from an offset of the SP,
1449 or adjusting the FP */
1450 if (! frame_pointer_needed)
1451 abort ();
1452
1453 if (GET_CODE (XEXP (src, 0)) == REG
1454 && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
1455 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1456 {
1457 offset = INTVAL (XEXP (src, 1));
1458 if (GET_CODE (src) != MINUS)
1459 offset = -offset;
1460 cfa.offset += offset;
1461 cfa.reg = HARD_FRAME_POINTER_REGNUM;
1462 }
1463 else
1464 abort ();
1465 }
1466 else
1467 {
1468 if (GET_CODE (src) == MINUS)
1469 abort ();
1470
1471 /* Rule 4 */
1472 if (GET_CODE (XEXP (src, 0)) == REG
1473 && REGNO (XEXP (src, 0)) == cfa.reg
1474 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1475 {
1476 /* Setting a temporary CFA register that will be copied
1477 into the FP later on. */
1478 offset = - INTVAL (XEXP (src, 1));
1479 cfa.offset += offset;
1480 cfa.reg = REGNO (dest);
1481 /* Or used to save regs to the stack. */
1482 cfa_temp.reg = cfa.reg;
1483 cfa_temp.offset = cfa.offset;
1484 }
1485
1486 /* Rule 5 */
1487 else if (GET_CODE (XEXP (src, 0)) == REG
1488 && REGNO (XEXP (src, 0)) == cfa_temp.reg
1489 && XEXP (src, 1) == stack_pointer_rtx)
1490 {
1491 /* Setting a scratch register that we will use instead
1492 of SP for saving registers to the stack. */
1493 if (cfa.reg != STACK_POINTER_REGNUM)
1494 abort ();
1495 cfa_store.reg = REGNO (dest);
1496 cfa_store.offset = cfa.offset - cfa_temp.offset;
1497 }
1498
1499 /* Rule 9 */
1500 else if (GET_CODE (src) == LO_SUM
1501 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1502 {
1503 cfa_temp.reg = REGNO (dest);
1504 cfa_temp.offset = INTVAL (XEXP (src, 1));
1505 }
1506 else
1507 abort ();
1508 }
1509 break;
1510
1511 /* Rule 6 */
1512 case CONST_INT:
1513 cfa_temp.reg = REGNO (dest);
1514 cfa_temp.offset = INTVAL (src);
1515 break;
1516
1517 /* Rule 7 */
1518 case IOR:
1519 if (GET_CODE (XEXP (src, 0)) != REG
1520 || (unsigned) REGNO (XEXP (src, 0)) != cfa_temp.reg
1521 || GET_CODE (XEXP (src, 1)) != CONST_INT)
1522 abort ();
1523
1524 if ((unsigned) REGNO (dest) != cfa_temp.reg)
1525 cfa_temp.reg = REGNO (dest);
1526 cfa_temp.offset |= INTVAL (XEXP (src, 1));
1527 break;
1528
1529 /* Skip over HIGH, assuming it will be followed by a LO_SUM,
1530 which will fill in all of the bits. */
1531 /* Rule 8 */
1532 case HIGH:
1533 break;
1534
1535 default:
1536 abort ();
1537 }
1538
1539 def_cfa_1 (label, &cfa);
1540 break;
1541
1542 case MEM:
1543 if (GET_CODE (src) != REG)
1544 abort ();
1545
1546 /* Saving a register to the stack. Make sure dest is relative to the
1547 CFA register. */
1548 switch (GET_CODE (XEXP (dest, 0)))
1549 {
1550 /* Rule 10 */
1551 /* With a push. */
1552 case PRE_MODIFY:
1553 /* We can't handle variable size modifications. */
1554 if (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1)) != CONST_INT)
1555 abort ();
1556 offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
1557
1558 if (REGNO (XEXP (XEXP (dest, 0), 0)) != STACK_POINTER_REGNUM
1559 || cfa_store.reg != STACK_POINTER_REGNUM)
1560 abort ();
1561
1562 cfa_store.offset += offset;
1563 if (cfa.reg == STACK_POINTER_REGNUM)
1564 cfa.offset = cfa_store.offset;
1565
1566 offset = -cfa_store.offset;
1567 break;
1568
1569 /* Rule 11 */
1570 case PRE_INC:
1571 case PRE_DEC:
1572 offset = GET_MODE_SIZE (GET_MODE (dest));
1573 if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
1574 offset = -offset;
1575
1576 if (REGNO (XEXP (XEXP (dest, 0), 0)) != STACK_POINTER_REGNUM
1577 || cfa_store.reg != STACK_POINTER_REGNUM)
1578 abort ();
1579
1580 cfa_store.offset += offset;
1581 if (cfa.reg == STACK_POINTER_REGNUM)
1582 cfa.offset = cfa_store.offset;
1583
1584 offset = -cfa_store.offset;
1585 break;
1586
1587 /* Rule 12 */
1588 /* With an offset. */
1589 case PLUS:
1590 case MINUS:
1591 case LO_SUM:
1592 if (GET_CODE (XEXP (XEXP (dest, 0), 1)) != CONST_INT)
1593 abort ();
1594 offset = INTVAL (XEXP (XEXP (dest, 0), 1));
1595 if (GET_CODE (XEXP (dest, 0)) == MINUS)
1596 offset = -offset;
1597
1598 if (cfa_store.reg == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)))
1599 offset -= cfa_store.offset;
1600 else if (cfa_temp.reg == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)))
1601 offset -= cfa_temp.offset;
1602 else
1603 abort ();
1604 break;
1605
1606 /* Rule 13 */
1607 /* Without an offset. */
1608 case REG:
1609 if (cfa_store.reg == (unsigned) REGNO (XEXP (dest, 0)))
1610 offset = -cfa_store.offset;
1611 else if (cfa_temp.reg == (unsigned) REGNO (XEXP (dest, 0)))
1612 offset = -cfa_temp.offset;
1613 else
1614 abort ();
1615 break;
1616
1617 /* Rule 14 */
1618 case POST_INC:
1619 if (cfa_temp.reg != (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)))
1620 abort ();
1621 offset = -cfa_temp.offset;
1622 cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
1623 break;
1624
1625 default:
1626 abort ();
1627 }
1628
1629 if (REGNO (src) != STACK_POINTER_REGNUM
1630 && REGNO (src) != HARD_FRAME_POINTER_REGNUM
1631 && (unsigned) REGNO (src) == cfa.reg)
1632 {
1633 /* We're storing the current CFA reg into the stack. */
1634
1635 if (cfa.offset == 0)
1636 {
1637 /* If the source register is exactly the CFA, assume
1638 we're saving SP like any other register; this happens
1639 on the ARM. */
1640 def_cfa_1 (label, &cfa);
1641 queue_reg_save (label, stack_pointer_rtx, offset);
1642 break;
1643 }
1644 else
1645 {
1646 /* Otherwise, we'll need to look in the stack to
1647 calculate the CFA. */
1648 rtx x = XEXP (dest, 0);
1649
1650 if (GET_CODE (x) != REG)
1651 x = XEXP (x, 0);
1652 if (GET_CODE (x) != REG)
1653 abort ();
1654
1655 cfa.reg = REGNO (x);
1656 cfa.base_offset = offset;
1657 cfa.indirect = 1;
1658 def_cfa_1 (label, &cfa);
1659 break;
1660 }
1661 }
1662
1663 def_cfa_1 (label, &cfa);
1664 queue_reg_save (label, src, offset);
1665 break;
1666
1667 default:
1668 abort ();
1669 }
1670 }
1671
1672 /* Record call frame debugging information for INSN, which either
1673 sets SP or FP (adjusting how we calculate the frame address) or saves a
1674 register to the stack. If INSN is NULL_RTX, initialize our state. */
1675
1676 void
1677 dwarf2out_frame_debug (rtx insn)
1678 {
1679 const char *label;
1680 rtx src;
1681
1682 if (insn == NULL_RTX)
1683 {
1684 /* Flush any queued register saves. */
1685 flush_queued_reg_saves ();
1686
1687 /* Set up state for generating call frame debug info. */
1688 lookup_cfa (&cfa);
1689 if (cfa.reg != (unsigned long) DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM))
1690 abort ();
1691
1692 cfa.reg = STACK_POINTER_REGNUM;
1693 cfa_store = cfa;
1694 cfa_temp.reg = -1;
1695 cfa_temp.offset = 0;
1696 return;
1697 }
1698
1699 if (GET_CODE (insn) != INSN || clobbers_queued_reg_save (insn))
1700 flush_queued_reg_saves ();
1701
1702 if (! RTX_FRAME_RELATED_P (insn))
1703 {
1704 if (!ACCUMULATE_OUTGOING_ARGS)
1705 dwarf2out_stack_adjust (insn);
1706
1707 return;
1708 }
1709
1710 label = dwarf2out_cfi_label ();
1711 src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1712 if (src)
1713 insn = XEXP (src, 0);
1714 else
1715 insn = PATTERN (insn);
1716
1717 dwarf2out_frame_debug_expr (insn, label);
1718 }
1719
1720 #endif
1721
1722 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used. */
1723 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
1724 (enum dwarf_call_frame_info cfi);
1725
1726 static enum dw_cfi_oprnd_type
1727 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
1728 {
1729 switch (cfi)
1730 {
1731 case DW_CFA_nop:
1732 case DW_CFA_GNU_window_save:
1733 return dw_cfi_oprnd_unused;
1734
1735 case DW_CFA_set_loc:
1736 case DW_CFA_advance_loc1:
1737 case DW_CFA_advance_loc2:
1738 case DW_CFA_advance_loc4:
1739 case DW_CFA_MIPS_advance_loc8:
1740 return dw_cfi_oprnd_addr;
1741
1742 case DW_CFA_offset:
1743 case DW_CFA_offset_extended:
1744 case DW_CFA_def_cfa:
1745 case DW_CFA_offset_extended_sf:
1746 case DW_CFA_def_cfa_sf:
1747 case DW_CFA_restore_extended:
1748 case DW_CFA_undefined:
1749 case DW_CFA_same_value:
1750 case DW_CFA_def_cfa_register:
1751 case DW_CFA_register:
1752 return dw_cfi_oprnd_reg_num;
1753
1754 case DW_CFA_def_cfa_offset:
1755 case DW_CFA_GNU_args_size:
1756 case DW_CFA_def_cfa_offset_sf:
1757 return dw_cfi_oprnd_offset;
1758
1759 case DW_CFA_def_cfa_expression:
1760 case DW_CFA_expression:
1761 return dw_cfi_oprnd_loc;
1762
1763 default:
1764 abort ();
1765 }
1766 }
1767
1768 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */
1769 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
1770 (enum dwarf_call_frame_info cfi);
1771
1772 static enum dw_cfi_oprnd_type
1773 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
1774 {
1775 switch (cfi)
1776 {
1777 case DW_CFA_def_cfa:
1778 case DW_CFA_def_cfa_sf:
1779 case DW_CFA_offset:
1780 case DW_CFA_offset_extended_sf:
1781 case DW_CFA_offset_extended:
1782 return dw_cfi_oprnd_offset;
1783
1784 case DW_CFA_register:
1785 return dw_cfi_oprnd_reg_num;
1786
1787 default:
1788 return dw_cfi_oprnd_unused;
1789 }
1790 }
1791
1792 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1793
1794 /* Map register numbers held in the call frame info that gcc has
1795 collected using DWARF_FRAME_REGNUM to those that should be output in
1796 .debug_frame and .eh_frame. */
1797 #ifndef DWARF2_FRAME_REG_OUT
1798 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
1799 #endif
1800
1801 /* Output a Call Frame Information opcode and its operand(s). */
1802
1803 static void
1804 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
1805 {
1806 unsigned long r;
1807 if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
1808 dw2_asm_output_data (1, (cfi->dw_cfi_opc
1809 | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
1810 "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
1811 cfi->dw_cfi_oprnd1.dw_cfi_offset);
1812 else if (cfi->dw_cfi_opc == DW_CFA_offset)
1813 {
1814 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1815 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
1816 "DW_CFA_offset, column 0x%lx", r);
1817 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
1818 }
1819 else if (cfi->dw_cfi_opc == DW_CFA_restore)
1820 {
1821 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1822 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
1823 "DW_CFA_restore, column 0x%lx", r);
1824 }
1825 else
1826 {
1827 dw2_asm_output_data (1, cfi->dw_cfi_opc,
1828 "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
1829
1830 switch (cfi->dw_cfi_opc)
1831 {
1832 case DW_CFA_set_loc:
1833 if (for_eh)
1834 dw2_asm_output_encoded_addr_rtx (
1835 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
1836 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
1837 NULL);
1838 else
1839 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
1840 cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
1841 break;
1842
1843 case DW_CFA_advance_loc1:
1844 dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
1845 fde->dw_fde_current_label, NULL);
1846 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1847 break;
1848
1849 case DW_CFA_advance_loc2:
1850 dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
1851 fde->dw_fde_current_label, NULL);
1852 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1853 break;
1854
1855 case DW_CFA_advance_loc4:
1856 dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
1857 fde->dw_fde_current_label, NULL);
1858 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1859 break;
1860
1861 case DW_CFA_MIPS_advance_loc8:
1862 dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
1863 fde->dw_fde_current_label, NULL);
1864 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1865 break;
1866
1867 case DW_CFA_offset_extended:
1868 case DW_CFA_def_cfa:
1869 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1870 dw2_asm_output_data_uleb128 (r, NULL);
1871 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
1872 break;
1873
1874 case DW_CFA_offset_extended_sf:
1875 case DW_CFA_def_cfa_sf:
1876 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1877 dw2_asm_output_data_uleb128 (r, NULL);
1878 dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
1879 break;
1880
1881 case DW_CFA_restore_extended:
1882 case DW_CFA_undefined:
1883 case DW_CFA_same_value:
1884 case DW_CFA_def_cfa_register:
1885 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1886 dw2_asm_output_data_uleb128 (r, NULL);
1887 break;
1888
1889 case DW_CFA_register:
1890 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1891 dw2_asm_output_data_uleb128 (r, NULL);
1892 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
1893 dw2_asm_output_data_uleb128 (r, NULL);
1894 break;
1895
1896 case DW_CFA_def_cfa_offset:
1897 case DW_CFA_GNU_args_size:
1898 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
1899 break;
1900
1901 case DW_CFA_def_cfa_offset_sf:
1902 dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
1903 break;
1904
1905 case DW_CFA_GNU_window_save:
1906 break;
1907
1908 case DW_CFA_def_cfa_expression:
1909 case DW_CFA_expression:
1910 output_cfa_loc (cfi);
1911 break;
1912
1913 case DW_CFA_GNU_negative_offset_extended:
1914 /* Obsoleted by DW_CFA_offset_extended_sf. */
1915 abort ();
1916
1917 default:
1918 break;
1919 }
1920 }
1921 }
1922
1923 /* Output the call frame information used to record information
1924 that relates to calculating the frame pointer, and records the
1925 location of saved registers. */
1926
1927 static void
1928 output_call_frame_info (int for_eh)
1929 {
1930 unsigned int i;
1931 dw_fde_ref fde;
1932 dw_cfi_ref cfi;
1933 char l1[20], l2[20], section_start_label[20];
1934 bool any_lsda_needed = false;
1935 char augmentation[6];
1936 int augmentation_size;
1937 int fde_encoding = DW_EH_PE_absptr;
1938 int per_encoding = DW_EH_PE_absptr;
1939 int lsda_encoding = DW_EH_PE_absptr;
1940
1941 /* Don't emit a CIE if there won't be any FDEs. */
1942 if (fde_table_in_use == 0)
1943 return;
1944
1945 /* If we don't have any functions we'll want to unwind out of, don't
1946 emit any EH unwind information. Note that if exceptions aren't
1947 enabled, we won't have collected nothrow information, and if we
1948 asked for asynchronous tables, we always want this info. */
1949 if (for_eh)
1950 {
1951 bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
1952
1953 for (i = 0; i < fde_table_in_use; i++)
1954 if (fde_table[i].uses_eh_lsda)
1955 any_eh_needed = any_lsda_needed = true;
1956 else if (! fde_table[i].nothrow
1957 && ! fde_table[i].all_throwers_are_sibcalls)
1958 any_eh_needed = true;
1959
1960 if (! any_eh_needed)
1961 return;
1962 }
1963
1964 /* We're going to be generating comments, so turn on app. */
1965 if (flag_debug_asm)
1966 app_enable ();
1967
1968 if (for_eh)
1969 (*targetm.asm_out.eh_frame_section) ();
1970 else
1971 named_section_flags (DEBUG_FRAME_SECTION, SECTION_DEBUG);
1972
1973 ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
1974 ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
1975
1976 /* Output the CIE. */
1977 ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
1978 ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
1979 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
1980 "Length of Common Information Entry");
1981 ASM_OUTPUT_LABEL (asm_out_file, l1);
1982
1983 /* Now that the CIE pointer is PC-relative for EH,
1984 use 0 to identify the CIE. */
1985 dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
1986 (for_eh ? 0 : DW_CIE_ID),
1987 "CIE Identifier Tag");
1988
1989 dw2_asm_output_data (1, DW_CIE_VERSION, "CIE Version");
1990
1991 augmentation[0] = 0;
1992 augmentation_size = 0;
1993 if (for_eh)
1994 {
1995 char *p;
1996
1997 /* Augmentation:
1998 z Indicates that a uleb128 is present to size the
1999 augmentation section.
2000 L Indicates the encoding (and thus presence) of
2001 an LSDA pointer in the FDE augmentation.
2002 R Indicates a non-default pointer encoding for
2003 FDE code pointers.
2004 P Indicates the presence of an encoding + language
2005 personality routine in the CIE augmentation. */
2006
2007 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
2008 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
2009 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
2010
2011 p = augmentation + 1;
2012 if (eh_personality_libfunc)
2013 {
2014 *p++ = 'P';
2015 augmentation_size += 1 + size_of_encoded_value (per_encoding);
2016 }
2017 if (any_lsda_needed)
2018 {
2019 *p++ = 'L';
2020 augmentation_size += 1;
2021 }
2022 if (fde_encoding != DW_EH_PE_absptr)
2023 {
2024 *p++ = 'R';
2025 augmentation_size += 1;
2026 }
2027 if (p > augmentation + 1)
2028 {
2029 augmentation[0] = 'z';
2030 *p = '\0';
2031 }
2032
2033 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */
2034 if (eh_personality_libfunc && per_encoding == DW_EH_PE_aligned)
2035 {
2036 int offset = ( 4 /* Length */
2037 + 4 /* CIE Id */
2038 + 1 /* CIE version */
2039 + strlen (augmentation) + 1 /* Augmentation */
2040 + size_of_uleb128 (1) /* Code alignment */
2041 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
2042 + 1 /* RA column */
2043 + 1 /* Augmentation size */
2044 + 1 /* Personality encoding */ );
2045 int pad = -offset & (PTR_SIZE - 1);
2046
2047 augmentation_size += pad;
2048
2049 /* Augmentations should be small, so there's scarce need to
2050 iterate for a solution. Die if we exceed one uleb128 byte. */
2051 if (size_of_uleb128 (augmentation_size) != 1)
2052 abort ();
2053 }
2054 }
2055
2056 dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
2057 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
2058 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
2059 "CIE Data Alignment Factor");
2060 dw2_asm_output_data (1, DWARF_FRAME_RETURN_COLUMN, "CIE RA Column");
2061
2062 if (augmentation[0])
2063 {
2064 dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
2065 if (eh_personality_libfunc)
2066 {
2067 dw2_asm_output_data (1, per_encoding, "Personality (%s)",
2068 eh_data_format_name (per_encoding));
2069 dw2_asm_output_encoded_addr_rtx (per_encoding,
2070 eh_personality_libfunc, NULL);
2071 }
2072
2073 if (any_lsda_needed)
2074 dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
2075 eh_data_format_name (lsda_encoding));
2076
2077 if (fde_encoding != DW_EH_PE_absptr)
2078 dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
2079 eh_data_format_name (fde_encoding));
2080 }
2081
2082 for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
2083 output_cfi (cfi, NULL, for_eh);
2084
2085 /* Pad the CIE out to an address sized boundary. */
2086 ASM_OUTPUT_ALIGN (asm_out_file,
2087 floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
2088 ASM_OUTPUT_LABEL (asm_out_file, l2);
2089
2090 /* Loop through all of the FDE's. */
2091 for (i = 0; i < fde_table_in_use; i++)
2092 {
2093 fde = &fde_table[i];
2094
2095 /* Don't emit EH unwind info for leaf functions that don't need it. */
2096 if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
2097 && (fde->nothrow || fde->all_throwers_are_sibcalls)
2098 && !fde->uses_eh_lsda)
2099 continue;
2100
2101 (*targetm.asm_out.internal_label) (asm_out_file, FDE_LABEL, for_eh + i * 2);
2102 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i * 2);
2103 ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i * 2);
2104 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2105 "FDE Length");
2106 ASM_OUTPUT_LABEL (asm_out_file, l1);
2107
2108 if (for_eh)
2109 dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
2110 else
2111 dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
2112 "FDE CIE offset");
2113
2114 if (for_eh)
2115 {
2116 dw2_asm_output_encoded_addr_rtx (fde_encoding,
2117 gen_rtx_SYMBOL_REF (Pmode, fde->dw_fde_begin),
2118 "FDE initial location");
2119 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2120 fde->dw_fde_end, fde->dw_fde_begin,
2121 "FDE address range");
2122 }
2123 else
2124 {
2125 dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
2126 "FDE initial location");
2127 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2128 fde->dw_fde_end, fde->dw_fde_begin,
2129 "FDE address range");
2130 }
2131
2132 if (augmentation[0])
2133 {
2134 if (any_lsda_needed)
2135 {
2136 int size = size_of_encoded_value (lsda_encoding);
2137
2138 if (lsda_encoding == DW_EH_PE_aligned)
2139 {
2140 int offset = ( 4 /* Length */
2141 + 4 /* CIE offset */
2142 + 2 * size_of_encoded_value (fde_encoding)
2143 + 1 /* Augmentation size */ );
2144 int pad = -offset & (PTR_SIZE - 1);
2145
2146 size += pad;
2147 if (size_of_uleb128 (size) != 1)
2148 abort ();
2149 }
2150
2151 dw2_asm_output_data_uleb128 (size, "Augmentation size");
2152
2153 if (fde->uses_eh_lsda)
2154 {
2155 ASM_GENERATE_INTERNAL_LABEL (l1, "LLSDA",
2156 fde->funcdef_number);
2157 dw2_asm_output_encoded_addr_rtx (
2158 lsda_encoding, gen_rtx_SYMBOL_REF (Pmode, l1),
2159 "Language Specific Data Area");
2160 }
2161 else
2162 {
2163 if (lsda_encoding == DW_EH_PE_aligned)
2164 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2165 dw2_asm_output_data
2166 (size_of_encoded_value (lsda_encoding), 0,
2167 "Language Specific Data Area (none)");
2168 }
2169 }
2170 else
2171 dw2_asm_output_data_uleb128 (0, "Augmentation size");
2172 }
2173
2174 /* Loop through the Call Frame Instructions associated with
2175 this FDE. */
2176 fde->dw_fde_current_label = fde->dw_fde_begin;
2177 for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
2178 output_cfi (cfi, fde, for_eh);
2179
2180 /* Pad the FDE out to an address sized boundary. */
2181 ASM_OUTPUT_ALIGN (asm_out_file,
2182 floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
2183 ASM_OUTPUT_LABEL (asm_out_file, l2);
2184 }
2185
2186 if (for_eh && targetm.terminate_dw2_eh_frame_info)
2187 dw2_asm_output_data (4, 0, "End of Table");
2188 #ifdef MIPS_DEBUGGING_INFO
2189 /* Work around Irix 6 assembler bug whereby labels at the end of a section
2190 get a value of 0. Putting .align 0 after the label fixes it. */
2191 ASM_OUTPUT_ALIGN (asm_out_file, 0);
2192 #endif
2193
2194 /* Turn off app to make assembly quicker. */
2195 if (flag_debug_asm)
2196 app_disable ();
2197 }
2198
2199 /* Output a marker (i.e. a label) for the beginning of a function, before
2200 the prologue. */
2201
2202 void
2203 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
2204 const char *file ATTRIBUTE_UNUSED)
2205 {
2206 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2207 dw_fde_ref fde;
2208
2209 current_function_func_begin_label = 0;
2210
2211 #ifdef IA64_UNWIND_INFO
2212 /* ??? current_function_func_begin_label is also used by except.c
2213 for call-site information. We must emit this label if it might
2214 be used. */
2215 if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
2216 && ! dwarf2out_do_frame ())
2217 return;
2218 #else
2219 if (! dwarf2out_do_frame ())
2220 return;
2221 #endif
2222
2223 function_section (current_function_decl);
2224 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
2225 current_function_funcdef_no);
2226 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
2227 current_function_funcdef_no);
2228 current_function_func_begin_label = get_identifier (label);
2229
2230 #ifdef IA64_UNWIND_INFO
2231 /* We can elide the fde allocation if we're not emitting debug info. */
2232 if (! dwarf2out_do_frame ())
2233 return;
2234 #endif
2235
2236 /* Expand the fde table if necessary. */
2237 if (fde_table_in_use == fde_table_allocated)
2238 {
2239 fde_table_allocated += FDE_TABLE_INCREMENT;
2240 fde_table = ggc_realloc (fde_table,
2241 fde_table_allocated * sizeof (dw_fde_node));
2242 memset (fde_table + fde_table_in_use, 0,
2243 FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2244 }
2245
2246 /* Record the FDE associated with this function. */
2247 current_funcdef_fde = fde_table_in_use;
2248
2249 /* Add the new FDE at the end of the fde_table. */
2250 fde = &fde_table[fde_table_in_use++];
2251 fde->dw_fde_begin = xstrdup (label);
2252 fde->dw_fde_current_label = NULL;
2253 fde->dw_fde_end = NULL;
2254 fde->dw_fde_cfi = NULL;
2255 fde->funcdef_number = current_function_funcdef_no;
2256 fde->nothrow = current_function_nothrow;
2257 fde->uses_eh_lsda = cfun->uses_eh_lsda;
2258 fde->all_throwers_are_sibcalls = cfun->all_throwers_are_sibcalls;
2259
2260 args_size = old_args_size = 0;
2261
2262 /* We only want to output line number information for the genuine dwarf2
2263 prologue case, not the eh frame case. */
2264 #ifdef DWARF2_DEBUGGING_INFO
2265 if (file)
2266 dwarf2out_source_line (line, file);
2267 #endif
2268 }
2269
2270 /* Output a marker (i.e. a label) for the absolute end of the generated code
2271 for a function definition. This gets called *after* the epilogue code has
2272 been generated. */
2273
2274 void
2275 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
2276 const char *file ATTRIBUTE_UNUSED)
2277 {
2278 dw_fde_ref fde;
2279 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2280
2281 /* Output a label to mark the endpoint of the code generated for this
2282 function. */
2283 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
2284 current_function_funcdef_no);
2285 ASM_OUTPUT_LABEL (asm_out_file, label);
2286 fde = &fde_table[fde_table_in_use - 1];
2287 fde->dw_fde_end = xstrdup (label);
2288 }
2289
2290 void
2291 dwarf2out_frame_init (void)
2292 {
2293 /* Allocate the initial hunk of the fde_table. */
2294 fde_table = ggc_alloc_cleared (FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2295 fde_table_allocated = FDE_TABLE_INCREMENT;
2296 fde_table_in_use = 0;
2297
2298 /* Generate the CFA instructions common to all FDE's. Do it now for the
2299 sake of lookup_cfa. */
2300
2301 #ifdef DWARF2_UNWIND_INFO
2302 /* On entry, the Canonical Frame Address is at SP. */
2303 dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
2304 initial_return_save (INCOMING_RETURN_ADDR_RTX);
2305 #endif
2306 }
2307
2308 void
2309 dwarf2out_frame_finish (void)
2310 {
2311 /* Output call frame information. */
2312 if (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
2313 output_call_frame_info (0);
2314
2315 if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
2316 output_call_frame_info (1);
2317 }
2318 #endif
2319 \f
2320 /* And now, the subset of the debugging information support code necessary
2321 for emitting location expressions. */
2322
2323 /* We need some way to distinguish DW_OP_addr with a direct symbol
2324 relocation from DW_OP_addr with a dtp-relative symbol relocation. */
2325 #define INTERNAL_DW_OP_tls_addr (0x100 + DW_OP_addr)
2326
2327
2328 typedef struct dw_val_struct *dw_val_ref;
2329 typedef struct die_struct *dw_die_ref;
2330 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
2331 typedef struct dw_loc_list_struct *dw_loc_list_ref;
2332
2333 /* Each DIE may have a series of attribute/value pairs. Values
2334 can take on several forms. The forms that are used in this
2335 implementation are listed below. */
2336
2337 enum dw_val_class
2338 {
2339 dw_val_class_addr,
2340 dw_val_class_offset,
2341 dw_val_class_loc,
2342 dw_val_class_loc_list,
2343 dw_val_class_range_list,
2344 dw_val_class_const,
2345 dw_val_class_unsigned_const,
2346 dw_val_class_long_long,
2347 dw_val_class_vec,
2348 dw_val_class_flag,
2349 dw_val_class_die_ref,
2350 dw_val_class_fde_ref,
2351 dw_val_class_lbl_id,
2352 dw_val_class_lbl_offset,
2353 dw_val_class_str
2354 };
2355
2356 /* Describe a double word constant value. */
2357 /* ??? Every instance of long_long in the code really means CONST_DOUBLE. */
2358
2359 typedef struct dw_long_long_struct GTY(())
2360 {
2361 unsigned long hi;
2362 unsigned long low;
2363 }
2364 dw_long_long_const;
2365
2366 /* Describe a floating point constant value, or a vector constant value. */
2367
2368 typedef struct dw_vec_struct GTY(())
2369 {
2370 unsigned char * GTY((length ("%h.length"))) array;
2371 unsigned length;
2372 unsigned elt_size;
2373 }
2374 dw_vec_const;
2375
2376 /* The dw_val_node describes an attribute's value, as it is
2377 represented internally. */
2378
2379 typedef struct dw_val_struct GTY(())
2380 {
2381 enum dw_val_class val_class;
2382 union dw_val_struct_union
2383 {
2384 rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
2385 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
2386 dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
2387 dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
2388 HOST_WIDE_INT GTY ((default (""))) val_int;
2389 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
2390 dw_long_long_const GTY ((tag ("dw_val_class_long_long"))) val_long_long;
2391 dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
2392 struct dw_val_die_union
2393 {
2394 dw_die_ref die;
2395 int external;
2396 } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
2397 unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
2398 struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
2399 char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
2400 unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
2401 }
2402 GTY ((desc ("%1.val_class"))) v;
2403 }
2404 dw_val_node;
2405
2406 /* Locations in memory are described using a sequence of stack machine
2407 operations. */
2408
2409 typedef struct dw_loc_descr_struct GTY(())
2410 {
2411 dw_loc_descr_ref dw_loc_next;
2412 enum dwarf_location_atom dw_loc_opc;
2413 dw_val_node dw_loc_oprnd1;
2414 dw_val_node dw_loc_oprnd2;
2415 int dw_loc_addr;
2416 }
2417 dw_loc_descr_node;
2418
2419 /* Location lists are ranges + location descriptions for that range,
2420 so you can track variables that are in different places over
2421 their entire life. */
2422 typedef struct dw_loc_list_struct GTY(())
2423 {
2424 dw_loc_list_ref dw_loc_next;
2425 const char *begin; /* Label for begin address of range */
2426 const char *end; /* Label for end address of range */
2427 char *ll_symbol; /* Label for beginning of location list.
2428 Only on head of list */
2429 const char *section; /* Section this loclist is relative to */
2430 dw_loc_descr_ref expr;
2431 } dw_loc_list_node;
2432
2433 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2434
2435 static const char *dwarf_stack_op_name (unsigned);
2436 static dw_loc_descr_ref new_loc_descr (enum dwarf_location_atom,
2437 unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT);
2438 static void add_loc_descr (dw_loc_descr_ref *, dw_loc_descr_ref);
2439 static unsigned long size_of_loc_descr (dw_loc_descr_ref);
2440 static unsigned long size_of_locs (dw_loc_descr_ref);
2441 static void output_loc_operands (dw_loc_descr_ref);
2442 static void output_loc_sequence (dw_loc_descr_ref);
2443
2444 /* Convert a DWARF stack opcode into its string name. */
2445
2446 static const char *
2447 dwarf_stack_op_name (unsigned int op)
2448 {
2449 switch (op)
2450 {
2451 case DW_OP_addr:
2452 case INTERNAL_DW_OP_tls_addr:
2453 return "DW_OP_addr";
2454 case DW_OP_deref:
2455 return "DW_OP_deref";
2456 case DW_OP_const1u:
2457 return "DW_OP_const1u";
2458 case DW_OP_const1s:
2459 return "DW_OP_const1s";
2460 case DW_OP_const2u:
2461 return "DW_OP_const2u";
2462 case DW_OP_const2s:
2463 return "DW_OP_const2s";
2464 case DW_OP_const4u:
2465 return "DW_OP_const4u";
2466 case DW_OP_const4s:
2467 return "DW_OP_const4s";
2468 case DW_OP_const8u:
2469 return "DW_OP_const8u";
2470 case DW_OP_const8s:
2471 return "DW_OP_const8s";
2472 case DW_OP_constu:
2473 return "DW_OP_constu";
2474 case DW_OP_consts:
2475 return "DW_OP_consts";
2476 case DW_OP_dup:
2477 return "DW_OP_dup";
2478 case DW_OP_drop:
2479 return "DW_OP_drop";
2480 case DW_OP_over:
2481 return "DW_OP_over";
2482 case DW_OP_pick:
2483 return "DW_OP_pick";
2484 case DW_OP_swap:
2485 return "DW_OP_swap";
2486 case DW_OP_rot:
2487 return "DW_OP_rot";
2488 case DW_OP_xderef:
2489 return "DW_OP_xderef";
2490 case DW_OP_abs:
2491 return "DW_OP_abs";
2492 case DW_OP_and:
2493 return "DW_OP_and";
2494 case DW_OP_div:
2495 return "DW_OP_div";
2496 case DW_OP_minus:
2497 return "DW_OP_minus";
2498 case DW_OP_mod:
2499 return "DW_OP_mod";
2500 case DW_OP_mul:
2501 return "DW_OP_mul";
2502 case DW_OP_neg:
2503 return "DW_OP_neg";
2504 case DW_OP_not:
2505 return "DW_OP_not";
2506 case DW_OP_or:
2507 return "DW_OP_or";
2508 case DW_OP_plus:
2509 return "DW_OP_plus";
2510 case DW_OP_plus_uconst:
2511 return "DW_OP_plus_uconst";
2512 case DW_OP_shl:
2513 return "DW_OP_shl";
2514 case DW_OP_shr:
2515 return "DW_OP_shr";
2516 case DW_OP_shra:
2517 return "DW_OP_shra";
2518 case DW_OP_xor:
2519 return "DW_OP_xor";
2520 case DW_OP_bra:
2521 return "DW_OP_bra";
2522 case DW_OP_eq:
2523 return "DW_OP_eq";
2524 case DW_OP_ge:
2525 return "DW_OP_ge";
2526 case DW_OP_gt:
2527 return "DW_OP_gt";
2528 case DW_OP_le:
2529 return "DW_OP_le";
2530 case DW_OP_lt:
2531 return "DW_OP_lt";
2532 case DW_OP_ne:
2533 return "DW_OP_ne";
2534 case DW_OP_skip:
2535 return "DW_OP_skip";
2536 case DW_OP_lit0:
2537 return "DW_OP_lit0";
2538 case DW_OP_lit1:
2539 return "DW_OP_lit1";
2540 case DW_OP_lit2:
2541 return "DW_OP_lit2";
2542 case DW_OP_lit3:
2543 return "DW_OP_lit3";
2544 case DW_OP_lit4:
2545 return "DW_OP_lit4";
2546 case DW_OP_lit5:
2547 return "DW_OP_lit5";
2548 case DW_OP_lit6:
2549 return "DW_OP_lit6";
2550 case DW_OP_lit7:
2551 return "DW_OP_lit7";
2552 case DW_OP_lit8:
2553 return "DW_OP_lit8";
2554 case DW_OP_lit9:
2555 return "DW_OP_lit9";
2556 case DW_OP_lit10:
2557 return "DW_OP_lit10";
2558 case DW_OP_lit11:
2559 return "DW_OP_lit11";
2560 case DW_OP_lit12:
2561 return "DW_OP_lit12";
2562 case DW_OP_lit13:
2563 return "DW_OP_lit13";
2564 case DW_OP_lit14:
2565 return "DW_OP_lit14";
2566 case DW_OP_lit15:
2567 return "DW_OP_lit15";
2568 case DW_OP_lit16:
2569 return "DW_OP_lit16";
2570 case DW_OP_lit17:
2571 return "DW_OP_lit17";
2572 case DW_OP_lit18:
2573 return "DW_OP_lit18";
2574 case DW_OP_lit19:
2575 return "DW_OP_lit19";
2576 case DW_OP_lit20:
2577 return "DW_OP_lit20";
2578 case DW_OP_lit21:
2579 return "DW_OP_lit21";
2580 case DW_OP_lit22:
2581 return "DW_OP_lit22";
2582 case DW_OP_lit23:
2583 return "DW_OP_lit23";
2584 case DW_OP_lit24:
2585 return "DW_OP_lit24";
2586 case DW_OP_lit25:
2587 return "DW_OP_lit25";
2588 case DW_OP_lit26:
2589 return "DW_OP_lit26";
2590 case DW_OP_lit27:
2591 return "DW_OP_lit27";
2592 case DW_OP_lit28:
2593 return "DW_OP_lit28";
2594 case DW_OP_lit29:
2595 return "DW_OP_lit29";
2596 case DW_OP_lit30:
2597 return "DW_OP_lit30";
2598 case DW_OP_lit31:
2599 return "DW_OP_lit31";
2600 case DW_OP_reg0:
2601 return "DW_OP_reg0";
2602 case DW_OP_reg1:
2603 return "DW_OP_reg1";
2604 case DW_OP_reg2:
2605 return "DW_OP_reg2";
2606 case DW_OP_reg3:
2607 return "DW_OP_reg3";
2608 case DW_OP_reg4:
2609 return "DW_OP_reg4";
2610 case DW_OP_reg5:
2611 return "DW_OP_reg5";
2612 case DW_OP_reg6:
2613 return "DW_OP_reg6";
2614 case DW_OP_reg7:
2615 return "DW_OP_reg7";
2616 case DW_OP_reg8:
2617 return "DW_OP_reg8";
2618 case DW_OP_reg9:
2619 return "DW_OP_reg9";
2620 case DW_OP_reg10:
2621 return "DW_OP_reg10";
2622 case DW_OP_reg11:
2623 return "DW_OP_reg11";
2624 case DW_OP_reg12:
2625 return "DW_OP_reg12";
2626 case DW_OP_reg13:
2627 return "DW_OP_reg13";
2628 case DW_OP_reg14:
2629 return "DW_OP_reg14";
2630 case DW_OP_reg15:
2631 return "DW_OP_reg15";
2632 case DW_OP_reg16:
2633 return "DW_OP_reg16";
2634 case DW_OP_reg17:
2635 return "DW_OP_reg17";
2636 case DW_OP_reg18:
2637 return "DW_OP_reg18";
2638 case DW_OP_reg19:
2639 return "DW_OP_reg19";
2640 case DW_OP_reg20:
2641 return "DW_OP_reg20";
2642 case DW_OP_reg21:
2643 return "DW_OP_reg21";
2644 case DW_OP_reg22:
2645 return "DW_OP_reg22";
2646 case DW_OP_reg23:
2647 return "DW_OP_reg23";
2648 case DW_OP_reg24:
2649 return "DW_OP_reg24";
2650 case DW_OP_reg25:
2651 return "DW_OP_reg25";
2652 case DW_OP_reg26:
2653 return "DW_OP_reg26";
2654 case DW_OP_reg27:
2655 return "DW_OP_reg27";
2656 case DW_OP_reg28:
2657 return "DW_OP_reg28";
2658 case DW_OP_reg29:
2659 return "DW_OP_reg29";
2660 case DW_OP_reg30:
2661 return "DW_OP_reg30";
2662 case DW_OP_reg31:
2663 return "DW_OP_reg31";
2664 case DW_OP_breg0:
2665 return "DW_OP_breg0";
2666 case DW_OP_breg1:
2667 return "DW_OP_breg1";
2668 case DW_OP_breg2:
2669 return "DW_OP_breg2";
2670 case DW_OP_breg3:
2671 return "DW_OP_breg3";
2672 case DW_OP_breg4:
2673 return "DW_OP_breg4";
2674 case DW_OP_breg5:
2675 return "DW_OP_breg5";
2676 case DW_OP_breg6:
2677 return "DW_OP_breg6";
2678 case DW_OP_breg7:
2679 return "DW_OP_breg7";
2680 case DW_OP_breg8:
2681 return "DW_OP_breg8";
2682 case DW_OP_breg9:
2683 return "DW_OP_breg9";
2684 case DW_OP_breg10:
2685 return "DW_OP_breg10";
2686 case DW_OP_breg11:
2687 return "DW_OP_breg11";
2688 case DW_OP_breg12:
2689 return "DW_OP_breg12";
2690 case DW_OP_breg13:
2691 return "DW_OP_breg13";
2692 case DW_OP_breg14:
2693 return "DW_OP_breg14";
2694 case DW_OP_breg15:
2695 return "DW_OP_breg15";
2696 case DW_OP_breg16:
2697 return "DW_OP_breg16";
2698 case DW_OP_breg17:
2699 return "DW_OP_breg17";
2700 case DW_OP_breg18:
2701 return "DW_OP_breg18";
2702 case DW_OP_breg19:
2703 return "DW_OP_breg19";
2704 case DW_OP_breg20:
2705 return "DW_OP_breg20";
2706 case DW_OP_breg21:
2707 return "DW_OP_breg21";
2708 case DW_OP_breg22:
2709 return "DW_OP_breg22";
2710 case DW_OP_breg23:
2711 return "DW_OP_breg23";
2712 case DW_OP_breg24:
2713 return "DW_OP_breg24";
2714 case DW_OP_breg25:
2715 return "DW_OP_breg25";
2716 case DW_OP_breg26:
2717 return "DW_OP_breg26";
2718 case DW_OP_breg27:
2719 return "DW_OP_breg27";
2720 case DW_OP_breg28:
2721 return "DW_OP_breg28";
2722 case DW_OP_breg29:
2723 return "DW_OP_breg29";
2724 case DW_OP_breg30:
2725 return "DW_OP_breg30";
2726 case DW_OP_breg31:
2727 return "DW_OP_breg31";
2728 case DW_OP_regx:
2729 return "DW_OP_regx";
2730 case DW_OP_fbreg:
2731 return "DW_OP_fbreg";
2732 case DW_OP_bregx:
2733 return "DW_OP_bregx";
2734 case DW_OP_piece:
2735 return "DW_OP_piece";
2736 case DW_OP_deref_size:
2737 return "DW_OP_deref_size";
2738 case DW_OP_xderef_size:
2739 return "DW_OP_xderef_size";
2740 case DW_OP_nop:
2741 return "DW_OP_nop";
2742 case DW_OP_push_object_address:
2743 return "DW_OP_push_object_address";
2744 case DW_OP_call2:
2745 return "DW_OP_call2";
2746 case DW_OP_call4:
2747 return "DW_OP_call4";
2748 case DW_OP_call_ref:
2749 return "DW_OP_call_ref";
2750 case DW_OP_GNU_push_tls_address:
2751 return "DW_OP_GNU_push_tls_address";
2752 default:
2753 return "OP_<unknown>";
2754 }
2755 }
2756
2757 /* Return a pointer to a newly allocated location description. Location
2758 descriptions are simple expression terms that can be strung
2759 together to form more complicated location (address) descriptions. */
2760
2761 static inline dw_loc_descr_ref
2762 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
2763 unsigned HOST_WIDE_INT oprnd2)
2764 {
2765 dw_loc_descr_ref descr = ggc_alloc_cleared (sizeof (dw_loc_descr_node));
2766
2767 descr->dw_loc_opc = op;
2768 descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
2769 descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
2770 descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
2771 descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
2772
2773 return descr;
2774 }
2775
2776
2777 /* Add a location description term to a location description expression. */
2778
2779 static inline void
2780 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
2781 {
2782 dw_loc_descr_ref *d;
2783
2784 /* Find the end of the chain. */
2785 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
2786 ;
2787
2788 *d = descr;
2789 }
2790
2791 /* Return the size of a location descriptor. */
2792
2793 static unsigned long
2794 size_of_loc_descr (dw_loc_descr_ref loc)
2795 {
2796 unsigned long size = 1;
2797
2798 switch (loc->dw_loc_opc)
2799 {
2800 case DW_OP_addr:
2801 case INTERNAL_DW_OP_tls_addr:
2802 size += DWARF2_ADDR_SIZE;
2803 break;
2804 case DW_OP_const1u:
2805 case DW_OP_const1s:
2806 size += 1;
2807 break;
2808 case DW_OP_const2u:
2809 case DW_OP_const2s:
2810 size += 2;
2811 break;
2812 case DW_OP_const4u:
2813 case DW_OP_const4s:
2814 size += 4;
2815 break;
2816 case DW_OP_const8u:
2817 case DW_OP_const8s:
2818 size += 8;
2819 break;
2820 case DW_OP_constu:
2821 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2822 break;
2823 case DW_OP_consts:
2824 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
2825 break;
2826 case DW_OP_pick:
2827 size += 1;
2828 break;
2829 case DW_OP_plus_uconst:
2830 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2831 break;
2832 case DW_OP_skip:
2833 case DW_OP_bra:
2834 size += 2;
2835 break;
2836 case DW_OP_breg0:
2837 case DW_OP_breg1:
2838 case DW_OP_breg2:
2839 case DW_OP_breg3:
2840 case DW_OP_breg4:
2841 case DW_OP_breg5:
2842 case DW_OP_breg6:
2843 case DW_OP_breg7:
2844 case DW_OP_breg8:
2845 case DW_OP_breg9:
2846 case DW_OP_breg10:
2847 case DW_OP_breg11:
2848 case DW_OP_breg12:
2849 case DW_OP_breg13:
2850 case DW_OP_breg14:
2851 case DW_OP_breg15:
2852 case DW_OP_breg16:
2853 case DW_OP_breg17:
2854 case DW_OP_breg18:
2855 case DW_OP_breg19:
2856 case DW_OP_breg20:
2857 case DW_OP_breg21:
2858 case DW_OP_breg22:
2859 case DW_OP_breg23:
2860 case DW_OP_breg24:
2861 case DW_OP_breg25:
2862 case DW_OP_breg26:
2863 case DW_OP_breg27:
2864 case DW_OP_breg28:
2865 case DW_OP_breg29:
2866 case DW_OP_breg30:
2867 case DW_OP_breg31:
2868 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
2869 break;
2870 case DW_OP_regx:
2871 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2872 break;
2873 case DW_OP_fbreg:
2874 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
2875 break;
2876 case DW_OP_bregx:
2877 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2878 size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
2879 break;
2880 case DW_OP_piece:
2881 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2882 break;
2883 case DW_OP_deref_size:
2884 case DW_OP_xderef_size:
2885 size += 1;
2886 break;
2887 case DW_OP_call2:
2888 size += 2;
2889 break;
2890 case DW_OP_call4:
2891 size += 4;
2892 break;
2893 case DW_OP_call_ref:
2894 size += DWARF2_ADDR_SIZE;
2895 break;
2896 default:
2897 break;
2898 }
2899
2900 return size;
2901 }
2902
2903 /* Return the size of a series of location descriptors. */
2904
2905 static unsigned long
2906 size_of_locs (dw_loc_descr_ref loc)
2907 {
2908 unsigned long size;
2909
2910 for (size = 0; loc != NULL; loc = loc->dw_loc_next)
2911 {
2912 loc->dw_loc_addr = size;
2913 size += size_of_loc_descr (loc);
2914 }
2915
2916 return size;
2917 }
2918
2919 /* Output location description stack opcode's operands (if any). */
2920
2921 static void
2922 output_loc_operands (dw_loc_descr_ref loc)
2923 {
2924 dw_val_ref val1 = &loc->dw_loc_oprnd1;
2925 dw_val_ref val2 = &loc->dw_loc_oprnd2;
2926
2927 switch (loc->dw_loc_opc)
2928 {
2929 #ifdef DWARF2_DEBUGGING_INFO
2930 case DW_OP_addr:
2931 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
2932 break;
2933 case DW_OP_const2u:
2934 case DW_OP_const2s:
2935 dw2_asm_output_data (2, val1->v.val_int, NULL);
2936 break;
2937 case DW_OP_const4u:
2938 case DW_OP_const4s:
2939 dw2_asm_output_data (4, val1->v.val_int, NULL);
2940 break;
2941 case DW_OP_const8u:
2942 case DW_OP_const8s:
2943 if (HOST_BITS_PER_LONG < 64)
2944 abort ();
2945 dw2_asm_output_data (8, val1->v.val_int, NULL);
2946 break;
2947 case DW_OP_skip:
2948 case DW_OP_bra:
2949 {
2950 int offset;
2951
2952 if (val1->val_class == dw_val_class_loc)
2953 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2954 else
2955 abort ();
2956
2957 dw2_asm_output_data (2, offset, NULL);
2958 }
2959 break;
2960 #else
2961 case DW_OP_addr:
2962 case DW_OP_const2u:
2963 case DW_OP_const2s:
2964 case DW_OP_const4u:
2965 case DW_OP_const4s:
2966 case DW_OP_const8u:
2967 case DW_OP_const8s:
2968 case DW_OP_skip:
2969 case DW_OP_bra:
2970 /* We currently don't make any attempt to make sure these are
2971 aligned properly like we do for the main unwind info, so
2972 don't support emitting things larger than a byte if we're
2973 only doing unwinding. */
2974 abort ();
2975 #endif
2976 case DW_OP_const1u:
2977 case DW_OP_const1s:
2978 dw2_asm_output_data (1, val1->v.val_int, NULL);
2979 break;
2980 case DW_OP_constu:
2981 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2982 break;
2983 case DW_OP_consts:
2984 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2985 break;
2986 case DW_OP_pick:
2987 dw2_asm_output_data (1, val1->v.val_int, NULL);
2988 break;
2989 case DW_OP_plus_uconst:
2990 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2991 break;
2992 case DW_OP_breg0:
2993 case DW_OP_breg1:
2994 case DW_OP_breg2:
2995 case DW_OP_breg3:
2996 case DW_OP_breg4:
2997 case DW_OP_breg5:
2998 case DW_OP_breg6:
2999 case DW_OP_breg7:
3000 case DW_OP_breg8:
3001 case DW_OP_breg9:
3002 case DW_OP_breg10:
3003 case DW_OP_breg11:
3004 case DW_OP_breg12:
3005 case DW_OP_breg13:
3006 case DW_OP_breg14:
3007 case DW_OP_breg15:
3008 case DW_OP_breg16:
3009 case DW_OP_breg17:
3010 case DW_OP_breg18:
3011 case DW_OP_breg19:
3012 case DW_OP_breg20:
3013 case DW_OP_breg21:
3014 case DW_OP_breg22:
3015 case DW_OP_breg23:
3016 case DW_OP_breg24:
3017 case DW_OP_breg25:
3018 case DW_OP_breg26:
3019 case DW_OP_breg27:
3020 case DW_OP_breg28:
3021 case DW_OP_breg29:
3022 case DW_OP_breg30:
3023 case DW_OP_breg31:
3024 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3025 break;
3026 case DW_OP_regx:
3027 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3028 break;
3029 case DW_OP_fbreg:
3030 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3031 break;
3032 case DW_OP_bregx:
3033 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3034 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
3035 break;
3036 case DW_OP_piece:
3037 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3038 break;
3039 case DW_OP_deref_size:
3040 case DW_OP_xderef_size:
3041 dw2_asm_output_data (1, val1->v.val_int, NULL);
3042 break;
3043
3044 case INTERNAL_DW_OP_tls_addr:
3045 #ifdef ASM_OUTPUT_DWARF_DTPREL
3046 ASM_OUTPUT_DWARF_DTPREL (asm_out_file, DWARF2_ADDR_SIZE,
3047 val1->v.val_addr);
3048 fputc ('\n', asm_out_file);
3049 #else
3050 abort ();
3051 #endif
3052 break;
3053
3054 default:
3055 /* Other codes have no operands. */
3056 break;
3057 }
3058 }
3059
3060 /* Output a sequence of location operations. */
3061
3062 static void
3063 output_loc_sequence (dw_loc_descr_ref loc)
3064 {
3065 for (; loc != NULL; loc = loc->dw_loc_next)
3066 {
3067 /* Output the opcode. */
3068 dw2_asm_output_data (1, loc->dw_loc_opc,
3069 "%s", dwarf_stack_op_name (loc->dw_loc_opc));
3070
3071 /* Output the operand(s) (if any). */
3072 output_loc_operands (loc);
3073 }
3074 }
3075
3076 /* This routine will generate the correct assembly data for a location
3077 description based on a cfi entry with a complex address. */
3078
3079 static void
3080 output_cfa_loc (dw_cfi_ref cfi)
3081 {
3082 dw_loc_descr_ref loc;
3083 unsigned long size;
3084
3085 /* Output the size of the block. */
3086 loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
3087 size = size_of_locs (loc);
3088 dw2_asm_output_data_uleb128 (size, NULL);
3089
3090 /* Now output the operations themselves. */
3091 output_loc_sequence (loc);
3092 }
3093
3094 /* This function builds a dwarf location descriptor sequence from
3095 a dw_cfa_location. */
3096
3097 static struct dw_loc_descr_struct *
3098 build_cfa_loc (dw_cfa_location *cfa)
3099 {
3100 struct dw_loc_descr_struct *head, *tmp;
3101
3102 if (cfa->indirect == 0)
3103 abort ();
3104
3105 if (cfa->base_offset)
3106 {
3107 if (cfa->reg <= 31)
3108 head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->base_offset, 0);
3109 else
3110 head = new_loc_descr (DW_OP_bregx, cfa->reg, cfa->base_offset);
3111 }
3112 else if (cfa->reg <= 31)
3113 head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
3114 else
3115 head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
3116
3117 head->dw_loc_oprnd1.val_class = dw_val_class_const;
3118 tmp = new_loc_descr (DW_OP_deref, 0, 0);
3119 add_loc_descr (&head, tmp);
3120 if (cfa->offset != 0)
3121 {
3122 tmp = new_loc_descr (DW_OP_plus_uconst, cfa->offset, 0);
3123 add_loc_descr (&head, tmp);
3124 }
3125
3126 return head;
3127 }
3128
3129 /* This function fills in aa dw_cfa_location structure from a dwarf location
3130 descriptor sequence. */
3131
3132 static void
3133 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
3134 {
3135 struct dw_loc_descr_struct *ptr;
3136 cfa->offset = 0;
3137 cfa->base_offset = 0;
3138 cfa->indirect = 0;
3139 cfa->reg = -1;
3140
3141 for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
3142 {
3143 enum dwarf_location_atom op = ptr->dw_loc_opc;
3144
3145 switch (op)
3146 {
3147 case DW_OP_reg0:
3148 case DW_OP_reg1:
3149 case DW_OP_reg2:
3150 case DW_OP_reg3:
3151 case DW_OP_reg4:
3152 case DW_OP_reg5:
3153 case DW_OP_reg6:
3154 case DW_OP_reg7:
3155 case DW_OP_reg8:
3156 case DW_OP_reg9:
3157 case DW_OP_reg10:
3158 case DW_OP_reg11:
3159 case DW_OP_reg12:
3160 case DW_OP_reg13:
3161 case DW_OP_reg14:
3162 case DW_OP_reg15:
3163 case DW_OP_reg16:
3164 case DW_OP_reg17:
3165 case DW_OP_reg18:
3166 case DW_OP_reg19:
3167 case DW_OP_reg20:
3168 case DW_OP_reg21:
3169 case DW_OP_reg22:
3170 case DW_OP_reg23:
3171 case DW_OP_reg24:
3172 case DW_OP_reg25:
3173 case DW_OP_reg26:
3174 case DW_OP_reg27:
3175 case DW_OP_reg28:
3176 case DW_OP_reg29:
3177 case DW_OP_reg30:
3178 case DW_OP_reg31:
3179 cfa->reg = op - DW_OP_reg0;
3180 break;
3181 case DW_OP_regx:
3182 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3183 break;
3184 case DW_OP_breg0:
3185 case DW_OP_breg1:
3186 case DW_OP_breg2:
3187 case DW_OP_breg3:
3188 case DW_OP_breg4:
3189 case DW_OP_breg5:
3190 case DW_OP_breg6:
3191 case DW_OP_breg7:
3192 case DW_OP_breg8:
3193 case DW_OP_breg9:
3194 case DW_OP_breg10:
3195 case DW_OP_breg11:
3196 case DW_OP_breg12:
3197 case DW_OP_breg13:
3198 case DW_OP_breg14:
3199 case DW_OP_breg15:
3200 case DW_OP_breg16:
3201 case DW_OP_breg17:
3202 case DW_OP_breg18:
3203 case DW_OP_breg19:
3204 case DW_OP_breg20:
3205 case DW_OP_breg21:
3206 case DW_OP_breg22:
3207 case DW_OP_breg23:
3208 case DW_OP_breg24:
3209 case DW_OP_breg25:
3210 case DW_OP_breg26:
3211 case DW_OP_breg27:
3212 case DW_OP_breg28:
3213 case DW_OP_breg29:
3214 case DW_OP_breg30:
3215 case DW_OP_breg31:
3216 cfa->reg = op - DW_OP_breg0;
3217 cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
3218 break;
3219 case DW_OP_bregx:
3220 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3221 cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
3222 break;
3223 case DW_OP_deref:
3224 cfa->indirect = 1;
3225 break;
3226 case DW_OP_plus_uconst:
3227 cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
3228 break;
3229 default:
3230 internal_error ("DW_LOC_OP %s not implemented\n",
3231 dwarf_stack_op_name (ptr->dw_loc_opc));
3232 }
3233 }
3234 }
3235 #endif /* .debug_frame support */
3236 \f
3237 /* And now, the support for symbolic debugging information. */
3238 #ifdef DWARF2_DEBUGGING_INFO
3239
3240 /* .debug_str support. */
3241 static int output_indirect_string (void **, void *);
3242
3243 static void dwarf2out_init (const char *);
3244 static void dwarf2out_finish (const char *);
3245 static void dwarf2out_define (unsigned int, const char *);
3246 static void dwarf2out_undef (unsigned int, const char *);
3247 static void dwarf2out_start_source_file (unsigned, const char *);
3248 static void dwarf2out_end_source_file (unsigned);
3249 static void dwarf2out_begin_block (unsigned, unsigned);
3250 static void dwarf2out_end_block (unsigned, unsigned);
3251 static bool dwarf2out_ignore_block (tree);
3252 static void dwarf2out_global_decl (tree);
3253 static void dwarf2out_type_decl (tree, int);
3254 static void dwarf2out_imported_module_or_decl (tree, tree);
3255 static void dwarf2out_abstract_function (tree);
3256 static void dwarf2out_var_location (rtx);
3257 static void dwarf2out_begin_function (tree);
3258
3259 /* The debug hooks structure. */
3260
3261 const struct gcc_debug_hooks dwarf2_debug_hooks =
3262 {
3263 dwarf2out_init,
3264 dwarf2out_finish,
3265 dwarf2out_define,
3266 dwarf2out_undef,
3267 dwarf2out_start_source_file,
3268 dwarf2out_end_source_file,
3269 dwarf2out_begin_block,
3270 dwarf2out_end_block,
3271 dwarf2out_ignore_block,
3272 dwarf2out_source_line,
3273 dwarf2out_begin_prologue,
3274 debug_nothing_int_charstar, /* end_prologue */
3275 dwarf2out_end_epilogue,
3276 dwarf2out_begin_function,
3277 debug_nothing_int, /* end_function */
3278 dwarf2out_decl, /* function_decl */
3279 dwarf2out_global_decl,
3280 dwarf2out_type_decl, /* type_decl */
3281 dwarf2out_imported_module_or_decl,
3282 debug_nothing_tree, /* deferred_inline_function */
3283 /* The DWARF 2 backend tries to reduce debugging bloat by not
3284 emitting the abstract description of inline functions until
3285 something tries to reference them. */
3286 dwarf2out_abstract_function, /* outlining_inline_function */
3287 debug_nothing_rtx, /* label */
3288 debug_nothing_int, /* handle_pch */
3289 dwarf2out_var_location
3290 };
3291 #endif
3292 \f
3293 /* NOTE: In the comments in this file, many references are made to
3294 "Debugging Information Entries". This term is abbreviated as `DIE'
3295 throughout the remainder of this file. */
3296
3297 /* An internal representation of the DWARF output is built, and then
3298 walked to generate the DWARF debugging info. The walk of the internal
3299 representation is done after the entire program has been compiled.
3300 The types below are used to describe the internal representation. */
3301
3302 /* Various DIE's use offsets relative to the beginning of the
3303 .debug_info section to refer to each other. */
3304
3305 typedef long int dw_offset;
3306
3307 /* Define typedefs here to avoid circular dependencies. */
3308
3309 typedef struct dw_attr_struct *dw_attr_ref;
3310 typedef struct dw_line_info_struct *dw_line_info_ref;
3311 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
3312 typedef struct pubname_struct *pubname_ref;
3313 typedef struct dw_ranges_struct *dw_ranges_ref;
3314
3315 /* Each entry in the line_info_table maintains the file and
3316 line number associated with the label generated for that
3317 entry. The label gives the PC value associated with
3318 the line number entry. */
3319
3320 typedef struct dw_line_info_struct GTY(())
3321 {
3322 unsigned long dw_file_num;
3323 unsigned long dw_line_num;
3324 }
3325 dw_line_info_entry;
3326
3327 /* Line information for functions in separate sections; each one gets its
3328 own sequence. */
3329 typedef struct dw_separate_line_info_struct GTY(())
3330 {
3331 unsigned long dw_file_num;
3332 unsigned long dw_line_num;
3333 unsigned long function;
3334 }
3335 dw_separate_line_info_entry;
3336
3337 /* Each DIE attribute has a field specifying the attribute kind,
3338 a link to the next attribute in the chain, and an attribute value.
3339 Attributes are typically linked below the DIE they modify. */
3340
3341 typedef struct dw_attr_struct GTY(())
3342 {
3343 enum dwarf_attribute dw_attr;
3344 dw_attr_ref dw_attr_next;
3345 dw_val_node dw_attr_val;
3346 }
3347 dw_attr_node;
3348
3349 /* The Debugging Information Entry (DIE) structure */
3350
3351 typedef struct die_struct GTY(())
3352 {
3353 enum dwarf_tag die_tag;
3354 char *die_symbol;
3355 dw_attr_ref die_attr;
3356 dw_die_ref die_parent;
3357 dw_die_ref die_child;
3358 dw_die_ref die_sib;
3359 dw_die_ref die_definition; /* ref from a specification to its definition */
3360 dw_offset die_offset;
3361 unsigned long die_abbrev;
3362 int die_mark;
3363 unsigned int decl_id;
3364 }
3365 die_node;
3366
3367 /* The pubname structure */
3368
3369 typedef struct pubname_struct GTY(())
3370 {
3371 dw_die_ref die;
3372 char *name;
3373 }
3374 pubname_entry;
3375
3376 struct dw_ranges_struct GTY(())
3377 {
3378 int block_num;
3379 };
3380
3381 /* The limbo die list structure. */
3382 typedef struct limbo_die_struct GTY(())
3383 {
3384 dw_die_ref die;
3385 tree created_for;
3386 struct limbo_die_struct *next;
3387 }
3388 limbo_die_node;
3389
3390 /* How to start an assembler comment. */
3391 #ifndef ASM_COMMENT_START
3392 #define ASM_COMMENT_START ";#"
3393 #endif
3394
3395 /* Define a macro which returns nonzero for a TYPE_DECL which was
3396 implicitly generated for a tagged type.
3397
3398 Note that unlike the gcc front end (which generates a NULL named
3399 TYPE_DECL node for each complete tagged type, each array type, and
3400 each function type node created) the g++ front end generates a
3401 _named_ TYPE_DECL node for each tagged type node created.
3402 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
3403 generate a DW_TAG_typedef DIE for them. */
3404
3405 #define TYPE_DECL_IS_STUB(decl) \
3406 (DECL_NAME (decl) == NULL_TREE \
3407 || (DECL_ARTIFICIAL (decl) \
3408 && is_tagged_type (TREE_TYPE (decl)) \
3409 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
3410 /* This is necessary for stub decls that \
3411 appear in nested inline functions. */ \
3412 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
3413 && (decl_ultimate_origin (decl) \
3414 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
3415
3416 /* Information concerning the compilation unit's programming
3417 language, and compiler version. */
3418
3419 /* Fixed size portion of the DWARF compilation unit header. */
3420 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
3421 (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
3422
3423 /* Fixed size portion of public names info. */
3424 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
3425
3426 /* Fixed size portion of the address range info. */
3427 #define DWARF_ARANGES_HEADER_SIZE \
3428 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3429 DWARF2_ADDR_SIZE * 2) \
3430 - DWARF_INITIAL_LENGTH_SIZE)
3431
3432 /* Size of padding portion in the address range info. It must be
3433 aligned to twice the pointer size. */
3434 #define DWARF_ARANGES_PAD_SIZE \
3435 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3436 DWARF2_ADDR_SIZE * 2) \
3437 - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
3438
3439 /* Use assembler line directives if available. */
3440 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
3441 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
3442 #define DWARF2_ASM_LINE_DEBUG_INFO 1
3443 #else
3444 #define DWARF2_ASM_LINE_DEBUG_INFO 0
3445 #endif
3446 #endif
3447
3448 /* Minimum line offset in a special line info. opcode.
3449 This value was chosen to give a reasonable range of values. */
3450 #define DWARF_LINE_BASE -10
3451
3452 /* First special line opcode - leave room for the standard opcodes. */
3453 #define DWARF_LINE_OPCODE_BASE 10
3454
3455 /* Range of line offsets in a special line info. opcode. */
3456 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
3457
3458 /* Flag that indicates the initial value of the is_stmt_start flag.
3459 In the present implementation, we do not mark any lines as
3460 the beginning of a source statement, because that information
3461 is not made available by the GCC front-end. */
3462 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
3463
3464 #ifdef DWARF2_DEBUGGING_INFO
3465 /* This location is used by calc_die_sizes() to keep track
3466 the offset of each DIE within the .debug_info section. */
3467 static unsigned long next_die_offset;
3468 #endif
3469
3470 /* Record the root of the DIE's built for the current compilation unit. */
3471 static GTY(()) dw_die_ref comp_unit_die;
3472
3473 /* A list of DIEs with a NULL parent waiting to be relocated. */
3474 static GTY(()) limbo_die_node *limbo_die_list;
3475
3476 /* Filenames referenced by this compilation unit. */
3477 static GTY(()) varray_type file_table;
3478 static GTY(()) varray_type file_table_emitted;
3479 static GTY(()) size_t file_table_last_lookup_index;
3480
3481 /* A hash table of references to DIE's that describe declarations.
3482 The key is a DECL_UID() which is a unique number identifying each decl. */
3483 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
3484
3485 /* Node of the variable location list. */
3486 struct var_loc_node GTY ((chain_next ("%h.next")))
3487 {
3488 rtx GTY (()) var_loc_note;
3489 const char * GTY (()) label;
3490 struct var_loc_node * GTY (()) next;
3491 };
3492
3493 /* Variable location list. */
3494 struct var_loc_list_def GTY (())
3495 {
3496 struct var_loc_node * GTY (()) first;
3497
3498 /* Do not mark the last element of the chained list because
3499 it is marked through the chain. */
3500 struct var_loc_node * GTY ((skip ("%h"))) last;
3501
3502 /* DECL_UID of the variable decl. */
3503 unsigned int decl_id;
3504 };
3505 typedef struct var_loc_list_def var_loc_list;
3506
3507
3508 /* Table of decl location linked lists. */
3509 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
3510
3511 /* A pointer to the base of a list of references to DIE's that
3512 are uniquely identified by their tag, presence/absence of
3513 children DIE's, and list of attribute/value pairs. */
3514 static GTY((length ("abbrev_die_table_allocated")))
3515 dw_die_ref *abbrev_die_table;
3516
3517 /* Number of elements currently allocated for abbrev_die_table. */
3518 static GTY(()) unsigned abbrev_die_table_allocated;
3519
3520 /* Number of elements in type_die_table currently in use. */
3521 static GTY(()) unsigned abbrev_die_table_in_use;
3522
3523 /* Size (in elements) of increments by which we may expand the
3524 abbrev_die_table. */
3525 #define ABBREV_DIE_TABLE_INCREMENT 256
3526
3527 /* A pointer to the base of a table that contains line information
3528 for each source code line in .text in the compilation unit. */
3529 static GTY((length ("line_info_table_allocated")))
3530 dw_line_info_ref line_info_table;
3531
3532 /* Number of elements currently allocated for line_info_table. */
3533 static GTY(()) unsigned line_info_table_allocated;
3534
3535 /* Number of elements in line_info_table currently in use. */
3536 static GTY(()) unsigned line_info_table_in_use;
3537
3538 /* A pointer to the base of a table that contains line information
3539 for each source code line outside of .text in the compilation unit. */
3540 static GTY ((length ("separate_line_info_table_allocated")))
3541 dw_separate_line_info_ref separate_line_info_table;
3542
3543 /* Number of elements currently allocated for separate_line_info_table. */
3544 static GTY(()) unsigned separate_line_info_table_allocated;
3545
3546 /* Number of elements in separate_line_info_table currently in use. */
3547 static GTY(()) unsigned separate_line_info_table_in_use;
3548
3549 /* Size (in elements) of increments by which we may expand the
3550 line_info_table. */
3551 #define LINE_INFO_TABLE_INCREMENT 1024
3552
3553 /* A pointer to the base of a table that contains a list of publicly
3554 accessible names. */
3555 static GTY ((length ("pubname_table_allocated"))) pubname_ref pubname_table;
3556
3557 /* Number of elements currently allocated for pubname_table. */
3558 static GTY(()) unsigned pubname_table_allocated;
3559
3560 /* Number of elements in pubname_table currently in use. */
3561 static GTY(()) unsigned pubname_table_in_use;
3562
3563 /* Size (in elements) of increments by which we may expand the
3564 pubname_table. */
3565 #define PUBNAME_TABLE_INCREMENT 64
3566
3567 /* Array of dies for which we should generate .debug_arange info. */
3568 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
3569
3570 /* Number of elements currently allocated for arange_table. */
3571 static GTY(()) unsigned arange_table_allocated;
3572
3573 /* Number of elements in arange_table currently in use. */
3574 static GTY(()) unsigned arange_table_in_use;
3575
3576 /* Size (in elements) of increments by which we may expand the
3577 arange_table. */
3578 #define ARANGE_TABLE_INCREMENT 64
3579
3580 /* Array of dies for which we should generate .debug_ranges info. */
3581 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
3582
3583 /* Number of elements currently allocated for ranges_table. */
3584 static GTY(()) unsigned ranges_table_allocated;
3585
3586 /* Number of elements in ranges_table currently in use. */
3587 static GTY(()) unsigned ranges_table_in_use;
3588
3589 /* Size (in elements) of increments by which we may expand the
3590 ranges_table. */
3591 #define RANGES_TABLE_INCREMENT 64
3592
3593 /* Whether we have location lists that need outputting */
3594 static GTY(()) unsigned have_location_lists;
3595
3596 /* Unique label counter. */
3597 static GTY(()) unsigned int loclabel_num;
3598
3599 #ifdef DWARF2_DEBUGGING_INFO
3600 /* Record whether the function being analyzed contains inlined functions. */
3601 static int current_function_has_inlines;
3602 #endif
3603 #if 0 && defined (MIPS_DEBUGGING_INFO)
3604 static int comp_unit_has_inlines;
3605 #endif
3606
3607 /* Number of file tables emitted in maybe_emit_file(). */
3608 static GTY(()) int emitcount = 0;
3609
3610 /* Number of internal labels generated by gen_internal_sym(). */
3611 static GTY(()) int label_num;
3612
3613 #ifdef DWARF2_DEBUGGING_INFO
3614
3615 /* Forward declarations for functions defined in this file. */
3616
3617 static int is_pseudo_reg (rtx);
3618 static tree type_main_variant (tree);
3619 static int is_tagged_type (tree);
3620 static const char *dwarf_tag_name (unsigned);
3621 static const char *dwarf_attr_name (unsigned);
3622 static const char *dwarf_form_name (unsigned);
3623 #if 0
3624 static const char *dwarf_type_encoding_name (unsigned);
3625 #endif
3626 static tree decl_ultimate_origin (tree);
3627 static tree block_ultimate_origin (tree);
3628 static tree decl_class_context (tree);
3629 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
3630 static inline enum dw_val_class AT_class (dw_attr_ref);
3631 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
3632 static inline unsigned AT_flag (dw_attr_ref);
3633 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3634 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
3635 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3636 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
3637 static void add_AT_long_long (dw_die_ref, enum dwarf_attribute, unsigned long,
3638 unsigned long);
3639 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3640 unsigned int, unsigned char *);
3641 static hashval_t debug_str_do_hash (const void *);
3642 static int debug_str_eq (const void *, const void *);
3643 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3644 static inline const char *AT_string (dw_attr_ref);
3645 static int AT_string_form (dw_attr_ref);
3646 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3647 static void add_AT_specification (dw_die_ref, dw_die_ref);
3648 static inline dw_die_ref AT_ref (dw_attr_ref);
3649 static inline int AT_ref_external (dw_attr_ref);
3650 static inline void set_AT_ref_external (dw_attr_ref, int);
3651 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3652 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3653 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
3654 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3655 dw_loc_list_ref);
3656 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
3657 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
3658 static inline rtx AT_addr (dw_attr_ref);
3659 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3660 static void add_AT_lbl_offset (dw_die_ref, enum dwarf_attribute, const char *);
3661 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3662 unsigned HOST_WIDE_INT);
3663 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3664 unsigned long);
3665 static inline const char *AT_lbl (dw_attr_ref);
3666 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
3667 static const char *get_AT_low_pc (dw_die_ref);
3668 static const char *get_AT_hi_pc (dw_die_ref);
3669 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3670 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
3671 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
3672 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
3673 static bool is_c_family (void);
3674 static bool is_cxx (void);
3675 static bool is_java (void);
3676 static bool is_fortran (void);
3677 static bool is_ada (void);
3678 static void remove_AT (dw_die_ref, enum dwarf_attribute);
3679 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
3680 static inline void free_die (dw_die_ref);
3681 static void remove_children (dw_die_ref);
3682 static void add_child_die (dw_die_ref, dw_die_ref);
3683 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
3684 static dw_die_ref lookup_type_die (tree);
3685 static void equate_type_number_to_die (tree, dw_die_ref);
3686 static hashval_t decl_die_table_hash (const void *);
3687 static int decl_die_table_eq (const void *, const void *);
3688 static dw_die_ref lookup_decl_die (tree);
3689 static hashval_t decl_loc_table_hash (const void *);
3690 static int decl_loc_table_eq (const void *, const void *);
3691 static var_loc_list *lookup_decl_loc (tree);
3692 static void equate_decl_number_to_die (tree, dw_die_ref);
3693 static void add_var_loc_to_decl (tree, struct var_loc_node *);
3694 static void print_spaces (FILE *);
3695 static void print_die (dw_die_ref, FILE *);
3696 static void print_dwarf_line_table (FILE *);
3697 static void reverse_die_lists (dw_die_ref);
3698 static void reverse_all_dies (dw_die_ref);
3699 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
3700 static dw_die_ref pop_compile_unit (dw_die_ref);
3701 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
3702 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
3703 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
3704 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
3705 static int same_dw_val_p (dw_val_node *, dw_val_node *, int *);
3706 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
3707 static int same_die_p (dw_die_ref, dw_die_ref, int *);
3708 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
3709 static void compute_section_prefix (dw_die_ref);
3710 static int is_type_die (dw_die_ref);
3711 static int is_comdat_die (dw_die_ref);
3712 static int is_symbol_die (dw_die_ref);
3713 static void assign_symbol_names (dw_die_ref);
3714 static void break_out_includes (dw_die_ref);
3715 static hashval_t htab_cu_hash (const void *);
3716 static int htab_cu_eq (const void *, const void *);
3717 static void htab_cu_del (void *);
3718 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
3719 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
3720 static void add_sibling_attributes (dw_die_ref);
3721 static void build_abbrev_table (dw_die_ref);
3722 static void output_location_lists (dw_die_ref);
3723 static int constant_size (long unsigned);
3724 static unsigned long size_of_die (dw_die_ref);
3725 static void calc_die_sizes (dw_die_ref);
3726 static void mark_dies (dw_die_ref);
3727 static void unmark_dies (dw_die_ref);
3728 static void unmark_all_dies (dw_die_ref);
3729 static unsigned long size_of_pubnames (void);
3730 static unsigned long size_of_aranges (void);
3731 static enum dwarf_form value_format (dw_attr_ref);
3732 static void output_value_format (dw_attr_ref);
3733 static void output_abbrev_section (void);
3734 static void output_die_symbol (dw_die_ref);
3735 static void output_die (dw_die_ref);
3736 static void output_compilation_unit_header (void);
3737 static void output_comp_unit (dw_die_ref, int);
3738 static const char *dwarf2_name (tree, int);
3739 static void add_pubname (tree, dw_die_ref);
3740 static void output_pubnames (void);
3741 static void add_arange (tree, dw_die_ref);
3742 static void output_aranges (void);
3743 static unsigned int add_ranges (tree);
3744 static void output_ranges (void);
3745 static void output_line_info (void);
3746 static void output_file_names (void);
3747 static dw_die_ref base_type_die (tree);
3748 static tree root_type (tree);
3749 static int is_base_type (tree);
3750 static bool is_subrange_type (tree);
3751 static dw_die_ref subrange_type_die (tree, dw_die_ref);
3752 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
3753 static int type_is_enum (tree);
3754 static unsigned int reg_number (rtx);
3755 static dw_loc_descr_ref reg_loc_descriptor (rtx);
3756 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int);
3757 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx);
3758 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
3759 static dw_loc_descr_ref based_loc_descr (unsigned, HOST_WIDE_INT, bool);
3760 static int is_based_loc (rtx);
3761 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode, bool);
3762 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx);
3763 static dw_loc_descr_ref loc_descriptor (rtx, bool);
3764 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
3765 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
3766 static tree field_type (tree);
3767 static unsigned int simple_type_align_in_bits (tree);
3768 static unsigned int simple_decl_align_in_bits (tree);
3769 static unsigned HOST_WIDE_INT simple_type_size_in_bits (tree);
3770 static HOST_WIDE_INT field_byte_offset (tree);
3771 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
3772 dw_loc_descr_ref);
3773 static void add_data_member_location_attribute (dw_die_ref, tree);
3774 static void add_const_value_attribute (dw_die_ref, rtx);
3775 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
3776 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
3777 static void insert_float (rtx, unsigned char *);
3778 static rtx rtl_for_decl_location (tree);
3779 static void add_location_or_const_value_attribute (dw_die_ref, tree,
3780 enum dwarf_attribute);
3781 static void tree_add_const_value_attribute (dw_die_ref, tree);
3782 static void add_name_attribute (dw_die_ref, const char *);
3783 static void add_comp_dir_attribute (dw_die_ref);
3784 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
3785 static void add_subscript_info (dw_die_ref, tree);
3786 static void add_byte_size_attribute (dw_die_ref, tree);
3787 static void add_bit_offset_attribute (dw_die_ref, tree);
3788 static void add_bit_size_attribute (dw_die_ref, tree);
3789 static void add_prototyped_attribute (dw_die_ref, tree);
3790 static void add_abstract_origin_attribute (dw_die_ref, tree);
3791 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
3792 static void add_src_coords_attributes (dw_die_ref, tree);
3793 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
3794 static void push_decl_scope (tree);
3795 static void pop_decl_scope (void);
3796 static dw_die_ref scope_die_for (tree, dw_die_ref);
3797 static inline int local_scope_p (dw_die_ref);
3798 static inline int class_or_namespace_scope_p (dw_die_ref);
3799 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
3800 static const char *type_tag (tree);
3801 static tree member_declared_type (tree);
3802 #if 0
3803 static const char *decl_start_label (tree);
3804 #endif
3805 static void gen_array_type_die (tree, dw_die_ref);
3806 static void gen_set_type_die (tree, dw_die_ref);
3807 #if 0
3808 static void gen_entry_point_die (tree, dw_die_ref);
3809 #endif
3810 static void gen_inlined_enumeration_type_die (tree, dw_die_ref);
3811 static void gen_inlined_structure_type_die (tree, dw_die_ref);
3812 static void gen_inlined_union_type_die (tree, dw_die_ref);
3813 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
3814 static dw_die_ref gen_formal_parameter_die (tree, dw_die_ref);
3815 static void gen_unspecified_parameters_die (tree, dw_die_ref);
3816 static void gen_formal_types_die (tree, dw_die_ref);
3817 static void gen_subprogram_die (tree, dw_die_ref);
3818 static void gen_variable_die (tree, dw_die_ref);
3819 static void gen_label_die (tree, dw_die_ref);
3820 static void gen_lexical_block_die (tree, dw_die_ref, int);
3821 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
3822 static void gen_field_die (tree, dw_die_ref);
3823 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
3824 static dw_die_ref gen_compile_unit_die (const char *);
3825 static void gen_string_type_die (tree, dw_die_ref);
3826 static void gen_inheritance_die (tree, tree, dw_die_ref);
3827 static void gen_member_die (tree, dw_die_ref);
3828 static void gen_struct_or_union_type_die (tree, dw_die_ref);
3829 static void gen_subroutine_type_die (tree, dw_die_ref);
3830 static void gen_typedef_die (tree, dw_die_ref);
3831 static void gen_type_die (tree, dw_die_ref);
3832 static void gen_tagged_type_instantiation_die (tree, dw_die_ref);
3833 static void gen_block_die (tree, dw_die_ref, int);
3834 static void decls_for_scope (tree, dw_die_ref, int);
3835 static int is_redundant_typedef (tree);
3836 static void gen_namespace_die (tree);
3837 static void gen_decl_die (tree, dw_die_ref);
3838 static dw_die_ref force_decl_die (tree);
3839 static dw_die_ref force_type_die (tree);
3840 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
3841 static void declare_in_namespace (tree, dw_die_ref);
3842 static unsigned lookup_filename (const char *);
3843 static void init_file_table (void);
3844 static void retry_incomplete_types (void);
3845 static void gen_type_die_for_member (tree, tree, dw_die_ref);
3846 static void splice_child_die (dw_die_ref, dw_die_ref);
3847 static int file_info_cmp (const void *, const void *);
3848 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
3849 const char *, const char *, unsigned);
3850 static void add_loc_descr_to_loc_list (dw_loc_list_ref *, dw_loc_descr_ref,
3851 const char *, const char *,
3852 const char *);
3853 static void output_loc_list (dw_loc_list_ref);
3854 static char *gen_internal_sym (const char *);
3855
3856 static void prune_unmark_dies (dw_die_ref);
3857 static void prune_unused_types_mark (dw_die_ref, int);
3858 static void prune_unused_types_walk (dw_die_ref);
3859 static void prune_unused_types_walk_attribs (dw_die_ref);
3860 static void prune_unused_types_prune (dw_die_ref);
3861 static void prune_unused_types (void);
3862 static int maybe_emit_file (int);
3863
3864 /* Section names used to hold DWARF debugging information. */
3865 #ifndef DEBUG_INFO_SECTION
3866 #define DEBUG_INFO_SECTION ".debug_info"
3867 #endif
3868 #ifndef DEBUG_ABBREV_SECTION
3869 #define DEBUG_ABBREV_SECTION ".debug_abbrev"
3870 #endif
3871 #ifndef DEBUG_ARANGES_SECTION
3872 #define DEBUG_ARANGES_SECTION ".debug_aranges"
3873 #endif
3874 #ifndef DEBUG_MACINFO_SECTION
3875 #define DEBUG_MACINFO_SECTION ".debug_macinfo"
3876 #endif
3877 #ifndef DEBUG_LINE_SECTION
3878 #define DEBUG_LINE_SECTION ".debug_line"
3879 #endif
3880 #ifndef DEBUG_LOC_SECTION
3881 #define DEBUG_LOC_SECTION ".debug_loc"
3882 #endif
3883 #ifndef DEBUG_PUBNAMES_SECTION
3884 #define DEBUG_PUBNAMES_SECTION ".debug_pubnames"
3885 #endif
3886 #ifndef DEBUG_STR_SECTION
3887 #define DEBUG_STR_SECTION ".debug_str"
3888 #endif
3889 #ifndef DEBUG_RANGES_SECTION
3890 #define DEBUG_RANGES_SECTION ".debug_ranges"
3891 #endif
3892
3893 /* Standard ELF section names for compiled code and data. */
3894 #ifndef TEXT_SECTION_NAME
3895 #define TEXT_SECTION_NAME ".text"
3896 #endif
3897
3898 /* Section flags for .debug_str section. */
3899 #define DEBUG_STR_SECTION_FLAGS \
3900 (HAVE_GAS_SHF_MERGE && flag_merge_constants \
3901 ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1 \
3902 : SECTION_DEBUG)
3903
3904 /* Labels we insert at beginning sections we can reference instead of
3905 the section names themselves. */
3906
3907 #ifndef TEXT_SECTION_LABEL
3908 #define TEXT_SECTION_LABEL "Ltext"
3909 #endif
3910 #ifndef DEBUG_LINE_SECTION_LABEL
3911 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
3912 #endif
3913 #ifndef DEBUG_INFO_SECTION_LABEL
3914 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
3915 #endif
3916 #ifndef DEBUG_ABBREV_SECTION_LABEL
3917 #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev"
3918 #endif
3919 #ifndef DEBUG_LOC_SECTION_LABEL
3920 #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc"
3921 #endif
3922 #ifndef DEBUG_RANGES_SECTION_LABEL
3923 #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges"
3924 #endif
3925 #ifndef DEBUG_MACINFO_SECTION_LABEL
3926 #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo"
3927 #endif
3928
3929 /* Definitions of defaults for formats and names of various special
3930 (artificial) labels which may be generated within this file (when the -g
3931 options is used and DWARF2_DEBUGGING_INFO is in effect.
3932 If necessary, these may be overridden from within the tm.h file, but
3933 typically, overriding these defaults is unnecessary. */
3934
3935 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3936 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3937 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3938 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3939 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3940 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3941 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3942 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
3943
3944 #ifndef TEXT_END_LABEL
3945 #define TEXT_END_LABEL "Letext"
3946 #endif
3947 #ifndef BLOCK_BEGIN_LABEL
3948 #define BLOCK_BEGIN_LABEL "LBB"
3949 #endif
3950 #ifndef BLOCK_END_LABEL
3951 #define BLOCK_END_LABEL "LBE"
3952 #endif
3953 #ifndef LINE_CODE_LABEL
3954 #define LINE_CODE_LABEL "LM"
3955 #endif
3956 #ifndef SEPARATE_LINE_CODE_LABEL
3957 #define SEPARATE_LINE_CODE_LABEL "LSM"
3958 #endif
3959 \f
3960 /* We allow a language front-end to designate a function that is to be
3961 called to "demangle" any name before it it put into a DIE. */
3962
3963 static const char *(*demangle_name_func) (const char *);
3964
3965 void
3966 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
3967 {
3968 demangle_name_func = func;
3969 }
3970
3971 /* Test if rtl node points to a pseudo register. */
3972
3973 static inline int
3974 is_pseudo_reg (rtx rtl)
3975 {
3976 return ((GET_CODE (rtl) == REG && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3977 || (GET_CODE (rtl) == SUBREG
3978 && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
3979 }
3980
3981 /* Return a reference to a type, with its const and volatile qualifiers
3982 removed. */
3983
3984 static inline tree
3985 type_main_variant (tree type)
3986 {
3987 type = TYPE_MAIN_VARIANT (type);
3988
3989 /* ??? There really should be only one main variant among any group of
3990 variants of a given type (and all of the MAIN_VARIANT values for all
3991 members of the group should point to that one type) but sometimes the C
3992 front-end messes this up for array types, so we work around that bug
3993 here. */
3994 if (TREE_CODE (type) == ARRAY_TYPE)
3995 while (type != TYPE_MAIN_VARIANT (type))
3996 type = TYPE_MAIN_VARIANT (type);
3997
3998 return type;
3999 }
4000
4001 /* Return nonzero if the given type node represents a tagged type. */
4002
4003 static inline int
4004 is_tagged_type (tree type)
4005 {
4006 enum tree_code code = TREE_CODE (type);
4007
4008 return (code == RECORD_TYPE || code == UNION_TYPE
4009 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
4010 }
4011
4012 /* Convert a DIE tag into its string name. */
4013
4014 static const char *
4015 dwarf_tag_name (unsigned int tag)
4016 {
4017 switch (tag)
4018 {
4019 case DW_TAG_padding:
4020 return "DW_TAG_padding";
4021 case DW_TAG_array_type:
4022 return "DW_TAG_array_type";
4023 case DW_TAG_class_type:
4024 return "DW_TAG_class_type";
4025 case DW_TAG_entry_point:
4026 return "DW_TAG_entry_point";
4027 case DW_TAG_enumeration_type:
4028 return "DW_TAG_enumeration_type";
4029 case DW_TAG_formal_parameter:
4030 return "DW_TAG_formal_parameter";
4031 case DW_TAG_imported_declaration:
4032 return "DW_TAG_imported_declaration";
4033 case DW_TAG_label:
4034 return "DW_TAG_label";
4035 case DW_TAG_lexical_block:
4036 return "DW_TAG_lexical_block";
4037 case DW_TAG_member:
4038 return "DW_TAG_member";
4039 case DW_TAG_pointer_type:
4040 return "DW_TAG_pointer_type";
4041 case DW_TAG_reference_type:
4042 return "DW_TAG_reference_type";
4043 case DW_TAG_compile_unit:
4044 return "DW_TAG_compile_unit";
4045 case DW_TAG_string_type:
4046 return "DW_TAG_string_type";
4047 case DW_TAG_structure_type:
4048 return "DW_TAG_structure_type";
4049 case DW_TAG_subroutine_type:
4050 return "DW_TAG_subroutine_type";
4051 case DW_TAG_typedef:
4052 return "DW_TAG_typedef";
4053 case DW_TAG_union_type:
4054 return "DW_TAG_union_type";
4055 case DW_TAG_unspecified_parameters:
4056 return "DW_TAG_unspecified_parameters";
4057 case DW_TAG_variant:
4058 return "DW_TAG_variant";
4059 case DW_TAG_common_block:
4060 return "DW_TAG_common_block";
4061 case DW_TAG_common_inclusion:
4062 return "DW_TAG_common_inclusion";
4063 case DW_TAG_inheritance:
4064 return "DW_TAG_inheritance";
4065 case DW_TAG_inlined_subroutine:
4066 return "DW_TAG_inlined_subroutine";
4067 case DW_TAG_module:
4068 return "DW_TAG_module";
4069 case DW_TAG_ptr_to_member_type:
4070 return "DW_TAG_ptr_to_member_type";
4071 case DW_TAG_set_type:
4072 return "DW_TAG_set_type";
4073 case DW_TAG_subrange_type:
4074 return "DW_TAG_subrange_type";
4075 case DW_TAG_with_stmt:
4076 return "DW_TAG_with_stmt";
4077 case DW_TAG_access_declaration:
4078 return "DW_TAG_access_declaration";
4079 case DW_TAG_base_type:
4080 return "DW_TAG_base_type";
4081 case DW_TAG_catch_block:
4082 return "DW_TAG_catch_block";
4083 case DW_TAG_const_type:
4084 return "DW_TAG_const_type";
4085 case DW_TAG_constant:
4086 return "DW_TAG_constant";
4087 case DW_TAG_enumerator:
4088 return "DW_TAG_enumerator";
4089 case DW_TAG_file_type:
4090 return "DW_TAG_file_type";
4091 case DW_TAG_friend:
4092 return "DW_TAG_friend";
4093 case DW_TAG_namelist:
4094 return "DW_TAG_namelist";
4095 case DW_TAG_namelist_item:
4096 return "DW_TAG_namelist_item";
4097 case DW_TAG_namespace:
4098 return "DW_TAG_namespace";
4099 case DW_TAG_packed_type:
4100 return "DW_TAG_packed_type";
4101 case DW_TAG_subprogram:
4102 return "DW_TAG_subprogram";
4103 case DW_TAG_template_type_param:
4104 return "DW_TAG_template_type_param";
4105 case DW_TAG_template_value_param:
4106 return "DW_TAG_template_value_param";
4107 case DW_TAG_thrown_type:
4108 return "DW_TAG_thrown_type";
4109 case DW_TAG_try_block:
4110 return "DW_TAG_try_block";
4111 case DW_TAG_variant_part:
4112 return "DW_TAG_variant_part";
4113 case DW_TAG_variable:
4114 return "DW_TAG_variable";
4115 case DW_TAG_volatile_type:
4116 return "DW_TAG_volatile_type";
4117 case DW_TAG_imported_module:
4118 return "DW_TAG_imported_module";
4119 case DW_TAG_MIPS_loop:
4120 return "DW_TAG_MIPS_loop";
4121 case DW_TAG_format_label:
4122 return "DW_TAG_format_label";
4123 case DW_TAG_function_template:
4124 return "DW_TAG_function_template";
4125 case DW_TAG_class_template:
4126 return "DW_TAG_class_template";
4127 case DW_TAG_GNU_BINCL:
4128 return "DW_TAG_GNU_BINCL";
4129 case DW_TAG_GNU_EINCL:
4130 return "DW_TAG_GNU_EINCL";
4131 default:
4132 return "DW_TAG_<unknown>";
4133 }
4134 }
4135
4136 /* Convert a DWARF attribute code into its string name. */
4137
4138 static const char *
4139 dwarf_attr_name (unsigned int attr)
4140 {
4141 switch (attr)
4142 {
4143 case DW_AT_sibling:
4144 return "DW_AT_sibling";
4145 case DW_AT_location:
4146 return "DW_AT_location";
4147 case DW_AT_name:
4148 return "DW_AT_name";
4149 case DW_AT_ordering:
4150 return "DW_AT_ordering";
4151 case DW_AT_subscr_data:
4152 return "DW_AT_subscr_data";
4153 case DW_AT_byte_size:
4154 return "DW_AT_byte_size";
4155 case DW_AT_bit_offset:
4156 return "DW_AT_bit_offset";
4157 case DW_AT_bit_size:
4158 return "DW_AT_bit_size";
4159 case DW_AT_element_list:
4160 return "DW_AT_element_list";
4161 case DW_AT_stmt_list:
4162 return "DW_AT_stmt_list";
4163 case DW_AT_low_pc:
4164 return "DW_AT_low_pc";
4165 case DW_AT_high_pc:
4166 return "DW_AT_high_pc";
4167 case DW_AT_language:
4168 return "DW_AT_language";
4169 case DW_AT_member:
4170 return "DW_AT_member";
4171 case DW_AT_discr:
4172 return "DW_AT_discr";
4173 case DW_AT_discr_value:
4174 return "DW_AT_discr_value";
4175 case DW_AT_visibility:
4176 return "DW_AT_visibility";
4177 case DW_AT_import:
4178 return "DW_AT_import";
4179 case DW_AT_string_length:
4180 return "DW_AT_string_length";
4181 case DW_AT_common_reference:
4182 return "DW_AT_common_reference";
4183 case DW_AT_comp_dir:
4184 return "DW_AT_comp_dir";
4185 case DW_AT_const_value:
4186 return "DW_AT_const_value";
4187 case DW_AT_containing_type:
4188 return "DW_AT_containing_type";
4189 case DW_AT_default_value:
4190 return "DW_AT_default_value";
4191 case DW_AT_inline:
4192 return "DW_AT_inline";
4193 case DW_AT_is_optional:
4194 return "DW_AT_is_optional";
4195 case DW_AT_lower_bound:
4196 return "DW_AT_lower_bound";
4197 case DW_AT_producer:
4198 return "DW_AT_producer";
4199 case DW_AT_prototyped:
4200 return "DW_AT_prototyped";
4201 case DW_AT_return_addr:
4202 return "DW_AT_return_addr";
4203 case DW_AT_start_scope:
4204 return "DW_AT_start_scope";
4205 case DW_AT_stride_size:
4206 return "DW_AT_stride_size";
4207 case DW_AT_upper_bound:
4208 return "DW_AT_upper_bound";
4209 case DW_AT_abstract_origin:
4210 return "DW_AT_abstract_origin";
4211 case DW_AT_accessibility:
4212 return "DW_AT_accessibility";
4213 case DW_AT_address_class:
4214 return "DW_AT_address_class";
4215 case DW_AT_artificial:
4216 return "DW_AT_artificial";
4217 case DW_AT_base_types:
4218 return "DW_AT_base_types";
4219 case DW_AT_calling_convention:
4220 return "DW_AT_calling_convention";
4221 case DW_AT_count:
4222 return "DW_AT_count";
4223 case DW_AT_data_member_location:
4224 return "DW_AT_data_member_location";
4225 case DW_AT_decl_column:
4226 return "DW_AT_decl_column";
4227 case DW_AT_decl_file:
4228 return "DW_AT_decl_file";
4229 case DW_AT_decl_line:
4230 return "DW_AT_decl_line";
4231 case DW_AT_declaration:
4232 return "DW_AT_declaration";
4233 case DW_AT_discr_list:
4234 return "DW_AT_discr_list";
4235 case DW_AT_encoding:
4236 return "DW_AT_encoding";
4237 case DW_AT_external:
4238 return "DW_AT_external";
4239 case DW_AT_frame_base:
4240 return "DW_AT_frame_base";
4241 case DW_AT_friend:
4242 return "DW_AT_friend";
4243 case DW_AT_identifier_case:
4244 return "DW_AT_identifier_case";
4245 case DW_AT_macro_info:
4246 return "DW_AT_macro_info";
4247 case DW_AT_namelist_items:
4248 return "DW_AT_namelist_items";
4249 case DW_AT_priority:
4250 return "DW_AT_priority";
4251 case DW_AT_segment:
4252 return "DW_AT_segment";
4253 case DW_AT_specification:
4254 return "DW_AT_specification";
4255 case DW_AT_static_link:
4256 return "DW_AT_static_link";
4257 case DW_AT_type:
4258 return "DW_AT_type";
4259 case DW_AT_use_location:
4260 return "DW_AT_use_location";
4261 case DW_AT_variable_parameter:
4262 return "DW_AT_variable_parameter";
4263 case DW_AT_virtuality:
4264 return "DW_AT_virtuality";
4265 case DW_AT_vtable_elem_location:
4266 return "DW_AT_vtable_elem_location";
4267
4268 case DW_AT_allocated:
4269 return "DW_AT_allocated";
4270 case DW_AT_associated:
4271 return "DW_AT_associated";
4272 case DW_AT_data_location:
4273 return "DW_AT_data_location";
4274 case DW_AT_stride:
4275 return "DW_AT_stride";
4276 case DW_AT_entry_pc:
4277 return "DW_AT_entry_pc";
4278 case DW_AT_use_UTF8:
4279 return "DW_AT_use_UTF8";
4280 case DW_AT_extension:
4281 return "DW_AT_extension";
4282 case DW_AT_ranges:
4283 return "DW_AT_ranges";
4284 case DW_AT_trampoline:
4285 return "DW_AT_trampoline";
4286 case DW_AT_call_column:
4287 return "DW_AT_call_column";
4288 case DW_AT_call_file:
4289 return "DW_AT_call_file";
4290 case DW_AT_call_line:
4291 return "DW_AT_call_line";
4292
4293 case DW_AT_MIPS_fde:
4294 return "DW_AT_MIPS_fde";
4295 case DW_AT_MIPS_loop_begin:
4296 return "DW_AT_MIPS_loop_begin";
4297 case DW_AT_MIPS_tail_loop_begin:
4298 return "DW_AT_MIPS_tail_loop_begin";
4299 case DW_AT_MIPS_epilog_begin:
4300 return "DW_AT_MIPS_epilog_begin";
4301 case DW_AT_MIPS_loop_unroll_factor:
4302 return "DW_AT_MIPS_loop_unroll_factor";
4303 case DW_AT_MIPS_software_pipeline_depth:
4304 return "DW_AT_MIPS_software_pipeline_depth";
4305 case DW_AT_MIPS_linkage_name:
4306 return "DW_AT_MIPS_linkage_name";
4307 case DW_AT_MIPS_stride:
4308 return "DW_AT_MIPS_stride";
4309 case DW_AT_MIPS_abstract_name:
4310 return "DW_AT_MIPS_abstract_name";
4311 case DW_AT_MIPS_clone_origin:
4312 return "DW_AT_MIPS_clone_origin";
4313 case DW_AT_MIPS_has_inlines:
4314 return "DW_AT_MIPS_has_inlines";
4315
4316 case DW_AT_sf_names:
4317 return "DW_AT_sf_names";
4318 case DW_AT_src_info:
4319 return "DW_AT_src_info";
4320 case DW_AT_mac_info:
4321 return "DW_AT_mac_info";
4322 case DW_AT_src_coords:
4323 return "DW_AT_src_coords";
4324 case DW_AT_body_begin:
4325 return "DW_AT_body_begin";
4326 case DW_AT_body_end:
4327 return "DW_AT_body_end";
4328 case DW_AT_GNU_vector:
4329 return "DW_AT_GNU_vector";
4330
4331 case DW_AT_VMS_rtnbeg_pd_address:
4332 return "DW_AT_VMS_rtnbeg_pd_address";
4333
4334 default:
4335 return "DW_AT_<unknown>";
4336 }
4337 }
4338
4339 /* Convert a DWARF value form code into its string name. */
4340
4341 static const char *
4342 dwarf_form_name (unsigned int form)
4343 {
4344 switch (form)
4345 {
4346 case DW_FORM_addr:
4347 return "DW_FORM_addr";
4348 case DW_FORM_block2:
4349 return "DW_FORM_block2";
4350 case DW_FORM_block4:
4351 return "DW_FORM_block4";
4352 case DW_FORM_data2:
4353 return "DW_FORM_data2";
4354 case DW_FORM_data4:
4355 return "DW_FORM_data4";
4356 case DW_FORM_data8:
4357 return "DW_FORM_data8";
4358 case DW_FORM_string:
4359 return "DW_FORM_string";
4360 case DW_FORM_block:
4361 return "DW_FORM_block";
4362 case DW_FORM_block1:
4363 return "DW_FORM_block1";
4364 case DW_FORM_data1:
4365 return "DW_FORM_data1";
4366 case DW_FORM_flag:
4367 return "DW_FORM_flag";
4368 case DW_FORM_sdata:
4369 return "DW_FORM_sdata";
4370 case DW_FORM_strp:
4371 return "DW_FORM_strp";
4372 case DW_FORM_udata:
4373 return "DW_FORM_udata";
4374 case DW_FORM_ref_addr:
4375 return "DW_FORM_ref_addr";
4376 case DW_FORM_ref1:
4377 return "DW_FORM_ref1";
4378 case DW_FORM_ref2:
4379 return "DW_FORM_ref2";
4380 case DW_FORM_ref4:
4381 return "DW_FORM_ref4";
4382 case DW_FORM_ref8:
4383 return "DW_FORM_ref8";
4384 case DW_FORM_ref_udata:
4385 return "DW_FORM_ref_udata";
4386 case DW_FORM_indirect:
4387 return "DW_FORM_indirect";
4388 default:
4389 return "DW_FORM_<unknown>";
4390 }
4391 }
4392
4393 /* Convert a DWARF type code into its string name. */
4394
4395 #if 0
4396 static const char *
4397 dwarf_type_encoding_name (unsigned enc)
4398 {
4399 switch (enc)
4400 {
4401 case DW_ATE_address:
4402 return "DW_ATE_address";
4403 case DW_ATE_boolean:
4404 return "DW_ATE_boolean";
4405 case DW_ATE_complex_float:
4406 return "DW_ATE_complex_float";
4407 case DW_ATE_float:
4408 return "DW_ATE_float";
4409 case DW_ATE_signed:
4410 return "DW_ATE_signed";
4411 case DW_ATE_signed_char:
4412 return "DW_ATE_signed_char";
4413 case DW_ATE_unsigned:
4414 return "DW_ATE_unsigned";
4415 case DW_ATE_unsigned_char:
4416 return "DW_ATE_unsigned_char";
4417 default:
4418 return "DW_ATE_<unknown>";
4419 }
4420 }
4421 #endif
4422 \f
4423 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
4424 instance of an inlined instance of a decl which is local to an inline
4425 function, so we have to trace all of the way back through the origin chain
4426 to find out what sort of node actually served as the original seed for the
4427 given block. */
4428
4429 static tree
4430 decl_ultimate_origin (tree decl)
4431 {
4432 /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4433 nodes in the function to point to themselves; ignore that if
4434 we're trying to output the abstract instance of this function. */
4435 if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4436 return NULL_TREE;
4437
4438 #ifdef ENABLE_CHECKING
4439 if (DECL_FROM_INLINE (DECL_ORIGIN (decl)))
4440 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4441 most distant ancestor, this should never happen. */
4442 abort ();
4443 #endif
4444
4445 return DECL_ABSTRACT_ORIGIN (decl);
4446 }
4447
4448 /* Determine the "ultimate origin" of a block. The block may be an inlined
4449 instance of an inlined instance of a block which is local to an inline
4450 function, so we have to trace all of the way back through the origin chain
4451 to find out what sort of node actually served as the original seed for the
4452 given block. */
4453
4454 static tree
4455 block_ultimate_origin (tree block)
4456 {
4457 tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
4458
4459 /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the
4460 nodes in the function to point to themselves; ignore that if
4461 we're trying to output the abstract instance of this function. */
4462 if (BLOCK_ABSTRACT (block) && immediate_origin == block)
4463 return NULL_TREE;
4464
4465 if (immediate_origin == NULL_TREE)
4466 return NULL_TREE;
4467 else
4468 {
4469 tree ret_val;
4470 tree lookahead = immediate_origin;
4471
4472 do
4473 {
4474 ret_val = lookahead;
4475 lookahead = (TREE_CODE (ret_val) == BLOCK
4476 ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
4477 }
4478 while (lookahead != NULL && lookahead != ret_val);
4479
4480 return ret_val;
4481 }
4482 }
4483
4484 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
4485 of a virtual function may refer to a base class, so we check the 'this'
4486 parameter. */
4487
4488 static tree
4489 decl_class_context (tree decl)
4490 {
4491 tree context = NULL_TREE;
4492
4493 if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4494 context = DECL_CONTEXT (decl);
4495 else
4496 context = TYPE_MAIN_VARIANT
4497 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4498
4499 if (context && !TYPE_P (context))
4500 context = NULL_TREE;
4501
4502 return context;
4503 }
4504 \f
4505 /* Add an attribute/value pair to a DIE. We build the lists up in reverse
4506 addition order, and correct that in reverse_all_dies. */
4507
4508 static inline void
4509 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
4510 {
4511 if (die != NULL && attr != NULL)
4512 {
4513 attr->dw_attr_next = die->die_attr;
4514 die->die_attr = attr;
4515 }
4516 }
4517
4518 static inline enum dw_val_class
4519 AT_class (dw_attr_ref a)
4520 {
4521 return a->dw_attr_val.val_class;
4522 }
4523
4524 /* Add a flag value attribute to a DIE. */
4525
4526 static inline void
4527 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
4528 {
4529 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4530
4531 attr->dw_attr_next = NULL;
4532 attr->dw_attr = attr_kind;
4533 attr->dw_attr_val.val_class = dw_val_class_flag;
4534 attr->dw_attr_val.v.val_flag = flag;
4535 add_dwarf_attr (die, attr);
4536 }
4537
4538 static inline unsigned
4539 AT_flag (dw_attr_ref a)
4540 {
4541 if (a && AT_class (a) == dw_val_class_flag)
4542 return a->dw_attr_val.v.val_flag;
4543
4544 abort ();
4545 }
4546
4547 /* Add a signed integer attribute value to a DIE. */
4548
4549 static inline void
4550 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
4551 {
4552 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4553
4554 attr->dw_attr_next = NULL;
4555 attr->dw_attr = attr_kind;
4556 attr->dw_attr_val.val_class = dw_val_class_const;
4557 attr->dw_attr_val.v.val_int = int_val;
4558 add_dwarf_attr (die, attr);
4559 }
4560
4561 static inline HOST_WIDE_INT
4562 AT_int (dw_attr_ref a)
4563 {
4564 if (a && AT_class (a) == dw_val_class_const)
4565 return a->dw_attr_val.v.val_int;
4566
4567 abort ();
4568 }
4569
4570 /* Add an unsigned integer attribute value to a DIE. */
4571
4572 static inline void
4573 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
4574 unsigned HOST_WIDE_INT unsigned_val)
4575 {
4576 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4577
4578 attr->dw_attr_next = NULL;
4579 attr->dw_attr = attr_kind;
4580 attr->dw_attr_val.val_class = dw_val_class_unsigned_const;
4581 attr->dw_attr_val.v.val_unsigned = unsigned_val;
4582 add_dwarf_attr (die, attr);
4583 }
4584
4585 static inline unsigned HOST_WIDE_INT
4586 AT_unsigned (dw_attr_ref a)
4587 {
4588 if (a && AT_class (a) == dw_val_class_unsigned_const)
4589 return a->dw_attr_val.v.val_unsigned;
4590
4591 abort ();
4592 }
4593
4594 /* Add an unsigned double integer attribute value to a DIE. */
4595
4596 static inline void
4597 add_AT_long_long (dw_die_ref die, enum dwarf_attribute attr_kind,
4598 long unsigned int val_hi, long unsigned int val_low)
4599 {
4600 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4601
4602 attr->dw_attr_next = NULL;
4603 attr->dw_attr = attr_kind;
4604 attr->dw_attr_val.val_class = dw_val_class_long_long;
4605 attr->dw_attr_val.v.val_long_long.hi = val_hi;
4606 attr->dw_attr_val.v.val_long_long.low = val_low;
4607 add_dwarf_attr (die, attr);
4608 }
4609
4610 /* Add a floating point attribute value to a DIE and return it. */
4611
4612 static inline void
4613 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
4614 unsigned int length, unsigned int elt_size, unsigned char *array)
4615 {
4616 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4617
4618 attr->dw_attr_next = NULL;
4619 attr->dw_attr = attr_kind;
4620 attr->dw_attr_val.val_class = dw_val_class_vec;
4621 attr->dw_attr_val.v.val_vec.length = length;
4622 attr->dw_attr_val.v.val_vec.elt_size = elt_size;
4623 attr->dw_attr_val.v.val_vec.array = array;
4624 add_dwarf_attr (die, attr);
4625 }
4626
4627 /* Hash and equality functions for debug_str_hash. */
4628
4629 static hashval_t
4630 debug_str_do_hash (const void *x)
4631 {
4632 return htab_hash_string (((const struct indirect_string_node *)x)->str);
4633 }
4634
4635 static int
4636 debug_str_eq (const void *x1, const void *x2)
4637 {
4638 return strcmp ((((const struct indirect_string_node *)x1)->str),
4639 (const char *)x2) == 0;
4640 }
4641
4642 /* Add a string attribute value to a DIE. */
4643
4644 static inline void
4645 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4646 {
4647 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4648 struct indirect_string_node *node;
4649 void **slot;
4650
4651 if (! debug_str_hash)
4652 debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
4653 debug_str_eq, NULL);
4654
4655 slot = htab_find_slot_with_hash (debug_str_hash, str,
4656 htab_hash_string (str), INSERT);
4657 if (*slot == NULL)
4658 *slot = ggc_alloc_cleared (sizeof (struct indirect_string_node));
4659 node = (struct indirect_string_node *) *slot;
4660 node->str = ggc_strdup (str);
4661 node->refcount++;
4662
4663 attr->dw_attr_next = NULL;
4664 attr->dw_attr = attr_kind;
4665 attr->dw_attr_val.val_class = dw_val_class_str;
4666 attr->dw_attr_val.v.val_str = node;
4667 add_dwarf_attr (die, attr);
4668 }
4669
4670 static inline const char *
4671 AT_string (dw_attr_ref a)
4672 {
4673 if (a && AT_class (a) == dw_val_class_str)
4674 return a->dw_attr_val.v.val_str->str;
4675
4676 abort ();
4677 }
4678
4679 /* Find out whether a string should be output inline in DIE
4680 or out-of-line in .debug_str section. */
4681
4682 static int
4683 AT_string_form (dw_attr_ref a)
4684 {
4685 if (a && AT_class (a) == dw_val_class_str)
4686 {
4687 struct indirect_string_node *node;
4688 unsigned int len;
4689 char label[32];
4690
4691 node = a->dw_attr_val.v.val_str;
4692 if (node->form)
4693 return node->form;
4694
4695 len = strlen (node->str) + 1;
4696
4697 /* If the string is shorter or equal to the size of the reference, it is
4698 always better to put it inline. */
4699 if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4700 return node->form = DW_FORM_string;
4701
4702 /* If we cannot expect the linker to merge strings in .debug_str
4703 section, only put it into .debug_str if it is worth even in this
4704 single module. */
4705 if ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) == 0
4706 && (len - DWARF_OFFSET_SIZE) * node->refcount <= len)
4707 return node->form = DW_FORM_string;
4708
4709 ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
4710 ++dw2_string_counter;
4711 node->label = xstrdup (label);
4712
4713 return node->form = DW_FORM_strp;
4714 }
4715
4716 abort ();
4717 }
4718
4719 /* Add a DIE reference attribute value to a DIE. */
4720
4721 static inline void
4722 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
4723 {
4724 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4725
4726 attr->dw_attr_next = NULL;
4727 attr->dw_attr = attr_kind;
4728 attr->dw_attr_val.val_class = dw_val_class_die_ref;
4729 attr->dw_attr_val.v.val_die_ref.die = targ_die;
4730 attr->dw_attr_val.v.val_die_ref.external = 0;
4731 add_dwarf_attr (die, attr);
4732 }
4733
4734 /* Add an AT_specification attribute to a DIE, and also make the back
4735 pointer from the specification to the definition. */
4736
4737 static inline void
4738 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
4739 {
4740 add_AT_die_ref (die, DW_AT_specification, targ_die);
4741 if (targ_die->die_definition)
4742 abort ();
4743 targ_die->die_definition = die;
4744 }
4745
4746 static inline dw_die_ref
4747 AT_ref (dw_attr_ref a)
4748 {
4749 if (a && AT_class (a) == dw_val_class_die_ref)
4750 return a->dw_attr_val.v.val_die_ref.die;
4751
4752 abort ();
4753 }
4754
4755 static inline int
4756 AT_ref_external (dw_attr_ref a)
4757 {
4758 if (a && AT_class (a) == dw_val_class_die_ref)
4759 return a->dw_attr_val.v.val_die_ref.external;
4760
4761 return 0;
4762 }
4763
4764 static inline void
4765 set_AT_ref_external (dw_attr_ref a, int i)
4766 {
4767 if (a && AT_class (a) == dw_val_class_die_ref)
4768 a->dw_attr_val.v.val_die_ref.external = i;
4769 else
4770 abort ();
4771 }
4772
4773 /* Add an FDE reference attribute value to a DIE. */
4774
4775 static inline void
4776 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
4777 {
4778 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4779
4780 attr->dw_attr_next = NULL;
4781 attr->dw_attr = attr_kind;
4782 attr->dw_attr_val.val_class = dw_val_class_fde_ref;
4783 attr->dw_attr_val.v.val_fde_index = targ_fde;
4784 add_dwarf_attr (die, attr);
4785 }
4786
4787 /* Add a location description attribute value to a DIE. */
4788
4789 static inline void
4790 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
4791 {
4792 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4793
4794 attr->dw_attr_next = NULL;
4795 attr->dw_attr = attr_kind;
4796 attr->dw_attr_val.val_class = dw_val_class_loc;
4797 attr->dw_attr_val.v.val_loc = loc;
4798 add_dwarf_attr (die, attr);
4799 }
4800
4801 static inline dw_loc_descr_ref
4802 AT_loc (dw_attr_ref a)
4803 {
4804 if (a && AT_class (a) == dw_val_class_loc)
4805 return a->dw_attr_val.v.val_loc;
4806
4807 abort ();
4808 }
4809
4810 static inline void
4811 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
4812 {
4813 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4814
4815 attr->dw_attr_next = NULL;
4816 attr->dw_attr = attr_kind;
4817 attr->dw_attr_val.val_class = dw_val_class_loc_list;
4818 attr->dw_attr_val.v.val_loc_list = loc_list;
4819 add_dwarf_attr (die, attr);
4820 have_location_lists = 1;
4821 }
4822
4823 static inline dw_loc_list_ref
4824 AT_loc_list (dw_attr_ref a)
4825 {
4826 if (a && AT_class (a) == dw_val_class_loc_list)
4827 return a->dw_attr_val.v.val_loc_list;
4828
4829 abort ();
4830 }
4831
4832 /* Add an address constant attribute value to a DIE. */
4833
4834 static inline void
4835 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
4836 {
4837 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4838
4839 attr->dw_attr_next = NULL;
4840 attr->dw_attr = attr_kind;
4841 attr->dw_attr_val.val_class = dw_val_class_addr;
4842 attr->dw_attr_val.v.val_addr = addr;
4843 add_dwarf_attr (die, attr);
4844 }
4845
4846 static inline rtx
4847 AT_addr (dw_attr_ref a)
4848 {
4849 if (a && AT_class (a) == dw_val_class_addr)
4850 return a->dw_attr_val.v.val_addr;
4851
4852 abort ();
4853 }
4854
4855 /* Add a label identifier attribute value to a DIE. */
4856
4857 static inline void
4858 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
4859 {
4860 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4861
4862 attr->dw_attr_next = NULL;
4863 attr->dw_attr = attr_kind;
4864 attr->dw_attr_val.val_class = dw_val_class_lbl_id;
4865 attr->dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4866 add_dwarf_attr (die, attr);
4867 }
4868
4869 /* Add a section offset attribute value to a DIE. */
4870
4871 static inline void
4872 add_AT_lbl_offset (dw_die_ref die, enum dwarf_attribute attr_kind, const char *label)
4873 {
4874 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4875
4876 attr->dw_attr_next = NULL;
4877 attr->dw_attr = attr_kind;
4878 attr->dw_attr_val.val_class = dw_val_class_lbl_offset;
4879 attr->dw_attr_val.v.val_lbl_id = xstrdup (label);
4880 add_dwarf_attr (die, attr);
4881 }
4882
4883 /* Add an offset attribute value to a DIE. */
4884
4885 static inline void
4886 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
4887 unsigned HOST_WIDE_INT offset)
4888 {
4889 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4890
4891 attr->dw_attr_next = NULL;
4892 attr->dw_attr = attr_kind;
4893 attr->dw_attr_val.val_class = dw_val_class_offset;
4894 attr->dw_attr_val.v.val_offset = offset;
4895 add_dwarf_attr (die, attr);
4896 }
4897
4898 /* Add an range_list attribute value to a DIE. */
4899
4900 static void
4901 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
4902 long unsigned int offset)
4903 {
4904 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4905
4906 attr->dw_attr_next = NULL;
4907 attr->dw_attr = attr_kind;
4908 attr->dw_attr_val.val_class = dw_val_class_range_list;
4909 attr->dw_attr_val.v.val_offset = offset;
4910 add_dwarf_attr (die, attr);
4911 }
4912
4913 static inline const char *
4914 AT_lbl (dw_attr_ref a)
4915 {
4916 if (a && (AT_class (a) == dw_val_class_lbl_id
4917 || AT_class (a) == dw_val_class_lbl_offset))
4918 return a->dw_attr_val.v.val_lbl_id;
4919
4920 abort ();
4921 }
4922
4923 /* Get the attribute of type attr_kind. */
4924
4925 static dw_attr_ref
4926 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4927 {
4928 dw_attr_ref a;
4929 dw_die_ref spec = NULL;
4930
4931 if (die != NULL)
4932 {
4933 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
4934 if (a->dw_attr == attr_kind)
4935 return a;
4936 else if (a->dw_attr == DW_AT_specification
4937 || a->dw_attr == DW_AT_abstract_origin)
4938 spec = AT_ref (a);
4939
4940 if (spec)
4941 return get_AT (spec, attr_kind);
4942 }
4943
4944 return NULL;
4945 }
4946
4947 /* Return the "low pc" attribute value, typically associated with a subprogram
4948 DIE. Return null if the "low pc" attribute is either not present, or if it
4949 cannot be represented as an assembler label identifier. */
4950
4951 static inline const char *
4952 get_AT_low_pc (dw_die_ref die)
4953 {
4954 dw_attr_ref a = get_AT (die, DW_AT_low_pc);
4955
4956 return a ? AT_lbl (a) : NULL;
4957 }
4958
4959 /* Return the "high pc" attribute value, typically associated with a subprogram
4960 DIE. Return null if the "high pc" attribute is either not present, or if it
4961 cannot be represented as an assembler label identifier. */
4962
4963 static inline const char *
4964 get_AT_hi_pc (dw_die_ref die)
4965 {
4966 dw_attr_ref a = get_AT (die, DW_AT_high_pc);
4967
4968 return a ? AT_lbl (a) : NULL;
4969 }
4970
4971 /* Return the value of the string attribute designated by ATTR_KIND, or
4972 NULL if it is not present. */
4973
4974 static inline const char *
4975 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
4976 {
4977 dw_attr_ref a = get_AT (die, attr_kind);
4978
4979 return a ? AT_string (a) : NULL;
4980 }
4981
4982 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
4983 if it is not present. */
4984
4985 static inline int
4986 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
4987 {
4988 dw_attr_ref a = get_AT (die, attr_kind);
4989
4990 return a ? AT_flag (a) : 0;
4991 }
4992
4993 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
4994 if it is not present. */
4995
4996 static inline unsigned
4997 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
4998 {
4999 dw_attr_ref a = get_AT (die, attr_kind);
5000
5001 return a ? AT_unsigned (a) : 0;
5002 }
5003
5004 static inline dw_die_ref
5005 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
5006 {
5007 dw_attr_ref a = get_AT (die, attr_kind);
5008
5009 return a ? AT_ref (a) : NULL;
5010 }
5011
5012 /* Return TRUE if the language is C or C++. */
5013
5014 static inline bool
5015 is_c_family (void)
5016 {
5017 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5018
5019 return (lang == DW_LANG_C || lang == DW_LANG_C89
5020 || lang == DW_LANG_C_plus_plus);
5021 }
5022
5023 /* Return TRUE if the language is C++. */
5024
5025 static inline bool
5026 is_cxx (void)
5027 {
5028 return (get_AT_unsigned (comp_unit_die, DW_AT_language)
5029 == DW_LANG_C_plus_plus);
5030 }
5031
5032 /* Return TRUE if the language is Fortran. */
5033
5034 static inline bool
5035 is_fortran (void)
5036 {
5037 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5038
5039 return lang == DW_LANG_Fortran77 || lang == DW_LANG_Fortran90;
5040 }
5041
5042 /* Return TRUE if the language is Java. */
5043
5044 static inline bool
5045 is_java (void)
5046 {
5047 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5048
5049 return lang == DW_LANG_Java;
5050 }
5051
5052 /* Return TRUE if the language is Ada. */
5053
5054 static inline bool
5055 is_ada (void)
5056 {
5057 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5058
5059 return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
5060 }
5061
5062 /* Free up the memory used by A. */
5063
5064 static inline void free_AT (dw_attr_ref);
5065 static inline void
5066 free_AT (dw_attr_ref a)
5067 {
5068 if (AT_class (a) == dw_val_class_str)
5069 if (a->dw_attr_val.v.val_str->refcount)
5070 a->dw_attr_val.v.val_str->refcount--;
5071 }
5072
5073 /* Remove the specified attribute if present. */
5074
5075 static void
5076 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5077 {
5078 dw_attr_ref *p;
5079 dw_attr_ref removed = NULL;
5080
5081 if (die != NULL)
5082 {
5083 for (p = &(die->die_attr); *p; p = &((*p)->dw_attr_next))
5084 if ((*p)->dw_attr == attr_kind)
5085 {
5086 removed = *p;
5087 *p = (*p)->dw_attr_next;
5088 break;
5089 }
5090
5091 if (removed != 0)
5092 free_AT (removed);
5093 }
5094 }
5095
5096 /* Remove child die whose die_tag is specified tag. */
5097
5098 static void
5099 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
5100 {
5101 dw_die_ref current, prev, next;
5102 current = die->die_child;
5103 prev = NULL;
5104 while (current != NULL)
5105 {
5106 if (current->die_tag == tag)
5107 {
5108 next = current->die_sib;
5109 if (prev == NULL)
5110 die->die_child = next;
5111 else
5112 prev->die_sib = next;
5113 free_die (current);
5114 current = next;
5115 }
5116 else
5117 {
5118 prev = current;
5119 current = current->die_sib;
5120 }
5121 }
5122 }
5123
5124 /* Free up the memory used by DIE. */
5125
5126 static inline void
5127 free_die (dw_die_ref die)
5128 {
5129 remove_children (die);
5130 }
5131
5132 /* Discard the children of this DIE. */
5133
5134 static void
5135 remove_children (dw_die_ref die)
5136 {
5137 dw_die_ref child_die = die->die_child;
5138
5139 die->die_child = NULL;
5140
5141 while (child_die != NULL)
5142 {
5143 dw_die_ref tmp_die = child_die;
5144 dw_attr_ref a;
5145
5146 child_die = child_die->die_sib;
5147
5148 for (a = tmp_die->die_attr; a != NULL;)
5149 {
5150 dw_attr_ref tmp_a = a;
5151
5152 a = a->dw_attr_next;
5153 free_AT (tmp_a);
5154 }
5155
5156 free_die (tmp_die);
5157 }
5158 }
5159
5160 /* Add a child DIE below its parent. We build the lists up in reverse
5161 addition order, and correct that in reverse_all_dies. */
5162
5163 static inline void
5164 add_child_die (dw_die_ref die, dw_die_ref child_die)
5165 {
5166 if (die != NULL && child_die != NULL)
5167 {
5168 if (die == child_die)
5169 abort ();
5170
5171 child_die->die_parent = die;
5172 child_die->die_sib = die->die_child;
5173 die->die_child = child_die;
5174 }
5175 }
5176
5177 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
5178 is the specification, to the front of PARENT's list of children. */
5179
5180 static void
5181 splice_child_die (dw_die_ref parent, dw_die_ref child)
5182 {
5183 dw_die_ref *p;
5184
5185 /* We want the declaration DIE from inside the class, not the
5186 specification DIE at toplevel. */
5187 if (child->die_parent != parent)
5188 {
5189 dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5190
5191 if (tmp)
5192 child = tmp;
5193 }
5194
5195 if (child->die_parent != parent
5196 && child->die_parent != get_AT_ref (parent, DW_AT_specification))
5197 abort ();
5198
5199 for (p = &(child->die_parent->die_child); *p; p = &((*p)->die_sib))
5200 if (*p == child)
5201 {
5202 *p = child->die_sib;
5203 break;
5204 }
5205
5206 child->die_parent = parent;
5207 child->die_sib = parent->die_child;
5208 parent->die_child = child;
5209 }
5210
5211 /* Return a pointer to a newly created DIE node. */
5212
5213 static inline dw_die_ref
5214 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5215 {
5216 dw_die_ref die = ggc_alloc_cleared (sizeof (die_node));
5217
5218 die->die_tag = tag_value;
5219
5220 if (parent_die != NULL)
5221 add_child_die (parent_die, die);
5222 else
5223 {
5224 limbo_die_node *limbo_node;
5225
5226 limbo_node = ggc_alloc_cleared (sizeof (limbo_die_node));
5227 limbo_node->die = die;
5228 limbo_node->created_for = t;
5229 limbo_node->next = limbo_die_list;
5230 limbo_die_list = limbo_node;
5231 }
5232
5233 return die;
5234 }
5235
5236 /* Return the DIE associated with the given type specifier. */
5237
5238 static inline dw_die_ref
5239 lookup_type_die (tree type)
5240 {
5241 return TYPE_SYMTAB_DIE (type);
5242 }
5243
5244 /* Equate a DIE to a given type specifier. */
5245
5246 static inline void
5247 equate_type_number_to_die (tree type, dw_die_ref type_die)
5248 {
5249 TYPE_SYMTAB_DIE (type) = type_die;
5250 }
5251
5252 /* Returns a hash value for X (which really is a die_struct). */
5253
5254 static hashval_t
5255 decl_die_table_hash (const void *x)
5256 {
5257 return (hashval_t) ((const dw_die_ref) x)->decl_id;
5258 }
5259
5260 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y. */
5261
5262 static int
5263 decl_die_table_eq (const void *x, const void *y)
5264 {
5265 return (((const dw_die_ref) x)->decl_id == DECL_UID ((const tree) y));
5266 }
5267
5268 /* Return the DIE associated with a given declaration. */
5269
5270 static inline dw_die_ref
5271 lookup_decl_die (tree decl)
5272 {
5273 return htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
5274 }
5275
5276 /* Returns a hash value for X (which really is a var_loc_list). */
5277
5278 static hashval_t
5279 decl_loc_table_hash (const void *x)
5280 {
5281 return (hashval_t) ((const var_loc_list *) x)->decl_id;
5282 }
5283
5284 /* Return nonzero if decl_id of var_loc_list X is the same as
5285 UID of decl *Y. */
5286
5287 static int
5288 decl_loc_table_eq (const void *x, const void *y)
5289 {
5290 return (((const var_loc_list *) x)->decl_id == DECL_UID ((const tree) y));
5291 }
5292
5293 /* Return the var_loc list associated with a given declaration. */
5294
5295 static inline var_loc_list *
5296 lookup_decl_loc (tree decl)
5297 {
5298 return htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
5299 }
5300
5301 /* Equate a DIE to a particular declaration. */
5302
5303 static void
5304 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5305 {
5306 unsigned int decl_id = DECL_UID (decl);
5307 void **slot;
5308
5309 slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
5310 *slot = decl_die;
5311 decl_die->decl_id = decl_id;
5312 }
5313
5314 /* Add a variable location node to the linked list for DECL. */
5315
5316 static void
5317 add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
5318 {
5319 unsigned int decl_id = DECL_UID (decl);
5320 var_loc_list *temp;
5321 void **slot;
5322
5323 slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
5324 if (*slot == NULL)
5325 {
5326 temp = ggc_alloc_cleared (sizeof (var_loc_list));
5327 temp->decl_id = decl_id;
5328 *slot = temp;
5329 }
5330 else
5331 temp = *slot;
5332
5333 if (temp->last)
5334 {
5335 /* If the current location is the same as the end of the list,
5336 we have nothing to do. */
5337 if (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
5338 NOTE_VAR_LOCATION_LOC (loc->var_loc_note)))
5339 {
5340 /* Add LOC to the end of list and update LAST. */
5341 temp->last->next = loc;
5342 temp->last = loc;
5343 }
5344 }
5345 /* Do not add empty location to the beginning of the list. */
5346 else if (NOTE_VAR_LOCATION_LOC (loc->var_loc_note) != NULL_RTX)
5347 {
5348 temp->first = loc;
5349 temp->last = loc;
5350 }
5351 }
5352 \f
5353 /* Keep track of the number of spaces used to indent the
5354 output of the debugging routines that print the structure of
5355 the DIE internal representation. */
5356 static int print_indent;
5357
5358 /* Indent the line the number of spaces given by print_indent. */
5359
5360 static inline void
5361 print_spaces (FILE *outfile)
5362 {
5363 fprintf (outfile, "%*s", print_indent, "");
5364 }
5365
5366 /* Print the information associated with a given DIE, and its children.
5367 This routine is a debugging aid only. */
5368
5369 static void
5370 print_die (dw_die_ref die, FILE *outfile)
5371 {
5372 dw_attr_ref a;
5373 dw_die_ref c;
5374
5375 print_spaces (outfile);
5376 fprintf (outfile, "DIE %4lu: %s\n",
5377 die->die_offset, dwarf_tag_name (die->die_tag));
5378 print_spaces (outfile);
5379 fprintf (outfile, " abbrev id: %lu", die->die_abbrev);
5380 fprintf (outfile, " offset: %lu\n", die->die_offset);
5381
5382 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
5383 {
5384 print_spaces (outfile);
5385 fprintf (outfile, " %s: ", dwarf_attr_name (a->dw_attr));
5386
5387 switch (AT_class (a))
5388 {
5389 case dw_val_class_addr:
5390 fprintf (outfile, "address");
5391 break;
5392 case dw_val_class_offset:
5393 fprintf (outfile, "offset");
5394 break;
5395 case dw_val_class_loc:
5396 fprintf (outfile, "location descriptor");
5397 break;
5398 case dw_val_class_loc_list:
5399 fprintf (outfile, "location list -> label:%s",
5400 AT_loc_list (a)->ll_symbol);
5401 break;
5402 case dw_val_class_range_list:
5403 fprintf (outfile, "range list");
5404 break;
5405 case dw_val_class_const:
5406 fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
5407 break;
5408 case dw_val_class_unsigned_const:
5409 fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
5410 break;
5411 case dw_val_class_long_long:
5412 fprintf (outfile, "constant (%lu,%lu)",
5413 a->dw_attr_val.v.val_long_long.hi,
5414 a->dw_attr_val.v.val_long_long.low);
5415 break;
5416 case dw_val_class_vec:
5417 fprintf (outfile, "floating-point or vector constant");
5418 break;
5419 case dw_val_class_flag:
5420 fprintf (outfile, "%u", AT_flag (a));
5421 break;
5422 case dw_val_class_die_ref:
5423 if (AT_ref (a) != NULL)
5424 {
5425 if (AT_ref (a)->die_symbol)
5426 fprintf (outfile, "die -> label: %s", AT_ref (a)->die_symbol);
5427 else
5428 fprintf (outfile, "die -> %lu", AT_ref (a)->die_offset);
5429 }
5430 else
5431 fprintf (outfile, "die -> <null>");
5432 break;
5433 case dw_val_class_lbl_id:
5434 case dw_val_class_lbl_offset:
5435 fprintf (outfile, "label: %s", AT_lbl (a));
5436 break;
5437 case dw_val_class_str:
5438 if (AT_string (a) != NULL)
5439 fprintf (outfile, "\"%s\"", AT_string (a));
5440 else
5441 fprintf (outfile, "<null>");
5442 break;
5443 default:
5444 break;
5445 }
5446
5447 fprintf (outfile, "\n");
5448 }
5449
5450 if (die->die_child != NULL)
5451 {
5452 print_indent += 4;
5453 for (c = die->die_child; c != NULL; c = c->die_sib)
5454 print_die (c, outfile);
5455
5456 print_indent -= 4;
5457 }
5458 if (print_indent == 0)
5459 fprintf (outfile, "\n");
5460 }
5461
5462 /* Print the contents of the source code line number correspondence table.
5463 This routine is a debugging aid only. */
5464
5465 static void
5466 print_dwarf_line_table (FILE *outfile)
5467 {
5468 unsigned i;
5469 dw_line_info_ref line_info;
5470
5471 fprintf (outfile, "\n\nDWARF source line information\n");
5472 for (i = 1; i < line_info_table_in_use; i++)
5473 {
5474 line_info = &line_info_table[i];
5475 fprintf (outfile, "%5d: ", i);
5476 fprintf (outfile, "%-20s",
5477 VARRAY_CHAR_PTR (file_table, line_info->dw_file_num));
5478 fprintf (outfile, "%6ld", line_info->dw_line_num);
5479 fprintf (outfile, "\n");
5480 }
5481
5482 fprintf (outfile, "\n\n");
5483 }
5484
5485 /* Print the information collected for a given DIE. */
5486
5487 void
5488 debug_dwarf_die (dw_die_ref die)
5489 {
5490 print_die (die, stderr);
5491 }
5492
5493 /* Print all DWARF information collected for the compilation unit.
5494 This routine is a debugging aid only. */
5495
5496 void
5497 debug_dwarf (void)
5498 {
5499 print_indent = 0;
5500 print_die (comp_unit_die, stderr);
5501 if (! DWARF2_ASM_LINE_DEBUG_INFO)
5502 print_dwarf_line_table (stderr);
5503 }
5504 \f
5505 /* We build up the lists of children and attributes by pushing new ones
5506 onto the beginning of the list. Reverse the lists for DIE so that
5507 they are in order of addition. */
5508
5509 static void
5510 reverse_die_lists (dw_die_ref die)
5511 {
5512 dw_die_ref c, cp, cn;
5513 dw_attr_ref a, ap, an;
5514
5515 for (a = die->die_attr, ap = 0; a; a = an)
5516 {
5517 an = a->dw_attr_next;
5518 a->dw_attr_next = ap;
5519 ap = a;
5520 }
5521
5522 die->die_attr = ap;
5523
5524 for (c = die->die_child, cp = 0; c; c = cn)
5525 {
5526 cn = c->die_sib;
5527 c->die_sib = cp;
5528 cp = c;
5529 }
5530
5531 die->die_child = cp;
5532 }
5533
5534 /* reverse_die_lists only reverses the single die you pass it. Since we used to
5535 reverse all dies in add_sibling_attributes, which runs through all the dies,
5536 it would reverse all the dies. Now, however, since we don't call
5537 reverse_die_lists in add_sibling_attributes, we need a routine to
5538 recursively reverse all the dies. This is that routine. */
5539
5540 static void
5541 reverse_all_dies (dw_die_ref die)
5542 {
5543 dw_die_ref c;
5544
5545 reverse_die_lists (die);
5546
5547 for (c = die->die_child; c; c = c->die_sib)
5548 reverse_all_dies (c);
5549 }
5550
5551 /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU
5552 for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL
5553 DIE that marks the start of the DIEs for this include file. */
5554
5555 static dw_die_ref
5556 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5557 {
5558 const char *filename = get_AT_string (bincl_die, DW_AT_name);
5559 dw_die_ref new_unit = gen_compile_unit_die (filename);
5560
5561 new_unit->die_sib = old_unit;
5562 return new_unit;
5563 }
5564
5565 /* Close an include-file CU and reopen the enclosing one. */
5566
5567 static dw_die_ref
5568 pop_compile_unit (dw_die_ref old_unit)
5569 {
5570 dw_die_ref new_unit = old_unit->die_sib;
5571
5572 old_unit->die_sib = NULL;
5573 return new_unit;
5574 }
5575
5576 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5577 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5578
5579 /* Calculate the checksum of a location expression. */
5580
5581 static inline void
5582 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5583 {
5584 CHECKSUM (loc->dw_loc_opc);
5585 CHECKSUM (loc->dw_loc_oprnd1);
5586 CHECKSUM (loc->dw_loc_oprnd2);
5587 }
5588
5589 /* Calculate the checksum of an attribute. */
5590
5591 static void
5592 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5593 {
5594 dw_loc_descr_ref loc;
5595 rtx r;
5596
5597 CHECKSUM (at->dw_attr);
5598
5599 /* We don't care about differences in file numbering. */
5600 if (at->dw_attr == DW_AT_decl_file
5601 /* Or that this was compiled with a different compiler snapshot; if
5602 the output is the same, that's what matters. */
5603 || at->dw_attr == DW_AT_producer)
5604 return;
5605
5606 switch (AT_class (at))
5607 {
5608 case dw_val_class_const:
5609 CHECKSUM (at->dw_attr_val.v.val_int);
5610 break;
5611 case dw_val_class_unsigned_const:
5612 CHECKSUM (at->dw_attr_val.v.val_unsigned);
5613 break;
5614 case dw_val_class_long_long:
5615 CHECKSUM (at->dw_attr_val.v.val_long_long);
5616 break;
5617 case dw_val_class_vec:
5618 CHECKSUM (at->dw_attr_val.v.val_vec);
5619 break;
5620 case dw_val_class_flag:
5621 CHECKSUM (at->dw_attr_val.v.val_flag);
5622 break;
5623 case dw_val_class_str:
5624 CHECKSUM_STRING (AT_string (at));
5625 break;
5626
5627 case dw_val_class_addr:
5628 r = AT_addr (at);
5629 switch (GET_CODE (r))
5630 {
5631 case SYMBOL_REF:
5632 CHECKSUM_STRING (XSTR (r, 0));
5633 break;
5634
5635 default:
5636 abort ();
5637 }
5638 break;
5639
5640 case dw_val_class_offset:
5641 CHECKSUM (at->dw_attr_val.v.val_offset);
5642 break;
5643
5644 case dw_val_class_loc:
5645 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5646 loc_checksum (loc, ctx);
5647 break;
5648
5649 case dw_val_class_die_ref:
5650 die_checksum (AT_ref (at), ctx, mark);
5651 break;
5652
5653 case dw_val_class_fde_ref:
5654 case dw_val_class_lbl_id:
5655 case dw_val_class_lbl_offset:
5656 break;
5657
5658 default:
5659 break;
5660 }
5661 }
5662
5663 /* Calculate the checksum of a DIE. */
5664
5665 static void
5666 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5667 {
5668 dw_die_ref c;
5669 dw_attr_ref a;
5670
5671 /* To avoid infinite recursion. */
5672 if (die->die_mark)
5673 {
5674 CHECKSUM (die->die_mark);
5675 return;
5676 }
5677 die->die_mark = ++(*mark);
5678
5679 CHECKSUM (die->die_tag);
5680
5681 for (a = die->die_attr; a; a = a->dw_attr_next)
5682 attr_checksum (a, ctx, mark);
5683
5684 for (c = die->die_child; c; c = c->die_sib)
5685 die_checksum (c, ctx, mark);
5686 }
5687
5688 #undef CHECKSUM
5689 #undef CHECKSUM_STRING
5690
5691 /* Do the location expressions look same? */
5692 static inline int
5693 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
5694 {
5695 return loc1->dw_loc_opc == loc2->dw_loc_opc
5696 && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
5697 && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
5698 }
5699
5700 /* Do the values look the same? */
5701 static int
5702 same_dw_val_p (dw_val_node *v1, dw_val_node *v2, int *mark)
5703 {
5704 dw_loc_descr_ref loc1, loc2;
5705 rtx r1, r2;
5706
5707 if (v1->val_class != v2->val_class)
5708 return 0;
5709
5710 switch (v1->val_class)
5711 {
5712 case dw_val_class_const:
5713 return v1->v.val_int == v2->v.val_int;
5714 case dw_val_class_unsigned_const:
5715 return v1->v.val_unsigned == v2->v.val_unsigned;
5716 case dw_val_class_long_long:
5717 return v1->v.val_long_long.hi == v2->v.val_long_long.hi
5718 && v1->v.val_long_long.low == v2->v.val_long_long.low;
5719 case dw_val_class_vec:
5720 if (v1->v.val_vec.length != v2->v.val_vec.length
5721 || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
5722 return 0;
5723 if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
5724 v1->v.val_vec.length * v1->v.val_vec.elt_size))
5725 return 0;
5726 return 1;
5727 case dw_val_class_flag:
5728 return v1->v.val_flag == v2->v.val_flag;
5729 case dw_val_class_str:
5730 return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
5731
5732 case dw_val_class_addr:
5733 r1 = v1->v.val_addr;
5734 r2 = v2->v.val_addr;
5735 if (GET_CODE (r1) != GET_CODE (r2))
5736 return 0;
5737 switch (GET_CODE (r1))
5738 {
5739 case SYMBOL_REF:
5740 return !strcmp (XSTR (r1, 0), XSTR (r2, 0));
5741
5742 default:
5743 abort ();
5744 }
5745
5746 case dw_val_class_offset:
5747 return v1->v.val_offset == v2->v.val_offset;
5748
5749 case dw_val_class_loc:
5750 for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
5751 loc1 && loc2;
5752 loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
5753 if (!same_loc_p (loc1, loc2, mark))
5754 return 0;
5755 return !loc1 && !loc2;
5756
5757 case dw_val_class_die_ref:
5758 return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
5759
5760 case dw_val_class_fde_ref:
5761 case dw_val_class_lbl_id:
5762 case dw_val_class_lbl_offset:
5763 return 1;
5764
5765 default:
5766 return 1;
5767 }
5768 }
5769
5770 /* Do the attributes look the same? */
5771
5772 static int
5773 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
5774 {
5775 if (at1->dw_attr != at2->dw_attr)
5776 return 0;
5777
5778 /* We don't care about differences in file numbering. */
5779 if (at1->dw_attr == DW_AT_decl_file
5780 /* Or that this was compiled with a different compiler snapshot; if
5781 the output is the same, that's what matters. */
5782 || at1->dw_attr == DW_AT_producer)
5783 return 1;
5784
5785 return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
5786 }
5787
5788 /* Do the dies look the same? */
5789
5790 static int
5791 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
5792 {
5793 dw_die_ref c1, c2;
5794 dw_attr_ref a1, a2;
5795
5796 /* To avoid infinite recursion. */
5797 if (die1->die_mark)
5798 return die1->die_mark == die2->die_mark;
5799 die1->die_mark = die2->die_mark = ++(*mark);
5800
5801 if (die1->die_tag != die2->die_tag)
5802 return 0;
5803
5804 for (a1 = die1->die_attr, a2 = die2->die_attr;
5805 a1 && a2;
5806 a1 = a1->dw_attr_next, a2 = a2->dw_attr_next)
5807 if (!same_attr_p (a1, a2, mark))
5808 return 0;
5809 if (a1 || a2)
5810 return 0;
5811
5812 for (c1 = die1->die_child, c2 = die2->die_child;
5813 c1 && c2;
5814 c1 = c1->die_sib, c2 = c2->die_sib)
5815 if (!same_die_p (c1, c2, mark))
5816 return 0;
5817 if (c1 || c2)
5818 return 0;
5819
5820 return 1;
5821 }
5822
5823 /* Do the dies look the same? Wrapper around same_die_p. */
5824
5825 static int
5826 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
5827 {
5828 int mark = 0;
5829 int ret = same_die_p (die1, die2, &mark);
5830
5831 unmark_all_dies (die1);
5832 unmark_all_dies (die2);
5833
5834 return ret;
5835 }
5836
5837 /* The prefix to attach to symbols on DIEs in the current comdat debug
5838 info section. */
5839 static char *comdat_symbol_id;
5840
5841 /* The index of the current symbol within the current comdat CU. */
5842 static unsigned int comdat_symbol_number;
5843
5844 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
5845 children, and set comdat_symbol_id accordingly. */
5846
5847 static void
5848 compute_section_prefix (dw_die_ref unit_die)
5849 {
5850 const char *die_name = get_AT_string (unit_die, DW_AT_name);
5851 const char *base = die_name ? lbasename (die_name) : "anonymous";
5852 char *name = alloca (strlen (base) + 64);
5853 char *p;
5854 int i, mark;
5855 unsigned char checksum[16];
5856 struct md5_ctx ctx;
5857
5858 /* Compute the checksum of the DIE, then append part of it as hex digits to
5859 the name filename of the unit. */
5860
5861 md5_init_ctx (&ctx);
5862 mark = 0;
5863 die_checksum (unit_die, &ctx, &mark);
5864 unmark_all_dies (unit_die);
5865 md5_finish_ctx (&ctx, checksum);
5866
5867 sprintf (name, "%s.", base);
5868 clean_symbol_name (name);
5869
5870 p = name + strlen (name);
5871 for (i = 0; i < 4; i++)
5872 {
5873 sprintf (p, "%.2x", checksum[i]);
5874 p += 2;
5875 }
5876
5877 comdat_symbol_id = unit_die->die_symbol = xstrdup (name);
5878 comdat_symbol_number = 0;
5879 }
5880
5881 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */
5882
5883 static int
5884 is_type_die (dw_die_ref die)
5885 {
5886 switch (die->die_tag)
5887 {
5888 case DW_TAG_array_type:
5889 case DW_TAG_class_type:
5890 case DW_TAG_enumeration_type:
5891 case DW_TAG_pointer_type:
5892 case DW_TAG_reference_type:
5893 case DW_TAG_string_type:
5894 case DW_TAG_structure_type:
5895 case DW_TAG_subroutine_type:
5896 case DW_TAG_union_type:
5897 case DW_TAG_ptr_to_member_type:
5898 case DW_TAG_set_type:
5899 case DW_TAG_subrange_type:
5900 case DW_TAG_base_type:
5901 case DW_TAG_const_type:
5902 case DW_TAG_file_type:
5903 case DW_TAG_packed_type:
5904 case DW_TAG_volatile_type:
5905 case DW_TAG_typedef:
5906 return 1;
5907 default:
5908 return 0;
5909 }
5910 }
5911
5912 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
5913 Basically, we want to choose the bits that are likely to be shared between
5914 compilations (types) and leave out the bits that are specific to individual
5915 compilations (functions). */
5916
5917 static int
5918 is_comdat_die (dw_die_ref c)
5919 {
5920 /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
5921 we do for stabs. The advantage is a greater likelihood of sharing between
5922 objects that don't include headers in the same order (and therefore would
5923 put the base types in a different comdat). jason 8/28/00 */
5924
5925 if (c->die_tag == DW_TAG_base_type)
5926 return 0;
5927
5928 if (c->die_tag == DW_TAG_pointer_type
5929 || c->die_tag == DW_TAG_reference_type
5930 || c->die_tag == DW_TAG_const_type
5931 || c->die_tag == DW_TAG_volatile_type)
5932 {
5933 dw_die_ref t = get_AT_ref (c, DW_AT_type);
5934
5935 return t ? is_comdat_die (t) : 0;
5936 }
5937
5938 return is_type_die (c);
5939 }
5940
5941 /* Returns 1 iff C is the sort of DIE that might be referred to from another
5942 compilation unit. */
5943
5944 static int
5945 is_symbol_die (dw_die_ref c)
5946 {
5947 return (is_type_die (c)
5948 || (get_AT (c, DW_AT_declaration)
5949 && !get_AT (c, DW_AT_specification)));
5950 }
5951
5952 static char *
5953 gen_internal_sym (const char *prefix)
5954 {
5955 char buf[256];
5956
5957 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
5958 return xstrdup (buf);
5959 }
5960
5961 /* Assign symbols to all worthy DIEs under DIE. */
5962
5963 static void
5964 assign_symbol_names (dw_die_ref die)
5965 {
5966 dw_die_ref c;
5967
5968 if (is_symbol_die (die))
5969 {
5970 if (comdat_symbol_id)
5971 {
5972 char *p = alloca (strlen (comdat_symbol_id) + 64);
5973
5974 sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
5975 comdat_symbol_id, comdat_symbol_number++);
5976 die->die_symbol = xstrdup (p);
5977 }
5978 else
5979 die->die_symbol = gen_internal_sym ("LDIE");
5980 }
5981
5982 for (c = die->die_child; c != NULL; c = c->die_sib)
5983 assign_symbol_names (c);
5984 }
5985
5986 struct cu_hash_table_entry
5987 {
5988 dw_die_ref cu;
5989 unsigned min_comdat_num, max_comdat_num;
5990 struct cu_hash_table_entry *next;
5991 };
5992
5993 /* Routines to manipulate hash table of CUs. */
5994 static hashval_t
5995 htab_cu_hash (const void *of)
5996 {
5997 const struct cu_hash_table_entry *entry = of;
5998
5999 return htab_hash_string (entry->cu->die_symbol);
6000 }
6001
6002 static int
6003 htab_cu_eq (const void *of1, const void *of2)
6004 {
6005 const struct cu_hash_table_entry *entry1 = of1;
6006 const struct die_struct *entry2 = of2;
6007
6008 return !strcmp (entry1->cu->die_symbol, entry2->die_symbol);
6009 }
6010
6011 static void
6012 htab_cu_del (void *what)
6013 {
6014 struct cu_hash_table_entry *next, *entry = what;
6015
6016 while (entry)
6017 {
6018 next = entry->next;
6019 free (entry);
6020 entry = next;
6021 }
6022 }
6023
6024 /* Check whether we have already seen this CU and set up SYM_NUM
6025 accordingly. */
6026 static int
6027 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
6028 {
6029 struct cu_hash_table_entry dummy;
6030 struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6031
6032 dummy.max_comdat_num = 0;
6033
6034 slot = (struct cu_hash_table_entry **)
6035 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6036 INSERT);
6037 entry = *slot;
6038
6039 for (; entry; last = entry, entry = entry->next)
6040 {
6041 if (same_die_p_wrap (cu, entry->cu))
6042 break;
6043 }
6044
6045 if (entry)
6046 {
6047 *sym_num = entry->min_comdat_num;
6048 return 1;
6049 }
6050
6051 entry = xcalloc (1, sizeof (struct cu_hash_table_entry));
6052 entry->cu = cu;
6053 entry->min_comdat_num = *sym_num = last->max_comdat_num;
6054 entry->next = *slot;
6055 *slot = entry;
6056
6057 return 0;
6058 }
6059
6060 /* Record SYM_NUM to record of CU in HTABLE. */
6061 static void
6062 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
6063 {
6064 struct cu_hash_table_entry **slot, *entry;
6065
6066 slot = (struct cu_hash_table_entry **)
6067 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6068 NO_INSERT);
6069 entry = *slot;
6070
6071 entry->max_comdat_num = sym_num;
6072 }
6073
6074 /* Traverse the DIE (which is always comp_unit_die), and set up
6075 additional compilation units for each of the include files we see
6076 bracketed by BINCL/EINCL. */
6077
6078 static void
6079 break_out_includes (dw_die_ref die)
6080 {
6081 dw_die_ref *ptr;
6082 dw_die_ref unit = NULL;
6083 limbo_die_node *node, **pnode;
6084 htab_t cu_hash_table;
6085
6086 for (ptr = &(die->die_child); *ptr;)
6087 {
6088 dw_die_ref c = *ptr;
6089
6090 if (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6091 || (unit && is_comdat_die (c)))
6092 {
6093 /* This DIE is for a secondary CU; remove it from the main one. */
6094 *ptr = c->die_sib;
6095
6096 if (c->die_tag == DW_TAG_GNU_BINCL)
6097 {
6098 unit = push_new_compile_unit (unit, c);
6099 free_die (c);
6100 }
6101 else if (c->die_tag == DW_TAG_GNU_EINCL)
6102 {
6103 unit = pop_compile_unit (unit);
6104 free_die (c);
6105 }
6106 else
6107 add_child_die (unit, c);
6108 }
6109 else
6110 {
6111 /* Leave this DIE in the main CU. */
6112 ptr = &(c->die_sib);
6113 continue;
6114 }
6115 }
6116
6117 #if 0
6118 /* We can only use this in debugging, since the frontend doesn't check
6119 to make sure that we leave every include file we enter. */
6120 if (unit != NULL)
6121 abort ();
6122 #endif
6123
6124 assign_symbol_names (die);
6125 cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
6126 for (node = limbo_die_list, pnode = &limbo_die_list;
6127 node;
6128 node = node->next)
6129 {
6130 int is_dupl;
6131
6132 compute_section_prefix (node->die);
6133 is_dupl = check_duplicate_cu (node->die, cu_hash_table,
6134 &comdat_symbol_number);
6135 assign_symbol_names (node->die);
6136 if (is_dupl)
6137 *pnode = node->next;
6138 else
6139 {
6140 pnode = &node->next;
6141 record_comdat_symbol_number (node->die, cu_hash_table,
6142 comdat_symbol_number);
6143 }
6144 }
6145 htab_delete (cu_hash_table);
6146 }
6147
6148 /* Traverse the DIE and add a sibling attribute if it may have the
6149 effect of speeding up access to siblings. To save some space,
6150 avoid generating sibling attributes for DIE's without children. */
6151
6152 static void
6153 add_sibling_attributes (dw_die_ref die)
6154 {
6155 dw_die_ref c;
6156
6157 if (die->die_tag != DW_TAG_compile_unit
6158 && die->die_sib && die->die_child != NULL)
6159 /* Add the sibling link to the front of the attribute list. */
6160 add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
6161
6162 for (c = die->die_child; c != NULL; c = c->die_sib)
6163 add_sibling_attributes (c);
6164 }
6165
6166 /* Output all location lists for the DIE and its children. */
6167
6168 static void
6169 output_location_lists (dw_die_ref die)
6170 {
6171 dw_die_ref c;
6172 dw_attr_ref d_attr;
6173
6174 for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next)
6175 if (AT_class (d_attr) == dw_val_class_loc_list)
6176 output_loc_list (AT_loc_list (d_attr));
6177
6178 for (c = die->die_child; c != NULL; c = c->die_sib)
6179 output_location_lists (c);
6180
6181 }
6182
6183 /* The format of each DIE (and its attribute value pairs) is encoded in an
6184 abbreviation table. This routine builds the abbreviation table and assigns
6185 a unique abbreviation id for each abbreviation entry. The children of each
6186 die are visited recursively. */
6187
6188 static void
6189 build_abbrev_table (dw_die_ref die)
6190 {
6191 unsigned long abbrev_id;
6192 unsigned int n_alloc;
6193 dw_die_ref c;
6194 dw_attr_ref d_attr, a_attr;
6195
6196 /* Scan the DIE references, and mark as external any that refer to
6197 DIEs from other CUs (i.e. those which are not marked). */
6198 for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next)
6199 if (AT_class (d_attr) == dw_val_class_die_ref
6200 && AT_ref (d_attr)->die_mark == 0)
6201 {
6202 if (AT_ref (d_attr)->die_symbol == 0)
6203 abort ();
6204
6205 set_AT_ref_external (d_attr, 1);
6206 }
6207
6208 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6209 {
6210 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6211
6212 if (abbrev->die_tag == die->die_tag)
6213 {
6214 if ((abbrev->die_child != NULL) == (die->die_child != NULL))
6215 {
6216 a_attr = abbrev->die_attr;
6217 d_attr = die->die_attr;
6218
6219 while (a_attr != NULL && d_attr != NULL)
6220 {
6221 if ((a_attr->dw_attr != d_attr->dw_attr)
6222 || (value_format (a_attr) != value_format (d_attr)))
6223 break;
6224
6225 a_attr = a_attr->dw_attr_next;
6226 d_attr = d_attr->dw_attr_next;
6227 }
6228
6229 if (a_attr == NULL && d_attr == NULL)
6230 break;
6231 }
6232 }
6233 }
6234
6235 if (abbrev_id >= abbrev_die_table_in_use)
6236 {
6237 if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
6238 {
6239 n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
6240 abbrev_die_table = ggc_realloc (abbrev_die_table,
6241 sizeof (dw_die_ref) * n_alloc);
6242
6243 memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
6244 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
6245 abbrev_die_table_allocated = n_alloc;
6246 }
6247
6248 ++abbrev_die_table_in_use;
6249 abbrev_die_table[abbrev_id] = die;
6250 }
6251
6252 die->die_abbrev = abbrev_id;
6253 for (c = die->die_child; c != NULL; c = c->die_sib)
6254 build_abbrev_table (c);
6255 }
6256 \f
6257 /* Return the power-of-two number of bytes necessary to represent VALUE. */
6258
6259 static int
6260 constant_size (long unsigned int value)
6261 {
6262 int log;
6263
6264 if (value == 0)
6265 log = 0;
6266 else
6267 log = floor_log2 (value);
6268
6269 log = log / 8;
6270 log = 1 << (floor_log2 (log) + 1);
6271
6272 return log;
6273 }
6274
6275 /* Return the size of a DIE as it is represented in the
6276 .debug_info section. */
6277
6278 static unsigned long
6279 size_of_die (dw_die_ref die)
6280 {
6281 unsigned long size = 0;
6282 dw_attr_ref a;
6283
6284 size += size_of_uleb128 (die->die_abbrev);
6285 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
6286 {
6287 switch (AT_class (a))
6288 {
6289 case dw_val_class_addr:
6290 size += DWARF2_ADDR_SIZE;
6291 break;
6292 case dw_val_class_offset:
6293 size += DWARF_OFFSET_SIZE;
6294 break;
6295 case dw_val_class_loc:
6296 {
6297 unsigned long lsize = size_of_locs (AT_loc (a));
6298
6299 /* Block length. */
6300 size += constant_size (lsize);
6301 size += lsize;
6302 }
6303 break;
6304 case dw_val_class_loc_list:
6305 size += DWARF_OFFSET_SIZE;
6306 break;
6307 case dw_val_class_range_list:
6308 size += DWARF_OFFSET_SIZE;
6309 break;
6310 case dw_val_class_const:
6311 size += size_of_sleb128 (AT_int (a));
6312 break;
6313 case dw_val_class_unsigned_const:
6314 size += constant_size (AT_unsigned (a));
6315 break;
6316 case dw_val_class_long_long:
6317 size += 1 + 2*HOST_BITS_PER_LONG/HOST_BITS_PER_CHAR; /* block */
6318 break;
6319 case dw_val_class_vec:
6320 size += 1 + (a->dw_attr_val.v.val_vec.length
6321 * a->dw_attr_val.v.val_vec.elt_size); /* block */
6322 break;
6323 case dw_val_class_flag:
6324 size += 1;
6325 break;
6326 case dw_val_class_die_ref:
6327 if (AT_ref_external (a))
6328 size += DWARF2_ADDR_SIZE;
6329 else
6330 size += DWARF_OFFSET_SIZE;
6331 break;
6332 case dw_val_class_fde_ref:
6333 size += DWARF_OFFSET_SIZE;
6334 break;
6335 case dw_val_class_lbl_id:
6336 size += DWARF2_ADDR_SIZE;
6337 break;
6338 case dw_val_class_lbl_offset:
6339 size += DWARF_OFFSET_SIZE;
6340 break;
6341 case dw_val_class_str:
6342 if (AT_string_form (a) == DW_FORM_strp)
6343 size += DWARF_OFFSET_SIZE;
6344 else
6345 size += strlen (a->dw_attr_val.v.val_str->str) + 1;
6346 break;
6347 default:
6348 abort ();
6349 }
6350 }
6351
6352 return size;
6353 }
6354
6355 /* Size the debugging information associated with a given DIE. Visits the
6356 DIE's children recursively. Updates the global variable next_die_offset, on
6357 each time through. Uses the current value of next_die_offset to update the
6358 die_offset field in each DIE. */
6359
6360 static void
6361 calc_die_sizes (dw_die_ref die)
6362 {
6363 dw_die_ref c;
6364
6365 die->die_offset = next_die_offset;
6366 next_die_offset += size_of_die (die);
6367
6368 for (c = die->die_child; c != NULL; c = c->die_sib)
6369 calc_die_sizes (c);
6370
6371 if (die->die_child != NULL)
6372 /* Count the null byte used to terminate sibling lists. */
6373 next_die_offset += 1;
6374 }
6375
6376 /* Set the marks for a die and its children. We do this so
6377 that we know whether or not a reference needs to use FORM_ref_addr; only
6378 DIEs in the same CU will be marked. We used to clear out the offset
6379 and use that as the flag, but ran into ordering problems. */
6380
6381 static void
6382 mark_dies (dw_die_ref die)
6383 {
6384 dw_die_ref c;
6385
6386 if (die->die_mark)
6387 abort ();
6388
6389 die->die_mark = 1;
6390 for (c = die->die_child; c; c = c->die_sib)
6391 mark_dies (c);
6392 }
6393
6394 /* Clear the marks for a die and its children. */
6395
6396 static void
6397 unmark_dies (dw_die_ref die)
6398 {
6399 dw_die_ref c;
6400
6401 if (!die->die_mark)
6402 abort ();
6403
6404 die->die_mark = 0;
6405 for (c = die->die_child; c; c = c->die_sib)
6406 unmark_dies (c);
6407 }
6408
6409 /* Clear the marks for a die, its children and referred dies. */
6410
6411 static void
6412 unmark_all_dies (dw_die_ref die)
6413 {
6414 dw_die_ref c;
6415 dw_attr_ref a;
6416
6417 if (!die->die_mark)
6418 return;
6419 die->die_mark = 0;
6420
6421 for (c = die->die_child; c; c = c->die_sib)
6422 unmark_all_dies (c);
6423
6424 for (a = die->die_attr; a; a = a->dw_attr_next)
6425 if (AT_class (a) == dw_val_class_die_ref)
6426 unmark_all_dies (AT_ref (a));
6427 }
6428
6429 /* Return the size of the .debug_pubnames table generated for the
6430 compilation unit. */
6431
6432 static unsigned long
6433 size_of_pubnames (void)
6434 {
6435 unsigned long size;
6436 unsigned i;
6437
6438 size = DWARF_PUBNAMES_HEADER_SIZE;
6439 for (i = 0; i < pubname_table_in_use; i++)
6440 {
6441 pubname_ref p = &pubname_table[i];
6442 size += DWARF_OFFSET_SIZE + strlen (p->name) + 1;
6443 }
6444
6445 size += DWARF_OFFSET_SIZE;
6446 return size;
6447 }
6448
6449 /* Return the size of the information in the .debug_aranges section. */
6450
6451 static unsigned long
6452 size_of_aranges (void)
6453 {
6454 unsigned long size;
6455
6456 size = DWARF_ARANGES_HEADER_SIZE;
6457
6458 /* Count the address/length pair for this compilation unit. */
6459 size += 2 * DWARF2_ADDR_SIZE;
6460 size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
6461
6462 /* Count the two zero words used to terminated the address range table. */
6463 size += 2 * DWARF2_ADDR_SIZE;
6464 return size;
6465 }
6466 \f
6467 /* Select the encoding of an attribute value. */
6468
6469 static enum dwarf_form
6470 value_format (dw_attr_ref a)
6471 {
6472 switch (a->dw_attr_val.val_class)
6473 {
6474 case dw_val_class_addr:
6475 return DW_FORM_addr;
6476 case dw_val_class_range_list:
6477 case dw_val_class_offset:
6478 if (DWARF_OFFSET_SIZE == 4)
6479 return DW_FORM_data4;
6480 if (DWARF_OFFSET_SIZE == 8)
6481 return DW_FORM_data8;
6482 abort ();
6483 case dw_val_class_loc_list:
6484 /* FIXME: Could be DW_FORM_data8, with a > 32 bit size
6485 .debug_loc section */
6486 return DW_FORM_data4;
6487 case dw_val_class_loc:
6488 switch (constant_size (size_of_locs (AT_loc (a))))
6489 {
6490 case 1:
6491 return DW_FORM_block1;
6492 case 2:
6493 return DW_FORM_block2;
6494 default:
6495 abort ();
6496 }
6497 case dw_val_class_const:
6498 return DW_FORM_sdata;
6499 case dw_val_class_unsigned_const:
6500 switch (constant_size (AT_unsigned (a)))
6501 {
6502 case 1:
6503 return DW_FORM_data1;
6504 case 2:
6505 return DW_FORM_data2;
6506 case 4:
6507 return DW_FORM_data4;
6508 case 8:
6509 return DW_FORM_data8;
6510 default:
6511 abort ();
6512 }
6513 case dw_val_class_long_long:
6514 return DW_FORM_block1;
6515 case dw_val_class_vec:
6516 return DW_FORM_block1;
6517 case dw_val_class_flag:
6518 return DW_FORM_flag;
6519 case dw_val_class_die_ref:
6520 if (AT_ref_external (a))
6521 return DW_FORM_ref_addr;
6522 else
6523 return DW_FORM_ref;
6524 case dw_val_class_fde_ref:
6525 return DW_FORM_data;
6526 case dw_val_class_lbl_id:
6527 return DW_FORM_addr;
6528 case dw_val_class_lbl_offset:
6529 return DW_FORM_data;
6530 case dw_val_class_str:
6531 return AT_string_form (a);
6532
6533 default:
6534 abort ();
6535 }
6536 }
6537
6538 /* Output the encoding of an attribute value. */
6539
6540 static void
6541 output_value_format (dw_attr_ref a)
6542 {
6543 enum dwarf_form form = value_format (a);
6544
6545 dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
6546 }
6547
6548 /* Output the .debug_abbrev section which defines the DIE abbreviation
6549 table. */
6550
6551 static void
6552 output_abbrev_section (void)
6553 {
6554 unsigned long abbrev_id;
6555
6556 dw_attr_ref a_attr;
6557
6558 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6559 {
6560 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6561
6562 dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
6563 dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
6564 dwarf_tag_name (abbrev->die_tag));
6565
6566 if (abbrev->die_child != NULL)
6567 dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
6568 else
6569 dw2_asm_output_data (1, DW_children_no, "DW_children_no");
6570
6571 for (a_attr = abbrev->die_attr; a_attr != NULL;
6572 a_attr = a_attr->dw_attr_next)
6573 {
6574 dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
6575 dwarf_attr_name (a_attr->dw_attr));
6576 output_value_format (a_attr);
6577 }
6578
6579 dw2_asm_output_data (1, 0, NULL);
6580 dw2_asm_output_data (1, 0, NULL);
6581 }
6582
6583 /* Terminate the table. */
6584 dw2_asm_output_data (1, 0, NULL);
6585 }
6586
6587 /* Output a symbol we can use to refer to this DIE from another CU. */
6588
6589 static inline void
6590 output_die_symbol (dw_die_ref die)
6591 {
6592 char *sym = die->die_symbol;
6593
6594 if (sym == 0)
6595 return;
6596
6597 if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
6598 /* We make these global, not weak; if the target doesn't support
6599 .linkonce, it doesn't support combining the sections, so debugging
6600 will break. */
6601 (*targetm.asm_out.globalize_label) (asm_out_file, sym);
6602
6603 ASM_OUTPUT_LABEL (asm_out_file, sym);
6604 }
6605
6606 /* Return a new location list, given the begin and end range, and the
6607 expression. gensym tells us whether to generate a new internal symbol for
6608 this location list node, which is done for the head of the list only. */
6609
6610 static inline dw_loc_list_ref
6611 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
6612 const char *section, unsigned int gensym)
6613 {
6614 dw_loc_list_ref retlist = ggc_alloc_cleared (sizeof (dw_loc_list_node));
6615
6616 retlist->begin = begin;
6617 retlist->end = end;
6618 retlist->expr = expr;
6619 retlist->section = section;
6620 if (gensym)
6621 retlist->ll_symbol = gen_internal_sym ("LLST");
6622
6623 return retlist;
6624 }
6625
6626 /* Add a location description expression to a location list. */
6627
6628 static inline void
6629 add_loc_descr_to_loc_list (dw_loc_list_ref *list_head, dw_loc_descr_ref descr,
6630 const char *begin, const char *end,
6631 const char *section)
6632 {
6633 dw_loc_list_ref *d;
6634
6635 /* Find the end of the chain. */
6636 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
6637 ;
6638
6639 /* Add a new location list node to the list. */
6640 *d = new_loc_list (descr, begin, end, section, 0);
6641 }
6642
6643 /* Output the location list given to us. */
6644
6645 static void
6646 output_loc_list (dw_loc_list_ref list_head)
6647 {
6648 dw_loc_list_ref curr = list_head;
6649
6650 ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
6651
6652 /* Walk the location list, and output each range + expression. */
6653 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
6654 {
6655 unsigned long size;
6656 if (separate_line_info_table_in_use == 0)
6657 {
6658 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
6659 "Location list begin address (%s)",
6660 list_head->ll_symbol);
6661 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
6662 "Location list end address (%s)",
6663 list_head->ll_symbol);
6664 }
6665 else
6666 {
6667 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
6668 "Location list begin address (%s)",
6669 list_head->ll_symbol);
6670 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
6671 "Location list end address (%s)",
6672 list_head->ll_symbol);
6673 }
6674 size = size_of_locs (curr->expr);
6675
6676 /* Output the block length for this list of location operations. */
6677 if (size > 0xffff)
6678 abort ();
6679 dw2_asm_output_data (2, size, "%s", "Location expression size");
6680
6681 output_loc_sequence (curr->expr);
6682 }
6683
6684 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
6685 "Location list terminator begin (%s)",
6686 list_head->ll_symbol);
6687 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
6688 "Location list terminator end (%s)",
6689 list_head->ll_symbol);
6690 }
6691
6692 /* Output the DIE and its attributes. Called recursively to generate
6693 the definitions of each child DIE. */
6694
6695 static void
6696 output_die (dw_die_ref die)
6697 {
6698 dw_attr_ref a;
6699 dw_die_ref c;
6700 unsigned long size;
6701
6702 /* If someone in another CU might refer to us, set up a symbol for
6703 them to point to. */
6704 if (die->die_symbol)
6705 output_die_symbol (die);
6706
6707 dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
6708 die->die_offset, dwarf_tag_name (die->die_tag));
6709
6710 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
6711 {
6712 const char *name = dwarf_attr_name (a->dw_attr);
6713
6714 switch (AT_class (a))
6715 {
6716 case dw_val_class_addr:
6717 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
6718 break;
6719
6720 case dw_val_class_offset:
6721 dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
6722 "%s", name);
6723 break;
6724
6725 case dw_val_class_range_list:
6726 {
6727 char *p = strchr (ranges_section_label, '\0');
6728
6729 sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
6730 a->dw_attr_val.v.val_offset);
6731 dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
6732 "%s", name);
6733 *p = '\0';
6734 }
6735 break;
6736
6737 case dw_val_class_loc:
6738 size = size_of_locs (AT_loc (a));
6739
6740 /* Output the block length for this list of location operations. */
6741 dw2_asm_output_data (constant_size (size), size, "%s", name);
6742
6743 output_loc_sequence (AT_loc (a));
6744 break;
6745
6746 case dw_val_class_const:
6747 /* ??? It would be slightly more efficient to use a scheme like is
6748 used for unsigned constants below, but gdb 4.x does not sign
6749 extend. Gdb 5.x does sign extend. */
6750 dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
6751 break;
6752
6753 case dw_val_class_unsigned_const:
6754 dw2_asm_output_data (constant_size (AT_unsigned (a)),
6755 AT_unsigned (a), "%s", name);
6756 break;
6757
6758 case dw_val_class_long_long:
6759 {
6760 unsigned HOST_WIDE_INT first, second;
6761
6762 dw2_asm_output_data (1,
6763 2 * HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
6764 "%s", name);
6765
6766 if (WORDS_BIG_ENDIAN)
6767 {
6768 first = a->dw_attr_val.v.val_long_long.hi;
6769 second = a->dw_attr_val.v.val_long_long.low;
6770 }
6771 else
6772 {
6773 first = a->dw_attr_val.v.val_long_long.low;
6774 second = a->dw_attr_val.v.val_long_long.hi;
6775 }
6776
6777 dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
6778 first, "long long constant");
6779 dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
6780 second, NULL);
6781 }
6782 break;
6783
6784 case dw_val_class_vec:
6785 {
6786 unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
6787 unsigned int len = a->dw_attr_val.v.val_vec.length;
6788 unsigned int i;
6789 unsigned char *p;
6790
6791 dw2_asm_output_data (1, len * elt_size, "%s", name);
6792 if (elt_size > sizeof (HOST_WIDE_INT))
6793 {
6794 elt_size /= 2;
6795 len *= 2;
6796 }
6797 for (i = 0, p = a->dw_attr_val.v.val_vec.array;
6798 i < len;
6799 i++, p += elt_size)
6800 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
6801 "fp or vector constant word %u", i);
6802 break;
6803 }
6804
6805 case dw_val_class_flag:
6806 dw2_asm_output_data (1, AT_flag (a), "%s", name);
6807 break;
6808
6809 case dw_val_class_loc_list:
6810 {
6811 char *sym = AT_loc_list (a)->ll_symbol;
6812
6813 if (sym == 0)
6814 abort ();
6815 dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, "%s", name);
6816 }
6817 break;
6818
6819 case dw_val_class_die_ref:
6820 if (AT_ref_external (a))
6821 {
6822 char *sym = AT_ref (a)->die_symbol;
6823
6824 if (sym == 0)
6825 abort ();
6826 dw2_asm_output_offset (DWARF2_ADDR_SIZE, sym, "%s", name);
6827 }
6828 else if (AT_ref (a)->die_offset == 0)
6829 abort ();
6830 else
6831 dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
6832 "%s", name);
6833 break;
6834
6835 case dw_val_class_fde_ref:
6836 {
6837 char l1[20];
6838
6839 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
6840 a->dw_attr_val.v.val_fde_index * 2);
6841 dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, "%s", name);
6842 }
6843 break;
6844
6845 case dw_val_class_lbl_id:
6846 dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
6847 break;
6848
6849 case dw_val_class_lbl_offset:
6850 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a), "%s", name);
6851 break;
6852
6853 case dw_val_class_str:
6854 if (AT_string_form (a) == DW_FORM_strp)
6855 dw2_asm_output_offset (DWARF_OFFSET_SIZE,
6856 a->dw_attr_val.v.val_str->label,
6857 "%s: \"%s\"", name, AT_string (a));
6858 else
6859 dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
6860 break;
6861
6862 default:
6863 abort ();
6864 }
6865 }
6866
6867 for (c = die->die_child; c != NULL; c = c->die_sib)
6868 output_die (c);
6869
6870 /* Add null byte to terminate sibling list. */
6871 if (die->die_child != NULL)
6872 dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
6873 die->die_offset);
6874 }
6875
6876 /* Output the compilation unit that appears at the beginning of the
6877 .debug_info section, and precedes the DIE descriptions. */
6878
6879 static void
6880 output_compilation_unit_header (void)
6881 {
6882 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
6883 dw2_asm_output_data (4, 0xffffffff,
6884 "Initial length escape value indicating 64-bit DWARF extension");
6885 dw2_asm_output_data (DWARF_OFFSET_SIZE,
6886 next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
6887 "Length of Compilation Unit Info");
6888 dw2_asm_output_data (2, DWARF_VERSION, "DWARF version number");
6889 dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
6890 "Offset Into Abbrev. Section");
6891 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
6892 }
6893
6894 /* Output the compilation unit DIE and its children. */
6895
6896 static void
6897 output_comp_unit (dw_die_ref die, int output_if_empty)
6898 {
6899 const char *secname;
6900 char *oldsym, *tmp;
6901
6902 /* Unless we are outputting main CU, we may throw away empty ones. */
6903 if (!output_if_empty && die->die_child == NULL)
6904 return;
6905
6906 /* Even if there are no children of this DIE, we must output the information
6907 about the compilation unit. Otherwise, on an empty translation unit, we
6908 will generate a present, but empty, .debug_info section. IRIX 6.5 `nm'
6909 will then complain when examining the file. First mark all the DIEs in
6910 this CU so we know which get local refs. */
6911 mark_dies (die);
6912
6913 build_abbrev_table (die);
6914
6915 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
6916 next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
6917 calc_die_sizes (die);
6918
6919 oldsym = die->die_symbol;
6920 if (oldsym)
6921 {
6922 tmp = alloca (strlen (oldsym) + 24);
6923
6924 sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
6925 secname = tmp;
6926 die->die_symbol = NULL;
6927 }
6928 else
6929 secname = (const char *) DEBUG_INFO_SECTION;
6930
6931 /* Output debugging information. */
6932 named_section_flags (secname, SECTION_DEBUG);
6933 output_compilation_unit_header ();
6934 output_die (die);
6935
6936 /* Leave the marks on the main CU, so we can check them in
6937 output_pubnames. */
6938 if (oldsym)
6939 {
6940 unmark_dies (die);
6941 die->die_symbol = oldsym;
6942 }
6943 }
6944
6945 /* The DWARF2 pubname for a nested thingy looks like "A::f". The
6946 output of lang_hooks.decl_printable_name for C++ looks like
6947 "A::f(int)". Let's drop the argument list, and maybe the scope. */
6948
6949 static const char *
6950 dwarf2_name (tree decl, int scope)
6951 {
6952 return (*lang_hooks.decl_printable_name) (decl, scope ? 1 : 0);
6953 }
6954
6955 /* Add a new entry to .debug_pubnames if appropriate. */
6956
6957 static void
6958 add_pubname (tree decl, dw_die_ref die)
6959 {
6960 pubname_ref p;
6961
6962 if (! TREE_PUBLIC (decl))
6963 return;
6964
6965 if (pubname_table_in_use == pubname_table_allocated)
6966 {
6967 pubname_table_allocated += PUBNAME_TABLE_INCREMENT;
6968 pubname_table
6969 = ggc_realloc (pubname_table,
6970 (pubname_table_allocated * sizeof (pubname_entry)));
6971 memset (pubname_table + pubname_table_in_use, 0,
6972 PUBNAME_TABLE_INCREMENT * sizeof (pubname_entry));
6973 }
6974
6975 p = &pubname_table[pubname_table_in_use++];
6976 p->die = die;
6977 p->name = xstrdup (dwarf2_name (decl, 1));
6978 }
6979
6980 /* Output the public names table used to speed up access to externally
6981 visible names. For now, only generate entries for externally
6982 visible procedures. */
6983
6984 static void
6985 output_pubnames (void)
6986 {
6987 unsigned i;
6988 unsigned long pubnames_length = size_of_pubnames ();
6989
6990 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
6991 dw2_asm_output_data (4, 0xffffffff,
6992 "Initial length escape value indicating 64-bit DWARF extension");
6993 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
6994 "Length of Public Names Info");
6995 dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
6996 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
6997 "Offset of Compilation Unit Info");
6998 dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
6999 "Compilation Unit Length");
7000
7001 for (i = 0; i < pubname_table_in_use; i++)
7002 {
7003 pubname_ref pub = &pubname_table[i];
7004
7005 /* We shouldn't see pubnames for DIEs outside of the main CU. */
7006 if (pub->die->die_mark == 0)
7007 abort ();
7008
7009 dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
7010 "DIE offset");
7011
7012 dw2_asm_output_nstring (pub->name, -1, "external name");
7013 }
7014
7015 dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
7016 }
7017
7018 /* Add a new entry to .debug_aranges if appropriate. */
7019
7020 static void
7021 add_arange (tree decl, dw_die_ref die)
7022 {
7023 if (! DECL_SECTION_NAME (decl))
7024 return;
7025
7026 if (arange_table_in_use == arange_table_allocated)
7027 {
7028 arange_table_allocated += ARANGE_TABLE_INCREMENT;
7029 arange_table = ggc_realloc (arange_table,
7030 (arange_table_allocated
7031 * sizeof (dw_die_ref)));
7032 memset (arange_table + arange_table_in_use, 0,
7033 ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
7034 }
7035
7036 arange_table[arange_table_in_use++] = die;
7037 }
7038
7039 /* Output the information that goes into the .debug_aranges table.
7040 Namely, define the beginning and ending address range of the
7041 text section generated for this compilation unit. */
7042
7043 static void
7044 output_aranges (void)
7045 {
7046 unsigned i;
7047 unsigned long aranges_length = size_of_aranges ();
7048
7049 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7050 dw2_asm_output_data (4, 0xffffffff,
7051 "Initial length escape value indicating 64-bit DWARF extension");
7052 dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
7053 "Length of Address Ranges Info");
7054 dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7055 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
7056 "Offset of Compilation Unit Info");
7057 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
7058 dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
7059
7060 /* We need to align to twice the pointer size here. */
7061 if (DWARF_ARANGES_PAD_SIZE)
7062 {
7063 /* Pad using a 2 byte words so that padding is correct for any
7064 pointer size. */
7065 dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
7066 2 * DWARF2_ADDR_SIZE);
7067 for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
7068 dw2_asm_output_data (2, 0, NULL);
7069 }
7070
7071 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
7072 dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
7073 text_section_label, "Length");
7074
7075 for (i = 0; i < arange_table_in_use; i++)
7076 {
7077 dw_die_ref die = arange_table[i];
7078
7079 /* We shouldn't see aranges for DIEs outside of the main CU. */
7080 if (die->die_mark == 0)
7081 abort ();
7082
7083 if (die->die_tag == DW_TAG_subprogram)
7084 {
7085 dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
7086 "Address");
7087 dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
7088 get_AT_low_pc (die), "Length");
7089 }
7090 else
7091 {
7092 /* A static variable; extract the symbol from DW_AT_location.
7093 Note that this code isn't currently hit, as we only emit
7094 aranges for functions (jason 9/23/99). */
7095 dw_attr_ref a = get_AT (die, DW_AT_location);
7096 dw_loc_descr_ref loc;
7097
7098 if (! a || AT_class (a) != dw_val_class_loc)
7099 abort ();
7100
7101 loc = AT_loc (a);
7102 if (loc->dw_loc_opc != DW_OP_addr)
7103 abort ();
7104
7105 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
7106 loc->dw_loc_oprnd1.v.val_addr, "Address");
7107 dw2_asm_output_data (DWARF2_ADDR_SIZE,
7108 get_AT_unsigned (die, DW_AT_byte_size),
7109 "Length");
7110 }
7111 }
7112
7113 /* Output the terminator words. */
7114 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7115 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7116 }
7117
7118 /* Add a new entry to .debug_ranges. Return the offset at which it
7119 was placed. */
7120
7121 static unsigned int
7122 add_ranges (tree block)
7123 {
7124 unsigned int in_use = ranges_table_in_use;
7125
7126 if (in_use == ranges_table_allocated)
7127 {
7128 ranges_table_allocated += RANGES_TABLE_INCREMENT;
7129 ranges_table
7130 = ggc_realloc (ranges_table, (ranges_table_allocated
7131 * sizeof (struct dw_ranges_struct)));
7132 memset (ranges_table + ranges_table_in_use, 0,
7133 RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
7134 }
7135
7136 ranges_table[in_use].block_num = (block ? BLOCK_NUMBER (block) : 0);
7137 ranges_table_in_use = in_use + 1;
7138
7139 return in_use * 2 * DWARF2_ADDR_SIZE;
7140 }
7141
7142 static void
7143 output_ranges (void)
7144 {
7145 unsigned i;
7146 static const char *const start_fmt = "Offset 0x%x";
7147 const char *fmt = start_fmt;
7148
7149 for (i = 0; i < ranges_table_in_use; i++)
7150 {
7151 int block_num = ranges_table[i].block_num;
7152
7153 if (block_num)
7154 {
7155 char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
7156 char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
7157
7158 ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
7159 ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
7160
7161 /* If all code is in the text section, then the compilation
7162 unit base address defaults to DW_AT_low_pc, which is the
7163 base of the text section. */
7164 if (separate_line_info_table_in_use == 0)
7165 {
7166 dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
7167 text_section_label,
7168 fmt, i * 2 * DWARF2_ADDR_SIZE);
7169 dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
7170 text_section_label, NULL);
7171 }
7172
7173 /* Otherwise, we add a DW_AT_entry_pc attribute to force the
7174 compilation unit base address to zero, which allows us to
7175 use absolute addresses, and not worry about whether the
7176 target supports cross-section arithmetic. */
7177 else
7178 {
7179 dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
7180 fmt, i * 2 * DWARF2_ADDR_SIZE);
7181 dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
7182 }
7183
7184 fmt = NULL;
7185 }
7186 else
7187 {
7188 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7189 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7190 fmt = start_fmt;
7191 }
7192 }
7193 }
7194
7195 /* Data structure containing information about input files. */
7196 struct file_info
7197 {
7198 char *path; /* Complete file name. */
7199 char *fname; /* File name part. */
7200 int length; /* Length of entire string. */
7201 int file_idx; /* Index in input file table. */
7202 int dir_idx; /* Index in directory table. */
7203 };
7204
7205 /* Data structure containing information about directories with source
7206 files. */
7207 struct dir_info
7208 {
7209 char *path; /* Path including directory name. */
7210 int length; /* Path length. */
7211 int prefix; /* Index of directory entry which is a prefix. */
7212 int count; /* Number of files in this directory. */
7213 int dir_idx; /* Index of directory used as base. */
7214 int used; /* Used in the end? */
7215 };
7216
7217 /* Callback function for file_info comparison. We sort by looking at
7218 the directories in the path. */
7219
7220 static int
7221 file_info_cmp (const void *p1, const void *p2)
7222 {
7223 const struct file_info *s1 = p1;
7224 const struct file_info *s2 = p2;
7225 unsigned char *cp1;
7226 unsigned char *cp2;
7227
7228 /* Take care of file names without directories. We need to make sure that
7229 we return consistent values to qsort since some will get confused if
7230 we return the same value when identical operands are passed in opposite
7231 orders. So if neither has a directory, return 0 and otherwise return
7232 1 or -1 depending on which one has the directory. */
7233 if ((s1->path == s1->fname || s2->path == s2->fname))
7234 return (s2->path == s2->fname) - (s1->path == s1->fname);
7235
7236 cp1 = (unsigned char *) s1->path;
7237 cp2 = (unsigned char *) s2->path;
7238
7239 while (1)
7240 {
7241 ++cp1;
7242 ++cp2;
7243 /* Reached the end of the first path? If so, handle like above. */
7244 if ((cp1 == (unsigned char *) s1->fname)
7245 || (cp2 == (unsigned char *) s2->fname))
7246 return ((cp2 == (unsigned char *) s2->fname)
7247 - (cp1 == (unsigned char *) s1->fname));
7248
7249 /* Character of current path component the same? */
7250 else if (*cp1 != *cp2)
7251 return *cp1 - *cp2;
7252 }
7253 }
7254
7255 /* Output the directory table and the file name table. We try to minimize
7256 the total amount of memory needed. A heuristic is used to avoid large
7257 slowdowns with many input files. */
7258
7259 static void
7260 output_file_names (void)
7261 {
7262 struct file_info *files;
7263 struct dir_info *dirs;
7264 int *saved;
7265 int *savehere;
7266 int *backmap;
7267 size_t ndirs;
7268 int idx_offset;
7269 size_t i;
7270 int idx;
7271
7272 /* Handle the case where file_table is empty. */
7273 if (VARRAY_ACTIVE_SIZE (file_table) <= 1)
7274 {
7275 dw2_asm_output_data (1, 0, "End directory table");
7276 dw2_asm_output_data (1, 0, "End file name table");
7277 return;
7278 }
7279
7280 /* Allocate the various arrays we need. */
7281 files = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (struct file_info));
7282 dirs = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (struct dir_info));
7283
7284 /* Sort the file names. */
7285 for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7286 {
7287 char *f;
7288
7289 /* Skip all leading "./". */
7290 f = VARRAY_CHAR_PTR (file_table, i);
7291 while (f[0] == '.' && f[1] == '/')
7292 f += 2;
7293
7294 /* Create a new array entry. */
7295 files[i].path = f;
7296 files[i].length = strlen (f);
7297 files[i].file_idx = i;
7298
7299 /* Search for the file name part. */
7300 f = strrchr (f, '/');
7301 files[i].fname = f == NULL ? files[i].path : f + 1;
7302 }
7303
7304 qsort (files + 1, VARRAY_ACTIVE_SIZE (file_table) - 1,
7305 sizeof (files[0]), file_info_cmp);
7306
7307 /* Find all the different directories used. */
7308 dirs[0].path = files[1].path;
7309 dirs[0].length = files[1].fname - files[1].path;
7310 dirs[0].prefix = -1;
7311 dirs[0].count = 1;
7312 dirs[0].dir_idx = 0;
7313 dirs[0].used = 0;
7314 files[1].dir_idx = 0;
7315 ndirs = 1;
7316
7317 for (i = 2; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7318 if (files[i].fname - files[i].path == dirs[ndirs - 1].length
7319 && memcmp (dirs[ndirs - 1].path, files[i].path,
7320 dirs[ndirs - 1].length) == 0)
7321 {
7322 /* Same directory as last entry. */
7323 files[i].dir_idx = ndirs - 1;
7324 ++dirs[ndirs - 1].count;
7325 }
7326 else
7327 {
7328 size_t j;
7329
7330 /* This is a new directory. */
7331 dirs[ndirs].path = files[i].path;
7332 dirs[ndirs].length = files[i].fname - files[i].path;
7333 dirs[ndirs].count = 1;
7334 dirs[ndirs].dir_idx = ndirs;
7335 dirs[ndirs].used = 0;
7336 files[i].dir_idx = ndirs;
7337
7338 /* Search for a prefix. */
7339 dirs[ndirs].prefix = -1;
7340 for (j = 0; j < ndirs; j++)
7341 if (dirs[j].length < dirs[ndirs].length
7342 && dirs[j].length > 1
7343 && (dirs[ndirs].prefix == -1
7344 || dirs[j].length > dirs[dirs[ndirs].prefix].length)
7345 && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
7346 dirs[ndirs].prefix = j;
7347
7348 ++ndirs;
7349 }
7350
7351 /* Now to the actual work. We have to find a subset of the directories which
7352 allow expressing the file name using references to the directory table
7353 with the least amount of characters. We do not do an exhaustive search
7354 where we would have to check out every combination of every single
7355 possible prefix. Instead we use a heuristic which provides nearly optimal
7356 results in most cases and never is much off. */
7357 saved = alloca (ndirs * sizeof (int));
7358 savehere = alloca (ndirs * sizeof (int));
7359
7360 memset (saved, '\0', ndirs * sizeof (saved[0]));
7361 for (i = 0; i < ndirs; i++)
7362 {
7363 size_t j;
7364 int total;
7365
7366 /* We can always save some space for the current directory. But this
7367 does not mean it will be enough to justify adding the directory. */
7368 savehere[i] = dirs[i].length;
7369 total = (savehere[i] - saved[i]) * dirs[i].count;
7370
7371 for (j = i + 1; j < ndirs; j++)
7372 {
7373 savehere[j] = 0;
7374 if (saved[j] < dirs[i].length)
7375 {
7376 /* Determine whether the dirs[i] path is a prefix of the
7377 dirs[j] path. */
7378 int k;
7379
7380 k = dirs[j].prefix;
7381 while (k != -1 && k != (int) i)
7382 k = dirs[k].prefix;
7383
7384 if (k == (int) i)
7385 {
7386 /* Yes it is. We can possibly safe some memory but
7387 writing the filenames in dirs[j] relative to
7388 dirs[i]. */
7389 savehere[j] = dirs[i].length;
7390 total += (savehere[j] - saved[j]) * dirs[j].count;
7391 }
7392 }
7393 }
7394
7395 /* Check whether we can safe enough to justify adding the dirs[i]
7396 directory. */
7397 if (total > dirs[i].length + 1)
7398 {
7399 /* It's worthwhile adding. */
7400 for (j = i; j < ndirs; j++)
7401 if (savehere[j] > 0)
7402 {
7403 /* Remember how much we saved for this directory so far. */
7404 saved[j] = savehere[j];
7405
7406 /* Remember the prefix directory. */
7407 dirs[j].dir_idx = i;
7408 }
7409 }
7410 }
7411
7412 /* We have to emit them in the order they appear in the file_table array
7413 since the index is used in the debug info generation. To do this
7414 efficiently we generate a back-mapping of the indices first. */
7415 backmap = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (int));
7416 for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7417 {
7418 backmap[files[i].file_idx] = i;
7419
7420 /* Mark this directory as used. */
7421 dirs[dirs[files[i].dir_idx].dir_idx].used = 1;
7422 }
7423
7424 /* That was it. We are ready to emit the information. First emit the
7425 directory name table. We have to make sure the first actually emitted
7426 directory name has index one; zero is reserved for the current working
7427 directory. Make sure we do not confuse these indices with the one for the
7428 constructed table (even though most of the time they are identical). */
7429 idx = 1;
7430 idx_offset = dirs[0].length > 0 ? 1 : 0;
7431 for (i = 1 - idx_offset; i < ndirs; i++)
7432 if (dirs[i].used != 0)
7433 {
7434 dirs[i].used = idx++;
7435 dw2_asm_output_nstring (dirs[i].path, dirs[i].length - 1,
7436 "Directory Entry: 0x%x", dirs[i].used);
7437 }
7438
7439 dw2_asm_output_data (1, 0, "End directory table");
7440
7441 /* Correct the index for the current working directory entry if it
7442 exists. */
7443 if (idx_offset == 0)
7444 dirs[0].used = 0;
7445
7446 /* Now write all the file names. */
7447 for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7448 {
7449 int file_idx = backmap[i];
7450 int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
7451
7452 dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
7453 "File Entry: 0x%lx", (unsigned long) i);
7454
7455 /* Include directory index. */
7456 dw2_asm_output_data_uleb128 (dirs[dir_idx].used, NULL);
7457
7458 /* Modification time. */
7459 dw2_asm_output_data_uleb128 (0, NULL);
7460
7461 /* File length in bytes. */
7462 dw2_asm_output_data_uleb128 (0, NULL);
7463 }
7464
7465 dw2_asm_output_data (1, 0, "End file name table");
7466 }
7467
7468
7469 /* Output the source line number correspondence information. This
7470 information goes into the .debug_line section. */
7471
7472 static void
7473 output_line_info (void)
7474 {
7475 char l1[20], l2[20], p1[20], p2[20];
7476 char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
7477 char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
7478 unsigned opc;
7479 unsigned n_op_args;
7480 unsigned long lt_index;
7481 unsigned long current_line;
7482 long line_offset;
7483 long line_delta;
7484 unsigned long current_file;
7485 unsigned long function;
7486
7487 ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
7488 ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
7489 ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
7490 ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
7491
7492 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7493 dw2_asm_output_data (4, 0xffffffff,
7494 "Initial length escape value indicating 64-bit DWARF extension");
7495 dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
7496 "Length of Source Line Info");
7497 ASM_OUTPUT_LABEL (asm_out_file, l1);
7498
7499 dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7500 dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
7501 ASM_OUTPUT_LABEL (asm_out_file, p1);
7502
7503 /* Define the architecture-dependent minimum instruction length (in
7504 bytes). In this implementation of DWARF, this field is used for
7505 information purposes only. Since GCC generates assembly language,
7506 we have no a priori knowledge of how many instruction bytes are
7507 generated for each source line, and therefore can use only the
7508 DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
7509 commands. Accordingly, we fix this as `1', which is "correct
7510 enough" for all architectures, and don't let the target override. */
7511 dw2_asm_output_data (1, 1,
7512 "Minimum Instruction Length");
7513
7514 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
7515 "Default is_stmt_start flag");
7516 dw2_asm_output_data (1, DWARF_LINE_BASE,
7517 "Line Base Value (Special Opcodes)");
7518 dw2_asm_output_data (1, DWARF_LINE_RANGE,
7519 "Line Range Value (Special Opcodes)");
7520 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
7521 "Special Opcode Base");
7522
7523 for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
7524 {
7525 switch (opc)
7526 {
7527 case DW_LNS_advance_pc:
7528 case DW_LNS_advance_line:
7529 case DW_LNS_set_file:
7530 case DW_LNS_set_column:
7531 case DW_LNS_fixed_advance_pc:
7532 n_op_args = 1;
7533 break;
7534 default:
7535 n_op_args = 0;
7536 break;
7537 }
7538
7539 dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
7540 opc, n_op_args);
7541 }
7542
7543 /* Write out the information about the files we use. */
7544 output_file_names ();
7545 ASM_OUTPUT_LABEL (asm_out_file, p2);
7546
7547 /* We used to set the address register to the first location in the text
7548 section here, but that didn't accomplish anything since we already
7549 have a line note for the opening brace of the first function. */
7550
7551 /* Generate the line number to PC correspondence table, encoded as
7552 a series of state machine operations. */
7553 current_file = 1;
7554 current_line = 1;
7555 strcpy (prev_line_label, text_section_label);
7556 for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
7557 {
7558 dw_line_info_ref line_info = &line_info_table[lt_index];
7559
7560 #if 0
7561 /* Disable this optimization for now; GDB wants to see two line notes
7562 at the beginning of a function so it can find the end of the
7563 prologue. */
7564
7565 /* Don't emit anything for redundant notes. Just updating the
7566 address doesn't accomplish anything, because we already assume
7567 that anything after the last address is this line. */
7568 if (line_info->dw_line_num == current_line
7569 && line_info->dw_file_num == current_file)
7570 continue;
7571 #endif
7572
7573 /* Emit debug info for the address of the current line.
7574
7575 Unfortunately, we have little choice here currently, and must always
7576 use the most general form. GCC does not know the address delta
7577 itself, so we can't use DW_LNS_advance_pc. Many ports do have length
7578 attributes which will give an upper bound on the address range. We
7579 could perhaps use length attributes to determine when it is safe to
7580 use DW_LNS_fixed_advance_pc. */
7581
7582 ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
7583 if (0)
7584 {
7585 /* This can handle deltas up to 0xffff. This takes 3 bytes. */
7586 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7587 "DW_LNS_fixed_advance_pc");
7588 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
7589 }
7590 else
7591 {
7592 /* This can handle any delta. This takes
7593 4+DWARF2_ADDR_SIZE bytes. */
7594 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7595 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7596 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7597 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7598 }
7599
7600 strcpy (prev_line_label, line_label);
7601
7602 /* Emit debug info for the source file of the current line, if
7603 different from the previous line. */
7604 if (line_info->dw_file_num != current_file)
7605 {
7606 current_file = line_info->dw_file_num;
7607 dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
7608 dw2_asm_output_data_uleb128 (current_file, "(\"%s\")",
7609 VARRAY_CHAR_PTR (file_table,
7610 current_file));
7611 }
7612
7613 /* Emit debug info for the current line number, choosing the encoding
7614 that uses the least amount of space. */
7615 if (line_info->dw_line_num != current_line)
7616 {
7617 line_offset = line_info->dw_line_num - current_line;
7618 line_delta = line_offset - DWARF_LINE_BASE;
7619 current_line = line_info->dw_line_num;
7620 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
7621 /* This can handle deltas from -10 to 234, using the current
7622 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE. This
7623 takes 1 byte. */
7624 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
7625 "line %lu", current_line);
7626 else
7627 {
7628 /* This can handle any delta. This takes at least 4 bytes,
7629 depending on the value being encoded. */
7630 dw2_asm_output_data (1, DW_LNS_advance_line,
7631 "advance to line %lu", current_line);
7632 dw2_asm_output_data_sleb128 (line_offset, NULL);
7633 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7634 }
7635 }
7636 else
7637 /* We still need to start a new row, so output a copy insn. */
7638 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7639 }
7640
7641 /* Emit debug info for the address of the end of the function. */
7642 if (0)
7643 {
7644 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7645 "DW_LNS_fixed_advance_pc");
7646 dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
7647 }
7648 else
7649 {
7650 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7651 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7652 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7653 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
7654 }
7655
7656 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
7657 dw2_asm_output_data_uleb128 (1, NULL);
7658 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
7659
7660 function = 0;
7661 current_file = 1;
7662 current_line = 1;
7663 for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
7664 {
7665 dw_separate_line_info_ref line_info
7666 = &separate_line_info_table[lt_index];
7667
7668 #if 0
7669 /* Don't emit anything for redundant notes. */
7670 if (line_info->dw_line_num == current_line
7671 && line_info->dw_file_num == current_file
7672 && line_info->function == function)
7673 goto cont;
7674 #endif
7675
7676 /* Emit debug info for the address of the current line. If this is
7677 a new function, or the first line of a function, then we need
7678 to handle it differently. */
7679 ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
7680 lt_index);
7681 if (function != line_info->function)
7682 {
7683 function = line_info->function;
7684
7685 /* Set the address register to the first line in the function. */
7686 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7687 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7688 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7689 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7690 }
7691 else
7692 {
7693 /* ??? See the DW_LNS_advance_pc comment above. */
7694 if (0)
7695 {
7696 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7697 "DW_LNS_fixed_advance_pc");
7698 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
7699 }
7700 else
7701 {
7702 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7703 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7704 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7705 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7706 }
7707 }
7708
7709 strcpy (prev_line_label, line_label);
7710
7711 /* Emit debug info for the source file of the current line, if
7712 different from the previous line. */
7713 if (line_info->dw_file_num != current_file)
7714 {
7715 current_file = line_info->dw_file_num;
7716 dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
7717 dw2_asm_output_data_uleb128 (current_file, "(\"%s\")",
7718 VARRAY_CHAR_PTR (file_table,
7719 current_file));
7720 }
7721
7722 /* Emit debug info for the current line number, choosing the encoding
7723 that uses the least amount of space. */
7724 if (line_info->dw_line_num != current_line)
7725 {
7726 line_offset = line_info->dw_line_num - current_line;
7727 line_delta = line_offset - DWARF_LINE_BASE;
7728 current_line = line_info->dw_line_num;
7729 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
7730 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
7731 "line %lu", current_line);
7732 else
7733 {
7734 dw2_asm_output_data (1, DW_LNS_advance_line,
7735 "advance to line %lu", current_line);
7736 dw2_asm_output_data_sleb128 (line_offset, NULL);
7737 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7738 }
7739 }
7740 else
7741 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7742
7743 #if 0
7744 cont:
7745 #endif
7746
7747 lt_index++;
7748
7749 /* If we're done with a function, end its sequence. */
7750 if (lt_index == separate_line_info_table_in_use
7751 || separate_line_info_table[lt_index].function != function)
7752 {
7753 current_file = 1;
7754 current_line = 1;
7755
7756 /* Emit debug info for the address of the end of the function. */
7757 ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
7758 if (0)
7759 {
7760 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7761 "DW_LNS_fixed_advance_pc");
7762 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
7763 }
7764 else
7765 {
7766 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7767 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7768 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7769 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7770 }
7771
7772 /* Output the marker for the end of this sequence. */
7773 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
7774 dw2_asm_output_data_uleb128 (1, NULL);
7775 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
7776 }
7777 }
7778
7779 /* Output the marker for the end of the line number info. */
7780 ASM_OUTPUT_LABEL (asm_out_file, l2);
7781 }
7782 \f
7783 /* Given a pointer to a tree node for some base type, return a pointer to
7784 a DIE that describes the given type.
7785
7786 This routine must only be called for GCC type nodes that correspond to
7787 Dwarf base (fundamental) types. */
7788
7789 static dw_die_ref
7790 base_type_die (tree type)
7791 {
7792 dw_die_ref base_type_result;
7793 const char *type_name;
7794 enum dwarf_type encoding;
7795 tree name = TYPE_NAME (type);
7796
7797 if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
7798 return 0;
7799
7800 if (name)
7801 {
7802 if (TREE_CODE (name) == TYPE_DECL)
7803 name = DECL_NAME (name);
7804
7805 type_name = IDENTIFIER_POINTER (name);
7806 }
7807 else
7808 type_name = "__unknown__";
7809
7810 switch (TREE_CODE (type))
7811 {
7812 case INTEGER_TYPE:
7813 /* Carefully distinguish the C character types, without messing
7814 up if the language is not C. Note that we check only for the names
7815 that contain spaces; other names might occur by coincidence in other
7816 languages. */
7817 if (! (TYPE_PRECISION (type) == CHAR_TYPE_SIZE
7818 && (type == char_type_node
7819 || ! strcmp (type_name, "signed char")
7820 || ! strcmp (type_name, "unsigned char"))))
7821 {
7822 if (TREE_UNSIGNED (type))
7823 encoding = DW_ATE_unsigned;
7824 else
7825 encoding = DW_ATE_signed;
7826 break;
7827 }
7828 /* else fall through. */
7829
7830 case CHAR_TYPE:
7831 /* GNU Pascal/Ada CHAR type. Not used in C. */
7832 if (TREE_UNSIGNED (type))
7833 encoding = DW_ATE_unsigned_char;
7834 else
7835 encoding = DW_ATE_signed_char;
7836 break;
7837
7838 case REAL_TYPE:
7839 encoding = DW_ATE_float;
7840 break;
7841
7842 /* Dwarf2 doesn't know anything about complex ints, so use
7843 a user defined type for it. */
7844 case COMPLEX_TYPE:
7845 if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
7846 encoding = DW_ATE_complex_float;
7847 else
7848 encoding = DW_ATE_lo_user;
7849 break;
7850
7851 case BOOLEAN_TYPE:
7852 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
7853 encoding = DW_ATE_boolean;
7854 break;
7855
7856 default:
7857 /* No other TREE_CODEs are Dwarf fundamental types. */
7858 abort ();
7859 }
7860
7861 base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
7862 if (demangle_name_func)
7863 type_name = (*demangle_name_func) (type_name);
7864
7865 add_AT_string (base_type_result, DW_AT_name, type_name);
7866 add_AT_unsigned (base_type_result, DW_AT_byte_size,
7867 int_size_in_bytes (type));
7868 add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
7869
7870 return base_type_result;
7871 }
7872
7873 /* Given a pointer to an arbitrary ..._TYPE tree node, return a pointer to
7874 the Dwarf "root" type for the given input type. The Dwarf "root" type of
7875 a given type is generally the same as the given type, except that if the
7876 given type is a pointer or reference type, then the root type of the given
7877 type is the root type of the "basis" type for the pointer or reference
7878 type. (This definition of the "root" type is recursive.) Also, the root
7879 type of a `const' qualified type or a `volatile' qualified type is the
7880 root type of the given type without the qualifiers. */
7881
7882 static tree
7883 root_type (tree type)
7884 {
7885 if (TREE_CODE (type) == ERROR_MARK)
7886 return error_mark_node;
7887
7888 switch (TREE_CODE (type))
7889 {
7890 case ERROR_MARK:
7891 return error_mark_node;
7892
7893 case POINTER_TYPE:
7894 case REFERENCE_TYPE:
7895 return type_main_variant (root_type (TREE_TYPE (type)));
7896
7897 default:
7898 return type_main_variant (type);
7899 }
7900 }
7901
7902 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
7903 given input type is a Dwarf "fundamental" type. Otherwise return null. */
7904
7905 static inline int
7906 is_base_type (tree type)
7907 {
7908 switch (TREE_CODE (type))
7909 {
7910 case ERROR_MARK:
7911 case VOID_TYPE:
7912 case INTEGER_TYPE:
7913 case REAL_TYPE:
7914 case COMPLEX_TYPE:
7915 case BOOLEAN_TYPE:
7916 case CHAR_TYPE:
7917 return 1;
7918
7919 case SET_TYPE:
7920 case ARRAY_TYPE:
7921 case RECORD_TYPE:
7922 case UNION_TYPE:
7923 case QUAL_UNION_TYPE:
7924 case ENUMERAL_TYPE:
7925 case FUNCTION_TYPE:
7926 case METHOD_TYPE:
7927 case POINTER_TYPE:
7928 case REFERENCE_TYPE:
7929 case FILE_TYPE:
7930 case OFFSET_TYPE:
7931 case LANG_TYPE:
7932 case VECTOR_TYPE:
7933 return 0;
7934
7935 default:
7936 abort ();
7937 }
7938
7939 return 0;
7940 }
7941
7942 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
7943 node, return the size in bits for the type if it is a constant, or else
7944 return the alignment for the type if the type's size is not constant, or
7945 else return BITS_PER_WORD if the type actually turns out to be an
7946 ERROR_MARK node. */
7947
7948 static inline unsigned HOST_WIDE_INT
7949 simple_type_size_in_bits (tree type)
7950 {
7951 if (TREE_CODE (type) == ERROR_MARK)
7952 return BITS_PER_WORD;
7953 else if (TYPE_SIZE (type) == NULL_TREE)
7954 return 0;
7955 else if (host_integerp (TYPE_SIZE (type), 1))
7956 return tree_low_cst (TYPE_SIZE (type), 1);
7957 else
7958 return TYPE_ALIGN (type);
7959 }
7960
7961 /* Return true if the debug information for the given type should be
7962 emitted as a subrange type. */
7963
7964 static inline bool
7965 is_subrange_type (tree type)
7966 {
7967 tree subtype = TREE_TYPE (type);
7968
7969 if (TREE_CODE (type) == INTEGER_TYPE
7970 && subtype != NULL_TREE)
7971 {
7972 if (TREE_CODE (subtype) == INTEGER_TYPE)
7973 return true;
7974 if (TREE_CODE (subtype) == ENUMERAL_TYPE)
7975 return true;
7976 }
7977 return false;
7978 }
7979
7980 /* Given a pointer to a tree node for a subrange type, return a pointer
7981 to a DIE that describes the given type. */
7982
7983 static dw_die_ref
7984 subrange_type_die (tree type, dw_die_ref context_die)
7985 {
7986 dw_die_ref subtype_die;
7987 dw_die_ref subrange_die;
7988 tree name = TYPE_NAME (type);
7989 const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
7990
7991 if (context_die == NULL)
7992 context_die = comp_unit_die;
7993
7994 if (TREE_CODE (TREE_TYPE (type)) == ENUMERAL_TYPE)
7995 subtype_die = gen_enumeration_type_die (TREE_TYPE (type), context_die);
7996 else
7997 subtype_die = base_type_die (TREE_TYPE (type));
7998
7999 subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
8000
8001 if (name != NULL)
8002 {
8003 if (TREE_CODE (name) == TYPE_DECL)
8004 name = DECL_NAME (name);
8005 add_name_attribute (subrange_die, IDENTIFIER_POINTER (name));
8006 }
8007
8008 if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
8009 {
8010 /* The size of the subrange type and its base type do not match,
8011 so we need to generate a size attribute for the subrange type. */
8012 add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
8013 }
8014
8015 if (TYPE_MIN_VALUE (type) != NULL)
8016 add_bound_info (subrange_die, DW_AT_lower_bound,
8017 TYPE_MIN_VALUE (type));
8018 if (TYPE_MAX_VALUE (type) != NULL)
8019 add_bound_info (subrange_die, DW_AT_upper_bound,
8020 TYPE_MAX_VALUE (type));
8021 add_AT_die_ref (subrange_die, DW_AT_type, subtype_die);
8022
8023 return subrange_die;
8024 }
8025
8026 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
8027 entry that chains various modifiers in front of the given type. */
8028
8029 static dw_die_ref
8030 modified_type_die (tree type, int is_const_type, int is_volatile_type,
8031 dw_die_ref context_die)
8032 {
8033 enum tree_code code = TREE_CODE (type);
8034 dw_die_ref mod_type_die = NULL;
8035 dw_die_ref sub_die = NULL;
8036 tree item_type = NULL;
8037
8038 if (code != ERROR_MARK)
8039 {
8040 tree qualified_type;
8041
8042 /* See if we already have the appropriately qualified variant of
8043 this type. */
8044 qualified_type
8045 = get_qualified_type (type,
8046 ((is_const_type ? TYPE_QUAL_CONST : 0)
8047 | (is_volatile_type
8048 ? TYPE_QUAL_VOLATILE : 0)));
8049
8050 /* If we do, then we can just use its DIE, if it exists. */
8051 if (qualified_type)
8052 {
8053 mod_type_die = lookup_type_die (qualified_type);
8054 if (mod_type_die)
8055 return mod_type_die;
8056 }
8057
8058 /* Handle C typedef types. */
8059 if (qualified_type && TYPE_NAME (qualified_type)
8060 && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL
8061 && DECL_ORIGINAL_TYPE (TYPE_NAME (qualified_type)))
8062 {
8063 tree type_name = TYPE_NAME (qualified_type);
8064 tree dtype = TREE_TYPE (type_name);
8065
8066 if (qualified_type == dtype)
8067 {
8068 /* For a named type, use the typedef. */
8069 gen_type_die (qualified_type, context_die);
8070 mod_type_die = lookup_type_die (qualified_type);
8071 }
8072 else if (is_const_type < TYPE_READONLY (dtype)
8073 || is_volatile_type < TYPE_VOLATILE (dtype))
8074 /* cv-unqualified version of named type. Just use the unnamed
8075 type to which it refers. */
8076 mod_type_die
8077 = modified_type_die (DECL_ORIGINAL_TYPE (type_name),
8078 is_const_type, is_volatile_type,
8079 context_die);
8080
8081 /* Else cv-qualified version of named type; fall through. */
8082 }
8083
8084 if (mod_type_die)
8085 /* OK. */
8086 ;
8087 else if (is_const_type)
8088 {
8089 mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
8090 sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
8091 }
8092 else if (is_volatile_type)
8093 {
8094 mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
8095 sub_die = modified_type_die (type, 0, 0, context_die);
8096 }
8097 else if (code == POINTER_TYPE)
8098 {
8099 mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
8100 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8101 simple_type_size_in_bits (type) / BITS_PER_UNIT);
8102 #if 0
8103 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
8104 #endif
8105 item_type = TREE_TYPE (type);
8106 }
8107 else if (code == REFERENCE_TYPE)
8108 {
8109 mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
8110 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8111 simple_type_size_in_bits (type) / BITS_PER_UNIT);
8112 #if 0
8113 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
8114 #endif
8115 item_type = TREE_TYPE (type);
8116 }
8117 else if (is_subrange_type (type))
8118 mod_type_die = subrange_type_die (type, context_die);
8119 else if (is_base_type (type))
8120 mod_type_die = base_type_die (type);
8121 else
8122 {
8123 gen_type_die (type, context_die);
8124
8125 /* We have to get the type_main_variant here (and pass that to the
8126 `lookup_type_die' routine) because the ..._TYPE node we have
8127 might simply be a *copy* of some original type node (where the
8128 copy was created to help us keep track of typedef names) and
8129 that copy might have a different TYPE_UID from the original
8130 ..._TYPE node. */
8131 if (TREE_CODE (type) != VECTOR_TYPE)
8132 mod_type_die = lookup_type_die (type_main_variant (type));
8133 else
8134 /* Vectors have the debugging information in the type,
8135 not the main variant. */
8136 mod_type_die = lookup_type_die (type);
8137 if (mod_type_die == NULL)
8138 abort ();
8139 }
8140
8141 /* We want to equate the qualified type to the die below. */
8142 type = qualified_type;
8143 }
8144
8145 if (type)
8146 equate_type_number_to_die (type, mod_type_die);
8147 if (item_type)
8148 /* We must do this after the equate_type_number_to_die call, in case
8149 this is a recursive type. This ensures that the modified_type_die
8150 recursion will terminate even if the type is recursive. Recursive
8151 types are possible in Ada. */
8152 sub_die = modified_type_die (item_type,
8153 TYPE_READONLY (item_type),
8154 TYPE_VOLATILE (item_type),
8155 context_die);
8156
8157 if (sub_die != NULL)
8158 add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
8159
8160 return mod_type_die;
8161 }
8162
8163 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
8164 an enumerated type. */
8165
8166 static inline int
8167 type_is_enum (tree type)
8168 {
8169 return TREE_CODE (type) == ENUMERAL_TYPE;
8170 }
8171
8172 /* Return the register number described by a given RTL node. */
8173
8174 static unsigned int
8175 reg_number (rtx rtl)
8176 {
8177 unsigned regno = REGNO (rtl);
8178
8179 if (regno >= FIRST_PSEUDO_REGISTER)
8180 abort ();
8181
8182 return DBX_REGISTER_NUMBER (regno);
8183 }
8184
8185 /* Return a location descriptor that designates a machine register or
8186 zero if there is none. */
8187
8188 static dw_loc_descr_ref
8189 reg_loc_descriptor (rtx rtl)
8190 {
8191 unsigned reg;
8192 rtx regs;
8193
8194 if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
8195 return 0;
8196
8197 reg = reg_number (rtl);
8198 regs = (*targetm.dwarf_register_span) (rtl);
8199
8200 if (hard_regno_nregs[reg][GET_MODE (rtl)] > 1
8201 || regs)
8202 return multiple_reg_loc_descriptor (rtl, regs);
8203 else
8204 return one_reg_loc_descriptor (reg);
8205 }
8206
8207 /* Return a location descriptor that designates a machine register for
8208 a given hard register number. */
8209
8210 static dw_loc_descr_ref
8211 one_reg_loc_descriptor (unsigned int regno)
8212 {
8213 if (regno <= 31)
8214 return new_loc_descr (DW_OP_reg0 + regno, 0, 0);
8215 else
8216 return new_loc_descr (DW_OP_regx, regno, 0);
8217 }
8218
8219 /* Given an RTL of a register, return a location descriptor that
8220 designates a value that spans more than one register. */
8221
8222 static dw_loc_descr_ref
8223 multiple_reg_loc_descriptor (rtx rtl, rtx regs)
8224 {
8225 int nregs, size, i;
8226 unsigned reg;
8227 dw_loc_descr_ref loc_result = NULL;
8228
8229 reg = reg_number (rtl);
8230 nregs = hard_regno_nregs[reg][GET_MODE (rtl)];
8231
8232 /* Simple, contiguous registers. */
8233 if (regs == NULL_RTX)
8234 {
8235 size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
8236
8237 loc_result = NULL;
8238 while (nregs--)
8239 {
8240 dw_loc_descr_ref t;
8241
8242 t = one_reg_loc_descriptor (reg);
8243 add_loc_descr (&loc_result, t);
8244 add_loc_descr (&loc_result, new_loc_descr (DW_OP_piece, size, 0));
8245 ++reg;
8246 }
8247 return loc_result;
8248 }
8249
8250 /* Now onto stupid register sets in non contiguous locations. */
8251
8252 if (GET_CODE (regs) != PARALLEL)
8253 abort ();
8254
8255 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8256 loc_result = NULL;
8257
8258 for (i = 0; i < XVECLEN (regs, 0); ++i)
8259 {
8260 dw_loc_descr_ref t;
8261
8262 t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)));
8263 add_loc_descr (&loc_result, t);
8264 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8265 add_loc_descr (&loc_result, new_loc_descr (DW_OP_piece, size, 0));
8266 }
8267 return loc_result;
8268 }
8269
8270 /* Return a location descriptor that designates a constant. */
8271
8272 static dw_loc_descr_ref
8273 int_loc_descriptor (HOST_WIDE_INT i)
8274 {
8275 enum dwarf_location_atom op;
8276
8277 /* Pick the smallest representation of a constant, rather than just
8278 defaulting to the LEB encoding. */
8279 if (i >= 0)
8280 {
8281 if (i <= 31)
8282 op = DW_OP_lit0 + i;
8283 else if (i <= 0xff)
8284 op = DW_OP_const1u;
8285 else if (i <= 0xffff)
8286 op = DW_OP_const2u;
8287 else if (HOST_BITS_PER_WIDE_INT == 32
8288 || i <= 0xffffffff)
8289 op = DW_OP_const4u;
8290 else
8291 op = DW_OP_constu;
8292 }
8293 else
8294 {
8295 if (i >= -0x80)
8296 op = DW_OP_const1s;
8297 else if (i >= -0x8000)
8298 op = DW_OP_const2s;
8299 else if (HOST_BITS_PER_WIDE_INT == 32
8300 || i >= -0x80000000)
8301 op = DW_OP_const4s;
8302 else
8303 op = DW_OP_consts;
8304 }
8305
8306 return new_loc_descr (op, i, 0);
8307 }
8308
8309 /* Return a location descriptor that designates a base+offset location. */
8310
8311 static dw_loc_descr_ref
8312 based_loc_descr (unsigned int reg, HOST_WIDE_INT offset, bool can_use_fbreg)
8313 {
8314 dw_loc_descr_ref loc_result;
8315 /* For the "frame base", we use the frame pointer or stack pointer
8316 registers, since the RTL for local variables is relative to one of
8317 them. */
8318 unsigned fp_reg = DBX_REGISTER_NUMBER (frame_pointer_needed
8319 ? HARD_FRAME_POINTER_REGNUM
8320 : STACK_POINTER_REGNUM);
8321
8322 if (reg == fp_reg && can_use_fbreg)
8323 loc_result = new_loc_descr (DW_OP_fbreg, offset, 0);
8324 else if (reg <= 31)
8325 loc_result = new_loc_descr (DW_OP_breg0 + reg, offset, 0);
8326 else
8327 loc_result = new_loc_descr (DW_OP_bregx, reg, offset);
8328
8329 return loc_result;
8330 }
8331
8332 /* Return true if this RTL expression describes a base+offset calculation. */
8333
8334 static inline int
8335 is_based_loc (rtx rtl)
8336 {
8337 return (GET_CODE (rtl) == PLUS
8338 && ((GET_CODE (XEXP (rtl, 0)) == REG
8339 && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
8340 && GET_CODE (XEXP (rtl, 1)) == CONST_INT)));
8341 }
8342
8343 /* The following routine converts the RTL for a variable or parameter
8344 (resident in memory) into an equivalent Dwarf representation of a
8345 mechanism for getting the address of that same variable onto the top of a
8346 hypothetical "address evaluation" stack.
8347
8348 When creating memory location descriptors, we are effectively transforming
8349 the RTL for a memory-resident object into its Dwarf postfix expression
8350 equivalent. This routine recursively descends an RTL tree, turning
8351 it into Dwarf postfix code as it goes.
8352
8353 MODE is the mode of the memory reference, needed to handle some
8354 autoincrement addressing modes.
8355
8356 CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the location
8357 list for RTL. We can't use it when we are emitting location list for
8358 virtual variable frame_base_decl (i.e. a location list for DW_AT_frame_base)
8359 which describes how frame base changes when !frame_pointer_needed.
8360
8361 Return 0 if we can't represent the location. */
8362
8363 static dw_loc_descr_ref
8364 mem_loc_descriptor (rtx rtl, enum machine_mode mode, bool can_use_fbreg)
8365 {
8366 dw_loc_descr_ref mem_loc_result = NULL;
8367
8368 /* Note that for a dynamically sized array, the location we will generate a
8369 description of here will be the lowest numbered location which is
8370 actually within the array. That's *not* necessarily the same as the
8371 zeroth element of the array. */
8372
8373 rtl = (*targetm.delegitimize_address) (rtl);
8374
8375 switch (GET_CODE (rtl))
8376 {
8377 case POST_INC:
8378 case POST_DEC:
8379 case POST_MODIFY:
8380 /* POST_INC and POST_DEC can be handled just like a SUBREG. So we
8381 just fall into the SUBREG code. */
8382
8383 /* ... fall through ... */
8384
8385 case SUBREG:
8386 /* The case of a subreg may arise when we have a local (register)
8387 variable or a formal (register) parameter which doesn't quite fill
8388 up an entire register. For now, just assume that it is
8389 legitimate to make the Dwarf info refer to the whole register which
8390 contains the given subreg. */
8391 rtl = SUBREG_REG (rtl);
8392
8393 /* ... fall through ... */
8394
8395 case REG:
8396 /* Whenever a register number forms a part of the description of the
8397 method for calculating the (dynamic) address of a memory resident
8398 object, DWARF rules require the register number be referred to as
8399 a "base register". This distinction is not based in any way upon
8400 what category of register the hardware believes the given register
8401 belongs to. This is strictly DWARF terminology we're dealing with
8402 here. Note that in cases where the location of a memory-resident
8403 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
8404 OP_CONST (0)) the actual DWARF location descriptor that we generate
8405 may just be OP_BASEREG (basereg). This may look deceptively like
8406 the object in question was allocated to a register (rather than in
8407 memory) so DWARF consumers need to be aware of the subtle
8408 distinction between OP_REG and OP_BASEREG. */
8409 if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
8410 mem_loc_result = based_loc_descr (reg_number (rtl), 0, can_use_fbreg);
8411 break;
8412
8413 case MEM:
8414 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
8415 can_use_fbreg);
8416 if (mem_loc_result != 0)
8417 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
8418 break;
8419
8420 case LO_SUM:
8421 rtl = XEXP (rtl, 1);
8422
8423 /* ... fall through ... */
8424
8425 case LABEL_REF:
8426 /* Some ports can transform a symbol ref into a label ref, because
8427 the symbol ref is too far away and has to be dumped into a constant
8428 pool. */
8429 case CONST:
8430 case SYMBOL_REF:
8431 /* Alternatively, the symbol in the constant pool might be referenced
8432 by a different symbol. */
8433 if (GET_CODE (rtl) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (rtl))
8434 {
8435 bool marked;
8436 rtx tmp = get_pool_constant_mark (rtl, &marked);
8437
8438 if (GET_CODE (tmp) == SYMBOL_REF)
8439 {
8440 rtl = tmp;
8441 if (CONSTANT_POOL_ADDRESS_P (tmp))
8442 get_pool_constant_mark (tmp, &marked);
8443 else
8444 marked = true;
8445 }
8446
8447 /* If all references to this pool constant were optimized away,
8448 it was not output and thus we can't represent it.
8449 FIXME: might try to use DW_OP_const_value here, though
8450 DW_OP_piece complicates it. */
8451 if (!marked)
8452 return 0;
8453 }
8454
8455 mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
8456 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
8457 mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
8458 VARRAY_PUSH_RTX (used_rtx_varray, rtl);
8459 break;
8460
8461 case PRE_MODIFY:
8462 /* Extract the PLUS expression nested inside and fall into
8463 PLUS code below. */
8464 rtl = XEXP (rtl, 1);
8465 goto plus;
8466
8467 case PRE_INC:
8468 case PRE_DEC:
8469 /* Turn these into a PLUS expression and fall into the PLUS code
8470 below. */
8471 rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
8472 GEN_INT (GET_CODE (rtl) == PRE_INC
8473 ? GET_MODE_UNIT_SIZE (mode)
8474 : -GET_MODE_UNIT_SIZE (mode)));
8475
8476 /* ... fall through ... */
8477
8478 case PLUS:
8479 plus:
8480 if (is_based_loc (rtl))
8481 mem_loc_result = based_loc_descr (reg_number (XEXP (rtl, 0)),
8482 INTVAL (XEXP (rtl, 1)),
8483 can_use_fbreg);
8484 else
8485 {
8486 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
8487 can_use_fbreg);
8488 if (mem_loc_result == 0)
8489 break;
8490
8491 if (GET_CODE (XEXP (rtl, 1)) == CONST_INT
8492 && INTVAL (XEXP (rtl, 1)) >= 0)
8493 add_loc_descr (&mem_loc_result,
8494 new_loc_descr (DW_OP_plus_uconst,
8495 INTVAL (XEXP (rtl, 1)), 0));
8496 else
8497 {
8498 add_loc_descr (&mem_loc_result,
8499 mem_loc_descriptor (XEXP (rtl, 1), mode,
8500 can_use_fbreg));
8501 add_loc_descr (&mem_loc_result,
8502 new_loc_descr (DW_OP_plus, 0, 0));
8503 }
8504 }
8505 break;
8506
8507 case MULT:
8508 {
8509 /* If a pseudo-reg is optimized away, it is possible for it to
8510 be replaced with a MEM containing a multiply. */
8511 dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
8512 can_use_fbreg);
8513 dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
8514 can_use_fbreg);
8515
8516 if (op0 == 0 || op1 == 0)
8517 break;
8518
8519 mem_loc_result = op0;
8520 add_loc_descr (&mem_loc_result, op1);
8521 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
8522 break;
8523 }
8524
8525 case CONST_INT:
8526 mem_loc_result = int_loc_descriptor (INTVAL (rtl));
8527 break;
8528
8529 case ADDRESSOF:
8530 /* If this is a MEM, return its address. Otherwise, we can't
8531 represent this. */
8532 if (GET_CODE (XEXP (rtl, 0)) == MEM)
8533 return mem_loc_descriptor (XEXP (XEXP (rtl, 0), 0), mode,
8534 can_use_fbreg);
8535 else
8536 return 0;
8537
8538 default:
8539 abort ();
8540 }
8541
8542 return mem_loc_result;
8543 }
8544
8545 /* Return a descriptor that describes the concatenation of two locations.
8546 This is typically a complex variable. */
8547
8548 static dw_loc_descr_ref
8549 concat_loc_descriptor (rtx x0, rtx x1)
8550 {
8551 dw_loc_descr_ref cc_loc_result = NULL;
8552 dw_loc_descr_ref x0_ref = loc_descriptor (x0, true);
8553 dw_loc_descr_ref x1_ref = loc_descriptor (x1, true);
8554
8555 if (x0_ref == 0 || x1_ref == 0)
8556 return 0;
8557
8558 cc_loc_result = x0_ref;
8559 add_loc_descr (&cc_loc_result,
8560 new_loc_descr (DW_OP_piece,
8561 GET_MODE_SIZE (GET_MODE (x0)), 0));
8562
8563 add_loc_descr (&cc_loc_result, x1_ref);
8564 add_loc_descr (&cc_loc_result,
8565 new_loc_descr (DW_OP_piece,
8566 GET_MODE_SIZE (GET_MODE (x1)), 0));
8567
8568 return cc_loc_result;
8569 }
8570
8571 /* Output a proper Dwarf location descriptor for a variable or parameter
8572 which is either allocated in a register or in a memory location. For a
8573 register, we just generate an OP_REG and the register number. For a
8574 memory location we provide a Dwarf postfix expression describing how to
8575 generate the (dynamic) address of the object onto the address stack.
8576
8577 If we don't know how to describe it, return 0. */
8578
8579 static dw_loc_descr_ref
8580 loc_descriptor (rtx rtl, bool can_use_fbreg)
8581 {
8582 dw_loc_descr_ref loc_result = NULL;
8583
8584 switch (GET_CODE (rtl))
8585 {
8586 case SUBREG:
8587 /* The case of a subreg may arise when we have a local (register)
8588 variable or a formal (register) parameter which doesn't quite fill
8589 up an entire register. For now, just assume that it is
8590 legitimate to make the Dwarf info refer to the whole register which
8591 contains the given subreg. */
8592 rtl = SUBREG_REG (rtl);
8593
8594 /* ... fall through ... */
8595
8596 case REG:
8597 loc_result = reg_loc_descriptor (rtl);
8598 break;
8599
8600 case MEM:
8601 loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
8602 can_use_fbreg);
8603 break;
8604
8605 case CONCAT:
8606 loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1));
8607 break;
8608
8609 case VAR_LOCATION:
8610 /* Single part. */
8611 if (GET_CODE (XEXP (rtl, 1)) != PARALLEL)
8612 {
8613 loc_result = loc_descriptor (XEXP (XEXP (rtl, 1), 0), can_use_fbreg);
8614 }
8615 /* Multiple parts. */
8616 else
8617 {
8618 rtvec par_elems = XVEC (XEXP (rtl, 1), 0);
8619 int num_elem = GET_NUM_ELEM (par_elems);
8620 enum machine_mode mode;
8621 int i;
8622
8623 /* Create the first one, so we have something to add to. */
8624 loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
8625 can_use_fbreg);
8626 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
8627 add_loc_descr (&loc_result,
8628 new_loc_descr (DW_OP_piece, GET_MODE_SIZE (mode), 0));
8629 for (i = 1; i < num_elem; i++)
8630 {
8631 dw_loc_descr_ref temp;
8632
8633 temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
8634 can_use_fbreg);
8635 add_loc_descr (&loc_result, temp);
8636 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
8637 add_loc_descr (&loc_result,
8638 new_loc_descr (DW_OP_piece,
8639 GET_MODE_SIZE (mode), 0));
8640 }
8641 }
8642 break;
8643
8644 default:
8645 abort ();
8646 }
8647
8648 return loc_result;
8649 }
8650
8651 /* Similar, but generate the descriptor from trees instead of rtl. This comes
8652 up particularly with variable length arrays. If ADDRESSP is nonzero, we are
8653 looking for an address. Otherwise, we return a value. If we can't make a
8654 descriptor, return 0. */
8655
8656 static dw_loc_descr_ref
8657 loc_descriptor_from_tree (tree loc, int addressp)
8658 {
8659 dw_loc_descr_ref ret, ret1;
8660 int indirect_p = 0;
8661 int unsignedp = TREE_UNSIGNED (TREE_TYPE (loc));
8662 enum dwarf_location_atom op;
8663
8664 /* ??? Most of the time we do not take proper care for sign/zero
8665 extending the values properly. Hopefully this won't be a real
8666 problem... */
8667
8668 switch (TREE_CODE (loc))
8669 {
8670 case ERROR_MARK:
8671 return 0;
8672
8673 case WITH_RECORD_EXPR:
8674 case PLACEHOLDER_EXPR:
8675 /* This case involves extracting fields from an object to determine the
8676 position of other fields. We don't try to encode this here. The
8677 only user of this is Ada, which encodes the needed information using
8678 the names of types. */
8679 return 0;
8680
8681 case CALL_EXPR:
8682 return 0;
8683
8684 case ADDR_EXPR:
8685 /* We can support this only if we can look through conversions and
8686 find an INDIRECT_EXPR. */
8687 for (loc = TREE_OPERAND (loc, 0);
8688 TREE_CODE (loc) == CONVERT_EXPR || TREE_CODE (loc) == NOP_EXPR
8689 || TREE_CODE (loc) == NON_LVALUE_EXPR
8690 || TREE_CODE (loc) == VIEW_CONVERT_EXPR
8691 || TREE_CODE (loc) == SAVE_EXPR;
8692 loc = TREE_OPERAND (loc, 0))
8693 ;
8694
8695 return (TREE_CODE (loc) == INDIRECT_REF
8696 ? loc_descriptor_from_tree (TREE_OPERAND (loc, 0), addressp)
8697 : 0);
8698
8699 case VAR_DECL:
8700 if (DECL_THREAD_LOCAL (loc))
8701 {
8702 rtx rtl;
8703
8704 #ifndef ASM_OUTPUT_DWARF_DTPREL
8705 /* If this is not defined, we have no way to emit the data. */
8706 return 0;
8707 #endif
8708
8709 /* The way DW_OP_GNU_push_tls_address is specified, we can only
8710 look up addresses of objects in the current module. */
8711 if (DECL_EXTERNAL (loc))
8712 return 0;
8713
8714 rtl = rtl_for_decl_location (loc);
8715 if (rtl == NULL_RTX)
8716 return 0;
8717
8718 if (GET_CODE (rtl) != MEM)
8719 return 0;
8720 rtl = XEXP (rtl, 0);
8721 if (! CONSTANT_P (rtl))
8722 return 0;
8723
8724 ret = new_loc_descr (INTERNAL_DW_OP_tls_addr, 0, 0);
8725 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
8726 ret->dw_loc_oprnd1.v.val_addr = rtl;
8727
8728 ret1 = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
8729 add_loc_descr (&ret, ret1);
8730
8731 indirect_p = 1;
8732 break;
8733 }
8734 /* Fall through. */
8735
8736 case PARM_DECL:
8737 {
8738 rtx rtl = rtl_for_decl_location (loc);
8739
8740 if (rtl == NULL_RTX)
8741 return 0;
8742 else if (CONSTANT_P (rtl))
8743 {
8744 ret = new_loc_descr (DW_OP_addr, 0, 0);
8745 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
8746 ret->dw_loc_oprnd1.v.val_addr = rtl;
8747 indirect_p = 1;
8748 }
8749 else
8750 {
8751 enum machine_mode mode = GET_MODE (rtl);
8752
8753 if (GET_CODE (rtl) == MEM)
8754 {
8755 indirect_p = 1;
8756 rtl = XEXP (rtl, 0);
8757 }
8758
8759 ret = mem_loc_descriptor (rtl, mode, true);
8760 }
8761 }
8762 break;
8763
8764 case INDIRECT_REF:
8765 ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0);
8766 indirect_p = 1;
8767 break;
8768
8769 case COMPOUND_EXPR:
8770 return loc_descriptor_from_tree (TREE_OPERAND (loc, 1), addressp);
8771
8772 case NOP_EXPR:
8773 case CONVERT_EXPR:
8774 case NON_LVALUE_EXPR:
8775 case VIEW_CONVERT_EXPR:
8776 case SAVE_EXPR:
8777 case MODIFY_EXPR:
8778 return loc_descriptor_from_tree (TREE_OPERAND (loc, 0), addressp);
8779
8780 case COMPONENT_REF:
8781 case BIT_FIELD_REF:
8782 case ARRAY_REF:
8783 case ARRAY_RANGE_REF:
8784 {
8785 tree obj, offset;
8786 HOST_WIDE_INT bitsize, bitpos, bytepos;
8787 enum machine_mode mode;
8788 int volatilep;
8789
8790 obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
8791 &unsignedp, &volatilep);
8792
8793 if (obj == loc)
8794 return 0;
8795
8796 ret = loc_descriptor_from_tree (obj, 1);
8797 if (ret == 0
8798 || bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
8799 return 0;
8800
8801 if (offset != NULL_TREE)
8802 {
8803 /* Variable offset. */
8804 add_loc_descr (&ret, loc_descriptor_from_tree (offset, 0));
8805 add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
8806 }
8807
8808 if (!addressp)
8809 indirect_p = 1;
8810
8811 bytepos = bitpos / BITS_PER_UNIT;
8812 if (bytepos > 0)
8813 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
8814 else if (bytepos < 0)
8815 {
8816 add_loc_descr (&ret, int_loc_descriptor (bytepos));
8817 add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
8818 }
8819 break;
8820 }
8821
8822 case INTEGER_CST:
8823 if (host_integerp (loc, 0))
8824 ret = int_loc_descriptor (tree_low_cst (loc, 0));
8825 else
8826 return 0;
8827 break;
8828
8829 case CONSTRUCTOR:
8830 {
8831 /* Get an RTL for this, if something has been emitted. */
8832 rtx rtl = lookup_constant_def (loc);
8833 enum machine_mode mode;
8834
8835 if (GET_CODE (rtl) != MEM)
8836 return 0;
8837 mode = GET_MODE (rtl);
8838 rtl = XEXP (rtl, 0);
8839
8840 rtl = (*targetm.delegitimize_address) (rtl);
8841
8842 indirect_p = 1;
8843 ret = mem_loc_descriptor (rtl, mode, true);
8844 break;
8845 }
8846
8847 case TRUTH_AND_EXPR:
8848 case TRUTH_ANDIF_EXPR:
8849 case BIT_AND_EXPR:
8850 op = DW_OP_and;
8851 goto do_binop;
8852
8853 case TRUTH_XOR_EXPR:
8854 case BIT_XOR_EXPR:
8855 op = DW_OP_xor;
8856 goto do_binop;
8857
8858 case TRUTH_OR_EXPR:
8859 case TRUTH_ORIF_EXPR:
8860 case BIT_IOR_EXPR:
8861 op = DW_OP_or;
8862 goto do_binop;
8863
8864 case FLOOR_DIV_EXPR:
8865 case CEIL_DIV_EXPR:
8866 case ROUND_DIV_EXPR:
8867 case TRUNC_DIV_EXPR:
8868 op = DW_OP_div;
8869 goto do_binop;
8870
8871 case MINUS_EXPR:
8872 op = DW_OP_minus;
8873 goto do_binop;
8874
8875 case FLOOR_MOD_EXPR:
8876 case CEIL_MOD_EXPR:
8877 case ROUND_MOD_EXPR:
8878 case TRUNC_MOD_EXPR:
8879 op = DW_OP_mod;
8880 goto do_binop;
8881
8882 case MULT_EXPR:
8883 op = DW_OP_mul;
8884 goto do_binop;
8885
8886 case LSHIFT_EXPR:
8887 op = DW_OP_shl;
8888 goto do_binop;
8889
8890 case RSHIFT_EXPR:
8891 op = (unsignedp ? DW_OP_shr : DW_OP_shra);
8892 goto do_binop;
8893
8894 case PLUS_EXPR:
8895 if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
8896 && host_integerp (TREE_OPERAND (loc, 1), 0))
8897 {
8898 ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0);
8899 if (ret == 0)
8900 return 0;
8901
8902 add_loc_descr (&ret,
8903 new_loc_descr (DW_OP_plus_uconst,
8904 tree_low_cst (TREE_OPERAND (loc, 1),
8905 0),
8906 0));
8907 break;
8908 }
8909
8910 op = DW_OP_plus;
8911 goto do_binop;
8912
8913 case LE_EXPR:
8914 if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
8915 return 0;
8916
8917 op = DW_OP_le;
8918 goto do_binop;
8919
8920 case GE_EXPR:
8921 if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
8922 return 0;
8923
8924 op = DW_OP_ge;
8925 goto do_binop;
8926
8927 case LT_EXPR:
8928 if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
8929 return 0;
8930
8931 op = DW_OP_lt;
8932 goto do_binop;
8933
8934 case GT_EXPR:
8935 if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
8936 return 0;
8937
8938 op = DW_OP_gt;
8939 goto do_binop;
8940
8941 case EQ_EXPR:
8942 op = DW_OP_eq;
8943 goto do_binop;
8944
8945 case NE_EXPR:
8946 op = DW_OP_ne;
8947 goto do_binop;
8948
8949 do_binop:
8950 ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0);
8951 ret1 = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
8952 if (ret == 0 || ret1 == 0)
8953 return 0;
8954
8955 add_loc_descr (&ret, ret1);
8956 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
8957 break;
8958
8959 case TRUTH_NOT_EXPR:
8960 case BIT_NOT_EXPR:
8961 op = DW_OP_not;
8962 goto do_unop;
8963
8964 case ABS_EXPR:
8965 op = DW_OP_abs;
8966 goto do_unop;
8967
8968 case NEGATE_EXPR:
8969 op = DW_OP_neg;
8970 goto do_unop;
8971
8972 do_unop:
8973 ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0);
8974 if (ret == 0)
8975 return 0;
8976
8977 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
8978 break;
8979
8980 case MAX_EXPR:
8981 loc = build (COND_EXPR, TREE_TYPE (loc),
8982 build (LT_EXPR, integer_type_node,
8983 TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
8984 TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
8985
8986 /* ... fall through ... */
8987
8988 case COND_EXPR:
8989 {
8990 dw_loc_descr_ref lhs
8991 = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
8992 dw_loc_descr_ref rhs
8993 = loc_descriptor_from_tree (TREE_OPERAND (loc, 2), 0);
8994 dw_loc_descr_ref bra_node, jump_node, tmp;
8995
8996 ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0);
8997 if (ret == 0 || lhs == 0 || rhs == 0)
8998 return 0;
8999
9000 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
9001 add_loc_descr (&ret, bra_node);
9002
9003 add_loc_descr (&ret, rhs);
9004 jump_node = new_loc_descr (DW_OP_skip, 0, 0);
9005 add_loc_descr (&ret, jump_node);
9006
9007 add_loc_descr (&ret, lhs);
9008 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9009 bra_node->dw_loc_oprnd1.v.val_loc = lhs;
9010
9011 /* ??? Need a node to point the skip at. Use a nop. */
9012 tmp = new_loc_descr (DW_OP_nop, 0, 0);
9013 add_loc_descr (&ret, tmp);
9014 jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9015 jump_node->dw_loc_oprnd1.v.val_loc = tmp;
9016 }
9017 break;
9018
9019 case EXPR_WITH_FILE_LOCATION:
9020 return loc_descriptor_from_tree (EXPR_WFL_NODE (loc), addressp);
9021
9022 default:
9023 /* Leave front-end specific codes as simply unknown. This comes
9024 up, for instance, with the C STMT_EXPR. */
9025 if ((unsigned int) TREE_CODE (loc)
9026 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
9027 return 0;
9028
9029 /* Otherwise this is a generic code; we should just lists all of
9030 these explicitly. Aborting means we forgot one. */
9031 abort ();
9032 }
9033
9034 /* Show if we can't fill the request for an address. */
9035 if (addressp && indirect_p == 0)
9036 return 0;
9037
9038 /* If we've got an address and don't want one, dereference. */
9039 if (!addressp && indirect_p > 0)
9040 {
9041 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
9042
9043 if (size > DWARF2_ADDR_SIZE || size == -1)
9044 return 0;
9045 else if (size == DWARF2_ADDR_SIZE)
9046 op = DW_OP_deref;
9047 else
9048 op = DW_OP_deref_size;
9049
9050 add_loc_descr (&ret, new_loc_descr (op, size, 0));
9051 }
9052
9053 return ret;
9054 }
9055
9056 /* Given a value, round it up to the lowest multiple of `boundary'
9057 which is not less than the value itself. */
9058
9059 static inline HOST_WIDE_INT
9060 ceiling (HOST_WIDE_INT value, unsigned int boundary)
9061 {
9062 return (((value + boundary - 1) / boundary) * boundary);
9063 }
9064
9065 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
9066 pointer to the declared type for the relevant field variable, or return
9067 `integer_type_node' if the given node turns out to be an
9068 ERROR_MARK node. */
9069
9070 static inline tree
9071 field_type (tree decl)
9072 {
9073 tree type;
9074
9075 if (TREE_CODE (decl) == ERROR_MARK)
9076 return integer_type_node;
9077
9078 type = DECL_BIT_FIELD_TYPE (decl);
9079 if (type == NULL_TREE)
9080 type = TREE_TYPE (decl);
9081
9082 return type;
9083 }
9084
9085 /* Given a pointer to a tree node, return the alignment in bits for
9086 it, or else return BITS_PER_WORD if the node actually turns out to
9087 be an ERROR_MARK node. */
9088
9089 static inline unsigned
9090 simple_type_align_in_bits (tree type)
9091 {
9092 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
9093 }
9094
9095 static inline unsigned
9096 simple_decl_align_in_bits (tree decl)
9097 {
9098 return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
9099 }
9100
9101 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
9102 lowest addressed byte of the "containing object" for the given FIELD_DECL,
9103 or return 0 if we are unable to determine what that offset is, either
9104 because the argument turns out to be a pointer to an ERROR_MARK node, or
9105 because the offset is actually variable. (We can't handle the latter case
9106 just yet). */
9107
9108 static HOST_WIDE_INT
9109 field_byte_offset (tree decl)
9110 {
9111 unsigned int type_align_in_bits;
9112 unsigned int decl_align_in_bits;
9113 unsigned HOST_WIDE_INT type_size_in_bits;
9114 HOST_WIDE_INT object_offset_in_bits;
9115 tree type;
9116 tree field_size_tree;
9117 HOST_WIDE_INT bitpos_int;
9118 HOST_WIDE_INT deepest_bitpos;
9119 unsigned HOST_WIDE_INT field_size_in_bits;
9120
9121 if (TREE_CODE (decl) == ERROR_MARK)
9122 return 0;
9123 else if (TREE_CODE (decl) != FIELD_DECL)
9124 abort ();
9125
9126 type = field_type (decl);
9127 field_size_tree = DECL_SIZE (decl);
9128
9129 /* The size could be unspecified if there was an error, or for
9130 a flexible array member. */
9131 if (! field_size_tree)
9132 field_size_tree = bitsize_zero_node;
9133
9134 /* We cannot yet cope with fields whose positions are variable, so
9135 for now, when we see such things, we simply return 0. Someday, we may
9136 be able to handle such cases, but it will be damn difficult. */
9137 if (! host_integerp (bit_position (decl), 0))
9138 return 0;
9139
9140 bitpos_int = int_bit_position (decl);
9141
9142 /* If we don't know the size of the field, pretend it's a full word. */
9143 if (host_integerp (field_size_tree, 1))
9144 field_size_in_bits = tree_low_cst (field_size_tree, 1);
9145 else
9146 field_size_in_bits = BITS_PER_WORD;
9147
9148 type_size_in_bits = simple_type_size_in_bits (type);
9149 type_align_in_bits = simple_type_align_in_bits (type);
9150 decl_align_in_bits = simple_decl_align_in_bits (decl);
9151
9152 /* The GCC front-end doesn't make any attempt to keep track of the starting
9153 bit offset (relative to the start of the containing structure type) of the
9154 hypothetical "containing object" for a bit-field. Thus, when computing
9155 the byte offset value for the start of the "containing object" of a
9156 bit-field, we must deduce this information on our own. This can be rather
9157 tricky to do in some cases. For example, handling the following structure
9158 type definition when compiling for an i386/i486 target (which only aligns
9159 long long's to 32-bit boundaries) can be very tricky:
9160
9161 struct S { int field1; long long field2:31; };
9162
9163 Fortunately, there is a simple rule-of-thumb which can be used in such
9164 cases. When compiling for an i386/i486, GCC will allocate 8 bytes for the
9165 structure shown above. It decides to do this based upon one simple rule
9166 for bit-field allocation. GCC allocates each "containing object" for each
9167 bit-field at the first (i.e. lowest addressed) legitimate alignment
9168 boundary (based upon the required minimum alignment for the declared type
9169 of the field) which it can possibly use, subject to the condition that
9170 there is still enough available space remaining in the containing object
9171 (when allocated at the selected point) to fully accommodate all of the
9172 bits of the bit-field itself.
9173
9174 This simple rule makes it obvious why GCC allocates 8 bytes for each
9175 object of the structure type shown above. When looking for a place to
9176 allocate the "containing object" for `field2', the compiler simply tries
9177 to allocate a 64-bit "containing object" at each successive 32-bit
9178 boundary (starting at zero) until it finds a place to allocate that 64-
9179 bit field such that at least 31 contiguous (and previously unallocated)
9180 bits remain within that selected 64 bit field. (As it turns out, for the
9181 example above, the compiler finds it is OK to allocate the "containing
9182 object" 64-bit field at bit-offset zero within the structure type.)
9183
9184 Here we attempt to work backwards from the limited set of facts we're
9185 given, and we try to deduce from those facts, where GCC must have believed
9186 that the containing object started (within the structure type). The value
9187 we deduce is then used (by the callers of this routine) to generate
9188 DW_AT_location and DW_AT_bit_offset attributes for fields (both bit-fields
9189 and, in the case of DW_AT_location, regular fields as well). */
9190
9191 /* Figure out the bit-distance from the start of the structure to the
9192 "deepest" bit of the bit-field. */
9193 deepest_bitpos = bitpos_int + field_size_in_bits;
9194
9195 /* This is the tricky part. Use some fancy footwork to deduce where the
9196 lowest addressed bit of the containing object must be. */
9197 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
9198
9199 /* Round up to type_align by default. This works best for bitfields. */
9200 object_offset_in_bits += type_align_in_bits - 1;
9201 object_offset_in_bits /= type_align_in_bits;
9202 object_offset_in_bits *= type_align_in_bits;
9203
9204 if (object_offset_in_bits > bitpos_int)
9205 {
9206 /* Sigh, the decl must be packed. */
9207 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
9208
9209 /* Round up to decl_align instead. */
9210 object_offset_in_bits += decl_align_in_bits - 1;
9211 object_offset_in_bits /= decl_align_in_bits;
9212 object_offset_in_bits *= decl_align_in_bits;
9213 }
9214
9215 return object_offset_in_bits / BITS_PER_UNIT;
9216 }
9217 \f
9218 /* The following routines define various Dwarf attributes and any data
9219 associated with them. */
9220
9221 /* Add a location description attribute value to a DIE.
9222
9223 This emits location attributes suitable for whole variables and
9224 whole parameters. Note that the location attributes for struct fields are
9225 generated by the routine `data_member_location_attribute' below. */
9226
9227 static inline void
9228 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
9229 dw_loc_descr_ref descr)
9230 {
9231 if (descr != 0)
9232 add_AT_loc (die, attr_kind, descr);
9233 }
9234
9235 /* Attach the specialized form of location attribute used for data members of
9236 struct and union types. In the special case of a FIELD_DECL node which
9237 represents a bit-field, the "offset" part of this special location
9238 descriptor must indicate the distance in bytes from the lowest-addressed
9239 byte of the containing struct or union type to the lowest-addressed byte of
9240 the "containing object" for the bit-field. (See the `field_byte_offset'
9241 function above).
9242
9243 For any given bit-field, the "containing object" is a hypothetical object
9244 (of some integral or enum type) within which the given bit-field lives. The
9245 type of this hypothetical "containing object" is always the same as the
9246 declared type of the individual bit-field itself (for GCC anyway... the
9247 DWARF spec doesn't actually mandate this). Note that it is the size (in
9248 bytes) of the hypothetical "containing object" which will be given in the
9249 DW_AT_byte_size attribute for this bit-field. (See the
9250 `byte_size_attribute' function below.) It is also used when calculating the
9251 value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute'
9252 function below.) */
9253
9254 static void
9255 add_data_member_location_attribute (dw_die_ref die, tree decl)
9256 {
9257 HOST_WIDE_INT offset;
9258 dw_loc_descr_ref loc_descr = 0;
9259
9260 if (TREE_CODE (decl) == TREE_VEC)
9261 {
9262 /* We're working on the TAG_inheritance for a base class. */
9263 if (TREE_VIA_VIRTUAL (decl) && is_cxx ())
9264 {
9265 /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
9266 aren't at a fixed offset from all (sub)objects of the same
9267 type. We need to extract the appropriate offset from our
9268 vtable. The following dwarf expression means
9269
9270 BaseAddr = ObAddr + *((*ObAddr) - Offset)
9271
9272 This is specific to the V3 ABI, of course. */
9273
9274 dw_loc_descr_ref tmp;
9275
9276 /* Make a copy of the object address. */
9277 tmp = new_loc_descr (DW_OP_dup, 0, 0);
9278 add_loc_descr (&loc_descr, tmp);
9279
9280 /* Extract the vtable address. */
9281 tmp = new_loc_descr (DW_OP_deref, 0, 0);
9282 add_loc_descr (&loc_descr, tmp);
9283
9284 /* Calculate the address of the offset. */
9285 offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
9286 if (offset >= 0)
9287 abort ();
9288
9289 tmp = int_loc_descriptor (-offset);
9290 add_loc_descr (&loc_descr, tmp);
9291 tmp = new_loc_descr (DW_OP_minus, 0, 0);
9292 add_loc_descr (&loc_descr, tmp);
9293
9294 /* Extract the offset. */
9295 tmp = new_loc_descr (DW_OP_deref, 0, 0);
9296 add_loc_descr (&loc_descr, tmp);
9297
9298 /* Add it to the object address. */
9299 tmp = new_loc_descr (DW_OP_plus, 0, 0);
9300 add_loc_descr (&loc_descr, tmp);
9301 }
9302 else
9303 offset = tree_low_cst (BINFO_OFFSET (decl), 0);
9304 }
9305 else
9306 offset = field_byte_offset (decl);
9307
9308 if (! loc_descr)
9309 {
9310 enum dwarf_location_atom op;
9311
9312 /* The DWARF2 standard says that we should assume that the structure
9313 address is already on the stack, so we can specify a structure field
9314 address by using DW_OP_plus_uconst. */
9315
9316 #ifdef MIPS_DEBUGGING_INFO
9317 /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
9318 operator correctly. It works only if we leave the offset on the
9319 stack. */
9320 op = DW_OP_constu;
9321 #else
9322 op = DW_OP_plus_uconst;
9323 #endif
9324
9325 loc_descr = new_loc_descr (op, offset, 0);
9326 }
9327
9328 add_AT_loc (die, DW_AT_data_member_location, loc_descr);
9329 }
9330
9331 /* Writes integer values to dw_vec_const array. */
9332
9333 static void
9334 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
9335 {
9336 while (size != 0)
9337 {
9338 *dest++ = val & 0xff;
9339 val >>= 8;
9340 --size;
9341 }
9342 }
9343
9344 /* Reads integers from dw_vec_const array. Inverse of insert_int. */
9345
9346 static HOST_WIDE_INT
9347 extract_int (const unsigned char *src, unsigned int size)
9348 {
9349 HOST_WIDE_INT val = 0;
9350
9351 src += size;
9352 while (size != 0)
9353 {
9354 val <<= 8;
9355 val |= *--src & 0xff;
9356 --size;
9357 }
9358 return val;
9359 }
9360
9361 /* Writes floating point values to dw_vec_const array. */
9362
9363 static void
9364 insert_float (rtx rtl, unsigned char *array)
9365 {
9366 REAL_VALUE_TYPE rv;
9367 long val[4];
9368 int i;
9369
9370 REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
9371 real_to_target (val, &rv, GET_MODE (rtl));
9372
9373 /* real_to_target puts 32-bit pieces in each long. Pack them. */
9374 for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
9375 {
9376 insert_int (val[i], 4, array);
9377 array += 4;
9378 }
9379 }
9380
9381 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
9382 does not have a "location" either in memory or in a register. These
9383 things can arise in GNU C when a constant is passed as an actual parameter
9384 to an inlined function. They can also arise in C++ where declared
9385 constants do not necessarily get memory "homes". */
9386
9387 static void
9388 add_const_value_attribute (dw_die_ref die, rtx rtl)
9389 {
9390 switch (GET_CODE (rtl))
9391 {
9392 case CONST_INT:
9393 {
9394 HOST_WIDE_INT val = INTVAL (rtl);
9395
9396 if (val < 0)
9397 add_AT_int (die, DW_AT_const_value, val);
9398 else
9399 add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
9400 }
9401 break;
9402
9403 case CONST_DOUBLE:
9404 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
9405 floating-point constant. A CONST_DOUBLE is used whenever the
9406 constant requires more than one word in order to be adequately
9407 represented. We output CONST_DOUBLEs as blocks. */
9408 {
9409 enum machine_mode mode = GET_MODE (rtl);
9410
9411 if (GET_MODE_CLASS (mode) == MODE_FLOAT)
9412 {
9413 unsigned int length = GET_MODE_SIZE (mode);
9414 unsigned char *array = ggc_alloc (length);
9415
9416 insert_float (rtl, array);
9417 add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
9418 }
9419 else
9420 {
9421 /* ??? We really should be using HOST_WIDE_INT throughout. */
9422 if (HOST_BITS_PER_LONG != HOST_BITS_PER_WIDE_INT)
9423 abort ();
9424
9425 add_AT_long_long (die, DW_AT_const_value,
9426 CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
9427 }
9428 }
9429 break;
9430
9431 case CONST_VECTOR:
9432 {
9433 enum machine_mode mode = GET_MODE (rtl);
9434 unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
9435 unsigned int length = CONST_VECTOR_NUNITS (rtl);
9436 unsigned char *array = ggc_alloc (length * elt_size);
9437 unsigned int i;
9438 unsigned char *p;
9439
9440 if (GET_MODE_CLASS (mode) == MODE_VECTOR_INT)
9441 {
9442 for (i = 0, p = array; i < length; i++, p += elt_size)
9443 {
9444 rtx elt = CONST_VECTOR_ELT (rtl, i);
9445 HOST_WIDE_INT lo, hi;
9446 if (GET_CODE (elt) == CONST_INT)
9447 {
9448 lo = INTVAL (elt);
9449 hi = -(lo < 0);
9450 }
9451 else if (GET_CODE (elt) == CONST_DOUBLE)
9452 {
9453 lo = CONST_DOUBLE_LOW (elt);
9454 hi = CONST_DOUBLE_HIGH (elt);
9455 }
9456 else
9457 abort ();
9458
9459 if (elt_size <= sizeof (HOST_WIDE_INT))
9460 insert_int (lo, elt_size, p);
9461 else if (elt_size == 2 * sizeof (HOST_WIDE_INT))
9462 {
9463 unsigned char *p0 = p;
9464 unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
9465
9466 if (WORDS_BIG_ENDIAN)
9467 {
9468 p0 = p1;
9469 p1 = p;
9470 }
9471 insert_int (lo, sizeof (HOST_WIDE_INT), p0);
9472 insert_int (hi, sizeof (HOST_WIDE_INT), p1);
9473 }
9474 else
9475 abort ();
9476 }
9477 }
9478 else if (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
9479 {
9480 for (i = 0, p = array; i < length; i++, p += elt_size)
9481 {
9482 rtx elt = CONST_VECTOR_ELT (rtl, i);
9483 insert_float (elt, p);
9484 }
9485 }
9486 else
9487 abort ();
9488
9489 add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
9490 }
9491 break;
9492
9493 case CONST_STRING:
9494 add_AT_string (die, DW_AT_const_value, XSTR (rtl, 0));
9495 break;
9496
9497 case SYMBOL_REF:
9498 case LABEL_REF:
9499 case CONST:
9500 add_AT_addr (die, DW_AT_const_value, rtl);
9501 VARRAY_PUSH_RTX (used_rtx_varray, rtl);
9502 break;
9503
9504 case PLUS:
9505 /* In cases where an inlined instance of an inline function is passed
9506 the address of an `auto' variable (which is local to the caller) we
9507 can get a situation where the DECL_RTL of the artificial local
9508 variable (for the inlining) which acts as a stand-in for the
9509 corresponding formal parameter (of the inline function) will look
9510 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
9511 exactly a compile-time constant expression, but it isn't the address
9512 of the (artificial) local variable either. Rather, it represents the
9513 *value* which the artificial local variable always has during its
9514 lifetime. We currently have no way to represent such quasi-constant
9515 values in Dwarf, so for now we just punt and generate nothing. */
9516 break;
9517
9518 default:
9519 /* No other kinds of rtx should be possible here. */
9520 abort ();
9521 }
9522
9523 }
9524
9525 static rtx
9526 rtl_for_decl_location (tree decl)
9527 {
9528 rtx rtl;
9529
9530 /* Here we have to decide where we are going to say the parameter "lives"
9531 (as far as the debugger is concerned). We only have a couple of
9532 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
9533
9534 DECL_RTL normally indicates where the parameter lives during most of the
9535 activation of the function. If optimization is enabled however, this
9536 could be either NULL or else a pseudo-reg. Both of those cases indicate
9537 that the parameter doesn't really live anywhere (as far as the code
9538 generation parts of GCC are concerned) during most of the function's
9539 activation. That will happen (for example) if the parameter is never
9540 referenced within the function.
9541
9542 We could just generate a location descriptor here for all non-NULL
9543 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
9544 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
9545 where DECL_RTL is NULL or is a pseudo-reg.
9546
9547 Note however that we can only get away with using DECL_INCOMING_RTL as
9548 a backup substitute for DECL_RTL in certain limited cases. In cases
9549 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
9550 we can be sure that the parameter was passed using the same type as it is
9551 declared to have within the function, and that its DECL_INCOMING_RTL
9552 points us to a place where a value of that type is passed.
9553
9554 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
9555 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
9556 because in these cases DECL_INCOMING_RTL points us to a value of some
9557 type which is *different* from the type of the parameter itself. Thus,
9558 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
9559 such cases, the debugger would end up (for example) trying to fetch a
9560 `float' from a place which actually contains the first part of a
9561 `double'. That would lead to really incorrect and confusing
9562 output at debug-time.
9563
9564 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
9565 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
9566 are a couple of exceptions however. On little-endian machines we can
9567 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
9568 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
9569 an integral type that is smaller than TREE_TYPE (decl). These cases arise
9570 when (on a little-endian machine) a non-prototyped function has a
9571 parameter declared to be of type `short' or `char'. In such cases,
9572 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
9573 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
9574 passed `int' value. If the debugger then uses that address to fetch
9575 a `short' or a `char' (on a little-endian machine) the result will be
9576 the correct data, so we allow for such exceptional cases below.
9577
9578 Note that our goal here is to describe the place where the given formal
9579 parameter lives during most of the function's activation (i.e. between the
9580 end of the prologue and the start of the epilogue). We'll do that as best
9581 as we can. Note however that if the given formal parameter is modified
9582 sometime during the execution of the function, then a stack backtrace (at
9583 debug-time) will show the function as having been called with the *new*
9584 value rather than the value which was originally passed in. This happens
9585 rarely enough that it is not a major problem, but it *is* a problem, and
9586 I'd like to fix it.
9587
9588 A future version of dwarf2out.c may generate two additional attributes for
9589 any given DW_TAG_formal_parameter DIE which will describe the "passed
9590 type" and the "passed location" for the given formal parameter in addition
9591 to the attributes we now generate to indicate the "declared type" and the
9592 "active location" for each parameter. This additional set of attributes
9593 could be used by debuggers for stack backtraces. Separately, note that
9594 sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
9595 This happens (for example) for inlined-instances of inline function formal
9596 parameters which are never referenced. This really shouldn't be
9597 happening. All PARM_DECL nodes should get valid non-NULL
9598 DECL_INCOMING_RTL values, but integrate.c doesn't currently generate these
9599 values for inlined instances of inline function parameters, so when we see
9600 such cases, we are just out-of-luck for the time being (until integrate.c
9601 gets fixed). */
9602
9603 /* Use DECL_RTL as the "location" unless we find something better. */
9604 rtl = DECL_RTL_IF_SET (decl);
9605
9606 /* When generating abstract instances, ignore everything except
9607 constants, symbols living in memory, and symbols living in
9608 fixed registers. */
9609 if (! reload_completed)
9610 {
9611 if (rtl
9612 && (CONSTANT_P (rtl)
9613 || (GET_CODE (rtl) == MEM
9614 && CONSTANT_P (XEXP (rtl, 0)))
9615 || (GET_CODE (rtl) == REG
9616 && TREE_CODE (decl) == VAR_DECL
9617 && TREE_STATIC (decl))))
9618 {
9619 rtl = (*targetm.delegitimize_address) (rtl);
9620 return rtl;
9621 }
9622 rtl = NULL_RTX;
9623 }
9624 else if (TREE_CODE (decl) == PARM_DECL)
9625 {
9626 if (rtl == NULL_RTX || is_pseudo_reg (rtl))
9627 {
9628 tree declared_type = type_main_variant (TREE_TYPE (decl));
9629 tree passed_type = type_main_variant (DECL_ARG_TYPE (decl));
9630
9631 /* This decl represents a formal parameter which was optimized out.
9632 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
9633 all cases where (rtl == NULL_RTX) just below. */
9634 if (declared_type == passed_type)
9635 rtl = DECL_INCOMING_RTL (decl);
9636 else if (! BYTES_BIG_ENDIAN
9637 && TREE_CODE (declared_type) == INTEGER_TYPE
9638 && (GET_MODE_SIZE (TYPE_MODE (declared_type))
9639 <= GET_MODE_SIZE (TYPE_MODE (passed_type))))
9640 rtl = DECL_INCOMING_RTL (decl);
9641 }
9642
9643 /* If the parm was passed in registers, but lives on the stack, then
9644 make a big endian correction if the mode of the type of the
9645 parameter is not the same as the mode of the rtl. */
9646 /* ??? This is the same series of checks that are made in dbxout.c before
9647 we reach the big endian correction code there. It isn't clear if all
9648 of these checks are necessary here, but keeping them all is the safe
9649 thing to do. */
9650 else if (GET_CODE (rtl) == MEM
9651 && XEXP (rtl, 0) != const0_rtx
9652 && ! CONSTANT_P (XEXP (rtl, 0))
9653 /* Not passed in memory. */
9654 && GET_CODE (DECL_INCOMING_RTL (decl)) != MEM
9655 /* Not passed by invisible reference. */
9656 && (GET_CODE (XEXP (rtl, 0)) != REG
9657 || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
9658 || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
9659 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
9660 || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
9661 #endif
9662 )
9663 /* Big endian correction check. */
9664 && BYTES_BIG_ENDIAN
9665 && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
9666 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
9667 < UNITS_PER_WORD))
9668 {
9669 int offset = (UNITS_PER_WORD
9670 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
9671
9672 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
9673 plus_constant (XEXP (rtl, 0), offset));
9674 }
9675 }
9676
9677 if (rtl != NULL_RTX)
9678 {
9679 rtl = eliminate_regs (rtl, 0, NULL_RTX);
9680 #ifdef LEAF_REG_REMAP
9681 if (current_function_uses_only_leaf_regs)
9682 leaf_renumber_regs_insn (rtl);
9683 #endif
9684 }
9685
9686 /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
9687 and will have been substituted directly into all expressions that use it.
9688 C does not have such a concept, but C++ and other languages do. */
9689 else if (TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
9690 {
9691 /* If a variable is initialized with a string constant without embedded
9692 zeros, build CONST_STRING. */
9693 if (TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
9694 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
9695 {
9696 tree arrtype = TREE_TYPE (decl);
9697 tree enttype = TREE_TYPE (arrtype);
9698 tree domain = TYPE_DOMAIN (arrtype);
9699 tree init = DECL_INITIAL (decl);
9700 enum machine_mode mode = TYPE_MODE (enttype);
9701
9702 if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
9703 && domain
9704 && integer_zerop (TYPE_MIN_VALUE (domain))
9705 && compare_tree_int (TYPE_MAX_VALUE (domain),
9706 TREE_STRING_LENGTH (init) - 1) == 0
9707 && ((size_t) TREE_STRING_LENGTH (init)
9708 == strlen (TREE_STRING_POINTER (init)) + 1))
9709 rtl = gen_rtx_CONST_STRING (VOIDmode, TREE_STRING_POINTER (init));
9710 }
9711 /* If the initializer is something that we know will expand into an
9712 immediate RTL constant, expand it now. Expanding anything else
9713 tends to produce unresolved symbols; see debug/5770 and c++/6381. */
9714 else if (TREE_CODE (DECL_INITIAL (decl)) == INTEGER_CST
9715 || TREE_CODE (DECL_INITIAL (decl)) == REAL_CST)
9716 {
9717 rtl = expand_expr (DECL_INITIAL (decl), NULL_RTX, VOIDmode,
9718 EXPAND_INITIALIZER);
9719 /* If expand_expr returns a MEM, it wasn't immediate. */
9720 if (rtl && GET_CODE (rtl) == MEM)
9721 abort ();
9722 }
9723 }
9724
9725 if (rtl)
9726 rtl = (*targetm.delegitimize_address) (rtl);
9727
9728 /* If we don't look past the constant pool, we risk emitting a
9729 reference to a constant pool entry that isn't referenced from
9730 code, and thus is not emitted. */
9731 if (rtl)
9732 rtl = avoid_constant_pool_reference (rtl);
9733
9734 return rtl;
9735 }
9736
9737 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
9738 data attribute for a variable or a parameter. We generate the
9739 DW_AT_const_value attribute only in those cases where the given variable
9740 or parameter does not have a true "location" either in memory or in a
9741 register. This can happen (for example) when a constant is passed as an
9742 actual argument in a call to an inline function. (It's possible that
9743 these things can crop up in other ways also.) Note that one type of
9744 constant value which can be passed into an inlined function is a constant
9745 pointer. This can happen for example if an actual argument in an inlined
9746 function call evaluates to a compile-time constant address. */
9747
9748 static void
9749 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
9750 enum dwarf_attribute attr)
9751 {
9752 rtx rtl;
9753 dw_loc_descr_ref descr;
9754 var_loc_list *loc_list;
9755
9756 if (TREE_CODE (decl) == ERROR_MARK)
9757 return;
9758 else if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != PARM_DECL)
9759 abort ();
9760
9761 /* See if we possibly have multiple locations for this variable. */
9762 loc_list = lookup_decl_loc (decl);
9763
9764 /* If it truly has multiple locations, the first and last node will
9765 differ. */
9766 if (loc_list && loc_list->first != loc_list->last)
9767 {
9768 const char *secname;
9769 const char *endname;
9770 dw_loc_list_ref list;
9771 rtx varloc;
9772 struct var_loc_node *node;
9773
9774 /* We need to figure out what section we should use as the base
9775 for the address ranges where a given location is valid.
9776 1. If this particular DECL has a section associated with it,
9777 use that.
9778 2. If this function has a section associated with it, use
9779 that.
9780 3. Otherwise, use the text section.
9781 XXX: If you split a variable across multiple sections, this
9782 won't notice. */
9783
9784 if (DECL_SECTION_NAME (decl))
9785 {
9786 tree sectree = DECL_SECTION_NAME (decl);
9787 secname = TREE_STRING_POINTER (sectree);
9788 }
9789 else if (current_function_decl
9790 && DECL_SECTION_NAME (current_function_decl))
9791 {
9792 tree sectree = DECL_SECTION_NAME (current_function_decl);
9793 secname = TREE_STRING_POINTER (sectree);
9794 }
9795 else
9796 secname = text_section_label;
9797
9798 /* Now that we know what section we are using for a base,
9799 actually construct the list of locations.
9800 The first location information is what is passed to the
9801 function that creates the location list, and the remaining
9802 locations just get added on to that list.
9803 Note that we only know the start address for a location
9804 (IE location changes), so to build the range, we use
9805 the range [current location start, next location start].
9806 This means we have to special case the last node, and generate
9807 a range of [last location start, end of function label]. */
9808
9809 node = loc_list->first;
9810 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
9811 list = new_loc_list (loc_descriptor (varloc, attr != DW_AT_frame_base),
9812 node->label, node->next->label, secname, 1);
9813 node = node->next;
9814
9815 for (; node->next; node = node->next)
9816 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
9817 {
9818 /* The variable has a location between NODE->LABEL and
9819 NODE->NEXT->LABEL. */
9820 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
9821 add_loc_descr_to_loc_list (&list,
9822 loc_descriptor (varloc,
9823 attr != DW_AT_frame_base),
9824 node->label, node->next->label, secname);
9825 }
9826
9827 /* If the variable has a location at the last label
9828 it keeps its location until the end of function. */
9829 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
9830 {
9831 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
9832
9833 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
9834 if (!current_function_decl)
9835 endname = text_end_label;
9836 else
9837 {
9838 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
9839 current_function_funcdef_no);
9840 endname = ggc_strdup (label_id);
9841 }
9842 add_loc_descr_to_loc_list (&list,
9843 loc_descriptor (varloc,
9844 attr != DW_AT_frame_base),
9845 node->label, endname, secname);
9846 }
9847
9848 /* Finally, add the location list to the DIE, and we are done. */
9849 add_AT_loc_list (die, attr, list);
9850 return;
9851 }
9852
9853 rtl = rtl_for_decl_location (decl);
9854 if (rtl == NULL_RTX)
9855 return;
9856
9857 switch (GET_CODE (rtl))
9858 {
9859 case ADDRESSOF:
9860 /* The address of a variable that was optimized away;
9861 don't emit anything. */
9862 break;
9863
9864 case CONST_INT:
9865 case CONST_DOUBLE:
9866 case CONST_VECTOR:
9867 case CONST_STRING:
9868 case SYMBOL_REF:
9869 case LABEL_REF:
9870 case CONST:
9871 case PLUS:
9872 /* DECL_RTL could be (plus (reg ...) (const_int ...)) */
9873 add_const_value_attribute (die, rtl);
9874 break;
9875
9876 case MEM:
9877 if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
9878 {
9879 /* Need loc_descriptor_from_tree since that's where we know
9880 how to handle TLS variables. Want the object's address
9881 since the top-level DW_AT_location assumes such. See
9882 the confusion in loc_descriptor for reference. */
9883 descr = loc_descriptor_from_tree (decl, 1);
9884 }
9885 else
9886 {
9887 case REG:
9888 case SUBREG:
9889 case CONCAT:
9890 descr = loc_descriptor (rtl, true);
9891 }
9892 add_AT_location_description (die, attr, descr);
9893 break;
9894
9895 case PARALLEL:
9896 {
9897 rtvec par_elems = XVEC (rtl, 0);
9898 int num_elem = GET_NUM_ELEM (par_elems);
9899 enum machine_mode mode;
9900 int i;
9901
9902 /* Create the first one, so we have something to add to. */
9903 descr = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0), true);
9904 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
9905 add_loc_descr (&descr,
9906 new_loc_descr (DW_OP_piece, GET_MODE_SIZE (mode), 0));
9907 for (i = 1; i < num_elem; i++)
9908 {
9909 dw_loc_descr_ref temp;
9910
9911 temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0), true);
9912 add_loc_descr (&descr, temp);
9913 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
9914 add_loc_descr (&descr,
9915 new_loc_descr (DW_OP_piece,
9916 GET_MODE_SIZE (mode), 0));
9917 }
9918 }
9919 add_AT_location_description (die, DW_AT_location, descr);
9920 break;
9921
9922 default:
9923 abort ();
9924 }
9925 }
9926
9927 /* If we don't have a copy of this variable in memory for some reason (such
9928 as a C++ member constant that doesn't have an out-of-line definition),
9929 we should tell the debugger about the constant value. */
9930
9931 static void
9932 tree_add_const_value_attribute (dw_die_ref var_die, tree decl)
9933 {
9934 tree init = DECL_INITIAL (decl);
9935 tree type = TREE_TYPE (decl);
9936
9937 if (TREE_READONLY (decl) && ! TREE_THIS_VOLATILE (decl) && init
9938 && initializer_constant_valid_p (init, type) == null_pointer_node)
9939 /* OK */;
9940 else
9941 return;
9942
9943 switch (TREE_CODE (type))
9944 {
9945 case INTEGER_TYPE:
9946 if (host_integerp (init, 0))
9947 add_AT_unsigned (var_die, DW_AT_const_value,
9948 tree_low_cst (init, 0));
9949 else
9950 add_AT_long_long (var_die, DW_AT_const_value,
9951 TREE_INT_CST_HIGH (init),
9952 TREE_INT_CST_LOW (init));
9953 break;
9954
9955 default:;
9956 }
9957 }
9958
9959 /* Generate a DW_AT_name attribute given some string value to be included as
9960 the value of the attribute. */
9961
9962 static void
9963 add_name_attribute (dw_die_ref die, const char *name_string)
9964 {
9965 if (name_string != NULL && *name_string != 0)
9966 {
9967 if (demangle_name_func)
9968 name_string = (*demangle_name_func) (name_string);
9969
9970 add_AT_string (die, DW_AT_name, name_string);
9971 }
9972 }
9973
9974 /* Generate a DW_AT_comp_dir attribute for DIE. */
9975
9976 static void
9977 add_comp_dir_attribute (dw_die_ref die)
9978 {
9979 const char *wd = get_src_pwd ();
9980 if (wd != NULL)
9981 add_AT_string (die, DW_AT_comp_dir, wd);
9982 }
9983
9984 /* Given a tree node describing an array bound (either lower or upper) output
9985 a representation for that bound. */
9986
9987 static void
9988 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
9989 {
9990 switch (TREE_CODE (bound))
9991 {
9992 case ERROR_MARK:
9993 return;
9994
9995 /* All fixed-bounds are represented by INTEGER_CST nodes. */
9996 case INTEGER_CST:
9997 if (! host_integerp (bound, 0)
9998 || (bound_attr == DW_AT_lower_bound
9999 && (((is_c_family () || is_java ()) && integer_zerop (bound))
10000 || (is_fortran () && integer_onep (bound)))))
10001 /* Use the default. */
10002 ;
10003 else
10004 add_AT_unsigned (subrange_die, bound_attr, tree_low_cst (bound, 0));
10005 break;
10006
10007 case CONVERT_EXPR:
10008 case NOP_EXPR:
10009 case NON_LVALUE_EXPR:
10010 case VIEW_CONVERT_EXPR:
10011 add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
10012 break;
10013
10014 case SAVE_EXPR:
10015 /* If optimization is turned on, the SAVE_EXPRs that describe how to
10016 access the upper bound values may be bogus. If they refer to a
10017 register, they may only describe how to get at these values at the
10018 points in the generated code right after they have just been
10019 computed. Worse yet, in the typical case, the upper bound values
10020 will not even *be* computed in the optimized code (though the
10021 number of elements will), so these SAVE_EXPRs are entirely
10022 bogus. In order to compensate for this fact, we check here to see
10023 if optimization is enabled, and if so, we don't add an attribute
10024 for the (unknown and unknowable) upper bound. This should not
10025 cause too much trouble for existing (stupid?) debuggers because
10026 they have to deal with empty upper bounds location descriptions
10027 anyway in order to be able to deal with incomplete array types.
10028 Of course an intelligent debugger (GDB?) should be able to
10029 comprehend that a missing upper bound specification in an array
10030 type used for a storage class `auto' local array variable
10031 indicates that the upper bound is both unknown (at compile- time)
10032 and unknowable (at run-time) due to optimization.
10033
10034 We assume that a MEM rtx is safe because gcc wouldn't put the
10035 value there unless it was going to be used repeatedly in the
10036 function, i.e. for cleanups. */
10037 if (SAVE_EXPR_RTL (bound)
10038 && (! optimize || GET_CODE (SAVE_EXPR_RTL (bound)) == MEM))
10039 {
10040 dw_die_ref ctx = lookup_decl_die (current_function_decl);
10041 dw_die_ref decl_die = new_die (DW_TAG_variable, ctx, bound);
10042 rtx loc = SAVE_EXPR_RTL (bound);
10043
10044 /* If the RTL for the SAVE_EXPR is memory, handle the case where
10045 it references an outer function's frame. */
10046 if (GET_CODE (loc) == MEM)
10047 {
10048 rtx new_addr = fix_lexical_addr (XEXP (loc, 0), bound);
10049
10050 if (XEXP (loc, 0) != new_addr)
10051 loc = gen_rtx_MEM (GET_MODE (loc), new_addr);
10052 }
10053
10054 add_AT_flag (decl_die, DW_AT_artificial, 1);
10055 add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
10056 add_AT_location_description (decl_die, DW_AT_location,
10057 loc_descriptor (loc, true));
10058 add_AT_die_ref (subrange_die, bound_attr, decl_die);
10059 }
10060
10061 /* Else leave out the attribute. */
10062 break;
10063
10064 case VAR_DECL:
10065 case PARM_DECL:
10066 {
10067 dw_die_ref decl_die = lookup_decl_die (bound);
10068
10069 /* ??? Can this happen, or should the variable have been bound
10070 first? Probably it can, since I imagine that we try to create
10071 the types of parameters in the order in which they exist in
10072 the list, and won't have created a forward reference to a
10073 later parameter. */
10074 if (decl_die != NULL)
10075 add_AT_die_ref (subrange_die, bound_attr, decl_die);
10076 break;
10077 }
10078
10079 default:
10080 {
10081 /* Otherwise try to create a stack operation procedure to
10082 evaluate the value of the array bound. */
10083
10084 dw_die_ref ctx, decl_die;
10085 dw_loc_descr_ref loc;
10086
10087 loc = loc_descriptor_from_tree (bound, 0);
10088 if (loc == NULL)
10089 break;
10090
10091 if (current_function_decl == 0)
10092 ctx = comp_unit_die;
10093 else
10094 ctx = lookup_decl_die (current_function_decl);
10095
10096 /* If we weren't able to find a context, it's most likely the case
10097 that we are processing the return type of the function. So
10098 make a SAVE_EXPR to point to it and have the limbo DIE code
10099 find the proper die. The save_expr function doesn't always
10100 make a SAVE_EXPR, so do it ourselves. */
10101 if (ctx == 0)
10102 bound = build (SAVE_EXPR, TREE_TYPE (bound), bound,
10103 current_function_decl, NULL_TREE);
10104
10105 decl_die = new_die (DW_TAG_variable, ctx, bound);
10106 add_AT_flag (decl_die, DW_AT_artificial, 1);
10107 add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
10108 add_AT_loc (decl_die, DW_AT_location, loc);
10109
10110 add_AT_die_ref (subrange_die, bound_attr, decl_die);
10111 break;
10112 }
10113 }
10114 }
10115
10116 /* Note that the block of subscript information for an array type also
10117 includes information about the element type of type given array type. */
10118
10119 static void
10120 add_subscript_info (dw_die_ref type_die, tree type)
10121 {
10122 #ifndef MIPS_DEBUGGING_INFO
10123 unsigned dimension_number;
10124 #endif
10125 tree lower, upper;
10126 dw_die_ref subrange_die;
10127
10128 /* The GNU compilers represent multidimensional array types as sequences of
10129 one dimensional array types whose element types are themselves array
10130 types. Here we squish that down, so that each multidimensional array
10131 type gets only one array_type DIE in the Dwarf debugging info. The draft
10132 Dwarf specification say that we are allowed to do this kind of
10133 compression in C (because there is no difference between an array or
10134 arrays and a multidimensional array in C) but for other source languages
10135 (e.g. Ada) we probably shouldn't do this. */
10136
10137 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
10138 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
10139 We work around this by disabling this feature. See also
10140 gen_array_type_die. */
10141 #ifndef MIPS_DEBUGGING_INFO
10142 for (dimension_number = 0;
10143 TREE_CODE (type) == ARRAY_TYPE;
10144 type = TREE_TYPE (type), dimension_number++)
10145 #endif
10146 {
10147 tree domain = TYPE_DOMAIN (type);
10148
10149 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
10150 and (in GNU C only) variable bounds. Handle all three forms
10151 here. */
10152 subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
10153 if (domain)
10154 {
10155 /* We have an array type with specified bounds. */
10156 lower = TYPE_MIN_VALUE (domain);
10157 upper = TYPE_MAX_VALUE (domain);
10158
10159 /* Define the index type. */
10160 if (TREE_TYPE (domain))
10161 {
10162 /* ??? This is probably an Ada unnamed subrange type. Ignore the
10163 TREE_TYPE field. We can't emit debug info for this
10164 because it is an unnamed integral type. */
10165 if (TREE_CODE (domain) == INTEGER_TYPE
10166 && TYPE_NAME (domain) == NULL_TREE
10167 && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
10168 && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
10169 ;
10170 else
10171 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
10172 type_die);
10173 }
10174
10175 /* ??? If upper is NULL, the array has unspecified length,
10176 but it does have a lower bound. This happens with Fortran
10177 dimension arr(N:*)
10178 Since the debugger is definitely going to need to know N
10179 to produce useful results, go ahead and output the lower
10180 bound solo, and hope the debugger can cope. */
10181
10182 add_bound_info (subrange_die, DW_AT_lower_bound, lower);
10183 if (upper)
10184 add_bound_info (subrange_die, DW_AT_upper_bound, upper);
10185 }
10186
10187 /* Otherwise we have an array type with an unspecified length. The
10188 DWARF-2 spec does not say how to handle this; let's just leave out the
10189 bounds. */
10190 }
10191 }
10192
10193 static void
10194 add_byte_size_attribute (dw_die_ref die, tree tree_node)
10195 {
10196 unsigned size;
10197
10198 switch (TREE_CODE (tree_node))
10199 {
10200 case ERROR_MARK:
10201 size = 0;
10202 break;
10203 case ENUMERAL_TYPE:
10204 case RECORD_TYPE:
10205 case UNION_TYPE:
10206 case QUAL_UNION_TYPE:
10207 size = int_size_in_bytes (tree_node);
10208 break;
10209 case FIELD_DECL:
10210 /* For a data member of a struct or union, the DW_AT_byte_size is
10211 generally given as the number of bytes normally allocated for an
10212 object of the *declared* type of the member itself. This is true
10213 even for bit-fields. */
10214 size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
10215 break;
10216 default:
10217 abort ();
10218 }
10219
10220 /* Note that `size' might be -1 when we get to this point. If it is, that
10221 indicates that the byte size of the entity in question is variable. We
10222 have no good way of expressing this fact in Dwarf at the present time,
10223 so just let the -1 pass on through. */
10224 add_AT_unsigned (die, DW_AT_byte_size, size);
10225 }
10226
10227 /* For a FIELD_DECL node which represents a bit-field, output an attribute
10228 which specifies the distance in bits from the highest order bit of the
10229 "containing object" for the bit-field to the highest order bit of the
10230 bit-field itself.
10231
10232 For any given bit-field, the "containing object" is a hypothetical object
10233 (of some integral or enum type) within which the given bit-field lives. The
10234 type of this hypothetical "containing object" is always the same as the
10235 declared type of the individual bit-field itself. The determination of the
10236 exact location of the "containing object" for a bit-field is rather
10237 complicated. It's handled by the `field_byte_offset' function (above).
10238
10239 Note that it is the size (in bytes) of the hypothetical "containing object"
10240 which will be given in the DW_AT_byte_size attribute for this bit-field.
10241 (See `byte_size_attribute' above). */
10242
10243 static inline void
10244 add_bit_offset_attribute (dw_die_ref die, tree decl)
10245 {
10246 HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
10247 tree type = DECL_BIT_FIELD_TYPE (decl);
10248 HOST_WIDE_INT bitpos_int;
10249 HOST_WIDE_INT highest_order_object_bit_offset;
10250 HOST_WIDE_INT highest_order_field_bit_offset;
10251 HOST_WIDE_INT unsigned bit_offset;
10252
10253 /* Must be a field and a bit field. */
10254 if (!type
10255 || TREE_CODE (decl) != FIELD_DECL)
10256 abort ();
10257
10258 /* We can't yet handle bit-fields whose offsets are variable, so if we
10259 encounter such things, just return without generating any attribute
10260 whatsoever. Likewise for variable or too large size. */
10261 if (! host_integerp (bit_position (decl), 0)
10262 || ! host_integerp (DECL_SIZE (decl), 1))
10263 return;
10264
10265 bitpos_int = int_bit_position (decl);
10266
10267 /* Note that the bit offset is always the distance (in bits) from the
10268 highest-order bit of the "containing object" to the highest-order bit of
10269 the bit-field itself. Since the "high-order end" of any object or field
10270 is different on big-endian and little-endian machines, the computation
10271 below must take account of these differences. */
10272 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
10273 highest_order_field_bit_offset = bitpos_int;
10274
10275 if (! BYTES_BIG_ENDIAN)
10276 {
10277 highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
10278 highest_order_object_bit_offset += simple_type_size_in_bits (type);
10279 }
10280
10281 bit_offset
10282 = (! BYTES_BIG_ENDIAN
10283 ? highest_order_object_bit_offset - highest_order_field_bit_offset
10284 : highest_order_field_bit_offset - highest_order_object_bit_offset);
10285
10286 add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
10287 }
10288
10289 /* For a FIELD_DECL node which represents a bit field, output an attribute
10290 which specifies the length in bits of the given field. */
10291
10292 static inline void
10293 add_bit_size_attribute (dw_die_ref die, tree decl)
10294 {
10295 /* Must be a field and a bit field. */
10296 if (TREE_CODE (decl) != FIELD_DECL
10297 || ! DECL_BIT_FIELD_TYPE (decl))
10298 abort ();
10299
10300 if (host_integerp (DECL_SIZE (decl), 1))
10301 add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
10302 }
10303
10304 /* If the compiled language is ANSI C, then add a 'prototyped'
10305 attribute, if arg types are given for the parameters of a function. */
10306
10307 static inline void
10308 add_prototyped_attribute (dw_die_ref die, tree func_type)
10309 {
10310 if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
10311 && TYPE_ARG_TYPES (func_type) != NULL)
10312 add_AT_flag (die, DW_AT_prototyped, 1);
10313 }
10314
10315 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
10316 by looking in either the type declaration or object declaration
10317 equate table. */
10318
10319 static inline void
10320 add_abstract_origin_attribute (dw_die_ref die, tree origin)
10321 {
10322 dw_die_ref origin_die = NULL;
10323
10324 if (TREE_CODE (origin) != FUNCTION_DECL)
10325 {
10326 /* We may have gotten separated from the block for the inlined
10327 function, if we're in an exception handler or some such; make
10328 sure that the abstract function has been written out.
10329
10330 Doing this for nested functions is wrong, however; functions are
10331 distinct units, and our context might not even be inline. */
10332 tree fn = origin;
10333
10334 if (TYPE_P (fn))
10335 fn = TYPE_STUB_DECL (fn);
10336
10337 fn = decl_function_context (fn);
10338 if (fn)
10339 dwarf2out_abstract_function (fn);
10340 }
10341
10342 if (DECL_P (origin))
10343 origin_die = lookup_decl_die (origin);
10344 else if (TYPE_P (origin))
10345 origin_die = lookup_type_die (origin);
10346
10347 if (origin_die == NULL)
10348 abort ();
10349
10350 add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
10351 }
10352
10353 /* We do not currently support the pure_virtual attribute. */
10354
10355 static inline void
10356 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
10357 {
10358 if (DECL_VINDEX (func_decl))
10359 {
10360 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
10361
10362 if (host_integerp (DECL_VINDEX (func_decl), 0))
10363 add_AT_loc (die, DW_AT_vtable_elem_location,
10364 new_loc_descr (DW_OP_constu,
10365 tree_low_cst (DECL_VINDEX (func_decl), 0),
10366 0));
10367
10368 /* GNU extension: Record what type this method came from originally. */
10369 if (debug_info_level > DINFO_LEVEL_TERSE)
10370 add_AT_die_ref (die, DW_AT_containing_type,
10371 lookup_type_die (DECL_CONTEXT (func_decl)));
10372 }
10373 }
10374 \f
10375 /* Add source coordinate attributes for the given decl. */
10376
10377 static void
10378 add_src_coords_attributes (dw_die_ref die, tree decl)
10379 {
10380 unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl));
10381
10382 add_AT_unsigned (die, DW_AT_decl_file, file_index);
10383 add_AT_unsigned (die, DW_AT_decl_line, DECL_SOURCE_LINE (decl));
10384 }
10385
10386 /* Add a DW_AT_name attribute and source coordinate attribute for the
10387 given decl, but only if it actually has a name. */
10388
10389 static void
10390 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
10391 {
10392 tree decl_name;
10393
10394 decl_name = DECL_NAME (decl);
10395 if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
10396 {
10397 add_name_attribute (die, dwarf2_name (decl, 0));
10398 if (! DECL_ARTIFICIAL (decl))
10399 add_src_coords_attributes (die, decl);
10400
10401 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
10402 && TREE_PUBLIC (decl)
10403 && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)
10404 && !DECL_ABSTRACT (decl))
10405 add_AT_string (die, DW_AT_MIPS_linkage_name,
10406 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
10407 }
10408
10409 #ifdef VMS_DEBUGGING_INFO
10410 /* Get the function's name, as described by its RTL. This may be different
10411 from the DECL_NAME name used in the source file. */
10412 if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
10413 {
10414 add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
10415 XEXP (DECL_RTL (decl), 0));
10416 VARRAY_PUSH_RTX (used_rtx_varray, XEXP (DECL_RTL (decl), 0));
10417 }
10418 #endif
10419 }
10420
10421 /* Push a new declaration scope. */
10422
10423 static void
10424 push_decl_scope (tree scope)
10425 {
10426 VARRAY_PUSH_TREE (decl_scope_table, scope);
10427 }
10428
10429 /* Pop a declaration scope. */
10430
10431 static inline void
10432 pop_decl_scope (void)
10433 {
10434 if (VARRAY_ACTIVE_SIZE (decl_scope_table) <= 0)
10435 abort ();
10436
10437 VARRAY_POP (decl_scope_table);
10438 }
10439
10440 /* Return the DIE for the scope that immediately contains this type.
10441 Non-named types get global scope. Named types nested in other
10442 types get their containing scope if it's open, or global scope
10443 otherwise. All other types (i.e. function-local named types) get
10444 the current active scope. */
10445
10446 static dw_die_ref
10447 scope_die_for (tree t, dw_die_ref context_die)
10448 {
10449 dw_die_ref scope_die = NULL;
10450 tree containing_scope;
10451 int i;
10452
10453 /* Non-types always go in the current scope. */
10454 if (! TYPE_P (t))
10455 abort ();
10456
10457 containing_scope = TYPE_CONTEXT (t);
10458
10459 /* Use the containing namespace if it was passed in (for a declaration). */
10460 if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
10461 {
10462 if (context_die == lookup_decl_die (containing_scope))
10463 /* OK */;
10464 else
10465 containing_scope = NULL_TREE;
10466 }
10467
10468 /* Ignore function type "scopes" from the C frontend. They mean that
10469 a tagged type is local to a parmlist of a function declarator, but
10470 that isn't useful to DWARF. */
10471 if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
10472 containing_scope = NULL_TREE;
10473
10474 if (containing_scope == NULL_TREE)
10475 scope_die = comp_unit_die;
10476 else if (TYPE_P (containing_scope))
10477 {
10478 /* For types, we can just look up the appropriate DIE. But
10479 first we check to see if we're in the middle of emitting it
10480 so we know where the new DIE should go. */
10481 for (i = VARRAY_ACTIVE_SIZE (decl_scope_table) - 1; i >= 0; --i)
10482 if (VARRAY_TREE (decl_scope_table, i) == containing_scope)
10483 break;
10484
10485 if (i < 0)
10486 {
10487 if (debug_info_level > DINFO_LEVEL_TERSE
10488 && !TREE_ASM_WRITTEN (containing_scope))
10489 abort ();
10490
10491 /* If none of the current dies are suitable, we get file scope. */
10492 scope_die = comp_unit_die;
10493 }
10494 else
10495 scope_die = lookup_type_die (containing_scope);
10496 }
10497 else
10498 scope_die = context_die;
10499
10500 return scope_die;
10501 }
10502
10503 /* Returns nonzero if CONTEXT_DIE is internal to a function. */
10504
10505 static inline int
10506 local_scope_p (dw_die_ref context_die)
10507 {
10508 for (; context_die; context_die = context_die->die_parent)
10509 if (context_die->die_tag == DW_TAG_inlined_subroutine
10510 || context_die->die_tag == DW_TAG_subprogram)
10511 return 1;
10512
10513 return 0;
10514 }
10515
10516 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
10517 whether or not to treat a DIE in this context as a declaration. */
10518
10519 static inline int
10520 class_or_namespace_scope_p (dw_die_ref context_die)
10521 {
10522 return (context_die
10523 && (context_die->die_tag == DW_TAG_structure_type
10524 || context_die->die_tag == DW_TAG_union_type
10525 || context_die->die_tag == DW_TAG_namespace));
10526 }
10527
10528 /* Many forms of DIEs require a "type description" attribute. This
10529 routine locates the proper "type descriptor" die for the type given
10530 by 'type', and adds a DW_AT_type attribute below the given die. */
10531
10532 static void
10533 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
10534 int decl_volatile, dw_die_ref context_die)
10535 {
10536 enum tree_code code = TREE_CODE (type);
10537 dw_die_ref type_die = NULL;
10538
10539 /* ??? If this type is an unnamed subrange type of an integral or
10540 floating-point type, use the inner type. This is because we have no
10541 support for unnamed types in base_type_die. This can happen if this is
10542 an Ada subrange type. Correct solution is emit a subrange type die. */
10543 if ((code == INTEGER_TYPE || code == REAL_TYPE)
10544 && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
10545 type = TREE_TYPE (type), code = TREE_CODE (type);
10546
10547 if (code == ERROR_MARK
10548 /* Handle a special case. For functions whose return type is void, we
10549 generate *no* type attribute. (Note that no object may have type
10550 `void', so this only applies to function return types). */
10551 || code == VOID_TYPE)
10552 return;
10553
10554 type_die = modified_type_die (type,
10555 decl_const || TYPE_READONLY (type),
10556 decl_volatile || TYPE_VOLATILE (type),
10557 context_die);
10558
10559 if (type_die != NULL)
10560 add_AT_die_ref (object_die, DW_AT_type, type_die);
10561 }
10562
10563 /* Given a tree pointer to a struct, class, union, or enum type node, return
10564 a pointer to the (string) tag name for the given type, or zero if the type
10565 was declared without a tag. */
10566
10567 static const char *
10568 type_tag (tree type)
10569 {
10570 const char *name = 0;
10571
10572 if (TYPE_NAME (type) != 0)
10573 {
10574 tree t = 0;
10575
10576 /* Find the IDENTIFIER_NODE for the type name. */
10577 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
10578 t = TYPE_NAME (type);
10579
10580 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
10581 a TYPE_DECL node, regardless of whether or not a `typedef' was
10582 involved. */
10583 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10584 && ! DECL_IGNORED_P (TYPE_NAME (type)))
10585 t = DECL_NAME (TYPE_NAME (type));
10586
10587 /* Now get the name as a string, or invent one. */
10588 if (t != 0)
10589 name = IDENTIFIER_POINTER (t);
10590 }
10591
10592 return (name == 0 || *name == '\0') ? 0 : name;
10593 }
10594
10595 /* Return the type associated with a data member, make a special check
10596 for bit field types. */
10597
10598 static inline tree
10599 member_declared_type (tree member)
10600 {
10601 return (DECL_BIT_FIELD_TYPE (member)
10602 ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
10603 }
10604
10605 /* Get the decl's label, as described by its RTL. This may be different
10606 from the DECL_NAME name used in the source file. */
10607
10608 #if 0
10609 static const char *
10610 decl_start_label (tree decl)
10611 {
10612 rtx x;
10613 const char *fnname;
10614
10615 x = DECL_RTL (decl);
10616 if (GET_CODE (x) != MEM)
10617 abort ();
10618
10619 x = XEXP (x, 0);
10620 if (GET_CODE (x) != SYMBOL_REF)
10621 abort ();
10622
10623 fnname = XSTR (x, 0);
10624 return fnname;
10625 }
10626 #endif
10627 \f
10628 /* These routines generate the internal representation of the DIE's for
10629 the compilation unit. Debugging information is collected by walking
10630 the declaration trees passed in from dwarf2out_decl(). */
10631
10632 static void
10633 gen_array_type_die (tree type, dw_die_ref context_die)
10634 {
10635 dw_die_ref scope_die = scope_die_for (type, context_die);
10636 dw_die_ref array_die;
10637 tree element_type;
10638
10639 /* ??? The SGI dwarf reader fails for array of array of enum types unless
10640 the inner array type comes before the outer array type. Thus we must
10641 call gen_type_die before we call new_die. See below also. */
10642 #ifdef MIPS_DEBUGGING_INFO
10643 gen_type_die (TREE_TYPE (type), context_die);
10644 #endif
10645
10646 array_die = new_die (DW_TAG_array_type, scope_die, type);
10647 add_name_attribute (array_die, type_tag (type));
10648 equate_type_number_to_die (type, array_die);
10649
10650 if (TREE_CODE (type) == VECTOR_TYPE)
10651 {
10652 /* The frontend feeds us a representation for the vector as a struct
10653 containing an array. Pull out the array type. */
10654 type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
10655 add_AT_flag (array_die, DW_AT_GNU_vector, 1);
10656 }
10657
10658 #if 0
10659 /* We default the array ordering. SDB will probably do
10660 the right things even if DW_AT_ordering is not present. It's not even
10661 an issue until we start to get into multidimensional arrays anyway. If
10662 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
10663 then we'll have to put the DW_AT_ordering attribute back in. (But if
10664 and when we find out that we need to put these in, we will only do so
10665 for multidimensional arrays. */
10666 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
10667 #endif
10668
10669 #ifdef MIPS_DEBUGGING_INFO
10670 /* The SGI compilers handle arrays of unknown bound by setting
10671 AT_declaration and not emitting any subrange DIEs. */
10672 if (! TYPE_DOMAIN (type))
10673 add_AT_flag (array_die, DW_AT_declaration, 1);
10674 else
10675 #endif
10676 add_subscript_info (array_die, type);
10677
10678 /* Add representation of the type of the elements of this array type. */
10679 element_type = TREE_TYPE (type);
10680
10681 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
10682 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
10683 We work around this by disabling this feature. See also
10684 add_subscript_info. */
10685 #ifndef MIPS_DEBUGGING_INFO
10686 while (TREE_CODE (element_type) == ARRAY_TYPE)
10687 element_type = TREE_TYPE (element_type);
10688
10689 gen_type_die (element_type, context_die);
10690 #endif
10691
10692 add_type_attribute (array_die, element_type, 0, 0, context_die);
10693 }
10694
10695 static void
10696 gen_set_type_die (tree type, dw_die_ref context_die)
10697 {
10698 dw_die_ref type_die
10699 = new_die (DW_TAG_set_type, scope_die_for (type, context_die), type);
10700
10701 equate_type_number_to_die (type, type_die);
10702 add_type_attribute (type_die, TREE_TYPE (type), 0, 0, context_die);
10703 }
10704
10705 #if 0
10706 static void
10707 gen_entry_point_die (tree decl, dw_die_ref context_die)
10708 {
10709 tree origin = decl_ultimate_origin (decl);
10710 dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
10711
10712 if (origin != NULL)
10713 add_abstract_origin_attribute (decl_die, origin);
10714 else
10715 {
10716 add_name_and_src_coords_attributes (decl_die, decl);
10717 add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
10718 0, 0, context_die);
10719 }
10720
10721 if (DECL_ABSTRACT (decl))
10722 equate_decl_number_to_die (decl, decl_die);
10723 else
10724 add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
10725 }
10726 #endif
10727
10728 /* Walk through the list of incomplete types again, trying once more to
10729 emit full debugging info for them. */
10730
10731 static void
10732 retry_incomplete_types (void)
10733 {
10734 int i;
10735
10736 for (i = VARRAY_ACTIVE_SIZE (incomplete_types) - 1; i >= 0; i--)
10737 gen_type_die (VARRAY_TREE (incomplete_types, i), comp_unit_die);
10738 }
10739
10740 /* Generate a DIE to represent an inlined instance of an enumeration type. */
10741
10742 static void
10743 gen_inlined_enumeration_type_die (tree type, dw_die_ref context_die)
10744 {
10745 dw_die_ref type_die = new_die (DW_TAG_enumeration_type, context_die, type);
10746
10747 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
10748 be incomplete and such types are not marked. */
10749 add_abstract_origin_attribute (type_die, type);
10750 }
10751
10752 /* Generate a DIE to represent an inlined instance of a structure type. */
10753
10754 static void
10755 gen_inlined_structure_type_die (tree type, dw_die_ref context_die)
10756 {
10757 dw_die_ref type_die = new_die (DW_TAG_structure_type, context_die, type);
10758
10759 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
10760 be incomplete and such types are not marked. */
10761 add_abstract_origin_attribute (type_die, type);
10762 }
10763
10764 /* Generate a DIE to represent an inlined instance of a union type. */
10765
10766 static void
10767 gen_inlined_union_type_die (tree type, dw_die_ref context_die)
10768 {
10769 dw_die_ref type_die = new_die (DW_TAG_union_type, context_die, type);
10770
10771 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
10772 be incomplete and such types are not marked. */
10773 add_abstract_origin_attribute (type_die, type);
10774 }
10775
10776 /* Generate a DIE to represent an enumeration type. Note that these DIEs
10777 include all of the information about the enumeration values also. Each
10778 enumerated type name/value is listed as a child of the enumerated type
10779 DIE. */
10780
10781 static dw_die_ref
10782 gen_enumeration_type_die (tree type, dw_die_ref context_die)
10783 {
10784 dw_die_ref type_die = lookup_type_die (type);
10785
10786 if (type_die == NULL)
10787 {
10788 type_die = new_die (DW_TAG_enumeration_type,
10789 scope_die_for (type, context_die), type);
10790 equate_type_number_to_die (type, type_die);
10791 add_name_attribute (type_die, type_tag (type));
10792 }
10793 else if (! TYPE_SIZE (type))
10794 return type_die;
10795 else
10796 remove_AT (type_die, DW_AT_declaration);
10797
10798 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
10799 given enum type is incomplete, do not generate the DW_AT_byte_size
10800 attribute or the DW_AT_element_list attribute. */
10801 if (TYPE_SIZE (type))
10802 {
10803 tree link;
10804
10805 TREE_ASM_WRITTEN (type) = 1;
10806 add_byte_size_attribute (type_die, type);
10807 if (TYPE_STUB_DECL (type) != NULL_TREE)
10808 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
10809
10810 /* If the first reference to this type was as the return type of an
10811 inline function, then it may not have a parent. Fix this now. */
10812 if (type_die->die_parent == NULL)
10813 add_child_die (scope_die_for (type, context_die), type_die);
10814
10815 for (link = TYPE_FIELDS (type);
10816 link != NULL; link = TREE_CHAIN (link))
10817 {
10818 dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
10819 tree value = TREE_VALUE (link);
10820
10821 add_name_attribute (enum_die,
10822 IDENTIFIER_POINTER (TREE_PURPOSE (link)));
10823
10824 if (host_integerp (value, TREE_UNSIGNED (TREE_TYPE (value))))
10825 /* DWARF2 does not provide a way of indicating whether or
10826 not enumeration constants are signed or unsigned. GDB
10827 always assumes the values are signed, so we output all
10828 values as if they were signed. That means that
10829 enumeration constants with very large unsigned values
10830 will appear to have negative values in the debugger. */
10831 add_AT_int (enum_die, DW_AT_const_value,
10832 tree_low_cst (value, tree_int_cst_sgn (value) > 0));
10833 }
10834 }
10835 else
10836 add_AT_flag (type_die, DW_AT_declaration, 1);
10837
10838 return type_die;
10839 }
10840
10841 /* Generate a DIE to represent either a real live formal parameter decl or to
10842 represent just the type of some formal parameter position in some function
10843 type.
10844
10845 Note that this routine is a bit unusual because its argument may be a
10846 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
10847 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
10848 node. If it's the former then this function is being called to output a
10849 DIE to represent a formal parameter object (or some inlining thereof). If
10850 it's the latter, then this function is only being called to output a
10851 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
10852 argument type of some subprogram type. */
10853
10854 static dw_die_ref
10855 gen_formal_parameter_die (tree node, dw_die_ref context_die)
10856 {
10857 dw_die_ref parm_die
10858 = new_die (DW_TAG_formal_parameter, context_die, node);
10859 tree origin;
10860
10861 switch (TREE_CODE_CLASS (TREE_CODE (node)))
10862 {
10863 case 'd':
10864 origin = decl_ultimate_origin (node);
10865 if (origin != NULL)
10866 add_abstract_origin_attribute (parm_die, origin);
10867 else
10868 {
10869 add_name_and_src_coords_attributes (parm_die, node);
10870 add_type_attribute (parm_die, TREE_TYPE (node),
10871 TREE_READONLY (node),
10872 TREE_THIS_VOLATILE (node),
10873 context_die);
10874 if (DECL_ARTIFICIAL (node))
10875 add_AT_flag (parm_die, DW_AT_artificial, 1);
10876 }
10877
10878 equate_decl_number_to_die (node, parm_die);
10879 if (! DECL_ABSTRACT (node))
10880 add_location_or_const_value_attribute (parm_die, node, DW_AT_location);
10881
10882 break;
10883
10884 case 't':
10885 /* We were called with some kind of a ..._TYPE node. */
10886 add_type_attribute (parm_die, node, 0, 0, context_die);
10887 break;
10888
10889 default:
10890 abort ();
10891 }
10892
10893 return parm_die;
10894 }
10895
10896 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
10897 at the end of an (ANSI prototyped) formal parameters list. */
10898
10899 static void
10900 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
10901 {
10902 new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
10903 }
10904
10905 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
10906 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
10907 parameters as specified in some function type specification (except for
10908 those which appear as part of a function *definition*). */
10909
10910 static void
10911 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
10912 {
10913 tree link;
10914 tree formal_type = NULL;
10915 tree first_parm_type;
10916 tree arg;
10917
10918 if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
10919 {
10920 arg = DECL_ARGUMENTS (function_or_method_type);
10921 function_or_method_type = TREE_TYPE (function_or_method_type);
10922 }
10923 else
10924 arg = NULL_TREE;
10925
10926 first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
10927
10928 /* Make our first pass over the list of formal parameter types and output a
10929 DW_TAG_formal_parameter DIE for each one. */
10930 for (link = first_parm_type; link; )
10931 {
10932 dw_die_ref parm_die;
10933
10934 formal_type = TREE_VALUE (link);
10935 if (formal_type == void_type_node)
10936 break;
10937
10938 /* Output a (nameless) DIE to represent the formal parameter itself. */
10939 parm_die = gen_formal_parameter_die (formal_type, context_die);
10940 if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
10941 && link == first_parm_type)
10942 || (arg && DECL_ARTIFICIAL (arg)))
10943 add_AT_flag (parm_die, DW_AT_artificial, 1);
10944
10945 link = TREE_CHAIN (link);
10946 if (arg)
10947 arg = TREE_CHAIN (arg);
10948 }
10949
10950 /* If this function type has an ellipsis, add a
10951 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
10952 if (formal_type != void_type_node)
10953 gen_unspecified_parameters_die (function_or_method_type, context_die);
10954
10955 /* Make our second (and final) pass over the list of formal parameter types
10956 and output DIEs to represent those types (as necessary). */
10957 for (link = TYPE_ARG_TYPES (function_or_method_type);
10958 link && TREE_VALUE (link);
10959 link = TREE_CHAIN (link))
10960 gen_type_die (TREE_VALUE (link), context_die);
10961 }
10962
10963 /* We want to generate the DIE for TYPE so that we can generate the
10964 die for MEMBER, which has been defined; we will need to refer back
10965 to the member declaration nested within TYPE. If we're trying to
10966 generate minimal debug info for TYPE, processing TYPE won't do the
10967 trick; we need to attach the member declaration by hand. */
10968
10969 static void
10970 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
10971 {
10972 gen_type_die (type, context_die);
10973
10974 /* If we're trying to avoid duplicate debug info, we may not have
10975 emitted the member decl for this function. Emit it now. */
10976 if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
10977 && ! lookup_decl_die (member))
10978 {
10979 if (decl_ultimate_origin (member))
10980 abort ();
10981
10982 push_decl_scope (type);
10983 if (TREE_CODE (member) == FUNCTION_DECL)
10984 gen_subprogram_die (member, lookup_type_die (type));
10985 else
10986 gen_variable_die (member, lookup_type_die (type));
10987
10988 pop_decl_scope ();
10989 }
10990 }
10991
10992 /* Generate the DWARF2 info for the "abstract" instance of a function which we
10993 may later generate inlined and/or out-of-line instances of. */
10994
10995 static void
10996 dwarf2out_abstract_function (tree decl)
10997 {
10998 dw_die_ref old_die;
10999 tree save_fn;
11000 tree context;
11001 int was_abstract = DECL_ABSTRACT (decl);
11002
11003 /* Make sure we have the actual abstract inline, not a clone. */
11004 decl = DECL_ORIGIN (decl);
11005
11006 old_die = lookup_decl_die (decl);
11007 if (old_die && get_AT (old_die, DW_AT_inline))
11008 /* We've already generated the abstract instance. */
11009 return;
11010
11011 /* Be sure we've emitted the in-class declaration DIE (if any) first, so
11012 we don't get confused by DECL_ABSTRACT. */
11013 if (debug_info_level > DINFO_LEVEL_TERSE)
11014 {
11015 context = decl_class_context (decl);
11016 if (context)
11017 gen_type_die_for_member
11018 (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
11019 }
11020
11021 /* Pretend we've just finished compiling this function. */
11022 save_fn = current_function_decl;
11023 current_function_decl = decl;
11024
11025 set_decl_abstract_flags (decl, 1);
11026 dwarf2out_decl (decl);
11027 if (! was_abstract)
11028 set_decl_abstract_flags (decl, 0);
11029
11030 current_function_decl = save_fn;
11031 }
11032
11033 /* Generate a DIE to represent a declared function (either file-scope or
11034 block-local). */
11035
11036 static void
11037 gen_subprogram_die (tree decl, dw_die_ref context_die)
11038 {
11039 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
11040 tree origin = decl_ultimate_origin (decl);
11041 dw_die_ref subr_die;
11042 rtx fp_reg;
11043 tree fn_arg_types;
11044 tree outer_scope;
11045 dw_die_ref old_die = lookup_decl_die (decl);
11046 int declaration = (current_function_decl != decl
11047 || class_or_namespace_scope_p (context_die));
11048
11049 /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
11050 started to generate the abstract instance of an inline, decided to output
11051 its containing class, and proceeded to emit the declaration of the inline
11052 from the member list for the class. If so, DECLARATION takes priority;
11053 we'll get back to the abstract instance when done with the class. */
11054
11055 /* The class-scope declaration DIE must be the primary DIE. */
11056 if (origin && declaration && class_or_namespace_scope_p (context_die))
11057 {
11058 origin = NULL;
11059 if (old_die)
11060 abort ();
11061 }
11062
11063 if (origin != NULL)
11064 {
11065 if (declaration && ! local_scope_p (context_die))
11066 abort ();
11067
11068 /* Fixup die_parent for the abstract instance of a nested
11069 inline function. */
11070 if (old_die && old_die->die_parent == NULL)
11071 add_child_die (context_die, old_die);
11072
11073 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11074 add_abstract_origin_attribute (subr_die, origin);
11075 }
11076 else if (old_die)
11077 {
11078 unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl));
11079
11080 if (!get_AT_flag (old_die, DW_AT_declaration)
11081 /* We can have a normal definition following an inline one in the
11082 case of redefinition of GNU C extern inlines.
11083 It seems reasonable to use AT_specification in this case. */
11084 && !get_AT (old_die, DW_AT_inline))
11085 {
11086 /* ??? This can happen if there is a bug in the program, for
11087 instance, if it has duplicate function definitions. Ideally,
11088 we should detect this case and ignore it. For now, if we have
11089 already reported an error, any error at all, then assume that
11090 we got here because of an input error, not a dwarf2 bug. */
11091 if (errorcount)
11092 return;
11093 abort ();
11094 }
11095
11096 /* If the definition comes from the same place as the declaration,
11097 maybe use the old DIE. We always want the DIE for this function
11098 that has the *_pc attributes to be under comp_unit_die so the
11099 debugger can find it. We also need to do this for abstract
11100 instances of inlines, since the spec requires the out-of-line copy
11101 to have the same parent. For local class methods, this doesn't
11102 apply; we just use the old DIE. */
11103 if ((old_die->die_parent == comp_unit_die || context_die == NULL)
11104 && (DECL_ARTIFICIAL (decl)
11105 || (get_AT_unsigned (old_die, DW_AT_decl_file) == file_index
11106 && (get_AT_unsigned (old_die, DW_AT_decl_line)
11107 == (unsigned) DECL_SOURCE_LINE (decl)))))
11108 {
11109 subr_die = old_die;
11110
11111 /* Clear out the declaration attribute and the formal parameters.
11112 Do not remove all children, because it is possible that this
11113 declaration die was forced using force_decl_die(). In such
11114 cases die that forced declaration die (e.g. TAG_imported_module)
11115 is one of the children that we do not want to remove. */
11116 remove_AT (subr_die, DW_AT_declaration);
11117 remove_child_TAG (subr_die, DW_TAG_formal_parameter);
11118 }
11119 else
11120 {
11121 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11122 add_AT_specification (subr_die, old_die);
11123 if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
11124 add_AT_unsigned (subr_die, DW_AT_decl_file, file_index);
11125 if (get_AT_unsigned (old_die, DW_AT_decl_line)
11126 != (unsigned) DECL_SOURCE_LINE (decl))
11127 add_AT_unsigned
11128 (subr_die, DW_AT_decl_line, DECL_SOURCE_LINE (decl));
11129 }
11130 }
11131 else
11132 {
11133 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11134
11135 if (TREE_PUBLIC (decl))
11136 add_AT_flag (subr_die, DW_AT_external, 1);
11137
11138 add_name_and_src_coords_attributes (subr_die, decl);
11139 if (debug_info_level > DINFO_LEVEL_TERSE)
11140 {
11141 add_prototyped_attribute (subr_die, TREE_TYPE (decl));
11142 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
11143 0, 0, context_die);
11144 }
11145
11146 add_pure_or_virtual_attribute (subr_die, decl);
11147 if (DECL_ARTIFICIAL (decl))
11148 add_AT_flag (subr_die, DW_AT_artificial, 1);
11149
11150 if (TREE_PROTECTED (decl))
11151 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
11152 else if (TREE_PRIVATE (decl))
11153 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
11154 }
11155
11156 if (declaration)
11157 {
11158 if (!old_die || !get_AT (old_die, DW_AT_inline))
11159 {
11160 add_AT_flag (subr_die, DW_AT_declaration, 1);
11161
11162 /* The first time we see a member function, it is in the context of
11163 the class to which it belongs. We make sure of this by emitting
11164 the class first. The next time is the definition, which is
11165 handled above. The two may come from the same source text.
11166
11167 Note that force_decl_die() forces function declaration die. It is
11168 later reused to represent definition. */
11169 equate_decl_number_to_die (decl, subr_die);
11170 }
11171 }
11172 else if (DECL_ABSTRACT (decl))
11173 {
11174 if (DECL_DECLARED_INLINE_P (decl))
11175 {
11176 if (cgraph_function_possibly_inlined_p (decl))
11177 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
11178 else
11179 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
11180 }
11181 else
11182 {
11183 if (cgraph_function_possibly_inlined_p (decl))
11184 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
11185 else
11186 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
11187 }
11188
11189 equate_decl_number_to_die (decl, subr_die);
11190 }
11191 else if (!DECL_EXTERNAL (decl))
11192 {
11193 if (!old_die || !get_AT (old_die, DW_AT_inline))
11194 equate_decl_number_to_die (decl, subr_die);
11195
11196 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
11197 current_function_funcdef_no);
11198 add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
11199 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
11200 current_function_funcdef_no);
11201 add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
11202
11203 add_pubname (decl, subr_die);
11204 add_arange (decl, subr_die);
11205
11206 #ifdef MIPS_DEBUGGING_INFO
11207 /* Add a reference to the FDE for this routine. */
11208 add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
11209 #endif
11210
11211 /* Define the "frame base" location for this routine. We use the
11212 frame pointer or stack pointer registers, since the RTL for local
11213 variables is relative to one of them. */
11214 if (frame_base_decl && lookup_decl_loc (frame_base_decl) != NULL)
11215 {
11216 add_location_or_const_value_attribute (subr_die, frame_base_decl,
11217 DW_AT_frame_base);
11218 }
11219 else
11220 {
11221 fp_reg
11222 = frame_pointer_needed ? hard_frame_pointer_rtx : stack_pointer_rtx;
11223 add_AT_loc (subr_die, DW_AT_frame_base, reg_loc_descriptor (fp_reg));
11224 }
11225
11226 #if 0
11227 /* ??? This fails for nested inline functions, because context_display
11228 is not part of the state saved/restored for inline functions. */
11229 if (current_function_needs_context)
11230 add_AT_location_description (subr_die, DW_AT_static_link,
11231 loc_descriptor (lookup_static_chain (decl)));
11232 #endif
11233 }
11234
11235 /* Now output descriptions of the arguments for this function. This gets
11236 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
11237 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
11238 `...' at the end of the formal parameter list. In order to find out if
11239 there was a trailing ellipsis or not, we must instead look at the type
11240 associated with the FUNCTION_DECL. This will be a node of type
11241 FUNCTION_TYPE. If the chain of type nodes hanging off of this
11242 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
11243 an ellipsis at the end. */
11244
11245 /* In the case where we are describing a mere function declaration, all we
11246 need to do here (and all we *can* do here) is to describe the *types* of
11247 its formal parameters. */
11248 if (debug_info_level <= DINFO_LEVEL_TERSE)
11249 ;
11250 else if (declaration)
11251 gen_formal_types_die (decl, subr_die);
11252 else
11253 {
11254 /* Generate DIEs to represent all known formal parameters. */
11255 tree arg_decls = DECL_ARGUMENTS (decl);
11256 tree parm;
11257
11258 /* When generating DIEs, generate the unspecified_parameters DIE
11259 instead if we come across the arg "__builtin_va_alist" */
11260 for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
11261 if (TREE_CODE (parm) == PARM_DECL)
11262 {
11263 if (DECL_NAME (parm)
11264 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
11265 "__builtin_va_alist"))
11266 gen_unspecified_parameters_die (parm, subr_die);
11267 else
11268 gen_decl_die (parm, subr_die);
11269 }
11270
11271 /* Decide whether we need an unspecified_parameters DIE at the end.
11272 There are 2 more cases to do this for: 1) the ansi ... declaration -
11273 this is detectable when the end of the arg list is not a
11274 void_type_node 2) an unprototyped function declaration (not a
11275 definition). This just means that we have no info about the
11276 parameters at all. */
11277 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
11278 if (fn_arg_types != NULL)
11279 {
11280 /* This is the prototyped case, check for.... */
11281 if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
11282 gen_unspecified_parameters_die (decl, subr_die);
11283 }
11284 else if (DECL_INITIAL (decl) == NULL_TREE)
11285 gen_unspecified_parameters_die (decl, subr_die);
11286 }
11287
11288 /* Output Dwarf info for all of the stuff within the body of the function
11289 (if it has one - it may be just a declaration). */
11290 outer_scope = DECL_INITIAL (decl);
11291
11292 /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
11293 a function. This BLOCK actually represents the outermost binding contour
11294 for the function, i.e. the contour in which the function's formal
11295 parameters and labels get declared. Curiously, it appears that the front
11296 end doesn't actually put the PARM_DECL nodes for the current function onto
11297 the BLOCK_VARS list for this outer scope, but are strung off of the
11298 DECL_ARGUMENTS list for the function instead.
11299
11300 The BLOCK_VARS list for the `outer_scope' does provide us with a list of
11301 the LABEL_DECL nodes for the function however, and we output DWARF info
11302 for those in decls_for_scope. Just within the `outer_scope' there will be
11303 a BLOCK node representing the function's outermost pair of curly braces,
11304 and any blocks used for the base and member initializers of a C++
11305 constructor function. */
11306 if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
11307 {
11308 current_function_has_inlines = 0;
11309 decls_for_scope (outer_scope, subr_die, 0);
11310
11311 #if 0 && defined (MIPS_DEBUGGING_INFO)
11312 if (current_function_has_inlines)
11313 {
11314 add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
11315 if (! comp_unit_has_inlines)
11316 {
11317 add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
11318 comp_unit_has_inlines = 1;
11319 }
11320 }
11321 #endif
11322 }
11323 }
11324
11325 /* Generate a DIE to represent a declared data object. */
11326
11327 static void
11328 gen_variable_die (tree decl, dw_die_ref context_die)
11329 {
11330 tree origin = decl_ultimate_origin (decl);
11331 dw_die_ref var_die = new_die (DW_TAG_variable, context_die, decl);
11332
11333 dw_die_ref old_die = lookup_decl_die (decl);
11334 int declaration = (DECL_EXTERNAL (decl)
11335 || class_or_namespace_scope_p (context_die));
11336
11337 if (origin != NULL)
11338 add_abstract_origin_attribute (var_die, origin);
11339
11340 /* Loop unrolling can create multiple blocks that refer to the same
11341 static variable, so we must test for the DW_AT_declaration flag.
11342
11343 ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
11344 copy decls and set the DECL_ABSTRACT flag on them instead of
11345 sharing them.
11346
11347 ??? Duplicated blocks have been rewritten to use .debug_ranges. */
11348 else if (old_die && TREE_STATIC (decl)
11349 && get_AT_flag (old_die, DW_AT_declaration) == 1)
11350 {
11351 /* This is a definition of a C++ class level static. */
11352 add_AT_specification (var_die, old_die);
11353 if (DECL_NAME (decl))
11354 {
11355 unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl));
11356
11357 if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
11358 add_AT_unsigned (var_die, DW_AT_decl_file, file_index);
11359
11360 if (get_AT_unsigned (old_die, DW_AT_decl_line)
11361 != (unsigned) DECL_SOURCE_LINE (decl))
11362
11363 add_AT_unsigned (var_die, DW_AT_decl_line,
11364 DECL_SOURCE_LINE (decl));
11365 }
11366 }
11367 else
11368 {
11369 add_name_and_src_coords_attributes (var_die, decl);
11370 add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
11371 TREE_THIS_VOLATILE (decl), context_die);
11372
11373 if (TREE_PUBLIC (decl))
11374 add_AT_flag (var_die, DW_AT_external, 1);
11375
11376 if (DECL_ARTIFICIAL (decl))
11377 add_AT_flag (var_die, DW_AT_artificial, 1);
11378
11379 if (TREE_PROTECTED (decl))
11380 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
11381 else if (TREE_PRIVATE (decl))
11382 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
11383 }
11384
11385 if (declaration)
11386 add_AT_flag (var_die, DW_AT_declaration, 1);
11387
11388 if (DECL_ABSTRACT (decl) || declaration)
11389 equate_decl_number_to_die (decl, var_die);
11390
11391 if (! declaration && ! DECL_ABSTRACT (decl))
11392 {
11393 add_location_or_const_value_attribute (var_die, decl, DW_AT_location);
11394 add_pubname (decl, var_die);
11395 }
11396 else
11397 tree_add_const_value_attribute (var_die, decl);
11398 }
11399
11400 /* Generate a DIE to represent a label identifier. */
11401
11402 static void
11403 gen_label_die (tree decl, dw_die_ref context_die)
11404 {
11405 tree origin = decl_ultimate_origin (decl);
11406 dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
11407 rtx insn;
11408 char label[MAX_ARTIFICIAL_LABEL_BYTES];
11409
11410 if (origin != NULL)
11411 add_abstract_origin_attribute (lbl_die, origin);
11412 else
11413 add_name_and_src_coords_attributes (lbl_die, decl);
11414
11415 if (DECL_ABSTRACT (decl))
11416 equate_decl_number_to_die (decl, lbl_die);
11417 else
11418 {
11419 insn = DECL_RTL_IF_SET (decl);
11420
11421 /* Deleted labels are programmer specified labels which have been
11422 eliminated because of various optimizations. We still emit them
11423 here so that it is possible to put breakpoints on them. */
11424 if (insn
11425 && (GET_CODE (insn) == CODE_LABEL
11426 || ((GET_CODE (insn) == NOTE
11427 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL))))
11428 {
11429 /* When optimization is enabled (via -O) some parts of the compiler
11430 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
11431 represent source-level labels which were explicitly declared by
11432 the user. This really shouldn't be happening though, so catch
11433 it if it ever does happen. */
11434 if (INSN_DELETED_P (insn))
11435 abort ();
11436
11437 ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
11438 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
11439 }
11440 }
11441 }
11442
11443 /* Generate a DIE for a lexical block. */
11444
11445 static void
11446 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
11447 {
11448 dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
11449 char label[MAX_ARTIFICIAL_LABEL_BYTES];
11450
11451 if (! BLOCK_ABSTRACT (stmt))
11452 {
11453 if (BLOCK_FRAGMENT_CHAIN (stmt))
11454 {
11455 tree chain;
11456
11457 add_AT_range_list (stmt_die, DW_AT_ranges, add_ranges (stmt));
11458
11459 chain = BLOCK_FRAGMENT_CHAIN (stmt);
11460 do
11461 {
11462 add_ranges (chain);
11463 chain = BLOCK_FRAGMENT_CHAIN (chain);
11464 }
11465 while (chain);
11466 add_ranges (NULL);
11467 }
11468 else
11469 {
11470 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
11471 BLOCK_NUMBER (stmt));
11472 add_AT_lbl_id (stmt_die, DW_AT_low_pc, label);
11473 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
11474 BLOCK_NUMBER (stmt));
11475 add_AT_lbl_id (stmt_die, DW_AT_high_pc, label);
11476 }
11477 }
11478
11479 decls_for_scope (stmt, stmt_die, depth);
11480 }
11481
11482 /* Generate a DIE for an inlined subprogram. */
11483
11484 static void
11485 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
11486 {
11487 tree decl = block_ultimate_origin (stmt);
11488
11489 /* Emit info for the abstract instance first, if we haven't yet. We
11490 must emit this even if the block is abstract, otherwise when we
11491 emit the block below (or elsewhere), we may end up trying to emit
11492 a die whose origin die hasn't been emitted, and crashing. */
11493 dwarf2out_abstract_function (decl);
11494
11495 if (! BLOCK_ABSTRACT (stmt))
11496 {
11497 dw_die_ref subr_die
11498 = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
11499 char label[MAX_ARTIFICIAL_LABEL_BYTES];
11500
11501 add_abstract_origin_attribute (subr_die, decl);
11502 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
11503 BLOCK_NUMBER (stmt));
11504 add_AT_lbl_id (subr_die, DW_AT_low_pc, label);
11505 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
11506 BLOCK_NUMBER (stmt));
11507 add_AT_lbl_id (subr_die, DW_AT_high_pc, label);
11508 decls_for_scope (stmt, subr_die, depth);
11509 current_function_has_inlines = 1;
11510 }
11511 else
11512 /* We may get here if we're the outer block of function A that was
11513 inlined into function B that was inlined into function C. When
11514 generating debugging info for C, dwarf2out_abstract_function(B)
11515 would mark all inlined blocks as abstract, including this one.
11516 So, we wouldn't (and shouldn't) expect labels to be generated
11517 for this one. Instead, just emit debugging info for
11518 declarations within the block. This is particularly important
11519 in the case of initializers of arguments passed from B to us:
11520 if they're statement expressions containing declarations, we
11521 wouldn't generate dies for their abstract variables, and then,
11522 when generating dies for the real variables, we'd die (pun
11523 intended :-) */
11524 gen_lexical_block_die (stmt, context_die, depth);
11525 }
11526
11527 /* Generate a DIE for a field in a record, or structure. */
11528
11529 static void
11530 gen_field_die (tree decl, dw_die_ref context_die)
11531 {
11532 dw_die_ref decl_die;
11533
11534 if (TREE_TYPE (decl) == error_mark_node)
11535 return;
11536
11537 decl_die = new_die (DW_TAG_member, context_die, decl);
11538 add_name_and_src_coords_attributes (decl_die, decl);
11539 add_type_attribute (decl_die, member_declared_type (decl),
11540 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
11541 context_die);
11542
11543 if (DECL_BIT_FIELD_TYPE (decl))
11544 {
11545 add_byte_size_attribute (decl_die, decl);
11546 add_bit_size_attribute (decl_die, decl);
11547 add_bit_offset_attribute (decl_die, decl);
11548 }
11549
11550 if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
11551 add_data_member_location_attribute (decl_die, decl);
11552
11553 if (DECL_ARTIFICIAL (decl))
11554 add_AT_flag (decl_die, DW_AT_artificial, 1);
11555
11556 if (TREE_PROTECTED (decl))
11557 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
11558 else if (TREE_PRIVATE (decl))
11559 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
11560 }
11561
11562 #if 0
11563 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
11564 Use modified_type_die instead.
11565 We keep this code here just in case these types of DIEs may be needed to
11566 represent certain things in other languages (e.g. Pascal) someday. */
11567
11568 static void
11569 gen_pointer_type_die (tree type, dw_die_ref context_die)
11570 {
11571 dw_die_ref ptr_die
11572 = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
11573
11574 equate_type_number_to_die (type, ptr_die);
11575 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
11576 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
11577 }
11578
11579 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
11580 Use modified_type_die instead.
11581 We keep this code here just in case these types of DIEs may be needed to
11582 represent certain things in other languages (e.g. Pascal) someday. */
11583
11584 static void
11585 gen_reference_type_die (tree type, dw_die_ref context_die)
11586 {
11587 dw_die_ref ref_die
11588 = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
11589
11590 equate_type_number_to_die (type, ref_die);
11591 add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
11592 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
11593 }
11594 #endif
11595
11596 /* Generate a DIE for a pointer to a member type. */
11597
11598 static void
11599 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
11600 {
11601 dw_die_ref ptr_die
11602 = new_die (DW_TAG_ptr_to_member_type,
11603 scope_die_for (type, context_die), type);
11604
11605 equate_type_number_to_die (type, ptr_die);
11606 add_AT_die_ref (ptr_die, DW_AT_containing_type,
11607 lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
11608 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
11609 }
11610
11611 /* Generate the DIE for the compilation unit. */
11612
11613 static dw_die_ref
11614 gen_compile_unit_die (const char *filename)
11615 {
11616 dw_die_ref die;
11617 char producer[250];
11618 const char *language_string = lang_hooks.name;
11619 int language;
11620
11621 die = new_die (DW_TAG_compile_unit, NULL, NULL);
11622
11623 if (filename)
11624 {
11625 add_name_attribute (die, filename);
11626 /* Don't add cwd for <built-in>. */
11627 if (filename[0] != DIR_SEPARATOR && filename[0] != '<')
11628 add_comp_dir_attribute (die);
11629 }
11630
11631 sprintf (producer, "%s %s", language_string, version_string);
11632
11633 #ifdef MIPS_DEBUGGING_INFO
11634 /* The MIPS/SGI compilers place the 'cc' command line options in the producer
11635 string. The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
11636 not appear in the producer string, the debugger reaches the conclusion
11637 that the object file is stripped and has no debugging information.
11638 To get the MIPS/SGI debugger to believe that there is debugging
11639 information in the object file, we add a -g to the producer string. */
11640 if (debug_info_level > DINFO_LEVEL_TERSE)
11641 strcat (producer, " -g");
11642 #endif
11643
11644 add_AT_string (die, DW_AT_producer, producer);
11645
11646 if (strcmp (language_string, "GNU C++") == 0)
11647 language = DW_LANG_C_plus_plus;
11648 else if (strcmp (language_string, "GNU Ada") == 0)
11649 language = DW_LANG_Ada95;
11650 else if (strcmp (language_string, "GNU F77") == 0)
11651 language = DW_LANG_Fortran77;
11652 else if (strcmp (language_string, "GNU Pascal") == 0)
11653 language = DW_LANG_Pascal83;
11654 else if (strcmp (language_string, "GNU Java") == 0)
11655 language = DW_LANG_Java;
11656 else
11657 language = DW_LANG_C89;
11658
11659 add_AT_unsigned (die, DW_AT_language, language);
11660 return die;
11661 }
11662
11663 /* Generate a DIE for a string type. */
11664
11665 static void
11666 gen_string_type_die (tree type, dw_die_ref context_die)
11667 {
11668 dw_die_ref type_die
11669 = new_die (DW_TAG_string_type, scope_die_for (type, context_die), type);
11670
11671 equate_type_number_to_die (type, type_die);
11672
11673 /* ??? Fudge the string length attribute for now.
11674 TODO: add string length info. */
11675 #if 0
11676 string_length_attribute (TYPE_MAX_VALUE (TYPE_DOMAIN (type)));
11677 bound_representation (upper_bound, 0, 'u');
11678 #endif
11679 }
11680
11681 /* Generate the DIE for a base class. */
11682
11683 static void
11684 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
11685 {
11686 dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
11687
11688 add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
11689 add_data_member_location_attribute (die, binfo);
11690
11691 if (TREE_VIA_VIRTUAL (binfo))
11692 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
11693
11694 if (access == access_public_node)
11695 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
11696 else if (access == access_protected_node)
11697 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
11698 }
11699
11700 /* Generate a DIE for a class member. */
11701
11702 static void
11703 gen_member_die (tree type, dw_die_ref context_die)
11704 {
11705 tree member;
11706 tree binfo = TYPE_BINFO (type);
11707 dw_die_ref child;
11708
11709 /* If this is not an incomplete type, output descriptions of each of its
11710 members. Note that as we output the DIEs necessary to represent the
11711 members of this record or union type, we will also be trying to output
11712 DIEs to represent the *types* of those members. However the `type'
11713 function (above) will specifically avoid generating type DIEs for member
11714 types *within* the list of member DIEs for this (containing) type except
11715 for those types (of members) which are explicitly marked as also being
11716 members of this (containing) type themselves. The g++ front- end can
11717 force any given type to be treated as a member of some other (containing)
11718 type by setting the TYPE_CONTEXT of the given (member) type to point to
11719 the TREE node representing the appropriate (containing) type. */
11720
11721 /* First output info about the base classes. */
11722 if (binfo && BINFO_BASETYPES (binfo))
11723 {
11724 tree bases = BINFO_BASETYPES (binfo);
11725 tree accesses = BINFO_BASEACCESSES (binfo);
11726 int n_bases = TREE_VEC_LENGTH (bases);
11727 int i;
11728
11729 for (i = 0; i < n_bases; i++)
11730 gen_inheritance_die (TREE_VEC_ELT (bases, i),
11731 (accesses ? TREE_VEC_ELT (accesses, i)
11732 : access_public_node), context_die);
11733 }
11734
11735 /* Now output info about the data members and type members. */
11736 for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
11737 {
11738 /* If we thought we were generating minimal debug info for TYPE
11739 and then changed our minds, some of the member declarations
11740 may have already been defined. Don't define them again, but
11741 do put them in the right order. */
11742
11743 child = lookup_decl_die (member);
11744 if (child)
11745 splice_child_die (context_die, child);
11746 else
11747 gen_decl_die (member, context_die);
11748 }
11749
11750 /* Now output info about the function members (if any). */
11751 for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
11752 {
11753 /* Don't include clones in the member list. */
11754 if (DECL_ABSTRACT_ORIGIN (member))
11755 continue;
11756
11757 child = lookup_decl_die (member);
11758 if (child)
11759 splice_child_die (context_die, child);
11760 else
11761 gen_decl_die (member, context_die);
11762 }
11763 }
11764
11765 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
11766 is set, we pretend that the type was never defined, so we only get the
11767 member DIEs needed by later specification DIEs. */
11768
11769 static void
11770 gen_struct_or_union_type_die (tree type, dw_die_ref context_die)
11771 {
11772 dw_die_ref type_die = lookup_type_die (type);
11773 dw_die_ref scope_die = 0;
11774 int nested = 0;
11775 int complete = (TYPE_SIZE (type)
11776 && (! TYPE_STUB_DECL (type)
11777 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
11778 int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
11779
11780 if (type_die && ! complete)
11781 return;
11782
11783 if (TYPE_CONTEXT (type) != NULL_TREE
11784 && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
11785 || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
11786 nested = 1;
11787
11788 scope_die = scope_die_for (type, context_die);
11789
11790 if (! type_die || (nested && scope_die == comp_unit_die))
11791 /* First occurrence of type or toplevel definition of nested class. */
11792 {
11793 dw_die_ref old_die = type_die;
11794
11795 type_die = new_die (TREE_CODE (type) == RECORD_TYPE
11796 ? DW_TAG_structure_type : DW_TAG_union_type,
11797 scope_die, type);
11798 equate_type_number_to_die (type, type_die);
11799 if (old_die)
11800 add_AT_specification (type_die, old_die);
11801 else
11802 add_name_attribute (type_die, type_tag (type));
11803 }
11804 else
11805 remove_AT (type_die, DW_AT_declaration);
11806
11807 /* If this type has been completed, then give it a byte_size attribute and
11808 then give a list of members. */
11809 if (complete && !ns_decl)
11810 {
11811 /* Prevent infinite recursion in cases where the type of some member of
11812 this type is expressed in terms of this type itself. */
11813 TREE_ASM_WRITTEN (type) = 1;
11814 add_byte_size_attribute (type_die, type);
11815 if (TYPE_STUB_DECL (type) != NULL_TREE)
11816 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
11817
11818 /* If the first reference to this type was as the return type of an
11819 inline function, then it may not have a parent. Fix this now. */
11820 if (type_die->die_parent == NULL)
11821 add_child_die (scope_die, type_die);
11822
11823 push_decl_scope (type);
11824 gen_member_die (type, type_die);
11825 pop_decl_scope ();
11826
11827 /* GNU extension: Record what type our vtable lives in. */
11828 if (TYPE_VFIELD (type))
11829 {
11830 tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
11831
11832 gen_type_die (vtype, context_die);
11833 add_AT_die_ref (type_die, DW_AT_containing_type,
11834 lookup_type_die (vtype));
11835 }
11836 }
11837 else
11838 {
11839 add_AT_flag (type_die, DW_AT_declaration, 1);
11840
11841 /* We don't need to do this for function-local types. */
11842 if (TYPE_STUB_DECL (type)
11843 && ! decl_function_context (TYPE_STUB_DECL (type)))
11844 VARRAY_PUSH_TREE (incomplete_types, type);
11845 }
11846 }
11847
11848 /* Generate a DIE for a subroutine _type_. */
11849
11850 static void
11851 gen_subroutine_type_die (tree type, dw_die_ref context_die)
11852 {
11853 tree return_type = TREE_TYPE (type);
11854 dw_die_ref subr_die
11855 = new_die (DW_TAG_subroutine_type,
11856 scope_die_for (type, context_die), type);
11857
11858 equate_type_number_to_die (type, subr_die);
11859 add_prototyped_attribute (subr_die, type);
11860 add_type_attribute (subr_die, return_type, 0, 0, context_die);
11861 gen_formal_types_die (type, subr_die);
11862 }
11863
11864 /* Generate a DIE for a type definition. */
11865
11866 static void
11867 gen_typedef_die (tree decl, dw_die_ref context_die)
11868 {
11869 dw_die_ref type_die;
11870 tree origin;
11871
11872 if (TREE_ASM_WRITTEN (decl))
11873 return;
11874
11875 TREE_ASM_WRITTEN (decl) = 1;
11876 type_die = new_die (DW_TAG_typedef, context_die, decl);
11877 origin = decl_ultimate_origin (decl);
11878 if (origin != NULL)
11879 add_abstract_origin_attribute (type_die, origin);
11880 else
11881 {
11882 tree type;
11883
11884 add_name_and_src_coords_attributes (type_die, decl);
11885 if (DECL_ORIGINAL_TYPE (decl))
11886 {
11887 type = DECL_ORIGINAL_TYPE (decl);
11888
11889 if (type == TREE_TYPE (decl))
11890 abort ();
11891 else
11892 equate_type_number_to_die (TREE_TYPE (decl), type_die);
11893 }
11894 else
11895 type = TREE_TYPE (decl);
11896
11897 add_type_attribute (type_die, type, TREE_READONLY (decl),
11898 TREE_THIS_VOLATILE (decl), context_die);
11899 }
11900
11901 if (DECL_ABSTRACT (decl))
11902 equate_decl_number_to_die (decl, type_die);
11903 }
11904
11905 /* Generate a type description DIE. */
11906
11907 static void
11908 gen_type_die (tree type, dw_die_ref context_die)
11909 {
11910 int need_pop;
11911
11912 if (type == NULL_TREE || type == error_mark_node)
11913 return;
11914
11915 if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11916 && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
11917 {
11918 if (TREE_ASM_WRITTEN (type))
11919 return;
11920
11921 /* Prevent broken recursion; we can't hand off to the same type. */
11922 if (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) == type)
11923 abort ();
11924
11925 TREE_ASM_WRITTEN (type) = 1;
11926 gen_decl_die (TYPE_NAME (type), context_die);
11927 return;
11928 }
11929
11930 /* We are going to output a DIE to represent the unqualified version
11931 of this type (i.e. without any const or volatile qualifiers) so
11932 get the main variant (i.e. the unqualified version) of this type
11933 now. (Vectors are special because the debugging info is in the
11934 cloned type itself). */
11935 if (TREE_CODE (type) != VECTOR_TYPE)
11936 type = type_main_variant (type);
11937
11938 if (TREE_ASM_WRITTEN (type))
11939 return;
11940
11941 switch (TREE_CODE (type))
11942 {
11943 case ERROR_MARK:
11944 break;
11945
11946 case POINTER_TYPE:
11947 case REFERENCE_TYPE:
11948 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
11949 ensures that the gen_type_die recursion will terminate even if the
11950 type is recursive. Recursive types are possible in Ada. */
11951 /* ??? We could perhaps do this for all types before the switch
11952 statement. */
11953 TREE_ASM_WRITTEN (type) = 1;
11954
11955 /* For these types, all that is required is that we output a DIE (or a
11956 set of DIEs) to represent the "basis" type. */
11957 gen_type_die (TREE_TYPE (type), context_die);
11958 break;
11959
11960 case OFFSET_TYPE:
11961 /* This code is used for C++ pointer-to-data-member types.
11962 Output a description of the relevant class type. */
11963 gen_type_die (TYPE_OFFSET_BASETYPE (type), context_die);
11964
11965 /* Output a description of the type of the object pointed to. */
11966 gen_type_die (TREE_TYPE (type), context_die);
11967
11968 /* Now output a DIE to represent this pointer-to-data-member type
11969 itself. */
11970 gen_ptr_to_mbr_type_die (type, context_die);
11971 break;
11972
11973 case SET_TYPE:
11974 gen_type_die (TYPE_DOMAIN (type), context_die);
11975 gen_set_type_die (type, context_die);
11976 break;
11977
11978 case FILE_TYPE:
11979 gen_type_die (TREE_TYPE (type), context_die);
11980 abort (); /* No way to represent these in Dwarf yet! */
11981 break;
11982
11983 case FUNCTION_TYPE:
11984 /* Force out return type (in case it wasn't forced out already). */
11985 gen_type_die (TREE_TYPE (type), context_die);
11986 gen_subroutine_type_die (type, context_die);
11987 break;
11988
11989 case METHOD_TYPE:
11990 /* Force out return type (in case it wasn't forced out already). */
11991 gen_type_die (TREE_TYPE (type), context_die);
11992 gen_subroutine_type_die (type, context_die);
11993 break;
11994
11995 case ARRAY_TYPE:
11996 if (TYPE_STRING_FLAG (type) && TREE_CODE (TREE_TYPE (type)) == CHAR_TYPE)
11997 {
11998 gen_type_die (TREE_TYPE (type), context_die);
11999 gen_string_type_die (type, context_die);
12000 }
12001 else
12002 gen_array_type_die (type, context_die);
12003 break;
12004
12005 case VECTOR_TYPE:
12006 gen_array_type_die (type, context_die);
12007 break;
12008
12009 case ENUMERAL_TYPE:
12010 case RECORD_TYPE:
12011 case UNION_TYPE:
12012 case QUAL_UNION_TYPE:
12013 /* If this is a nested type whose containing class hasn't been written
12014 out yet, writing it out will cover this one, too. This does not apply
12015 to instantiations of member class templates; they need to be added to
12016 the containing class as they are generated. FIXME: This hurts the
12017 idea of combining type decls from multiple TUs, since we can't predict
12018 what set of template instantiations we'll get. */
12019 if (TYPE_CONTEXT (type)
12020 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
12021 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
12022 {
12023 gen_type_die (TYPE_CONTEXT (type), context_die);
12024
12025 if (TREE_ASM_WRITTEN (type))
12026 return;
12027
12028 /* If that failed, attach ourselves to the stub. */
12029 push_decl_scope (TYPE_CONTEXT (type));
12030 context_die = lookup_type_die (TYPE_CONTEXT (type));
12031 need_pop = 1;
12032 }
12033 else
12034 {
12035 declare_in_namespace (type, context_die);
12036 need_pop = 0;
12037 }
12038
12039 if (TREE_CODE (type) == ENUMERAL_TYPE)
12040 gen_enumeration_type_die (type, context_die);
12041 else
12042 gen_struct_or_union_type_die (type, context_die);
12043
12044 if (need_pop)
12045 pop_decl_scope ();
12046
12047 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
12048 it up if it is ever completed. gen_*_type_die will set it for us
12049 when appropriate. */
12050 return;
12051
12052 case VOID_TYPE:
12053 case INTEGER_TYPE:
12054 case REAL_TYPE:
12055 case COMPLEX_TYPE:
12056 case BOOLEAN_TYPE:
12057 case CHAR_TYPE:
12058 /* No DIEs needed for fundamental types. */
12059 break;
12060
12061 case LANG_TYPE:
12062 /* No Dwarf representation currently defined. */
12063 break;
12064
12065 default:
12066 abort ();
12067 }
12068
12069 TREE_ASM_WRITTEN (type) = 1;
12070 }
12071
12072 /* Generate a DIE for a tagged type instantiation. */
12073
12074 static void
12075 gen_tagged_type_instantiation_die (tree type, dw_die_ref context_die)
12076 {
12077 if (type == NULL_TREE || type == error_mark_node)
12078 return;
12079
12080 /* We are going to output a DIE to represent the unqualified version of
12081 this type (i.e. without any const or volatile qualifiers) so make sure
12082 that we have the main variant (i.e. the unqualified version) of this
12083 type now. */
12084 if (type != type_main_variant (type))
12085 abort ();
12086
12087 /* Do not check TREE_ASM_WRITTEN (type) as it may not be set if this is
12088 an instance of an unresolved type. */
12089
12090 switch (TREE_CODE (type))
12091 {
12092 case ERROR_MARK:
12093 break;
12094
12095 case ENUMERAL_TYPE:
12096 gen_inlined_enumeration_type_die (type, context_die);
12097 break;
12098
12099 case RECORD_TYPE:
12100 gen_inlined_structure_type_die (type, context_die);
12101 break;
12102
12103 case UNION_TYPE:
12104 case QUAL_UNION_TYPE:
12105 gen_inlined_union_type_die (type, context_die);
12106 break;
12107
12108 default:
12109 abort ();
12110 }
12111 }
12112
12113 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
12114 things which are local to the given block. */
12115
12116 static void
12117 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
12118 {
12119 int must_output_die = 0;
12120 tree origin;
12121 tree decl;
12122 enum tree_code origin_code;
12123
12124 /* Ignore blocks never really used to make RTL. */
12125 if (stmt == NULL_TREE || !TREE_USED (stmt)
12126 || (!TREE_ASM_WRITTEN (stmt) && !BLOCK_ABSTRACT (stmt)))
12127 return;
12128
12129 /* If the block is one fragment of a non-contiguous block, do not
12130 process the variables, since they will have been done by the
12131 origin block. Do process subblocks. */
12132 if (BLOCK_FRAGMENT_ORIGIN (stmt))
12133 {
12134 tree sub;
12135
12136 for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
12137 gen_block_die (sub, context_die, depth + 1);
12138
12139 return;
12140 }
12141
12142 /* Determine the "ultimate origin" of this block. This block may be an
12143 inlined instance of an inlined instance of inline function, so we have
12144 to trace all of the way back through the origin chain to find out what
12145 sort of node actually served as the original seed for the creation of
12146 the current block. */
12147 origin = block_ultimate_origin (stmt);
12148 origin_code = (origin != NULL) ? TREE_CODE (origin) : ERROR_MARK;
12149
12150 /* Determine if we need to output any Dwarf DIEs at all to represent this
12151 block. */
12152 if (origin_code == FUNCTION_DECL)
12153 /* The outer scopes for inlinings *must* always be represented. We
12154 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
12155 must_output_die = 1;
12156 else
12157 {
12158 /* In the case where the current block represents an inlining of the
12159 "body block" of an inline function, we must *NOT* output any DIE for
12160 this block because we have already output a DIE to represent the whole
12161 inlined function scope and the "body block" of any function doesn't
12162 really represent a different scope according to ANSI C rules. So we
12163 check here to make sure that this block does not represent a "body
12164 block inlining" before trying to set the MUST_OUTPUT_DIE flag. */
12165 if (! is_body_block (origin ? origin : stmt))
12166 {
12167 /* Determine if this block directly contains any "significant"
12168 local declarations which we will need to output DIEs for. */
12169 if (debug_info_level > DINFO_LEVEL_TERSE)
12170 /* We are not in terse mode so *any* local declaration counts
12171 as being a "significant" one. */
12172 must_output_die = (BLOCK_VARS (stmt) != NULL);
12173 else
12174 /* We are in terse mode, so only local (nested) function
12175 definitions count as "significant" local declarations. */
12176 for (decl = BLOCK_VARS (stmt);
12177 decl != NULL; decl = TREE_CHAIN (decl))
12178 if (TREE_CODE (decl) == FUNCTION_DECL
12179 && DECL_INITIAL (decl))
12180 {
12181 must_output_die = 1;
12182 break;
12183 }
12184 }
12185 }
12186
12187 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
12188 DIE for any block which contains no significant local declarations at
12189 all. Rather, in such cases we just call `decls_for_scope' so that any
12190 needed Dwarf info for any sub-blocks will get properly generated. Note
12191 that in terse mode, our definition of what constitutes a "significant"
12192 local declaration gets restricted to include only inlined function
12193 instances and local (nested) function definitions. */
12194 if (must_output_die)
12195 {
12196 if (origin_code == FUNCTION_DECL)
12197 gen_inlined_subroutine_die (stmt, context_die, depth);
12198 else
12199 gen_lexical_block_die (stmt, context_die, depth);
12200 }
12201 else
12202 decls_for_scope (stmt, context_die, depth);
12203 }
12204
12205 /* Generate all of the decls declared within a given scope and (recursively)
12206 all of its sub-blocks. */
12207
12208 static void
12209 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
12210 {
12211 tree decl;
12212 tree subblocks;
12213
12214 /* Ignore blocks never really used to make RTL. */
12215 if (stmt == NULL_TREE || ! TREE_USED (stmt))
12216 return;
12217
12218 /* Output the DIEs to represent all of the data objects and typedefs
12219 declared directly within this block but not within any nested
12220 sub-blocks. Also, nested function and tag DIEs have been
12221 generated with a parent of NULL; fix that up now. */
12222 for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
12223 {
12224 dw_die_ref die;
12225
12226 if (TREE_CODE (decl) == FUNCTION_DECL)
12227 die = lookup_decl_die (decl);
12228 else if (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))
12229 die = lookup_type_die (TREE_TYPE (decl));
12230 else
12231 die = NULL;
12232
12233 if (die != NULL && die->die_parent == NULL)
12234 add_child_die (context_die, die);
12235 else
12236 gen_decl_die (decl, context_die);
12237 }
12238
12239 /* If we're at -g1, we're not interested in subblocks. */
12240 if (debug_info_level <= DINFO_LEVEL_TERSE)
12241 return;
12242
12243 /* Output the DIEs to represent all sub-blocks (and the items declared
12244 therein) of this block. */
12245 for (subblocks = BLOCK_SUBBLOCKS (stmt);
12246 subblocks != NULL;
12247 subblocks = BLOCK_CHAIN (subblocks))
12248 gen_block_die (subblocks, context_die, depth + 1);
12249 }
12250
12251 /* Is this a typedef we can avoid emitting? */
12252
12253 static inline int
12254 is_redundant_typedef (tree decl)
12255 {
12256 if (TYPE_DECL_IS_STUB (decl))
12257 return 1;
12258
12259 if (DECL_ARTIFICIAL (decl)
12260 && DECL_CONTEXT (decl)
12261 && is_tagged_type (DECL_CONTEXT (decl))
12262 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
12263 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
12264 /* Also ignore the artificial member typedef for the class name. */
12265 return 1;
12266
12267 return 0;
12268 }
12269
12270 /* Returns the DIE for decl or aborts. */
12271
12272 static dw_die_ref
12273 force_decl_die (tree decl)
12274 {
12275 dw_die_ref decl_die;
12276 unsigned saved_external_flag;
12277 tree save_fn = NULL_TREE;
12278 decl_die = lookup_decl_die (decl);
12279 if (!decl_die)
12280 {
12281 dw_die_ref context_die;
12282 tree decl_context = DECL_CONTEXT (decl);
12283 if (decl_context)
12284 {
12285 /* Find die that represents this context. */
12286 if (TYPE_P (decl_context))
12287 context_die = force_type_die (decl_context);
12288 else
12289 context_die = force_decl_die (decl_context);
12290 }
12291 else
12292 context_die = comp_unit_die;
12293
12294 switch (TREE_CODE (decl))
12295 {
12296 case FUNCTION_DECL:
12297 /* Clear current_function_decl, so that gen_subprogram_die thinks
12298 that this is a declaration. At this point, we just want to force
12299 declaration die. */
12300 save_fn = current_function_decl;
12301 current_function_decl = NULL_TREE;
12302 gen_subprogram_die (decl, context_die);
12303 current_function_decl = save_fn;
12304 break;
12305
12306 case VAR_DECL:
12307 /* Set external flag to force declaration die. Restore it after
12308 gen_decl_die() call. */
12309 saved_external_flag = DECL_EXTERNAL (decl);
12310 DECL_EXTERNAL (decl) = 1;
12311 gen_decl_die (decl, context_die);
12312 DECL_EXTERNAL (decl) = saved_external_flag;
12313 break;
12314
12315 case NAMESPACE_DECL:
12316 dwarf2out_decl (decl);
12317 break;
12318
12319 default:
12320 abort ();
12321 }
12322
12323 /* See if we can find the die for this deci now.
12324 If not then abort. */
12325 if (!decl_die)
12326 decl_die = lookup_decl_die (decl);
12327 if (!decl_die)
12328 abort ();
12329 }
12330
12331 return decl_die;
12332 }
12333
12334 /* Returns the DIE for decl or aborts. */
12335
12336 static dw_die_ref
12337 force_type_die (tree type)
12338 {
12339 dw_die_ref type_die;
12340
12341 type_die = lookup_type_die (type);
12342 if (!type_die)
12343 {
12344 dw_die_ref context_die;
12345 if (TYPE_CONTEXT (type))
12346 if (TYPE_P (TYPE_CONTEXT (type)))
12347 context_die = force_type_die (TYPE_CONTEXT (type));
12348 else
12349 context_die = force_decl_die (TYPE_CONTEXT (type));
12350 else
12351 context_die = comp_unit_die;
12352
12353 gen_type_die (type, context_die);
12354 type_die = lookup_type_die (type);
12355 if (!type_die)
12356 abort();
12357 }
12358 return type_die;
12359 }
12360
12361 /* Force out any required namespaces to be able to output DECL,
12362 and return the new context_die for it, if it's changed. */
12363
12364 static dw_die_ref
12365 setup_namespace_context (tree thing, dw_die_ref context_die)
12366 {
12367 tree context = DECL_P (thing) ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing);
12368 if (context && TREE_CODE (context) == NAMESPACE_DECL)
12369 /* Force out the namespace. */
12370 context_die = force_decl_die (context);
12371
12372 return context_die;
12373 }
12374
12375 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
12376 type) within its namespace, if appropriate.
12377
12378 For compatibility with older debuggers, namespace DIEs only contain
12379 declarations; all definitions are emitted at CU scope. */
12380
12381 static void
12382 declare_in_namespace (tree thing, dw_die_ref context_die)
12383 {
12384 dw_die_ref ns_context;
12385
12386 if (debug_info_level <= DINFO_LEVEL_TERSE)
12387 return;
12388
12389 ns_context = setup_namespace_context (thing, context_die);
12390
12391 if (ns_context != context_die)
12392 {
12393 if (DECL_P (thing))
12394 gen_decl_die (thing, ns_context);
12395 else
12396 gen_type_die (thing, ns_context);
12397 }
12398 }
12399
12400 /* Generate a DIE for a namespace or namespace alias. */
12401
12402 static void
12403 gen_namespace_die (tree decl)
12404 {
12405 dw_die_ref context_die = setup_namespace_context (decl, comp_unit_die);
12406
12407 /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
12408 they are an alias of. */
12409 if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
12410 {
12411 /* Output a real namespace. */
12412 dw_die_ref namespace_die
12413 = new_die (DW_TAG_namespace, context_die, decl);
12414 add_name_and_src_coords_attributes (namespace_die, decl);
12415 equate_decl_number_to_die (decl, namespace_die);
12416 }
12417 else
12418 {
12419 /* Output a namespace alias. */
12420
12421 /* Force out the namespace we are an alias of, if necessary. */
12422 dw_die_ref origin_die
12423 = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
12424
12425 /* Now create the namespace alias DIE. */
12426 dw_die_ref namespace_die
12427 = new_die (DW_TAG_imported_declaration, context_die, decl);
12428 add_name_and_src_coords_attributes (namespace_die, decl);
12429 add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
12430 equate_decl_number_to_die (decl, namespace_die);
12431 }
12432 }
12433
12434 /* Generate Dwarf debug information for a decl described by DECL. */
12435
12436 static void
12437 gen_decl_die (tree decl, dw_die_ref context_die)
12438 {
12439 tree origin;
12440
12441 if (DECL_P (decl) && DECL_IGNORED_P (decl))
12442 return;
12443
12444 switch (TREE_CODE (decl))
12445 {
12446 case ERROR_MARK:
12447 break;
12448
12449 case CONST_DECL:
12450 /* The individual enumerators of an enum type get output when we output
12451 the Dwarf representation of the relevant enum type itself. */
12452 break;
12453
12454 case FUNCTION_DECL:
12455 /* Don't output any DIEs to represent mere function declarations,
12456 unless they are class members or explicit block externs. */
12457 if (DECL_INITIAL (decl) == NULL_TREE && DECL_CONTEXT (decl) == NULL_TREE
12458 && (current_function_decl == NULL_TREE || DECL_ARTIFICIAL (decl)))
12459 break;
12460
12461 /* If we're emitting a clone, emit info for the abstract instance. */
12462 if (DECL_ORIGIN (decl) != decl)
12463 dwarf2out_abstract_function (DECL_ABSTRACT_ORIGIN (decl));
12464
12465 /* If we're emitting an out-of-line copy of an inline function,
12466 emit info for the abstract instance and set up to refer to it. */
12467 else if (cgraph_function_possibly_inlined_p (decl)
12468 && ! DECL_ABSTRACT (decl)
12469 && ! class_or_namespace_scope_p (context_die)
12470 /* dwarf2out_abstract_function won't emit a die if this is just
12471 a declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
12472 that case, because that works only if we have a die. */
12473 && DECL_INITIAL (decl) != NULL_TREE)
12474 {
12475 dwarf2out_abstract_function (decl);
12476 set_decl_origin_self (decl);
12477 }
12478
12479 /* Otherwise we're emitting the primary DIE for this decl. */
12480 else if (debug_info_level > DINFO_LEVEL_TERSE)
12481 {
12482 /* Before we describe the FUNCTION_DECL itself, make sure that we
12483 have described its return type. */
12484 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
12485
12486 /* And its virtual context. */
12487 if (DECL_VINDEX (decl) != NULL_TREE)
12488 gen_type_die (DECL_CONTEXT (decl), context_die);
12489
12490 /* And its containing type. */
12491 origin = decl_class_context (decl);
12492 if (origin != NULL_TREE)
12493 gen_type_die_for_member (origin, decl, context_die);
12494
12495 /* And its containing namespace. */
12496 declare_in_namespace (decl, context_die);
12497 }
12498
12499 /* Now output a DIE to represent the function itself. */
12500 gen_subprogram_die (decl, context_die);
12501 break;
12502
12503 case TYPE_DECL:
12504 /* If we are in terse mode, don't generate any DIEs to represent any
12505 actual typedefs. */
12506 if (debug_info_level <= DINFO_LEVEL_TERSE)
12507 break;
12508
12509 /* In the special case of a TYPE_DECL node representing the declaration
12510 of some type tag, if the given TYPE_DECL is marked as having been
12511 instantiated from some other (original) TYPE_DECL node (e.g. one which
12512 was generated within the original definition of an inline function) we
12513 have to generate a special (abbreviated) DW_TAG_structure_type,
12514 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. */
12515 if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
12516 {
12517 gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die);
12518 break;
12519 }
12520
12521 if (is_redundant_typedef (decl))
12522 gen_type_die (TREE_TYPE (decl), context_die);
12523 else
12524 /* Output a DIE to represent the typedef itself. */
12525 gen_typedef_die (decl, context_die);
12526 break;
12527
12528 case LABEL_DECL:
12529 if (debug_info_level >= DINFO_LEVEL_NORMAL)
12530 gen_label_die (decl, context_die);
12531 break;
12532
12533 case VAR_DECL:
12534 /* If we are in terse mode, don't generate any DIEs to represent any
12535 variable declarations or definitions. */
12536 if (debug_info_level <= DINFO_LEVEL_TERSE)
12537 break;
12538
12539 /* Output any DIEs that are needed to specify the type of this data
12540 object. */
12541 gen_type_die (TREE_TYPE (decl), context_die);
12542
12543 /* And its containing type. */
12544 origin = decl_class_context (decl);
12545 if (origin != NULL_TREE)
12546 gen_type_die_for_member (origin, decl, context_die);
12547
12548 /* And its containing namespace. */
12549 declare_in_namespace (decl, context_die);
12550
12551 /* Now output the DIE to represent the data object itself. This gets
12552 complicated because of the possibility that the VAR_DECL really
12553 represents an inlined instance of a formal parameter for an inline
12554 function. */
12555 origin = decl_ultimate_origin (decl);
12556 if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
12557 gen_formal_parameter_die (decl, context_die);
12558 else
12559 gen_variable_die (decl, context_die);
12560 break;
12561
12562 case FIELD_DECL:
12563 /* Ignore the nameless fields that are used to skip bits but handle C++
12564 anonymous unions and structs. */
12565 if (DECL_NAME (decl) != NULL_TREE
12566 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
12567 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
12568 {
12569 gen_type_die (member_declared_type (decl), context_die);
12570 gen_field_die (decl, context_die);
12571 }
12572 break;
12573
12574 case PARM_DECL:
12575 gen_type_die (TREE_TYPE (decl), context_die);
12576 gen_formal_parameter_die (decl, context_die);
12577 break;
12578
12579 case NAMESPACE_DECL:
12580 gen_namespace_die (decl);
12581 break;
12582
12583 default:
12584 if ((int)TREE_CODE (decl) > NUM_TREE_CODES)
12585 /* Probably some frontend-internal decl. Assume we don't care. */
12586 break;
12587 abort ();
12588 }
12589 }
12590 \f
12591 /* Add Ada "use" clause information for SGI Workshop debugger. */
12592
12593 void
12594 dwarf2out_add_library_unit_info (const char *filename, const char *context_list)
12595 {
12596 unsigned int file_index;
12597
12598 if (filename != NULL)
12599 {
12600 dw_die_ref unit_die = new_die (DW_TAG_module, comp_unit_die, NULL);
12601 tree context_list_decl
12602 = build_decl (LABEL_DECL, get_identifier (context_list),
12603 void_type_node);
12604
12605 TREE_PUBLIC (context_list_decl) = TRUE;
12606 add_name_attribute (unit_die, context_list);
12607 file_index = lookup_filename (filename);
12608 add_AT_unsigned (unit_die, DW_AT_decl_file, file_index);
12609 add_pubname (context_list_decl, unit_die);
12610 }
12611 }
12612
12613 /* Output debug information for global decl DECL. Called from toplev.c after
12614 compilation proper has finished. */
12615
12616 static void
12617 dwarf2out_global_decl (tree decl)
12618 {
12619 /* Output DWARF2 information for file-scope tentative data object
12620 declarations, file-scope (extern) function declarations (which had no
12621 corresponding body) and file-scope tagged type declarations and
12622 definitions which have not yet been forced out. */
12623 if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
12624 dwarf2out_decl (decl);
12625 }
12626
12627 /* Output debug information for type decl DECL. Called from toplev.c
12628 and from language front ends (to record built-in types). */
12629 static void
12630 dwarf2out_type_decl (tree decl, int local)
12631 {
12632 if (!local)
12633 dwarf2out_decl (decl);
12634 }
12635
12636 /* Output debug information for imported module or decl. */
12637
12638 static void
12639 dwarf2out_imported_module_or_decl (tree decl, tree context)
12640 {
12641 dw_die_ref imported_die, at_import_die;
12642 dw_die_ref scope_die;
12643 unsigned file_index;
12644
12645 if (debug_info_level <= DINFO_LEVEL_TERSE)
12646 return;
12647
12648 if (!decl)
12649 abort ();
12650
12651 /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
12652 We need decl DIE for reference and scope die. First, get DIE for the decl
12653 itself. */
12654
12655 /* Get the scope die for decl context. Use comp_unit_die for global module
12656 or decl. If die is not found for non globals, force new die. */
12657 if (!context)
12658 scope_die = comp_unit_die;
12659 else if (TYPE_P (context))
12660 scope_die = force_type_die (context);
12661 else
12662 scope_die = force_decl_die (context);
12663
12664 /* For TYPE_DECL, lookup TREE_TYPE. */
12665 if (TREE_CODE (decl) == TYPE_DECL)
12666 at_import_die = force_type_die (TREE_TYPE (decl));
12667 else
12668 at_import_die = force_decl_die (decl);
12669
12670 /* OK, now we have DIEs for decl as well as scope. Emit imported die. */
12671 if (TREE_CODE (decl) == NAMESPACE_DECL)
12672 imported_die = new_die (DW_TAG_imported_module, scope_die, context);
12673 else
12674 imported_die = new_die (DW_TAG_imported_declaration, scope_die, context);
12675
12676 file_index = lookup_filename (input_filename);
12677 add_AT_unsigned (imported_die, DW_AT_decl_file, file_index);
12678 add_AT_unsigned (imported_die, DW_AT_decl_line, input_line);
12679 add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
12680 }
12681
12682 /* Write the debugging output for DECL. */
12683
12684 void
12685 dwarf2out_decl (tree decl)
12686 {
12687 dw_die_ref context_die = comp_unit_die;
12688
12689 switch (TREE_CODE (decl))
12690 {
12691 case ERROR_MARK:
12692 return;
12693
12694 case FUNCTION_DECL:
12695 /* What we would really like to do here is to filter out all mere
12696 file-scope declarations of file-scope functions which are never
12697 referenced later within this translation unit (and keep all of ones
12698 that *are* referenced later on) but we aren't clairvoyant, so we have
12699 no idea which functions will be referenced in the future (i.e. later
12700 on within the current translation unit). So here we just ignore all
12701 file-scope function declarations which are not also definitions. If
12702 and when the debugger needs to know something about these functions,
12703 it will have to hunt around and find the DWARF information associated
12704 with the definition of the function.
12705
12706 We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
12707 nodes represent definitions and which ones represent mere
12708 declarations. We have to check DECL_INITIAL instead. That's because
12709 the C front-end supports some weird semantics for "extern inline"
12710 function definitions. These can get inlined within the current
12711 translation unit (an thus, we need to generate Dwarf info for their
12712 abstract instances so that the Dwarf info for the concrete inlined
12713 instances can have something to refer to) but the compiler never
12714 generates any out-of-lines instances of such things (despite the fact
12715 that they *are* definitions).
12716
12717 The important point is that the C front-end marks these "extern
12718 inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
12719 them anyway. Note that the C++ front-end also plays some similar games
12720 for inline function definitions appearing within include files which
12721 also contain `#pragma interface' pragmas. */
12722 if (DECL_INITIAL (decl) == NULL_TREE)
12723 return;
12724
12725 /* If we're a nested function, initially use a parent of NULL; if we're
12726 a plain function, this will be fixed up in decls_for_scope. If
12727 we're a method, it will be ignored, since we already have a DIE. */
12728 if (decl_function_context (decl)
12729 /* But if we're in terse mode, we don't care about scope. */
12730 && debug_info_level > DINFO_LEVEL_TERSE)
12731 context_die = NULL;
12732 break;
12733
12734 case VAR_DECL:
12735 /* Ignore this VAR_DECL if it refers to a file-scope extern data object
12736 declaration and if the declaration was never even referenced from
12737 within this entire compilation unit. We suppress these DIEs in
12738 order to save space in the .debug section (by eliminating entries
12739 which are probably useless). Note that we must not suppress
12740 block-local extern declarations (whether used or not) because that
12741 would screw-up the debugger's name lookup mechanism and cause it to
12742 miss things which really ought to be in scope at a given point. */
12743 if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
12744 return;
12745
12746 /* If we are in terse mode, don't generate any DIEs to represent any
12747 variable declarations or definitions. */
12748 if (debug_info_level <= DINFO_LEVEL_TERSE)
12749 return;
12750 break;
12751
12752 case NAMESPACE_DECL:
12753 if (debug_info_level <= DINFO_LEVEL_TERSE)
12754 return;
12755 if (lookup_decl_die (decl) != NULL)
12756 return;
12757 break;
12758
12759 case TYPE_DECL:
12760 /* Don't emit stubs for types unless they are needed by other DIEs. */
12761 if (TYPE_DECL_SUPPRESS_DEBUG (decl))
12762 return;
12763
12764 /* Don't bother trying to generate any DIEs to represent any of the
12765 normal built-in types for the language we are compiling. */
12766 if (DECL_SOURCE_LINE (decl) == 0)
12767 {
12768 /* OK, we need to generate one for `bool' so GDB knows what type
12769 comparisons have. */
12770 if ((get_AT_unsigned (comp_unit_die, DW_AT_language)
12771 == DW_LANG_C_plus_plus)
12772 && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
12773 && ! DECL_IGNORED_P (decl))
12774 modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
12775
12776 return;
12777 }
12778
12779 /* If we are in terse mode, don't generate any DIEs for types. */
12780 if (debug_info_level <= DINFO_LEVEL_TERSE)
12781 return;
12782
12783 /* If we're a function-scope tag, initially use a parent of NULL;
12784 this will be fixed up in decls_for_scope. */
12785 if (decl_function_context (decl))
12786 context_die = NULL;
12787
12788 break;
12789
12790 default:
12791 return;
12792 }
12793
12794 gen_decl_die (decl, context_die);
12795 }
12796
12797 /* Output a marker (i.e. a label) for the beginning of the generated code for
12798 a lexical block. */
12799
12800 static void
12801 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
12802 unsigned int blocknum)
12803 {
12804 function_section (current_function_decl);
12805 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
12806 }
12807
12808 /* Output a marker (i.e. a label) for the end of the generated code for a
12809 lexical block. */
12810
12811 static void
12812 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
12813 {
12814 function_section (current_function_decl);
12815 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
12816 }
12817
12818 /* Returns nonzero if it is appropriate not to emit any debugging
12819 information for BLOCK, because it doesn't contain any instructions.
12820
12821 Don't allow this for blocks with nested functions or local classes
12822 as we would end up with orphans, and in the presence of scheduling
12823 we may end up calling them anyway. */
12824
12825 static bool
12826 dwarf2out_ignore_block (tree block)
12827 {
12828 tree decl;
12829
12830 for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
12831 if (TREE_CODE (decl) == FUNCTION_DECL
12832 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
12833 return 0;
12834
12835 return 1;
12836 }
12837
12838 /* Lookup FILE_NAME (in the list of filenames that we know about here in
12839 dwarf2out.c) and return its "index". The index of each (known) filename is
12840 just a unique number which is associated with only that one filename. We
12841 need such numbers for the sake of generating labels (in the .debug_sfnames
12842 section) and references to those files numbers (in the .debug_srcinfo
12843 and.debug_macinfo sections). If the filename given as an argument is not
12844 found in our current list, add it to the list and assign it the next
12845 available unique index number. In order to speed up searches, we remember
12846 the index of the filename was looked up last. This handles the majority of
12847 all searches. */
12848
12849 static unsigned
12850 lookup_filename (const char *file_name)
12851 {
12852 size_t i, n;
12853 char *save_file_name;
12854
12855 /* Check to see if the file name that was searched on the previous
12856 call matches this file name. If so, return the index. */
12857 if (file_table_last_lookup_index != 0)
12858 {
12859 const char *last
12860 = VARRAY_CHAR_PTR (file_table, file_table_last_lookup_index);
12861 if (strcmp (file_name, last) == 0)
12862 return file_table_last_lookup_index;
12863 }
12864
12865 /* Didn't match the previous lookup, search the table */
12866 n = VARRAY_ACTIVE_SIZE (file_table);
12867 for (i = 1; i < n; i++)
12868 if (strcmp (file_name, VARRAY_CHAR_PTR (file_table, i)) == 0)
12869 {
12870 file_table_last_lookup_index = i;
12871 return i;
12872 }
12873
12874 /* Add the new entry to the end of the filename table. */
12875 file_table_last_lookup_index = n;
12876 save_file_name = (char *) ggc_strdup (file_name);
12877 VARRAY_PUSH_CHAR_PTR (file_table, save_file_name);
12878 VARRAY_PUSH_UINT (file_table_emitted, 0);
12879
12880 return i;
12881 }
12882
12883 static int
12884 maybe_emit_file (int fileno)
12885 {
12886 if (DWARF2_ASM_LINE_DEBUG_INFO && fileno > 0)
12887 {
12888 if (!VARRAY_UINT (file_table_emitted, fileno))
12889 {
12890 VARRAY_UINT (file_table_emitted, fileno) = ++emitcount;
12891 fprintf (asm_out_file, "\t.file %u ",
12892 VARRAY_UINT (file_table_emitted, fileno));
12893 output_quoted_string (asm_out_file,
12894 VARRAY_CHAR_PTR (file_table, fileno));
12895 fputc ('\n', asm_out_file);
12896 }
12897 return VARRAY_UINT (file_table_emitted, fileno);
12898 }
12899 else
12900 return fileno;
12901 }
12902
12903 static void
12904 init_file_table (void)
12905 {
12906 /* Allocate the initial hunk of the file_table. */
12907 VARRAY_CHAR_PTR_INIT (file_table, 64, "file_table");
12908 VARRAY_UINT_INIT (file_table_emitted, 64, "file_table_emitted");
12909
12910 /* Skip the first entry - file numbers begin at 1. */
12911 VARRAY_PUSH_CHAR_PTR (file_table, NULL);
12912 VARRAY_PUSH_UINT (file_table_emitted, 0);
12913 file_table_last_lookup_index = 0;
12914 }
12915
12916 /* Called by the final INSN scan whenever we see a var location. We
12917 use it to drop labels in the right places, and throw the location in
12918 our lookup table. */
12919
12920 static void
12921 dwarf2out_var_location (rtx loc_note)
12922 {
12923 char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
12924 struct var_loc_node *newloc;
12925 rtx prev_insn;
12926 static rtx last_insn;
12927 static const char *last_label;
12928
12929 if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
12930 return;
12931 prev_insn = PREV_INSN (loc_note);
12932
12933 newloc = ggc_alloc_cleared (sizeof (struct var_loc_node));
12934 /* If the insn we processed last time is the previous insn
12935 and it is also a var location note, use the label we emitted
12936 last time. */
12937 if (last_insn != NULL_RTX
12938 && last_insn == prev_insn
12939 && GET_CODE (prev_insn) == NOTE
12940 && NOTE_LINE_NUMBER (prev_insn) == NOTE_INSN_VAR_LOCATION)
12941 {
12942 newloc->label = last_label;
12943 }
12944 else
12945 {
12946 ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
12947 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
12948 loclabel_num++;
12949 newloc->label = ggc_strdup (loclabel);
12950 }
12951 newloc->var_loc_note = loc_note;
12952 newloc->next = NULL;
12953
12954 last_insn = loc_note;
12955 last_label = newloc->label;
12956
12957 add_var_loc_to_decl (NOTE_VAR_LOCATION_DECL (loc_note), newloc);
12958 }
12959
12960 /* We need to reset the locations at the beginning of each
12961 function. We can't do this in the end_function hook, because the
12962 declarations that use the locations won't have been outputted when
12963 that hook is called. */
12964
12965 static void
12966 dwarf2out_begin_function (tree unused ATTRIBUTE_UNUSED)
12967 {
12968 htab_empty (decl_loc_table);
12969 }
12970
12971 /* Output a label to mark the beginning of a source code line entry
12972 and record information relating to this source line, in
12973 'line_info_table' for later output of the .debug_line section. */
12974
12975 static void
12976 dwarf2out_source_line (unsigned int line, const char *filename)
12977 {
12978 if (debug_info_level >= DINFO_LEVEL_NORMAL
12979 && line != 0)
12980 {
12981 function_section (current_function_decl);
12982
12983 /* If requested, emit something human-readable. */
12984 if (flag_debug_asm)
12985 fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
12986 filename, line);
12987
12988 if (DWARF2_ASM_LINE_DEBUG_INFO)
12989 {
12990 unsigned file_num = lookup_filename (filename);
12991
12992 file_num = maybe_emit_file (file_num);
12993
12994 /* Emit the .loc directive understood by GNU as. */
12995 fprintf (asm_out_file, "\t.loc %d %d 0\n", file_num, line);
12996
12997 /* Indicate that line number info exists. */
12998 line_info_table_in_use++;
12999
13000 /* Indicate that multiple line number tables exist. */
13001 if (DECL_SECTION_NAME (current_function_decl))
13002 separate_line_info_table_in_use++;
13003 }
13004 else if (DECL_SECTION_NAME (current_function_decl))
13005 {
13006 dw_separate_line_info_ref line_info;
13007 (*targetm.asm_out.internal_label) (asm_out_file, SEPARATE_LINE_CODE_LABEL,
13008 separate_line_info_table_in_use);
13009
13010 /* Expand the line info table if necessary. */
13011 if (separate_line_info_table_in_use
13012 == separate_line_info_table_allocated)
13013 {
13014 separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
13015 separate_line_info_table
13016 = ggc_realloc (separate_line_info_table,
13017 separate_line_info_table_allocated
13018 * sizeof (dw_separate_line_info_entry));
13019 memset (separate_line_info_table
13020 + separate_line_info_table_in_use,
13021 0,
13022 (LINE_INFO_TABLE_INCREMENT
13023 * sizeof (dw_separate_line_info_entry)));
13024 }
13025
13026 /* Add the new entry at the end of the line_info_table. */
13027 line_info
13028 = &separate_line_info_table[separate_line_info_table_in_use++];
13029 line_info->dw_file_num = lookup_filename (filename);
13030 line_info->dw_line_num = line;
13031 line_info->function = current_function_funcdef_no;
13032 }
13033 else
13034 {
13035 dw_line_info_ref line_info;
13036
13037 (*targetm.asm_out.internal_label) (asm_out_file, LINE_CODE_LABEL,
13038 line_info_table_in_use);
13039
13040 /* Expand the line info table if necessary. */
13041 if (line_info_table_in_use == line_info_table_allocated)
13042 {
13043 line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
13044 line_info_table
13045 = ggc_realloc (line_info_table,
13046 (line_info_table_allocated
13047 * sizeof (dw_line_info_entry)));
13048 memset (line_info_table + line_info_table_in_use, 0,
13049 LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
13050 }
13051
13052 /* Add the new entry at the end of the line_info_table. */
13053 line_info = &line_info_table[line_info_table_in_use++];
13054 line_info->dw_file_num = lookup_filename (filename);
13055 line_info->dw_line_num = line;
13056 }
13057 }
13058 }
13059
13060 /* Record the beginning of a new source file. */
13061
13062 static void
13063 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
13064 {
13065 if (flag_eliminate_dwarf2_dups)
13066 {
13067 /* Record the beginning of the file for break_out_includes. */
13068 dw_die_ref bincl_die;
13069
13070 bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
13071 add_AT_string (bincl_die, DW_AT_name, filename);
13072 }
13073
13074 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13075 {
13076 named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13077 dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
13078 dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
13079 lineno);
13080 maybe_emit_file (lookup_filename (filename));
13081 dw2_asm_output_data_uleb128 (lookup_filename (filename),
13082 "Filename we just started");
13083 }
13084 }
13085
13086 /* Record the end of a source file. */
13087
13088 static void
13089 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
13090 {
13091 if (flag_eliminate_dwarf2_dups)
13092 /* Record the end of the file for break_out_includes. */
13093 new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
13094
13095 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13096 {
13097 named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13098 dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
13099 }
13100 }
13101
13102 /* Called from debug_define in toplev.c. The `buffer' parameter contains
13103 the tail part of the directive line, i.e. the part which is past the
13104 initial whitespace, #, whitespace, directive-name, whitespace part. */
13105
13106 static void
13107 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
13108 const char *buffer ATTRIBUTE_UNUSED)
13109 {
13110 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13111 {
13112 named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13113 dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
13114 dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13115 dw2_asm_output_nstring (buffer, -1, "The macro");
13116 }
13117 }
13118
13119 /* Called from debug_undef in toplev.c. The `buffer' parameter contains
13120 the tail part of the directive line, i.e. the part which is past the
13121 initial whitespace, #, whitespace, directive-name, whitespace part. */
13122
13123 static void
13124 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
13125 const char *buffer ATTRIBUTE_UNUSED)
13126 {
13127 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13128 {
13129 named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13130 dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
13131 dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13132 dw2_asm_output_nstring (buffer, -1, "The macro");
13133 }
13134 }
13135
13136 /* Set up for Dwarf output at the start of compilation. */
13137
13138 static void
13139 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
13140 {
13141 init_file_table ();
13142
13143 /* Allocate the decl_die_table. */
13144 decl_die_table = htab_create_ggc (10, decl_die_table_hash,
13145 decl_die_table_eq, NULL);
13146
13147 /* Allocate the decl_loc_table. */
13148 decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
13149 decl_loc_table_eq, NULL);
13150
13151 /* Allocate the initial hunk of the decl_scope_table. */
13152 VARRAY_TREE_INIT (decl_scope_table, 256, "decl_scope_table");
13153
13154 /* Allocate the initial hunk of the abbrev_die_table. */
13155 abbrev_die_table = ggc_alloc_cleared (ABBREV_DIE_TABLE_INCREMENT
13156 * sizeof (dw_die_ref));
13157 abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
13158 /* Zero-th entry is allocated, but unused */
13159 abbrev_die_table_in_use = 1;
13160
13161 /* Allocate the initial hunk of the line_info_table. */
13162 line_info_table = ggc_alloc_cleared (LINE_INFO_TABLE_INCREMENT
13163 * sizeof (dw_line_info_entry));
13164 line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
13165
13166 /* Zero-th entry is allocated, but unused */
13167 line_info_table_in_use = 1;
13168
13169 /* Generate the initial DIE for the .debug section. Note that the (string)
13170 value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
13171 will (typically) be a relative pathname and that this pathname should be
13172 taken as being relative to the directory from which the compiler was
13173 invoked when the given (base) source file was compiled. We will fill
13174 in this value in dwarf2out_finish. */
13175 comp_unit_die = gen_compile_unit_die (NULL);
13176
13177 VARRAY_TREE_INIT (incomplete_types, 64, "incomplete_types");
13178
13179 VARRAY_RTX_INIT (used_rtx_varray, 32, "used_rtx_varray");
13180
13181 ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
13182 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
13183 DEBUG_ABBREV_SECTION_LABEL, 0);
13184 if (DWARF2_GENERATE_TEXT_SECTION_LABEL)
13185 ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
13186 else
13187 strcpy (text_section_label, stripattributes (TEXT_SECTION_NAME));
13188
13189 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
13190 DEBUG_INFO_SECTION_LABEL, 0);
13191 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
13192 DEBUG_LINE_SECTION_LABEL, 0);
13193 ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
13194 DEBUG_RANGES_SECTION_LABEL, 0);
13195 named_section_flags (DEBUG_ABBREV_SECTION, SECTION_DEBUG);
13196 ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
13197 named_section_flags (DEBUG_INFO_SECTION, SECTION_DEBUG);
13198 ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
13199 named_section_flags (DEBUG_LINE_SECTION, SECTION_DEBUG);
13200 ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
13201
13202 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13203 {
13204 named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13205 ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
13206 DEBUG_MACINFO_SECTION_LABEL, 0);
13207 ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
13208 }
13209
13210 if (DWARF2_GENERATE_TEXT_SECTION_LABEL)
13211 {
13212 text_section ();
13213 ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
13214 }
13215 }
13216
13217 /* A helper function for dwarf2out_finish called through
13218 ht_forall. Emit one queued .debug_str string. */
13219
13220 static int
13221 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
13222 {
13223 struct indirect_string_node *node = (struct indirect_string_node *) *h;
13224
13225 if (node->form == DW_FORM_strp)
13226 {
13227 named_section_flags (DEBUG_STR_SECTION, DEBUG_STR_SECTION_FLAGS);
13228 ASM_OUTPUT_LABEL (asm_out_file, node->label);
13229 assemble_string (node->str, strlen (node->str) + 1);
13230 }
13231
13232 return 1;
13233 }
13234
13235
13236
13237 /* Clear the marks for a die and its children.
13238 Be cool if the mark isn't set. */
13239
13240 static void
13241 prune_unmark_dies (dw_die_ref die)
13242 {
13243 dw_die_ref c;
13244 die->die_mark = 0;
13245 for (c = die->die_child; c; c = c->die_sib)
13246 prune_unmark_dies (c);
13247 }
13248
13249
13250 /* Given DIE that we're marking as used, find any other dies
13251 it references as attributes and mark them as used. */
13252
13253 static void
13254 prune_unused_types_walk_attribs (dw_die_ref die)
13255 {
13256 dw_attr_ref a;
13257
13258 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
13259 {
13260 if (a->dw_attr_val.val_class == dw_val_class_die_ref)
13261 {
13262 /* A reference to another DIE.
13263 Make sure that it will get emitted. */
13264 prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
13265 }
13266 else if (a->dw_attr == DW_AT_decl_file)
13267 {
13268 /* A reference to a file. Make sure the file name is emitted. */
13269 a->dw_attr_val.v.val_unsigned =
13270 maybe_emit_file (a->dw_attr_val.v.val_unsigned);
13271 }
13272 }
13273 }
13274
13275
13276 /* Mark DIE as being used. If DOKIDS is true, then walk down
13277 to DIE's children. */
13278
13279 static void
13280 prune_unused_types_mark (dw_die_ref die, int dokids)
13281 {
13282 dw_die_ref c;
13283
13284 if (die->die_mark == 0)
13285 {
13286 /* We haven't done this node yet. Mark it as used. */
13287 die->die_mark = 1;
13288
13289 /* We also have to mark its parents as used.
13290 (But we don't want to mark our parents' kids due to this.) */
13291 if (die->die_parent)
13292 prune_unused_types_mark (die->die_parent, 0);
13293
13294 /* Mark any referenced nodes. */
13295 prune_unused_types_walk_attribs (die);
13296
13297 /* If this node is a specification,
13298 also mark the definition, if it exists. */
13299 if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
13300 prune_unused_types_mark (die->die_definition, 1);
13301 }
13302
13303 if (dokids && die->die_mark != 2)
13304 {
13305 /* We need to walk the children, but haven't done so yet.
13306 Remember that we've walked the kids. */
13307 die->die_mark = 2;
13308
13309 /* Walk them. */
13310 for (c = die->die_child; c; c = c->die_sib)
13311 {
13312 /* If this is an array type, we need to make sure our
13313 kids get marked, even if they're types. */
13314 if (die->die_tag == DW_TAG_array_type)
13315 prune_unused_types_mark (c, 1);
13316 else
13317 prune_unused_types_walk (c);
13318 }
13319 }
13320 }
13321
13322
13323 /* Walk the tree DIE and mark types that we actually use. */
13324
13325 static void
13326 prune_unused_types_walk (dw_die_ref die)
13327 {
13328 dw_die_ref c;
13329
13330 /* Don't do anything if this node is already marked. */
13331 if (die->die_mark)
13332 return;
13333
13334 switch (die->die_tag) {
13335 case DW_TAG_const_type:
13336 case DW_TAG_packed_type:
13337 case DW_TAG_pointer_type:
13338 case DW_TAG_reference_type:
13339 case DW_TAG_volatile_type:
13340 case DW_TAG_typedef:
13341 case DW_TAG_array_type:
13342 case DW_TAG_structure_type:
13343 case DW_TAG_union_type:
13344 case DW_TAG_class_type:
13345 case DW_TAG_friend:
13346 case DW_TAG_variant_part:
13347 case DW_TAG_enumeration_type:
13348 case DW_TAG_subroutine_type:
13349 case DW_TAG_string_type:
13350 case DW_TAG_set_type:
13351 case DW_TAG_subrange_type:
13352 case DW_TAG_ptr_to_member_type:
13353 case DW_TAG_file_type:
13354 /* It's a type node --- don't mark it. */
13355 return;
13356
13357 default:
13358 /* Mark everything else. */
13359 break;
13360 }
13361
13362 die->die_mark = 1;
13363
13364 /* Now, mark any dies referenced from here. */
13365 prune_unused_types_walk_attribs (die);
13366
13367 /* Mark children. */
13368 for (c = die->die_child; c; c = c->die_sib)
13369 prune_unused_types_walk (c);
13370 }
13371
13372
13373 /* Remove from the tree DIE any dies that aren't marked. */
13374
13375 static void
13376 prune_unused_types_prune (dw_die_ref die)
13377 {
13378 dw_die_ref c, p, n;
13379 if (!die->die_mark)
13380 abort();
13381
13382 p = NULL;
13383 for (c = die->die_child; c; c = n)
13384 {
13385 n = c->die_sib;
13386 if (c->die_mark)
13387 {
13388 prune_unused_types_prune (c);
13389 p = c;
13390 }
13391 else
13392 {
13393 if (p)
13394 p->die_sib = n;
13395 else
13396 die->die_child = n;
13397 free_die (c);
13398 }
13399 }
13400 }
13401
13402
13403 /* Remove dies representing declarations that we never use. */
13404
13405 static void
13406 prune_unused_types (void)
13407 {
13408 unsigned int i;
13409 limbo_die_node *node;
13410
13411 /* Clear all the marks. */
13412 prune_unmark_dies (comp_unit_die);
13413 for (node = limbo_die_list; node; node = node->next)
13414 prune_unmark_dies (node->die);
13415
13416 /* Set the mark on nodes that are actually used. */
13417 prune_unused_types_walk (comp_unit_die);
13418 for (node = limbo_die_list; node; node = node->next)
13419 prune_unused_types_walk (node->die);
13420
13421 /* Also set the mark on nodes referenced from the
13422 pubname_table or arange_table. */
13423 for (i = 0; i < pubname_table_in_use; i++)
13424 prune_unused_types_mark (pubname_table[i].die, 1);
13425 for (i = 0; i < arange_table_in_use; i++)
13426 prune_unused_types_mark (arange_table[i], 1);
13427
13428 /* Get rid of nodes that aren't marked. */
13429 prune_unused_types_prune (comp_unit_die);
13430 for (node = limbo_die_list; node; node = node->next)
13431 prune_unused_types_prune (node->die);
13432
13433 /* Leave the marks clear. */
13434 prune_unmark_dies (comp_unit_die);
13435 for (node = limbo_die_list; node; node = node->next)
13436 prune_unmark_dies (node->die);
13437 }
13438
13439 /* Output stuff that dwarf requires at the end of every file,
13440 and generate the DWARF-2 debugging info. */
13441
13442 static void
13443 dwarf2out_finish (const char *filename)
13444 {
13445 limbo_die_node *node, *next_node;
13446 dw_die_ref die = 0;
13447
13448 /* Add the name for the main input file now. We delayed this from
13449 dwarf2out_init to avoid complications with PCH. */
13450 add_name_attribute (comp_unit_die, filename);
13451 if (filename[0] != DIR_SEPARATOR)
13452 add_comp_dir_attribute (comp_unit_die);
13453 else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
13454 {
13455 size_t i;
13456 for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
13457 if (VARRAY_CHAR_PTR (file_table, i)[0] != DIR_SEPARATOR
13458 /* Don't add cwd for <built-in>. */
13459 && VARRAY_CHAR_PTR (file_table, i)[0] != '<')
13460 {
13461 add_comp_dir_attribute (comp_unit_die);
13462 break;
13463 }
13464 }
13465
13466 /* Traverse the limbo die list, and add parent/child links. The only
13467 dies without parents that should be here are concrete instances of
13468 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
13469 For concrete instances, we can get the parent die from the abstract
13470 instance. */
13471 for (node = limbo_die_list; node; node = next_node)
13472 {
13473 next_node = node->next;
13474 die = node->die;
13475
13476 if (die->die_parent == NULL)
13477 {
13478 dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
13479 tree context;
13480
13481 if (origin)
13482 add_child_die (origin->die_parent, die);
13483 else if (die == comp_unit_die)
13484 ;
13485 /* If this was an expression for a bound involved in a function
13486 return type, it may be a SAVE_EXPR for which we weren't able
13487 to find a DIE previously. So try now. */
13488 else if (node->created_for
13489 && TREE_CODE (node->created_for) == SAVE_EXPR
13490 && 0 != (origin = (lookup_decl_die
13491 (SAVE_EXPR_CONTEXT
13492 (node->created_for)))))
13493 add_child_die (origin, die);
13494 else if (errorcount > 0 || sorrycount > 0)
13495 /* It's OK to be confused by errors in the input. */
13496 add_child_die (comp_unit_die, die);
13497 else if (node->created_for
13498 && ((DECL_P (node->created_for)
13499 && (context = DECL_CONTEXT (node->created_for)))
13500 || (TYPE_P (node->created_for)
13501 && (context = TYPE_CONTEXT (node->created_for))))
13502 && TREE_CODE (context) == FUNCTION_DECL)
13503 {
13504 /* In certain situations, the lexical block containing a
13505 nested function can be optimized away, which results
13506 in the nested function die being orphaned. Likewise
13507 with the return type of that nested function. Force
13508 this to be a child of the containing function. */
13509 origin = lookup_decl_die (context);
13510 if (! origin)
13511 abort ();
13512 add_child_die (origin, die);
13513 }
13514 else
13515 abort ();
13516 }
13517 }
13518
13519 limbo_die_list = NULL;
13520
13521 /* Walk through the list of incomplete types again, trying once more to
13522 emit full debugging info for them. */
13523 retry_incomplete_types ();
13524
13525 /* We need to reverse all the dies before break_out_includes, or
13526 we'll see the end of an include file before the beginning. */
13527 reverse_all_dies (comp_unit_die);
13528
13529 if (flag_eliminate_unused_debug_types)
13530 prune_unused_types ();
13531
13532 /* Generate separate CUs for each of the include files we've seen.
13533 They will go into limbo_die_list. */
13534 if (flag_eliminate_dwarf2_dups)
13535 break_out_includes (comp_unit_die);
13536
13537 /* Traverse the DIE's and add add sibling attributes to those DIE's
13538 that have children. */
13539 add_sibling_attributes (comp_unit_die);
13540 for (node = limbo_die_list; node; node = node->next)
13541 add_sibling_attributes (node->die);
13542
13543 /* Output a terminator label for the .text section. */
13544 text_section ();
13545 (*targetm.asm_out.internal_label) (asm_out_file, TEXT_END_LABEL, 0);
13546
13547 /* Output the source line correspondence table. We must do this
13548 even if there is no line information. Otherwise, on an empty
13549 translation unit, we will generate a present, but empty,
13550 .debug_info section. IRIX 6.5 `nm' will then complain when
13551 examining the file. */
13552 if (! DWARF2_ASM_LINE_DEBUG_INFO)
13553 {
13554 named_section_flags (DEBUG_LINE_SECTION, SECTION_DEBUG);
13555 output_line_info ();
13556 }
13557
13558 /* Output location list section if necessary. */
13559 if (have_location_lists)
13560 {
13561 /* Output the location lists info. */
13562 named_section_flags (DEBUG_LOC_SECTION, SECTION_DEBUG);
13563 ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
13564 DEBUG_LOC_SECTION_LABEL, 0);
13565 ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
13566 output_location_lists (die);
13567 have_location_lists = 0;
13568 }
13569
13570 /* We can only use the low/high_pc attributes if all of the code was
13571 in .text. */
13572 if (separate_line_info_table_in_use == 0)
13573 {
13574 add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
13575 add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
13576 }
13577
13578 /* If it wasn't, we need to give .debug_loc and .debug_ranges an appropriate
13579 "base address". Use zero so that these addresses become absolute. */
13580 else if (have_location_lists || ranges_table_in_use)
13581 add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
13582
13583 if (debug_info_level >= DINFO_LEVEL_NORMAL)
13584 add_AT_lbl_offset (comp_unit_die, DW_AT_stmt_list,
13585 debug_line_section_label);
13586
13587 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13588 add_AT_lbl_offset (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
13589
13590 /* Output all of the compilation units. We put the main one last so that
13591 the offsets are available to output_pubnames. */
13592 for (node = limbo_die_list; node; node = node->next)
13593 output_comp_unit (node->die, 0);
13594
13595 output_comp_unit (comp_unit_die, 0);
13596
13597 /* Output the abbreviation table. */
13598 named_section_flags (DEBUG_ABBREV_SECTION, SECTION_DEBUG);
13599 output_abbrev_section ();
13600
13601 /* Output public names table if necessary. */
13602 if (pubname_table_in_use)
13603 {
13604 named_section_flags (DEBUG_PUBNAMES_SECTION, SECTION_DEBUG);
13605 output_pubnames ();
13606 }
13607
13608 /* Output the address range information. We only put functions in the arange
13609 table, so don't write it out if we don't have any. */
13610 if (fde_table_in_use)
13611 {
13612 named_section_flags (DEBUG_ARANGES_SECTION, SECTION_DEBUG);
13613 output_aranges ();
13614 }
13615
13616 /* Output ranges section if necessary. */
13617 if (ranges_table_in_use)
13618 {
13619 named_section_flags (DEBUG_RANGES_SECTION, SECTION_DEBUG);
13620 ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
13621 output_ranges ();
13622 }
13623
13624 /* Have to end the primary source file. */
13625 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13626 {
13627 named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13628 dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
13629 dw2_asm_output_data (1, 0, "End compilation unit");
13630 }
13631
13632 /* If we emitted any DW_FORM_strp form attribute, output the string
13633 table too. */
13634 if (debug_str_hash)
13635 htab_traverse (debug_str_hash, output_indirect_string, NULL);
13636 }
13637 #else
13638
13639 /* This should never be used, but its address is needed for comparisons. */
13640 const struct gcc_debug_hooks dwarf2_debug_hooks;
13641
13642 #endif /* DWARF2_DEBUGGING_INFO */
13643
13644 #include "gt-dwarf2out.h"