1 /* Output Dwarf2 format symbol table information from GCC.
2 Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3 2003, 2004, 2005 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).
8 This file is part of GCC.
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
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
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
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. */
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
39 #include "coretypes.h"
46 #include "hard-reg-set.h"
48 #include "insn-config.h"
56 #include "dwarf2out.h"
57 #include "dwarf2asm.h"
63 #include "diagnostic.h"
66 #include "langhooks.h"
71 #ifdef DWARF2_DEBUGGING_INFO
72 static void dwarf2out_source_line (unsigned int, const char *);
75 /* DWARF2 Abbreviation Glossary:
76 CFA = Canonical Frame Address
77 a fixed address on the stack which identifies a call frame.
78 We define it to be the value of SP just before the call insn.
79 The CFA register and offset, which may change during the course
80 of the function, are used to calculate its value at runtime.
81 CFI = Call Frame Instruction
82 an instruction for the DWARF2 abstract machine
83 CIE = Common Information Entry
84 information describing information common to one or more FDEs
85 DIE = Debugging Information Entry
86 FDE = Frame Description Entry
87 information describing the stack call frame, in particular,
88 how to restore registers
90 DW_CFA_... = DWARF2 CFA call frame instruction
91 DW_TAG_... = DWARF2 DIE tag */
93 /* Decide whether we want to emit frame unwind information for the current
97 dwarf2out_do_frame (void)
99 return (write_symbols == DWARF2_DEBUG
100 || write_symbols == VMS_AND_DWARF2_DEBUG
101 #ifdef DWARF2_FRAME_INFO
104 #ifdef DWARF2_UNWIND_INFO
105 || flag_unwind_tables
106 || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)
111 /* The size of the target's pointer type. */
113 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
116 /* Various versions of targetm.eh_frame_section. Note these must appear
117 outside the DWARF2_DEBUGGING_INFO || DWARF2_UNWIND_INFO macro guards. */
119 /* Version of targetm.eh_frame_section for systems with named sections. */
121 named_section_eh_frame_section (void)
123 #ifdef EH_FRAME_SECTION_NAME
126 if (EH_TABLES_CAN_BE_READ_ONLY)
132 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
133 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
134 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
136 || ((fde_encoding & 0x70) != DW_EH_PE_absptr
137 && (fde_encoding & 0x70) != DW_EH_PE_aligned
138 && (per_encoding & 0x70) != DW_EH_PE_absptr
139 && (per_encoding & 0x70) != DW_EH_PE_aligned
140 && (lsda_encoding & 0x70) != DW_EH_PE_absptr
141 && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
145 flags = SECTION_WRITE;
146 named_section_flags (EH_FRAME_SECTION_NAME, flags);
150 /* Version of targetm.eh_frame_section for systems using collect2. */
152 collect2_eh_frame_section (void)
154 tree label = get_file_function_name ('F');
157 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
158 targetm.asm_out.globalize_label (asm_out_file, IDENTIFIER_POINTER (label));
159 ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
162 /* Default version of targetm.eh_frame_section. */
164 default_eh_frame_section (void)
166 #ifdef EH_FRAME_SECTION_NAME
167 named_section_eh_frame_section ();
169 collect2_eh_frame_section ();
173 /* Array of RTXes referenced by the debugging information, which therefore
174 must be kept around forever. */
175 static GTY(()) varray_type used_rtx_varray;
177 /* A pointer to the base of a list of incomplete types which might be
178 completed at some later time. incomplete_types_list needs to be a VARRAY
179 because we want to tell the garbage collector about it. */
180 static GTY(()) varray_type incomplete_types;
182 /* A pointer to the base of a table of references to declaration
183 scopes. This table is a display which tracks the nesting
184 of declaration scopes at the current scope and containing
185 scopes. This table is used to find the proper place to
186 define type declaration DIE's. */
187 static GTY(()) varray_type decl_scope_table;
189 /* How to start an assembler comment. */
190 #ifndef ASM_COMMENT_START
191 #define ASM_COMMENT_START ";#"
194 typedef struct dw_cfi_struct *dw_cfi_ref;
195 typedef struct dw_fde_struct *dw_fde_ref;
196 typedef union dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
198 /* Call frames are described using a sequence of Call Frame
199 Information instructions. The register number, offset
200 and address fields are provided as possible operands;
201 their use is selected by the opcode field. */
203 enum dw_cfi_oprnd_type {
205 dw_cfi_oprnd_reg_num,
211 typedef union dw_cfi_oprnd_struct GTY(())
213 unsigned long GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
214 HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
215 const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
216 struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
220 typedef struct dw_cfi_struct GTY(())
222 dw_cfi_ref dw_cfi_next;
223 enum dwarf_call_frame_info dw_cfi_opc;
224 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
226 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
231 /* This is how we define the location of the CFA. We use to handle it
232 as REG + OFFSET all the time, but now it can be more complex.
233 It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
234 Instead of passing around REG and OFFSET, we pass a copy
235 of this structure. */
236 typedef struct cfa_loc GTY(())
239 HOST_WIDE_INT offset;
240 HOST_WIDE_INT base_offset;
241 int indirect; /* 1 if CFA is accessed via a dereference. */
244 /* All call frame descriptions (FDE's) in the GCC generated DWARF
245 refer to a single Common Information Entry (CIE), defined at
246 the beginning of the .debug_frame section. This use of a single
247 CIE obviates the need to keep track of multiple CIE's
248 in the DWARF generation routines below. */
250 typedef struct dw_fde_struct GTY(())
253 const char *dw_fde_begin;
254 const char *dw_fde_current_label;
255 const char *dw_fde_end;
256 const char *dw_fde_hot_section_label;
257 const char *dw_fde_hot_section_end_label;
258 const char *dw_fde_unlikely_section_label;
259 const char *dw_fde_unlikely_section_end_label;
260 bool dw_fde_switched_sections;
261 dw_cfi_ref dw_fde_cfi;
262 unsigned funcdef_number;
263 unsigned all_throwers_are_sibcalls : 1;
264 unsigned nothrow : 1;
265 unsigned uses_eh_lsda : 1;
269 /* Maximum size (in bytes) of an artificially generated label. */
270 #define MAX_ARTIFICIAL_LABEL_BYTES 30
272 /* The size of addresses as they appear in the Dwarf 2 data.
273 Some architectures use word addresses to refer to code locations,
274 but Dwarf 2 info always uses byte addresses. On such machines,
275 Dwarf 2 addresses need to be larger than the architecture's
277 #ifndef DWARF2_ADDR_SIZE
278 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
281 /* The size in bytes of a DWARF field indicating an offset or length
282 relative to a debug info section, specified to be 4 bytes in the
283 DWARF-2 specification. The SGI/MIPS ABI defines it to be the same
286 #ifndef DWARF_OFFSET_SIZE
287 #define DWARF_OFFSET_SIZE 4
290 /* According to the (draft) DWARF 3 specification, the initial length
291 should either be 4 or 12 bytes. When it's 12 bytes, the first 4
292 bytes are 0xffffffff, followed by the length stored in the next 8
295 However, the SGI/MIPS ABI uses an initial length which is equal to
296 DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
298 #ifndef DWARF_INITIAL_LENGTH_SIZE
299 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
302 #define DWARF_VERSION 2
304 /* Round SIZE up to the nearest BOUNDARY. */
305 #define DWARF_ROUND(SIZE,BOUNDARY) \
306 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
308 /* Offsets recorded in opcodes are a multiple of this alignment factor. */
309 #ifndef DWARF_CIE_DATA_ALIGNMENT
310 #ifdef STACK_GROWS_DOWNWARD
311 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
313 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
317 /* A pointer to the base of a table that contains frame description
318 information for each routine. */
319 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
321 /* Number of elements currently allocated for fde_table. */
322 static GTY(()) unsigned fde_table_allocated;
324 /* Number of elements in fde_table currently in use. */
325 static GTY(()) unsigned fde_table_in_use;
327 /* Size (in elements) of increments by which we may expand the
329 #define FDE_TABLE_INCREMENT 256
331 /* A list of call frame insns for the CIE. */
332 static GTY(()) dw_cfi_ref cie_cfi_head;
334 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
335 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
336 attribute that accelerates the lookup of the FDE associated
337 with the subprogram. This variable holds the table index of the FDE
338 associated with the current function (body) definition. */
339 static unsigned current_funcdef_fde;
342 struct indirect_string_node GTY(())
345 unsigned int refcount;
350 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
352 static GTY(()) int dw2_string_counter;
353 static GTY(()) unsigned long dwarf2out_cfi_label_num;
355 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
357 /* Forward declarations for functions defined in this file. */
359 static char *stripattributes (const char *);
360 static const char *dwarf_cfi_name (unsigned);
361 static dw_cfi_ref new_cfi (void);
362 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
363 static void add_fde_cfi (const char *, dw_cfi_ref);
364 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *);
365 static void lookup_cfa (dw_cfa_location *);
366 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
367 static void initial_return_save (rtx);
368 static HOST_WIDE_INT stack_adjust_offset (rtx);
369 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
370 static void output_call_frame_info (int);
371 static void dwarf2out_stack_adjust (rtx, bool);
372 static void flush_queued_reg_saves (void);
373 static bool clobbers_queued_reg_save (rtx);
374 static void dwarf2out_frame_debug_expr (rtx, const char *);
376 /* Support for complex CFA locations. */
377 static void output_cfa_loc (dw_cfi_ref);
378 static void get_cfa_from_loc_descr (dw_cfa_location *,
379 struct dw_loc_descr_struct *);
380 static struct dw_loc_descr_struct *build_cfa_loc
382 static void def_cfa_1 (const char *, dw_cfa_location *);
384 /* How to start an assembler comment. */
385 #ifndef ASM_COMMENT_START
386 #define ASM_COMMENT_START ";#"
389 /* Data and reference forms for relocatable data. */
390 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
391 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
393 #ifndef DEBUG_FRAME_SECTION
394 #define DEBUG_FRAME_SECTION ".debug_frame"
397 #ifndef FUNC_BEGIN_LABEL
398 #define FUNC_BEGIN_LABEL "LFB"
401 #ifndef FUNC_END_LABEL
402 #define FUNC_END_LABEL "LFE"
405 #ifndef FRAME_BEGIN_LABEL
406 #define FRAME_BEGIN_LABEL "Lframe"
408 #define CIE_AFTER_SIZE_LABEL "LSCIE"
409 #define CIE_END_LABEL "LECIE"
410 #define FDE_LABEL "LSFDE"
411 #define FDE_AFTER_SIZE_LABEL "LASFDE"
412 #define FDE_END_LABEL "LEFDE"
413 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
414 #define LINE_NUMBER_END_LABEL "LELT"
415 #define LN_PROLOG_AS_LABEL "LASLTP"
416 #define LN_PROLOG_END_LABEL "LELTP"
417 #define DIE_LABEL_PREFIX "DW"
419 /* The DWARF 2 CFA column which tracks the return address. Normally this
420 is the column for PC, or the first column after all of the hard
422 #ifndef DWARF_FRAME_RETURN_COLUMN
424 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM)
426 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGISTERS
430 /* The mapping from gcc register number to DWARF 2 CFA column number. By
431 default, we just provide columns for all registers. */
432 #ifndef DWARF_FRAME_REGNUM
433 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
436 /* The offset from the incoming value of %sp to the top of the stack frame
437 for the current function. */
438 #ifndef INCOMING_FRAME_SP_OFFSET
439 #define INCOMING_FRAME_SP_OFFSET 0
442 /* Hook used by __throw. */
445 expand_builtin_dwarf_sp_column (void)
447 return GEN_INT (DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
450 /* Return a pointer to a copy of the section string name S with all
451 attributes stripped off, and an asterisk prepended (for assemble_name). */
454 stripattributes (const char *s)
456 char *stripped = xmalloc (strlen (s) + 2);
461 while (*s && *s != ',')
468 /* Generate code to initialize the register size table. */
471 expand_builtin_init_dwarf_reg_sizes (tree address)
474 enum machine_mode mode = TYPE_MODE (char_type_node);
475 rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0);
476 rtx mem = gen_rtx_MEM (BLKmode, addr);
477 bool wrote_return_column = false;
479 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
480 if (DWARF_FRAME_REGNUM (i) < DWARF_FRAME_REGISTERS)
482 HOST_WIDE_INT offset = DWARF_FRAME_REGNUM (i) * GET_MODE_SIZE (mode);
483 enum machine_mode save_mode = reg_raw_mode[i];
486 if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
487 save_mode = choose_hard_reg_mode (i, 1, true);
488 if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
490 if (save_mode == VOIDmode)
492 wrote_return_column = true;
494 size = GET_MODE_SIZE (save_mode);
498 emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
501 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
502 gcc_assert (wrote_return_column);
503 i = DWARF_ALT_FRAME_RETURN_COLUMN;
504 wrote_return_column = false;
506 i = DWARF_FRAME_RETURN_COLUMN;
509 if (! wrote_return_column)
511 enum machine_mode save_mode = Pmode;
512 HOST_WIDE_INT offset = i * GET_MODE_SIZE (mode);
513 HOST_WIDE_INT size = GET_MODE_SIZE (save_mode);
514 emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
518 /* Convert a DWARF call frame info. operation to its string name */
521 dwarf_cfi_name (unsigned int cfi_opc)
525 case DW_CFA_advance_loc:
526 return "DW_CFA_advance_loc";
528 return "DW_CFA_offset";
530 return "DW_CFA_restore";
534 return "DW_CFA_set_loc";
535 case DW_CFA_advance_loc1:
536 return "DW_CFA_advance_loc1";
537 case DW_CFA_advance_loc2:
538 return "DW_CFA_advance_loc2";
539 case DW_CFA_advance_loc4:
540 return "DW_CFA_advance_loc4";
541 case DW_CFA_offset_extended:
542 return "DW_CFA_offset_extended";
543 case DW_CFA_restore_extended:
544 return "DW_CFA_restore_extended";
545 case DW_CFA_undefined:
546 return "DW_CFA_undefined";
547 case DW_CFA_same_value:
548 return "DW_CFA_same_value";
549 case DW_CFA_register:
550 return "DW_CFA_register";
551 case DW_CFA_remember_state:
552 return "DW_CFA_remember_state";
553 case DW_CFA_restore_state:
554 return "DW_CFA_restore_state";
556 return "DW_CFA_def_cfa";
557 case DW_CFA_def_cfa_register:
558 return "DW_CFA_def_cfa_register";
559 case DW_CFA_def_cfa_offset:
560 return "DW_CFA_def_cfa_offset";
563 case DW_CFA_def_cfa_expression:
564 return "DW_CFA_def_cfa_expression";
565 case DW_CFA_expression:
566 return "DW_CFA_expression";
567 case DW_CFA_offset_extended_sf:
568 return "DW_CFA_offset_extended_sf";
569 case DW_CFA_def_cfa_sf:
570 return "DW_CFA_def_cfa_sf";
571 case DW_CFA_def_cfa_offset_sf:
572 return "DW_CFA_def_cfa_offset_sf";
574 /* SGI/MIPS specific */
575 case DW_CFA_MIPS_advance_loc8:
576 return "DW_CFA_MIPS_advance_loc8";
579 case DW_CFA_GNU_window_save:
580 return "DW_CFA_GNU_window_save";
581 case DW_CFA_GNU_args_size:
582 return "DW_CFA_GNU_args_size";
583 case DW_CFA_GNU_negative_offset_extended:
584 return "DW_CFA_GNU_negative_offset_extended";
587 return "DW_CFA_<unknown>";
591 /* Return a pointer to a newly allocated Call Frame Instruction. */
593 static inline dw_cfi_ref
596 dw_cfi_ref cfi = ggc_alloc (sizeof (dw_cfi_node));
598 cfi->dw_cfi_next = NULL;
599 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
600 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
605 /* Add a Call Frame Instruction to list of instructions. */
608 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
612 /* Find the end of the chain. */
613 for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
619 /* Generate a new label for the CFI info to refer to. */
622 dwarf2out_cfi_label (void)
624 static char label[20];
626 ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
627 ASM_OUTPUT_LABEL (asm_out_file, label);
631 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
632 or to the CIE if LABEL is NULL. */
635 add_fde_cfi (const char *label, dw_cfi_ref cfi)
639 dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
642 label = dwarf2out_cfi_label ();
644 if (fde->dw_fde_current_label == NULL
645 || strcmp (label, fde->dw_fde_current_label) != 0)
649 fde->dw_fde_current_label = label = xstrdup (label);
651 /* Set the location counter to the new label. */
653 xcfi->dw_cfi_opc = DW_CFA_advance_loc4;
654 xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
655 add_cfi (&fde->dw_fde_cfi, xcfi);
658 add_cfi (&fde->dw_fde_cfi, cfi);
662 add_cfi (&cie_cfi_head, cfi);
665 /* Subroutine of lookup_cfa. */
668 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc)
670 switch (cfi->dw_cfi_opc)
672 case DW_CFA_def_cfa_offset:
673 loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
675 case DW_CFA_def_cfa_register:
676 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
679 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
680 loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
682 case DW_CFA_def_cfa_expression:
683 get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
690 /* Find the previous value for the CFA. */
693 lookup_cfa (dw_cfa_location *loc)
697 loc->reg = (unsigned long) -1;
700 loc->base_offset = 0;
702 for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
703 lookup_cfa_1 (cfi, loc);
705 if (fde_table_in_use)
707 dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
708 for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
709 lookup_cfa_1 (cfi, loc);
713 /* The current rule for calculating the DWARF2 canonical frame address. */
714 static dw_cfa_location cfa;
716 /* The register used for saving registers to the stack, and its offset
718 static dw_cfa_location cfa_store;
720 /* The running total of the size of arguments pushed onto the stack. */
721 static HOST_WIDE_INT args_size;
723 /* The last args_size we actually output. */
724 static HOST_WIDE_INT old_args_size;
726 /* Entry point to update the canonical frame address (CFA).
727 LABEL is passed to add_fde_cfi. The value of CFA is now to be
728 calculated from REG+OFFSET. */
731 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
738 def_cfa_1 (label, &loc);
741 /* This routine does the actual work. The CFA is now calculated from
742 the dw_cfa_location structure. */
745 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
748 dw_cfa_location old_cfa, loc;
753 if (cfa_store.reg == loc.reg && loc.indirect == 0)
754 cfa_store.offset = loc.offset;
756 loc.reg = DWARF_FRAME_REGNUM (loc.reg);
757 lookup_cfa (&old_cfa);
759 /* If nothing changed, no need to issue any call frame instructions. */
760 if (loc.reg == old_cfa.reg && loc.offset == old_cfa.offset
761 && loc.indirect == old_cfa.indirect
762 && (loc.indirect == 0 || loc.base_offset == old_cfa.base_offset))
767 if (loc.reg == old_cfa.reg && !loc.indirect)
769 /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction,
770 indicating the CFA register did not change but the offset
772 cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
773 cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
776 #ifndef MIPS_DEBUGGING_INFO /* SGI dbx thinks this means no offset. */
777 else if (loc.offset == old_cfa.offset && old_cfa.reg != (unsigned long) -1
780 /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
781 indicating the CFA register has changed to <register> but the
782 offset has not changed. */
783 cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
784 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
788 else if (loc.indirect == 0)
790 /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
791 indicating the CFA register has changed to <register> with
792 the specified offset. */
793 cfi->dw_cfi_opc = DW_CFA_def_cfa;
794 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
795 cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
799 /* Construct a DW_CFA_def_cfa_expression instruction to
800 calculate the CFA using a full location expression since no
801 register-offset pair is available. */
802 struct dw_loc_descr_struct *loc_list;
804 cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
805 loc_list = build_cfa_loc (&loc);
806 cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
809 add_fde_cfi (label, cfi);
812 /* Add the CFI for saving a register. REG is the CFA column number.
813 LABEL is passed to add_fde_cfi.
814 If SREG is -1, the register is saved at OFFSET from the CFA;
815 otherwise it is saved in SREG. */
818 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
820 dw_cfi_ref cfi = new_cfi ();
822 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
824 if (sreg == INVALID_REGNUM)
827 /* The register number won't fit in 6 bits, so we have to use
829 cfi->dw_cfi_opc = DW_CFA_offset_extended;
831 cfi->dw_cfi_opc = DW_CFA_offset;
833 #ifdef ENABLE_CHECKING
835 /* If we get an offset that is not a multiple of
836 DWARF_CIE_DATA_ALIGNMENT, there is either a bug in the
837 definition of DWARF_CIE_DATA_ALIGNMENT, or a bug in the machine
839 HOST_WIDE_INT check_offset = offset / DWARF_CIE_DATA_ALIGNMENT;
841 gcc_assert (check_offset * DWARF_CIE_DATA_ALIGNMENT == offset);
844 offset /= DWARF_CIE_DATA_ALIGNMENT;
846 cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
848 cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
850 else if (sreg == reg)
851 cfi->dw_cfi_opc = DW_CFA_same_value;
854 cfi->dw_cfi_opc = DW_CFA_register;
855 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
858 add_fde_cfi (label, cfi);
861 /* Add the CFI for saving a register window. LABEL is passed to reg_save.
862 This CFI tells the unwinder that it needs to restore the window registers
863 from the previous frame's window save area.
865 ??? Perhaps we should note in the CIE where windows are saved (instead of
866 assuming 0(cfa)) and what registers are in the window. */
869 dwarf2out_window_save (const char *label)
871 dw_cfi_ref cfi = new_cfi ();
873 cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
874 add_fde_cfi (label, cfi);
877 /* Add a CFI to update the running total of the size of arguments
878 pushed onto the stack. */
881 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
885 if (size == old_args_size)
888 old_args_size = size;
891 cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
892 cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
893 add_fde_cfi (label, cfi);
896 /* Entry point for saving a register to the stack. REG is the GCC register
897 number. LABEL and OFFSET are passed to reg_save. */
900 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
902 reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
905 /* Entry point for saving the return address in the stack.
906 LABEL and OFFSET are passed to reg_save. */
909 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
911 reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
914 /* Entry point for saving the return address in a register.
915 LABEL and SREG are passed to reg_save. */
918 dwarf2out_return_reg (const char *label, unsigned int sreg)
920 reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
923 /* Record the initial position of the return address. RTL is
924 INCOMING_RETURN_ADDR_RTX. */
927 initial_return_save (rtx rtl)
929 unsigned int reg = INVALID_REGNUM;
930 HOST_WIDE_INT offset = 0;
932 switch (GET_CODE (rtl))
935 /* RA is in a register. */
936 reg = DWARF_FRAME_REGNUM (REGNO (rtl));
940 /* RA is on the stack. */
942 switch (GET_CODE (rtl))
945 gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
950 gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
951 offset = INTVAL (XEXP (rtl, 1));
955 gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
956 offset = -INTVAL (XEXP (rtl, 1));
966 /* The return address is at some offset from any value we can
967 actually load. For instance, on the SPARC it is in %i7+8. Just
968 ignore the offset for now; it doesn't matter for unwinding frames. */
969 gcc_assert (GET_CODE (XEXP (rtl, 1)) == CONST_INT);
970 initial_return_save (XEXP (rtl, 0));
977 if (reg != DWARF_FRAME_RETURN_COLUMN)
978 reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
981 /* Given a SET, calculate the amount of stack adjustment it
985 stack_adjust_offset (rtx pattern)
987 rtx src = SET_SRC (pattern);
988 rtx dest = SET_DEST (pattern);
989 HOST_WIDE_INT offset = 0;
992 if (dest == stack_pointer_rtx)
994 /* (set (reg sp) (plus (reg sp) (const_int))) */
995 code = GET_CODE (src);
996 if (! (code == PLUS || code == MINUS)
997 || XEXP (src, 0) != stack_pointer_rtx
998 || GET_CODE (XEXP (src, 1)) != CONST_INT)
1001 offset = INTVAL (XEXP (src, 1));
1005 else if (MEM_P (dest))
1007 /* (set (mem (pre_dec (reg sp))) (foo)) */
1008 src = XEXP (dest, 0);
1009 code = GET_CODE (src);
1015 if (XEXP (src, 0) == stack_pointer_rtx)
1017 rtx val = XEXP (XEXP (src, 1), 1);
1018 /* We handle only adjustments by constant amount. */
1019 gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1020 && GET_CODE (val) == CONST_INT);
1021 offset = -INTVAL (val);
1028 if (XEXP (src, 0) == stack_pointer_rtx)
1030 offset = GET_MODE_SIZE (GET_MODE (dest));
1037 if (XEXP (src, 0) == stack_pointer_rtx)
1039 offset = -GET_MODE_SIZE (GET_MODE (dest));
1054 /* Check INSN to see if it looks like a push or a stack adjustment, and
1055 make a note of it if it does. EH uses this information to find out how
1056 much extra space it needs to pop off the stack. */
1059 dwarf2out_stack_adjust (rtx insn, bool after_p)
1061 HOST_WIDE_INT offset;
1065 /* Don't handle epilogues at all. Certainly it would be wrong to do so
1066 with this function. Proper support would require all frame-related
1067 insns to be marked, and to be able to handle saving state around
1068 epilogues textually in the middle of the function. */
1069 if (prologue_epilogue_contains (insn) || sibcall_epilogue_contains (insn))
1072 /* If only calls can throw, and we have a frame pointer,
1073 save up adjustments until we see the CALL_INSN. */
1074 if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1076 if (CALL_P (insn) && !after_p)
1078 /* Extract the size of the args from the CALL rtx itself. */
1079 insn = PATTERN (insn);
1080 if (GET_CODE (insn) == PARALLEL)
1081 insn = XVECEXP (insn, 0, 0);
1082 if (GET_CODE (insn) == SET)
1083 insn = SET_SRC (insn);
1084 gcc_assert (GET_CODE (insn) == CALL);
1085 dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1090 if (CALL_P (insn) && !after_p)
1092 if (!flag_asynchronous_unwind_tables)
1093 dwarf2out_args_size ("", args_size);
1096 else if (BARRIER_P (insn))
1098 /* When we see a BARRIER, we know to reset args_size to 0. Usually
1099 the compiler will have already emitted a stack adjustment, but
1100 doesn't bother for calls to noreturn functions. */
1101 #ifdef STACK_GROWS_DOWNWARD
1102 offset = -args_size;
1107 else if (GET_CODE (PATTERN (insn)) == SET)
1108 offset = stack_adjust_offset (PATTERN (insn));
1109 else if (GET_CODE (PATTERN (insn)) == PARALLEL
1110 || GET_CODE (PATTERN (insn)) == SEQUENCE)
1112 /* There may be stack adjustments inside compound insns. Search
1114 for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1115 if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1116 offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i));
1124 if (cfa.reg == STACK_POINTER_REGNUM)
1125 cfa.offset += offset;
1127 #ifndef STACK_GROWS_DOWNWARD
1131 args_size += offset;
1135 label = dwarf2out_cfi_label ();
1136 def_cfa_1 (label, &cfa);
1137 if (flag_asynchronous_unwind_tables)
1138 dwarf2out_args_size (label, args_size);
1143 /* We delay emitting a register save until either (a) we reach the end
1144 of the prologue or (b) the register is clobbered. This clusters
1145 register saves so that there are fewer pc advances. */
1147 struct queued_reg_save GTY(())
1149 struct queued_reg_save *next;
1151 HOST_WIDE_INT cfa_offset;
1155 static GTY(()) struct queued_reg_save *queued_reg_saves;
1157 /* The caller's ORIG_REG is saved in SAVED_IN_REG. */
1158 struct reg_saved_in_data GTY(()) {
1163 /* A list of registers saved in other registers.
1164 The list intentionally has a small maximum capacity of 4; if your
1165 port needs more than that, you might consider implementing a
1166 more efficient data structure. */
1167 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1168 static GTY(()) size_t num_regs_saved_in_regs;
1170 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1171 static const char *last_reg_save_label;
1173 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1174 SREG, or if SREG is NULL then it is saved at OFFSET to the CFA. */
1177 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1179 struct queued_reg_save *q;
1181 /* Duplicates waste space, but it's also necessary to remove them
1182 for correctness, since the queue gets output in reverse
1184 for (q = queued_reg_saves; q != NULL; q = q->next)
1185 if (REGNO (q->reg) == REGNO (reg))
1190 q = ggc_alloc (sizeof (*q));
1191 q->next = queued_reg_saves;
1192 queued_reg_saves = q;
1196 q->cfa_offset = offset;
1197 q->saved_reg = sreg;
1199 last_reg_save_label = label;
1202 /* Output all the entries in QUEUED_REG_SAVES. */
1205 flush_queued_reg_saves (void)
1207 struct queued_reg_save *q;
1209 for (q = queued_reg_saves; q; q = q->next)
1212 unsigned int reg, sreg;
1214 for (i = 0; i < num_regs_saved_in_regs; i++)
1215 if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1217 if (q->saved_reg && i == num_regs_saved_in_regs)
1219 gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1220 num_regs_saved_in_regs++;
1222 if (i != num_regs_saved_in_regs)
1224 regs_saved_in_regs[i].orig_reg = q->reg;
1225 regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1228 reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1230 sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1232 sreg = INVALID_REGNUM;
1233 reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1236 queued_reg_saves = NULL;
1237 last_reg_save_label = NULL;
1240 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1241 location for? Or, does it clobber a register which we've previously
1242 said that some other register is saved in, and for which we now
1243 have a new location for? */
1246 clobbers_queued_reg_save (rtx insn)
1248 struct queued_reg_save *q;
1250 for (q = queued_reg_saves; q; q = q->next)
1253 if (modified_in_p (q->reg, insn))
1255 for (i = 0; i < num_regs_saved_in_regs; i++)
1256 if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1257 && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1264 /* What register, if any, is currently saved in REG? */
1267 reg_saved_in (rtx reg)
1269 unsigned int regn = REGNO (reg);
1271 struct queued_reg_save *q;
1273 for (q = queued_reg_saves; q; q = q->next)
1274 if (q->saved_reg && regn == REGNO (q->saved_reg))
1277 for (i = 0; i < num_regs_saved_in_regs; i++)
1278 if (regs_saved_in_regs[i].saved_in_reg
1279 && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1280 return regs_saved_in_regs[i].orig_reg;
1286 /* A temporary register holding an integral value used in adjusting SP
1287 or setting up the store_reg. The "offset" field holds the integer
1288 value, not an offset. */
1289 static dw_cfa_location cfa_temp;
1291 /* Record call frame debugging information for an expression EXPR,
1292 which either sets SP or FP (adjusting how we calculate the frame
1293 address) or saves a register to the stack or another register.
1294 LABEL indicates the address of EXPR.
1296 This function encodes a state machine mapping rtxes to actions on
1297 cfa, cfa_store, and cfa_temp.reg. We describe these rules so
1298 users need not read the source code.
1300 The High-Level Picture
1302 Changes in the register we use to calculate the CFA: Currently we
1303 assume that if you copy the CFA register into another register, we
1304 should take the other one as the new CFA register; this seems to
1305 work pretty well. If it's wrong for some target, it's simple
1306 enough not to set RTX_FRAME_RELATED_P on the insn in question.
1308 Changes in the register we use for saving registers to the stack:
1309 This is usually SP, but not always. Again, we deduce that if you
1310 copy SP into another register (and SP is not the CFA register),
1311 then the new register is the one we will be using for register
1312 saves. This also seems to work.
1314 Register saves: There's not much guesswork about this one; if
1315 RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1316 register save, and the register used to calculate the destination
1317 had better be the one we think we're using for this purpose.
1318 It's also assumed that a copy from a call-saved register to another
1319 register is saving that register if RTX_FRAME_RELATED_P is set on
1320 that instruction. If the copy is from a call-saved register to
1321 the *same* register, that means that the register is now the same
1322 value as in the caller.
1324 Except: If the register being saved is the CFA register, and the
1325 offset is nonzero, we are saving the CFA, so we assume we have to
1326 use DW_CFA_def_cfa_expression. If the offset is 0, we assume that
1327 the intent is to save the value of SP from the previous frame.
1329 In addition, if a register has previously been saved to a different
1332 Invariants / Summaries of Rules
1334 cfa current rule for calculating the CFA. It usually
1335 consists of a register and an offset.
1336 cfa_store register used by prologue code to save things to the stack
1337 cfa_store.offset is the offset from the value of
1338 cfa_store.reg to the actual CFA
1339 cfa_temp register holding an integral value. cfa_temp.offset
1340 stores the value, which will be used to adjust the
1341 stack pointer. cfa_temp is also used like cfa_store,
1342 to track stores to the stack via fp or a temp reg.
1344 Rules 1- 4: Setting a register's value to cfa.reg or an expression
1345 with cfa.reg as the first operand changes the cfa.reg and its
1346 cfa.offset. Rule 1 and 4 also set cfa_temp.reg and
1349 Rules 6- 9: Set a non-cfa.reg register value to a constant or an
1350 expression yielding a constant. This sets cfa_temp.reg
1351 and cfa_temp.offset.
1353 Rule 5: Create a new register cfa_store used to save items to the
1356 Rules 10-14: Save a register to the stack. Define offset as the
1357 difference of the original location and cfa_store's
1358 location (or cfa_temp's location if cfa_temp is used).
1362 "{a,b}" indicates a choice of a xor b.
1363 "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
1366 (set <reg1> <reg2>:cfa.reg)
1367 effects: cfa.reg = <reg1>
1368 cfa.offset unchanged
1369 cfa_temp.reg = <reg1>
1370 cfa_temp.offset = cfa.offset
1373 (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
1374 {<const_int>,<reg>:cfa_temp.reg}))
1375 effects: cfa.reg = sp if fp used
1376 cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
1377 cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
1378 if cfa_store.reg==sp
1381 (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
1382 effects: cfa.reg = fp
1383 cfa_offset += +/- <const_int>
1386 (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
1387 constraints: <reg1> != fp
1389 effects: cfa.reg = <reg1>
1390 cfa_temp.reg = <reg1>
1391 cfa_temp.offset = cfa.offset
1394 (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
1395 constraints: <reg1> != fp
1397 effects: cfa_store.reg = <reg1>
1398 cfa_store.offset = cfa.offset - cfa_temp.offset
1401 (set <reg> <const_int>)
1402 effects: cfa_temp.reg = <reg>
1403 cfa_temp.offset = <const_int>
1406 (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
1407 effects: cfa_temp.reg = <reg1>
1408 cfa_temp.offset |= <const_int>
1411 (set <reg> (high <exp>))
1415 (set <reg> (lo_sum <exp> <const_int>))
1416 effects: cfa_temp.reg = <reg>
1417 cfa_temp.offset = <const_int>
1420 (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
1421 effects: cfa_store.offset -= <const_int>
1422 cfa.offset = cfa_store.offset if cfa.reg == sp
1424 cfa.base_offset = -cfa_store.offset
1427 (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
1428 effects: cfa_store.offset += -/+ mode_size(mem)
1429 cfa.offset = cfa_store.offset if cfa.reg == sp
1431 cfa.base_offset = -cfa_store.offset
1434 (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
1437 effects: cfa.reg = <reg1>
1438 cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
1441 (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
1442 effects: cfa.reg = <reg1>
1443 cfa.base_offset = -{cfa_store,cfa_temp}.offset
1446 (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
1447 effects: cfa.reg = <reg1>
1448 cfa.base_offset = -cfa_temp.offset
1449 cfa_temp.offset -= mode_size(mem)
1452 Â (set <reg> {unspec, unspec_volatile})
1453 Â effects: target-dependent */
1456 dwarf2out_frame_debug_expr (rtx expr, const char *label)
1459 HOST_WIDE_INT offset;
1461 /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
1462 the PARALLEL independently. The first element is always processed if
1463 it is a SET. This is for backward compatibility. Other elements
1464 are processed only if they are SETs and the RTX_FRAME_RELATED_P
1465 flag is set in them. */
1466 if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
1469 int limit = XVECLEN (expr, 0);
1471 for (par_index = 0; par_index < limit; par_index++)
1472 if (GET_CODE (XVECEXP (expr, 0, par_index)) == SET
1473 && (RTX_FRAME_RELATED_P (XVECEXP (expr, 0, par_index))
1475 dwarf2out_frame_debug_expr (XVECEXP (expr, 0, par_index), label);
1480 gcc_assert (GET_CODE (expr) == SET);
1482 src = SET_SRC (expr);
1483 dest = SET_DEST (expr);
1485 if (GET_CODE (src) == REG)
1487 rtx rsi = reg_saved_in (src);
1492 switch (GET_CODE (dest))
1495 switch (GET_CODE (src))
1497 /* Setting FP from SP. */
1499 if (cfa.reg == (unsigned) REGNO (src))
1502 /* Update the CFA rule wrt SP or FP. Make sure src is
1503 relative to the current CFA register.
1505 We used to require that dest be either SP or FP, but the
1506 ARM copies SP to a temporary register, and from there to
1507 FP. So we just rely on the backends to only set
1508 RTX_FRAME_RELATED_P on appropriate insns. */
1509 cfa.reg = REGNO (dest);
1510 cfa_temp.reg = cfa.reg;
1511 cfa_temp.offset = cfa.offset;
1515 /* Saving a register in a register. */
1516 gcc_assert (call_used_regs [REGNO (dest)]
1517 && (!fixed_regs [REGNO (dest)]
1518 /* For the SPARC and its register window. */
1519 || DWARF_FRAME_REGNUM (REGNO (src))
1520 == DWARF_FRAME_RETURN_COLUMN));
1521 queue_reg_save (label, src, dest, 0);
1528 if (dest == stack_pointer_rtx)
1532 switch (GET_CODE (XEXP (src, 1)))
1535 offset = INTVAL (XEXP (src, 1));
1538 gcc_assert ((unsigned) REGNO (XEXP (src, 1))
1540 offset = cfa_temp.offset;
1546 if (XEXP (src, 0) == hard_frame_pointer_rtx)
1548 /* Restoring SP from FP in the epilogue. */
1549 gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
1550 cfa.reg = STACK_POINTER_REGNUM;
1552 else if (GET_CODE (src) == LO_SUM)
1553 /* Assume we've set the source reg of the LO_SUM from sp. */
1556 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
1558 if (GET_CODE (src) != MINUS)
1560 if (cfa.reg == STACK_POINTER_REGNUM)
1561 cfa.offset += offset;
1562 if (cfa_store.reg == STACK_POINTER_REGNUM)
1563 cfa_store.offset += offset;
1565 else if (dest == hard_frame_pointer_rtx)
1568 /* Either setting the FP from an offset of the SP,
1569 or adjusting the FP */
1570 gcc_assert (frame_pointer_needed);
1572 gcc_assert (REG_P (XEXP (src, 0))
1573 && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
1574 && GET_CODE (XEXP (src, 1)) == CONST_INT);
1575 offset = INTVAL (XEXP (src, 1));
1576 if (GET_CODE (src) != MINUS)
1578 cfa.offset += offset;
1579 cfa.reg = HARD_FRAME_POINTER_REGNUM;
1583 gcc_assert (GET_CODE (src) != MINUS);
1586 if (REG_P (XEXP (src, 0))
1587 && REGNO (XEXP (src, 0)) == cfa.reg
1588 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1590 /* Setting a temporary CFA register that will be copied
1591 into the FP later on. */
1592 offset = - INTVAL (XEXP (src, 1));
1593 cfa.offset += offset;
1594 cfa.reg = REGNO (dest);
1595 /* Or used to save regs to the stack. */
1596 cfa_temp.reg = cfa.reg;
1597 cfa_temp.offset = cfa.offset;
1601 else if (REG_P (XEXP (src, 0))
1602 && REGNO (XEXP (src, 0)) == cfa_temp.reg
1603 && XEXP (src, 1) == stack_pointer_rtx)
1605 /* Setting a scratch register that we will use instead
1606 of SP for saving registers to the stack. */
1607 gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
1608 cfa_store.reg = REGNO (dest);
1609 cfa_store.offset = cfa.offset - cfa_temp.offset;
1613 else if (GET_CODE (src) == LO_SUM
1614 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1616 cfa_temp.reg = REGNO (dest);
1617 cfa_temp.offset = INTVAL (XEXP (src, 1));
1626 cfa_temp.reg = REGNO (dest);
1627 cfa_temp.offset = INTVAL (src);
1632 gcc_assert (REG_P (XEXP (src, 0))
1633 && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
1634 && GET_CODE (XEXP (src, 1)) == CONST_INT);
1636 if ((unsigned) REGNO (dest) != cfa_temp.reg)
1637 cfa_temp.reg = REGNO (dest);
1638 cfa_temp.offset |= INTVAL (XEXP (src, 1));
1641 /* Skip over HIGH, assuming it will be followed by a LO_SUM,
1642 which will fill in all of the bits. */
1649 case UNSPEC_VOLATILE:
1650 gcc_assert (targetm.dwarf_handle_frame_unspec);
1651 targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
1658 def_cfa_1 (label, &cfa);
1662 gcc_assert (REG_P (src));
1664 /* Saving a register to the stack. Make sure dest is relative to the
1666 switch (GET_CODE (XEXP (dest, 0)))
1671 /* We can't handle variable size modifications. */
1672 gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
1674 offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
1676 gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
1677 && cfa_store.reg == STACK_POINTER_REGNUM);
1679 cfa_store.offset += offset;
1680 if (cfa.reg == STACK_POINTER_REGNUM)
1681 cfa.offset = cfa_store.offset;
1683 offset = -cfa_store.offset;
1689 offset = GET_MODE_SIZE (GET_MODE (dest));
1690 if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
1693 gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
1694 && cfa_store.reg == STACK_POINTER_REGNUM);
1696 cfa_store.offset += offset;
1697 if (cfa.reg == STACK_POINTER_REGNUM)
1698 cfa.offset = cfa_store.offset;
1700 offset = -cfa_store.offset;
1704 /* With an offset. */
1711 gcc_assert (GET_CODE (XEXP (XEXP (dest, 0), 1)) == CONST_INT);
1712 offset = INTVAL (XEXP (XEXP (dest, 0), 1));
1713 if (GET_CODE (XEXP (dest, 0)) == MINUS)
1716 regno = REGNO (XEXP (XEXP (dest, 0), 0));
1718 if (cfa_store.reg == (unsigned) regno)
1719 offset -= cfa_store.offset;
1722 gcc_assert (cfa_temp.reg == (unsigned) regno);
1723 offset -= cfa_temp.offset;
1729 /* Without an offset. */
1732 int regno = REGNO (XEXP (dest, 0));
1734 if (cfa_store.reg == (unsigned) regno)
1735 offset = -cfa_store.offset;
1738 gcc_assert (cfa_temp.reg == (unsigned) regno);
1739 offset = -cfa_temp.offset;
1746 gcc_assert (cfa_temp.reg
1747 == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
1748 offset = -cfa_temp.offset;
1749 cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
1756 if (REGNO (src) != STACK_POINTER_REGNUM
1757 && REGNO (src) != HARD_FRAME_POINTER_REGNUM
1758 && (unsigned) REGNO (src) == cfa.reg)
1760 /* We're storing the current CFA reg into the stack. */
1762 if (cfa.offset == 0)
1764 /* If the source register is exactly the CFA, assume
1765 we're saving SP like any other register; this happens
1767 def_cfa_1 (label, &cfa);
1768 queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
1773 /* Otherwise, we'll need to look in the stack to
1774 calculate the CFA. */
1775 rtx x = XEXP (dest, 0);
1779 gcc_assert (REG_P (x));
1781 cfa.reg = REGNO (x);
1782 cfa.base_offset = offset;
1784 def_cfa_1 (label, &cfa);
1789 def_cfa_1 (label, &cfa);
1790 queue_reg_save (label, src, NULL_RTX, offset);
1798 /* Record call frame debugging information for INSN, which either
1799 sets SP or FP (adjusting how we calculate the frame address) or saves a
1800 register to the stack. If INSN is NULL_RTX, initialize our state.
1802 If AFTER_P is false, we're being called before the insn is emitted,
1803 otherwise after. Call instructions get invoked twice. */
1806 dwarf2out_frame_debug (rtx insn, bool after_p)
1811 if (insn == NULL_RTX)
1815 /* Flush any queued register saves. */
1816 flush_queued_reg_saves ();
1818 /* Set up state for generating call frame debug info. */
1821 == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
1823 cfa.reg = STACK_POINTER_REGNUM;
1826 cfa_temp.offset = 0;
1828 for (i = 0; i < num_regs_saved_in_regs; i++)
1830 regs_saved_in_regs[i].orig_reg = NULL_RTX;
1831 regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
1833 num_regs_saved_in_regs = 0;
1837 if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
1838 flush_queued_reg_saves ();
1840 if (! RTX_FRAME_RELATED_P (insn))
1842 if (!ACCUMULATE_OUTGOING_ARGS)
1843 dwarf2out_stack_adjust (insn, after_p);
1847 label = dwarf2out_cfi_label ();
1848 src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1850 insn = XEXP (src, 0);
1852 insn = PATTERN (insn);
1854 dwarf2out_frame_debug_expr (insn, label);
1859 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used. */
1860 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
1861 (enum dwarf_call_frame_info cfi);
1863 static enum dw_cfi_oprnd_type
1864 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
1869 case DW_CFA_GNU_window_save:
1870 return dw_cfi_oprnd_unused;
1872 case DW_CFA_set_loc:
1873 case DW_CFA_advance_loc1:
1874 case DW_CFA_advance_loc2:
1875 case DW_CFA_advance_loc4:
1876 case DW_CFA_MIPS_advance_loc8:
1877 return dw_cfi_oprnd_addr;
1880 case DW_CFA_offset_extended:
1881 case DW_CFA_def_cfa:
1882 case DW_CFA_offset_extended_sf:
1883 case DW_CFA_def_cfa_sf:
1884 case DW_CFA_restore_extended:
1885 case DW_CFA_undefined:
1886 case DW_CFA_same_value:
1887 case DW_CFA_def_cfa_register:
1888 case DW_CFA_register:
1889 return dw_cfi_oprnd_reg_num;
1891 case DW_CFA_def_cfa_offset:
1892 case DW_CFA_GNU_args_size:
1893 case DW_CFA_def_cfa_offset_sf:
1894 return dw_cfi_oprnd_offset;
1896 case DW_CFA_def_cfa_expression:
1897 case DW_CFA_expression:
1898 return dw_cfi_oprnd_loc;
1905 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */
1906 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
1907 (enum dwarf_call_frame_info cfi);
1909 static enum dw_cfi_oprnd_type
1910 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
1914 case DW_CFA_def_cfa:
1915 case DW_CFA_def_cfa_sf:
1917 case DW_CFA_offset_extended_sf:
1918 case DW_CFA_offset_extended:
1919 return dw_cfi_oprnd_offset;
1921 case DW_CFA_register:
1922 return dw_cfi_oprnd_reg_num;
1925 return dw_cfi_oprnd_unused;
1929 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1931 /* Map register numbers held in the call frame info that gcc has
1932 collected using DWARF_FRAME_REGNUM to those that should be output in
1933 .debug_frame and .eh_frame. */
1934 #ifndef DWARF2_FRAME_REG_OUT
1935 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
1938 /* Output a Call Frame Information opcode and its operand(s). */
1941 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
1944 if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
1945 dw2_asm_output_data (1, (cfi->dw_cfi_opc
1946 | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
1947 "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
1948 cfi->dw_cfi_oprnd1.dw_cfi_offset);
1949 else if (cfi->dw_cfi_opc == DW_CFA_offset)
1951 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1952 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
1953 "DW_CFA_offset, column 0x%lx", r);
1954 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
1956 else if (cfi->dw_cfi_opc == DW_CFA_restore)
1958 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1959 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
1960 "DW_CFA_restore, column 0x%lx", r);
1964 dw2_asm_output_data (1, cfi->dw_cfi_opc,
1965 "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
1967 switch (cfi->dw_cfi_opc)
1969 case DW_CFA_set_loc:
1971 dw2_asm_output_encoded_addr_rtx (
1972 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
1973 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
1976 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
1977 cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
1980 case DW_CFA_advance_loc1:
1981 dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
1982 fde->dw_fde_current_label, NULL);
1983 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1986 case DW_CFA_advance_loc2:
1987 dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
1988 fde->dw_fde_current_label, NULL);
1989 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1992 case DW_CFA_advance_loc4:
1993 dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
1994 fde->dw_fde_current_label, NULL);
1995 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1998 case DW_CFA_MIPS_advance_loc8:
1999 dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2000 fde->dw_fde_current_label, NULL);
2001 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2004 case DW_CFA_offset_extended:
2005 case DW_CFA_def_cfa:
2006 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2007 dw2_asm_output_data_uleb128 (r, NULL);
2008 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2011 case DW_CFA_offset_extended_sf:
2012 case DW_CFA_def_cfa_sf:
2013 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2014 dw2_asm_output_data_uleb128 (r, NULL);
2015 dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2018 case DW_CFA_restore_extended:
2019 case DW_CFA_undefined:
2020 case DW_CFA_same_value:
2021 case DW_CFA_def_cfa_register:
2022 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2023 dw2_asm_output_data_uleb128 (r, NULL);
2026 case DW_CFA_register:
2027 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2028 dw2_asm_output_data_uleb128 (r, NULL);
2029 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
2030 dw2_asm_output_data_uleb128 (r, NULL);
2033 case DW_CFA_def_cfa_offset:
2034 case DW_CFA_GNU_args_size:
2035 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
2038 case DW_CFA_def_cfa_offset_sf:
2039 dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
2042 case DW_CFA_GNU_window_save:
2045 case DW_CFA_def_cfa_expression:
2046 case DW_CFA_expression:
2047 output_cfa_loc (cfi);
2050 case DW_CFA_GNU_negative_offset_extended:
2051 /* Obsoleted by DW_CFA_offset_extended_sf. */
2060 /* Output the call frame information used to record information
2061 that relates to calculating the frame pointer, and records the
2062 location of saved registers. */
2065 output_call_frame_info (int for_eh)
2070 char l1[20], l2[20], section_start_label[20];
2071 bool any_lsda_needed = false;
2072 char augmentation[6];
2073 int augmentation_size;
2074 int fde_encoding = DW_EH_PE_absptr;
2075 int per_encoding = DW_EH_PE_absptr;
2076 int lsda_encoding = DW_EH_PE_absptr;
2078 /* Don't emit a CIE if there won't be any FDEs. */
2079 if (fde_table_in_use == 0)
2082 /* If we make FDEs linkonce, we may have to emit an empty label for
2083 an FDE that wouldn't otherwise be emitted. We want to avoid
2084 having an FDE kept around when the function it refers to is
2085 discarded. Example where this matters: a primary function
2086 template in C++ requires EH information, but an explicit
2087 specialization doesn't. */
2088 if (TARGET_USES_WEAK_UNWIND_INFO
2089 && ! flag_asynchronous_unwind_tables
2091 for (i = 0; i < fde_table_in_use; i++)
2092 if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
2093 && !fde_table[i].uses_eh_lsda
2094 && ! DECL_WEAK (fde_table[i].decl))
2095 targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
2096 for_eh, /* empty */ 1);
2098 /* If we don't have any functions we'll want to unwind out of, don't
2099 emit any EH unwind information. Note that if exceptions aren't
2100 enabled, we won't have collected nothrow information, and if we
2101 asked for asynchronous tables, we always want this info. */
2104 bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
2106 for (i = 0; i < fde_table_in_use; i++)
2107 if (fde_table[i].uses_eh_lsda)
2108 any_eh_needed = any_lsda_needed = true;
2109 else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
2110 any_eh_needed = true;
2111 else if (! fde_table[i].nothrow
2112 && ! fde_table[i].all_throwers_are_sibcalls)
2113 any_eh_needed = true;
2115 if (! any_eh_needed)
2119 /* We're going to be generating comments, so turn on app. */
2124 targetm.asm_out.eh_frame_section ();
2126 named_section_flags (DEBUG_FRAME_SECTION, SECTION_DEBUG);
2128 ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
2129 ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
2131 /* Output the CIE. */
2132 ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
2133 ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
2134 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2135 "Length of Common Information Entry");
2136 ASM_OUTPUT_LABEL (asm_out_file, l1);
2138 /* Now that the CIE pointer is PC-relative for EH,
2139 use 0 to identify the CIE. */
2140 dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
2141 (for_eh ? 0 : DW_CIE_ID),
2142 "CIE Identifier Tag");
2144 dw2_asm_output_data (1, DW_CIE_VERSION, "CIE Version");
2146 augmentation[0] = 0;
2147 augmentation_size = 0;
2153 z Indicates that a uleb128 is present to size the
2154 augmentation section.
2155 L Indicates the encoding (and thus presence) of
2156 an LSDA pointer in the FDE augmentation.
2157 R Indicates a non-default pointer encoding for
2159 P Indicates the presence of an encoding + language
2160 personality routine in the CIE augmentation. */
2162 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
2163 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
2164 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
2166 p = augmentation + 1;
2167 if (eh_personality_libfunc)
2170 augmentation_size += 1 + size_of_encoded_value (per_encoding);
2172 if (any_lsda_needed)
2175 augmentation_size += 1;
2177 if (fde_encoding != DW_EH_PE_absptr)
2180 augmentation_size += 1;
2182 if (p > augmentation + 1)
2184 augmentation[0] = 'z';
2188 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */
2189 if (eh_personality_libfunc && per_encoding == DW_EH_PE_aligned)
2191 int offset = ( 4 /* Length */
2193 + 1 /* CIE version */
2194 + strlen (augmentation) + 1 /* Augmentation */
2195 + size_of_uleb128 (1) /* Code alignment */
2196 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
2198 + 1 /* Augmentation size */
2199 + 1 /* Personality encoding */ );
2200 int pad = -offset & (PTR_SIZE - 1);
2202 augmentation_size += pad;
2204 /* Augmentations should be small, so there's scarce need to
2205 iterate for a solution. Die if we exceed one uleb128 byte. */
2206 gcc_assert (size_of_uleb128 (augmentation_size) == 1);
2210 dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
2211 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
2212 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
2213 "CIE Data Alignment Factor");
2215 if (DW_CIE_VERSION == 1)
2216 dw2_asm_output_data (1, DWARF_FRAME_RETURN_COLUMN, "CIE RA Column");
2218 dw2_asm_output_data_uleb128 (DWARF_FRAME_RETURN_COLUMN, "CIE RA Column");
2220 if (augmentation[0])
2222 dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
2223 if (eh_personality_libfunc)
2225 dw2_asm_output_data (1, per_encoding, "Personality (%s)",
2226 eh_data_format_name (per_encoding));
2227 dw2_asm_output_encoded_addr_rtx (per_encoding,
2228 eh_personality_libfunc, NULL);
2231 if (any_lsda_needed)
2232 dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
2233 eh_data_format_name (lsda_encoding));
2235 if (fde_encoding != DW_EH_PE_absptr)
2236 dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
2237 eh_data_format_name (fde_encoding));
2240 for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
2241 output_cfi (cfi, NULL, for_eh);
2243 /* Pad the CIE out to an address sized boundary. */
2244 ASM_OUTPUT_ALIGN (asm_out_file,
2245 floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
2246 ASM_OUTPUT_LABEL (asm_out_file, l2);
2248 /* Loop through all of the FDE's. */
2249 for (i = 0; i < fde_table_in_use; i++)
2251 fde = &fde_table[i];
2253 /* Don't emit EH unwind info for leaf functions that don't need it. */
2254 if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
2255 && (fde->nothrow || fde->all_throwers_are_sibcalls)
2256 && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
2257 && !fde->uses_eh_lsda)
2260 targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh, /* empty */ 0);
2261 targetm.asm_out.internal_label (asm_out_file, FDE_LABEL, for_eh + i * 2);
2262 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i * 2);
2263 ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i * 2);
2264 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2266 ASM_OUTPUT_LABEL (asm_out_file, l1);
2269 dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
2271 dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
2276 rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, fde->dw_fde_begin);
2277 SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
2278 dw2_asm_output_encoded_addr_rtx (fde_encoding,
2280 "FDE initial location");
2281 if (fde->dw_fde_switched_sections)
2283 rtx sym_ref2 = gen_rtx_SYMBOL_REF (Pmode,
2284 fde->dw_fde_unlikely_section_label);
2285 rtx sym_ref3= gen_rtx_SYMBOL_REF (Pmode,
2286 fde->dw_fde_hot_section_label);
2287 SYMBOL_REF_FLAGS (sym_ref2) |= SYMBOL_FLAG_LOCAL;
2288 SYMBOL_REF_FLAGS (sym_ref3) |= SYMBOL_FLAG_LOCAL;
2289 dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref3,
2290 "FDE initial location");
2291 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2292 fde->dw_fde_hot_section_end_label,
2293 fde->dw_fde_hot_section_label,
2294 "FDE address range");
2295 dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref2,
2296 "FDE initial location");
2297 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2298 fde->dw_fde_unlikely_section_end_label,
2299 fde->dw_fde_unlikely_section_label,
2300 "FDE address range");
2303 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2304 fde->dw_fde_end, fde->dw_fde_begin,
2305 "FDE address range");
2309 dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
2310 "FDE initial location");
2311 if (fde->dw_fde_switched_sections)
2313 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2314 fde->dw_fde_hot_section_label,
2315 "FDE initial location");
2316 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2317 fde->dw_fde_hot_section_end_label,
2318 fde->dw_fde_hot_section_label,
2319 "FDE address range");
2320 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2321 fde->dw_fde_unlikely_section_label,
2322 "FDE initial location");
2323 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2324 fde->dw_fde_unlikely_section_end_label,
2325 fde->dw_fde_unlikely_section_label,
2326 "FDE address range");
2329 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2330 fde->dw_fde_end, fde->dw_fde_begin,
2331 "FDE address range");
2334 if (augmentation[0])
2336 if (any_lsda_needed)
2338 int size = size_of_encoded_value (lsda_encoding);
2340 if (lsda_encoding == DW_EH_PE_aligned)
2342 int offset = ( 4 /* Length */
2343 + 4 /* CIE offset */
2344 + 2 * size_of_encoded_value (fde_encoding)
2345 + 1 /* Augmentation size */ );
2346 int pad = -offset & (PTR_SIZE - 1);
2349 gcc_assert (size_of_uleb128 (size) == 1);
2352 dw2_asm_output_data_uleb128 (size, "Augmentation size");
2354 if (fde->uses_eh_lsda)
2356 ASM_GENERATE_INTERNAL_LABEL (l1, "LLSDA",
2357 fde->funcdef_number);
2358 dw2_asm_output_encoded_addr_rtx (
2359 lsda_encoding, gen_rtx_SYMBOL_REF (Pmode, l1),
2360 "Language Specific Data Area");
2364 if (lsda_encoding == DW_EH_PE_aligned)
2365 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2367 (size_of_encoded_value (lsda_encoding), 0,
2368 "Language Specific Data Area (none)");
2372 dw2_asm_output_data_uleb128 (0, "Augmentation size");
2375 /* Loop through the Call Frame Instructions associated with
2377 fde->dw_fde_current_label = fde->dw_fde_begin;
2378 for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
2379 output_cfi (cfi, fde, for_eh);
2381 /* Pad the FDE out to an address sized boundary. */
2382 ASM_OUTPUT_ALIGN (asm_out_file,
2383 floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
2384 ASM_OUTPUT_LABEL (asm_out_file, l2);
2387 if (for_eh && targetm.terminate_dw2_eh_frame_info)
2388 dw2_asm_output_data (4, 0, "End of Table");
2389 #ifdef MIPS_DEBUGGING_INFO
2390 /* Work around Irix 6 assembler bug whereby labels at the end of a section
2391 get a value of 0. Putting .align 0 after the label fixes it. */
2392 ASM_OUTPUT_ALIGN (asm_out_file, 0);
2395 /* Turn off app to make assembly quicker. */
2400 /* Output a marker (i.e. a label) for the beginning of a function, before
2404 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
2405 const char *file ATTRIBUTE_UNUSED)
2407 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2411 current_function_func_begin_label = NULL;
2413 #ifdef TARGET_UNWIND_INFO
2414 /* ??? current_function_func_begin_label is also used by except.c
2415 for call-site information. We must emit this label if it might
2417 if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
2418 && ! dwarf2out_do_frame ())
2421 if (! dwarf2out_do_frame ())
2425 function_section (current_function_decl);
2426 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
2427 current_function_funcdef_no);
2428 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
2429 current_function_funcdef_no);
2430 dup_label = xstrdup (label);
2431 current_function_func_begin_label = dup_label;
2433 #ifdef TARGET_UNWIND_INFO
2434 /* We can elide the fde allocation if we're not emitting debug info. */
2435 if (! dwarf2out_do_frame ())
2439 /* Expand the fde table if necessary. */
2440 if (fde_table_in_use == fde_table_allocated)
2442 fde_table_allocated += FDE_TABLE_INCREMENT;
2443 fde_table = ggc_realloc (fde_table,
2444 fde_table_allocated * sizeof (dw_fde_node));
2445 memset (fde_table + fde_table_in_use, 0,
2446 FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2449 /* Record the FDE associated with this function. */
2450 current_funcdef_fde = fde_table_in_use;
2452 /* Add the new FDE at the end of the fde_table. */
2453 fde = &fde_table[fde_table_in_use++];
2454 fde->decl = current_function_decl;
2455 fde->dw_fde_begin = dup_label;
2456 fde->dw_fde_current_label = NULL;
2457 fde->dw_fde_hot_section_label = NULL;
2458 fde->dw_fde_hot_section_end_label = NULL;
2459 fde->dw_fde_unlikely_section_label = NULL;
2460 fde->dw_fde_unlikely_section_end_label = NULL;
2461 fde->dw_fde_switched_sections = false;
2462 fde->dw_fde_end = NULL;
2463 fde->dw_fde_cfi = NULL;
2464 fde->funcdef_number = current_function_funcdef_no;
2465 fde->nothrow = TREE_NOTHROW (current_function_decl);
2466 fde->uses_eh_lsda = cfun->uses_eh_lsda;
2467 fde->all_throwers_are_sibcalls = cfun->all_throwers_are_sibcalls;
2469 args_size = old_args_size = 0;
2471 /* We only want to output line number information for the genuine dwarf2
2472 prologue case, not the eh frame case. */
2473 #ifdef DWARF2_DEBUGGING_INFO
2475 dwarf2out_source_line (line, file);
2479 /* Output a marker (i.e. a label) for the absolute end of the generated code
2480 for a function definition. This gets called *after* the epilogue code has
2484 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
2485 const char *file ATTRIBUTE_UNUSED)
2488 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2490 /* Output a label to mark the endpoint of the code generated for this
2492 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
2493 current_function_funcdef_no);
2494 ASM_OUTPUT_LABEL (asm_out_file, label);
2495 fde = &fde_table[fde_table_in_use - 1];
2496 fde->dw_fde_end = xstrdup (label);
2500 dwarf2out_frame_init (void)
2502 /* Allocate the initial hunk of the fde_table. */
2503 fde_table = ggc_alloc_cleared (FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2504 fde_table_allocated = FDE_TABLE_INCREMENT;
2505 fde_table_in_use = 0;
2507 /* Generate the CFA instructions common to all FDE's. Do it now for the
2508 sake of lookup_cfa. */
2510 #ifdef DWARF2_UNWIND_INFO
2511 /* On entry, the Canonical Frame Address is at SP. */
2512 dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
2513 initial_return_save (INCOMING_RETURN_ADDR_RTX);
2518 dwarf2out_frame_finish (void)
2520 /* Output call frame information. */
2521 if (write_symbols == DWARF2_DEBUG
2522 || write_symbols == VMS_AND_DWARF2_DEBUG
2523 #ifdef DWARF2_FRAME_INFO
2524 || DWARF2_FRAME_INFO
2527 output_call_frame_info (0);
2529 #ifndef TARGET_UNWIND_INFO
2530 /* Output another copy for the unwinder. */
2531 if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
2532 output_call_frame_info (1);
2537 /* And now, the subset of the debugging information support code necessary
2538 for emitting location expressions. */
2540 /* We need some way to distinguish DW_OP_addr with a direct symbol
2541 relocation from DW_OP_addr with a dtp-relative symbol relocation. */
2542 #define INTERNAL_DW_OP_tls_addr (0x100 + DW_OP_addr)
2545 typedef struct dw_val_struct *dw_val_ref;
2546 typedef struct die_struct *dw_die_ref;
2547 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
2548 typedef struct dw_loc_list_struct *dw_loc_list_ref;
2550 /* Each DIE may have a series of attribute/value pairs. Values
2551 can take on several forms. The forms that are used in this
2552 implementation are listed below. */
2557 dw_val_class_offset,
2559 dw_val_class_loc_list,
2560 dw_val_class_range_list,
2562 dw_val_class_unsigned_const,
2563 dw_val_class_long_long,
2566 dw_val_class_die_ref,
2567 dw_val_class_fde_ref,
2568 dw_val_class_lbl_id,
2569 dw_val_class_lbl_offset,
2573 /* Describe a double word constant value. */
2574 /* ??? Every instance of long_long in the code really means CONST_DOUBLE. */
2576 typedef struct dw_long_long_struct GTY(())
2583 /* Describe a floating point constant value, or a vector constant value. */
2585 typedef struct dw_vec_struct GTY(())
2587 unsigned char * GTY((length ("%h.length"))) array;
2593 /* The dw_val_node describes an attribute's value, as it is
2594 represented internally. */
2596 typedef struct dw_val_struct GTY(())
2598 enum dw_val_class val_class;
2599 union dw_val_struct_union
2601 rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
2602 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
2603 dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
2604 dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
2605 HOST_WIDE_INT GTY ((default)) val_int;
2606 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
2607 dw_long_long_const GTY ((tag ("dw_val_class_long_long"))) val_long_long;
2608 dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
2609 struct dw_val_die_union
2613 } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
2614 unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
2615 struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
2616 char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
2617 unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
2619 GTY ((desc ("%1.val_class"))) v;
2623 /* Locations in memory are described using a sequence of stack machine
2626 typedef struct dw_loc_descr_struct GTY(())
2628 dw_loc_descr_ref dw_loc_next;
2629 enum dwarf_location_atom dw_loc_opc;
2630 dw_val_node dw_loc_oprnd1;
2631 dw_val_node dw_loc_oprnd2;
2636 /* Location lists are ranges + location descriptions for that range,
2637 so you can track variables that are in different places over
2638 their entire life. */
2639 typedef struct dw_loc_list_struct GTY(())
2641 dw_loc_list_ref dw_loc_next;
2642 const char *begin; /* Label for begin address of range */
2643 const char *end; /* Label for end address of range */
2644 char *ll_symbol; /* Label for beginning of location list.
2645 Only on head of list */
2646 const char *section; /* Section this loclist is relative to */
2647 dw_loc_descr_ref expr;
2650 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2652 static const char *dwarf_stack_op_name (unsigned);
2653 static dw_loc_descr_ref new_loc_descr (enum dwarf_location_atom,
2654 unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT);
2655 static void add_loc_descr (dw_loc_descr_ref *, dw_loc_descr_ref);
2656 static unsigned long size_of_loc_descr (dw_loc_descr_ref);
2657 static unsigned long size_of_locs (dw_loc_descr_ref);
2658 static void output_loc_operands (dw_loc_descr_ref);
2659 static void output_loc_sequence (dw_loc_descr_ref);
2661 /* Convert a DWARF stack opcode into its string name. */
2664 dwarf_stack_op_name (unsigned int op)
2669 case INTERNAL_DW_OP_tls_addr:
2670 return "DW_OP_addr";
2672 return "DW_OP_deref";
2674 return "DW_OP_const1u";
2676 return "DW_OP_const1s";
2678 return "DW_OP_const2u";
2680 return "DW_OP_const2s";
2682 return "DW_OP_const4u";
2684 return "DW_OP_const4s";
2686 return "DW_OP_const8u";
2688 return "DW_OP_const8s";
2690 return "DW_OP_constu";
2692 return "DW_OP_consts";
2696 return "DW_OP_drop";
2698 return "DW_OP_over";
2700 return "DW_OP_pick";
2702 return "DW_OP_swap";
2706 return "DW_OP_xderef";
2714 return "DW_OP_minus";
2726 return "DW_OP_plus";
2727 case DW_OP_plus_uconst:
2728 return "DW_OP_plus_uconst";
2734 return "DW_OP_shra";
2752 return "DW_OP_skip";
2754 return "DW_OP_lit0";
2756 return "DW_OP_lit1";
2758 return "DW_OP_lit2";
2760 return "DW_OP_lit3";
2762 return "DW_OP_lit4";
2764 return "DW_OP_lit5";
2766 return "DW_OP_lit6";
2768 return "DW_OP_lit7";
2770 return "DW_OP_lit8";
2772 return "DW_OP_lit9";
2774 return "DW_OP_lit10";
2776 return "DW_OP_lit11";
2778 return "DW_OP_lit12";
2780 return "DW_OP_lit13";
2782 return "DW_OP_lit14";
2784 return "DW_OP_lit15";
2786 return "DW_OP_lit16";
2788 return "DW_OP_lit17";
2790 return "DW_OP_lit18";
2792 return "DW_OP_lit19";
2794 return "DW_OP_lit20";
2796 return "DW_OP_lit21";
2798 return "DW_OP_lit22";
2800 return "DW_OP_lit23";
2802 return "DW_OP_lit24";
2804 return "DW_OP_lit25";
2806 return "DW_OP_lit26";
2808 return "DW_OP_lit27";
2810 return "DW_OP_lit28";
2812 return "DW_OP_lit29";
2814 return "DW_OP_lit30";
2816 return "DW_OP_lit31";
2818 return "DW_OP_reg0";
2820 return "DW_OP_reg1";
2822 return "DW_OP_reg2";
2824 return "DW_OP_reg3";
2826 return "DW_OP_reg4";
2828 return "DW_OP_reg5";
2830 return "DW_OP_reg6";
2832 return "DW_OP_reg7";
2834 return "DW_OP_reg8";
2836 return "DW_OP_reg9";
2838 return "DW_OP_reg10";
2840 return "DW_OP_reg11";
2842 return "DW_OP_reg12";
2844 return "DW_OP_reg13";
2846 return "DW_OP_reg14";
2848 return "DW_OP_reg15";
2850 return "DW_OP_reg16";
2852 return "DW_OP_reg17";
2854 return "DW_OP_reg18";
2856 return "DW_OP_reg19";
2858 return "DW_OP_reg20";
2860 return "DW_OP_reg21";
2862 return "DW_OP_reg22";
2864 return "DW_OP_reg23";
2866 return "DW_OP_reg24";
2868 return "DW_OP_reg25";
2870 return "DW_OP_reg26";
2872 return "DW_OP_reg27";
2874 return "DW_OP_reg28";
2876 return "DW_OP_reg29";
2878 return "DW_OP_reg30";
2880 return "DW_OP_reg31";
2882 return "DW_OP_breg0";
2884 return "DW_OP_breg1";
2886 return "DW_OP_breg2";
2888 return "DW_OP_breg3";
2890 return "DW_OP_breg4";
2892 return "DW_OP_breg5";
2894 return "DW_OP_breg6";
2896 return "DW_OP_breg7";
2898 return "DW_OP_breg8";
2900 return "DW_OP_breg9";
2902 return "DW_OP_breg10";
2904 return "DW_OP_breg11";
2906 return "DW_OP_breg12";
2908 return "DW_OP_breg13";
2910 return "DW_OP_breg14";
2912 return "DW_OP_breg15";
2914 return "DW_OP_breg16";
2916 return "DW_OP_breg17";
2918 return "DW_OP_breg18";
2920 return "DW_OP_breg19";
2922 return "DW_OP_breg20";
2924 return "DW_OP_breg21";
2926 return "DW_OP_breg22";
2928 return "DW_OP_breg23";
2930 return "DW_OP_breg24";
2932 return "DW_OP_breg25";
2934 return "DW_OP_breg26";
2936 return "DW_OP_breg27";
2938 return "DW_OP_breg28";
2940 return "DW_OP_breg29";
2942 return "DW_OP_breg30";
2944 return "DW_OP_breg31";
2946 return "DW_OP_regx";
2948 return "DW_OP_fbreg";
2950 return "DW_OP_bregx";
2952 return "DW_OP_piece";
2953 case DW_OP_deref_size:
2954 return "DW_OP_deref_size";
2955 case DW_OP_xderef_size:
2956 return "DW_OP_xderef_size";
2959 case DW_OP_push_object_address:
2960 return "DW_OP_push_object_address";
2962 return "DW_OP_call2";
2964 return "DW_OP_call4";
2965 case DW_OP_call_ref:
2966 return "DW_OP_call_ref";
2967 case DW_OP_GNU_push_tls_address:
2968 return "DW_OP_GNU_push_tls_address";
2970 return "OP_<unknown>";
2974 /* Return a pointer to a newly allocated location description. Location
2975 descriptions are simple expression terms that can be strung
2976 together to form more complicated location (address) descriptions. */
2978 static inline dw_loc_descr_ref
2979 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
2980 unsigned HOST_WIDE_INT oprnd2)
2982 dw_loc_descr_ref descr = ggc_alloc_cleared (sizeof (dw_loc_descr_node));
2984 descr->dw_loc_opc = op;
2985 descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
2986 descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
2987 descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
2988 descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
2994 /* Add a location description term to a location description expression. */
2997 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
2999 dw_loc_descr_ref *d;
3001 /* Find the end of the chain. */
3002 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
3008 /* Return the size of a location descriptor. */
3010 static unsigned long
3011 size_of_loc_descr (dw_loc_descr_ref loc)
3013 unsigned long size = 1;
3015 switch (loc->dw_loc_opc)
3018 case INTERNAL_DW_OP_tls_addr:
3019 size += DWARF2_ADDR_SIZE;
3038 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3041 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3046 case DW_OP_plus_uconst:
3047 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3085 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3088 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3091 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3094 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3095 size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
3098 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3100 case DW_OP_deref_size:
3101 case DW_OP_xderef_size:
3110 case DW_OP_call_ref:
3111 size += DWARF2_ADDR_SIZE;
3120 /* Return the size of a series of location descriptors. */
3122 static unsigned long
3123 size_of_locs (dw_loc_descr_ref loc)
3127 for (size = 0; loc != NULL; loc = loc->dw_loc_next)
3129 loc->dw_loc_addr = size;
3130 size += size_of_loc_descr (loc);
3136 /* Output location description stack opcode's operands (if any). */
3139 output_loc_operands (dw_loc_descr_ref loc)
3141 dw_val_ref val1 = &loc->dw_loc_oprnd1;
3142 dw_val_ref val2 = &loc->dw_loc_oprnd2;
3144 switch (loc->dw_loc_opc)
3146 #ifdef DWARF2_DEBUGGING_INFO
3148 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
3152 dw2_asm_output_data (2, val1->v.val_int, NULL);
3156 dw2_asm_output_data (4, val1->v.val_int, NULL);
3160 gcc_assert (HOST_BITS_PER_LONG >= 64);
3161 dw2_asm_output_data (8, val1->v.val_int, NULL);
3168 gcc_assert (val1->val_class == dw_val_class_loc);
3169 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
3171 dw2_asm_output_data (2, offset, NULL);
3184 /* We currently don't make any attempt to make sure these are
3185 aligned properly like we do for the main unwind info, so
3186 don't support emitting things larger than a byte if we're
3187 only doing unwinding. */
3192 dw2_asm_output_data (1, val1->v.val_int, NULL);
3195 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3198 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3201 dw2_asm_output_data (1, val1->v.val_int, NULL);
3203 case DW_OP_plus_uconst:
3204 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3238 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3241 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3244 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3247 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3248 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
3251 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3253 case DW_OP_deref_size:
3254 case DW_OP_xderef_size:
3255 dw2_asm_output_data (1, val1->v.val_int, NULL);
3258 case INTERNAL_DW_OP_tls_addr:
3259 #ifdef ASM_OUTPUT_DWARF_DTPREL
3260 ASM_OUTPUT_DWARF_DTPREL (asm_out_file, DWARF2_ADDR_SIZE,
3262 fputc ('\n', asm_out_file);
3269 /* Other codes have no operands. */
3274 /* Output a sequence of location operations. */
3277 output_loc_sequence (dw_loc_descr_ref loc)
3279 for (; loc != NULL; loc = loc->dw_loc_next)
3281 /* Output the opcode. */
3282 dw2_asm_output_data (1, loc->dw_loc_opc,
3283 "%s", dwarf_stack_op_name (loc->dw_loc_opc));
3285 /* Output the operand(s) (if any). */
3286 output_loc_operands (loc);
3290 /* This routine will generate the correct assembly data for a location
3291 description based on a cfi entry with a complex address. */
3294 output_cfa_loc (dw_cfi_ref cfi)
3296 dw_loc_descr_ref loc;
3299 /* Output the size of the block. */
3300 loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
3301 size = size_of_locs (loc);
3302 dw2_asm_output_data_uleb128 (size, NULL);
3304 /* Now output the operations themselves. */
3305 output_loc_sequence (loc);
3308 /* This function builds a dwarf location descriptor sequence from
3309 a dw_cfa_location. */
3311 static struct dw_loc_descr_struct *
3312 build_cfa_loc (dw_cfa_location *cfa)
3314 struct dw_loc_descr_struct *head, *tmp;
3316 gcc_assert (cfa->indirect);
3318 if (cfa->base_offset)
3321 head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->base_offset, 0);
3323 head = new_loc_descr (DW_OP_bregx, cfa->reg, cfa->base_offset);
3325 else if (cfa->reg <= 31)
3326 head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
3328 head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
3330 head->dw_loc_oprnd1.val_class = dw_val_class_const;
3331 tmp = new_loc_descr (DW_OP_deref, 0, 0);
3332 add_loc_descr (&head, tmp);
3333 if (cfa->offset != 0)
3335 tmp = new_loc_descr (DW_OP_plus_uconst, cfa->offset, 0);
3336 add_loc_descr (&head, tmp);
3342 /* This function fills in aa dw_cfa_location structure from a dwarf location
3343 descriptor sequence. */
3346 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
3348 struct dw_loc_descr_struct *ptr;
3350 cfa->base_offset = 0;
3354 for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
3356 enum dwarf_location_atom op = ptr->dw_loc_opc;
3392 cfa->reg = op - DW_OP_reg0;
3395 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3429 cfa->reg = op - DW_OP_breg0;
3430 cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
3433 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3434 cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
3439 case DW_OP_plus_uconst:
3440 cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
3443 internal_error ("DW_LOC_OP %s not implemented\n",
3444 dwarf_stack_op_name (ptr->dw_loc_opc));
3448 #endif /* .debug_frame support */
3450 /* And now, the support for symbolic debugging information. */
3451 #ifdef DWARF2_DEBUGGING_INFO
3453 /* .debug_str support. */
3454 static int output_indirect_string (void **, void *);
3456 static void dwarf2out_init (const char *);
3457 static void dwarf2out_finish (const char *);
3458 static void dwarf2out_define (unsigned int, const char *);
3459 static void dwarf2out_undef (unsigned int, const char *);
3460 static void dwarf2out_start_source_file (unsigned, const char *);
3461 static void dwarf2out_end_source_file (unsigned);
3462 static void dwarf2out_begin_block (unsigned, unsigned);
3463 static void dwarf2out_end_block (unsigned, unsigned);
3464 static bool dwarf2out_ignore_block (tree);
3465 static void dwarf2out_global_decl (tree);
3466 static void dwarf2out_type_decl (tree, int);
3467 static void dwarf2out_imported_module_or_decl (tree, tree);
3468 static void dwarf2out_abstract_function (tree);
3469 static void dwarf2out_var_location (rtx);
3470 static void dwarf2out_begin_function (tree);
3471 static void dwarf2out_switch_text_section (void);
3473 /* The debug hooks structure. */
3475 const struct gcc_debug_hooks dwarf2_debug_hooks =
3481 dwarf2out_start_source_file,
3482 dwarf2out_end_source_file,
3483 dwarf2out_begin_block,
3484 dwarf2out_end_block,
3485 dwarf2out_ignore_block,
3486 dwarf2out_source_line,
3487 dwarf2out_begin_prologue,
3488 debug_nothing_int_charstar, /* end_prologue */
3489 dwarf2out_end_epilogue,
3490 dwarf2out_begin_function,
3491 debug_nothing_int, /* end_function */
3492 dwarf2out_decl, /* function_decl */
3493 dwarf2out_global_decl,
3494 dwarf2out_type_decl, /* type_decl */
3495 dwarf2out_imported_module_or_decl,
3496 debug_nothing_tree, /* deferred_inline_function */
3497 /* The DWARF 2 backend tries to reduce debugging bloat by not
3498 emitting the abstract description of inline functions until
3499 something tries to reference them. */
3500 dwarf2out_abstract_function, /* outlining_inline_function */
3501 debug_nothing_rtx, /* label */
3502 debug_nothing_int, /* handle_pch */
3503 dwarf2out_var_location,
3504 dwarf2out_switch_text_section,
3505 1 /* start_end_main_source_file */
3509 /* NOTE: In the comments in this file, many references are made to
3510 "Debugging Information Entries". This term is abbreviated as `DIE'
3511 throughout the remainder of this file. */
3513 /* An internal representation of the DWARF output is built, and then
3514 walked to generate the DWARF debugging info. The walk of the internal
3515 representation is done after the entire program has been compiled.
3516 The types below are used to describe the internal representation. */
3518 /* Various DIE's use offsets relative to the beginning of the
3519 .debug_info section to refer to each other. */
3521 typedef long int dw_offset;
3523 /* Define typedefs here to avoid circular dependencies. */
3525 typedef struct dw_attr_struct *dw_attr_ref;
3526 typedef struct dw_line_info_struct *dw_line_info_ref;
3527 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
3528 typedef struct pubname_struct *pubname_ref;
3529 typedef struct dw_ranges_struct *dw_ranges_ref;
3531 /* Each entry in the line_info_table maintains the file and
3532 line number associated with the label generated for that
3533 entry. The label gives the PC value associated with
3534 the line number entry. */
3536 typedef struct dw_line_info_struct GTY(())
3538 unsigned long dw_file_num;
3539 unsigned long dw_line_num;
3543 /* Line information for functions in separate sections; each one gets its
3545 typedef struct dw_separate_line_info_struct GTY(())
3547 unsigned long dw_file_num;
3548 unsigned long dw_line_num;
3549 unsigned long function;
3551 dw_separate_line_info_entry;
3553 /* Each DIE attribute has a field specifying the attribute kind,
3554 a link to the next attribute in the chain, and an attribute value.
3555 Attributes are typically linked below the DIE they modify. */
3557 typedef struct dw_attr_struct GTY(())
3559 enum dwarf_attribute dw_attr;
3560 dw_attr_ref dw_attr_next;
3561 dw_val_node dw_attr_val;
3565 /* The Debugging Information Entry (DIE) structure */
3567 typedef struct die_struct GTY(())
3569 enum dwarf_tag die_tag;
3571 dw_attr_ref die_attr;
3572 dw_die_ref die_parent;
3573 dw_die_ref die_child;
3575 dw_die_ref die_definition; /* ref from a specification to its definition */
3576 dw_offset die_offset;
3577 unsigned long die_abbrev;
3579 unsigned int decl_id;
3583 /* The pubname structure */
3585 typedef struct pubname_struct GTY(())
3592 struct dw_ranges_struct GTY(())
3597 /* The limbo die list structure. */
3598 typedef struct limbo_die_struct GTY(())
3602 struct limbo_die_struct *next;
3606 /* How to start an assembler comment. */
3607 #ifndef ASM_COMMENT_START
3608 #define ASM_COMMENT_START ";#"
3611 /* Define a macro which returns nonzero for a TYPE_DECL which was
3612 implicitly generated for a tagged type.
3614 Note that unlike the gcc front end (which generates a NULL named
3615 TYPE_DECL node for each complete tagged type, each array type, and
3616 each function type node created) the g++ front end generates a
3617 _named_ TYPE_DECL node for each tagged type node created.
3618 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
3619 generate a DW_TAG_typedef&nbs