1 /* Output Dwarf2 format symbol table information from GCC. 2 Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 3 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 4 Free Software Foundation, Inc. 5 Contributed by Gary Funck (gary@intrepid.com). 6 Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com). 7 Extensively modified by Jason Merrill (jason@cygnus.com). 8 9 This file is part of GCC. 10 11 GCC is free software; you can redistribute it and/or modify it under 12 the terms of the GNU General Public License as published by the Free 13 Software Foundation; either version 3, or (at your option) any later 14 version. 15 16 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 17 WARRANTY; without even the implied warranty of MERCHANTABILITY or 18 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 19 for more details. 20 21 You should have received a copy of the GNU General Public License 22 along with GCC; see the file COPYING3. If not see 23 <http://www.gnu.org/licenses/>. */ 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 /* DWARF2 Abbreviation Glossary: 38 39 CFA = Canonical Frame Address 40 a fixed address on the stack which identifies a call frame. 41 We define it to be the value of SP just before the call insn. 42 The CFA register and offset, which may change during the course 43 of the function, are used to calculate its value at runtime. 44 45 CFI = Call Frame Instruction 46 an instruction for the DWARF2 abstract machine 47 48 CIE = Common Information Entry 49 information describing information common to one or more FDEs 50 51 DIE = Debugging Information Entry 52 53 FDE = Frame Description Entry 54 information describing the stack call frame, in particular, 55 how to restore registers 56 57 DW_CFA_... = DWARF2 CFA call frame instruction 58 DW_TAG_... = DWARF2 DIE tag */ 59 60 #include "config.h" 61 #include "system.h" 62 #include "coretypes.h" 63 #include "tm.h" 64 #include "tree.h" 65 #include "version.h" 66 #include "flags.h" 67 #include "rtl.h" 68 #include "hard-reg-set.h" 69 #include "regs.h" 70 #include "insn-config.h" 71 #include "reload.h" 72 #include "function.h" 73 #include "output.h" 74 #include "expr.h" 75 #include "libfuncs.h" 76 #include "except.h" 77 #include "dwarf2.h" 78 #include "dwarf2out.h" 79 #include "dwarf2asm.h" 80 #include "toplev.h" 81 #include "ggc.h" 82 #include "md5.h" 83 #include "tm_p.h" 84 #include "diagnostic.h" 85 #include "tree-pretty-print.h" 86 #include "debug.h" 87 #include "target.h" 88 #include "common/common-target.h" 89 #include "langhooks.h" 90 #include "hashtab.h" 91 #include "cgraph.h" 92 #include "input.h" 93 #include "gimple.h" 94 #include "tree-pass.h" 95 #include "tree-flow.h" 96 #include "cfglayout.h" 97 #include "opts.h" 98 99 static void dwarf2out_source_line (unsigned int, const char *, int, bool); 100 static rtx last_var_location_insn; 101 static rtx cached_next_real_insn; 102 103 #ifdef VMS_DEBUGGING_INFO 104 int vms_file_stats_name (const char *, long long *, long *, char *, int *); 105 106 /* Define this macro to be a nonzero value if the directory specifications 107 which are output in the debug info should end with a separator. */ 108 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1 109 /* Define this macro to evaluate to a nonzero value if GCC should refrain 110 from generating indirect strings in DWARF2 debug information, for instance 111 if your target is stuck with an old version of GDB that is unable to 112 process them properly or uses VMS Debug. */ 113 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1 114 #else 115 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0 116 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0 117 #endif 118 119 /* ??? Poison these here until it can be done generically. They've been 120 totally replaced in this file; make sure it stays that way. */ 121 #undef DWARF2_UNWIND_INFO 122 #undef DWARF2_FRAME_INFO 123 #if (GCC_VERSION >= 3000) 124 #pragma GCC poison DWARF2_UNWIND_INFO DWARF2_FRAME_INFO 125 #endif 126 127 /* The size of the target's pointer type. */ 128 #ifndef PTR_SIZE 129 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT) 130 #endif 131 132 /* Array of RTXes referenced by the debugging information, which therefore 133 must be kept around forever. */ 134 static GTY(()) VEC(rtx,gc) *used_rtx_array; 135 136 /* A pointer to the base of a list of incomplete types which might be 137 completed at some later time. incomplete_types_list needs to be a 138 VEC(tree,gc) because we want to tell the garbage collector about 139 it. */ 140 static GTY(()) VEC(tree,gc) *incomplete_types; 141 142 /* A pointer to the base of a table of references to declaration 143 scopes. This table is a display which tracks the nesting 144 of declaration scopes at the current scope and containing 145 scopes. This table is used to find the proper place to 146 define type declaration DIE's. */ 147 static GTY(()) VEC(tree,gc) *decl_scope_table; 148 149 /* Pointers to various DWARF2 sections. */ 150 static GTY(()) section *debug_info_section; 151 static GTY(()) section *debug_abbrev_section; 152 static GTY(()) section *debug_aranges_section; 153 static GTY(()) section *debug_macinfo_section; 154 static GTY(()) section *debug_line_section; 155 static GTY(()) section *debug_loc_section; 156 static GTY(()) section *debug_pubnames_section; 157 static GTY(()) section *debug_pubtypes_section; 158 static GTY(()) section *debug_str_section; 159 static GTY(()) section *debug_ranges_section; 160 static GTY(()) section *debug_frame_section; 161 162 /* Maximum size (in bytes) of an artificially generated label. */ 163 #define MAX_ARTIFICIAL_LABEL_BYTES 30 164 165 /* According to the (draft) DWARF 3 specification, the initial length 166 should either be 4 or 12 bytes. When it's 12 bytes, the first 4 167 bytes are 0xffffffff, followed by the length stored in the next 8 168 bytes. 169 170 However, the SGI/MIPS ABI uses an initial length which is equal to 171 DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */ 172 173 #ifndef DWARF_INITIAL_LENGTH_SIZE 174 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12) 175 #endif 176 177 /* Round SIZE up to the nearest BOUNDARY. */ 178 #define DWARF_ROUND(SIZE,BOUNDARY) \ 179 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY)) 180 181 /* CIE identifier. */ 182 #if HOST_BITS_PER_WIDE_INT >= 64 183 #define DWARF_CIE_ID \ 184 (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID) 185 #else 186 #define DWARF_CIE_ID DW_CIE_ID 187 #endif 188 189 DEF_VEC_P (dw_fde_ref); 190 DEF_VEC_ALLOC_P (dw_fde_ref, gc); 191 192 /* A vector for a table that contains frame description 193 information for each routine. */ 194 static GTY(()) VEC(dw_fde_ref, gc) *fde_vec; 195 196 struct GTY(()) indirect_string_node { 197 const char *str; 198 unsigned int refcount; 199 enum dwarf_form form; 200 char *label; 201 }; 202 203 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash; 204 205 static GTY(()) int dw2_string_counter; 206 207 /* True if the compilation unit places functions in more than one section. */ 208 static GTY(()) bool have_multiple_function_sections = false; 209 210 /* Whether the default text and cold text sections have been used at all. */ 211 212 static GTY(()) bool text_section_used = false; 213 static GTY(()) bool cold_text_section_used = false; 214 215 /* The default cold text section. */ 216 static GTY(()) section *cold_text_section; 217 218 /* Forward declarations for functions defined in this file. */ 219 220 static char *stripattributes (const char *); 221 static void output_call_frame_info (int); 222 static void dwarf2out_note_section_used (void); 223 224 /* Personality decl of current unit. Used only when assembler does not support 225 personality CFI. */ 226 static GTY(()) rtx current_unit_personality; 227 228 /* Data and reference forms for relocatable data. */ 229 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4) 230 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4) 231 232 #ifndef DEBUG_FRAME_SECTION 233 #define DEBUG_FRAME_SECTION ".debug_frame" 234 #endif 235 236 #ifndef FUNC_BEGIN_LABEL 237 #define FUNC_BEGIN_LABEL "LFB" 238 #endif 239 240 #ifndef FUNC_END_LABEL 241 #define FUNC_END_LABEL "LFE" 242 #endif 243 244 #ifndef PROLOGUE_END_LABEL 245 #define PROLOGUE_END_LABEL "LPE" 246 #endif 247 248 #ifndef EPILOGUE_BEGIN_LABEL 249 #define EPILOGUE_BEGIN_LABEL "LEB" 250 #endif 251 252 #ifndef FRAME_BEGIN_LABEL 253 #define FRAME_BEGIN_LABEL "Lframe" 254 #endif 255 #define CIE_AFTER_SIZE_LABEL "LSCIE" 256 #define CIE_END_LABEL "LECIE" 257 #define FDE_LABEL "LSFDE" 258 #define FDE_AFTER_SIZE_LABEL "LASFDE" 259 #define FDE_END_LABEL "LEFDE" 260 #define LINE_NUMBER_BEGIN_LABEL "LSLT" 261 #define LINE_NUMBER_END_LABEL "LELT" 262 #define LN_PROLOG_AS_LABEL "LASLTP" 263 #define LN_PROLOG_END_LABEL "LELTP" 264 #define DIE_LABEL_PREFIX "DW" 265 266 /* Match the base name of a file to the base name of a compilation unit. */ 267 268 static int 269 matches_main_base (const char *path) 270 { 271 /* Cache the last query. */ 272 static const char *last_path = NULL; 273 static int last_match = 0; 274 if (path != last_path) 275 { 276 const char *base; 277 int length = base_of_path (path, &base); 278 last_path = path; 279 last_match = (length == main_input_baselength 280 && memcmp (base, main_input_basename, length) == 0); 281 } 282 return last_match; 283 } 284 285 #ifdef DEBUG_DEBUG_STRUCT 286 287 static int 288 dump_struct_debug (tree type, enum debug_info_usage usage, 289 enum debug_struct_file criterion, int generic, 290 int matches, int result) 291 { 292 /* Find the type name. */ 293 tree type_decl = TYPE_STUB_DECL (type); 294 tree t = type_decl; 295 const char *name = 0; 296 if (TREE_CODE (t) == TYPE_DECL) 297 t = DECL_NAME (t); 298 if (t) 299 name = IDENTIFIER_POINTER (t); 300 301 fprintf (stderr, " struct %d %s %s %s %s %d %p %s\n", 302 criterion, 303 DECL_IN_SYSTEM_HEADER (type_decl) ? "sys" : "usr", 304 matches ? "bas" : "hdr", 305 generic ? "gen" : "ord", 306 usage == DINFO_USAGE_DFN ? ";" : 307 usage == DINFO_USAGE_DIR_USE ? "." : "*", 308 result, 309 (void*) type_decl, name); 310 return result; 311 } 312 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \ 313 dump_struct_debug (type, usage, criterion, generic, matches, result) 314 315 #else 316 317 #define DUMP_GSTRUCT(type, usage, criterion, generic, matches, result) \ 318 (result) 319 320 #endif 321 322 static bool 323 should_emit_struct_debug (tree type, enum debug_info_usage usage) 324 { 325 enum debug_struct_file criterion; 326 tree type_decl; 327 bool generic = lang_hooks.types.generic_p (type); 328 329 if (generic) 330 criterion = debug_struct_generic[usage]; 331 else 332 criterion = debug_struct_ordinary[usage]; 333 334 if (criterion == DINFO_STRUCT_FILE_NONE) 335 return DUMP_GSTRUCT (type, usage, criterion, generic, false, false); 336 if (criterion == DINFO_STRUCT_FILE_ANY) 337 return DUMP_GSTRUCT (type, usage, criterion, generic, false, true); 338 339 type_decl = TYPE_STUB_DECL (TYPE_MAIN_VARIANT (type)); 340 341 if (criterion == DINFO_STRUCT_FILE_SYS && DECL_IN_SYSTEM_HEADER (type_decl)) 342 return DUMP_GSTRUCT (type, usage, criterion, generic, false, true); 343 344 if (matches_main_base (DECL_SOURCE_FILE (type_decl))) 345 return DUMP_GSTRUCT (type, usage, criterion, generic, true, true); 346 return DUMP_GSTRUCT (type, usage, criterion, generic, false, false); 347 } 348 349 /* Return a pointer to a copy of the section string name S with all 350 attributes stripped off, and an asterisk prepended (for assemble_name). */ 351 352 static inline char * 353 stripattributes (const char *s) 354 { 355 char *stripped = XNEWVEC (char, strlen (s) + 2); 356 char *p = stripped; 357 358 *p++ = '*'; 359 360 while (*s && *s != ',') 361 *p++ = *s++; 362 363 *p = '\0'; 364 return stripped; 365 } 366 367 /* Switch [BACK] to eh_frame_section. If we don't have an eh_frame_section, 368 switch to the data section instead, and write out a synthetic start label 369 for collect2 the first time around. */ 370 371 static void 372 switch_to_eh_frame_section (bool back) 373 { 374 tree label; 375 376 #ifdef EH_FRAME_SECTION_NAME 377 if (eh_frame_section == 0) 378 { 379 int flags; 380 381 if (EH_TABLES_CAN_BE_READ_ONLY) 382 { 383 int fde_encoding; 384 int per_encoding; 385 int lsda_encoding; 386 387 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, 388 /*global=*/0); 389 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, 390 /*global=*/1); 391 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, 392 /*global=*/0); 393 flags = ((! flag_pic 394 || ((fde_encoding & 0x70) != DW_EH_PE_absptr 395 && (fde_encoding & 0x70) != DW_EH_PE_aligned 396 && (per_encoding & 0x70) != DW_EH_PE_absptr 397 && (per_encoding & 0x70) != DW_EH_PE_aligned 398 && (lsda_encoding & 0x70) != DW_EH_PE_absptr 399 && (lsda_encoding & 0x70) != DW_EH_PE_aligned)) 400 ? 0 : SECTION_WRITE); 401 } 402 else 403 flags = SECTION_WRITE; 404 eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL); 405 } 406 #endif /* EH_FRAME_SECTION_NAME */ 407 408 if (eh_frame_section) 409 switch_to_section (eh_frame_section); 410 else 411 { 412 /* We have no special eh_frame section. Put the information in 413 the data section and emit special labels to guide collect2. */ 414 switch_to_section (data_section); 415 416 if (!back) 417 { 418 label = get_file_function_name ("F"); 419 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE)); 420 targetm.asm_out.globalize_label (asm_out_file, 421 IDENTIFIER_POINTER (label)); 422 ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label)); 423 } 424 } 425 } 426 427 /* Switch [BACK] to the eh or debug frame table section, depending on 428 FOR_EH. */ 429 430 static void 431 switch_to_frame_table_section (int for_eh, bool back) 432 { 433 if (for_eh) 434 switch_to_eh_frame_section (back); 435 else 436 { 437 if (!debug_frame_section) 438 debug_frame_section = get_section (DEBUG_FRAME_SECTION, 439 SECTION_DEBUG, NULL); 440 switch_to_section (debug_frame_section); 441 } 442 } 443 444 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used. */ 445 446 enum dw_cfi_oprnd_type 447 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi) 448 { 449 switch (cfi) 450 { 451 case DW_CFA_nop: 452 case DW_CFA_GNU_window_save: 453 case DW_CFA_remember_state: 454 case DW_CFA_restore_state: 455 return dw_cfi_oprnd_unused; 456 457 case DW_CFA_set_loc: 458 case DW_CFA_advance_loc1: 459 case DW_CFA_advance_loc2: 460 case DW_CFA_advance_loc4: 461 case DW_CFA_MIPS_advance_loc8: 462 return dw_cfi_oprnd_addr; 463 464 case DW_CFA_offset: 465 case DW_CFA_offset_extended: 466 case DW_CFA_def_cfa: 467 case DW_CFA_offset_extended_sf: 468 case DW_CFA_def_cfa_sf: 469 case DW_CFA_restore: 470 case DW_CFA_restore_extended: 471 case DW_CFA_undefined: 472 case DW_CFA_same_value: 473 case DW_CFA_def_cfa_register: 474 case DW_CFA_register: 475 case DW_CFA_expression: 476 return dw_cfi_oprnd_reg_num; 477 478 case DW_CFA_def_cfa_offset: 479 case DW_CFA_GNU_args_size: 480 case DW_CFA_def_cfa_offset_sf: 481 return dw_cfi_oprnd_offset; 482 483 case DW_CFA_def_cfa_expression: 484 return dw_cfi_oprnd_loc; 485 486 default: 487 gcc_unreachable (); 488 } 489 } 490 491 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */ 492 493 enum dw_cfi_oprnd_type 494 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi) 495 { 496 switch (cfi) 497 { 498 case DW_CFA_def_cfa: 499 case DW_CFA_def_cfa_sf: 500 case DW_CFA_offset: 501 case DW_CFA_offset_extended_sf: 502 case DW_CFA_offset_extended: 503 return dw_cfi_oprnd_offset; 504 505 case DW_CFA_register: 506 return dw_cfi_oprnd_reg_num; 507 508 case DW_CFA_expression: 509 return dw_cfi_oprnd_loc; 510 511 default: 512 return dw_cfi_oprnd_unused; 513 } 514 } 515 516 /* Output one FDE. */ 517 518 static void 519 output_fde (dw_fde_ref fde, bool for_eh, bool second, 520 char *section_start_label, int fde_encoding, char *augmentation, 521 bool any_lsda_needed, int lsda_encoding) 522 { 523 const char *begin, *end; 524 static unsigned int j; 525 char l1[20], l2[20]; 526 527 targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, for_eh, 528 /* empty */ 0); 529 targetm.asm_out.internal_label (asm_out_file, FDE_LABEL, 530 for_eh + j); 531 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j); 532 ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j); 533 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh) 534 dw2_asm_output_data (4, 0xffffffff, "Initial length escape value" 535 " indicating 64-bit DWARF extension"); 536 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1, 537 "FDE Length"); 538 ASM_OUTPUT_LABEL (asm_out_file, l1); 539 540 if (for_eh) 541 dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset"); 542 else 543 dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label, 544 debug_frame_section, "FDE CIE offset"); 545 546 begin = second ? fde->dw_fde_second_begin : fde->dw_fde_begin; 547 end = second ? fde->dw_fde_second_end : fde->dw_fde_end; 548 549 if (for_eh) 550 { 551 rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin); 552 SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL; 553 dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false, 554 "FDE initial location"); 555 dw2_asm_output_delta (size_of_encoded_value (fde_encoding), 556 end, begin, "FDE address range"); 557 } 558 else 559 { 560 dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location"); 561 dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range"); 562 } 563 564 if (augmentation[0]) 565 { 566 if (any_lsda_needed) 567 { 568 int size = size_of_encoded_value (lsda_encoding); 569 570 if (lsda_encoding == DW_EH_PE_aligned) 571 { 572 int offset = ( 4 /* Length */ 573 + 4 /* CIE offset */ 574 + 2 * size_of_encoded_value (fde_encoding) 575 + 1 /* Augmentation size */ ); 576 int pad = -offset & (PTR_SIZE - 1); 577 578 size += pad; 579 gcc_assert (size_of_uleb128 (size) == 1); 580 } 581 582 dw2_asm_output_data_uleb128 (size, "Augmentation size"); 583 584 if (fde->uses_eh_lsda) 585 { 586 ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA", 587 fde->funcdef_number); 588 dw2_asm_output_encoded_addr_rtx (lsda_encoding, 589 gen_rtx_SYMBOL_REF (Pmode, l1), 590 false, 591 "Language Specific Data Area"); 592 } 593 else 594 { 595 if (lsda_encoding == DW_EH_PE_aligned) 596 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE)); 597 dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0, 598 "Language Specific Data Area (none)"); 599 } 600 } 601 else 602 dw2_asm_output_data_uleb128 (0, "Augmentation size"); 603 } 604 605 /* Loop through the Call Frame Instructions associated with this FDE. */ 606 fde->dw_fde_current_label = begin; 607 { 608 size_t from, until, i; 609 610 from = 0; 611 until = VEC_length (dw_cfi_ref, fde->dw_fde_cfi); 612 613 if (fde->dw_fde_second_begin == NULL) 614 ; 615 else if (!second) 616 until = fde->dw_fde_switch_cfi_index; 617 else 618 from = fde->dw_fde_switch_cfi_index; 619 620 for (i = from; i < until; i++) 621 output_cfi (VEC_index (dw_cfi_ref, fde->dw_fde_cfi, i), fde, for_eh); 622 } 623 624 /* If we are to emit a ref/link from function bodies to their frame tables, 625 do it now. This is typically performed to make sure that tables 626 associated with functions are dragged with them and not discarded in 627 garbage collecting links. We need to do this on a per function basis to 628 cope with -ffunction-sections. */ 629 630 #ifdef ASM_OUTPUT_DWARF_TABLE_REF 631 /* Switch to the function section, emit the ref to the tables, and 632 switch *back* into the table section. */ 633 switch_to_section (function_section (fde->decl)); 634 ASM_OUTPUT_DWARF_TABLE_REF (section_start_label); 635 switch_to_frame_table_section (for_eh, true); 636 #endif 637 638 /* Pad the FDE out to an address sized boundary. */ 639 ASM_OUTPUT_ALIGN (asm_out_file, 640 floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE))); 641 ASM_OUTPUT_LABEL (asm_out_file, l2); 642 643 j += 2; 644 } 645 646 /* Return true if frame description entry FDE is needed for EH. */ 647 648 static bool 649 fde_needed_for_eh_p (dw_fde_ref fde) 650 { 651 if (flag_asynchronous_unwind_tables) 652 return true; 653 654 if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde->decl)) 655 return true; 656 657 if (fde->uses_eh_lsda) 658 return true; 659 660 /* If exceptions are enabled, we have collected nothrow info. */ 661 if (flag_exceptions && (fde->all_throwers_are_sibcalls || fde->nothrow)) 662 return false; 663 664 return true; 665 } 666 667 /* Output the call frame information used to record information 668 that relates to calculating the frame pointer, and records the 669 location of saved registers. */ 670 671 static void 672 output_call_frame_info (int for_eh) 673 { 674 unsigned int i; 675 dw_fde_ref fde; 676 dw_cfi_ref cfi; 677 char l1[20], l2[20], section_start_label[20]; 678 bool any_lsda_needed = false; 679 char augmentation[6]; 680 int augmentation_size; 681 int fde_encoding = DW_EH_PE_absptr; 682 int per_encoding = DW_EH_PE_absptr; 683 int lsda_encoding = DW_EH_PE_absptr; 684 int return_reg; 685 rtx personality = NULL; 686 int dw_cie_version; 687 688 /* Don't emit a CIE if there won't be any FDEs. */ 689 if (fde_vec == NULL) 690 return; 691 692 /* Nothing to do if the assembler's doing it all. */ 693 if (dwarf2out_do_cfi_asm ()) 694 return; 695 696 /* If we don't have any functions we'll want to unwind out of, don't emit 697 any EH unwind information. If we make FDEs linkonce, we may have to 698 emit an empty label for an FDE that wouldn't otherwise be emitted. We 699 want to avoid having an FDE kept around when the function it refers to 700 is discarded. Example where this matters: a primary function template 701 in C++ requires EH information, an explicit specialization doesn't. */ 702 if (for_eh) 703 { 704 bool any_eh_needed = false; 705 706 FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, i, fde) 707 { 708 if (fde->uses_eh_lsda) 709 any_eh_needed = any_lsda_needed = true; 710 else if (fde_needed_for_eh_p (fde)) 711 any_eh_needed = true; 712 else if (TARGET_USES_WEAK_UNWIND_INFO) 713 targetm.asm_out.emit_unwind_label (asm_out_file, fde->decl, 1, 1); 714 } 715 716 if (!any_eh_needed) 717 return; 718 } 719 720 /* We're going to be generating comments, so turn on app. */ 721 if (flag_debug_asm) 722 app_enable (); 723 724 /* Switch to the proper frame section, first time. */ 725 switch_to_frame_table_section (for_eh, false); 726 727 ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh); 728 ASM_OUTPUT_LABEL (asm_out_file, section_start_label); 729 730 /* Output the CIE. */ 731 ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh); 732 ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh); 733 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh) 734 dw2_asm_output_data (4, 0xffffffff, 735 "Initial length escape value indicating 64-bit DWARF extension"); 736 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1, 737 "Length of Common Information Entry"); 738 ASM_OUTPUT_LABEL (asm_out_file, l1); 739 740 /* Now that the CIE pointer is PC-relative for EH, 741 use 0 to identify the CIE. */ 742 dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE), 743 (for_eh ? 0 : DWARF_CIE_ID), 744 "CIE Identifier Tag"); 745 746 /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to 747 use CIE version 1, unless that would produce incorrect results 748 due to overflowing the return register column. */ 749 return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh); 750 dw_cie_version = 1; 751 if (return_reg >= 256 || dwarf_version > 2) 752 dw_cie_version = 3; 753 dw2_asm_output_data (1, dw_cie_version, "CIE Version"); 754 755 augmentation[0] = 0; 756 augmentation_size = 0; 757 758 personality = current_unit_personality; 759 if (for_eh) 760 { 761 char *p; 762 763 /* Augmentation: 764 z Indicates that a uleb128 is present to size the 765 augmentation section. 766 L Indicates the encoding (and thus presence) of 767 an LSDA pointer in the FDE augmentation. 768 R Indicates a non-default pointer encoding for 769 FDE code pointers. 770 P Indicates the presence of an encoding + language 771 personality routine in the CIE augmentation. */ 772 773 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0); 774 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1); 775 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0); 776 777 p = augmentation + 1; 778 if (personality) 779 { 780 *p++ = 'P'; 781 augmentation_size += 1 + size_of_encoded_value (per_encoding); 782 assemble_external_libcall (personality); 783 } 784 if (any_lsda_needed) 785 { 786 *p++ = 'L'; 787 augmentation_size += 1; 788 } 789 if (fde_encoding != DW_EH_PE_absptr) 790 { 791 *p++ = 'R'; 792 augmentation_size += 1; 793 } 794 if (p > augmentation + 1) 795 { 796 augmentation[0] = 'z'; 797 *p = '\0'; 798 } 799 800 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */ 801 if (personality && per_encoding == DW_EH_PE_aligned) 802 { 803 int offset = ( 4 /* Length */ 804 + 4 /* CIE Id */ 805 + 1 /* CIE version */ 806 + strlen (augmentation) + 1 /* Augmentation */ 807 + size_of_uleb128 (1) /* Code alignment */ 808 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT) 809 + 1 /* RA column */ 810 + 1 /* Augmentation size */ 811 + 1 /* Personality encoding */ ); 812 int pad = -offset & (PTR_SIZE - 1); 813 814 augmentation_size += pad; 815 816 /* Augmentations should be small, so there's scarce need to 817 iterate for a solution. Die if we exceed one uleb128 byte. */ 818 gcc_assert (size_of_uleb128 (augmentation_size) == 1); 819 } 820 } 821 822 dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation"); 823 if (dw_cie_version >= 4) 824 { 825 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size"); 826 dw2_asm_output_data (1, 0, "CIE Segment Size"); 827 } 828 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor"); 829 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT, 830 "CIE Data Alignment Factor"); 831 832 if (dw_cie_version == 1) 833 dw2_asm_output_data (1, return_reg, "CIE RA Column"); 834 else 835 dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column"); 836 837 if (augmentation[0]) 838 { 839 dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size"); 840 if (personality) 841 { 842 dw2_asm_output_data (1, per_encoding, "Personality (%s)", 843 eh_data_format_name (per_encoding)); 844 dw2_asm_output_encoded_addr_rtx (per_encoding, 845 personality, 846 true, NULL); 847 } 848 849 if (any_lsda_needed) 850 dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)", 851 eh_data_format_name (lsda_encoding)); 852 853 if (fde_encoding != DW_EH_PE_absptr) 854 dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)", 855 eh_data_format_name (fde_encoding)); 856 } 857 858 FOR_EACH_VEC_ELT (dw_cfi_ref, cie_cfi_vec, i, cfi) 859 output_cfi (cfi, NULL, for_eh); 860 861 /* Pad the CIE out to an address sized boundary. */ 862 ASM_OUTPUT_ALIGN (asm_out_file, 863 floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)); 864 ASM_OUTPUT_LABEL (asm_out_file, l2); 865 866 /* Loop through all of the FDE's. */ 867 FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, i, fde) 868 { 869 unsigned int k; 870 871 /* Don't emit EH unwind info for leaf functions that don't need it. */ 872 if (for_eh && !fde_needed_for_eh_p (fde)) 873 continue; 874 875 for (k = 0; k < (fde->dw_fde_second_begin ? 2 : 1); k++) 876 output_fde (fde, for_eh, k, section_start_label, fde_encoding, 877 augmentation, any_lsda_needed, lsda_encoding); 878 } 879 880 if (for_eh && targetm.terminate_dw2_eh_frame_info) 881 dw2_asm_output_data (4, 0, "End of Table"); 882 #ifdef MIPS_DEBUGGING_INFO 883 /* Work around Irix 6 assembler bug whereby labels at the end of a section 884 get a value of 0. Putting .align 0 after the label fixes it. */ 885 ASM_OUTPUT_ALIGN (asm_out_file, 0); 886 #endif 887 888 /* Turn off app to make assembly quicker. */ 889 if (flag_debug_asm) 890 app_disable (); 891 } 892 893 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed. */ 894 895 static void 896 dwarf2out_do_cfi_startproc (bool second) 897 { 898 int enc; 899 rtx ref; 900 rtx personality = get_personality_function (current_function_decl); 901 902 fprintf (asm_out_file, "\t.cfi_startproc\n"); 903 904 if (personality) 905 { 906 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1); 907 ref = personality; 908 909 /* ??? The GAS support isn't entirely consistent. We have to 910 handle indirect support ourselves, but PC-relative is done 911 in the assembler. Further, the assembler can't handle any 912 of the weirder relocation types. */ 913 if (enc & DW_EH_PE_indirect) 914 ref = dw2_force_const_mem (ref, true); 915 916 fprintf (asm_out_file, "\t.cfi_personality %#x,", enc); 917 output_addr_const (asm_out_file, ref); 918 fputc ('\n', asm_out_file); 919 } 920 921 if (crtl->uses_eh_lsda) 922 { 923 char lab[20]; 924 925 enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0); 926 ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA", 927 current_function_funcdef_no); 928 ref = gen_rtx_SYMBOL_REF (Pmode, lab); 929 SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL; 930 931 if (enc & DW_EH_PE_indirect) 932 ref = dw2_force_const_mem (ref, true); 933 934 fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc); 935 output_addr_const (asm_out_file, ref); 936 fputc ('\n', asm_out_file); 937 } 938 } 939 940 /* Allocate CURRENT_FDE. Immediately initialize all we can, noting that 941 this allocation may be done before pass_final. */ 942 943 dw_fde_ref 944 dwarf2out_alloc_current_fde (void) 945 { 946 dw_fde_ref fde; 947 948 fde = ggc_alloc_cleared_dw_fde_node (); 949 fde->decl = current_function_decl; 950 fde->funcdef_number = current_function_funcdef_no; 951 fde->fde_index = VEC_length (dw_fde_ref, fde_vec); 952 fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls; 953 fde->uses_eh_lsda = crtl->uses_eh_lsda; 954 fde->nothrow = crtl->nothrow; 955 fde->drap_reg = INVALID_REGNUM; 956 fde->vdrap_reg = INVALID_REGNUM; 957 958 /* Record the FDE associated with this function. */ 959 cfun->fde = fde; 960 VEC_safe_push (dw_fde_ref, gc, fde_vec, fde); 961 962 return fde; 963 } 964 965 /* Output a marker (i.e. a label) for the beginning of a function, before 966 the prologue. */ 967 968 void 969 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED, 970 const char *file ATTRIBUTE_UNUSED) 971 { 972 char label[MAX_ARTIFICIAL_LABEL_BYTES]; 973 char * dup_label; 974 dw_fde_ref fde; 975 section *fnsec; 976 bool do_frame; 977 978 current_function_func_begin_label = NULL; 979 980 do_frame = dwarf2out_do_frame (); 981 982 /* ??? current_function_func_begin_label is also used by except.c for 983 call-site information. We must emit this label if it might be used. */ 984 if (!do_frame 985 && (!flag_exceptions 986 || targetm_common.except_unwind_info (&global_options) != UI_TARGET)) 987 return; 988 989 fnsec = function_section (current_function_decl); 990 switch_to_section (fnsec); 991 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL, 992 current_function_funcdef_no); 993 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL, 994 current_function_funcdef_no); 995 dup_label = xstrdup (label); 996 current_function_func_begin_label = dup_label; 997 998 /* We can elide the fde allocation if we're not emitting debug info. */ 999 if (!do_frame) 1000 return; 1001 1002 /* Cater to the various TARGET_ASM_OUTPUT_MI_THUNK implementations that 1003 emit insns as rtx but bypass the bulk of rest_of_compilation, which 1004 would include pass_dwarf2_frame. If we've not created the FDE yet, 1005 do so now. */ 1006 fde = cfun->fde; 1007 if (fde == NULL) 1008 fde = dwarf2out_alloc_current_fde (); 1009 1010 /* Initialize the bits of CURRENT_FDE that were not available earlier. */ 1011 fde->dw_fde_begin = dup_label; 1012 fde->dw_fde_current_label = dup_label; 1013 fde->in_std_section = (fnsec == text_section 1014 || (cold_text_section && fnsec == cold_text_section)); 1015 1016 /* We only want to output line number information for the genuine dwarf2 1017 prologue case, not the eh frame case. */ 1018 #ifdef DWARF2_DEBUGGING_INFO 1019 if (file) 1020 dwarf2out_source_line (line, file, 0, true); 1021 #endif 1022 1023 if (dwarf2out_do_cfi_asm ()) 1024 dwarf2out_do_cfi_startproc (false); 1025 else 1026 { 1027 rtx personality = get_personality_function (current_function_decl); 1028 if (!current_unit_personality) 1029 current_unit_personality = personality; 1030 1031 /* We cannot keep a current personality per function as without CFI 1032 asm, at the point where we emit the CFI data, there is no current 1033 function anymore. */ 1034 if (personality && current_unit_personality != personality) 1035 sorry ("multiple EH personalities are supported only with assemblers " 1036 "supporting .cfi_personality directive"); 1037 } 1038 } 1039 1040 /* Output a marker (i.e. a label) for the end of the generated code 1041 for a function prologue. This gets called *after* the prologue code has 1042 been generated. */ 1043 1044 void 1045 dwarf2out_vms_end_prologue (unsigned int line ATTRIBUTE_UNUSED, 1046 const char *file ATTRIBUTE_UNUSED) 1047 { 1048 char label[MAX_ARTIFICIAL_LABEL_BYTES]; 1049 1050 /* Output a label to mark the endpoint of the code generated for this 1051 function. */ 1052 ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL, 1053 current_function_funcdef_no); 1054 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, PROLOGUE_END_LABEL, 1055 current_function_funcdef_no); 1056 cfun->fde->dw_fde_vms_end_prologue = xstrdup (label); 1057 } 1058 1059 /* Output a marker (i.e. a label) for the beginning of the generated code 1060 for a function epilogue. This gets called *before* the prologue code has 1061 been generated. */ 1062 1063 void 1064 dwarf2out_vms_begin_epilogue (unsigned int line ATTRIBUTE_UNUSED, 1065 const char *file ATTRIBUTE_UNUSED) 1066 { 1067 dw_fde_ref fde = cfun->fde; 1068 char label[MAX_ARTIFICIAL_LABEL_BYTES]; 1069 1070 if (fde->dw_fde_vms_begin_epilogue) 1071 return; 1072 1073 /* Output a label to mark the endpoint of the code generated for this 1074 function. */ 1075 ASM_GENERATE_INTERNAL_LABEL (label, EPILOGUE_BEGIN_LABEL, 1076 current_function_funcdef_no); 1077 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, EPILOGUE_BEGIN_LABEL, 1078 current_function_funcdef_no); 1079 fde->dw_fde_vms_begin_epilogue = xstrdup (label); 1080 } 1081 1082 /* Output a marker (i.e. a label) for the absolute end of the generated code 1083 for a function definition. This gets called *after* the epilogue code has 1084 been generated. */ 1085 1086 void 1087 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED, 1088 const char *file ATTRIBUTE_UNUSED) 1089 { 1090 dw_fde_ref fde; 1091 char label[MAX_ARTIFICIAL_LABEL_BYTES]; 1092 1093 last_var_location_insn = NULL_RTX; 1094 cached_next_real_insn = NULL_RTX; 1095 1096 if (dwarf2out_do_cfi_asm ()) 1097 fprintf (asm_out_file, "\t.cfi_endproc\n"); 1098 1099 /* Output a label to mark the endpoint of the code generated for this 1100 function. */ 1101 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL, 1102 current_function_funcdef_no); 1103 ASM_OUTPUT_LABEL (asm_out_file, label); 1104 fde = cfun->fde; 1105 gcc_assert (fde != NULL); 1106 if (fde->dw_fde_second_begin == NULL) 1107 fde->dw_fde_end = xstrdup (label); 1108 } 1109 1110 void 1111 dwarf2out_frame_finish (void) 1112 { 1113 /* Output call frame information. */ 1114 if (targetm.debug_unwind_info () == UI_DWARF2) 1115 output_call_frame_info (0); 1116 1117 /* Output another copy for the unwinder. */ 1118 if ((flag_unwind_tables || flag_exceptions) 1119 && targetm_common.except_unwind_info (&global_options) == UI_DWARF2) 1120 output_call_frame_info (1); 1121 } 1122 1123 /* Note that the current function section is being used for code. */ 1124 1125 static void 1126 dwarf2out_note_section_used (void) 1127 { 1128 section *sec = current_function_section (); 1129 if (sec == text_section) 1130 text_section_used = true; 1131 else if (sec == cold_text_section) 1132 cold_text_section_used = true; 1133 } 1134 1135 static void var_location_switch_text_section (void); 1136 static void set_cur_line_info_table (section *); 1137 1138 void 1139 dwarf2out_switch_text_section (void) 1140 { 1141 section *sect; 1142 dw_fde_ref fde = cfun->fde; 1143 1144 gcc_assert (cfun && fde && fde->dw_fde_second_begin == NULL); 1145 1146 if (!in_cold_section_p) 1147 { 1148 fde->dw_fde_end = crtl->subsections.cold_section_end_label; 1149 fde->dw_fde_second_begin = crtl->subsections.hot_section_label; 1150 fde->dw_fde_second_end = crtl->subsections.hot_section_end_label; 1151 } 1152 else 1153 { 1154 fde->dw_fde_end = crtl->subsections.hot_section_end_label; 1155 fde->dw_fde_second_begin = crtl->subsections.cold_section_label; 1156 fde->dw_fde_second_end = crtl->subsections.cold_section_end_label; 1157 } 1158 have_multiple_function_sections = true; 1159 1160 /* There is no need to mark used sections when not debugging. */ 1161 if (cold_text_section != NULL) 1162 dwarf2out_note_section_used (); 1163 1164 if (dwarf2out_do_cfi_asm ()) 1165 fprintf (asm_out_file, "\t.cfi_endproc\n"); 1166 1167 /* Now do the real section switch. */ 1168 sect = current_function_section (); 1169 switch_to_section (sect); 1170 1171 fde->second_in_std_section 1172 = (sect == text_section 1173 || (cold_text_section && sect == cold_text_section)); 1174 1175 if (dwarf2out_do_cfi_asm ()) 1176 dwarf2out_do_cfi_startproc (true); 1177 1178 var_location_switch_text_section (); 1179 1180 if (cold_text_section != NULL) 1181 set_cur_line_info_table (sect); 1182 } 1183 1184 /* And now, the subset of the debugging information support code necessary 1185 for emitting location expressions. */ 1186 1187 /* Data about a single source file. */ 1188 struct GTY(()) dwarf_file_data { 1189 const char * filename; 1190 int emitted_number; 1191 }; 1192 1193 typedef struct GTY(()) deferred_locations_struct 1194 { 1195 tree variable; 1196 dw_die_ref die; 1197 } deferred_locations; 1198 1199 DEF_VEC_O(deferred_locations); 1200 DEF_VEC_ALLOC_O(deferred_locations,gc); 1201 1202 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list; 1203 1204 DEF_VEC_P(dw_die_ref); 1205 DEF_VEC_ALLOC_P(dw_die_ref,heap); 1206 1207 /* Location lists are ranges + location descriptions for that range, 1208 so you can track variables that are in different places over 1209 their entire life. */ 1210 typedef struct GTY(()) dw_loc_list_struct { 1211 dw_loc_list_ref dw_loc_next; 1212 const char *begin; /* Label for begin address of range */ 1213 const char *end; /* Label for end address of range */ 1214 char *ll_symbol; /* Label for beginning of location list. 1215 Only on head of list */ 1216 const char *section; /* Section this loclist is relative to */ 1217 dw_loc_descr_ref expr; 1218 hashval_t hash; 1219 /* True if all addresses in this and subsequent lists are known to be 1220 resolved. */ 1221 bool resolved_addr; 1222 /* True if this list has been replaced by dw_loc_next. */ 1223 bool replaced; 1224 bool emitted; 1225 /* True if the range should be emitted even if begin and end 1226 are the same. */ 1227 bool force; 1228 } dw_loc_list_node; 1229 1230 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT); 1231 1232 /* Convert a DWARF stack opcode into its string name. */ 1233 1234 static const char * 1235 dwarf_stack_op_name (unsigned int op) 1236 { 1237 switch (op) 1238 { 1239 case DW_OP_addr: 1240 return "DW_OP_addr"; 1241 case DW_OP_deref: 1242 return "DW_OP_deref"; 1243 case DW_OP_const1u: 1244 return "DW_OP_const1u"; 1245 case DW_OP_const1s: 1246 return "DW_OP_const1s"; 1247 case DW_OP_const2u: 1248 return "DW_OP_const2u"; 1249 case DW_OP_const2s: 1250 return "DW_OP_const2s"; 1251 case DW_OP_const4u: 1252 return "DW_OP_const4u"; 1253 case DW_OP_const4s: 1254 return "DW_OP_const4s"; 1255 case DW_OP_const8u: 1256 return "DW_OP_const8u"; 1257 case DW_OP_const8s: 1258 return "DW_OP_const8s"; 1259 case DW_OP_constu: 1260 return "DW_OP_constu"; 1261 case DW_OP_consts: 1262 return "DW_OP_consts"; 1263 case DW_OP_dup: 1264 return "DW_OP_dup"; 1265 case DW_OP_drop: 1266 return "DW_OP_drop"; 1267 case DW_OP_over: 1268 return "DW_OP_over"; 1269 case DW_OP_pick: 1270 return "DW_OP_pick"; 1271 case DW_OP_swap: 1272 return "DW_OP_swap"; 1273 case DW_OP_rot: 1274 return "DW_OP_rot"; 1275 case DW_OP_xderef: 1276 return "DW_OP_xderef"; 1277 case DW_OP_abs: 1278 return "DW_OP_abs"; 1279 case DW_OP_and: 1280 return "DW_OP_and"; 1281 case DW_OP_div: 1282 return "DW_OP_div"; 1283 case DW_OP_minus: 1284 return "DW_OP_minus"; 1285 case DW_OP_mod: 1286 return "DW_OP_mod"; 1287 case DW_OP_mul: 1288 return "DW_OP_mul"; 1289 case DW_OP_neg: 1290 return "DW_OP_neg"; 1291 case DW_OP_not: 1292 return "DW_OP_not"; 1293 case DW_OP_or: 1294 return "DW_OP_or"; 1295 case DW_OP_plus: 1296 return "DW_OP_plus"; 1297 case DW_OP_plus_uconst: 1298 return "DW_OP_plus_uconst"; 1299 case DW_OP_shl: 1300 return "DW_OP_shl"; 1301 case DW_OP_shr: 1302 return "DW_OP_shr"; 1303 case DW_OP_shra: 1304 return "DW_OP_shra"; 1305 case DW_OP_xor: 1306 return "DW_OP_xor"; 1307 case DW_OP_bra: 1308 return "DW_OP_bra"; 1309 case DW_OP_eq: 1310 return "DW_OP_eq"; 1311 case DW_OP_ge: 1312 return "DW_OP_ge"; 1313 case DW_OP_gt: 1314 return "DW_OP_gt"; 1315 case DW_OP_le: 1316 return "DW_OP_le"; 1317 case DW_OP_lt: 1318 return "DW_OP_lt"; 1319 case DW_OP_ne: 1320 return "DW_OP_ne"; 1321 case DW_OP_skip: 1322 return "DW_OP_skip"; 1323 case DW_OP_lit0: 1324 return "DW_OP_lit0"; 1325 case DW_OP_lit1: 1326 return "DW_OP_lit1"; 1327 case DW_OP_lit2: 1328 return "DW_OP_lit2"; 1329 case DW_OP_lit3: 1330 return "DW_OP_lit3"; 1331 case DW_OP_lit4: 1332 return "DW_OP_lit4"; 1333 case DW_OP_lit5: 1334 return "DW_OP_lit5"; 1335 case DW_OP_lit6: 1336 return "DW_OP_lit6"; 1337 case DW_OP_lit7: 1338 return "DW_OP_lit7"; 1339 case DW_OP_lit8: 1340 return "DW_OP_lit8"; 1341 case DW_OP_lit9: 1342 return "DW_OP_lit9"; 1343 case DW_OP_lit10: 1344 return "DW_OP_lit10"; 1345 case DW_OP_lit11: 1346 return "DW_OP_lit11"; 1347 case DW_OP_lit12: 1348 return "DW_OP_lit12"; 1349 case DW_OP_lit13: 1350 return "DW_OP_lit13"; 1351 case DW_OP_lit14: 1352 return "DW_OP_lit14"; 1353 case DW_OP_lit15: 1354 return "DW_OP_lit15"; 1355 case DW_OP_lit16: 1356 return "DW_OP_lit16"; 1357 case DW_OP_lit17: 1358 return "DW_OP_lit17"; 1359 case DW_OP_lit18: 1360 return "DW_OP_lit18"; 1361 case DW_OP_lit19: 1362 return "DW_OP_lit19"; 1363 case DW_OP_lit20: 1364 return "DW_OP_lit20"; 1365 case DW_OP_lit21: 1366 return "DW_OP_lit21"; 1367 case DW_OP_lit22: 1368 return "DW_OP_lit22"; 1369 case DW_OP_lit23: 1370 return "DW_OP_lit23"; 1371 case DW_OP_lit24: 1372 return "DW_OP_lit24"; 1373 case DW_OP_lit25: 1374 return "DW_OP_lit25"; 1375 case DW_OP_lit26: 1376 return "DW_OP_lit26"; 1377 case DW_OP_lit27: 1378 return "DW_OP_lit27"; 1379 case DW_OP_lit28: 1380 return "DW_OP_lit28"; 1381 case DW_OP_lit29: 1382 return "DW_OP_lit29"; 1383 case DW_OP_lit30: 1384 return "DW_OP_lit30"; 1385 case DW_OP_lit31: 1386 return "DW_OP_lit31"; 1387 case DW_OP_reg0: 1388 return "DW_OP_reg0"; 1389 case DW_OP_reg1: 1390 return "DW_OP_reg1"; 1391 case DW_OP_reg2: 1392 return "DW_OP_reg2"; 1393 case DW_OP_reg3: 1394 return "DW_OP_reg3"; 1395 case DW_OP_reg4: 1396 return "DW_OP_reg4"; 1397 case DW_OP_reg5: 1398 return "DW_OP_reg5"; 1399 case DW_OP_reg6: 1400 return "DW_OP_reg6"; 1401 case DW_OP_reg7: 1402 return "DW_OP_reg7"; 1403 case DW_OP_reg8: 1404 return "DW_OP_reg8"; 1405 case DW_OP_reg9: 1406 return "DW_OP_reg9"; 1407 case DW_OP_reg10: 1408 return "DW_OP_reg10"; 1409 case DW_OP_reg11: 1410 return "DW_OP_reg11"; 1411 case DW_OP_reg12: 1412 return "DW_OP_reg12"; 1413 case DW_OP_reg13: 1414 return "DW_OP_reg13"; 1415 case DW_OP_reg14: 1416 return "DW_OP_reg14"; 1417 case DW_OP_reg15: 1418 return "DW_OP_reg15"; 1419 case DW_OP_reg16: 1420 return "DW_OP_reg16"; 1421 case DW_OP_reg17: 1422 return "DW_OP_reg17"; 1423 case DW_OP_reg18: 1424 return "DW_OP_reg18"; 1425 case DW_OP_reg19: 1426 return "DW_OP_reg19"; 1427 case DW_OP_reg20: 1428 return "DW_OP_reg20"; 1429 case DW_OP_reg21: 1430 return "DW_OP_reg21"; 1431 case DW_OP_reg22: 1432 return "DW_OP_reg22"; 1433 case DW_OP_reg23: 1434 return "DW_OP_reg23"; 1435 case DW_OP_reg24: 1436 return "DW_OP_reg24"; 1437 case DW_OP_reg25: 1438 return "DW_OP_reg25"; 1439 case DW_OP_reg26: 1440 return "DW_OP_reg26"; 1441 case DW_OP_reg27: 1442 return "DW_OP_reg27"; 1443 case DW_OP_reg28: 1444 return "DW_OP_reg28"; 1445 case DW_OP_reg29: 1446 return "DW_OP_reg29"; 1447 case DW_OP_reg30: 1448 return "DW_OP_reg30"; 1449 case DW_OP_reg31: 1450 return "DW_OP_reg31"; 1451 case DW_OP_breg0: 1452 return "DW_OP_breg0"; 1453 case DW_OP_breg1: 1454 return "DW_OP_breg1"; 1455 case DW_OP_breg2: 1456 return "DW_OP_breg2"; 1457 case DW_OP_breg3: 1458 return "DW_OP_breg3"; 1459 case DW_OP_breg4: 1460 return "DW_OP_breg4"; 1461 case DW_OP_breg5: 1462 return "DW_OP_breg5"; 1463 case DW_OP_breg6: 1464 return "DW_OP_breg6"; 1465 case DW_OP_breg7: 1466 return "DW_OP_breg7"; 1467 case DW_OP_breg8: 1468 return "DW_OP_breg8"; 1469 case DW_OP_breg9: 1470 return "DW_OP_breg9"; 1471 case DW_OP_breg10: 1472 return "DW_OP_breg10"; 1473 case DW_OP_breg11: 1474 return "DW_OP_breg11"; 1475 case DW_OP_breg12: 1476 return "DW_OP_breg12"; 1477 case DW_OP_breg13: 1478 return "DW_OP_breg13"; 1479 case DW_OP_breg14: 1480 return "DW_OP_breg14"; 1481 case DW_OP_breg15: 1482 return "DW_OP_breg15"; 1483 case DW_OP_breg16: 1484 return "DW_OP_breg16"; 1485 case DW_OP_breg17: 1486 return "DW_OP_breg17"; 1487 case DW_OP_breg18: 1488 return "DW_OP_breg18"; 1489 case DW_OP_breg19: 1490 return "DW_OP_breg19"; 1491 case DW_OP_breg20: 1492 return "DW_OP_breg20"; 1493 case DW_OP_breg21: 1494 return "DW_OP_breg21"; 1495 case DW_OP_breg22: 1496 return "DW_OP_breg22"; 1497 case DW_OP_breg23: 1498 return "DW_OP_breg23"; 1499 case DW_OP_breg24: 1500 return "DW_OP_breg24"; 1501 case DW_OP_breg25: 1502 return "DW_OP_breg25"; 1503 case DW_OP_breg26: 1504 return "DW_OP_breg26"; 1505 case DW_OP_breg27: 1506 return "DW_OP_breg27"; 1507 case DW_OP_breg28: 1508 return "DW_OP_breg28"; 1509 case DW_OP_breg29: 1510 return "DW_OP_breg29"; 1511 case DW_OP_breg30: 1512 return "DW_OP_breg30"; 1513 case DW_OP_breg31: 1514 return "DW_OP_breg31"; 1515 case DW_OP_regx: 1516 return "DW_OP_regx"; 1517 case DW_OP_fbreg: 1518 return "DW_OP_fbreg"; 1519 case DW_OP_bregx: 1520 return "DW_OP_bregx"; 1521 case DW_OP_piece: 1522 return "DW_OP_piece"; 1523 case DW_OP_deref_size: 1524 return "DW_OP_deref_size"; 1525 case DW_OP_xderef_size: 1526 return "DW_OP_xderef_size"; 1527 case DW_OP_nop: 1528 return "DW_OP_nop"; 1529 1530 case DW_OP_push_object_address: 1531 return "DW_OP_push_object_address"; 1532 case DW_OP_call2: 1533 return "DW_OP_call2"; 1534 case DW_OP_call4: 1535 return "DW_OP_call4"; 1536 case DW_OP_call_ref: 1537 return "DW_OP_call_ref"; 1538 case DW_OP_implicit_value: 1539 return "DW_OP_implicit_value"; 1540 case DW_OP_stack_value: 1541 return "DW_OP_stack_value"; 1542 case DW_OP_form_tls_address: 1543 return "DW_OP_form_tls_address"; 1544 case DW_OP_call_frame_cfa: 1545 return "DW_OP_call_frame_cfa"; 1546 case DW_OP_bit_piece: 1547 return "DW_OP_bit_piece"; 1548 1549 case DW_OP_GNU_push_tls_address: 1550 return "DW_OP_GNU_push_tls_address"; 1551 case DW_OP_GNU_uninit: 1552 return "DW_OP_GNU_uninit"; 1553 case DW_OP_GNU_encoded_addr: 1554 return "DW_OP_GNU_encoded_addr"; 1555 case DW_OP_GNU_implicit_pointer: 1556 return "DW_OP_GNU_implicit_pointer"; 1557 case DW_OP_GNU_entry_value: 1558 return "DW_OP_GNU_entry_value"; 1559 case DW_OP_GNU_const_type: 1560 return "DW_OP_GNU_const_type"; 1561 case DW_OP_GNU_regval_type: 1562 return "DW_OP_GNU_regval_type"; 1563 case DW_OP_GNU_deref_type: 1564 return "DW_OP_GNU_deref_type"; 1565 case DW_OP_GNU_convert: 1566 return "DW_OP_GNU_convert"; 1567 case DW_OP_GNU_reinterpret: 1568 return "DW_OP_GNU_reinterpret"; 1569 case DW_OP_GNU_parameter_ref: 1570 return "DW_OP_GNU_parameter_ref"; 1571 1572 default: 1573 return "OP_<unknown>"; 1574 } 1575 } 1576 1577 /* Return a pointer to a newly allocated location description. Location 1578 descriptions are simple expression terms that can be strung 1579 together to form more complicated location (address) descriptions. */ 1580 1581 static inline dw_loc_descr_ref 1582 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1, 1583 unsigned HOST_WIDE_INT oprnd2) 1584 { 1585 dw_loc_descr_ref descr = ggc_alloc_cleared_dw_loc_descr_node (); 1586 1587 descr->dw_loc_opc = op; 1588 descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const; 1589 descr->dw_loc_oprnd1.v.val_unsigned = oprnd1; 1590 descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const; 1591 descr->dw_loc_oprnd2.v.val_unsigned = oprnd2; 1592 1593 return descr; 1594 } 1595 1596 /* Return a pointer to a newly allocated location description for 1597 REG and OFFSET. */ 1598 1599 static inline dw_loc_descr_ref 1600 new_reg_loc_descr (unsigned int reg, unsigned HOST_WIDE_INT offset) 1601 { 1602 if (reg <= 31) 1603 return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg), 1604 offset, 0); 1605 else 1606 return new_loc_descr (DW_OP_bregx, reg, offset); 1607 } 1608 1609 /* Add a location description term to a location description expression. */ 1610 1611 static inline void 1612 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr) 1613 { 1614 dw_loc_descr_ref *d; 1615 1616 /* Find the end of the chain. */ 1617 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next) 1618 ; 1619 1620 *d = descr; 1621 } 1622 1623 /* Compare two location operands for exact equality. */ 1624 1625 static bool 1626 dw_val_equal_p (dw_val_node *a, dw_val_node *b) 1627 { 1628 if (a->val_class != b->val_class) 1629 return false; 1630 switch (a->val_class) 1631 { 1632 case dw_val_class_none: 1633 return true; 1634 case dw_val_class_addr: 1635 return rtx_equal_p (a->v.val_addr, b->v.val_addr); 1636 1637 case dw_val_class_offset: 1638 case dw_val_class_unsigned_const: 1639 case dw_val_class_const: 1640 case dw_val_class_range_list: 1641 case dw_val_class_lineptr: 1642 case dw_val_class_macptr: 1643 /* These are all HOST_WIDE_INT, signed or unsigned. */ 1644 return a->v.val_unsigned == b->v.val_unsigned; 1645 1646 case dw_val_class_loc: 1647 return a->v.val_loc == b->v.val_loc; 1648 case dw_val_class_loc_list: 1649 return a->v.val_loc_list == b->v.val_loc_list; 1650 case dw_val_class_die_ref: 1651 return a->v.val_die_ref.die == b->v.val_die_ref.die; 1652 case dw_val_class_fde_ref: 1653 return a->v.val_fde_index == b->v.val_fde_index; 1654 case dw_val_class_lbl_id: 1655 return strcmp (a->v.val_lbl_id, b->v.val_lbl_id) == 0; 1656 case dw_val_class_str: 1657 return a->v.val_str == b->v.val_str; 1658 case dw_val_class_flag: 1659 return a->v.val_flag == b->v.val_flag; 1660 case dw_val_class_file: 1661 return a->v.val_file == b->v.val_file; 1662 case dw_val_class_decl_ref: 1663 return a->v.val_decl_ref == b->v.val_decl_ref; 1664 1665 case dw_val_class_const_double: 1666 return (a->v.val_double.high == b->v.val_double.high 1667 && a->v.val_double.low == b->v.val_double.low); 1668 1669 case dw_val_class_vec: 1670 { 1671 size_t a_len = a->v.val_vec.elt_size * a->v.val_vec.length; 1672 size_t b_len = b->v.val_vec.elt_size * b->v.val_vec.length; 1673 1674 return (a_len == b_len 1675 && !memcmp (a->v.val_vec.array, b->v.val_vec.array, a_len)); 1676 } 1677 1678 case dw_val_class_data8: 1679 return memcmp (a->v.val_data8, b->v.val_data8, 8) == 0; 1680 1681 case dw_val_class_vms_delta: 1682 return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1) 1683 && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1)); 1684 } 1685 gcc_unreachable (); 1686 } 1687 1688 /* Compare two location atoms for exact equality. */ 1689 1690 static bool 1691 loc_descr_equal_p_1 (dw_loc_descr_ref a, dw_loc_descr_ref b) 1692 { 1693 if (a->dw_loc_opc != b->dw_loc_opc) 1694 return false; 1695 1696 /* ??? This is only ever set for DW_OP_constNu, for N equal to the 1697 address size, but since we always allocate cleared storage it 1698 should be zero for other types of locations. */ 1699 if (a->dtprel != b->dtprel) 1700 return false; 1701 1702 return (dw_val_equal_p (&a->dw_loc_oprnd1, &b->dw_loc_oprnd1) 1703 && dw_val_equal_p (&a->dw_loc_oprnd2, &b->dw_loc_oprnd2)); 1704 } 1705 1706 /* Compare two complete location expressions for exact equality. */ 1707 1708 bool 1709 loc_descr_equal_p (dw_loc_descr_ref a, dw_loc_descr_ref b) 1710 { 1711 while (1) 1712 { 1713 if (a == b) 1714 return true; 1715 if (a == NULL || b == NULL) 1716 return false; 1717 if (!loc_descr_equal_p_1 (a, b)) 1718 return false; 1719 1720 a = a->dw_loc_next; 1721 b = b->dw_loc_next; 1722 } 1723 } 1724 1725 1726 /* Add a constant OFFSET to a location expression. */ 1727 1728 static void 1729 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset) 1730 { 1731 dw_loc_descr_ref loc; 1732 HOST_WIDE_INT *p; 1733 1734 gcc_assert (*list_head != NULL); 1735 1736 if (!offset) 1737 return; 1738 1739 /* Find the end of the chain. */ 1740 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next) 1741 ; 1742 1743 p = NULL; 1744 if (loc->dw_loc_opc == DW_OP_fbreg 1745 || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31)) 1746 p = &loc->dw_loc_oprnd1.v.val_int; 1747 else if (loc->dw_loc_opc == DW_OP_bregx) 1748 p = &loc->dw_loc_oprnd2.v.val_int; 1749 1750 /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its 1751 offset. Don't optimize if an signed integer overflow would happen. */ 1752 if (p != NULL 1753 && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset) 1754 || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset))) 1755 *p += offset; 1756 1757 else if (offset > 0) 1758 loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0); 1759 1760 else 1761 { 1762 loc->dw_loc_next = int_loc_descriptor (-offset); 1763 add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_minus, 0, 0)); 1764 } 1765 } 1766 1767 /* Add a constant OFFSET to a location list. */ 1768 1769 static void 1770 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset) 1771 { 1772 dw_loc_list_ref d; 1773 for (d = list_head; d != NULL; d = d->dw_loc_next) 1774 loc_descr_plus_const (&d->expr, offset); 1775 } 1776 1777 #define DWARF_REF_SIZE \ 1778 (dwarf_version == 2 ? DWARF2_ADDR_SIZE : DWARF_OFFSET_SIZE) 1779 1780 static unsigned long int get_base_type_offset (dw_die_ref); 1781 1782 /* Return the size of a location descriptor. */ 1783 1784 static unsigned long 1785 size_of_loc_descr (dw_loc_descr_ref loc) 1786 { 1787 unsigned long size = 1; 1788 1789 switch (loc->dw_loc_opc) 1790 { 1791 case DW_OP_addr: 1792 size += DWARF2_ADDR_SIZE; 1793 break; 1794 case DW_OP_const1u: 1795 case DW_OP_const1s: 1796 size += 1; 1797 break; 1798 case DW_OP_const2u: 1799 case DW_OP_const2s: 1800 size += 2; 1801 break; 1802 case DW_OP_const4u: 1803 case DW_OP_const4s: 1804 size += 4; 1805 break; 1806 case DW_OP_const8u: 1807 case DW_OP_const8s: 1808 size += 8; 1809 break; 1810 case DW_OP_constu: 1811 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned); 1812 break; 1813 case DW_OP_consts: 1814 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int); 1815 break; 1816 case DW_OP_pick: 1817 size += 1; 1818 break; 1819 case DW_OP_plus_uconst: 1820 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned); 1821 break; 1822 case DW_OP_skip: 1823 case DW_OP_bra: 1824 size += 2; 1825 break; 1826 case DW_OP_breg0: 1827 case DW_OP_breg1: 1828 case DW_OP_breg2: 1829 case DW_OP_breg3: 1830 case DW_OP_breg4: 1831 case DW_OP_breg5: 1832 case DW_OP_breg6: 1833 case DW_OP_breg7: 1834 case DW_OP_breg8: 1835 case DW_OP_breg9: 1836 case DW_OP_breg10: 1837 case DW_OP_breg11: 1838 case DW_OP_breg12: 1839 case DW_OP_breg13: 1840 case DW_OP_breg14: 1841 case DW_OP_breg15: 1842 case DW_OP_breg16: 1843 case DW_OP_breg17: 1844 case DW_OP_breg18: 1845 case DW_OP_breg19: 1846 case DW_OP_breg20: 1847 case DW_OP_breg21: 1848 case DW_OP_breg22: 1849 case DW_OP_breg23: 1850 case DW_OP_breg24: 1851 case DW_OP_breg25: 1852 case DW_OP_breg26: 1853 case DW_OP_breg27: 1854 case DW_OP_breg28: 1855 case DW_OP_breg29: 1856 case DW_OP_breg30: 1857 case DW_OP_breg31: 1858 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int); 1859 break; 1860 case DW_OP_regx: 1861 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned); 1862 break; 1863 case DW_OP_fbreg: 1864 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int); 1865 break; 1866 case DW_OP_bregx: 1867 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned); 1868 size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int); 1869 break; 1870 case DW_OP_piece: 1871 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned); 1872 break; 1873 case DW_OP_bit_piece: 1874 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned); 1875 size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned); 1876 break; 1877 case DW_OP_deref_size: 1878 case DW_OP_xderef_size: 1879 size += 1; 1880 break; 1881 case DW_OP_call2: 1882 size += 2; 1883 break; 1884 case DW_OP_call4: 1885 size += 4; 1886 break; 1887 case DW_OP_call_ref: 1888 size += DWARF_REF_SIZE; 1889 break; 1890 case DW_OP_implicit_value: 1891 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned) 1892 + loc->dw_loc_oprnd1.v.val_unsigned; 1893 break; 1894 case DW_OP_GNU_implicit_pointer: 1895 size += DWARF_REF_SIZE + size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int); 1896 break; 1897 case DW_OP_GNU_entry_value: 1898 { 1899 unsigned long op_size = size_of_locs (loc->dw_loc_oprnd1.v.val_loc); 1900 size += size_of_uleb128 (op_size) + op_size; 1901 break; 1902 } 1903 case DW_OP_GNU_const_type: 1904 { 1905 unsigned long o 1906 = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die); 1907 size += size_of_uleb128 (o) + 1; 1908 switch (loc->dw_loc_oprnd2.val_class) 1909 { 1910 case dw_val_class_vec: 1911 size += loc->dw_loc_oprnd2.v.val_vec.length 1912 * loc->dw_loc_oprnd2.v.val_vec.elt_size; 1913 break; 1914 case dw_val_class_const: 1915 size += HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT; 1916 break; 1917 case dw_val_class_const_double: 1918 size += 2 * HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT; 1919 break; 1920 default: 1921 gcc_unreachable (); 1922 } 1923 break; 1924 } 1925 case DW_OP_GNU_regval_type: 1926 { 1927 unsigned long o 1928 = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die); 1929 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned) 1930 + size_of_uleb128 (o); 1931 } 1932 break; 1933 case DW_OP_GNU_deref_type: 1934 { 1935 unsigned long o 1936 = get_base_type_offset (loc->dw_loc_oprnd2.v.val_die_ref.die); 1937 size += 1 + size_of_uleb128 (o); 1938 } 1939 break; 1940 case DW_OP_GNU_convert: 1941 case DW_OP_GNU_reinterpret: 1942 if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const) 1943 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned); 1944 else 1945 { 1946 unsigned long o 1947 = get_base_type_offset (loc->dw_loc_oprnd1.v.val_die_ref.die); 1948 size += size_of_uleb128 (o); 1949 } 1950 break; 1951 case DW_OP_GNU_parameter_ref: 1952 size += 4; 1953 break; 1954 default: 1955 break; 1956 } 1957 1958 return size; 1959 } 1960 1961 /* Return the size of a series of location descriptors. */ 1962 1963 unsigned long 1964 size_of_locs (dw_loc_descr_ref loc) 1965 { 1966 dw_loc_descr_ref l; 1967 unsigned long size; 1968 1969 /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr 1970 field, to avoid writing to a PCH file. */ 1971 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next) 1972 { 1973 if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra) 1974 break; 1975 size += size_of_loc_descr (l); 1976 } 1977 if (! l) 1978 return size; 1979 1980 for (size = 0, l = loc; l != NULL; l = l->dw_loc_next) 1981 { 1982 l->dw_loc_addr = size; 1983 size += size_of_loc_descr (l); 1984 } 1985 1986 return size; 1987 } 1988 1989 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned); 1990 static void get_ref_die_offset_label (char *, dw_die_ref); 1991 static unsigned long int get_ref_die_offset (dw_die_ref); 1992 1993 /* Output location description stack opcode's operands (if any). 1994 The for_eh_or_skip parameter controls whether register numbers are 1995 converted using DWARF2_FRAME_REG_OUT, which is needed in the case that 1996 hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind 1997 info). This should be suppressed for the cases that have not been converted 1998 (i.e. symbolic debug info), by setting the parameter < 0. See PR47324. */ 1999 2000 static void 2001 output_loc_operands (dw_loc_descr_ref loc, int for_eh_or_skip) 2002 { 2003 dw_val_ref val1 = &loc->dw_loc_oprnd1; 2004 dw_val_ref val2 = &loc->dw_loc_oprnd2; 2005 2006 switch (loc->dw_loc_opc) 2007 { 2008 #ifdef DWARF2_DEBUGGING_INFO 2009 case DW_OP_const2u: 2010 case DW_OP_const2s: 2011 dw2_asm_output_data (2, val1->v.val_int, NULL); 2012 break; 2013 case DW_OP_const4u: 2014 if (loc->dtprel) 2015 { 2016 gcc_assert (targetm.asm_out.output_dwarf_dtprel); 2017 targetm.asm_out.output_dwarf_dtprel (asm_out_file, 4, 2018 val1->v.val_addr); 2019 fputc ('\n', asm_out_file); 2020 break; 2021 } 2022 /* FALLTHRU */ 2023 case DW_OP_const4s: 2024 dw2_asm_output_data (4, val1->v.val_int, NULL); 2025 break; 2026 case DW_OP_const8u: 2027 if (loc->dtprel) 2028 { 2029 gcc_assert (targetm.asm_out.output_dwarf_dtprel); 2030 targetm.asm_out.output_dwarf_dtprel (asm_out_file, 8, 2031 val1->v.val_addr); 2032 fputc ('\n', asm_out_file); 2033 break; 2034 } 2035 /* FALLTHRU */ 2036 case DW_OP_const8s: 2037 gcc_assert (HOST_BITS_PER_WIDE_INT >= 64); 2038 dw2_asm_output_data (8, val1->v.val_int, NULL); 2039 break; 2040 case DW_OP_skip: 2041 case DW_OP_bra: 2042 { 2043 int offset; 2044 2045 gcc_assert (val1->val_class == dw_val_class_loc); 2046 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3); 2047 2048 dw2_asm_output_data (2, offset, NULL); 2049 } 2050 break; 2051 case DW_OP_implicit_value: 2052 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL); 2053 switch (val2->val_class) 2054 { 2055 case dw_val_class_const: 2056 dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL); 2057 break; 2058 case dw_val_class_vec: 2059 { 2060 unsigned int elt_size = val2->v.val_vec.elt_size; 2061 unsigned int len = val2->v.val_vec.length; 2062 unsigned int i; 2063 unsigned char *p; 2064 2065 if (elt_size > sizeof (HOST_WIDE_INT)) 2066 { 2067 elt_size /= 2; 2068 len *= 2; 2069 } 2070 for (i = 0, p = val2->v.val_vec.array; 2071 i < len; 2072 i++, p += elt_size) 2073 dw2_asm_output_data (elt_size, extract_int (p, elt_size), 2074 "fp or vector constant word %u", i); 2075 } 2076 break; 2077 case dw_val_class_const_double: 2078 { 2079 unsigned HOST_WIDE_INT first, second; 2080 2081 if (WORDS_BIG_ENDIAN) 2082 { 2083 first = val2->v.val_double.high; 2084 second = val2->v.val_double.low; 2085 } 2086 else 2087 { 2088 first = val2->v.val_double.low; 2089 second = val2->v.val_double.high; 2090 } 2091 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR, 2092 first, NULL); 2093 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR, 2094 second, NULL); 2095 } 2096 break; 2097 case dw_val_class_addr: 2098 gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE); 2099 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL); 2100 break; 2101 default: 2102 gcc_unreachable (); 2103 } 2104 break; 2105 #else 2106 case DW_OP_const2u: 2107 case DW_OP_const2s: 2108 case DW_OP_const4u: 2109 case DW_OP_const4s: 2110 case DW_OP_const8u: 2111 case DW_OP_const8s: 2112 case DW_OP_skip: 2113 case DW_OP_bra: 2114 case DW_OP_implicit_value: 2115 /* We currently don't make any attempt to make sure these are 2116 aligned properly like we do for the main unwind info, so 2117 don't support emitting things larger than a byte if we're 2118 only doing unwinding. */ 2119 gcc_unreachable (); 2120 #endif 2121 case DW_OP_const1u: 2122 case DW_OP_const1s: 2123 dw2_asm_output_data (1, val1->v.val_int, NULL); 2124 break; 2125 case DW_OP_constu: 2126 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL); 2127 break; 2128 case DW_OP_consts: 2129 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL); 2130 break; 2131 case DW_OP_pick: 2132 dw2_asm_output_data (1, val1->v.val_int, NULL); 2133 break; 2134 case DW_OP_plus_uconst: 2135 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL); 2136 break; 2137 case DW_OP_breg0: 2138 case DW_OP_breg1: 2139 case DW_OP_breg2: 2140 case DW_OP_breg3: 2141 case DW_OP_breg4: 2142 case DW_OP_breg5: 2143 case DW_OP_breg6: 2144 case DW_OP_breg7: 2145 case DW_OP_breg8: 2146 case DW_OP_breg9: 2147 case DW_OP_breg10: 2148 case DW_OP_breg11: 2149 case DW_OP_breg12: 2150 case DW_OP_breg13: 2151 case DW_OP_breg14: 2152 case DW_OP_breg15: 2153 case DW_OP_breg16: 2154 case DW_OP_breg17: 2155 case DW_OP_breg18: 2156 case DW_OP_breg19: 2157 case DW_OP_breg20: 2158 case DW_OP_breg21: 2159 case DW_OP_breg22: 2160 case DW_OP_breg23: 2161 case DW_OP_breg24: 2162 case DW_OP_breg25: 2163 case DW_OP_breg26: 2164 case DW_OP_breg27: 2165 case DW_OP_breg28: 2166 case DW_OP_breg29: 2167 case DW_OP_breg30: 2168 case DW_OP_breg31: 2169 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL); 2170 break; 2171 case DW_OP_regx: 2172 { 2173 unsigned r = val1->v.val_unsigned; 2174 if (for_eh_or_skip >= 0) 2175 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip); 2176 gcc_assert (size_of_uleb128 (r) 2177 == size_of_uleb128 (val1->v.val_unsigned)); 2178 dw2_asm_output_data_uleb128 (r, NULL); 2179 } 2180 break; 2181 case DW_OP_fbreg: 2182 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL); 2183 break; 2184 case DW_OP_bregx: 2185 { 2186 unsigned r = val1->v.val_unsigned; 2187 if (for_eh_or_skip >= 0) 2188 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip); 2189 gcc_assert (size_of_uleb128 (r) 2190 == size_of_uleb128 (val1->v.val_unsigned)); 2191 dw2_asm_output_data_uleb128 (r, NULL); 2192 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL); 2193 } 2194 break; 2195 case DW_OP_piece: 2196 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL); 2197 break; 2198 case DW_OP_bit_piece: 2199 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL); 2200 dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL); 2201 break; 2202 case DW_OP_deref_size: 2203 case DW_OP_xderef_size: 2204 dw2_asm_output_data (1, val1->v.val_int, NULL); 2205 break; 2206 2207 case DW_OP_addr: 2208 if (loc->dtprel) 2209 { 2210 if (targetm.asm_out.output_dwarf_dtprel) 2211 { 2212 targetm.asm_out.output_dwarf_dtprel (asm_out_file, 2213 DWARF2_ADDR_SIZE, 2214 val1->v.val_addr); 2215 fputc ('\n', asm_out_file); 2216 } 2217 else 2218 gcc_unreachable (); 2219 } 2220 else 2221 { 2222 #ifdef DWARF2_DEBUGGING_INFO 2223 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL); 2224 #else 2225 gcc_unreachable (); 2226 #endif 2227 } 2228 break; 2229 2230 case DW_OP_GNU_implicit_pointer: 2231 { 2232 char label[MAX_ARTIFICIAL_LABEL_BYTES 2233 + HOST_BITS_PER_WIDE_INT / 2 + 2]; 2234 gcc_assert (val1->val_class == dw_val_class_die_ref); 2235 get_ref_die_offset_label (label, val1->v.val_die_ref.die); 2236 dw2_asm_output_offset (DWARF_REF_SIZE, label, debug_info_section, NULL); 2237 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL); 2238 } 2239 break; 2240 2241 case DW_OP_GNU_entry_value: 2242 dw2_asm_output_data_uleb128 (size_of_locs (val1->v.val_loc), NULL); 2243 output_loc_sequence (val1->v.val_loc, for_eh_or_skip); 2244 break; 2245 2246 case DW_OP_GNU_const_type: 2247 { 2248 unsigned long o = get_base_type_offset (val1->v.val_die_ref.die), l; 2249 gcc_assert (o); 2250 dw2_asm_output_data_uleb128 (o, NULL); 2251 switch (val2->val_class) 2252 { 2253 case dw_val_class_const: 2254 l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR; 2255 dw2_asm_output_data (1, l, NULL); 2256 dw2_asm_output_data (l, val2->v.val_int, NULL); 2257 break; 2258 case dw_val_class_vec: 2259 { 2260 unsigned int elt_size = val2->v.val_vec.elt_size; 2261 unsigned int len = val2->v.val_vec.length; 2262 unsigned int i; 2263 unsigned char *p; 2264 2265 l = len * elt_size; 2266 dw2_asm_output_data (1, l, NULL); 2267 if (elt_size > sizeof (HOST_WIDE_INT)) 2268 { 2269 elt_size /= 2; 2270 len *= 2; 2271 } 2272 for (i = 0, p = val2->v.val_vec.array; 2273 i < len; 2274 i++, p += elt_size) 2275 dw2_asm_output_data (elt_size, extract_int (p, elt_size), 2276 "fp or vector constant word %u", i); 2277 } 2278 break; 2279 case dw_val_class_const_double: 2280 { 2281 unsigned HOST_WIDE_INT first, second; 2282 l = HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR; 2283 2284 dw2_asm_output_data (1, 2 * l, NULL); 2285 if (WORDS_BIG_ENDIAN) 2286 { 2287 first = val2->v.val_double.high; 2288 second = val2->v.val_double.low; 2289 } 2290 else 2291 { 2292 first = val2->v.val_double.low; 2293 second = val2->v.val_double.high; 2294 } 2295 dw2_asm_output_data (l, first, NULL); 2296 dw2_asm_output_data (l, second, NULL); 2297 } 2298 break; 2299 default: 2300 gcc_unreachable (); 2301 } 2302 } 2303 break; 2304 case DW_OP_GNU_regval_type: 2305 { 2306 unsigned r = val1->v.val_unsigned; 2307 unsigned long o = get_base_type_offset (val2->v.val_die_ref.die); 2308 gcc_assert (o); 2309 if (for_eh_or_skip >= 0) 2310 { 2311 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip); 2312 gcc_assert (size_of_uleb128 (r) 2313 == size_of_uleb128 (val1->v.val_unsigned)); 2314 } 2315 dw2_asm_output_data_uleb128 (r, NULL); 2316 dw2_asm_output_data_uleb128 (o, NULL); 2317 } 2318 break; 2319 case DW_OP_GNU_deref_type: 2320 { 2321 unsigned long o = get_base_type_offset (val2->v.val_die_ref.die); 2322 gcc_assert (o); 2323 dw2_asm_output_data (1, val1->v.val_int, NULL); 2324 dw2_asm_output_data_uleb128 (o, NULL); 2325 } 2326 break; 2327 case DW_OP_GNU_convert: 2328 case DW_OP_GNU_reinterpret: 2329 if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const) 2330 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL); 2331 else 2332 { 2333 unsigned long o = get_base_type_offset (val1->v.val_die_ref.die); 2334 gcc_assert (o); 2335 dw2_asm_output_data_uleb128 (o, NULL); 2336 } 2337 break; 2338 2339 case DW_OP_GNU_parameter_ref: 2340 { 2341 unsigned long o; 2342 gcc_assert (val1->val_class == dw_val_class_die_ref); 2343 o = get_ref_die_offset (val1->v.val_die_ref.die); 2344 dw2_asm_output_data (4, o, NULL); 2345 } 2346 break; 2347 2348 default: 2349 /* Other codes have no operands. */ 2350 break; 2351 } 2352 } 2353 2354 /* Output a sequence of location operations. 2355 The for_eh_or_skip parameter controls whether register numbers are 2356 converted using DWARF2_FRAME_REG_OUT, which is needed in the case that 2357 hard reg numbers have been processed via DWARF_FRAME_REGNUM (i.e. for unwind 2358 info). This should be suppressed for the cases that have not been converted 2359 (i.e. symbolic debug info), by setting the parameter < 0. See PR47324. */ 2360 2361 void 2362 output_loc_sequence (dw_loc_descr_ref loc, int for_eh_or_skip) 2363 { 2364 for (; loc != NULL; loc = loc->dw_loc_next) 2365 { 2366 enum dwarf_location_atom opc = loc->dw_loc_opc; 2367 /* Output the opcode. */ 2368 if (for_eh_or_skip >= 0 2369 && opc >= DW_OP_breg0 && opc <= DW_OP_breg31) 2370 { 2371 unsigned r = (opc - DW_OP_breg0); 2372 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip); 2373 gcc_assert (r <= 31); 2374 opc = (enum dwarf_location_atom) (DW_OP_breg0 + r); 2375 } 2376 else if (for_eh_or_skip >= 0 2377 && opc >= DW_OP_reg0 && opc <= DW_OP_reg31) 2378 { 2379 unsigned r = (opc - DW_OP_reg0); 2380 r = DWARF2_FRAME_REG_OUT (r, for_eh_or_skip); 2381 gcc_assert (r <= 31); 2382 opc = (enum dwarf_location_atom) (DW_OP_reg0 + r); 2383 } 2384 2385 dw2_asm_output_data (1, opc, 2386 "%s", dwarf_stack_op_name (opc)); 2387 2388 /* Output the operand(s) (if any). */ 2389 output_loc_operands (loc, for_eh_or_skip); 2390 } 2391 } 2392 2393 /* Output location description stack opcode's operands (if any). 2394 The output is single bytes on a line, suitable for .cfi_escape. */ 2395 2396 static void 2397 output_loc_operands_raw (dw_loc_descr_ref loc) 2398 { 2399 dw_val_ref val1 = &loc->dw_loc_oprnd1; 2400 dw_val_ref val2 = &loc->dw_loc_oprnd2; 2401 2402 switch (loc->dw_loc_opc) 2403 { 2404 case DW_OP_addr: 2405 case DW_OP_implicit_value: 2406 /* We cannot output addresses in .cfi_escape, only bytes. */ 2407 gcc_unreachable (); 2408 2409 case DW_OP_const1u: 2410 case DW_OP_const1s: 2411 case DW_OP_pick: 2412 case DW_OP_deref_size: 2413 case DW_OP_xderef_size: 2414 fputc (',', asm_out_file); 2415 dw2_asm_output_data_raw (1, val1->v.val_int); 2416 break; 2417 2418 case DW_OP_const2u: 2419 case DW_OP_const2s: 2420 fputc (',', asm_out_file); 2421 dw2_asm_output_data_raw (2, val1->v.val_int); 2422 break; 2423 2424 case DW_OP_const4u: 2425 case DW_OP_const4s: 2426 fputc (',', asm_out_file); 2427 dw2_asm_output_data_raw (4, val1->v.val_int); 2428 break; 2429 2430 case DW_OP_const8u: 2431 case DW_OP_const8s: 2432 gcc_assert (HOST_BITS_PER_WIDE_INT >= 64); 2433 fputc (',', asm_out_file); 2434 dw2_asm_output_data_raw (8, val1->v.val_int); 2435 break; 2436 2437 case DW_OP_skip: 2438 case DW_OP_bra: 2439 { 2440 int offset; 2441 2442 gcc_assert (val1->val_class == dw_val_class_loc); 2443 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3); 2444 2445 fputc (',', asm_out_file); 2446 dw2_asm_output_data_raw (2, offset); 2447 } 2448 break; 2449 2450 case DW_OP_regx: 2451 { 2452 unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1); 2453 gcc_assert (size_of_uleb128 (r) 2454 == size_of_uleb128 (val1->v.val_unsigned)); 2455 fputc (',', asm_out_file); 2456 dw2_asm_output_data_uleb128_raw (r); 2457 } 2458 break; 2459 2460 case DW_OP_constu: 2461 case DW_OP_plus_uconst: 2462 case DW_OP_piece: 2463 fputc (',', asm_out_file); 2464 dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned); 2465 break; 2466 2467 case DW_OP_bit_piece: 2468 fputc (',', asm_out_file); 2469 dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned); 2470 dw2_asm_output_data_uleb128_raw (val2->v.val_unsigned); 2471 break; 2472 2473 case DW_OP_consts: 2474 case DW_OP_breg0: 2475 case DW_OP_breg1: 2476 case DW_OP_breg2: 2477 case DW_OP_breg3: 2478 case DW_OP_breg4: 2479 case DW_OP_breg5: 2480 case DW_OP_breg6: 2481 case DW_OP_breg7: 2482 case DW_OP_breg8: 2483 case DW_OP_breg9: 2484 case DW_OP_breg10: 2485 case DW_OP_breg11: 2486 case DW_OP_breg12: 2487 case DW_OP_breg13: 2488 case DW_OP_breg14: 2489 case DW_OP_breg15: 2490 case DW_OP_breg16: 2491 case DW_OP_breg17: 2492 case DW_OP_breg18: 2493 case DW_OP_breg19: 2494 case DW_OP_breg20: 2495 case DW_OP_breg21: 2496 case DW_OP_breg22: 2497 case DW_OP_breg23: 2498 case DW_OP_breg24: 2499 case DW_OP_breg25: 2500 case DW_OP_breg26: 2501 case DW_OP_breg27: 2502 case DW_OP_breg28: 2503 case DW_OP_breg29: 2504 case DW_OP_breg30: 2505 case DW_OP_breg31: 2506 case DW_OP_fbreg: 2507 fputc (',', asm_out_file); 2508 dw2_asm_output_data_sleb128_raw (val1->v.val_int); 2509 break; 2510 2511 case DW_OP_bregx: 2512 { 2513 unsigned r = DWARF2_FRAME_REG_OUT (val1->v.val_unsigned, 1); 2514 gcc_assert (size_of_uleb128 (r) 2515 == size_of_uleb128 (val1->v.val_unsigned)); 2516 fputc (',', asm_out_file); 2517 dw2_asm_output_data_uleb128_raw (r); 2518 fputc (',', asm_out_file); 2519 dw2_asm_output_data_sleb128_raw (val2->v.val_int); 2520 } 2521 break; 2522 2523 case DW_OP_GNU_implicit_pointer: 2524 case DW_OP_GNU_entry_value: 2525 case DW_OP_GNU_const_type: 2526 case DW_OP_GNU_regval_type: 2527 case DW_OP_GNU_deref_type: 2528 case DW_OP_GNU_convert: 2529 case DW_OP_GNU_reinterpret: 2530 case DW_OP_GNU_parameter_ref: 2531 gcc_unreachable (); 2532 break; 2533 2534 default: 2535 /* Other codes have no operands. */ 2536 break; 2537 } 2538 } 2539 2540 void 2541 output_loc_sequence_raw (dw_loc_descr_ref loc) 2542 { 2543 while (1) 2544 { 2545 enum dwarf_location_atom opc = loc->dw_loc_opc; 2546 /* Output the opcode. */ 2547 if (opc >= DW_OP_breg0 && opc <= DW_OP_breg31) 2548 { 2549 unsigned r = (opc - DW_OP_breg0); 2550 r = DWARF2_FRAME_REG_OUT (r, 1); 2551 gcc_assert (r <= 31); 2552 opc = (enum dwarf_location_atom) (DW_OP_breg0 + r); 2553 } 2554 else if (opc >= DW_OP_reg0 && opc <= DW_OP_reg31) 2555 { 2556 unsigned r = (opc - DW_OP_reg0); 2557 r = DWARF2_FRAME_REG_OUT (r, 1); 2558 gcc_assert (r <= 31); 2559 opc = (enum dwarf_location_atom) (DW_OP_reg0 + r); 2560 } 2561 /* Output the opcode. */ 2562 fprintf (asm_out_file, "%#x", opc); 2563 output_loc_operands_raw (loc); 2564 2565 if (!loc->dw_loc_next) 2566 break; 2567 loc = loc->dw_loc_next; 2568 2569 fputc (',', asm_out_file); 2570 } 2571 } 2572 2573 /* This function builds a dwarf location descriptor sequence from a 2574 dw_cfa_location, adding the given OFFSET to the result of the 2575 expression. */ 2576 2577 struct dw_loc_descr_struct * 2578 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset) 2579 { 2580 struct dw_loc_descr_struct *head, *tmp; 2581 2582 offset += cfa->offset; 2583 2584 if (cfa->indirect) 2585 { 2586 head = new_reg_loc_descr (cfa->reg, cfa->base_offset); 2587 head->dw_loc_oprnd1.val_class = dw_val_class_const; 2588 tmp = new_loc_descr (DW_OP_deref, 0, 0); 2589 add_loc_descr (&head, tmp); 2590 if (offset != 0) 2591 { 2592 tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0); 2593 add_loc_descr (&head, tmp); 2594 } 2595 } 2596 else 2597 head = new_reg_loc_descr (cfa->reg, offset); 2598 2599 return head; 2600 } 2601 2602 /* This function builds a dwarf location descriptor sequence for 2603 the address at OFFSET from the CFA when stack is aligned to 2604 ALIGNMENT byte. */ 2605 2606 struct dw_loc_descr_struct * 2607 build_cfa_aligned_loc (dw_cfa_location *cfa, 2608 HOST_WIDE_INT offset, HOST_WIDE_INT alignment) 2609 { 2610 struct dw_loc_descr_struct *head; 2611 unsigned int dwarf_fp 2612 = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM); 2613 2614 /* When CFA is defined as FP+OFFSET, emulate stack alignment. */ 2615 if (cfa->reg == HARD_FRAME_POINTER_REGNUM && cfa->indirect == 0) 2616 { 2617 head = new_reg_loc_descr (dwarf_fp, 0); 2618 add_loc_descr (&head, int_loc_descriptor (alignment)); 2619 add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0)); 2620 loc_descr_plus_const (&head, offset); 2621 } 2622 else 2623 head = new_reg_loc_descr (dwarf_fp, offset); 2624 return head; 2625 } 2626 2627 /* And now, the support for symbolic debugging information. */ 2628 2629 /* .debug_str support. */ 2630 static int output_indirect_string (void **, void *); 2631 2632 static void dwarf2out_init (const char *); 2633 static void dwarf2out_finish (const char *); 2634 static void dwarf2out_assembly_start (void); 2635 static void dwarf2out_define (unsigned int, const char *); 2636 static void dwarf2out_undef (unsigned int, const char *); 2637 static void dwarf2out_start_source_file (unsigned, const char *); 2638 static void dwarf2out_end_source_file (unsigned); 2639 static void dwarf2out_function_decl (tree); 2640 static void dwarf2out_begin_block (unsigned, unsigned); 2641 static void dwarf2out_end_block (unsigned, unsigned); 2642 static bool dwarf2out_ignore_block (const_tree); 2643 static void dwarf2out_global_decl (tree); 2644 static void dwarf2out_type_decl (tree, int); 2645 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool); 2646 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree, 2647 dw_die_ref); 2648 static void dwarf2out_abstract_function (tree); 2649 static void dwarf2out_var_location (rtx); 2650 static void dwarf2out_begin_function (tree); 2651 static void dwarf2out_set_name (tree, tree); 2652 2653 /* The debug hooks structure. */ 2654 2655 const struct gcc_debug_hooks dwarf2_debug_hooks = 2656 { 2657 dwarf2out_init, 2658 dwarf2out_finish, 2659 dwarf2out_assembly_start, 2660 dwarf2out_define, 2661 dwarf2out_undef, 2662 dwarf2out_start_source_file, 2663 dwarf2out_end_source_file, 2664 dwarf2out_begin_block, 2665 dwarf2out_end_block, 2666 dwarf2out_ignore_block, 2667 dwarf2out_source_line, 2668 dwarf2out_begin_prologue, 2669 #if VMS_DEBUGGING_INFO 2670 dwarf2out_vms_end_prologue, 2671 dwarf2out_vms_begin_epilogue, 2672 #else 2673 debug_nothing_int_charstar, 2674 debug_nothing_int_charstar, 2675 #endif 2676 dwarf2out_end_epilogue, 2677 dwarf2out_begin_function, 2678 debug_nothing_int, /* end_function */ 2679 dwarf2out_function_decl, /* function_decl */ 2680 dwarf2out_global_decl, 2681 dwarf2out_type_decl, /* type_decl */ 2682 dwarf2out_imported_module_or_decl, 2683 debug_nothing_tree, /* deferred_inline_function */ 2684 /* The DWARF 2 backend tries to reduce debugging bloat by not 2685 emitting the abstract description of inline functions until 2686 something tries to reference them. */ 2687 dwarf2out_abstract_function, /* outlining_inline_function */ 2688 debug_nothing_rtx, /* label */ 2689 debug_nothing_int, /* handle_pch */ 2690 dwarf2out_var_location, 2691 dwarf2out_switch_text_section, 2692 dwarf2out_set_name, 2693 1, /* start_end_main_source_file */ 2694 TYPE_SYMTAB_IS_DIE /* tree_type_symtab_field */ 2695 }; 2696 2697 /* NOTE: In the comments in this file, many references are made to 2698 "Debugging Information Entries". This term is abbreviated as `DIE' 2699 throughout the remainder of this file. */ 2700 2701 /* An internal representation of the DWARF output is built, and then 2702 walked to generate the DWARF debugging info. The walk of the internal 2703 representation is done after the entire program has been compiled. 2704 The types below are used to describe the internal representation. */ 2705 2706 /* Whether to put type DIEs into their own section .debug_types instead 2707 of making them part of the .debug_info section. Only supported for 2708 Dwarf V4 or higher and the user didn't disable them through 2709 -fno-debug-types-section. It is more efficient to put them in a 2710 separate comdat sections since the linker will then be able to 2711 remove duplicates. But not all tools support .debug_types sections 2712 yet. */ 2713 2714 #define use_debug_types (dwarf_version >= 4 && flag_debug_types_section) 2715 2716 /* Various DIE's use offsets relative to the beginning of the 2717 .debug_info section to refer to each other. */ 2718 2719 typedef long int dw_offset; 2720 2721 /* Define typedefs here to avoid circular dependencies. */ 2722 2723 typedef struct dw_attr_struct *dw_attr_ref; 2724 typedef struct dw_line_info_struct *dw_line_info_ref; 2725 typedef struct pubname_struct *pubname_ref; 2726 typedef struct dw_ranges_struct *dw_ranges_ref; 2727 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref; 2728 typedef struct comdat_type_struct *comdat_type_node_ref; 2729 2730 /* The entries in the line_info table more-or-less mirror the opcodes 2731 that are used in the real dwarf line table. Arrays of these entries 2732 are collected per section when DWARF2_ASM_LINE_DEBUG_INFO is not 2733 supported. */ 2734 2735 enum dw_line_info_opcode { 2736 /* Emit DW_LNE_set_address; the operand is the label index. */ 2737 LI_set_address, 2738 2739 /* Emit a row to the matrix with the given line. This may be done 2740 via any combination of DW_LNS_copy, DW_LNS_advance_line, and 2741 special opcodes. */ 2742 LI_set_line, 2743 2744 /* Emit a DW_LNS_set_file. */ 2745 LI_set_file, 2746 2747 /* Emit a DW_LNS_set_column. */ 2748 LI_set_column, 2749 2750 /* Emit a DW_LNS_negate_stmt; the operand is ignored. */ 2751 LI_negate_stmt, 2752 2753 /* Emit a DW_LNS_set_prologue_end/epilogue_begin; the operand is ignored. */ 2754 LI_set_prologue_end, 2755 LI_set_epilogue_begin, 2756 2757 /* Emit a DW_LNE_set_discriminator. */ 2758 LI_set_discriminator 2759 }; 2760 2761 typedef struct GTY(()) dw_line_info_struct { 2762 enum dw_line_info_opcode opcode; 2763 unsigned int val; 2764 } dw_line_info_entry; 2765 2766 DEF_VEC_O(dw_line_info_entry); 2767 DEF_VEC_ALLOC_O(dw_line_info_entry, gc); 2768 2769 typedef struct GTY(()) dw_line_info_table_struct { 2770 /* The label that marks the end of this section. */ 2771 const char *end_label; 2772 2773 /* The values for the last row of the matrix, as collected in the table. 2774 These are used to minimize the changes to the next row. */ 2775 unsigned int file_num; 2776 unsigned int line_num; 2777 unsigned int column_num; 2778 int discrim_num; 2779 bool is_stmt; 2780 bool in_use; 2781 2782 VEC(dw_line_info_entry, gc) *entries; 2783 } dw_line_info_table; 2784 2785 typedef dw_line_info_table *dw_line_info_table_p; 2786 2787 DEF_VEC_P(dw_line_info_table_p); 2788 DEF_VEC_ALLOC_P(dw_line_info_table_p, gc); 2789 2790 /* Each DIE attribute has a field specifying the attribute kind, 2791 a link to the next attribute in the chain, and an attribute value. 2792 Attributes are typically linked below the DIE they modify. */ 2793 2794 typedef struct GTY(()) dw_attr_struct { 2795 enum dwarf_attribute dw_attr; 2796 dw_val_node dw_attr_val; 2797 } 2798 dw_attr_node; 2799 2800 DEF_VEC_O(dw_attr_node); 2801 DEF_VEC_ALLOC_O(dw_attr_node,gc); 2802 2803 /* The Debugging Information Entry (DIE) structure. DIEs form a tree. 2804 The children of each node form a circular list linked by 2805 die_sib. die_child points to the node *before* the "first" child node. */ 2806 2807 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct { 2808 union die_symbol_or_type_node 2809 { 2810 char * GTY ((tag ("0"))) die_symbol; 2811 comdat_type_node_ref GTY ((tag ("1"))) die_type_node; 2812 } 2813 GTY ((desc ("use_debug_types"))) die_id; 2814 VEC(dw_attr_node,gc) * die_attr; 2815 dw_die_ref die_parent; 2816 dw_die_ref die_child; 2817 dw_die_ref die_sib; 2818 dw_die_ref die_definition; /* ref from a specification to its definition */ 2819 dw_offset die_offset; 2820 unsigned long die_abbrev; 2821 int die_mark; 2822 /* Die is used and must not be pruned as unused. */ 2823 int die_perennial_p; 2824 unsigned int decl_id; 2825 enum dwarf_tag die_tag; 2826 } 2827 die_node; 2828 2829 /* Evaluate 'expr' while 'c' is set to each child of DIE in order. */ 2830 #define FOR_EACH_CHILD(die, c, expr) do { \ 2831 c = die->die_child; \ 2832 if (c) do { \ 2833 c = c->die_sib; \ 2834 expr; \ 2835 } while (c != die->die_child); \ 2836 } while (0) 2837 2838 /* The pubname structure */ 2839 2840 typedef struct GTY(()) pubname_struct { 2841 dw_die_ref die; 2842 const char *name; 2843 } 2844 pubname_entry; 2845 2846 DEF_VEC_O(pubname_entry); 2847 DEF_VEC_ALLOC_O(pubname_entry, gc); 2848 2849 struct GTY(()) dw_ranges_struct { 2850 /* If this is positive, it's a block number, otherwise it's a 2851 bitwise-negated index into dw_ranges_by_label. */ 2852 int num; 2853 }; 2854 2855 /* A structure to hold a macinfo entry. */ 2856 2857 typedef struct GTY(()) macinfo_struct { 2858 unsigned char code; 2859 unsigned HOST_WIDE_INT lineno; 2860 const char *info; 2861 } 2862 macinfo_entry; 2863 2864 DEF_VEC_O(macinfo_entry); 2865 DEF_VEC_ALLOC_O(macinfo_entry, gc); 2866 2867 struct GTY(()) dw_ranges_by_label_struct { 2868 const char *begin; 2869 const char *end; 2870 }; 2871 2872 /* The comdat type node structure. */ 2873 typedef struct GTY(()) comdat_type_struct 2874 { 2875 dw_die_ref root_die; 2876 dw_die_ref type_die; 2877 char signature[DWARF_TYPE_SIGNATURE_SIZE]; 2878 struct comdat_type_struct *next; 2879 } 2880 comdat_type_node; 2881 2882 /* The limbo die list structure. */ 2883 typedef struct GTY(()) limbo_die_struct { 2884 dw_die_ref die; 2885 tree created_for; 2886 struct limbo_die_struct *next; 2887 } 2888 limbo_die_node; 2889 2890 typedef struct skeleton_chain_struct 2891 { 2892 dw_die_ref old_die; 2893 dw_die_ref new_die; 2894 struct skeleton_chain_struct *parent; 2895 } 2896 skeleton_chain_node; 2897 2898 /* Define a macro which returns nonzero for a TYPE_DECL which was 2899 implicitly generated for a type. 2900 2901 Note that, unlike the C front-end (which generates a NULL named 2902 TYPE_DECL node for each complete tagged type, each array type, 2903 and each function type node created) the C++ front-end generates 2904 a _named_ TYPE_DECL node for each tagged type node created. 2905 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to 2906 generate a DW_TAG_typedef DIE for them. Likewise with the Ada 2907 front-end, but for each type, tagged or not. */ 2908 2909 #define TYPE_DECL_IS_STUB(decl) \ 2910 (DECL_NAME (decl) == NULL_TREE \ 2911 || (DECL_ARTIFICIAL (decl) \ 2912 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \ 2913 /* This is necessary for stub decls that \ 2914 appear in nested inline functions. */ \ 2915 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \ 2916 && (decl_ultimate_origin (decl) \ 2917 == TYPE_STUB_DECL (TREE_TYPE (decl))))))) 2918 2919 /* Information concerning the compilation unit's programming 2920 language, and compiler version. */ 2921 2922 /* Fixed size portion of the DWARF compilation unit header. */ 2923 #define DWARF_COMPILE_UNIT_HEADER_SIZE \ 2924 (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3) 2925 2926 /* Fixed size portion of the DWARF comdat type unit header. */ 2927 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \ 2928 (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \ 2929 + DWARF_OFFSET_SIZE) 2930 2931 /* Fixed size portion of public names info. */ 2932 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2) 2933 2934 /* Fixed size portion of the address range info. */ 2935 #define DWARF_ARANGES_HEADER_SIZE \ 2936 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \ 2937 DWARF2_ADDR_SIZE * 2) \ 2938 - DWARF_INITIAL_LENGTH_SIZE) 2939 2940 /* Size of padding portion in the address range info. It must be 2941 aligned to twice the pointer size. */ 2942 #define DWARF_ARANGES_PAD_SIZE \ 2943 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \ 2944 DWARF2_ADDR_SIZE * 2) \ 2945 - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4)) 2946 2947 /* Use assembler line directives if available. */ 2948 #ifndef DWARF2_ASM_LINE_DEBUG_INFO 2949 #ifdef HAVE_AS_DWARF2_DEBUG_LINE 2950 #define DWARF2_ASM_LINE_DEBUG_INFO 1 2951 #else 2952 #define DWARF2_ASM_LINE_DEBUG_INFO 0 2953 #endif 2954 #endif 2955 2956 /* Minimum line offset in a special line info. opcode. 2957 This value was chosen to give a reasonable range of values. */ 2958 #define DWARF_LINE_BASE -10 2959 2960 /* First special line opcode - leave room for the standard opcodes. */ 2961 #define DWARF_LINE_OPCODE_BASE ((int)DW_LNS_set_isa + 1) 2962 2963 /* Range of line offsets in a special line info. opcode. */ 2964 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1) 2965 2966 /* Flag that indicates the initial value of the is_stmt_start flag. 2967 In the present implementation, we do not mark any lines as 2968 the beginning of a source statement, because that information 2969 is not made available by the GCC front-end. */ 2970 #define DWARF_LINE_DEFAULT_IS_STMT_START 1 2971 2972 /* Maximum number of operations per instruction bundle. */ 2973 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 2974 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1 2975 #endif 2976 2977 /* This location is used by calc_die_sizes() to keep track 2978 the offset of each DIE within the .debug_info section. */ 2979 static unsigned long next_die_offset; 2980 2981 /* Record the root of the DIE's built for the current compilation unit. */ 2982 static GTY(()) dw_die_ref single_comp_unit_die; 2983 2984 /* A list of type DIEs that have been separated into comdat sections. */ 2985 static GTY(()) comdat_type_node *comdat_type_list; 2986 2987 /* A list of DIEs with a NULL parent waiting to be relocated. */ 2988 static GTY(()) limbo_die_node *limbo_die_list; 2989 2990 /* A list of DIEs for which we may have to generate 2991 DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set. */ 2992 static GTY(()) limbo_die_node *deferred_asm_name; 2993 2994 /* Filenames referenced by this compilation unit. */ 2995 static GTY((param_is (struct dwarf_file_data))) htab_t file_table; 2996 2997 /* A hash table of references to DIE's that describe declarations. 2998 The key is a DECL_UID() which is a unique number identifying each decl. */ 2999 static GTY ((param_is (struct die_struct))) htab_t decl_die_table; 3000 3001 /* A hash table of references to DIE's that describe COMMON blocks. 3002 The key is DECL_UID() ^ die_parent. */ 3003 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table; 3004 3005 typedef struct GTY(()) die_arg_entry_struct { 3006 dw_die_ref die; 3007 tree arg; 3008 } die_arg_entry; 3009 3010 DEF_VEC_O(die_arg_entry); 3011 DEF_VEC_ALLOC_O(die_arg_entry,gc); 3012 3013 /* Node of the variable location list. */ 3014 struct GTY ((chain_next ("%h.next"))) var_loc_node { 3015 /* Either NOTE_INSN_VAR_LOCATION, or, for SRA optimized variables, 3016 EXPR_LIST chain. For small bitsizes, bitsize is encoded 3017 in mode of the EXPR_LIST node and first EXPR_LIST operand 3018 is either NOTE_INSN_VAR_LOCATION for a piece with a known 3019 location or NULL for padding. For larger bitsizes, 3020 mode is 0 and first operand is a CONCAT with bitsize 3021 as first CONCAT operand and NOTE_INSN_VAR_LOCATION resp. 3022 NULL as second operand. */ 3023 rtx GTY (()) loc; 3024 const char * GTY (()) label; 3025 struct var_loc_node * GTY (()) next; 3026 }; 3027 3028 /* Variable location list. */ 3029 struct GTY (()) var_loc_list_def { 3030 struct var_loc_node * GTY (()) first; 3031 3032 /* Pointer to the last but one or last element of the 3033 chained list. If the list is empty, both first and 3034 last are NULL, if the list contains just one node 3035 or the last node certainly is not redundant, it points 3036 to the last node, otherwise points to the last but one. 3037 Do not mark it for GC because it is marked through the chain. */ 3038 struct var_loc_node * GTY ((skip ("%h"))) last; 3039 3040 /* Pointer to the last element before section switch, 3041 if NULL, either sections weren't switched or first 3042 is after section switch. */ 3043 struct var_loc_node * GTY ((skip ("%h"))) last_before_switch; 3044 3045 /* DECL_UID of the variable decl. */ 3046 unsigned int decl_id; 3047 }; 3048 typedef struct var_loc_list_def var_loc_list; 3049 3050 /* Call argument location list. */ 3051 struct GTY ((chain_next ("%h.next"))) call_arg_loc_node { 3052 rtx GTY (()) call_arg_loc_note; 3053 const char * GTY (()) label; 3054 tree GTY (()) block; 3055 bool tail_call_p; 3056 rtx GTY (()) symbol_ref; 3057 struct call_arg_loc_node * GTY (()) next; 3058 }; 3059 3060 3061 /* Table of decl location linked lists. */ 3062 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table; 3063 3064 /* Head and tail of call_arg_loc chain. */ 3065 static GTY (()) struct call_arg_loc_node *call_arg_locations; 3066 static struct call_arg_loc_node *call_arg_loc_last; 3067 3068 /* Number of call sites in the current function. */ 3069 static int call_site_count = -1; 3070 /* Number of tail call sites in the current function. */ 3071 static int tail_call_site_count = -1; 3072 3073 /* Vector mapping block numbers to DW_TAG_{lexical_block,inlined_subroutine} 3074 DIEs. */ 3075 static VEC (dw_die_ref, heap) *block_map; 3076 3077 /* A cached location list. */ 3078 struct GTY (()) cached_dw_loc_list_def { 3079 /* The DECL_UID of the decl that this entry describes. */ 3080 unsigned int decl_id; 3081 3082 /* The cached location list. */ 3083 dw_loc_list_ref loc_list; 3084 }; 3085 typedef struct cached_dw_loc_list_def cached_dw_loc_list; 3086 3087 /* Table of cached location lists. */ 3088 static GTY ((param_is (cached_dw_loc_list))) htab_t cached_dw_loc_list_table; 3089 3090 /* A pointer to the base of a list of references to DIE's that 3091 are uniquely identified by their tag, presence/absence of 3092 children DIE's, and list of attribute/value pairs. */ 3093 static GTY((length ("abbrev_die_table_allocated"))) 3094 dw_die_ref *abbrev_die_table; 3095 3096 /* Number of elements currently allocated for abbrev_die_table. */ 3097 static GTY(()) unsigned abbrev_die_table_allocated; 3098 3099 /* Number of elements in type_die_table currently in use. */ 3100 static GTY(()) unsigned abbrev_die_table_in_use; 3101 3102 /* Size (in elements) of increments by which we may expand the 3103 abbrev_die_table. */ 3104 #define ABBREV_DIE_TABLE_INCREMENT 256 3105 3106 /* A global counter for generating labels for line number data. */ 3107 static unsigned int line_info_label_num; 3108 3109 /* The current table to which we should emit line number information 3110 for the current function. This will be set up at the beginning of 3111 assembly for the function. */ 3112 static dw_line_info_table *cur_line_info_table; 3113 3114 /* The two default tables of line number info. */ 3115 static GTY(()) dw_line_info_table *text_section_line_info; 3116 static GTY(()) dw_line_info_table *cold_text_section_line_info; 3117 3118 /* The set of all non-default tables of line number info. */ 3119 static GTY(()) VEC (dw_line_info_table_p, gc) *separate_line_info; 3120 3121 /* A flag to tell pubnames/types export if there is an info section to 3122 refer to. */ 3123 static bool info_section_emitted; 3124 3125 /* A pointer to the base of a table that contains a list of publicly 3126 accessible names. */ 3127 static GTY (()) VEC (pubname_entry, gc) * pubname_table; 3128 3129 /* A pointer to the base of a table that contains a list of publicly 3130 accessible types. */ 3131 static GTY (()) VEC (pubname_entry, gc) * pubtype_table; 3132 3133 /* A pointer to the base of a table that contains a list of macro 3134 defines/undefines (and file start/end markers). */ 3135 static GTY (()) VEC (macinfo_entry, gc) * macinfo_table; 3136 3137 /* True if .debug_macinfo or .debug_macros section is going to be 3138 emitted. */ 3139 #define have_macinfo \ 3140 (debug_info_level >= DINFO_LEVEL_VERBOSE \ 3141 && !VEC_empty (macinfo_entry, macinfo_table)) 3142 3143 /* Array of dies for which we should generate .debug_ranges info. */ 3144 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table; 3145 3146 /* Number of elements currently allocated for ranges_table. */ 3147 static GTY(()) unsigned ranges_table_allocated; 3148 3149 /* Number of elements in ranges_table currently in use. */ 3150 static GTY(()) unsigned ranges_table_in_use; 3151 3152 /* Array of pairs of labels referenced in ranges_table. */ 3153 static GTY ((length ("ranges_by_label_allocated"))) 3154 dw_ranges_by_label_ref ranges_by_label; 3155 3156 /* Number of elements currently allocated for ranges_by_label. */ 3157 static GTY(()) unsigned ranges_by_label_allocated; 3158 3159 /* Number of elements in ranges_by_label currently in use. */ 3160 static GTY(()) unsigned ranges_by_label_in_use; 3161 3162 /* Size (in elements) of increments by which we may expand the 3163 ranges_table. */ 3164 #define RANGES_TABLE_INCREMENT 64 3165 3166 /* Whether we have location lists that need outputting */ 3167 static GTY(()) bool have_location_lists; 3168 3169 /* Unique label counter. */ 3170 static GTY(()) unsigned int loclabel_num; 3171 3172 /* Unique label counter for point-of-call tables. */ 3173 static GTY(()) unsigned int poc_label_num; 3174 3175 /* Record whether the function being analyzed contains inlined functions. */ 3176 static int current_function_has_inlines; 3177 3178 /* The last file entry emitted by maybe_emit_file(). */ 3179 static GTY(()) struct dwarf_file_data * last_emitted_file; 3180 3181 /* Number of internal labels generated by gen_internal_sym(). */ 3182 static GTY(()) int label_num; 3183 3184 /* Cached result of previous call to lookup_filename. */ 3185 static GTY(()) struct dwarf_file_data * file_table_last_lookup; 3186 3187 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table; 3188 3189 /* Instances of generic types for which we need to generate debug 3190 info that describe their generic parameters and arguments. That 3191 generation needs to happen once all types are properly laid out so 3192 we do it at the end of compilation. */ 3193 static GTY(()) VEC(tree,gc) *generic_type_instances; 3194 3195 /* Offset from the "steady-state frame pointer" to the frame base, 3196 within the current function. */ 3197 static HOST_WIDE_INT frame_pointer_fb_offset; 3198 static bool frame_pointer_fb_offset_valid; 3199 3200 static VEC (dw_die_ref, heap) *base_types; 3201 3202 /* Forward declarations for functions defined in this file. */ 3203 3204 static int is_pseudo_reg (const_rtx); 3205 static tree type_main_variant (tree); 3206 static int is_tagged_type (const_tree); 3207 static const char *dwarf_tag_name (unsigned); 3208 static const char *dwarf_attr_name (unsigned); 3209 static const char *dwarf_form_name (unsigned); 3210 static tree decl_ultimate_origin (const_tree); 3211 static tree decl_class_context (tree); 3212 static void add_dwarf_attr (dw_die_ref, dw_attr_ref); 3213 static inline enum dw_val_class AT_class (dw_attr_ref); 3214 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned); 3215 static inline unsigned AT_flag (dw_attr_ref); 3216 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT); 3217 static inline HOST_WIDE_INT AT_int (dw_attr_ref); 3218 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT); 3219 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref); 3220 static void add_AT_double (dw_die_ref, enum dwarf_attribute, 3221 HOST_WIDE_INT, unsigned HOST_WIDE_INT); 3222 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int, 3223 unsigned int, unsigned char *); 3224 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *); 3225 static hashval_t debug_str_do_hash (const void *); 3226 static int debug_str_eq (const void *, const void *); 3227 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *); 3228 static inline const char *AT_string (dw_attr_ref); 3229 static enum dwarf_form AT_string_form (dw_attr_ref); 3230 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref); 3231 static void add_AT_specification (dw_die_ref, dw_die_ref); 3232 static inline dw_die_ref AT_ref (dw_attr_ref); 3233 static inline int AT_ref_external (dw_attr_ref); 3234 static inline void set_AT_ref_external (dw_attr_ref, int); 3235 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned); 3236 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref); 3237 static inline dw_loc_descr_ref AT_loc (dw_attr_ref); 3238 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute, 3239 dw_loc_list_ref); 3240 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref); 3241 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx); 3242 static inline rtx AT_addr (dw_attr_ref); 3243 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *); 3244 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *); 3245 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *); 3246 static void add_AT_offset (dw_die_ref, enum dwarf_attribute, 3247 unsigned HOST_WIDE_INT); 3248 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute, 3249 unsigned long); 3250 static inline const char *AT_lbl (dw_attr_ref); 3251 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute); 3252 static const char *get_AT_low_pc (dw_die_ref); 3253 static const char *get_AT_hi_pc (dw_die_ref); 3254 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute); 3255 static int get_AT_flag (dw_die_ref, enum dwarf_attribute); 3256 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute); 3257 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute); 3258 static bool is_cxx (void); 3259 static bool is_fortran (void); 3260 static bool is_ada (void); 3261 static void remove_AT (dw_die_ref, enum dwarf_attribute); 3262 static void remove_child_TAG (dw_die_ref, enum dwarf_tag); 3263 static void add_child_die (dw_die_ref, dw_die_ref); 3264 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree); 3265 static dw_die_ref lookup_type_die (tree); 3266 static dw_die_ref strip_naming_typedef (tree, dw_die_ref); 3267 static dw_die_ref lookup_type_die_strip_naming_typedef (tree); 3268 static void equate_type_number_to_die (tree, dw_die_ref); 3269 static hashval_t decl_die_table_hash (const void *); 3270 static int decl_die_table_eq (const void *, const void *); 3271 static dw_die_ref lookup_decl_die (tree); 3272 static hashval_t common_block_die_table_hash (const void *); 3273 static int common_block_die_table_eq (const void *, const void *); 3274 static hashval_t decl_loc_table_hash (const void *); 3275 static int decl_loc_table_eq (const void *, const void *); 3276 static var_loc_list *lookup_decl_loc (const_tree); 3277 static void equate_decl_number_to_die (tree, dw_die_ref); 3278 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *); 3279 static void print_spaces (FILE *); 3280 static void print_die (dw_die_ref, FILE *); 3281 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref); 3282 static dw_die_ref pop_compile_unit (dw_die_ref); 3283 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *); 3284 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *); 3285 static void die_checksum (dw_die_ref, struct md5_ctx *, int *); 3286 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *); 3287 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *); 3288 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *); 3289 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref, 3290 struct md5_ctx *, int *); 3291 struct checksum_attributes; 3292 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref); 3293 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *); 3294 static void checksum_die_context (dw_die_ref, struct md5_ctx *); 3295 static void generate_type_signature (dw_die_ref, comdat_type_node *); 3296 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *); 3297 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *); 3298 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *); 3299 static int same_die_p (dw_die_ref, dw_die_ref, int *); 3300 static int same_die_p_wrap (dw_die_ref, dw_die_ref); 3301 static void compute_section_prefix (dw_die_ref); 3302 static int is_type_die (dw_die_ref); 3303 static int is_comdat_die (dw_die_ref); 3304 static int is_symbol_die (dw_die_ref); 3305 static void assign_symbol_names (dw_die_ref); 3306 static void break_out_includes (dw_die_ref); 3307 static int is_declaration_die (dw_die_ref); 3308 static int should_move_die_to_comdat (dw_die_ref); 3309 static dw_die_ref clone_as_declaration (dw_die_ref); 3310 static dw_die_ref clone_die (dw_die_ref); 3311 static dw_die_ref clone_tree (dw_die_ref); 3312 static dw_die_ref copy_declaration_context (dw_die_ref, dw_die_ref); 3313 static void generate_skeleton_ancestor_tree (skeleton_chain_node *); 3314 static void generate_skeleton_bottom_up (skeleton_chain_node *); 3315 static dw_die_ref generate_skeleton (dw_die_ref); 3316 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref, 3317 dw_die_ref, 3318 dw_die_ref); 3319 static void break_out_comdat_types (dw_die_ref); 3320 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t); 3321 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t); 3322 static void copy_decls_for_unworthy_types (dw_die_ref); 3323 3324 static hashval_t htab_cu_hash (const void *); 3325 static int htab_cu_eq (const void *, const void *); 3326 static void htab_cu_del (void *); 3327 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *); 3328 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned); 3329 static void add_sibling_attributes (dw_die_ref); 3330 static void build_abbrev_table (dw_die_ref); 3331 static void output_location_lists (dw_die_ref); 3332 static int constant_size (unsigned HOST_WIDE_INT); 3333 static unsigned long size_of_die (dw_die_ref); 3334 static void calc_die_sizes (dw_die_ref); 3335 static void calc_base_type_die_sizes (void); 3336 static void mark_dies (dw_die_ref); 3337 static void unmark_dies (dw_die_ref); 3338 static void unmark_all_dies (dw_die_ref); 3339 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *); 3340 static unsigned long size_of_aranges (void); 3341 static enum dwarf_form value_format (dw_attr_ref); 3342 static void output_value_format (dw_attr_ref); 3343 static void output_abbrev_section (void); 3344 static void output_die_symbol (dw_die_ref); 3345 static void output_die (dw_die_ref); 3346 static void output_compilation_unit_header (void); 3347 static void output_comp_unit (dw_die_ref, int); 3348 static void output_comdat_type_unit (comdat_type_node *); 3349 static const char *dwarf2_name (tree, int); 3350 static void add_pubname (tree, dw_die_ref); 3351 static void add_pubname_string (const char *, dw_die_ref); 3352 static void add_pubtype (tree, dw_die_ref); 3353 static void output_pubnames (VEC (pubname_entry,gc) *); 3354 static void output_aranges (unsigned long); 3355 static unsigned int add_ranges_num (int); 3356 static unsigned int add_ranges (const_tree); 3357 static void add_ranges_by_labels (dw_die_ref, const char *, const char *, 3358 bool *); 3359 static void output_ranges (void); 3360 static dw_line_info_table *new_line_info_table (void); 3361 static void output_line_info (void); 3362 static void output_file_names (void); 3363 static dw_die_ref base_type_die (tree); 3364 static int is_base_type (tree); 3365 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref); 3366 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref); 3367 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref); 3368 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref); 3369 static int type_is_enum (const_tree); 3370 static unsigned int dbx_reg_number (const_rtx); 3371 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int); 3372 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status); 3373 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int, 3374 enum var_init_status); 3375 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx, 3376 enum var_init_status); 3377 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT, 3378 enum var_init_status); 3379 static int is_based_loc (const_rtx); 3380 static int resolve_one_addr (rtx *, void *); 3381 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx, 3382 enum var_init_status); 3383 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode, 3384 enum var_init_status); 3385 static dw_loc_list_ref loc_list_from_tree (tree, int); 3386 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int); 3387 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int); 3388 static tree field_type (const_tree); 3389 static unsigned int simple_type_align_in_bits (const_tree); 3390 static unsigned int simple_decl_align_in_bits (const_tree); 3391 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree); 3392 static HOST_WIDE_INT field_byte_offset (const_tree); 3393 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute, 3394 dw_loc_list_ref); 3395 static void add_data_member_location_attribute (dw_die_ref, tree); 3396 static bool add_const_value_attribute (dw_die_ref, rtx); 3397 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *); 3398 static void insert_double (double_int, unsigned char *); 3399 static void insert_float (const_rtx, unsigned char *); 3400 static rtx rtl_for_decl_location (tree); 3401 static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool, 3402 enum dwarf_attribute); 3403 static bool tree_add_const_value_attribute (dw_die_ref, tree); 3404 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree); 3405 static void add_name_attribute (dw_die_ref, const char *); 3406 static void add_gnat_descriptive_type_attribute (dw_die_ref, tree, dw_die_ref); 3407 static void add_comp_dir_attribute (dw_die_ref); 3408 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree); 3409 static void add_subscript_info (dw_die_ref, tree, bool); 3410 static void add_byte_size_attribute (dw_die_ref, tree); 3411 static void add_bit_offset_attribute (dw_die_ref, tree); 3412 static void add_bit_size_attribute (dw_die_ref, tree); 3413 static void add_prototyped_attribute (dw_die_ref, tree); 3414 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree); 3415 static void add_pure_or_virtual_attribute (dw_die_ref, tree); 3416 static void add_src_coords_attributes (dw_die_ref, tree); 3417 static void add_name_and_src_coords_attributes (dw_die_ref, tree); 3418 static void push_decl_scope (tree); 3419 static void pop_decl_scope (void); 3420 static dw_die_ref scope_die_for (tree, dw_die_ref); 3421 static inline int local_scope_p (dw_die_ref); 3422 static inline int class_scope_p (dw_die_ref); 3423 static inline int class_or_namespace_scope_p (dw_die_ref); 3424 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref); 3425 static void add_calling_convention_attribute (dw_die_ref, tree); 3426 static const char *type_tag (const_tree); 3427 static tree member_declared_type (const_tree); 3428 #if 0 3429 static const char *decl_start_label (tree); 3430 #endif 3431 static void gen_array_type_die (tree, dw_die_ref); 3432 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref); 3433 #if 0 3434 static void gen_entry_point_die (tree, dw_die_ref); 3435 #endif 3436 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref); 3437 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref); 3438 static dw_die_ref gen_formal_parameter_pack_die (tree, tree, dw_die_ref, tree*); 3439 static void gen_unspecified_parameters_die (tree, dw_die_ref); 3440 static void gen_formal_types_die (tree, dw_die_ref); 3441 static void gen_subprogram_die (tree, dw_die_ref); 3442 static void gen_variable_die (tree, tree, dw_die_ref); 3443 static void gen_const_die (tree, dw_die_ref); 3444 static void gen_label_die (tree, dw_die_ref); 3445 static void gen_lexical_block_die (tree, dw_die_ref, int); 3446 static void gen_inlined_subroutine_die (tree, dw_die_ref, int); 3447 static void gen_field_die (tree, dw_die_ref); 3448 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref); 3449 static dw_die_ref gen_compile_unit_die (const char *); 3450 static void gen_inheritance_die (tree, tree, dw_die_ref); 3451 static void gen_member_die (tree, dw_die_ref); 3452 static void gen_struct_or_union_type_die (tree, dw_die_ref, 3453 enum debug_info_usage); 3454 static void gen_subroutine_type_die (tree, dw_die_ref); 3455 static void gen_typedef_die (tree, dw_die_ref); 3456 static void gen_type_die (tree, dw_die_ref); 3457 static void gen_block_die (tree, dw_die_ref, int); 3458 static void decls_for_scope (tree, dw_die_ref, int); 3459 static inline int is_redundant_typedef (const_tree); 3460 static bool is_naming_typedef_decl (const_tree); 3461 static inline dw_die_ref get_context_die (tree); 3462 static void gen_namespace_die (tree, dw_die_ref); 3463 static dw_die_ref gen_decl_die (tree, tree, dw_die_ref); 3464 static dw_die_ref force_decl_die (tree); 3465 static dw_die_ref force_type_die (tree); 3466 static dw_die_ref setup_namespace_context (tree, dw_die_ref); 3467 static dw_die_ref declare_in_namespace (tree, dw_die_ref); 3468 static struct dwarf_file_data * lookup_filename (const char *); 3469 static void retry_incomplete_types (void); 3470 static void gen_type_die_for_member (tree, tree, dw_die_ref); 3471 static void gen_generic_params_dies (tree); 3472 static void gen_tagged_type_die (tree, dw_die_ref, enum debug_info_usage); 3473 static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage); 3474 static void splice_child_die (dw_die_ref, dw_die_ref); 3475 static int file_info_cmp (const void *, const void *); 3476 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *, 3477 const char *, const char *); 3478 static void output_loc_list (dw_loc_list_ref); 3479 static char *gen_internal_sym (const char *); 3480 3481 static void prune_unmark_dies (dw_die_ref); 3482 static void prune_unused_types_mark_generic_parms_dies (dw_die_ref); 3483 static void prune_unused_types_mark (dw_die_ref, int); 3484 static void prune_unused_types_walk (dw_die_ref); 3485 static void prune_unused_types_walk_attribs (dw_die_ref); 3486 static void prune_unused_types_prune (dw_die_ref); 3487 static void prune_unused_types (void); 3488 static int maybe_emit_file (struct dwarf_file_data *fd); 3489 static inline const char *AT_vms_delta1 (dw_attr_ref); 3490 static inline const char *AT_vms_delta2 (dw_attr_ref); 3491 static inline void add_AT_vms_delta (dw_die_ref, enum dwarf_attribute, 3492 const char *, const char *); 3493 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree); 3494 static void gen_remaining_tmpl_value_param_die_attribute (void); 3495 static bool generic_type_p (tree); 3496 static void schedule_generic_params_dies_gen (tree t); 3497 static void gen_scheduled_generic_parms_dies (void); 3498 3499 /* Section names used to hold DWARF debugging information. */ 3500 #ifndef DEBUG_INFO_SECTION 3501 #define DEBUG_INFO_SECTION ".debug_info" 3502 #endif 3503 #ifndef DEBUG_ABBREV_SECTION 3504 #define DEBUG_ABBREV_SECTION ".debug_abbrev" 3505 #endif 3506 #ifndef DEBUG_ARANGES_SECTION 3507 #define DEBUG_ARANGES_SECTION ".debug_aranges" 3508 #endif 3509 #ifndef DEBUG_MACINFO_SECTION 3510 #define DEBUG_MACINFO_SECTION ".debug_macinfo" 3511 #endif 3512 #ifndef DEBUG_MACRO_SECTION 3513 #define DEBUG_MACRO_SECTION ".debug_macro" 3514 #endif 3515 #ifndef DEBUG_LINE_SECTION 3516 #define DEBUG_LINE_SECTION ".debug_line" 3517 #endif 3518 #ifndef DEBUG_LOC_SECTION 3519 #define DEBUG_LOC_SECTION ".debug_loc" 3520 #endif 3521 #ifndef DEBUG_PUBNAMES_SECTION 3522 #define DEBUG_PUBNAMES_SECTION ".debug_pubnames" 3523 #endif 3524 #ifndef DEBUG_PUBTYPES_SECTION 3525 #define DEBUG_PUBTYPES_SECTION ".debug_pubtypes" 3526 #endif 3527 #ifndef DEBUG_STR_SECTION 3528 #define DEBUG_STR_SECTION ".debug_str" 3529 #endif 3530 #ifndef DEBUG_RANGES_SECTION 3531 #define DEBUG_RANGES_SECTION ".debug_ranges" 3532 #endif 3533 3534 /* Standard ELF section names for compiled code and data. */ 3535 #ifndef TEXT_SECTION_NAME 3536 #define TEXT_SECTION_NAME ".text" 3537 #endif 3538 3539 /* Section flags for .debug_str section. */ 3540 #define DEBUG_STR_SECTION_FLAGS \ 3541 (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings \ 3542 ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1 \ 3543 : SECTION_DEBUG) 3544 3545 /* Labels we insert at beginning sections we can reference instead of 3546 the section names themselves. */ 3547 3548 #ifndef TEXT_SECTION_LABEL 3549 #define TEXT_SECTION_LABEL "Ltext" 3550 #endif 3551 #ifndef COLD_TEXT_SECTION_LABEL 3552 #define COLD_TEXT_SECTION_LABEL "Ltext_cold" 3553 #endif 3554 #ifndef DEBUG_LINE_SECTION_LABEL 3555 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line" 3556 #endif 3557 #ifndef DEBUG_INFO_SECTION_LABEL 3558 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info" 3559 #endif 3560 #ifndef DEBUG_ABBREV_SECTION_LABEL 3561 #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev" 3562 #endif 3563 #ifndef DEBUG_LOC_SECTION_LABEL 3564 #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc" 3565 #endif 3566 #ifndef DEBUG_RANGES_SECTION_LABEL 3567 #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges" 3568 #endif 3569 #ifndef DEBUG_MACINFO_SECTION_LABEL 3570 #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo" 3571 #endif 3572 #ifndef DEBUG_MACRO_SECTION_LABEL 3573 #define DEBUG_MACRO_SECTION_LABEL "Ldebug_macro" 3574 #endif 3575 3576 3577 /* Definitions of defaults for formats and names of various special 3578 (artificial) labels which may be generated within this file (when the -g 3579 options is used and DWARF2_DEBUGGING_INFO is in effect. 3580 If necessary, these may be overridden from within the tm.h file, but 3581 typically, overriding these defaults is unnecessary. */ 3582 3583 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES]; 3584 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES]; 3585 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES]; 3586 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES]; 3587 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES]; 3588 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES]; 3589 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES]; 3590 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES]; 3591 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES]; 3592 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES]; 3593 3594 #ifndef TEXT_END_LABEL 3595 #define TEXT_END_LABEL "Letext" 3596 #endif 3597 #ifndef COLD_END_LABEL 3598 #define COLD_END_LABEL "Letext_cold" 3599 #endif 3600 #ifndef BLOCK_BEGIN_LABEL 3601 #define BLOCK_BEGIN_LABEL "LBB" 3602 #endif 3603 #ifndef BLOCK_END_LABEL 3604 #define BLOCK_END_LABEL "LBE" 3605 #endif 3606 #ifndef LINE_CODE_LABEL 3607 #define LINE_CODE_LABEL "LM" 3608 #endif 3609 3610 3611 /* Return the root of the DIE's built for the current compilation unit. */ 3612 static dw_die_ref 3613 comp_unit_die (void) 3614 { 3615 if (!single_comp_unit_die) 3616 single_comp_unit_die = gen_compile_unit_die (NULL); 3617 return single_comp_unit_die; 3618 } 3619 3620 /* We allow a language front-end to designate a function that is to be 3621 called to "demangle" any name before it is put into a DIE. */ 3622 3623 static const char *(*demangle_name_func) (const char *); 3624 3625 void 3626 dwarf2out_set_demangle_name_func (const char *(*func) (const char *)) 3627 { 3628 demangle_name_func = func; 3629 } 3630 3631 /* Test if rtl node points to a pseudo register. */ 3632 3633 static inline int 3634 is_pseudo_reg (const_rtx rtl) 3635 { 3636 return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER) 3637 || (GET_CODE (rtl) == SUBREG 3638 && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER)); 3639 } 3640 3641 /* Return a reference to a type, with its const and volatile qualifiers 3642 removed. */ 3643 3644 static inline tree 3645 type_main_variant (tree type) 3646 { 3647 type = TYPE_MAIN_VARIANT (type); 3648 3649 /* ??? There really should be only one main variant among any group of 3650 variants of a given type (and all of the MAIN_VARIANT values for all 3651 members of the group should point to that one type) but sometimes the C 3652 front-end messes this up for array types, so we work around that bug 3653 here. */ 3654 if (TREE_CODE (type) == ARRAY_TYPE) 3655 while (type != TYPE_MAIN_VARIANT (type)) 3656 type = TYPE_MAIN_VARIANT (type); 3657 3658 return type; 3659 } 3660 3661 /* Return nonzero if the given type node represents a tagged type. */ 3662 3663 static inline int 3664 is_tagged_type (const_tree type) 3665 { 3666 enum tree_code code = TREE_CODE (type); 3667 3668 return (code == RECORD_TYPE || code == UNION_TYPE 3669 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE); 3670 } 3671 3672 /* Set label to debug_info_section_label + die_offset of a DIE reference. */ 3673 3674 static void 3675 get_ref_die_offset_label (char *label, dw_die_ref ref) 3676 { 3677 sprintf (label, "%s+%ld", debug_info_section_label, ref->die_offset); 3678 } 3679 3680 /* Return die_offset of a DIE reference to a base type. */ 3681 3682 static unsigned long int 3683 get_base_type_offset (dw_die_ref ref) 3684 { 3685 if (ref->die_offset) 3686 return ref->die_offset; 3687 if (comp_unit_die ()->die_abbrev) 3688 { 3689 calc_base_type_die_sizes (); 3690 gcc_assert (ref->die_offset); 3691 } 3692 return ref->die_offset; 3693 } 3694 3695 /* Return die_offset of a DIE reference other than base type. */ 3696 3697 static unsigned long int 3698 get_ref_die_offset (dw_die_ref ref) 3699 { 3700 gcc_assert (ref->die_offset); 3701 return ref->die_offset; 3702 } 3703 3704 /* Convert a DIE tag into its string name. */ 3705 3706 static const char * 3707 dwarf_tag_name (unsigned int tag) 3708 { 3709 switch (tag) 3710 { 3711 case DW_TAG_padding: 3712 return "DW_TAG_padding"; 3713 case DW_TAG_array_type: 3714 return "DW_TAG_array_type"; 3715 case DW_TAG_class_type: 3716 return "DW_TAG_class_type"; 3717 case DW_TAG_entry_point: 3718 return "DW_TAG_entry_point"; 3719 case DW_TAG_enumeration_type: 3720 return "DW_TAG_enumeration_type"; 3721 case DW_TAG_formal_parameter: 3722 return "DW_TAG_formal_parameter"; 3723 case DW_TAG_imported_declaration: 3724 return "DW_TAG_imported_declaration"; 3725 case DW_TAG_label: 3726 return "DW_TAG_label"; 3727 case DW_TAG_lexical_block: 3728 return "DW_TAG_lexical_block"; 3729 case DW_TAG_member: 3730 return "DW_TAG_member"; 3731 case DW_TAG_pointer_type: 3732 return "DW_TAG_pointer_type"; 3733 case DW_TAG_reference_type: 3734 return "DW_TAG_reference_type"; 3735 case DW_TAG_compile_unit: 3736 return "DW_TAG_compile_unit"; 3737 case DW_TAG_string_type: 3738 return "DW_TAG_string_type"; 3739 case DW_TAG_structure_type: 3740 return "DW_TAG_structure_type"; 3741 case DW_TAG_subroutine_type: 3742 return "DW_TAG_subroutine_type"; 3743 case DW_TAG_typedef: 3744 return "DW_TAG_typedef"; 3745 case DW_TAG_union_type: 3746 return "DW_TAG_union_type"; 3747 case DW_TAG_unspecified_parameters: 3748 return "DW_TAG_unspecified_parameters"; 3749 case DW_TAG_variant: 3750 return "DW_TAG_variant"; 3751 case DW_TAG_common_block: 3752 return "DW_TAG_common_block"; 3753 case DW_TAG_common_inclusion: 3754 return "DW_TAG_common_inclusion"; 3755 case DW_TAG_inheritance: 3756 return "DW_TAG_inheritance"; 3757 case DW_TAG_inlined_subroutine: 3758 return "DW_TAG_inlined_subroutine"; 3759 case DW_TAG_module: 3760 return "DW_TAG_module"; 3761 case DW_TAG_ptr_to_member_type: 3762 return "DW_TAG_ptr_to_member_type"; 3763 case DW_TAG_set_type: 3764 return "DW_TAG_set_type"; 3765 case DW_TAG_subrange_type: 3766 return "DW_TAG_subrange_type"; 3767 case DW_TAG_with_stmt: 3768 return "DW_TAG_with_stmt"; 3769 case DW_TAG_access_declaration: 3770 return "DW_TAG_access_declaration"; 3771 case DW_TAG_base_type: 3772 return "DW_TAG_base_type"; 3773 case DW_TAG_catch_block: 3774 return "DW_TAG_catch_block"; 3775 case DW_TAG_const_type: 3776 return "DW_TAG_const_type"; 3777 case DW_TAG_constant: 3778 return "DW_TAG_constant"; 3779 case DW_TAG_enumerator: 3780 return "DW_TAG_enumerator"; 3781 case DW_TAG_file_type: 3782 return "DW_TAG_file_type"; 3783 case DW_TAG_friend: 3784 return "DW_TAG_friend"; 3785 case DW_TAG_namelist: 3786 return "DW_TAG_namelist"; 3787 case DW_TAG_namelist_item: 3788 return "DW_TAG_namelist_item"; 3789 case DW_TAG_packed_type: 3790 return "DW_TAG_packed_type"; 3791 case DW_TAG_subprogram: 3792 return "DW_TAG_subprogram"; 3793 case DW_TAG_template_type_param: 3794 return "DW_TAG_template_type_param"; 3795 case DW_TAG_template_value_param: 3796 return "DW_TAG_template_value_param"; 3797 case DW_TAG_thrown_type: 3798 return "DW_TAG_thrown_type"; 3799 case DW_TAG_try_block: 3800 return "DW_TAG_try_block"; 3801 case DW_TAG_variant_part: 3802 return "DW_TAG_variant_part"; 3803 case DW_TAG_variable: 3804 return "DW_TAG_variable"; 3805 case DW_TAG_volatile_type: 3806 return "DW_TAG_volatile_type"; 3807 case DW_TAG_dwarf_procedure: 3808 return "DW_TAG_dwarf_procedure"; 3809 case DW_TAG_restrict_type: 3810 return "DW_TAG_restrict_type"; 3811 case DW_TAG_interface_type: 3812 return "DW_TAG_interface_type"; 3813 case DW_TAG_namespace: 3814 return "DW_TAG_namespace"; 3815 case DW_TAG_imported_module: 3816 return "DW_TAG_imported_module"; 3817 case DW_TAG_unspecified_type: 3818 return "DW_TAG_unspecified_type"; 3819 case DW_TAG_partial_unit: 3820 return "DW_TAG_partial_unit"; 3821 case DW_TAG_imported_unit: 3822 return "DW_TAG_imported_unit"; 3823 case DW_TAG_condition: 3824 return "DW_TAG_condition"; 3825 case DW_TAG_shared_type: 3826 return "DW_TAG_shared_type"; 3827 case DW_TAG_type_unit: 3828 return "DW_TAG_type_unit"; 3829 case DW_TAG_rvalue_reference_type: 3830 return "DW_TAG_rvalue_reference_type"; 3831 case DW_TAG_template_alias: 3832 return "DW_TAG_template_alias"; 3833 case DW_TAG_GNU_template_parameter_pack: 3834 return "DW_TAG_GNU_template_parameter_pack"; 3835 case DW_TAG_GNU_formal_parameter_pack: 3836 return "DW_TAG_GNU_formal_parameter_pack"; 3837 case DW_TAG_MIPS_loop: 3838 return "DW_TAG_MIPS_loop"; 3839 case DW_TAG_format_label: 3840 return "DW_TAG_format_label"; 3841 case DW_TAG_function_template: 3842 return "DW_TAG_function_template"; 3843 case DW_TAG_class_template: 3844 return "DW_TAG_class_template"; 3845 case DW_TAG_GNU_BINCL: 3846 return "DW_TAG_GNU_BINCL"; 3847 case DW_TAG_GNU_EINCL: 3848 return "DW_TAG_GNU_EINCL"; 3849 case DW_TAG_GNU_template_template_param: 3850 return "DW_TAG_GNU_template_template_param"; 3851 case DW_TAG_GNU_call_site: 3852 return "DW_TAG_GNU_call_site"; 3853 case DW_TAG_GNU_call_site_parameter: 3854 return "DW_TAG_GNU_call_site_parameter"; 3855 default: 3856 return "DW_TAG_<unknown>"; 3857 } 3858 } 3859 3860 /* Convert a DWARF attribute code into its string name. */ 3861 3862 static const char * 3863 dwarf_attr_name (unsigned int attr) 3864 { 3865 switch (attr) 3866 { 3867 case DW_AT_sibling: 3868 return "DW_AT_sibling"; 3869 case DW_AT_location: 3870 return "DW_AT_location"; 3871 case DW_AT_name: 3872 return "DW_AT_name"; 3873 case DW_AT_ordering: 3874 return "DW_AT_ordering"; 3875 case DW_AT_subscr_data: 3876 return "DW_AT_subscr_data"; 3877 case DW_AT_byte_size: 3878 return "DW_AT_byte_size"; 3879 case DW_AT_bit_offset: 3880 return "DW_AT_bit_offset"; 3881 case DW_AT_bit_size: 3882 return "DW_AT_bit_size"; 3883 case DW_AT_element_list: 3884 return "DW_AT_element_list"; 3885 case DW_AT_stmt_list: 3886 return "DW_AT_stmt_list"; 3887 case DW_AT_low_pc: 3888 return "DW_AT_low_pc"; 3889 case DW_AT_high_pc: 3890 return "DW_AT_high_pc"; 3891 case DW_AT_language: 3892 return "DW_AT_language"; 3893 case DW_AT_member: 3894 return "DW_AT_member"; 3895 case DW_AT_discr: 3896 return "DW_AT_discr"; 3897 case DW_AT_discr_value: 3898 return "DW_AT_discr_value"; 3899 case DW_AT_visibility: 3900 return "DW_AT_visibility"; 3901 case DW_AT_import: 3902 return "DW_AT_import"; 3903 case DW_AT_string_length: 3904 return "DW_AT_string_length"; 3905 case DW_AT_common_reference: 3906 return "DW_AT_common_reference"; 3907 case DW_AT_comp_dir: 3908 return "DW_AT_comp_dir"; 3909 case DW_AT_const_value: 3910 return "DW_AT_const_value"; 3911 case DW_AT_containing_type: 3912 return "DW_AT_containing_type"; 3913 case DW_AT_default_value: 3914 return "DW_AT_default_value"; 3915 case DW_AT_inline: 3916 return "DW_AT_inline"; 3917 case DW_AT_is_optional: 3918 return "DW_AT_is_optional"; 3919 case DW_AT_lower_bound: 3920 return "DW_AT_lower_bound"; 3921 case DW_AT_producer: 3922 return "DW_AT_producer"; 3923 case DW_AT_prototyped: 3924 return "DW_AT_prototyped"; 3925 case DW_AT_return_addr: 3926 return "DW_AT_return_addr"; 3927 case DW_AT_start_scope: 3928 return "DW_AT_start_scope"; 3929 case DW_AT_bit_stride: 3930 return "DW_AT_bit_stride"; 3931 case DW_AT_upper_bound: 3932 return "DW_AT_upper_bound"; 3933 case DW_AT_abstract_origin: 3934 return "DW_AT_abstract_origin"; 3935 case DW_AT_accessibility: 3936 return "DW_AT_accessibility"; 3937 case DW_AT_address_class: 3938 return "DW_AT_address_class"; 3939 case DW_AT_artificial: 3940 return "DW_AT_artificial"; 3941 case DW_AT_base_types: 3942 return "DW_AT_base_types"; 3943 case DW_AT_calling_convention: 3944 return "DW_AT_calling_convention"; 3945 case DW_AT_count: 3946 return "DW_AT_count"; 3947 case DW_AT_data_member_location: 3948 return "DW_AT_data_member_location"; 3949 case DW_AT_decl_column: 3950 return "DW_AT_decl_column"; 3951 case DW_AT_decl_file: 3952 return "DW_AT_decl_file"; 3953 case DW_AT_decl_line: 3954 return "DW_AT_decl_line"; 3955 case DW_AT_declaration: 3956 return "DW_AT_declaration"; 3957 case DW_AT_discr_list: 3958 return "DW_AT_discr_list"; 3959 case DW_AT_encoding: 3960 return "DW_AT_encoding"; 3961 case DW_AT_external: 3962 return "DW_AT_external"; 3963 case DW_AT_explicit: 3964 return "DW_AT_explicit"; 3965 case DW_AT_frame_base: 3966 return "DW_AT_frame_base"; 3967 case DW_AT_friend: 3968 return "DW_AT_friend"; 3969 case DW_AT_identifier_case: 3970 return "DW_AT_identifier_case"; 3971 case DW_AT_macro_info: 3972 return "DW_AT_macro_info"; 3973 case DW_AT_namelist_items: 3974 return "DW_AT_namelist_items"; 3975 case DW_AT_priority: 3976 return "DW_AT_priority"; 3977 case DW_AT_segment: 3978 return "DW_AT_segment"; 3979 case DW_AT_specification: 3980 return "DW_AT_specification"; 3981 case DW_AT_static_link: 3982 return "DW_AT_static_link"; 3983 case DW_AT_type: 3984 return "DW_AT_type"; 3985 case DW_AT_use_location: 3986 return "DW_AT_use_location"; 3987 case DW_AT_variable_parameter: 3988 return "DW_AT_variable_parameter"; 3989 case DW_AT_virtuality: 3990 return "DW_AT_virtuality"; 3991 case DW_AT_vtable_elem_location: 3992 return "DW_AT_vtable_elem_location"; 3993 3994 case DW_AT_allocated: 3995 return "DW_AT_allocated"; 3996 case DW_AT_associated: 3997 return "DW_AT_associated"; 3998 case DW_AT_data_location: 3999 return "DW_AT_data_location"; 4000 case DW_AT_byte_stride: 4001 return "DW_AT_byte_stride"; 4002 case DW_AT_entry_pc: 4003 return "DW_AT_entry_pc"; 4004 case DW_AT_use_UTF8: 4005 return "DW_AT_use_UTF8"; 4006 case DW_AT_extension: 4007 return "DW_AT_extension"; 4008 case DW_AT_ranges: 4009 return "DW_AT_ranges"; 4010 case DW_AT_trampoline: 4011 return "DW_AT_trampoline"; 4012 case DW_AT_call_column: 4013 return "DW_AT_call_column"; 4014 case DW_AT_call_file: 4015 return "DW_AT_call_file"; 4016 case DW_AT_call_line: 4017 return "DW_AT_call_line"; 4018 case DW_AT_object_pointer: 4019 return "DW_AT_object_pointer"; 4020 4021 case DW_AT_signature: 4022 return "DW_AT_signature"; 4023 case DW_AT_main_subprogram: 4024 return "DW_AT_main_subprogram"; 4025 case DW_AT_data_bit_offset: 4026 return "DW_AT_data_bit_offset"; 4027 case DW_AT_const_expr: 4028 return "DW_AT_const_expr"; 4029 case DW_AT_enum_class: 4030 return "DW_AT_enum_class"; 4031 case DW_AT_linkage_name: 4032 return "DW_AT_linkage_name"; 4033 4034 case DW_AT_MIPS_fde: 4035 return "DW_AT_MIPS_fde"; 4036 case DW_AT_MIPS_loop_begin: 4037 return "DW_AT_MIPS_loop_begin"; 4038 case DW_AT_MIPS_tail_loop_begin: 4039 return "DW_AT_MIPS_tail_loop_begin"; 4040 case DW_AT_MIPS_epilog_begin: 4041 return "DW_AT_MIPS_epilog_begin"; 4042 #if VMS_DEBUGGING_INFO 4043 case DW_AT_HP_prologue: 4044 return "DW_AT_HP_prologue"; 4045 #else 4046 case DW_AT_MIPS_loop_unroll_factor: 4047 return "DW_AT_MIPS_loop_unroll_factor"; 4048 #endif 4049 case DW_AT_MIPS_software_pipeline_depth: 4050 return "DW_AT_MIPS_software_pipeline_depth"; 4051 case DW_AT_MIPS_linkage_name: 4052 return "DW_AT_MIPS_linkage_name"; 4053 #if VMS_DEBUGGING_INFO 4054 case DW_AT_HP_epilogue: 4055 return "DW_AT_HP_epilogue"; 4056 #else 4057 case DW_AT_MIPS_stride: 4058 return "DW_AT_MIPS_stride"; 4059 #endif 4060 case DW_AT_MIPS_abstract_name: 4061 return "DW_AT_MIPS_abstract_name"; 4062 case DW_AT_MIPS_clone_origin: 4063 return "DW_AT_MIPS_clone_origin"; 4064 case DW_AT_MIPS_has_inlines: 4065 return "DW_AT_MIPS_has_inlines"; 4066 4067 case DW_AT_sf_names: 4068 return "DW_AT_sf_names"; 4069 case DW_AT_src_info: 4070 return "DW_AT_src_info"; 4071 case DW_AT_mac_info: 4072 return "DW_AT_mac_info"; 4073 case DW_AT_src_coords: 4074 return "DW_AT_src_coords"; 4075 case DW_AT_body_begin: 4076 return "DW_AT_body_begin"; 4077 case DW_AT_body_end: 4078 return "DW_AT_body_end"; 4079 4080 case DW_AT_GNU_vector: 4081 return "DW_AT_GNU_vector"; 4082 case DW_AT_GNU_guarded_by: 4083 return "DW_AT_GNU_guarded_by"; 4084 case DW_AT_GNU_pt_guarded_by: 4085 return "DW_AT_GNU_pt_guarded_by"; 4086 case DW_AT_GNU_guarded: 4087 return "DW_AT_GNU_guarded"; 4088 case DW_AT_GNU_pt_guarded: 4089 return "DW_AT_GNU_pt_guarded"; 4090 case DW_AT_GNU_locks_excluded: 4091 return "DW_AT_GNU_locks_excluded"; 4092 case DW_AT_GNU_exclusive_locks_required: 4093 return "DW_AT_GNU_exclusive_locks_required"; 4094 case DW_AT_GNU_shared_locks_required: 4095 return "DW_AT_GNU_shared_locks_required"; 4096 case DW_AT_GNU_odr_signature: 4097 return "DW_AT_GNU_odr_signature"; 4098 case DW_AT_GNU_template_name: 4099 return "DW_AT_GNU_template_name"; 4100 case DW_AT_GNU_call_site_value: 4101 return "DW_AT_GNU_call_site_value"; 4102 case DW_AT_GNU_call_site_data_value: 4103 return "DW_AT_GNU_call_site_data_value"; 4104 case DW_AT_GNU_call_site_target: 4105 return "DW_AT_GNU_call_site_target"; 4106 case DW_AT_GNU_call_site_target_clobbered: 4107 return "DW_AT_GNU_call_site_target_clobbered"; 4108 case DW_AT_GNU_tail_call: 4109 return "DW_AT_GNU_tail_call"; 4110 case DW_AT_GNU_all_tail_call_sites: 4111 return "DW_AT_GNU_all_tail_call_sites"; 4112 case DW_AT_GNU_all_call_sites: 4113 return "DW_AT_GNU_all_call_sites"; 4114 case DW_AT_GNU_all_source_call_sites: 4115 return "DW_AT_GNU_all_source_call_sites"; 4116 case DW_AT_GNU_macros: 4117 return "DW_AT_GNU_macros"; 4118 4119 case DW_AT_GNAT_descriptive_type: 4120 return "DW_AT_GNAT_descriptive_type"; 4121 4122 case DW_AT_VMS_rtnbeg_pd_address: 4123 return "DW_AT_VMS_rtnbeg_pd_address"; 4124 4125 default: 4126 return "DW_AT_<unknown>"; 4127 } 4128 } 4129 4130 /* Convert a DWARF value form code into its string name. */ 4131 4132 static const char * 4133 dwarf_form_name (unsigned int form) 4134 { 4135 switch (form) 4136 { 4137 case DW_FORM_addr: 4138 return "DW_FORM_addr"; 4139 case DW_FORM_block2: 4140 return "DW_FORM_block2"; 4141 case DW_FORM_block4: 4142 return "DW_FORM_block4"; 4143 case DW_FORM_data2: 4144 return "DW_FORM_data2"; 4145 case DW_FORM_data4: 4146 return "DW_FORM_data4"; 4147 case DW_FORM_data8: 4148 return "DW_FORM_data8"; 4149 case DW_FORM_string: 4150 return "DW_FORM_string"; 4151 case DW_FORM_block: 4152 return "DW_FORM_block"; 4153 case DW_FORM_block1: 4154 return "DW_FORM_block1"; 4155 case DW_FORM_data1: 4156 return "DW_FORM_data1"; 4157 case DW_FORM_flag: 4158 return "DW_FORM_flag"; 4159 case DW_FORM_sdata: 4160 return "DW_FORM_sdata"; 4161 case DW_FORM_strp: 4162 return "DW_FORM_strp"; 4163 case DW_FORM_udata: 4164 return "DW_FORM_udata"; 4165 case DW_FORM_ref_addr: 4166 return "DW_FORM_ref_addr"; 4167 case DW_FORM_ref1: 4168 return "DW_FORM_ref1"; 4169 case DW_FORM_ref2: 4170 return "DW_FORM_ref2"; 4171 case DW_FORM_ref4: 4172 return "DW_FORM_ref4"; 4173 case DW_FORM_ref8: 4174 return "DW_FORM_ref8"; 4175 case DW_FORM_ref_udata: 4176 return "DW_FORM_ref_udata"; 4177 case DW_FORM_indirect: 4178 return "DW_FORM_indirect"; 4179 case DW_FORM_sec_offset: 4180 return "DW_FORM_sec_offset"; 4181 case DW_FORM_exprloc: 4182 return "DW_FORM_exprloc"; 4183 case DW_FORM_flag_present: 4184 return "DW_FORM_flag_present"; 4185 case DW_FORM_ref_sig8: 4186 return "DW_FORM_ref_sig8"; 4187 default: 4188 return "DW_FORM_<unknown>"; 4189 } 4190 } 4191 4192 /* Determine the "ultimate origin" of a decl. The decl may be an inlined 4193 instance of an inlined instance of a decl which is local to an inline 4194 function, so we have to trace all of the way back through the origin chain 4195 to find out what sort of node actually served as the original seed for the 4196 given block. */ 4197 4198 static tree 4199 decl_ultimate_origin (const_tree decl) 4200 { 4201 if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON)) 4202 return NULL_TREE; 4203 4204 /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the 4205 nodes in the function to point to themselves; ignore that if 4206 we're trying to output the abstract instance of this function. */ 4207 if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl) 4208 return NULL_TREE; 4209 4210 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the 4211 most distant ancestor, this should never happen. */ 4212 gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl))); 4213 4214 return DECL_ABSTRACT_ORIGIN (decl); 4215 } 4216 4217 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT 4218 of a virtual function may refer to a base class, so we check the 'this' 4219 parameter. */ 4220 4221 static tree 4222 decl_class_context (tree decl) 4223 { 4224 tree context = NULL_TREE; 4225 4226 if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl)) 4227 context = DECL_CONTEXT (decl); 4228 else 4229 context = TYPE_MAIN_VARIANT 4230 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl))))); 4231 4232 if (context && !TYPE_P (context)) 4233 context = NULL_TREE; 4234 4235 return context; 4236 } 4237 4238 /* Add an attribute/value pair to a DIE. */ 4239 4240 static inline void 4241 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr) 4242 { 4243 /* Maybe this should be an assert? */ 4244 if (die == NULL) 4245 return; 4246 4247 if (die->die_attr == NULL) 4248 die->die_attr = VEC_alloc (dw_attr_node, gc, 1); 4249 VEC_safe_push (dw_attr_node, gc, die->die_attr, attr); 4250 } 4251 4252 static inline enum dw_val_class 4253 AT_class (dw_attr_ref a) 4254 { 4255 return a->dw_attr_val.val_class; 4256 } 4257 4258 /* Add a flag value attribute to a DIE. */ 4259 4260 static inline void 4261 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag) 4262 { 4263 dw_attr_node attr; 4264 4265 attr.dw_attr = attr_kind; 4266 attr.dw_attr_val.val_class = dw_val_class_flag; 4267 attr.dw_attr_val.v.val_flag = flag; 4268 add_dwarf_attr (die, &attr); 4269 } 4270 4271 static inline unsigned 4272 AT_flag (dw_attr_ref a) 4273 { 4274 gcc_assert (a && AT_class (a) == dw_val_class_flag); 4275 return a->dw_attr_val.v.val_flag; 4276 } 4277 4278 /* Add a signed integer attribute value to a DIE. */ 4279 4280 static inline void 4281 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val) 4282 { 4283 dw_attr_node attr; 4284 4285 attr.dw_attr = attr_kind; 4286 attr.dw_attr_val.val_class = dw_val_class_const; 4287 attr.dw_attr_val.v.val_int = int_val; 4288 add_dwarf_attr (die, &attr); 4289 } 4290 4291 static inline HOST_WIDE_INT 4292 AT_int (dw_attr_ref a) 4293 { 4294 gcc_assert (a && AT_class (a) == dw_val_class_const); 4295 return a->dw_attr_val.v.val_int; 4296 } 4297 4298 /* Add an unsigned integer attribute value to a DIE. */ 4299 4300 static inline void 4301 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind, 4302 unsigned HOST_WIDE_INT unsigned_val) 4303 { 4304 dw_attr_node attr; 4305 4306 attr.dw_attr = attr_kind; 4307 attr.dw_attr_val.val_class = dw_val_class_unsigned_const; 4308 attr.dw_attr_val.v.val_unsigned = unsigned_val; 4309 add_dwarf_attr (die, &attr); 4310 } 4311 4312 static inline unsigned HOST_WIDE_INT 4313 AT_unsigned (dw_attr_ref a) 4314 { 4315 gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const); 4316 return a->dw_attr_val.v.val_unsigned; 4317 } 4318 4319 /* Add an unsigned double integer attribute value to a DIE. */ 4320 4321 static inline void 4322 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind, 4323 HOST_WIDE_INT high, unsigned HOST_WIDE_INT low) 4324 { 4325 dw_attr_node attr; 4326 4327 attr.dw_attr = attr_kind; 4328 attr.dw_attr_val.val_class = dw_val_class_const_double; 4329 attr.dw_attr_val.v.val_double.high = high; 4330 attr.dw_attr_val.v.val_double.low = low; 4331 add_dwarf_attr (die, &attr); 4332 } 4333 4334 /* Add a floating point attribute value to a DIE and return it. */ 4335 4336 static inline void 4337 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind, 4338 unsigned int length, unsigned int elt_size, unsigned char *array) 4339 { 4340 dw_attr_node attr; 4341 4342 attr.dw_attr = attr_kind; 4343 attr.dw_attr_val.val_class = dw_val_class_vec; 4344 attr.dw_attr_val.v.val_vec.length = length; 4345 attr.dw_attr_val.v.val_vec.elt_size = elt_size; 4346 attr.dw_attr_val.v.val_vec.array = array; 4347 add_dwarf_attr (die, &attr); 4348 } 4349 4350 /* Add an 8-byte data attribute value to a DIE. */ 4351 4352 static inline void 4353 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind, 4354 unsigned char data8[8]) 4355 { 4356 dw_attr_node attr; 4357 4358 attr.dw_attr = attr_kind; 4359 attr.dw_attr_val.val_class = dw_val_class_data8; 4360 memcpy (attr.dw_attr_val.v.val_data8, data8, 8); 4361 add_dwarf_attr (die, &attr); 4362 } 4363 4364 /* Hash and equality functions for debug_str_hash. */ 4365 4366 static hashval_t 4367 debug_str_do_hash (const void *x) 4368 { 4369 return htab_hash_string (((const struct indirect_string_node *)x)->str); 4370 } 4371 4372 static int 4373 debug_str_eq (const void *x1, const void *x2) 4374 { 4375 return strcmp ((((const struct indirect_string_node *)x1)->str), 4376 (const char *)x2) == 0; 4377 } 4378 4379 /* Add STR to the indirect string hash table. */ 4380 4381 static struct indirect_string_node * 4382 find_AT_string (const char *str) 4383 { 4384 struct indirect_string_node *node; 4385 void **slot; 4386 4387 if (! debug_str_hash) 4388 debug_str_hash = htab_create_ggc (10, debug_str_do_hash, 4389 debug_str_eq, NULL); 4390 4391 slot = htab_find_slot_with_hash (debug_str_hash, str, 4392 htab_hash_string (str), INSERT); 4393 if (*slot == NULL) 4394 { 4395 node = ggc_alloc_cleared_indirect_string_node (); 4396 node->str = ggc_strdup (str); 4397 *slot = node; 4398 } 4399 else 4400 node = (struct indirect_string_node *) *slot; 4401 4402 node->refcount++; 4403 return node; 4404 } 4405 4406 /* Add a string attribute value to a DIE. */ 4407 4408 static inline void 4409 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str) 4410 { 4411 dw_attr_node attr; 4412 struct indirect_string_node *node; 4413 4414 node = find_AT_string (str); 4415 4416 attr.dw_attr = attr_kind; 4417 attr.dw_attr_val.val_class = dw_val_class_str; 4418 attr.dw_attr_val.v.val_str = node; 4419 add_dwarf_attr (die, &attr); 4420 } 4421 4422 static inline const char * 4423 AT_string (dw_attr_ref a) 4424 { 4425 gcc_assert (a && AT_class (a) == dw_val_class_str); 4426 return a->dw_attr_val.v.val_str->str; 4427 } 4428 4429 /* Find out whether a string should be output inline in DIE 4430 or out-of-line in .debug_str section. */ 4431 4432 static enum dwarf_form 4433 AT_string_form (dw_attr_ref a) 4434 { 4435 struct indirect_string_node *node; 4436 unsigned int len; 4437 char label[32]; 4438 4439 gcc_assert (a && AT_class (a) == dw_val_class_str); 4440 4441 node = a->dw_attr_val.v.val_str; 4442 if (node->form) 4443 return node->form; 4444 4445 len = strlen (node->str) + 1; 4446 4447 /* If the string is shorter or equal to the size of the reference, it is 4448 always better to put it inline. */ 4449 if (len <= DWARF_OFFSET_SIZE || node->refcount == 0) 4450 return node->form = DW_FORM_string; 4451 4452 /* If we cannot expect the linker to merge strings in .debug_str 4453 section, only put it into .debug_str if it is worth even in this 4454 single module. */ 4455 if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 4456 || ((debug_str_section->common.flags & SECTION_MERGE) == 0 4457 && (len - DWARF_OFFSET_SIZE) * node->refcount <= len)) 4458 return node->form = DW_FORM_string; 4459 4460 ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter); 4461 ++dw2_string_counter; 4462 node->label = xstrdup (label); 4463 4464 return node->form = DW_FORM_strp; 4465 } 4466 4467 /* Add a DIE reference attribute value to a DIE. */ 4468 4469 static inline void 4470 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die) 4471 { 4472 dw_attr_node attr; 4473 4474 #ifdef ENABLE_CHECKING 4475 gcc_assert (targ_die != NULL); 4476 #else 4477 /* With LTO we can end up trying to reference something we didn't create 4478 a DIE for. Avoid crashing later on a NULL referenced DIE. */ 4479 if (targ_die == NULL) 4480 return; 4481 #endif 4482 4483 attr.dw_attr = attr_kind; 4484 attr.dw_attr_val.val_class = dw_val_class_die_ref; 4485 attr.dw_attr_val.v.val_die_ref.die = targ_die; 4486 attr.dw_attr_val.v.val_die_ref.external = 0; 4487 add_dwarf_attr (die, &attr); 4488 } 4489 4490 /* Add an AT_specification attribute to a DIE, and also make the back 4491 pointer from the specification to the definition. */ 4492 4493 static inline void 4494 add_AT_specification (dw_die_ref die, dw_die_ref targ_die) 4495 { 4496 add_AT_die_ref (die, DW_AT_specification, targ_die); 4497 gcc_assert (!targ_die->die_definition); 4498 targ_die->die_definition = die; 4499 } 4500 4501 static inline dw_die_ref 4502 AT_ref (dw_attr_ref a) 4503 { 4504 gcc_assert (a && AT_class (a) == dw_val_class_die_ref); 4505 return a->dw_attr_val.v.val_die_ref.die; 4506 } 4507 4508 static inline int 4509 AT_ref_external (dw_attr_ref a) 4510 { 4511 if (a && AT_class (a) == dw_val_class_die_ref) 4512 return a->dw_attr_val.v.val_die_ref.external; 4513 4514 return 0; 4515 } 4516 4517 static inline void 4518 set_AT_ref_external (dw_attr_ref a, int i) 4519 { 4520 gcc_assert (a && AT_class (a) == dw_val_class_die_ref); 4521 a->dw_attr_val.v.val_die_ref.external = i; 4522 } 4523 4524 /* Add an FDE reference attribute value to a DIE. */ 4525 4526 static inline void 4527 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde) 4528 { 4529 dw_attr_node attr; 4530 4531 attr.dw_attr = attr_kind; 4532 attr.dw_attr_val.val_class = dw_val_class_fde_ref; 4533 attr.dw_attr_val.v.val_fde_index = targ_fde; 4534 add_dwarf_attr (die, &attr); 4535 } 4536 4537 /* Add a location description attribute value to a DIE. */ 4538 4539 static inline void 4540 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc) 4541 { 4542 dw_attr_node attr; 4543 4544 attr.dw_attr = attr_kind; 4545 attr.dw_attr_val.val_class = dw_val_class_loc; 4546 attr.dw_attr_val.v.val_loc = loc; 4547 add_dwarf_attr (die, &attr); 4548 } 4549 4550 static inline dw_loc_descr_ref 4551 AT_loc (dw_attr_ref a) 4552 { 4553 gcc_assert (a && AT_class (a) == dw_val_class_loc); 4554 return a->dw_attr_val.v.val_loc; 4555 } 4556 4557 static inline void 4558 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list) 4559 { 4560 dw_attr_node attr; 4561 4562 attr.dw_attr = attr_kind; 4563 attr.dw_attr_val.val_class = dw_val_class_loc_list; 4564 attr.dw_attr_val.v.val_loc_list = loc_list; 4565 add_dwarf_attr (die, &attr); 4566 have_location_lists = true; 4567 } 4568 4569 static inline dw_loc_list_ref 4570 AT_loc_list (dw_attr_ref a) 4571 { 4572 gcc_assert (a && AT_class (a) == dw_val_class_loc_list); 4573 return a->dw_attr_val.v.val_loc_list; 4574 } 4575 4576 static inline dw_loc_list_ref * 4577 AT_loc_list_ptr (dw_attr_ref a) 4578 { 4579 gcc_assert (a && AT_class (a) == dw_val_class_loc_list); 4580 return &a->dw_attr_val.v.val_loc_list; 4581 } 4582 4583 /* Add an address constant attribute value to a DIE. */ 4584 4585 static inline void 4586 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr) 4587 { 4588 dw_attr_node attr; 4589 4590 attr.dw_attr = attr_kind; 4591 attr.dw_attr_val.val_class = dw_val_class_addr; 4592 attr.dw_attr_val.v.val_addr = addr; 4593 add_dwarf_attr (die, &attr); 4594 } 4595 4596 /* Get the RTX from to an address DIE attribute. */ 4597 4598 static inline rtx 4599 AT_addr (dw_attr_ref a) 4600 { 4601 gcc_assert (a && AT_class (a) == dw_val_class_addr); 4602 return a->dw_attr_val.v.val_addr; 4603 } 4604 4605 /* Add a file attribute value to a DIE. */ 4606 4607 static inline void 4608 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind, 4609 struct dwarf_file_data *fd) 4610 { 4611 dw_attr_node attr; 4612 4613 attr.dw_attr = attr_kind; 4614 attr.dw_attr_val.val_class = dw_val_class_file; 4615 attr.dw_attr_val.v.val_file = fd; 4616 add_dwarf_attr (die, &attr); 4617 } 4618 4619 /* Get the dwarf_file_data from a file DIE attribute. */ 4620 4621 static inline struct dwarf_file_data * 4622 AT_file (dw_attr_ref a) 4623 { 4624 gcc_assert (a && AT_class (a) == dw_val_class_file); 4625 return a->dw_attr_val.v.val_file; 4626 } 4627 4628 /* Add a vms delta attribute value to a DIE. */ 4629 4630 static inline void 4631 add_AT_vms_delta (dw_die_ref die, enum dwarf_attribute attr_kind, 4632 const char *lbl1, const char *lbl2) 4633 { 4634 dw_attr_node attr; 4635 4636 attr.dw_attr = attr_kind; 4637 attr.dw_attr_val.val_class = dw_val_class_vms_delta; 4638 attr.dw_attr_val.v.val_vms_delta.lbl1 = xstrdup (lbl1); 4639 attr.dw_attr_val.v.val_vms_delta.lbl2 = xstrdup (lbl2); 4640 add_dwarf_attr (die, &attr); 4641 } 4642 4643 /* Add a label identifier attribute value to a DIE. */ 4644 4645 static inline void 4646 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id) 4647 { 4648 dw_attr_node attr; 4649 4650 attr.dw_attr = attr_kind; 4651 attr.dw_attr_val.val_class = dw_val_class_lbl_id; 4652 attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id); 4653 add_dwarf_attr (die, &attr); 4654 } 4655 4656 /* Add a section offset attribute value to a DIE, an offset into the 4657 debug_line section. */ 4658 4659 static inline void 4660 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind, 4661 const char *label) 4662 { 4663 dw_attr_node attr; 4664 4665 attr.dw_attr = attr_kind; 4666 attr.dw_attr_val.val_class = dw_val_class_lineptr; 4667 attr.dw_attr_val.v.val_lbl_id = xstrdup (label); 4668 add_dwarf_attr (die, &attr); 4669 } 4670 4671 /* Add a section offset attribute value to a DIE, an offset into the 4672 debug_macinfo section. */ 4673 4674 static inline void 4675 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind, 4676 const char *label) 4677 { 4678 dw_attr_node attr; 4679 4680 attr.dw_attr = attr_kind; 4681 attr.dw_attr_val.val_class = dw_val_class_macptr; 4682 attr.dw_attr_val.v.val_lbl_id = xstrdup (label); 4683 add_dwarf_attr (die, &attr); 4684 } 4685 4686 /* Add an offset attribute value to a DIE. */ 4687 4688 static inline void 4689 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind, 4690 unsigned HOST_WIDE_INT offset) 4691 { 4692 dw_attr_node attr; 4693 4694 attr.dw_attr = attr_kind; 4695 attr.dw_attr_val.val_class = dw_val_class_offset; 4696 attr.dw_attr_val.v.val_offset = offset; 4697 add_dwarf_attr (die, &attr); 4698 } 4699 4700 /* Add an range_list attribute value to a DIE. */ 4701 4702 static void 4703 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind, 4704 long unsigned int offset) 4705 { 4706 dw_attr_node attr; 4707 4708 attr.dw_attr = attr_kind; 4709 attr.dw_attr_val.val_class = dw_val_class_range_list; 4710 attr.dw_attr_val.v.val_offset = offset; 4711 add_dwarf_attr (die, &attr); 4712 } 4713 4714 /* Return the start label of a delta attribute. */ 4715 4716 static inline const char * 4717 AT_vms_delta1 (dw_attr_ref a) 4718 { 4719 gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta)); 4720 return a->dw_attr_val.v.val_vms_delta.lbl1; 4721 } 4722 4723 /* Return the end label of a delta attribute. */ 4724 4725 static inline const char * 4726 AT_vms_delta2 (dw_attr_ref a) 4727 { 4728 gcc_assert (a && (AT_class (a) == dw_val_class_vms_delta)); 4729 return a->dw_attr_val.v.val_vms_delta.lbl2; 4730 } 4731 4732 static inline const char * 4733 AT_lbl (dw_attr_ref a) 4734 { 4735 gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id 4736 || AT_class (a) == dw_val_class_lineptr 4737 || AT_class (a) == dw_val_class_macptr)); 4738 return a->dw_attr_val.v.val_lbl_id; 4739 } 4740 4741 /* Get the attribute of type attr_kind. */ 4742 4743 static dw_attr_ref 4744 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind) 4745 { 4746 dw_attr_ref a; 4747 unsigned ix; 4748 dw_die_ref spec = NULL; 4749 4750 if (! die) 4751 return NULL; 4752 4753 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 4754 if (a->dw_attr == attr_kind) 4755 return a; 4756 else if (a->dw_attr == DW_AT_specification 4757 || a->dw_attr == DW_AT_abstract_origin) 4758 spec = AT_ref (a); 4759 4760 if (spec) 4761 return get_AT (spec, attr_kind); 4762 4763 return NULL; 4764 } 4765 4766 /* Return the "low pc" attribute value, typically associated with a subprogram 4767 DIE. Return null if the "low pc" attribute is either not present, or if it 4768 cannot be represented as an assembler label identifier. */ 4769 4770 static inline const char * 4771 get_AT_low_pc (dw_die_ref die) 4772 { 4773 dw_attr_ref a = get_AT (die, DW_AT_low_pc); 4774 4775 return a ? AT_lbl (a) : NULL; 4776 } 4777 4778 /* Return the "high pc" attribute value, typically associated with a subprogram 4779 DIE. Return null if the "high pc" attribute is either not present, or if it 4780 cannot be represented as an assembler label identifier. */ 4781 4782 static inline const char * 4783 get_AT_hi_pc (dw_die_ref die) 4784 { 4785 dw_attr_ref a = get_AT (die, DW_AT_high_pc); 4786 4787 return a ? AT_lbl (a) : NULL; 4788 } 4789 4790 /* Return the value of the string attribute designated by ATTR_KIND, or 4791 NULL if it is not present. */ 4792 4793 static inline const char * 4794 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind) 4795 { 4796 dw_attr_ref a = get_AT (die, attr_kind); 4797 4798 return a ? AT_string (a) : NULL; 4799 } 4800 4801 /* Return the value of the flag attribute designated by ATTR_KIND, or -1 4802 if it is not present. */ 4803 4804 static inline int 4805 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind) 4806 { 4807 dw_attr_ref a = get_AT (die, attr_kind); 4808 4809 return a ? AT_flag (a) : 0; 4810 } 4811 4812 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0 4813 if it is not present. */ 4814 4815 static inline unsigned 4816 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind) 4817 { 4818 dw_attr_ref a = get_AT (die, attr_kind); 4819 4820 return a ? AT_unsigned (a) : 0; 4821 } 4822 4823 static inline dw_die_ref 4824 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind) 4825 { 4826 dw_attr_ref a = get_AT (die, attr_kind); 4827 4828 return a ? AT_ref (a) : NULL; 4829 } 4830 4831 static inline struct dwarf_file_data * 4832 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind) 4833 { 4834 dw_attr_ref a = get_AT (die, attr_kind); 4835 4836 return a ? AT_file (a) : NULL; 4837 } 4838 4839 /* Return TRUE if the language is C++. */ 4840 4841 static inline bool 4842 is_cxx (void) 4843 { 4844 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language); 4845 4846 return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus; 4847 } 4848 4849 /* Return TRUE if the language is Fortran. */ 4850 4851 static inline bool 4852 is_fortran (void) 4853 { 4854 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language); 4855 4856 return (lang == DW_LANG_Fortran77 4857 || lang == DW_LANG_Fortran90 4858 || lang == DW_LANG_Fortran95); 4859 } 4860 4861 /* Return TRUE if the language is Ada. */ 4862 4863 static inline bool 4864 is_ada (void) 4865 { 4866 unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language); 4867 4868 return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83; 4869 } 4870 4871 /* Remove the specified attribute if present. */ 4872 4873 static void 4874 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind) 4875 { 4876 dw_attr_ref a; 4877 unsigned ix; 4878 4879 if (! die) 4880 return; 4881 4882 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 4883 if (a->dw_attr == attr_kind) 4884 { 4885 if (AT_class (a) == dw_val_class_str) 4886 if (a->dw_attr_val.v.val_str->refcount) 4887 a->dw_attr_val.v.val_str->refcount--; 4888 4889 /* VEC_ordered_remove should help reduce the number of abbrevs 4890 that are needed. */ 4891 VEC_ordered_remove (dw_attr_node, die->die_attr, ix); 4892 return; 4893 } 4894 } 4895 4896 /* Remove CHILD from its parent. PREV must have the property that 4897 PREV->DIE_SIB == CHILD. Does not alter CHILD. */ 4898 4899 static void 4900 remove_child_with_prev (dw_die_ref child, dw_die_ref prev) 4901 { 4902 gcc_assert (child->die_parent == prev->die_parent); 4903 gcc_assert (prev->die_sib == child); 4904 if (prev == child) 4905 { 4906 gcc_assert (child->die_parent->die_child == child); 4907 prev = NULL; 4908 } 4909 else 4910 prev->die_sib = child->die_sib; 4911 if (child->die_parent->die_child == child) 4912 child->die_parent->die_child = prev; 4913 } 4914 4915 /* Replace OLD_CHILD with NEW_CHILD. PREV must have the property that 4916 PREV->DIE_SIB == OLD_CHILD. Does not alter OLD_CHILD. */ 4917 4918 static void 4919 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev) 4920 { 4921 dw_die_ref parent = old_child->die_parent; 4922 4923 gcc_assert (parent == prev->die_parent); 4924 gcc_assert (prev->die_sib == old_child); 4925 4926 new_child->die_parent = parent; 4927 if (prev == old_child) 4928 { 4929 gcc_assert (parent->die_child == old_child); 4930 new_child->die_sib = new_child; 4931 } 4932 else 4933 { 4934 prev->die_sib = new_child; 4935 new_child->die_sib = old_child->die_sib; 4936 } 4937 if (old_child->die_parent->die_child == old_child) 4938 old_child->die_parent->die_child = new_child; 4939 } 4940 4941 /* Move all children from OLD_PARENT to NEW_PARENT. */ 4942 4943 static void 4944 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent) 4945 { 4946 dw_die_ref c; 4947 new_parent->die_child = old_parent->die_child; 4948 old_parent->die_child = NULL; 4949 FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent); 4950 } 4951 4952 /* Remove child DIE whose die_tag is TAG. Do nothing if no child 4953 matches TAG. */ 4954 4955 static void 4956 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag) 4957 { 4958 dw_die_ref c; 4959 4960 c = die->die_child; 4961 if (c) do { 4962 dw_die_ref prev = c; 4963 c = c->die_sib; 4964 while (c->die_tag == tag) 4965 { 4966 remove_child_with_prev (c, prev); 4967 /* Might have removed every child. */ 4968 if (c == c->die_sib) 4969 return; 4970 c = c->die_sib; 4971 } 4972 } while (c != die->die_child); 4973 } 4974 4975 /* Add a CHILD_DIE as the last child of DIE. */ 4976 4977 static void 4978 add_child_die (dw_die_ref die, dw_die_ref child_die) 4979 { 4980 /* FIXME this should probably be an assert. */ 4981 if (! die || ! child_die) 4982 return; 4983 gcc_assert (die != child_die); 4984 4985 child_die->die_parent = die; 4986 if (die->die_child) 4987 { 4988 child_die->die_sib = die->die_child->die_sib; 4989 die->die_child->die_sib = child_die; 4990 } 4991 else 4992 child_die->die_sib = child_die; 4993 die->die_child = child_die; 4994 } 4995 4996 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT 4997 is the specification, to the end of PARENT's list of children. 4998 This is done by removing and re-adding it. */ 4999 5000 static void 5001 splice_child_die (dw_die_ref parent, dw_die_ref child) 5002 { 5003 dw_die_ref p; 5004 5005 /* We want the declaration DIE from inside the class, not the 5006 specification DIE at toplevel. */ 5007 if (child->die_parent != parent) 5008 { 5009 dw_die_ref tmp = get_AT_ref (child, DW_AT_specification); 5010 5011 if (tmp) 5012 child = tmp; 5013 } 5014 5015 gcc_assert (child->die_parent == parent 5016 || (child->die_parent 5017 == get_AT_ref (parent, DW_AT_specification))); 5018 5019 for (p = child->die_parent->die_child; ; p = p->die_sib) 5020 if (p->die_sib == child) 5021 { 5022 remove_child_with_prev (child, p); 5023 break; 5024 } 5025 5026 add_child_die (parent, child); 5027 } 5028 5029 /* Return a pointer to a newly created DIE node. */ 5030 5031 static inline dw_die_ref 5032 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t) 5033 { 5034 dw_die_ref die = ggc_alloc_cleared_die_node (); 5035 5036 die->die_tag = tag_value; 5037 5038 if (parent_die != NULL) 5039 add_child_die (parent_die, die); 5040 else 5041 { 5042 limbo_die_node *limbo_node; 5043 5044 limbo_node = ggc_alloc_cleared_limbo_die_node (); 5045 limbo_node->die = die; 5046 limbo_node->created_for = t; 5047 limbo_node->next = limbo_die_list; 5048 limbo_die_list = limbo_node; 5049 } 5050 5051 return die; 5052 } 5053 5054 /* Return the DIE associated with the given type specifier. */ 5055 5056 static inline dw_die_ref 5057 lookup_type_die (tree type) 5058 { 5059 return TYPE_SYMTAB_DIE (type); 5060 } 5061 5062 /* Given a TYPE_DIE representing the type TYPE, if TYPE is an 5063 anonymous type named by the typedef TYPE_DIE, return the DIE of the 5064 anonymous type instead the one of the naming typedef. */ 5065 5066 static inline dw_die_ref 5067 strip_naming_typedef (tree type, dw_die_ref type_die) 5068 { 5069 if (type 5070 && TREE_CODE (type) == RECORD_TYPE 5071 && type_die 5072 && type_die->die_tag == DW_TAG_typedef 5073 && is_naming_typedef_decl (TYPE_NAME (type))) 5074 type_die = get_AT_ref (type_die, DW_AT_type); 5075 return type_die; 5076 } 5077 5078 /* Like lookup_type_die, but if type is an anonymous type named by a 5079 typedef[1], return the DIE of the anonymous type instead the one of 5080 the naming typedef. This is because in gen_typedef_die, we did 5081 equate the anonymous struct named by the typedef with the DIE of 5082 the naming typedef. So by default, lookup_type_die on an anonymous 5083 struct yields the DIE of the naming typedef. 5084 5085 [1]: Read the comment of is_naming_typedef_decl to learn about what 5086 a naming typedef is. */ 5087 5088 static inline dw_die_ref 5089 lookup_type_die_strip_naming_typedef (tree type) 5090 { 5091 dw_die_ref die = lookup_type_die (type); 5092 return strip_naming_typedef (type, die); 5093 } 5094 5095 /* Equate a DIE to a given type specifier. */ 5096 5097 static inline void 5098 equate_type_number_to_die (tree type, dw_die_ref type_die) 5099 { 5100 TYPE_SYMTAB_DIE (type) = type_die; 5101 } 5102 5103 /* Returns a hash value for X (which really is a die_struct). */ 5104 5105 static hashval_t 5106 decl_die_table_hash (const void *x) 5107 { 5108 return (hashval_t) ((const_dw_die_ref) x)->decl_id; 5109 } 5110 5111 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y. */ 5112 5113 static int 5114 decl_die_table_eq (const void *x, const void *y) 5115 { 5116 return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y)); 5117 } 5118 5119 /* Return the DIE associated with a given declaration. */ 5120 5121 static inline dw_die_ref 5122 lookup_decl_die (tree decl) 5123 { 5124 return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl)); 5125 } 5126 5127 /* Returns a hash value for X (which really is a var_loc_list). */ 5128 5129 static hashval_t 5130 decl_loc_table_hash (const void *x) 5131 { 5132 return (hashval_t) ((const var_loc_list *) x)->decl_id; 5133 } 5134 5135 /* Return nonzero if decl_id of var_loc_list X is the same as 5136 UID of decl *Y. */ 5137 5138 static int 5139 decl_loc_table_eq (const void *x, const void *y) 5140 { 5141 return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y)); 5142 } 5143 5144 /* Return the var_loc list associated with a given declaration. */ 5145 5146 static inline var_loc_list * 5147 lookup_decl_loc (const_tree decl) 5148 { 5149 if (!decl_loc_table) 5150 return NULL; 5151 return (var_loc_list *) 5152 htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl)); 5153 } 5154 5155 /* Returns a hash value for X (which really is a cached_dw_loc_list_list). */ 5156 5157 static hashval_t 5158 cached_dw_loc_list_table_hash (const void *x) 5159 { 5160 return (hashval_t) ((const cached_dw_loc_list *) x)->decl_id; 5161 } 5162 5163 /* Return nonzero if decl_id of cached_dw_loc_list X is the same as 5164 UID of decl *Y. */ 5165 5166 static int 5167 cached_dw_loc_list_table_eq (const void *x, const void *y) 5168 { 5169 return (((const cached_dw_loc_list *) x)->decl_id 5170 == DECL_UID ((const_tree) y)); 5171 } 5172 5173 /* Equate a DIE to a particular declaration. */ 5174 5175 static void 5176 equate_decl_number_to_die (tree decl, dw_die_ref decl_die) 5177 { 5178 unsigned int decl_id = DECL_UID (decl); 5179 void **slot; 5180 5181 slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT); 5182 *slot = decl_die; 5183 decl_die->decl_id = decl_id; 5184 } 5185 5186 /* Return how many bits covers PIECE EXPR_LIST. */ 5187 5188 static int 5189 decl_piece_bitsize (rtx piece) 5190 { 5191 int ret = (int) GET_MODE (piece); 5192 if (ret) 5193 return ret; 5194 gcc_assert (GET_CODE (XEXP (piece, 0)) == CONCAT 5195 && CONST_INT_P (XEXP (XEXP (piece, 0), 0))); 5196 return INTVAL (XEXP (XEXP (piece, 0), 0)); 5197 } 5198 5199 /* Return pointer to the location of location note in PIECE EXPR_LIST. */ 5200 5201 static rtx * 5202 decl_piece_varloc_ptr (rtx piece) 5203 { 5204 if ((int) GET_MODE (piece)) 5205 return &XEXP (piece, 0); 5206 else 5207 return &XEXP (XEXP (piece, 0), 1); 5208 } 5209 5210 /* Create an EXPR_LIST for location note LOC_NOTE covering BITSIZE bits. 5211 Next is the chain of following piece nodes. */ 5212 5213 static rtx 5214 decl_piece_node (rtx loc_note, HOST_WIDE_INT bitsize, rtx next) 5215 { 5216 if (bitsize <= (int) MAX_MACHINE_MODE) 5217 return alloc_EXPR_LIST (bitsize, loc_note, next); 5218 else 5219 return alloc_EXPR_LIST (0, gen_rtx_CONCAT (VOIDmode, 5220 GEN_INT (bitsize), 5221 loc_note), next); 5222 } 5223 5224 /* Return rtx that should be stored into loc field for 5225 LOC_NOTE and BITPOS/BITSIZE. */ 5226 5227 static rtx 5228 construct_piece_list (rtx loc_note, HOST_WIDE_INT bitpos, 5229 HOST_WIDE_INT bitsize) 5230 { 5231 if (bitsize != -1) 5232 { 5233 loc_note = decl_piece_node (loc_note, bitsize, NULL_RTX); 5234 if (bitpos != 0) 5235 loc_note = decl_piece_node (NULL_RTX, bitpos, loc_note); 5236 } 5237 return loc_note; 5238 } 5239 5240 /* This function either modifies location piece list *DEST in 5241 place (if SRC and INNER is NULL), or copies location piece list 5242 *SRC to *DEST while modifying it. Location BITPOS is modified 5243 to contain LOC_NOTE, any pieces overlapping it are removed resp. 5244 not copied and if needed some padding around it is added. 5245 When modifying in place, DEST should point to EXPR_LIST where 5246 earlier pieces cover PIECE_BITPOS bits, when copying SRC points 5247 to the start of the whole list and INNER points to the EXPR_LIST 5248 where earlier pieces cover PIECE_BITPOS bits. */ 5249 5250 static void 5251 adjust_piece_list (rtx *dest, rtx *src, rtx *inner, 5252 HOST_WIDE_INT bitpos, HOST_WIDE_INT piece_bitpos, 5253 HOST_WIDE_INT bitsize, rtx loc_note) 5254 { 5255 int diff; 5256 bool copy = inner != NULL; 5257 5258 if (copy) 5259 { 5260 /* First copy all nodes preceeding the current bitpos. */ 5261 while (src != inner) 5262 { 5263 *dest = decl_piece_node (*decl_piece_varloc_ptr (*src), 5264 decl_piece_bitsize (*src), NULL_RTX); 5265 dest = &XEXP (*dest, 1); 5266 src = &XEXP (*src, 1); 5267 } 5268 } 5269 /* Add padding if needed. */ 5270 if (bitpos != piece_bitpos) 5271 { 5272 *dest = decl_piece_node (NULL_RTX, bitpos - piece_bitpos, 5273 copy ? NULL_RTX : *dest); 5274 dest = &XEXP (*dest, 1); 5275 } 5276 else if (*dest && decl_piece_bitsize (*dest) == bitsize) 5277 { 5278 gcc_assert (!copy); 5279 /* A piece with correct bitpos and bitsize already exist, 5280 just update the location for it and return. */ 5281 *decl_piece_varloc_ptr (*dest) = loc_note; 5282 return; 5283 } 5284 /* Add the piece that changed. */ 5285 *dest = decl_piece_node (loc_note, bitsize, copy ? NULL_RTX : *dest); 5286 dest = &XEXP (*dest, 1); 5287 /* Skip over pieces that overlap it. */ 5288 diff = bitpos - piece_bitpos + bitsize; 5289 if (!copy) 5290 src = dest; 5291 while (diff > 0 && *src) 5292 { 5293 rtx piece = *src; 5294 diff -= decl_piece_bitsize (piece); 5295 if (copy) 5296 src = &XEXP (piece, 1); 5297 else 5298 { 5299 *src = XEXP (piece, 1); 5300 free_EXPR_LIST_node (piece); 5301 } 5302 } 5303 /* Add padding if needed. */ 5304 if (diff < 0 && *src) 5305 { 5306 if (!copy) 5307 dest = src; 5308 *dest = decl_piece_node (NULL_RTX, -diff, copy ? NULL_RTX : *dest); 5309 dest = &XEXP (*dest, 1); 5310 } 5311 if (!copy) 5312 return; 5313 /* Finally copy all nodes following it. */ 5314 while (*src) 5315 { 5316 *dest = decl_piece_node (*decl_piece_varloc_ptr (*src), 5317 decl_piece_bitsize (*src), NULL_RTX); 5318 dest = &XEXP (*dest, 1); 5319 src = &XEXP (*src, 1); 5320 } 5321 } 5322 5323 /* Add a variable location node to the linked list for DECL. */ 5324 5325 static struct var_loc_node * 5326 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label) 5327 { 5328 unsigned int decl_id; 5329 var_loc_list *temp; 5330 void **slot; 5331 struct var_loc_node *loc = NULL; 5332 HOST_WIDE_INT bitsize = -1, bitpos = -1; 5333 5334 if (DECL_DEBUG_EXPR_IS_FROM (decl)) 5335 { 5336 tree realdecl = DECL_DEBUG_EXPR (decl); 5337 if (realdecl && handled_component_p (realdecl)) 5338 { 5339 HOST_WIDE_INT maxsize; 5340 tree innerdecl; 5341 innerdecl 5342 = get_ref_base_and_extent (realdecl, &bitpos, &bitsize, &maxsize); 5343 if (!DECL_P (innerdecl) 5344 || DECL_IGNORED_P (innerdecl) 5345 || TREE_STATIC (innerdecl) 5346 || bitsize <= 0 5347 || bitpos + bitsize > 256 5348 || bitsize != maxsize) 5349 return NULL; 5350 decl = innerdecl; 5351 } 5352 } 5353 5354 decl_id = DECL_UID (decl); 5355 slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT); 5356 if (*slot == NULL) 5357 { 5358 temp = ggc_alloc_cleared_var_loc_list (); 5359 temp->decl_id = decl_id; 5360 *slot = temp; 5361 } 5362 else 5363 temp = (var_loc_list *) *slot; 5364 5365 /* For PARM_DECLs try to keep around the original incoming value, 5366 even if that means we'll emit a zero-range .debug_loc entry. */ 5367 if (temp->last 5368 && temp->first == temp->last 5369 && TREE_CODE (decl) == PARM_DECL 5370 && GET_CODE (temp->first->loc) == NOTE 5371 && NOTE_VAR_LOCATION_DECL (temp->first->loc) == decl 5372 && DECL_INCOMING_RTL (decl) 5373 && NOTE_VAR_LOCATION_LOC (temp->first->loc) 5374 && GET_CODE (NOTE_VAR_LOCATION_LOC (temp->first->loc)) 5375 == GET_CODE (DECL_INCOMING_RTL (decl)) 5376 && prev_real_insn (temp->first->loc) == NULL_RTX 5377 && (bitsize != -1 5378 || !rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->first->loc), 5379 NOTE_VAR_LOCATION_LOC (loc_note)) 5380 || (NOTE_VAR_LOCATION_STATUS (temp->first->loc) 5381 != NOTE_VAR_LOCATION_STATUS (loc_note)))) 5382 { 5383 loc = ggc_alloc_cleared_var_loc_node (); 5384 temp->first->next = loc; 5385 temp->last = loc; 5386 loc->loc = construct_piece_list (loc_note, bitpos, bitsize); 5387 } 5388 else if (temp->last) 5389 { 5390 struct var_loc_node *last = temp->last, *unused = NULL; 5391 rtx *piece_loc = NULL, last_loc_note; 5392 int piece_bitpos = 0; 5393 if (last->next) 5394 { 5395 last = last->next; 5396 gcc_assert (last->next == NULL); 5397 } 5398 if (bitsize != -1 && GET_CODE (last->loc) == EXPR_LIST) 5399 { 5400 piece_loc = &last->loc; 5401 do 5402 { 5403 int cur_bitsize = decl_piece_bitsize (*piece_loc); 5404 if (piece_bitpos + cur_bitsize > bitpos) 5405 break; 5406 piece_bitpos += cur_bitsize; 5407 piece_loc = &XEXP (*piece_loc, 1); 5408 } 5409 while (*piece_loc); 5410 } 5411 /* TEMP->LAST here is either pointer to the last but one or 5412 last element in the chained list, LAST is pointer to the 5413 last element. */ 5414 if (label && strcmp (last->label, label) == 0) 5415 { 5416 /* For SRA optimized variables if there weren't any real 5417 insns since last note, just modify the last node. */ 5418 if (piece_loc != NULL) 5419 { 5420 adjust_piece_list (piece_loc, NULL, NULL, 5421 bitpos, piece_bitpos, bitsize, loc_note); 5422 return NULL; 5423 } 5424 /* If the last note doesn't cover any instructions, remove it. */ 5425 if (temp->last != last) 5426 { 5427 temp->last->next = NULL; 5428 unused = last; 5429 last = temp->last; 5430 gcc_assert (strcmp (last->label, label) != 0); 5431 } 5432 else 5433 { 5434 gcc_assert (temp->first == temp->last 5435 || (temp->first->next == temp->last 5436 && TREE_CODE (decl) == PARM_DECL)); 5437 memset (temp->last, '\0', sizeof (*temp->last)); 5438 temp->last->loc = construct_piece_list (loc_note, bitpos, bitsize); 5439 return temp->last; 5440 } 5441 } 5442 if (bitsize == -1 && NOTE_P (last->loc)) 5443 last_loc_note = last->loc; 5444 else if (piece_loc != NULL 5445 && *piece_loc != NULL_RTX 5446 && piece_bitpos == bitpos 5447 && decl_piece_bitsize (*piece_loc) == bitsize) 5448 last_loc_note = *decl_piece_varloc_ptr (*piece_loc); 5449 else 5450 last_loc_note = NULL_RTX; 5451 /* If the current location is the same as the end of the list, 5452 and either both or neither of the locations is uninitialized, 5453 we have nothing to do. */ 5454 if (last_loc_note == NULL_RTX 5455 || (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last_loc_note), 5456 NOTE_VAR_LOCATION_LOC (loc_note))) 5457 || ((NOTE_VAR_LOCATION_STATUS (last_loc_note) 5458 != NOTE_VAR_LOCATION_STATUS (loc_note)) 5459 && ((NOTE_VAR_LOCATION_STATUS (last_loc_note) 5460 == VAR_INIT_STATUS_UNINITIALIZED) 5461 || (NOTE_VAR_LOCATION_STATUS (loc_note) 5462 == VAR_INIT_STATUS_UNINITIALIZED)))) 5463 { 5464 /* Add LOC to the end of list and update LAST. If the last 5465 element of the list has been removed above, reuse its 5466 memory for the new node, otherwise allocate a new one. */ 5467 if (unused) 5468 { 5469 loc = unused; 5470 memset (loc, '\0', sizeof (*loc)); 5471 } 5472 else 5473 loc = ggc_alloc_cleared_var_loc_node (); 5474 if (bitsize == -1 || piece_loc == NULL) 5475 loc->loc = construct_piece_list (loc_note, bitpos, bitsize); 5476 else 5477 adjust_piece_list (&loc->loc, &last->loc, piece_loc, 5478 bitpos, piece_bitpos, bitsize, loc_note); 5479 last->next = loc; 5480 /* Ensure TEMP->LAST will point either to the new last but one 5481 element of the chain, or to the last element in it. */ 5482 if (last != temp->last) 5483 temp->last = last; 5484 } 5485 else if (unused) 5486 ggc_free (unused); 5487 } 5488 else 5489 { 5490 loc = ggc_alloc_cleared_var_loc_node (); 5491 temp->first = loc; 5492 temp->last = loc; 5493 loc->loc = construct_piece_list (loc_note, bitpos, bitsize); 5494 } 5495 return loc; 5496 } 5497 5498 /* Keep track of the number of spaces used to indent the 5499 output of the debugging routines that print the structure of 5500 the DIE internal representation. */ 5501 static int print_indent; 5502 5503 /* Indent the line the number of spaces given by print_indent. */ 5504 5505 static inline void 5506 print_spaces (FILE *outfile) 5507 { 5508 fprintf (outfile, "%*s", print_indent, ""); 5509 } 5510 5511 /* Print a type signature in hex. */ 5512 5513 static inline void 5514 print_signature (FILE *outfile, char *sig) 5515 { 5516 int i; 5517 5518 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++) 5519 fprintf (outfile, "%02x", sig[i] & 0xff); 5520 } 5521 5522 /* Print the information associated with a given DIE, and its children. 5523 This routine is a debugging aid only. */ 5524 5525 static void 5526 print_die (dw_die_ref die, FILE *outfile) 5527 { 5528 dw_attr_ref a; 5529 dw_die_ref c; 5530 unsigned ix; 5531 5532 print_spaces (outfile); 5533 fprintf (outfile, "DIE %4ld: %s (%p)\n", 5534 die->die_offset, dwarf_tag_name (die->die_tag), 5535 (void*) die); 5536 print_spaces (outfile); 5537 fprintf (outfile, " abbrev id: %lu", die->die_abbrev); 5538 fprintf (outfile, " offset: %ld", die->die_offset); 5539 fprintf (outfile, " mark: %d\n", die->die_mark); 5540 5541 if (use_debug_types && die->die_id.die_type_node) 5542 { 5543 print_spaces (outfile); 5544 fprintf (outfile, " signature: "); 5545 print_signature (outfile, die->die_id.die_type_node->signature); 5546 fprintf (outfile, "\n"); 5547 } 5548 5549 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 5550 { 5551 print_spaces (outfile); 5552 fprintf (outfile, " %s: ", dwarf_attr_name (a->dw_attr)); 5553 5554 switch (AT_class (a)) 5555 { 5556 case dw_val_class_addr: 5557 fprintf (outfile, "address"); 5558 break; 5559 case dw_val_class_offset: 5560 fprintf (outfile, "offset"); 5561 break; 5562 case dw_val_class_loc: 5563 fprintf (outfile, "location descriptor"); 5564 break; 5565 case dw_val_class_loc_list: 5566 fprintf (outfile, "location list -> label:%s", 5567 AT_loc_list (a)->ll_symbol); 5568 break; 5569 case dw_val_class_range_list: 5570 fprintf (outfile, "range list"); 5571 break; 5572 case dw_val_class_const: 5573 fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a)); 5574 break; 5575 case dw_val_class_unsigned_const: 5576 fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a)); 5577 break; 5578 case dw_val_class_const_double: 5579 fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\ 5580 HOST_WIDE_INT_PRINT_UNSIGNED")", 5581 a->dw_attr_val.v.val_double.high, 5582 a->dw_attr_val.v.val_double.low); 5583 break; 5584 case dw_val_class_vec: 5585 fprintf (outfile, "floating-point or vector constant"); 5586 break; 5587 case dw_val_class_flag: 5588 fprintf (outfile, "%u", AT_flag (a)); 5589 break; 5590 case dw_val_class_die_ref: 5591 if (AT_ref (a) != NULL) 5592 { 5593 if (use_debug_types && AT_ref (a)->die_id.die_type_node) 5594 { 5595 fprintf (outfile, "die -> signature: "); 5596 print_signature (outfile, 5597 AT_ref (a)->die_id.die_type_node->signature); 5598 } 5599 else if (! use_debug_types && AT_ref (a)->die_id.die_symbol) 5600 fprintf (outfile, "die -> label: %s", 5601 AT_ref (a)->die_id.die_symbol); 5602 else 5603 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset); 5604 fprintf (outfile, " (%p)", (void *) AT_ref (a)); 5605 } 5606 else 5607 fprintf (outfile, "die -> <null>"); 5608 break; 5609 case dw_val_class_vms_delta: 5610 fprintf (outfile, "delta: @slotcount(%s-%s)", 5611 AT_vms_delta2 (a), AT_vms_delta1 (a)); 5612 break; 5613 case dw_val_class_lbl_id: 5614 case dw_val_class_lineptr: 5615 case dw_val_class_macptr: 5616 fprintf (outfile, "label: %s", AT_lbl (a)); 5617 break; 5618 case dw_val_class_str: 5619 if (AT_string (a) != NULL) 5620 fprintf (outfile, "\"%s\"", AT_string (a)); 5621 else 5622 fprintf (outfile, "<null>"); 5623 break; 5624 case dw_val_class_file: 5625 fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename, 5626 AT_file (a)->emitted_number); 5627 break; 5628 case dw_val_class_data8: 5629 { 5630 int i; 5631 5632 for (i = 0; i < 8; i++) 5633 fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]); 5634 break; 5635 } 5636 default: 5637 break; 5638 } 5639 5640 fprintf (outfile, "\n"); 5641 } 5642 5643 if (die->die_child != NULL) 5644 { 5645 print_indent += 4; 5646 FOR_EACH_CHILD (die, c, print_die (c, outfile)); 5647 print_indent -= 4; 5648 } 5649 if (print_indent == 0) 5650 fprintf (outfile, "\n"); 5651 } 5652 5653 /* Print the information collected for a given DIE. */ 5654 5655 DEBUG_FUNCTION void 5656 debug_dwarf_die (dw_die_ref die) 5657 { 5658 print_die (die, stderr); 5659 } 5660 5661 /* Print all DWARF information collected for the compilation unit. 5662 This routine is a debugging aid only. */ 5663 5664 DEBUG_FUNCTION void 5665 debug_dwarf (void) 5666 { 5667 print_indent = 0; 5668 print_die (comp_unit_die (), stderr); 5669 } 5670 5671 /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU 5672 for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL 5673 DIE that marks the start of the DIEs for this include file. */ 5674 5675 static dw_die_ref 5676 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die) 5677 { 5678 const char *filename = get_AT_string (bincl_die, DW_AT_name); 5679 dw_die_ref new_unit = gen_compile_unit_die (filename); 5680 5681 new_unit->die_sib = old_unit; 5682 return new_unit; 5683 } 5684 5685 /* Close an include-file CU and reopen the enclosing one. */ 5686 5687 static dw_die_ref 5688 pop_compile_unit (dw_die_ref old_unit) 5689 { 5690 dw_die_ref new_unit = old_unit->die_sib; 5691 5692 old_unit->die_sib = NULL; 5693 return new_unit; 5694 } 5695 5696 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx) 5697 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx) 5698 5699 /* Calculate the checksum of a location expression. */ 5700 5701 static inline void 5702 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx) 5703 { 5704 int tem; 5705 5706 tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc); 5707 CHECKSUM (tem); 5708 CHECKSUM (loc->dw_loc_oprnd1); 5709 CHECKSUM (loc->dw_loc_oprnd2); 5710 } 5711 5712 /* Calculate the checksum of an attribute. */ 5713 5714 static void 5715 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark) 5716 { 5717 dw_loc_descr_ref loc; 5718 rtx r; 5719 5720 CHECKSUM (at->dw_attr); 5721 5722 /* We don't care that this was compiled with a different compiler 5723 snapshot; if the output is the same, that's what matters. */ 5724 if (at->dw_attr == DW_AT_producer) 5725 return; 5726 5727 switch (AT_class (at)) 5728 { 5729 case dw_val_class_const: 5730 CHECKSUM (at->dw_attr_val.v.val_int); 5731 break; 5732 case dw_val_class_unsigned_const: 5733 CHECKSUM (at->dw_attr_val.v.val_unsigned); 5734 break; 5735 case dw_val_class_const_double: 5736 CHECKSUM (at->dw_attr_val.v.val_double); 5737 break; 5738 case dw_val_class_vec: 5739 CHECKSUM (at->dw_attr_val.v.val_vec); 5740 break; 5741 case dw_val_class_flag: 5742 CHECKSUM (at->dw_attr_val.v.val_flag); 5743 break; 5744 case dw_val_class_str: 5745 CHECKSUM_STRING (AT_string (at)); 5746 break; 5747 5748 case dw_val_class_addr: 5749 r = AT_addr (at); 5750 gcc_assert (GET_CODE (r) == SYMBOL_REF); 5751 CHECKSUM_STRING (XSTR (r, 0)); 5752 break; 5753 5754 case dw_val_class_offset: 5755 CHECKSUM (at->dw_attr_val.v.val_offset); 5756 break; 5757 5758 case dw_val_class_loc: 5759 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next) 5760 loc_checksum (loc, ctx); 5761 break; 5762 5763 case dw_val_class_die_ref: 5764 die_checksum (AT_ref (at), ctx, mark); 5765 break; 5766 5767 case dw_val_class_fde_ref: 5768 case dw_val_class_vms_delta: 5769 case dw_val_class_lbl_id: 5770 case dw_val_class_lineptr: 5771 case dw_val_class_macptr: 5772 break; 5773 5774 case dw_val_class_file: 5775 CHECKSUM_STRING (AT_file (at)->filename); 5776 break; 5777 5778 case dw_val_class_data8: 5779 CHECKSUM (at->dw_attr_val.v.val_data8); 5780 break; 5781 5782 default: 5783 break; 5784 } 5785 } 5786 5787 /* Calculate the checksum of a DIE. */ 5788 5789 static void 5790 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark) 5791 { 5792 dw_die_ref c; 5793 dw_attr_ref a; 5794 unsigned ix; 5795 5796 /* To avoid infinite recursion. */ 5797 if (die->die_mark) 5798 { 5799 CHECKSUM (die->die_mark); 5800 return; 5801 } 5802 die->die_mark = ++(*mark); 5803 5804 CHECKSUM (die->die_tag); 5805 5806 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 5807 attr_checksum (a, ctx, mark); 5808 5809 FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark)); 5810 } 5811 5812 #undef CHECKSUM 5813 #undef CHECKSUM_STRING 5814 5815 /* For DWARF-4 types, include the trailing NULL when checksumming strings. */ 5816 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx) 5817 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx) 5818 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx) 5819 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx) 5820 #define CHECKSUM_ATTR(FOO) \ 5821 if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark) 5822 5823 /* Calculate the checksum of a number in signed LEB128 format. */ 5824 5825 static void 5826 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx) 5827 { 5828 unsigned char byte; 5829 bool more; 5830 5831 while (1) 5832 { 5833 byte = (value & 0x7f); 5834 value >>= 7; 5835 more = !((value == 0 && (byte & 0x40) == 0) 5836 || (value == -1 && (byte & 0x40) != 0)); 5837 if (more) 5838 byte |= 0x80; 5839 CHECKSUM (byte); 5840 if (!more) 5841 break; 5842 } 5843 } 5844 5845 /* Calculate the checksum of a number in unsigned LEB128 format. */ 5846 5847 static void 5848 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx) 5849 { 5850 while (1) 5851 { 5852 unsigned char byte = (value & 0x7f); 5853 value >>= 7; 5854 if (value != 0) 5855 /* More bytes to follow. */ 5856 byte |= 0x80; 5857 CHECKSUM (byte); 5858 if (value == 0) 5859 break; 5860 } 5861 } 5862 5863 /* Checksum the context of the DIE. This adds the names of any 5864 surrounding namespaces or structures to the checksum. */ 5865 5866 static void 5867 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx) 5868 { 5869 const char *name; 5870 dw_die_ref spec; 5871 int tag = die->die_tag; 5872 5873 if (tag != DW_TAG_namespace 5874 && tag != DW_TAG_structure_type 5875 && tag != DW_TAG_class_type) 5876 return; 5877 5878 name = get_AT_string (die, DW_AT_name); 5879 5880 spec = get_AT_ref (die, DW_AT_specification); 5881 if (spec != NULL) 5882 die = spec; 5883 5884 if (die->die_parent != NULL) 5885 checksum_die_context (die->die_parent, ctx); 5886 5887 CHECKSUM_ULEB128 ('C'); 5888 CHECKSUM_ULEB128 (tag); 5889 if (name != NULL) 5890 CHECKSUM_STRING (name); 5891 } 5892 5893 /* Calculate the checksum of a location expression. */ 5894 5895 static inline void 5896 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx) 5897 { 5898 /* Special case for lone DW_OP_plus_uconst: checksum as if the location 5899 were emitted as a DW_FORM_sdata instead of a location expression. */ 5900 if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL) 5901 { 5902 CHECKSUM_ULEB128 (DW_FORM_sdata); 5903 CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned); 5904 return; 5905 } 5906 5907 /* Otherwise, just checksum the raw location expression. */ 5908 while (loc != NULL) 5909 { 5910 CHECKSUM_ULEB128 (loc->dw_loc_opc); 5911 CHECKSUM (loc->dw_loc_oprnd1); 5912 CHECKSUM (loc->dw_loc_oprnd2); 5913 loc = loc->dw_loc_next; 5914 } 5915 } 5916 5917 /* Calculate the checksum of an attribute. */ 5918 5919 static void 5920 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at, 5921 struct md5_ctx *ctx, int *mark) 5922 { 5923 dw_loc_descr_ref loc; 5924 rtx r; 5925 5926 if (AT_class (at) == dw_val_class_die_ref) 5927 { 5928 dw_die_ref target_die = AT_ref (at); 5929 5930 /* For pointer and reference types, we checksum only the (qualified) 5931 name of the target type (if there is a name). For friend entries, 5932 we checksum only the (qualified) name of the target type or function. 5933 This allows the checksum to remain the same whether the target type 5934 is complete or not. */ 5935 if ((at->dw_attr == DW_AT_type 5936 && (tag == DW_TAG_pointer_type 5937 || tag == DW_TAG_reference_type 5938 || tag == DW_TAG_rvalue_reference_type 5939 || tag == DW_TAG_ptr_to_member_type)) 5940 || (at->dw_attr == DW_AT_friend 5941 && tag == DW_TAG_friend)) 5942 { 5943 dw_attr_ref name_attr = get_AT (target_die, DW_AT_name); 5944 5945 if (name_attr != NULL) 5946 { 5947 dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification); 5948 5949 if (decl == NULL) 5950 decl = target_die; 5951 CHECKSUM_ULEB128 ('N'); 5952 CHECKSUM_ULEB128 (at->dw_attr); 5953 if (decl->die_parent != NULL) 5954 checksum_die_context (decl->die_parent, ctx); 5955 CHECKSUM_ULEB128 ('E'); 5956 CHECKSUM_STRING (AT_string (name_attr)); 5957 return; 5958 } 5959 } 5960 5961 /* For all other references to another DIE, we check to see if the 5962 target DIE has already been visited. If it has, we emit a 5963 backward reference; if not, we descend recursively. */ 5964 if (target_die->die_mark > 0) 5965 { 5966 CHECKSUM_ULEB128 ('R'); 5967 CHECKSUM_ULEB128 (at->dw_attr); 5968 CHECKSUM_ULEB128 (target_die->die_mark); 5969 } 5970 else 5971 { 5972 dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification); 5973 5974 if (decl == NULL) 5975 decl = target_die; 5976 target_die->die_mark = ++(*mark); 5977 CHECKSUM_ULEB128 ('T'); 5978 CHECKSUM_ULEB128 (at->dw_attr); 5979 if (decl->die_parent != NULL) 5980 checksum_die_context (decl->die_parent, ctx); 5981 die_checksum_ordered (target_die, ctx, mark); 5982 } 5983 return; 5984 } 5985 5986 CHECKSUM_ULEB128 ('A'); 5987 CHECKSUM_ULEB128 (at->dw_attr); 5988 5989 switch (AT_class (at)) 5990 { 5991 case dw_val_class_const: 5992 CHECKSUM_ULEB128 (DW_FORM_sdata); 5993 CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int); 5994 break; 5995 5996 case dw_val_class_unsigned_const: 5997 CHECKSUM_ULEB128 (DW_FORM_sdata); 5998 CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned); 5999 break; 6000 6001 case dw_val_class_const_double: 6002 CHECKSUM_ULEB128 (DW_FORM_block); 6003 CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double)); 6004 CHECKSUM (at->dw_attr_val.v.val_double); 6005 break; 6006 6007 case dw_val_class_vec: 6008 CHECKSUM_ULEB128 (DW_FORM_block); 6009 CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec)); 6010 CHECKSUM (at->dw_attr_val.v.val_vec); 6011 break; 6012 6013 case dw_val_class_flag: 6014 CHECKSUM_ULEB128 (DW_FORM_flag); 6015 CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0); 6016 break; 6017 6018 case dw_val_class_str: 6019 CHECKSUM_ULEB128 (DW_FORM_string); 6020 CHECKSUM_STRING (AT_string (at)); 6021 break; 6022 6023 case dw_val_class_addr: 6024 r = AT_addr (at); 6025 gcc_assert (GET_CODE (r) == SYMBOL_REF); 6026 CHECKSUM_ULEB128 (DW_FORM_string); 6027 CHECKSUM_STRING (XSTR (r, 0)); 6028 break; 6029 6030 case dw_val_class_offset: 6031 CHECKSUM_ULEB128 (DW_FORM_sdata); 6032 CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset); 6033 break; 6034 6035 case dw_val_class_loc: 6036 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next) 6037 loc_checksum_ordered (loc, ctx); 6038 break; 6039 6040 case dw_val_class_fde_ref: 6041 case dw_val_class_lbl_id: 6042 case dw_val_class_lineptr: 6043 case dw_val_class_macptr: 6044 break; 6045 6046 case dw_val_class_file: 6047 CHECKSUM_ULEB128 (DW_FORM_string); 6048 CHECKSUM_STRING (AT_file (at)->filename); 6049 break; 6050 6051 case dw_val_class_data8: 6052 CHECKSUM (at->dw_attr_val.v.val_data8); 6053 break; 6054 6055 default: 6056 break; 6057 } 6058 } 6059 6060 struct checksum_attributes 6061 { 6062 dw_attr_ref at_name; 6063 dw_attr_ref at_type; 6064 dw_attr_ref at_friend; 6065 dw_attr_ref at_accessibility; 6066 dw_attr_ref at_address_class; 6067 dw_attr_ref at_allocated; 6068 dw_attr_ref at_artificial; 6069 dw_attr_ref at_associated; 6070 dw_attr_ref at_binary_scale; 6071 dw_attr_ref at_bit_offset; 6072 dw_attr_ref at_bit_size; 6073 dw_attr_ref at_bit_stride; 6074 dw_attr_ref at_byte_size; 6075 dw_attr_ref at_byte_stride; 6076 dw_attr_ref at_const_value; 6077 dw_attr_ref at_containing_type; 6078 dw_attr_ref at_count; 6079 dw_attr_ref at_data_location; 6080 dw_attr_ref at_data_member_location; 6081 dw_attr_ref at_decimal_scale; 6082 dw_attr_ref at_decimal_sign; 6083 dw_attr_ref at_default_value; 6084 dw_attr_ref at_digit_count; 6085 dw_attr_ref at_discr; 6086 dw_attr_ref at_discr_list; 6087 dw_attr_ref at_discr_value; 6088 dw_attr_ref at_encoding; 6089 dw_attr_ref at_endianity; 6090 dw_attr_ref at_explicit; 6091 dw_attr_ref at_is_optional; 6092 dw_attr_ref at_location; 6093 dw_attr_ref at_lower_bound; 6094 dw_attr_ref at_mutable; 6095 dw_attr_ref at_ordering; 6096 dw_attr_ref at_picture_string; 6097 dw_attr_ref at_prototyped; 6098 dw_attr_ref at_small; 6099 dw_attr_ref at_segment; 6100 dw_attr_ref at_string_length; 6101 dw_attr_ref at_threads_scaled; 6102 dw_attr_ref at_upper_bound; 6103 dw_attr_ref at_use_location; 6104 dw_attr_ref at_use_UTF8; 6105 dw_attr_ref at_variable_parameter; 6106 dw_attr_ref at_virtuality; 6107 dw_attr_ref at_visibility; 6108 dw_attr_ref at_vtable_elem_location; 6109 }; 6110 6111 /* Collect the attributes that we will want to use for the checksum. */ 6112 6113 static void 6114 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die) 6115 { 6116 dw_attr_ref a; 6117 unsigned ix; 6118 6119 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 6120 { 6121 switch (a->dw_attr) 6122 { 6123 case DW_AT_name: 6124 attrs->at_name = a; 6125 break; 6126 case DW_AT_type: 6127 attrs->at_type = a; 6128 break; 6129 case DW_AT_friend: 6130 attrs->at_friend = a; 6131 break; 6132 case DW_AT_accessibility: 6133 attrs->at_accessibility = a; 6134 break; 6135 case DW_AT_address_class: 6136 attrs->at_address_class = a; 6137 break; 6138 case DW_AT_allocated: 6139 attrs->at_allocated = a; 6140 break; 6141 case DW_AT_artificial: 6142 attrs->at_artificial = a; 6143 break; 6144 case DW_AT_associated: 6145 attrs->at_associated = a; 6146 break; 6147 case DW_AT_binary_scale: 6148 attrs->at_binary_scale = a; 6149 break; 6150 case DW_AT_bit_offset: 6151 attrs->at_bit_offset = a; 6152 break; 6153 case DW_AT_bit_size: 6154 attrs->at_bit_size = a; 6155 break; 6156 case DW_AT_bit_stride: 6157 attrs->at_bit_stride = a; 6158 break; 6159 case DW_AT_byte_size: 6160 attrs->at_byte_size = a; 6161 break; 6162 case DW_AT_byte_stride: 6163 attrs->at_byte_stride = a; 6164 break; 6165 case DW_AT_const_value: 6166 attrs->at_const_value = a; 6167 break; 6168 case DW_AT_containing_type: 6169 attrs->at_containing_type = a; 6170 break; 6171 case DW_AT_count: 6172 attrs->at_count = a; 6173 break; 6174 case DW_AT_data_location: 6175 attrs->at_data_location = a; 6176 break; 6177 case DW_AT_data_member_location: 6178 attrs->at_data_member_location = a; 6179 break; 6180 case DW_AT_decimal_scale: 6181 attrs->at_decimal_scale = a; 6182 break; 6183 case DW_AT_decimal_sign: 6184 attrs->at_decimal_sign = a; 6185 break; 6186 case DW_AT_default_value: 6187 attrs->at_default_value = a; 6188 break; 6189 case DW_AT_digit_count: 6190 attrs->at_digit_count = a; 6191 break; 6192 case DW_AT_discr: 6193 attrs->at_discr = a; 6194 break; 6195 case DW_AT_discr_list: 6196 attrs->at_discr_list = a; 6197 break; 6198 case DW_AT_discr_value: 6199 attrs->at_discr_value = a; 6200 break; 6201 case DW_AT_encoding: 6202 attrs->at_encoding = a; 6203 break; 6204 case DW_AT_endianity: 6205 attrs->at_endianity = a; 6206 break; 6207 case DW_AT_explicit: 6208 attrs->at_explicit = a; 6209 break; 6210 case DW_AT_is_optional: 6211 attrs->at_is_optional = a; 6212 break; 6213 case DW_AT_location: 6214 attrs->at_location = a; 6215 break; 6216 case DW_AT_lower_bound: 6217 attrs->at_lower_bound = a; 6218 break; 6219 case DW_AT_mutable: 6220 attrs->at_mutable = a; 6221 break; 6222 case DW_AT_ordering: 6223 attrs->at_ordering = a; 6224 break; 6225 case DW_AT_picture_string: 6226 attrs->at_picture_string = a; 6227 break; 6228 case DW_AT_prototyped: 6229 attrs->at_prototyped = a; 6230 break; 6231 case DW_AT_small: 6232 attrs->at_small = a; 6233 break; 6234 case DW_AT_segment: 6235 attrs->at_segment = a; 6236 break; 6237 case DW_AT_string_length: 6238 attrs->at_string_length = a; 6239 break; 6240 case DW_AT_threads_scaled: 6241 attrs->at_threads_scaled = a; 6242 break; 6243 case DW_AT_upper_bound: 6244 attrs->at_upper_bound = a; 6245 break; 6246 case DW_AT_use_location: 6247 attrs->at_use_location = a; 6248 break; 6249 case DW_AT_use_UTF8: 6250 attrs->at_use_UTF8 = a; 6251 break; 6252 case DW_AT_variable_parameter: 6253 attrs->at_variable_parameter = a; 6254 break; 6255 case DW_AT_virtuality: 6256 attrs->at_virtuality = a; 6257 break; 6258 case DW_AT_visibility: 6259 attrs->at_visibility = a; 6260 break; 6261 case DW_AT_vtable_elem_location: 6262 attrs->at_vtable_elem_location = a; 6263 break; 6264 default: 6265 break; 6266 } 6267 } 6268 } 6269 6270 /* Calculate the checksum of a DIE, using an ordered subset of attributes. */ 6271 6272 static void 6273 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark) 6274 { 6275 dw_die_ref c; 6276 dw_die_ref decl; 6277 struct checksum_attributes attrs; 6278 6279 CHECKSUM_ULEB128 ('D'); 6280 CHECKSUM_ULEB128 (die->die_tag); 6281 6282 memset (&attrs, 0, sizeof (attrs)); 6283 6284 decl = get_AT_ref (die, DW_AT_specification); 6285 if (decl != NULL) 6286 collect_checksum_attributes (&attrs, decl); 6287 collect_checksum_attributes (&attrs, die); 6288 6289 CHECKSUM_ATTR (attrs.at_name); 6290 CHECKSUM_ATTR (attrs.at_accessibility); 6291 CHECKSUM_ATTR (attrs.at_address_class); 6292 CHECKSUM_ATTR (attrs.at_allocated); 6293 CHECKSUM_ATTR (attrs.at_artificial); 6294 CHECKSUM_ATTR (attrs.at_associated); 6295 CHECKSUM_ATTR (attrs.at_binary_scale); 6296 CHECKSUM_ATTR (attrs.at_bit_offset); 6297 CHECKSUM_ATTR (attrs.at_bit_size); 6298 CHECKSUM_ATTR (attrs.at_bit_stride); 6299 CHECKSUM_ATTR (attrs.at_byte_size); 6300 CHECKSUM_ATTR (attrs.at_byte_stride); 6301 CHECKSUM_ATTR (attrs.at_const_value); 6302 CHECKSUM_ATTR (attrs.at_containing_type); 6303 CHECKSUM_ATTR (attrs.at_count); 6304 CHECKSUM_ATTR (attrs.at_data_location); 6305 CHECKSUM_ATTR (attrs.at_data_member_location); 6306 CHECKSUM_ATTR (attrs.at_decimal_scale); 6307 CHECKSUM_ATTR (attrs.at_decimal_sign); 6308 CHECKSUM_ATTR (attrs.at_default_value); 6309 CHECKSUM_ATTR (attrs.at_digit_count); 6310 CHECKSUM_ATTR (attrs.at_discr); 6311 CHECKSUM_ATTR (attrs.at_discr_list); 6312 CHECKSUM_ATTR (attrs.at_discr_value); 6313 CHECKSUM_ATTR (attrs.at_encoding); 6314 CHECKSUM_ATTR (attrs.at_endianity); 6315 CHECKSUM_ATTR (attrs.at_explicit); 6316 CHECKSUM_ATTR (attrs.at_is_optional); 6317 CHECKSUM_ATTR (attrs.at_location); 6318 CHECKSUM_ATTR (attrs.at_lower_bound); 6319 CHECKSUM_ATTR (attrs.at_mutable); 6320 CHECKSUM_ATTR (attrs.at_ordering); 6321 CHECKSUM_ATTR (attrs.at_picture_string); 6322 CHECKSUM_ATTR (attrs.at_prototyped); 6323 CHECKSUM_ATTR (attrs.at_small); 6324 CHECKSUM_ATTR (attrs.at_segment); 6325 CHECKSUM_ATTR (attrs.at_string_length); 6326 CHECKSUM_ATTR (attrs.at_threads_scaled); 6327 CHECKSUM_ATTR (attrs.at_upper_bound); 6328 CHECKSUM_ATTR (attrs.at_use_location); 6329 CHECKSUM_ATTR (attrs.at_use_UTF8); 6330 CHECKSUM_ATTR (attrs.at_variable_parameter); 6331 CHECKSUM_ATTR (attrs.at_virtuality); 6332 CHECKSUM_ATTR (attrs.at_visibility); 6333 CHECKSUM_ATTR (attrs.at_vtable_elem_location); 6334 CHECKSUM_ATTR (attrs.at_type); 6335 CHECKSUM_ATTR (attrs.at_friend); 6336 6337 /* Checksum the child DIEs, except for nested types and member functions. */ 6338 c = die->die_child; 6339 if (c) do { 6340 dw_attr_ref name_attr; 6341 6342 c = c->die_sib; 6343 name_attr = get_AT (c, DW_AT_name); 6344 if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram) 6345 && name_attr != NULL) 6346 { 6347 CHECKSUM_ULEB128 ('S'); 6348 CHECKSUM_ULEB128 (c->die_tag); 6349 CHECKSUM_STRING (AT_string (name_attr)); 6350 } 6351 else 6352 { 6353 /* Mark this DIE so it gets processed when unmarking. */ 6354 if (c->die_mark == 0) 6355 c->die_mark = -1; 6356 die_checksum_ordered (c, ctx, mark); 6357 } 6358 } while (c != die->die_child); 6359 6360 CHECKSUM_ULEB128 (0); 6361 } 6362 6363 #undef CHECKSUM 6364 #undef CHECKSUM_STRING 6365 #undef CHECKSUM_ATTR 6366 #undef CHECKSUM_LEB128 6367 #undef CHECKSUM_ULEB128 6368 6369 /* Generate the type signature for DIE. This is computed by generating an 6370 MD5 checksum over the DIE's tag, its relevant attributes, and its 6371 children. Attributes that are references to other DIEs are processed 6372 by recursion, using the MARK field to prevent infinite recursion. 6373 If the DIE is nested inside a namespace or another type, we also 6374 need to include that context in the signature. The lower 64 bits 6375 of the resulting MD5 checksum comprise the signature. */ 6376 6377 static void 6378 generate_type_signature (dw_die_ref die, comdat_type_node *type_node) 6379 { 6380 int mark; 6381 const char *name; 6382 unsigned char checksum[16]; 6383 struct md5_ctx ctx; 6384 dw_die_ref decl; 6385 6386 name = get_AT_string (die, DW_AT_name); 6387 decl = get_AT_ref (die, DW_AT_specification); 6388 6389 /* First, compute a signature for just the type name (and its surrounding 6390 context, if any. This is stored in the type unit DIE for link-time 6391 ODR (one-definition rule) checking. */ 6392 6393 if (is_cxx() && name != NULL) 6394 { 6395 md5_init_ctx (&ctx); 6396 6397 /* Checksum the names of surrounding namespaces and structures. */ 6398 if (decl != NULL && decl->die_parent != NULL) 6399 checksum_die_context (decl->die_parent, &ctx); 6400 6401 md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx); 6402 md5_process_bytes (name, strlen (name) + 1, &ctx); 6403 md5_finish_ctx (&ctx, checksum); 6404 6405 add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]); 6406 } 6407 6408 /* Next, compute the complete type signature. */ 6409 6410 md5_init_ctx (&ctx); 6411 mark = 1; 6412 die->die_mark = mark; 6413 6414 /* Checksum the names of surrounding namespaces and structures. */ 6415 if (decl != NULL && decl->die_parent != NULL) 6416 checksum_die_context (decl->die_parent, &ctx); 6417 6418 /* Checksum the DIE and its children. */ 6419 die_checksum_ordered (die, &ctx, &mark); 6420 unmark_all_dies (die); 6421 md5_finish_ctx (&ctx, checksum); 6422 6423 /* Store the signature in the type node and link the type DIE and the 6424 type node together. */ 6425 memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE], 6426 DWARF_TYPE_SIGNATURE_SIZE); 6427 die->die_id.die_type_node = type_node; 6428 type_node->type_die = die; 6429 6430 /* If the DIE is a specification, link its declaration to the type node 6431 as well. */ 6432 if (decl != NULL) 6433 decl->die_id.die_type_node = type_node; 6434 } 6435 6436 /* Do the location expressions look same? */ 6437 static inline int 6438 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark) 6439 { 6440 return loc1->dw_loc_opc == loc2->dw_loc_opc 6441 && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark) 6442 && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark); 6443 } 6444 6445 /* Do the values look the same? */ 6446 static int 6447 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark) 6448 { 6449 dw_loc_descr_ref loc1, loc2; 6450 rtx r1, r2; 6451 6452 if (v1->val_class != v2->val_class) 6453 return 0; 6454 6455 switch (v1->val_class) 6456 { 6457 case dw_val_class_const: 6458 return v1->v.val_int == v2->v.val_int; 6459 case dw_val_class_unsigned_const: 6460 return v1->v.val_unsigned == v2->v.val_unsigned; 6461 case dw_val_class_const_double: 6462 return v1->v.val_double.high == v2->v.val_double.high 6463 && v1->v.val_double.low == v2->v.val_double.low; 6464 case dw_val_class_vec: 6465 if (v1->v.val_vec.length != v2->v.val_vec.length 6466 || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size) 6467 return 0; 6468 if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array, 6469 v1->v.val_vec.length * v1->v.val_vec.elt_size)) 6470 return 0; 6471 return 1; 6472 case dw_val_class_flag: 6473 return v1->v.val_flag == v2->v.val_flag; 6474 case dw_val_class_str: 6475 return !strcmp(v1->v.val_str->str, v2->v.val_str->str); 6476 6477 case dw_val_class_addr: 6478 r1 = v1->v.val_addr; 6479 r2 = v2->v.val_addr; 6480 if (GET_CODE (r1) != GET_CODE (r2)) 6481 return 0; 6482 return !rtx_equal_p (r1, r2); 6483 6484 case dw_val_class_offset: 6485 return v1->v.val_offset == v2->v.val_offset; 6486 6487 case dw_val_class_loc: 6488 for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc; 6489 loc1 && loc2; 6490 loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next) 6491 if (!same_loc_p (loc1, loc2, mark)) 6492 return 0; 6493 return !loc1 && !loc2; 6494 6495 case dw_val_class_die_ref: 6496 return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark); 6497 6498 case dw_val_class_fde_ref: 6499 case dw_val_class_vms_delta: 6500 case dw_val_class_lbl_id: 6501 case dw_val_class_lineptr: 6502 case dw_val_class_macptr: 6503 return 1; 6504 6505 case dw_val_class_file: 6506 return v1->v.val_file == v2->v.val_file; 6507 6508 case dw_val_class_data8: 6509 return !memcmp (v1->v.val_data8, v2->v.val_data8, 8); 6510 6511 default: 6512 return 1; 6513 } 6514 } 6515 6516 /* Do the attributes look the same? */ 6517 6518 static int 6519 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark) 6520 { 6521 if (at1->dw_attr != at2->dw_attr) 6522 return 0; 6523 6524 /* We don't care that this was compiled with a different compiler 6525 snapshot; if the output is the same, that's what matters. */ 6526 if (at1->dw_attr == DW_AT_producer) 6527 return 1; 6528 6529 return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark); 6530 } 6531 6532 /* Do the dies look the same? */ 6533 6534 static int 6535 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark) 6536 { 6537 dw_die_ref c1, c2; 6538 dw_attr_ref a1; 6539 unsigned ix; 6540 6541 /* To avoid infinite recursion. */ 6542 if (die1->die_mark) 6543 return die1->die_mark == die2->die_mark; 6544 die1->die_mark = die2->die_mark = ++(*mark); 6545 6546 if (die1->die_tag != die2->die_tag) 6547 return 0; 6548 6549 if (VEC_length (dw_attr_node, die1->die_attr) 6550 != VEC_length (dw_attr_node, die2->die_attr)) 6551 return 0; 6552 6553 FOR_EACH_VEC_ELT (dw_attr_node, die1->die_attr, ix, a1) 6554 if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark)) 6555 return 0; 6556 6557 c1 = die1->die_child; 6558 c2 = die2->die_child; 6559 if (! c1) 6560 { 6561 if (c2) 6562 return 0; 6563 } 6564 else 6565 for (;;) 6566 { 6567 if (!same_die_p (c1, c2, mark)) 6568 return 0; 6569 c1 = c1->die_sib; 6570 c2 = c2->die_sib; 6571 if (c1 == die1->die_child) 6572 { 6573 if (c2 == die2->die_child) 6574 break; 6575 else 6576 return 0; 6577 } 6578 } 6579 6580 return 1; 6581 } 6582 6583 /* Do the dies look the same? Wrapper around same_die_p. */ 6584 6585 static int 6586 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2) 6587 { 6588 int mark = 0; 6589 int ret = same_die_p (die1, die2, &mark); 6590 6591 unmark_all_dies (die1); 6592 unmark_all_dies (die2); 6593 6594 return ret; 6595 } 6596 6597 /* The prefix to attach to symbols on DIEs in the current comdat debug 6598 info section. */ 6599 static char *comdat_symbol_id; 6600 6601 /* The index of the current symbol within the current comdat CU. */ 6602 static unsigned int comdat_symbol_number; 6603 6604 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its 6605 children, and set comdat_symbol_id accordingly. */ 6606 6607 static void 6608 compute_section_prefix (dw_die_ref unit_die) 6609 { 6610 const char *die_name = get_AT_string (unit_die, DW_AT_name); 6611 const char *base = die_name ? lbasename (die_name) : "anonymous"; 6612 char *name = XALLOCAVEC (char, strlen (base) + 64); 6613 char *p; 6614 int i, mark; 6615 unsigned char checksum[16]; 6616 struct md5_ctx ctx; 6617 6618 /* Compute the checksum of the DIE, then append part of it as hex digits to 6619 the name filename of the unit. */ 6620 6621 md5_init_ctx (&ctx); 6622 mark = 0; 6623 die_checksum (unit_die, &ctx, &mark); 6624 unmark_all_dies (unit_die); 6625 md5_finish_ctx (&ctx, checksum); 6626 6627 sprintf (name, "%s.", base); 6628 clean_symbol_name (name); 6629 6630 p = name + strlen (name); 6631 for (i = 0; i < 4; i++) 6632 { 6633 sprintf (p, "%.2x", checksum[i]); 6634 p += 2; 6635 } 6636 6637 comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name); 6638 comdat_symbol_number = 0; 6639 } 6640 6641 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */ 6642 6643 static int 6644 is_type_die (dw_die_ref die) 6645 { 6646 switch (die->die_tag) 6647 { 6648 case DW_TAG_array_type: 6649 case DW_TAG_class_type: 6650 case DW_TAG_interface_type: 6651 case DW_TAG_enumeration_type: 6652 case DW_TAG_pointer_type: 6653 case DW_TAG_reference_type: 6654 case DW_TAG_rvalue_reference_type: 6655 case DW_TAG_string_type: 6656 case DW_TAG_structure_type: 6657 case DW_TAG_subroutine_type: 6658 case DW_TAG_union_type: 6659 case DW_TAG_ptr_to_member_type: 6660 case DW_TAG_set_type: 6661 case DW_TAG_subrange_type: 6662 case DW_TAG_base_type: 6663 case DW_TAG_const_type: 6664 case DW_TAG_file_type: 6665 case DW_TAG_packed_type: 6666 case DW_TAG_volatile_type: 6667 case DW_TAG_typedef: 6668 return 1; 6669 default: 6670 return 0; 6671 } 6672 } 6673 6674 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU. 6675 Basically, we want to choose the bits that are likely to be shared between 6676 compilations (types) and leave out the bits that are specific to individual 6677 compilations (functions). */ 6678 6679 static int 6680 is_comdat_die (dw_die_ref c) 6681 { 6682 /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as 6683 we do for stabs. The advantage is a greater likelihood of sharing between 6684 objects that don't include headers in the same order (and therefore would 6685 put the base types in a different comdat). jason 8/28/00 */ 6686 6687 if (c->die_tag == DW_TAG_base_type) 6688 return 0; 6689 6690 if (c->die_tag == DW_TAG_pointer_type 6691 || c->die_tag == DW_TAG_reference_type 6692 || c->die_tag == DW_TAG_rvalue_reference_type 6693 || c->die_tag == DW_TAG_const_type 6694 || c->die_tag == DW_TAG_volatile_type) 6695 { 6696 dw_die_ref t = get_AT_ref (c, DW_AT_type); 6697 6698 return t ? is_comdat_die (t) : 0; 6699 } 6700 6701 return is_type_die (c); 6702 } 6703 6704 /* Returns 1 iff C is the sort of DIE that might be referred to from another 6705 compilation unit. */ 6706 6707 static int 6708 is_symbol_die (dw_die_ref c) 6709 { 6710 return (is_type_die (c) 6711 || is_declaration_die (c) 6712 || c->die_tag == DW_TAG_namespace 6713 || c->die_tag == DW_TAG_module); 6714 } 6715 6716 /* Returns true iff C is a compile-unit DIE. */ 6717 6718 static inline bool 6719 is_cu_die (dw_die_ref c) 6720 { 6721 return c && c->die_tag == DW_TAG_compile_unit; 6722 } 6723 6724 static char * 6725 gen_internal_sym (const char *prefix) 6726 { 6727 char buf[256]; 6728 6729 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++); 6730 return xstrdup (buf); 6731 } 6732 6733 /* Assign symbols to all worthy DIEs under DIE. */ 6734 6735 static void 6736 assign_symbol_names (dw_die_ref die) 6737 { 6738 dw_die_ref c; 6739 6740 if (is_symbol_die (die)) 6741 { 6742 if (comdat_symbol_id) 6743 { 6744 char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64); 6745 6746 sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX, 6747 comdat_symbol_id, comdat_symbol_number++); 6748 die->die_id.die_symbol = xstrdup (p); 6749 } 6750 else 6751 die->die_id.die_symbol = gen_internal_sym ("LDIE"); 6752 } 6753 6754 FOR_EACH_CHILD (die, c, assign_symbol_names (c)); 6755 } 6756 6757 struct cu_hash_table_entry 6758 { 6759 dw_die_ref cu; 6760 unsigned min_comdat_num, max_comdat_num; 6761 struct cu_hash_table_entry *next; 6762 }; 6763 6764 /* Routines to manipulate hash table of CUs. */ 6765 static hashval_t 6766 htab_cu_hash (const void *of) 6767 { 6768 const struct cu_hash_table_entry *const entry = 6769 (const struct cu_hash_table_entry *) of; 6770 6771 return htab_hash_string (entry->cu->die_id.die_symbol); 6772 } 6773 6774 static int 6775 htab_cu_eq (const void *of1, const void *of2) 6776 { 6777 const struct cu_hash_table_entry *const entry1 = 6778 (const struct cu_hash_table_entry *) of1; 6779 const struct die_struct *const entry2 = (const struct die_struct *) of2; 6780 6781 return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol); 6782 } 6783 6784 static void 6785 htab_cu_del (void *what) 6786 { 6787 struct cu_hash_table_entry *next, 6788 *entry = (struct cu_hash_table_entry *) what; 6789 6790 while (entry) 6791 { 6792 next = entry->next; 6793 free (entry); 6794 entry = next; 6795 } 6796 } 6797 6798 /* Check whether we have already seen this CU and set up SYM_NUM 6799 accordingly. */ 6800 static int 6801 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num) 6802 { 6803 struct cu_hash_table_entry dummy; 6804 struct cu_hash_table_entry **slot, *entry, *last = &dummy; 6805 6806 dummy.max_comdat_num = 0; 6807 6808 slot = (struct cu_hash_table_entry **) 6809 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol), 6810 INSERT); 6811 entry = *slot; 6812 6813 for (; entry; last = entry, entry = entry->next) 6814 { 6815 if (same_die_p_wrap (cu, entry->cu)) 6816 break; 6817 } 6818 6819 if (entry) 6820 { 6821 *sym_num = entry->min_comdat_num; 6822 return 1; 6823 } 6824 6825 entry = XCNEW (struct cu_hash_table_entry); 6826 entry->cu = cu; 6827 entry->min_comdat_num = *sym_num = last->max_comdat_num; 6828 entry->next = *slot; 6829 *slot = entry; 6830 6831 return 0; 6832 } 6833 6834 /* Record SYM_NUM to record of CU in HTABLE. */ 6835 static void 6836 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num) 6837 { 6838 struct cu_hash_table_entry **slot, *entry; 6839 6840 slot = (struct cu_hash_table_entry **) 6841 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol), 6842 NO_INSERT); 6843 entry = *slot; 6844 6845 entry->max_comdat_num = sym_num; 6846 } 6847 6848 /* Traverse the DIE (which is always comp_unit_die), and set up 6849 additional compilation units for each of the include files we see 6850 bracketed by BINCL/EINCL. */ 6851 6852 static void 6853 break_out_includes (dw_die_ref die) 6854 { 6855 dw_die_ref c; 6856 dw_die_ref unit = NULL; 6857 limbo_die_node *node, **pnode; 6858 htab_t cu_hash_table; 6859 6860 c = die->die_child; 6861 if (c) do { 6862 dw_die_ref prev = c; 6863 c = c->die_sib; 6864 while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL 6865 || (unit && is_comdat_die (c))) 6866 { 6867 dw_die_ref next = c->die_sib; 6868 6869 /* This DIE is for a secondary CU; remove it from the main one. */ 6870 remove_child_with_prev (c, prev); 6871 6872 if (c->die_tag == DW_TAG_GNU_BINCL) 6873 unit = push_new_compile_unit (unit, c); 6874 else if (c->die_tag == DW_TAG_GNU_EINCL) 6875 unit = pop_compile_unit (unit); 6876 else 6877 add_child_die (unit, c); 6878 c = next; 6879 if (c == die->die_child) 6880 break; 6881 } 6882 } while (c != die->die_child); 6883 6884 #if 0 6885 /* We can only use this in debugging, since the frontend doesn't check 6886 to make sure that we leave every include file we enter. */ 6887 gcc_assert (!unit); 6888 #endif 6889 6890 assign_symbol_names (die); 6891 cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del); 6892 for (node = limbo_die_list, pnode = &limbo_die_list; 6893 node; 6894 node = node->next) 6895 { 6896 int is_dupl; 6897 6898 compute_section_prefix (node->die); 6899 is_dupl = check_duplicate_cu (node->die, cu_hash_table, 6900 &comdat_symbol_number); 6901 assign_symbol_names (node->die); 6902 if (is_dupl) 6903 *pnode = node->next; 6904 else 6905 { 6906 pnode = &node->next; 6907 record_comdat_symbol_number (node->die, cu_hash_table, 6908 comdat_symbol_number); 6909 } 6910 } 6911 htab_delete (cu_hash_table); 6912 } 6913 6914 /* Return non-zero if this DIE is a declaration. */ 6915 6916 static int 6917 is_declaration_die (dw_die_ref die) 6918 { 6919 dw_attr_ref a; 6920 unsigned ix; 6921 6922 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 6923 if (a->dw_attr == DW_AT_declaration) 6924 return 1; 6925 6926 return 0; 6927 } 6928 6929 /* Return non-zero if this DIE is nested inside a subprogram. */ 6930 6931 static int 6932 is_nested_in_subprogram (dw_die_ref die) 6933 { 6934 dw_die_ref decl = get_AT_ref (die, DW_AT_specification); 6935 6936 if (decl == NULL) 6937 decl = die; 6938 return local_scope_p (decl); 6939 } 6940 6941 /* Return non-zero if this DIE contains a defining declaration of a 6942 subprogram. */ 6943 6944 static int 6945 contains_subprogram_definition (dw_die_ref die) 6946 { 6947 dw_die_ref c; 6948 6949 if (die->die_tag == DW_TAG_subprogram && ! is_declaration_die (die)) 6950 return 1; 6951 FOR_EACH_CHILD (die, c, if (contains_subprogram_definition(c)) return 1); 6952 return 0; 6953 } 6954 6955 /* Return non-zero if this is a type DIE that should be moved to a 6956 COMDAT .debug_types section. */ 6957 6958 static int 6959 should_move_die_to_comdat (dw_die_ref die) 6960 { 6961 switch (die->die_tag) 6962 { 6963 case DW_TAG_class_type: 6964 case DW_TAG_structure_type: 6965 case DW_TAG_enumeration_type: 6966 case DW_TAG_union_type: 6967 /* Don't move declarations, inlined instances, or types nested in a 6968 subprogram. */ 6969 if (is_declaration_die (die) 6970 || get_AT (die, DW_AT_abstract_origin) 6971 || is_nested_in_subprogram (die)) 6972 return 0; 6973 /* A type definition should never contain a subprogram definition. */ 6974 gcc_assert (!contains_subprogram_definition (die)); 6975 return 1; 6976 case DW_TAG_array_type: 6977 case DW_TAG_interface_type: 6978 case DW_TAG_pointer_type: 6979 case DW_TAG_reference_type: 6980 case DW_TAG_rvalue_reference_type: 6981 case DW_TAG_string_type: 6982 case DW_TAG_subroutine_type: 6983 case DW_TAG_ptr_to_member_type: 6984 case DW_TAG_set_type: 6985 case DW_TAG_subrange_type: 6986 case DW_TAG_base_type: 6987 case DW_TAG_const_type: 6988 case DW_TAG_file_type: 6989 case DW_TAG_packed_type: 6990 case DW_TAG_volatile_type: 6991 case DW_TAG_typedef: 6992 default: 6993 return 0; 6994 } 6995 } 6996 6997 /* Make a clone of DIE. */ 6998 6999 static dw_die_ref 7000 clone_die (dw_die_ref die) 7001 { 7002 dw_die_ref clone; 7003 dw_attr_ref a; 7004 unsigned ix; 7005 7006 clone = ggc_alloc_cleared_die_node (); 7007 clone->die_tag = die->die_tag; 7008 7009 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 7010 add_dwarf_attr (clone, a); 7011 7012 return clone; 7013 } 7014 7015 /* Make a clone of the tree rooted at DIE. */ 7016 7017 static dw_die_ref 7018 clone_tree (dw_die_ref die) 7019 { 7020 dw_die_ref c; 7021 dw_die_ref clone = clone_die (die); 7022 7023 FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c))); 7024 7025 return clone; 7026 } 7027 7028 /* Make a clone of DIE as a declaration. */ 7029 7030 static dw_die_ref 7031 clone_as_declaration (dw_die_ref die) 7032 { 7033 dw_die_ref clone; 7034 dw_die_ref decl; 7035 dw_attr_ref a; 7036 unsigned ix; 7037 7038 /* If the DIE is already a declaration, just clone it. */ 7039 if (is_declaration_die (die)) 7040 return clone_die (die); 7041 7042 /* If the DIE is a specification, just clone its declaration DIE. */ 7043 decl = get_AT_ref (die, DW_AT_specification); 7044 if (decl != NULL) 7045 return clone_die (decl); 7046 7047 clone = ggc_alloc_cleared_die_node (); 7048 clone->die_tag = die->die_tag; 7049 7050 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 7051 { 7052 /* We don't want to copy over all attributes. 7053 For example we don't want DW_AT_byte_size because otherwise we will no 7054 longer have a declaration and GDB will treat it as a definition. */ 7055 7056 switch (a->dw_attr) 7057 { 7058 case DW_AT_artificial: 7059 case DW_AT_containing_type: 7060 case DW_AT_external: 7061 case DW_AT_name: 7062 case DW_AT_type: 7063 case DW_AT_virtuality: 7064 case DW_AT_linkage_name: 7065 case DW_AT_MIPS_linkage_name: 7066 add_dwarf_attr (clone, a); 7067 break; 7068 case DW_AT_byte_size: 7069 default: 7070 break; 7071 } 7072 } 7073 7074 if (die->die_id.die_type_node) 7075 add_AT_die_ref (clone, DW_AT_signature, die); 7076 7077 add_AT_flag (clone, DW_AT_declaration, 1); 7078 return clone; 7079 } 7080 7081 /* Copy the declaration context to the new type unit DIE. This includes 7082 any surrounding namespace or type declarations. If the DIE has an 7083 AT_specification attribute, it also includes attributes and children 7084 attached to the specification, and returns a pointer to the original 7085 parent of the declaration DIE. Returns NULL otherwise. */ 7086 7087 static dw_die_ref 7088 copy_declaration_context (dw_die_ref unit, dw_die_ref die) 7089 { 7090 dw_die_ref decl; 7091 dw_die_ref new_decl; 7092 dw_die_ref orig_parent = NULL; 7093 7094 decl = get_AT_ref (die, DW_AT_specification); 7095 if (decl == NULL) 7096 decl = die; 7097 else 7098 { 7099 unsigned ix; 7100 dw_die_ref c; 7101 dw_attr_ref a; 7102 7103 /* The original DIE will be changed to a declaration, and must 7104 be moved to be a child of the original declaration DIE. */ 7105 orig_parent = decl->die_parent; 7106 7107 /* Copy the type node pointer from the new DIE to the original 7108 declaration DIE so we can forward references later. */ 7109 decl->die_id.die_type_node = die->die_id.die_type_node; 7110 7111 remove_AT (die, DW_AT_specification); 7112 7113 FOR_EACH_VEC_ELT (dw_attr_node, decl->die_attr, ix, a) 7114 { 7115 if (a->dw_attr != DW_AT_name 7116 && a->dw_attr != DW_AT_declaration 7117 && a->dw_attr != DW_AT_external) 7118 add_dwarf_attr (die, a); 7119 } 7120 7121 FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c))); 7122 } 7123 7124 if (decl->die_parent != NULL 7125 && decl->die_parent->die_tag != DW_TAG_compile_unit 7126 && decl->die_parent->die_tag != DW_TAG_type_unit) 7127 { 7128 new_decl = copy_ancestor_tree (unit, decl, NULL); 7129 if (new_decl != NULL) 7130 { 7131 remove_AT (new_decl, DW_AT_signature); 7132 add_AT_specification (die, new_decl); 7133 } 7134 } 7135 7136 return orig_parent; 7137 } 7138 7139 /* Generate the skeleton ancestor tree for the given NODE, then clone 7140 the DIE and add the clone into the tree. */ 7141 7142 static void 7143 generate_skeleton_ancestor_tree (skeleton_chain_node *node) 7144 { 7145 if (node->new_die != NULL) 7146 return; 7147 7148 node->new_die = clone_as_declaration (node->old_die); 7149 7150 if (node->parent != NULL) 7151 { 7152 generate_skeleton_ancestor_tree (node->parent); 7153 add_child_die (node->parent->new_die, node->new_die); 7154 } 7155 } 7156 7157 /* Generate a skeleton tree of DIEs containing any declarations that are 7158 found in the original tree. We traverse the tree looking for declaration 7159 DIEs, and construct the skeleton from the bottom up whenever we find one. */ 7160 7161 static void 7162 generate_skeleton_bottom_up (skeleton_chain_node *parent) 7163 { 7164 skeleton_chain_node node; 7165 dw_die_ref c; 7166 dw_die_ref first; 7167 dw_die_ref prev = NULL; 7168 dw_die_ref next = NULL; 7169 7170 node.parent = parent; 7171 7172 first = c = parent->old_die->die_child; 7173 if (c) 7174 next = c->die_sib; 7175 if (c) do { 7176 if (prev == NULL || prev->die_sib == c) 7177 prev = c; 7178 c = next; 7179 next = (c == first ? NULL : c->die_sib); 7180 node.old_die = c; 7181 node.new_die = NULL; 7182 if (is_declaration_die (c)) 7183 { 7184 /* Clone the existing DIE, move the original to the skeleton 7185 tree (which is in the main CU), and put the clone, with 7186 all the original's children, where the original came from. */ 7187 dw_die_ref clone = clone_die (c); 7188 move_all_children (c, clone); 7189 7190 replace_child (c, clone, prev); 7191 generate_skeleton_ancestor_tree (parent); 7192 add_child_die (parent->new_die, c); 7193 node.new_die = c; 7194 c = clone; 7195 } 7196 generate_skeleton_bottom_up (&node); 7197 } while (next != NULL); 7198 } 7199 7200 /* Wrapper function for generate_skeleton_bottom_up. */ 7201 7202 static dw_die_ref 7203 generate_skeleton (dw_die_ref die) 7204 { 7205 skeleton_chain_node node; 7206 7207 node.old_die = die; 7208 node.new_die = NULL; 7209 node.parent = NULL; 7210 7211 /* If this type definition is nested inside another type, 7212 always leave at least a declaration in its place. */ 7213 if (die->die_parent != NULL && is_type_die (die->die_parent)) 7214 node.new_die = clone_as_declaration (die); 7215 7216 generate_skeleton_bottom_up (&node); 7217 return node.new_die; 7218 } 7219 7220 /* Remove the CHILD DIE from its parent, possibly replacing it with a cloned 7221 declaration. The original DIE is moved to a new compile unit so that 7222 existing references to it follow it to the new location. If any of the 7223 original DIE's descendants is a declaration, we need to replace the 7224 original DIE with a skeleton tree and move the declarations back into the 7225 skeleton tree. */ 7226 7227 static dw_die_ref 7228 remove_child_or_replace_with_skeleton (dw_die_ref unit, dw_die_ref child, 7229 dw_die_ref prev) 7230 { 7231 dw_die_ref skeleton, orig_parent; 7232 7233 /* Copy the declaration context to the type unit DIE. If the returned 7234 ORIG_PARENT is not NULL, the skeleton needs to be added as a child of 7235 that DIE. */ 7236 orig_parent = copy_declaration_context (unit, child); 7237 7238 skeleton = generate_skeleton (child); 7239 if (skeleton == NULL) 7240 remove_child_with_prev (child, prev); 7241 else 7242 { 7243 skeleton->die_id.die_type_node = child->die_id.die_type_node; 7244 7245 /* If the original DIE was a specification, we need to put 7246 the skeleton under the parent DIE of the declaration. 7247 This leaves the original declaration in the tree, but 7248 it will be pruned later since there are no longer any 7249 references to it. */ 7250 if (orig_parent != NULL) 7251 { 7252 remove_child_with_prev (child, prev); 7253 add_child_die (orig_parent, skeleton); 7254 } 7255 else 7256 replace_child (child, skeleton, prev); 7257 } 7258 7259 return skeleton; 7260 } 7261 7262 /* Traverse the DIE and set up additional .debug_types sections for each 7263 type worthy of being placed in a COMDAT section. */ 7264 7265 static void 7266 break_out_comdat_types (dw_die_ref die) 7267 { 7268 dw_die_ref c; 7269 dw_die_ref first; 7270 dw_die_ref prev = NULL; 7271 dw_die_ref next = NULL; 7272 dw_die_ref unit = NULL; 7273 7274 first = c = die->die_child; 7275 if (c) 7276 next = c->die_sib; 7277 if (c) do { 7278 if (prev == NULL || prev->die_sib == c) 7279 prev = c; 7280 c = next; 7281 next = (c == first ? NULL : c->die_sib); 7282 if (should_move_die_to_comdat (c)) 7283 { 7284 dw_die_ref replacement; 7285 comdat_type_node_ref type_node; 7286 7287 /* Create a new type unit DIE as the root for the new tree, and 7288 add it to the list of comdat types. */ 7289 unit = new_die (DW_TAG_type_unit, NULL, NULL); 7290 add_AT_unsigned (unit, DW_AT_language, 7291 get_AT_unsigned (comp_unit_die (), DW_AT_language)); 7292 type_node = ggc_alloc_cleared_comdat_type_node (); 7293 type_node->root_die = unit; 7294 type_node->next = comdat_type_list; 7295 comdat_type_list = type_node; 7296 7297 /* Generate the type signature. */ 7298 generate_type_signature (c, type_node); 7299 7300 /* Copy the declaration context, attributes, and children of the 7301 declaration into the new type unit DIE, then remove this DIE 7302 from the main CU (or replace it with a skeleton if necessary). */ 7303 replacement = remove_child_or_replace_with_skeleton (unit, c, prev); 7304 7305 /* Break out nested types into their own type units. */ 7306 break_out_comdat_types (c); 7307 7308 /* Add the DIE to the new compunit. */ 7309 add_child_die (unit, c); 7310 7311 if (replacement != NULL) 7312 c = replacement; 7313 } 7314 else if (c->die_tag == DW_TAG_namespace 7315 || c->die_tag == DW_TAG_class_type 7316 || c->die_tag == DW_TAG_structure_type 7317 || c->die_tag == DW_TAG_union_type) 7318 { 7319 /* Look for nested types that can be broken out. */ 7320 break_out_comdat_types (c); 7321 } 7322 } while (next != NULL); 7323 } 7324 7325 /* Structure to map a DIE in one CU to its copy in a comdat type unit. */ 7326 7327 struct decl_table_entry 7328 { 7329 dw_die_ref orig; 7330 dw_die_ref copy; 7331 }; 7332 7333 /* Routines to manipulate hash table of copied declarations. */ 7334 7335 static hashval_t 7336 htab_decl_hash (const void *of) 7337 { 7338 const struct decl_table_entry *const entry = 7339 (const struct decl_table_entry *) of; 7340 7341 return htab_hash_pointer (entry->orig); 7342 } 7343 7344 static int 7345 htab_decl_eq (const void *of1, const void *of2) 7346 { 7347 const struct decl_table_entry *const entry1 = 7348 (const struct decl_table_entry *) of1; 7349 const struct die_struct *const entry2 = (const struct die_struct *) of2; 7350 7351 return entry1->orig == entry2; 7352 } 7353 7354 static void 7355 htab_decl_del (void *what) 7356 { 7357 struct decl_table_entry *entry = (struct decl_table_entry *) what; 7358 7359 free (entry); 7360 } 7361 7362 /* Copy DIE and its ancestors, up to, but not including, the compile unit 7363 or type unit entry, to a new tree. Adds the new tree to UNIT and returns 7364 a pointer to the copy of DIE. If DECL_TABLE is provided, it is used 7365 to check if the ancestor has already been copied into UNIT. */ 7366 7367 static dw_die_ref 7368 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table) 7369 { 7370 dw_die_ref parent = die->die_parent; 7371 dw_die_ref new_parent = unit; 7372 dw_die_ref copy; 7373 void **slot = NULL; 7374 struct decl_table_entry *entry = NULL; 7375 7376 if (decl_table) 7377 { 7378 /* Check if the entry has already been copied to UNIT. */ 7379 slot = htab_find_slot_with_hash (decl_table, die, 7380 htab_hash_pointer (die), INSERT); 7381 if (*slot != HTAB_EMPTY_ENTRY) 7382 { 7383 entry = (struct decl_table_entry *) *slot; 7384 return entry->copy; 7385 } 7386 7387 /* Record in DECL_TABLE that DIE has been copied to UNIT. */ 7388 entry = XCNEW (struct decl_table_entry); 7389 entry->orig = die; 7390 entry->copy = NULL; 7391 *slot = entry; 7392 } 7393 7394 if (parent != NULL) 7395 { 7396 dw_die_ref spec = get_AT_ref (parent, DW_AT_specification); 7397 if (spec != NULL) 7398 parent = spec; 7399 if (parent->die_tag != DW_TAG_compile_unit 7400 && parent->die_tag != DW_TAG_type_unit) 7401 new_parent = copy_ancestor_tree (unit, parent, decl_table); 7402 } 7403 7404 copy = clone_as_declaration (die); 7405 add_child_die (new_parent, copy); 7406 7407 if (decl_table != NULL) 7408 { 7409 /* Record the pointer to the copy. */ 7410 entry->copy = copy; 7411 } 7412 7413 return copy; 7414 } 7415 7416 /* Like clone_tree, but additionally enter all the children into 7417 the hash table decl_table. */ 7418 7419 static dw_die_ref 7420 clone_tree_hash (dw_die_ref die, htab_t decl_table) 7421 { 7422 dw_die_ref c; 7423 dw_die_ref clone = clone_die (die); 7424 struct decl_table_entry *entry; 7425 void **slot = htab_find_slot_with_hash (decl_table, die, 7426 htab_hash_pointer (die), INSERT); 7427 /* Assert that DIE isn't in the hash table yet. If it would be there 7428 before, the ancestors would be necessarily there as well, therefore 7429 clone_tree_hash wouldn't be called. */ 7430 gcc_assert (*slot == HTAB_EMPTY_ENTRY); 7431 entry = XCNEW (struct decl_table_entry); 7432 entry->orig = die; 7433 entry->copy = clone; 7434 *slot = entry; 7435 7436 FOR_EACH_CHILD (die, c, 7437 add_child_die (clone, clone_tree_hash (c, decl_table))); 7438 7439 return clone; 7440 } 7441 7442 /* Walk the DIE and its children, looking for references to incomplete 7443 or trivial types that are unmarked (i.e., that are not in the current 7444 type_unit). */ 7445 7446 static void 7447 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table) 7448 { 7449 dw_die_ref c; 7450 dw_attr_ref a; 7451 unsigned ix; 7452 7453 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 7454 { 7455 if (AT_class (a) == dw_val_class_die_ref) 7456 { 7457 dw_die_ref targ = AT_ref (a); 7458 comdat_type_node_ref type_node = targ->die_id.die_type_node; 7459 void **slot; 7460 struct decl_table_entry *entry; 7461 7462 if (targ->die_mark != 0 || type_node != NULL) 7463 continue; 7464 7465 slot = htab_find_slot_with_hash (decl_table, targ, 7466 htab_hash_pointer (targ), INSERT); 7467 7468 if (*slot != HTAB_EMPTY_ENTRY) 7469 { 7470 /* TARG has already been copied, so we just need to 7471 modify the reference to point to the copy. */ 7472 entry = (struct decl_table_entry *) *slot; 7473 a->dw_attr_val.v.val_die_ref.die = entry->copy; 7474 } 7475 else 7476 { 7477 dw_die_ref parent = unit; 7478 dw_die_ref copy = clone_die (targ); 7479 7480 /* Record in DECL_TABLE that TARG has been copied. 7481 Need to do this now, before the recursive call, 7482 because DECL_TABLE may be expanded and SLOT 7483 would no longer be a valid pointer. */ 7484 entry = XCNEW (struct decl_table_entry); 7485 entry->orig = targ; 7486 entry->copy = copy; 7487 *slot = entry; 7488 7489 FOR_EACH_CHILD (targ, c, 7490 add_child_die (copy, 7491 clone_tree_hash (c, decl_table))); 7492 7493 /* Make sure the cloned tree is marked as part of the 7494 type unit. */ 7495 mark_dies (copy); 7496 7497 /* If TARG has surrounding context, copy its ancestor tree 7498 into the new type unit. */ 7499 if (targ->die_parent != NULL 7500 && targ->die_parent->die_tag != DW_TAG_compile_unit 7501 && targ->die_parent->die_tag != DW_TAG_type_unit) 7502 parent = copy_ancestor_tree (unit, targ->die_parent, 7503 decl_table); 7504 7505 add_child_die (parent, copy); 7506 a->dw_attr_val.v.val_die_ref.die = copy; 7507 7508 /* Make sure the newly-copied DIE is walked. If it was 7509 installed in a previously-added context, it won't 7510 get visited otherwise. */ 7511 if (parent != unit) 7512 { 7513 /* Find the highest point of the newly-added tree, 7514 mark each node along the way, and walk from there. */ 7515 parent->die_mark = 1; 7516 while (parent->die_parent 7517 && parent->die_parent->die_mark == 0) 7518 { 7519 parent = parent->die_parent; 7520 parent->die_mark = 1; 7521 } 7522 copy_decls_walk (unit, parent, decl_table); 7523 } 7524 } 7525 } 7526 } 7527 7528 FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table)); 7529 } 7530 7531 /* Copy declarations for "unworthy" types into the new comdat section. 7532 Incomplete types, modified types, and certain other types aren't broken 7533 out into comdat sections of their own, so they don't have a signature, 7534 and we need to copy the declaration into the same section so that we 7535 don't have an external reference. */ 7536 7537 static void 7538 copy_decls_for_unworthy_types (dw_die_ref unit) 7539 { 7540 htab_t decl_table; 7541 7542 mark_dies (unit); 7543 decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del); 7544 copy_decls_walk (unit, unit, decl_table); 7545 htab_delete (decl_table); 7546 unmark_dies (unit); 7547 } 7548 7549 /* Traverse the DIE and add a sibling attribute if it may have the 7550 effect of speeding up access to siblings. To save some space, 7551 avoid generating sibling attributes for DIE's without children. */ 7552 7553 static void 7554 add_sibling_attributes (dw_die_ref die) 7555 { 7556 dw_die_ref c; 7557 7558 if (! die->die_child) 7559 return; 7560 7561 if (die->die_parent && die != die->die_parent->die_child) 7562 add_AT_die_ref (die, DW_AT_sibling, die->die_sib); 7563 7564 FOR_EACH_CHILD (die, c, add_sibling_attributes (c)); 7565 } 7566 7567 /* Output all location lists for the DIE and its children. */ 7568 7569 static void 7570 output_location_lists (dw_die_ref die) 7571 { 7572 dw_die_ref c; 7573 dw_attr_ref a; 7574 unsigned ix; 7575 7576 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 7577 if (AT_class (a) == dw_val_class_loc_list) 7578 output_loc_list (AT_loc_list (a)); 7579 7580 FOR_EACH_CHILD (die, c, output_location_lists (c)); 7581 } 7582 7583 /* The format of each DIE (and its attribute value pairs) is encoded in an 7584 abbreviation table. This routine builds the abbreviation table and assigns 7585 a unique abbreviation id for each abbreviation entry. The children of each 7586 die are visited recursively. */ 7587 7588 static void 7589 build_abbrev_table (dw_die_ref die) 7590 { 7591 unsigned long abbrev_id; 7592 unsigned int n_alloc; 7593 dw_die_ref c; 7594 dw_attr_ref a; 7595 unsigned ix; 7596 7597 /* Scan the DIE references, and mark as external any that refer to 7598 DIEs from other CUs (i.e. those which are not marked). */ 7599 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 7600 if (AT_class (a) == dw_val_class_die_ref 7601 && AT_ref (a)->die_mark == 0) 7602 { 7603 gcc_assert (use_debug_types || AT_ref (a)->die_id.die_symbol); 7604 set_AT_ref_external (a, 1); 7605 } 7606 7607 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id) 7608 { 7609 dw_die_ref abbrev = abbrev_die_table[abbrev_id]; 7610 dw_attr_ref die_a, abbrev_a; 7611 unsigned ix; 7612 bool ok = true; 7613 7614 if (abbrev->die_tag != die->die_tag) 7615 continue; 7616 if ((abbrev->die_child != NULL) != (die->die_child != NULL)) 7617 continue; 7618 7619 if (VEC_length (dw_attr_node, abbrev->die_attr) 7620 != VEC_length (dw_attr_node, die->die_attr)) 7621 continue; 7622 7623 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, die_a) 7624 { 7625 abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix); 7626 if ((abbrev_a->dw_attr != die_a->dw_attr) 7627 || (value_format (abbrev_a) != value_format (die_a))) 7628 { 7629 ok = false; 7630 break; 7631 } 7632 } 7633 if (ok) 7634 break; 7635 } 7636 7637 if (abbrev_id >= abbrev_die_table_in_use) 7638 { 7639 if (abbrev_die_table_in_use >= abbrev_die_table_allocated) 7640 { 7641 n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT; 7642 abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table, 7643 n_alloc); 7644 7645 memset (&abbrev_die_table[abbrev_die_table_allocated], 0, 7646 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref)); 7647 abbrev_die_table_allocated = n_alloc; 7648 } 7649 7650 ++abbrev_die_table_in_use; 7651 abbrev_die_table[abbrev_id] = die; 7652 } 7653 7654 die->die_abbrev = abbrev_id; 7655 FOR_EACH_CHILD (die, c, build_abbrev_table (c)); 7656 } 7657 7658 /* Return the power-of-two number of bytes necessary to represent VALUE. */ 7659 7660 static int 7661 constant_size (unsigned HOST_WIDE_INT value) 7662 { 7663 int log; 7664 7665 if (value == 0) 7666 log = 0; 7667 else 7668 log = floor_log2 (value); 7669 7670 log = log / 8; 7671 log = 1 << (floor_log2 (log) + 1); 7672 7673 return log; 7674 } 7675 7676 /* Return the size of a DIE as it is represented in the 7677 .debug_info section. */ 7678 7679 static unsigned long 7680 size_of_die (dw_die_ref die) 7681 { 7682 unsigned long size = 0; 7683 dw_attr_ref a; 7684 unsigned ix; 7685 7686 size += size_of_uleb128 (die->die_abbrev); 7687 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 7688 { 7689 switch (AT_class (a)) 7690 { 7691 case dw_val_class_addr: 7692 size += DWARF2_ADDR_SIZE; 7693 break; 7694 case dw_val_class_offset: 7695 size += DWARF_OFFSET_SIZE; 7696 break; 7697 case dw_val_class_loc: 7698 { 7699 unsigned long lsize = size_of_locs (AT_loc (a)); 7700 7701 /* Block length. */ 7702 if (dwarf_version >= 4) 7703 size += size_of_uleb128 (lsize); 7704 else 7705 size += constant_size (lsize); 7706 size += lsize; 7707 } 7708 break; 7709 case dw_val_class_loc_list: 7710 size += DWARF_OFFSET_SIZE; 7711 break; 7712 case dw_val_class_range_list: 7713 size += DWARF_OFFSET_SIZE; 7714 break; 7715 case dw_val_class_const: 7716 size += size_of_sleb128 (AT_int (a)); 7717 break; 7718 case dw_val_class_unsigned_const: 7719 { 7720 int csize = constant_size (AT_unsigned (a)); 7721 if (dwarf_version == 3 7722 && a->dw_attr == DW_AT_data_member_location 7723 && csize >= 4) 7724 size += size_of_uleb128 (AT_unsigned (a)); 7725 else 7726 size += csize; 7727 } 7728 break; 7729 case dw_val_class_const_double: 7730 size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR; 7731 if (HOST_BITS_PER_WIDE_INT >= 64) 7732 size++; /* block */ 7733 break; 7734 case dw_val_class_vec: 7735 size += constant_size (a->dw_attr_val.v.val_vec.length 7736 * a->dw_attr_val.v.val_vec.elt_size) 7737 + a->dw_attr_val.v.val_vec.length 7738 * a->dw_attr_val.v.val_vec.elt_size; /* block */ 7739 break; 7740 case dw_val_class_flag: 7741 if (dwarf_version >= 4) 7742 /* Currently all add_AT_flag calls pass in 1 as last argument, 7743 so DW_FORM_flag_present can be used. If that ever changes, 7744 we'll need to use DW_FORM_flag and have some optimization 7745 in build_abbrev_table that will change those to 7746 DW_FORM_flag_present if it is set to 1 in all DIEs using 7747 the same abbrev entry. */ 7748 gcc_assert (a->dw_attr_val.v.val_flag == 1); 7749 else 7750 size += 1; 7751 break; 7752 case dw_val_class_die_ref: 7753 if (AT_ref_external (a)) 7754 { 7755 /* In DWARF4, we use DW_FORM_ref_sig8; for earlier versions 7756 we use DW_FORM_ref_addr. In DWARF2, DW_FORM_ref_addr 7757 is sized by target address length, whereas in DWARF3 7758 it's always sized as an offset. */ 7759 if (use_debug_types) 7760 size += DWARF_TYPE_SIGNATURE_SIZE; 7761 else if (dwarf_version == 2) 7762 size += DWARF2_ADDR_SIZE; 7763 else 7764 size += DWARF_OFFSET_SIZE; 7765 } 7766 else 7767 size += DWARF_OFFSET_SIZE; 7768 break; 7769 case dw_val_class_fde_ref: 7770 size += DWARF_OFFSET_SIZE; 7771 break; 7772 case dw_val_class_lbl_id: 7773 size += DWARF2_ADDR_SIZE; 7774 break; 7775 case dw_val_class_lineptr: 7776 case dw_val_class_macptr: 7777 size += DWARF_OFFSET_SIZE; 7778 break; 7779 case dw_val_class_str: 7780 if (AT_string_form (a) == DW_FORM_strp) 7781 size += DWARF_OFFSET_SIZE; 7782 else 7783 size += strlen (a->dw_attr_val.v.val_str->str) + 1; 7784 break; 7785 case dw_val_class_file: 7786 size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)); 7787 break; 7788 case dw_val_class_data8: 7789 size += 8; 7790 break; 7791 case dw_val_class_vms_delta: 7792 size += DWARF_OFFSET_SIZE; 7793 break; 7794 default: 7795 gcc_unreachable (); 7796 } 7797 } 7798 7799 return size; 7800 } 7801 7802 /* Size the debugging information associated with a given DIE. Visits the 7803 DIE's children recursively. Updates the global variable next_die_offset, on 7804 each time through. Uses the current value of next_die_offset to update the 7805 die_offset field in each DIE. */ 7806 7807 static void 7808 calc_die_sizes (dw_die_ref die) 7809 { 7810 dw_die_ref c; 7811 7812 gcc_assert (die->die_offset == 0 7813 || (unsigned long int) die->die_offset == next_die_offset); 7814 die->die_offset = next_die_offset; 7815 next_die_offset += size_of_die (die); 7816 7817 FOR_EACH_CHILD (die, c, calc_die_sizes (c)); 7818 7819 if (die->die_child != NULL) 7820 /* Count the null byte used to terminate sibling lists. */ 7821 next_die_offset += 1; 7822 } 7823 7824 /* Size just the base type children at the start of the CU. 7825 This is needed because build_abbrev needs to size locs 7826 and sizing of type based stack ops needs to know die_offset 7827 values for the base types. */ 7828 7829 static void 7830 calc_base_type_die_sizes (void) 7831 { 7832 unsigned long die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE; 7833 unsigned int i; 7834 dw_die_ref base_type; 7835 #if ENABLE_ASSERT_CHECKING 7836 dw_die_ref prev = comp_unit_die ()->die_child; 7837 #endif 7838 7839 die_offset += size_of_die (comp_unit_die ()); 7840 for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++) 7841 { 7842 #if ENABLE_ASSERT_CHECKING 7843 gcc_assert (base_type->die_offset == 0 7844 && prev->die_sib == base_type 7845 && base_type->die_child == NULL 7846 && base_type->die_abbrev); 7847 prev = base_type; 7848 #endif 7849 base_type->die_offset = die_offset; 7850 die_offset += size_of_die (base_type); 7851 } 7852 } 7853 7854 /* Set the marks for a die and its children. We do this so 7855 that we know whether or not a reference needs to use FORM_ref_addr; only 7856 DIEs in the same CU will be marked. We used to clear out the offset 7857 and use that as the flag, but ran into ordering problems. */ 7858 7859 static void 7860 mark_dies (dw_die_ref die) 7861 { 7862 dw_die_ref c; 7863 7864 gcc_assert (!die->die_mark); 7865 7866 die->die_mark = 1; 7867 FOR_EACH_CHILD (die, c, mark_dies (c)); 7868 } 7869 7870 /* Clear the marks for a die and its children. */ 7871 7872 static void 7873 unmark_dies (dw_die_ref die) 7874 { 7875 dw_die_ref c; 7876 7877 if (! use_debug_types) 7878 gcc_assert (die->die_mark); 7879 7880 die->die_mark = 0; 7881 FOR_EACH_CHILD (die, c, unmark_dies (c)); 7882 } 7883 7884 /* Clear the marks for a die, its children and referred dies. */ 7885 7886 static void 7887 unmark_all_dies (dw_die_ref die) 7888 { 7889 dw_die_ref c; 7890 dw_attr_ref a; 7891 unsigned ix; 7892 7893 if (!die->die_mark) 7894 return; 7895 die->die_mark = 0; 7896 7897 FOR_EACH_CHILD (die, c, unmark_all_dies (c)); 7898 7899 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 7900 if (AT_class (a) == dw_val_class_die_ref) 7901 unmark_all_dies (AT_ref (a)); 7902 } 7903 7904 /* Return the size of the .debug_pubnames or .debug_pubtypes table 7905 generated for the compilation unit. */ 7906 7907 static unsigned long 7908 size_of_pubnames (VEC (pubname_entry, gc) * names) 7909 { 7910 unsigned long size; 7911 unsigned i; 7912 pubname_ref p; 7913 7914 size = DWARF_PUBNAMES_HEADER_SIZE; 7915 FOR_EACH_VEC_ELT (pubname_entry, names, i, p) 7916 if (names != pubtype_table 7917 || p->die->die_offset != 0 7918 || !flag_eliminate_unused_debug_types) 7919 size += strlen (p->name) + DWARF_OFFSET_SIZE + 1; 7920 7921 size += DWARF_OFFSET_SIZE; 7922 return size; 7923 } 7924 7925 /* Return the size of the information in the .debug_aranges section. */ 7926 7927 static unsigned long 7928 size_of_aranges (void) 7929 { 7930 unsigned long size; 7931 7932 size = DWARF_ARANGES_HEADER_SIZE; 7933 7934 /* Count the address/length pair for this compilation unit. */ 7935 if (text_section_used) 7936 size += 2 * DWARF2_ADDR_SIZE; 7937 if (cold_text_section_used) 7938 size += 2 * DWARF2_ADDR_SIZE; 7939 if (have_multiple_function_sections) 7940 { 7941 unsigned fde_idx; 7942 dw_fde_ref fde; 7943 7944 FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde) 7945 { 7946 if (!fde->in_std_section) 7947 size += 2 * DWARF2_ADDR_SIZE; 7948 if (fde->dw_fde_second_begin && !fde->second_in_std_section) 7949 size += 2 * DWARF2_ADDR_SIZE; 7950 } 7951 } 7952 7953 /* Count the two zero words used to terminated the address range table. */ 7954 size += 2 * DWARF2_ADDR_SIZE; 7955 return size; 7956 } 7957 7958 /* Select the encoding of an attribute value. */ 7959 7960 static enum dwarf_form 7961 value_format (dw_attr_ref a) 7962 { 7963 switch (a->dw_attr_val.val_class) 7964 { 7965 case dw_val_class_addr: 7966 /* Only very few attributes allow DW_FORM_addr. */ 7967 switch (a->dw_attr) 7968 { 7969 case DW_AT_low_pc: 7970 case DW_AT_high_pc: 7971 case DW_AT_entry_pc: 7972 case DW_AT_trampoline: 7973 return DW_FORM_addr; 7974 default: 7975 break; 7976 } 7977 switch (DWARF2_ADDR_SIZE) 7978 { 7979 case 1: 7980 return DW_FORM_data1; 7981 case 2: 7982 return DW_FORM_data2; 7983 case 4: 7984 return DW_FORM_data4; 7985 case 8: 7986 return DW_FORM_data8; 7987 default: 7988 gcc_unreachable (); 7989 } 7990 case dw_val_class_range_list: 7991 case dw_val_class_loc_list: 7992 if (dwarf_version >= 4) 7993 return DW_FORM_sec_offset; 7994 /* FALLTHRU */ 7995 case dw_val_class_vms_delta: 7996 case dw_val_class_offset: 7997 switch (DWARF_OFFSET_SIZE) 7998 { 7999 case 4: 8000 return DW_FORM_data4; 8001 case 8: 8002 return DW_FORM_data8; 8003 default: 8004 gcc_unreachable (); 8005 } 8006 case dw_val_class_loc: 8007 if (dwarf_version >= 4) 8008 return DW_FORM_exprloc; 8009 switch (constant_size (size_of_locs (AT_loc (a)))) 8010 { 8011 case 1: 8012 return DW_FORM_block1; 8013 case 2: 8014 return DW_FORM_block2; 8015 default: 8016 gcc_unreachable (); 8017 } 8018 case dw_val_class_const: 8019 return DW_FORM_sdata; 8020 case dw_val_class_unsigned_const: 8021 switch (constant_size (AT_unsigned (a))) 8022 { 8023 case 1: 8024 return DW_FORM_data1; 8025 case 2: 8026 return DW_FORM_data2; 8027 case 4: 8028 /* In DWARF3 DW_AT_data_member_location with 8029 DW_FORM_data4 or DW_FORM_data8 is a loclistptr, not 8030 constant, so we need to use DW_FORM_udata if we need 8031 a large constant. */ 8032 if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location) 8033 return DW_FORM_udata; 8034 return DW_FORM_data4; 8035 case 8: 8036 if (dwarf_version == 3 && a->dw_attr == DW_AT_data_member_location) 8037 return DW_FORM_udata; 8038 return DW_FORM_data8; 8039 default: 8040 gcc_unreachable (); 8041 } 8042 case dw_val_class_const_double: 8043 switch (HOST_BITS_PER_WIDE_INT) 8044 { 8045 case 8: 8046 return DW_FORM_data2; 8047 case 16: 8048 return DW_FORM_data4; 8049 case 32: 8050 return DW_FORM_data8; 8051 case 64: 8052 default: 8053 return DW_FORM_block1; 8054 } 8055 case dw_val_class_vec: 8056 switch (constant_size (a->dw_attr_val.v.val_vec.length 8057 * a->dw_attr_val.v.val_vec.elt_size)) 8058 { 8059 case 1: 8060 return DW_FORM_block1; 8061 case 2: 8062 return DW_FORM_block2; 8063 case 4: 8064 return DW_FORM_block4; 8065 default: 8066 gcc_unreachable (); 8067 } 8068 case dw_val_class_flag: 8069 if (dwarf_version >= 4) 8070 { 8071 /* Currently all add_AT_flag calls pass in 1 as last argument, 8072 so DW_FORM_flag_present can be used. If that ever changes, 8073 we'll need to use DW_FORM_flag and have some optimization 8074 in build_abbrev_table that will change those to 8075 DW_FORM_flag_present if it is set to 1 in all DIEs using 8076 the same abbrev entry. */ 8077 gcc_assert (a->dw_attr_val.v.val_flag == 1); 8078 return DW_FORM_flag_present; 8079 } 8080 return DW_FORM_flag; 8081 case dw_val_class_die_ref: 8082 if (AT_ref_external (a)) 8083 return use_debug_types ? DW_FORM_ref_sig8 : DW_FORM_ref_addr; 8084 else 8085 return DW_FORM_ref; 8086 case dw_val_class_fde_ref: 8087 return DW_FORM_data; 8088 case dw_val_class_lbl_id: 8089 return DW_FORM_addr; 8090 case dw_val_class_lineptr: 8091 case dw_val_class_macptr: 8092 return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data; 8093 case dw_val_class_str: 8094 return AT_string_form (a); 8095 case dw_val_class_file: 8096 switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file))) 8097 { 8098 case 1: 8099 return DW_FORM_data1; 8100 case 2: 8101 return DW_FORM_data2; 8102 case 4: 8103 return DW_FORM_data4; 8104 default: 8105 gcc_unreachable (); 8106 } 8107 8108 case dw_val_class_data8: 8109 return DW_FORM_data8; 8110 8111 default: 8112 gcc_unreachable (); 8113 } 8114 } 8115 8116 /* Output the encoding of an attribute value. */ 8117 8118 static void 8119 output_value_format (dw_attr_ref a) 8120 { 8121 enum dwarf_form form = value_format (a); 8122 8123 dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form)); 8124 } 8125 8126 /* Output the .debug_abbrev section which defines the DIE abbreviation 8127 table. */ 8128 8129 static void 8130 output_abbrev_section (void) 8131 { 8132 unsigned long abbrev_id; 8133 8134 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id) 8135 { 8136 dw_die_ref abbrev = abbrev_die_table[abbrev_id]; 8137 unsigned ix; 8138 dw_attr_ref a_attr; 8139 8140 dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)"); 8141 dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)", 8142 dwarf_tag_name (abbrev->die_tag)); 8143 8144 if (abbrev->die_child != NULL) 8145 dw2_asm_output_data (1, DW_children_yes, "DW_children_yes"); 8146 else 8147 dw2_asm_output_data (1, DW_children_no, "DW_children_no"); 8148 8149 for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr); 8150 ix++) 8151 { 8152 dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)", 8153 dwarf_attr_name (a_attr->dw_attr)); 8154 output_value_format (a_attr); 8155 } 8156 8157 dw2_asm_output_data (1, 0, NULL); 8158 dw2_asm_output_data (1, 0, NULL); 8159 } 8160 8161 /* Terminate the table. */ 8162 dw2_asm_output_data (1, 0, NULL); 8163 } 8164 8165 /* Output a symbol we can use to refer to this DIE from another CU. */ 8166 8167 static inline void 8168 output_die_symbol (dw_die_ref die) 8169 { 8170 char *sym = die->die_id.die_symbol; 8171 8172 if (sym == 0) 8173 return; 8174 8175 if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0) 8176 /* We make these global, not weak; if the target doesn't support 8177 .linkonce, it doesn't support combining the sections, so debugging 8178 will break. */ 8179 targetm.asm_out.globalize_label (asm_out_file, sym); 8180 8181 ASM_OUTPUT_LABEL (asm_out_file, sym); 8182 } 8183 8184 /* Return a new location list, given the begin and end range, and the 8185 expression. */ 8186 8187 static inline dw_loc_list_ref 8188 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end, 8189 const char *section) 8190 { 8191 dw_loc_list_ref retlist = ggc_alloc_cleared_dw_loc_list_node (); 8192 8193 retlist->begin = begin; 8194 retlist->end = end; 8195 retlist->expr = expr; 8196 retlist->section = section; 8197 8198 return retlist; 8199 } 8200 8201 /* Generate a new internal symbol for this location list node, if it 8202 hasn't got one yet. */ 8203 8204 static inline void 8205 gen_llsym (dw_loc_list_ref list) 8206 { 8207 gcc_assert (!list->ll_symbol); 8208 list->ll_symbol = gen_internal_sym ("LLST"); 8209 } 8210 8211 /* Output the location list given to us. */ 8212 8213 static void 8214 output_loc_list (dw_loc_list_ref list_head) 8215 { 8216 dw_loc_list_ref curr = list_head; 8217 8218 if (list_head->emitted) 8219 return; 8220 list_head->emitted = true; 8221 8222 ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol); 8223 8224 /* Walk the location list, and output each range + expression. */ 8225 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next) 8226 { 8227 unsigned long size; 8228 /* Don't output an entry that starts and ends at the same address. */ 8229 if (strcmp (curr->begin, curr->end) == 0 && !curr->force) 8230 continue; 8231 size = size_of_locs (curr->expr); 8232 /* If the expression is too large, drop it on the floor. We could 8233 perhaps put it into DW_TAG_dwarf_procedure and refer to that 8234 in the expression, but >= 64KB expressions for a single value 8235 in a single range are unlikely very useful. */ 8236 if (size > 0xffff) 8237 continue; 8238 if (!have_multiple_function_sections) 8239 { 8240 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section, 8241 "Location list begin address (%s)", 8242 list_head->ll_symbol); 8243 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section, 8244 "Location list end address (%s)", 8245 list_head->ll_symbol); 8246 } 8247 else 8248 { 8249 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin, 8250 "Location list begin address (%s)", 8251 list_head->ll_symbol); 8252 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end, 8253 "Location list end address (%s)", 8254 list_head->ll_symbol); 8255 } 8256 8257 /* Output the block length for this list of location operations. */ 8258 gcc_assert (size <= 0xffff); 8259 dw2_asm_output_data (2, size, "%s", "Location expression size"); 8260 8261 output_loc_sequence (curr->expr, -1); 8262 } 8263 8264 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, 8265 "Location list terminator begin (%s)", 8266 list_head->ll_symbol); 8267 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, 8268 "Location list terminator end (%s)", 8269 list_head->ll_symbol); 8270 } 8271 8272 /* Output a type signature. */ 8273 8274 static inline void 8275 output_signature (const char *sig, const char *name) 8276 { 8277 int i; 8278 8279 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++) 8280 dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name); 8281 } 8282 8283 /* Output the DIE and its attributes. Called recursively to generate 8284 the definitions of each child DIE. */ 8285 8286 static void 8287 output_die (dw_die_ref die) 8288 { 8289 dw_attr_ref a; 8290 dw_die_ref c; 8291 unsigned long size; 8292 unsigned ix; 8293 8294 /* If someone in another CU might refer to us, set up a symbol for 8295 them to point to. */ 8296 if (! use_debug_types && die->die_id.die_symbol) 8297 output_die_symbol (die); 8298 8299 dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)", 8300 (unsigned long)die->die_offset, 8301 dwarf_tag_name (die->die_tag)); 8302 8303 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 8304 { 8305 const char *name = dwarf_attr_name (a->dw_attr); 8306 8307 switch (AT_class (a)) 8308 { 8309 case dw_val_class_addr: 8310 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name); 8311 break; 8312 8313 case dw_val_class_offset: 8314 dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset, 8315 "%s", name); 8316 break; 8317 8318 case dw_val_class_range_list: 8319 { 8320 char *p = strchr (ranges_section_label, '\0'); 8321 8322 sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX, 8323 a->dw_attr_val.v.val_offset); 8324 dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label, 8325 debug_ranges_section, "%s", name); 8326 *p = '\0'; 8327 } 8328 break; 8329 8330 case dw_val_class_loc: 8331 size = size_of_locs (AT_loc (a)); 8332 8333 /* Output the block length for this list of location operations. */ 8334 if (dwarf_version >= 4) 8335 dw2_asm_output_data_uleb128 (size, "%s", name); 8336 else 8337 dw2_asm_output_data (constant_size (size), size, "%s", name); 8338 8339 output_loc_sequence (AT_loc (a), -1); 8340 break; 8341 8342 case dw_val_class_const: 8343 /* ??? It would be slightly more efficient to use a scheme like is 8344 used for unsigned constants below, but gdb 4.x does not sign 8345 extend. Gdb 5.x does sign extend. */ 8346 dw2_asm_output_data_sleb128 (AT_int (a), "%s", name); 8347 break; 8348 8349 case dw_val_class_unsigned_const: 8350 { 8351 int csize = constant_size (AT_unsigned (a)); 8352 if (dwarf_version == 3 8353 && a->dw_attr == DW_AT_data_member_location 8354 && csize >= 4) 8355 dw2_asm_output_data_uleb128 (AT_unsigned (a), "%s", name); 8356 else 8357 dw2_asm_output_data (csize, AT_unsigned (a), "%s", name); 8358 } 8359 break; 8360 8361 case dw_val_class_const_double: 8362 { 8363 unsigned HOST_WIDE_INT first, second; 8364 8365 if (HOST_BITS_PER_WIDE_INT >= 64) 8366 dw2_asm_output_data (1, 8367 2 * HOST_BITS_PER_WIDE_INT 8368 / HOST_BITS_PER_CHAR, 8369 NULL); 8370 8371 if (WORDS_BIG_ENDIAN) 8372 { 8373 first = a->dw_attr_val.v.val_double.high; 8374 second = a->dw_attr_val.v.val_double.low; 8375 } 8376 else 8377 { 8378 first = a->dw_attr_val.v.val_double.low; 8379 second = a->dw_attr_val.v.val_double.high; 8380 } 8381 8382 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR, 8383 first, name); 8384 dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR, 8385 second, NULL); 8386 } 8387 break; 8388 8389 case dw_val_class_vec: 8390 { 8391 unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size; 8392 unsigned int len = a->dw_attr_val.v.val_vec.length; 8393 unsigned int i; 8394 unsigned char *p; 8395 8396 dw2_asm_output_data (constant_size (len * elt_size), 8397 len * elt_size, "%s", name); 8398 if (elt_size > sizeof (HOST_WIDE_INT)) 8399 { 8400 elt_size /= 2; 8401 len *= 2; 8402 } 8403 for (i = 0, p = a->dw_attr_val.v.val_vec.array; 8404 i < len; 8405 i++, p += elt_size) 8406 dw2_asm_output_data (elt_size, extract_int (p, elt_size), 8407 "fp or vector constant word %u", i); 8408 break; 8409 } 8410 8411 case dw_val_class_flag: 8412 if (dwarf_version >= 4) 8413 { 8414 /* Currently all add_AT_flag calls pass in 1 as last argument, 8415 so DW_FORM_flag_present can be used. If that ever changes, 8416 we'll need to use DW_FORM_flag and have some optimization 8417 in build_abbrev_table that will change those to 8418 DW_FORM_flag_present if it is set to 1 in all DIEs using 8419 the same abbrev entry. */ 8420 gcc_assert (AT_flag (a) == 1); 8421 if (flag_debug_asm) 8422 fprintf (asm_out_file, "\t\t\t%s %s\n", 8423 ASM_COMMENT_START, name); 8424 break; 8425 } 8426 dw2_asm_output_data (1, AT_flag (a), "%s", name); 8427 break; 8428 8429 case dw_val_class_loc_list: 8430 { 8431 char *sym = AT_loc_list (a)->ll_symbol; 8432 8433 gcc_assert (sym); 8434 dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section, 8435 "%s", name); 8436 } 8437 break; 8438 8439 case dw_val_class_die_ref: 8440 if (AT_ref_external (a)) 8441 { 8442 if (use_debug_types) 8443 { 8444 comdat_type_node_ref type_node = 8445 AT_ref (a)->die_id.die_type_node; 8446 8447 gcc_assert (type_node); 8448 output_signature (type_node->signature, name); 8449 } 8450 else 8451 { 8452 char *sym = AT_ref (a)->die_id.die_symbol; 8453 int size; 8454 8455 gcc_assert (sym); 8456 /* In DWARF2, DW_FORM_ref_addr is sized by target address 8457 length, whereas in DWARF3 it's always sized as an 8458 offset. */ 8459 if (dwarf_version == 2) 8460 size = DWARF2_ADDR_SIZE; 8461 else 8462 size = DWARF_OFFSET_SIZE; 8463 dw2_asm_output_offset (size, sym, debug_info_section, "%s", 8464 name); 8465 } 8466 } 8467 else 8468 { 8469 gcc_assert (AT_ref (a)->die_offset); 8470 dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset, 8471 "%s", name); 8472 } 8473 break; 8474 8475 case dw_val_class_fde_ref: 8476 { 8477 char l1[20]; 8478 8479 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL, 8480 a->dw_attr_val.v.val_fde_index * 2); 8481 dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section, 8482 "%s", name); 8483 } 8484 break; 8485 8486 case dw_val_class_vms_delta: 8487 dw2_asm_output_vms_delta (DWARF_OFFSET_SIZE, 8488 AT_vms_delta2 (a), AT_vms_delta1 (a), 8489 "%s", name); 8490 break; 8491 8492 case dw_val_class_lbl_id: 8493 dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name); 8494 break; 8495 8496 case dw_val_class_lineptr: 8497 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a), 8498 debug_line_section, "%s", name); 8499 break; 8500 8501 case dw_val_class_macptr: 8502 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a), 8503 debug_macinfo_section, "%s", name); 8504 break; 8505 8506 case dw_val_class_str: 8507 if (AT_string_form (a) == DW_FORM_strp) 8508 dw2_asm_output_offset (DWARF_OFFSET_SIZE, 8509 a->dw_attr_val.v.val_str->label, 8510 debug_str_section, 8511 "%s: \"%s\"", name, AT_string (a)); 8512 else 8513 dw2_asm_output_nstring (AT_string (a), -1, "%s", name); 8514 break; 8515 8516 case dw_val_class_file: 8517 { 8518 int f = maybe_emit_file (a->dw_attr_val.v.val_file); 8519 8520 dw2_asm_output_data (constant_size (f), f, "%s (%s)", name, 8521 a->dw_attr_val.v.val_file->filename); 8522 break; 8523 } 8524 8525 case dw_val_class_data8: 8526 { 8527 int i; 8528 8529 for (i = 0; i < 8; i++) 8530 dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i], 8531 i == 0 ? "%s" : NULL, name); 8532 break; 8533 } 8534 8535 default: 8536 gcc_unreachable (); 8537 } 8538 } 8539 8540 FOR_EACH_CHILD (die, c, output_die (c)); 8541 8542 /* Add null byte to terminate sibling list. */ 8543 if (die->die_child != NULL) 8544 dw2_asm_output_data (1, 0, "end of children of DIE %#lx", 8545 (unsigned long) die->die_offset); 8546 } 8547 8548 /* Output the compilation unit that appears at the beginning of the 8549 .debug_info section, and precedes the DIE descriptions. */ 8550 8551 static void 8552 output_compilation_unit_header (void) 8553 { 8554 int ver = dwarf_version; 8555 8556 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4) 8557 dw2_asm_output_data (4, 0xffffffff, 8558 "Initial length escape value indicating 64-bit DWARF extension"); 8559 dw2_asm_output_data (DWARF_OFFSET_SIZE, 8560 next_die_offset - DWARF_INITIAL_LENGTH_SIZE, 8561 "Length of Compilation Unit Info"); 8562 dw2_asm_output_data (2, ver, "DWARF version number"); 8563 dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label, 8564 debug_abbrev_section, 8565 "Offset Into Abbrev. Section"); 8566 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)"); 8567 } 8568 8569 /* Output the compilation unit DIE and its children. */ 8570 8571 static void 8572 output_comp_unit (dw_die_ref die, int output_if_empty) 8573 { 8574 const char *secname; 8575 char *oldsym, *tmp; 8576 8577 /* Unless we are outputting main CU, we may throw away empty ones. */ 8578 if (!output_if_empty && die->die_child == NULL) 8579 return; 8580 8581 /* Even if there are no children of this DIE, we must output the information 8582 about the compilation unit. Otherwise, on an empty translation unit, we 8583 will generate a present, but empty, .debug_info section. IRIX 6.5 `nm' 8584 will then complain when examining the file. First mark all the DIEs in 8585 this CU so we know which get local refs. */ 8586 mark_dies (die); 8587 8588 build_abbrev_table (die); 8589 8590 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */ 8591 next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE; 8592 calc_die_sizes (die); 8593 8594 oldsym = die->die_id.die_symbol; 8595 if (oldsym) 8596 { 8597 tmp = XALLOCAVEC (char, strlen (oldsym) + 24); 8598 8599 sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym); 8600 secname = tmp; 8601 die->die_id.die_symbol = NULL; 8602 switch_to_section (get_section (secname, SECTION_DEBUG, NULL)); 8603 } 8604 else 8605 { 8606 switch_to_section (debug_info_section); 8607 ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label); 8608 info_section_emitted = true; 8609 } 8610 8611 /* Output debugging information. */ 8612 output_compilation_unit_header (); 8613 output_die (die); 8614 8615 /* Leave the marks on the main CU, so we can check them in 8616 output_pubnames. */ 8617 if (oldsym) 8618 { 8619 unmark_dies (die); 8620 die->die_id.die_symbol = oldsym; 8621 } 8622 } 8623 8624 /* Output a comdat type unit DIE and its children. */ 8625 8626 static void 8627 output_comdat_type_unit (comdat_type_node *node) 8628 { 8629 const char *secname; 8630 char *tmp; 8631 int i; 8632 #if defined (OBJECT_FORMAT_ELF) 8633 tree comdat_key; 8634 #endif 8635 8636 /* First mark all the DIEs in this CU so we know which get local refs. */ 8637 mark_dies (node->root_die); 8638 8639 build_abbrev_table (node->root_die); 8640 8641 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */ 8642 next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE; 8643 calc_die_sizes (node->root_die); 8644 8645 #if defined (OBJECT_FORMAT_ELF) 8646 secname = ".debug_types"; 8647 tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2); 8648 sprintf (tmp, "wt."); 8649 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++) 8650 sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff); 8651 comdat_key = get_identifier (tmp); 8652 targetm.asm_out.named_section (secname, 8653 SECTION_DEBUG | SECTION_LINKONCE, 8654 comdat_key); 8655 #else 8656 tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2); 8657 sprintf (tmp, ".gnu.linkonce.wt."); 8658 for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++) 8659 sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff); 8660 secname = tmp; 8661 switch_to_section (get_section (secname, SECTION_DEBUG, NULL)); 8662 #endif 8663 8664 /* Output debugging information. */ 8665 output_compilation_unit_header (); 8666 output_signature (node->signature, "Type Signature"); 8667 dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset, 8668 "Offset to Type DIE"); 8669 output_die (node->root_die); 8670 8671 unmark_dies (node->root_die); 8672 } 8673 8674 /* Return the DWARF2/3 pubname associated with a decl. */ 8675 8676 static const char * 8677 dwarf2_name (tree decl, int scope) 8678 { 8679 if (DECL_NAMELESS (decl)) 8680 return NULL; 8681 return lang_hooks.dwarf_name (decl, scope ? 1 : 0); 8682 } 8683 8684 /* Add a new entry to .debug_pubnames if appropriate. */ 8685 8686 static void 8687 add_pubname_string (const char *str, dw_die_ref die) 8688 { 8689 if (targetm.want_debug_pub_sections) 8690 { 8691 pubname_entry e; 8692 8693 e.die = die; 8694 e.name = xstrdup (str); 8695 VEC_safe_push (pubname_entry, gc, pubname_table, &e); 8696 } 8697 } 8698 8699 static void 8700 add_pubname (tree decl, dw_die_ref die) 8701 { 8702 if (targetm.want_debug_pub_sections && TREE_PUBLIC (decl)) 8703 { 8704 const char *name = dwarf2_name (decl, 1); 8705 if (name) 8706 add_pubname_string (name, die); 8707 } 8708 } 8709 8710 /* Add a new entry to .debug_pubtypes if appropriate. */ 8711 8712 static void 8713 add_pubtype (tree decl, dw_die_ref die) 8714 { 8715 pubname_entry e; 8716 8717 if (!targetm.want_debug_pub_sections) 8718 return; 8719 8720 e.name = NULL; 8721 if ((TREE_PUBLIC (decl) 8722 || is_cu_die (die->die_parent)) 8723 && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl))) 8724 { 8725 e.die = die; 8726 if (TYPE_P (decl)) 8727 { 8728 if (TYPE_NAME (decl)) 8729 { 8730 if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE) 8731 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl)); 8732 else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL 8733 && DECL_NAME (TYPE_NAME (decl))) 8734 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl))); 8735 else 8736 e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name)); 8737 } 8738 } 8739 else 8740 { 8741 e.name = dwarf2_name (decl, 1); 8742 if (e.name) 8743 e.name = xstrdup (e.name); 8744 } 8745 8746 /* If we don't have a name for the type, there's no point in adding 8747 it to the table. */ 8748 if (e.name && e.name[0] != '\0') 8749 VEC_safe_push (pubname_entry, gc, pubtype_table, &e); 8750 } 8751 } 8752 8753 /* Output the public names table used to speed up access to externally 8754 visible names; or the public types table used to find type definitions. */ 8755 8756 static void 8757 output_pubnames (VEC (pubname_entry, gc) * names) 8758 { 8759 unsigned i; 8760 unsigned long pubnames_length = size_of_pubnames (names); 8761 pubname_ref pub; 8762 8763 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4) 8764 dw2_asm_output_data (4, 0xffffffff, 8765 "Initial length escape value indicating 64-bit DWARF extension"); 8766 if (names == pubname_table) 8767 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length, 8768 "Length of Public Names Info"); 8769 else 8770 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length, 8771 "Length of Public Type Names Info"); 8772 /* Version number for pubnames/pubtypes is still 2, even in DWARF3. */ 8773 dw2_asm_output_data (2, 2, "DWARF Version"); 8774 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label, 8775 debug_info_section, 8776 "Offset of Compilation Unit Info"); 8777 dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset, 8778 "Compilation Unit Length"); 8779 8780 FOR_EACH_VEC_ELT (pubname_entry, names, i, pub) 8781 { 8782 /* We shouldn't see pubnames for DIEs outside of the main CU. */ 8783 if (names == pubname_table) 8784 gcc_assert (pub->die->die_mark); 8785 8786 if (names != pubtype_table 8787 || pub->die->die_offset != 0 8788 || !flag_eliminate_unused_debug_types) 8789 { 8790 dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset, 8791 "DIE offset"); 8792 8793 dw2_asm_output_nstring (pub->name, -1, "external name"); 8794 } 8795 } 8796 8797 dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL); 8798 } 8799 8800 /* Output the information that goes into the .debug_aranges table. 8801 Namely, define the beginning and ending address range of the 8802 text section generated for this compilation unit. */ 8803 8804 static void 8805 output_aranges (unsigned long aranges_length) 8806 { 8807 unsigned i; 8808 8809 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4) 8810 dw2_asm_output_data (4, 0xffffffff, 8811 "Initial length escape value indicating 64-bit DWARF extension"); 8812 dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length, 8813 "Length of Address Ranges Info"); 8814 /* Version number for aranges is still 2, even in DWARF3. */ 8815 dw2_asm_output_data (2, 2, "DWARF Version"); 8816 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label, 8817 debug_info_section, 8818 "Offset of Compilation Unit Info"); 8819 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address"); 8820 dw2_asm_output_data (1, 0, "Size of Segment Descriptor"); 8821 8822 /* We need to align to twice the pointer size here. */ 8823 if (DWARF_ARANGES_PAD_SIZE) 8824 { 8825 /* Pad using a 2 byte words so that padding is correct for any 8826 pointer size. */ 8827 dw2_asm_output_data (2, 0, "Pad to %d byte boundary", 8828 2 * DWARF2_ADDR_SIZE); 8829 for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2) 8830 dw2_asm_output_data (2, 0, NULL); 8831 } 8832 8833 /* It is necessary not to output these entries if the sections were 8834 not used; if the sections were not used, the length will be 0 and 8835 the address may end up as 0 if the section is discarded by ld 8836 --gc-sections, leaving an invalid (0, 0) entry that can be 8837 confused with the terminator. */ 8838 if (text_section_used) 8839 { 8840 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address"); 8841 dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label, 8842 text_section_label, "Length"); 8843 } 8844 if (cold_text_section_used) 8845 { 8846 dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label, 8847 "Address"); 8848 dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label, 8849 cold_text_section_label, "Length"); 8850 } 8851 8852 if (have_multiple_function_sections) 8853 { 8854 unsigned fde_idx; 8855 dw_fde_ref fde; 8856 8857 FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde) 8858 { 8859 if (!fde->in_std_section) 8860 { 8861 dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin, 8862 "Address"); 8863 dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_end, 8864 fde->dw_fde_begin, "Length"); 8865 } 8866 if (fde->dw_fde_second_begin && !fde->second_in_std_section) 8867 { 8868 dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_second_begin, 8869 "Address"); 8870 dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_second_end, 8871 fde->dw_fde_second_begin, "Length"); 8872 } 8873 } 8874 } 8875 8876 /* Output the terminator words. */ 8877 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL); 8878 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL); 8879 } 8880 8881 /* Add a new entry to .debug_ranges. Return the offset at which it 8882 was placed. */ 8883 8884 static unsigned int 8885 add_ranges_num (int num) 8886 { 8887 unsigned int in_use = ranges_table_in_use; 8888 8889 if (in_use == ranges_table_allocated) 8890 { 8891 ranges_table_allocated += RANGES_TABLE_INCREMENT; 8892 ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table, 8893 ranges_table_allocated); 8894 memset (ranges_table + ranges_table_in_use, 0, 8895 RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct)); 8896 } 8897 8898 ranges_table[in_use].num = num; 8899 ranges_table_in_use = in_use + 1; 8900 8901 return in_use * 2 * DWARF2_ADDR_SIZE; 8902 } 8903 8904 /* Add a new entry to .debug_ranges corresponding to a block, or a 8905 range terminator if BLOCK is NULL. */ 8906 8907 static unsigned int 8908 add_ranges (const_tree block) 8909 { 8910 return add_ranges_num (block ? BLOCK_NUMBER (block) : 0); 8911 } 8912 8913 /* Add a new entry to .debug_ranges corresponding to a pair of 8914 labels. */ 8915 8916 static void 8917 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end, 8918 bool *added) 8919 { 8920 unsigned int in_use = ranges_by_label_in_use; 8921 unsigned int offset; 8922 8923 if (in_use == ranges_by_label_allocated) 8924 { 8925 ranges_by_label_allocated += RANGES_TABLE_INCREMENT; 8926 ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct, 8927 ranges_by_label, 8928 ranges_by_label_allocated); 8929 memset (ranges_by_label + ranges_by_label_in_use, 0, 8930 RANGES_TABLE_INCREMENT 8931 * sizeof (struct dw_ranges_by_label_struct)); 8932 } 8933 8934 ranges_by_label[in_use].begin = begin; 8935 ranges_by_label[in_use].end = end; 8936 ranges_by_label_in_use = in_use + 1; 8937 8938 offset = add_ranges_num (-(int)in_use - 1); 8939 if (!*added) 8940 { 8941 add_AT_range_list (die, DW_AT_ranges, offset); 8942 *added = true; 8943 } 8944 } 8945 8946 static void 8947 output_ranges (void) 8948 { 8949 unsigned i; 8950 static const char *const start_fmt = "Offset %#x"; 8951 const char *fmt = start_fmt; 8952 8953 for (i = 0; i < ranges_table_in_use; i++) 8954 { 8955 int block_num = ranges_table[i].num; 8956 8957 if (block_num > 0) 8958 { 8959 char blabel[MAX_ARTIFICIAL_LABEL_BYTES]; 8960 char elabel[MAX_ARTIFICIAL_LABEL_BYTES]; 8961 8962 ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num); 8963 ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num); 8964 8965 /* If all code is in the text section, then the compilation 8966 unit base address defaults to DW_AT_low_pc, which is the 8967 base of the text section. */ 8968 if (!have_multiple_function_sections) 8969 { 8970 dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel, 8971 text_section_label, 8972 fmt, i * 2 * DWARF2_ADDR_SIZE); 8973 dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel, 8974 text_section_label, NULL); 8975 } 8976 8977 /* Otherwise, the compilation unit base address is zero, 8978 which allows us to use absolute addresses, and not worry 8979 about whether the target supports cross-section 8980 arithmetic. */ 8981 else 8982 { 8983 dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel, 8984 fmt, i * 2 * DWARF2_ADDR_SIZE); 8985 dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL); 8986 } 8987 8988 fmt = NULL; 8989 } 8990 8991 /* Negative block_num stands for an index into ranges_by_label. */ 8992 else if (block_num < 0) 8993 { 8994 int lab_idx = - block_num - 1; 8995 8996 if (!have_multiple_function_sections) 8997 { 8998 gcc_unreachable (); 8999 #if 0 9000 /* If we ever use add_ranges_by_labels () for a single 9001 function section, all we have to do is to take out 9002 the #if 0 above. */ 9003 dw2_asm_output_delta (DWARF2_ADDR_SIZE, 9004 ranges_by_label[lab_idx].begin, 9005 text_section_label, 9006 fmt, i * 2 * DWARF2_ADDR_SIZE); 9007 dw2_asm_output_delta (DWARF2_ADDR_SIZE, 9008 ranges_by_label[lab_idx].end, 9009 text_section_label, NULL); 9010 #endif 9011 } 9012 else 9013 { 9014 dw2_asm_output_addr (DWARF2_ADDR_SIZE, 9015 ranges_by_label[lab_idx].begin, 9016 fmt, i * 2 * DWARF2_ADDR_SIZE); 9017 dw2_asm_output_addr (DWARF2_ADDR_SIZE, 9018 ranges_by_label[lab_idx].end, 9019 NULL); 9020 } 9021 } 9022 else 9023 { 9024 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL); 9025 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL); 9026 fmt = start_fmt; 9027 } 9028 } 9029 } 9030 9031 /* Data structure containing information about input files. */ 9032 struct file_info 9033 { 9034 const char *path; /* Complete file name. */ 9035 const char *fname; /* File name part. */ 9036 int length; /* Length of entire string. */ 9037 struct dwarf_file_data * file_idx; /* Index in input file table. */ 9038 int dir_idx; /* Index in directory table. */ 9039 }; 9040 9041 /* Data structure containing information about directories with source 9042 files. */ 9043 struct dir_info 9044 { 9045 const char *path; /* Path including directory name. */ 9046 int length; /* Path length. */ 9047 int prefix; /* Index of directory entry which is a prefix. */ 9048 int count; /* Number of files in this directory. */ 9049 int dir_idx; /* Index of directory used as base. */ 9050 }; 9051 9052 /* Callback function for file_info comparison. We sort by looking at 9053 the directories in the path. */ 9054 9055 static int 9056 file_info_cmp (const void *p1, const void *p2) 9057 { 9058 const struct file_info *const s1 = (const struct file_info *) p1; 9059 const struct file_info *const s2 = (const struct file_info *) p2; 9060 const unsigned char *cp1; 9061 const unsigned char *cp2; 9062 9063 /* Take care of file names without directories. We need to make sure that 9064 we return consistent values to qsort since some will get confused if 9065 we return the same value when identical operands are passed in opposite 9066 orders. So if neither has a directory, return 0 and otherwise return 9067 1 or -1 depending on which one has the directory. */ 9068 if ((s1->path == s1->fname || s2->path == s2->fname)) 9069 return (s2->path == s2->fname) - (s1->path == s1->fname); 9070 9071 cp1 = (const unsigned char *) s1->path; 9072 cp2 = (const unsigned char *) s2->path; 9073 9074 while (1) 9075 { 9076 ++cp1; 9077 ++cp2; 9078 /* Reached the end of the first path? If so, handle like above. */ 9079 if ((cp1 == (const unsigned char *) s1->fname) 9080 || (cp2 == (const unsigned char *) s2->fname)) 9081 return ((cp2 == (const unsigned char *) s2->fname) 9082 - (cp1 == (const unsigned char *) s1->fname)); 9083 9084 /* Character of current path component the same? */ 9085 else if (*cp1 != *cp2) 9086 return *cp1 - *cp2; 9087 } 9088 } 9089 9090 struct file_name_acquire_data 9091 { 9092 struct file_info *files; 9093 int used_files; 9094 int max_files; 9095 }; 9096 9097 /* Traversal function for the hash table. */ 9098 9099 static int 9100 file_name_acquire (void ** slot, void *data) 9101 { 9102 struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data; 9103 struct dwarf_file_data *d = (struct dwarf_file_data *) *slot; 9104 struct file_info *fi; 9105 const char *f; 9106 9107 gcc_assert (fnad->max_files >= d->emitted_number); 9108 9109 if (! d->emitted_number) 9110 return 1; 9111 9112 gcc_assert (fnad->max_files != fnad->used_files); 9113 9114 fi = fnad->files + fnad->used_files++; 9115 9116 /* Skip all leading "./". */ 9117 f = d->filename; 9118 while (f[0] == '.' && IS_DIR_SEPARATOR (f[1])) 9119 f += 2; 9120 9121 /* Create a new array entry. */ 9122 fi->path = f; 9123 fi->length = strlen (f); 9124 fi->file_idx = d; 9125 9126 /* Search for the file name part. */ 9127 f = strrchr (f, DIR_SEPARATOR); 9128 #if defined (DIR_SEPARATOR_2) 9129 { 9130 char *g = strrchr (fi->path, DIR_SEPARATOR_2); 9131 9132 if (g != NULL) 9133 { 9134 if (f == NULL || f < g) 9135 f = g; 9136 } 9137 } 9138 #endif 9139 9140 fi->fname = f == NULL ? fi->path : f + 1; 9141 return 1; 9142 } 9143 9144 /* Output the directory table and the file name table. We try to minimize 9145 the total amount of memory needed. A heuristic is used to avoid large 9146 slowdowns with many input files. */ 9147 9148 static void 9149 output_file_names (void) 9150 { 9151 struct file_name_acquire_data fnad; 9152 int numfiles; 9153 struct file_info *files; 9154 struct dir_info *dirs; 9155 int *saved; 9156 int *savehere; 9157 int *backmap; 9158 int ndirs; 9159 int idx_offset; 9160 int i; 9161 9162 if (!last_emitted_file) 9163 { 9164 dw2_asm_output_data (1, 0, "End directory table"); 9165 dw2_asm_output_data (1, 0, "End file name table"); 9166 return; 9167 } 9168 9169 numfiles = last_emitted_file->emitted_number; 9170 9171 /* Allocate the various arrays we need. */ 9172 files = XALLOCAVEC (struct file_info, numfiles); 9173 dirs = XALLOCAVEC (struct dir_info, numfiles); 9174 9175 fnad.files = files; 9176 fnad.used_files = 0; 9177 fnad.max_files = numfiles; 9178 htab_traverse (file_table, file_name_acquire, &fnad); 9179 gcc_assert (fnad.used_files == fnad.max_files); 9180 9181 qsort (files, numfiles, sizeof (files[0]), file_info_cmp); 9182 9183 /* Find all the different directories used. */ 9184 dirs[0].path = files[0].path; 9185 dirs[0].length = files[0].fname - files[0].path; 9186 dirs[0].prefix = -1; 9187 dirs[0].count = 1; 9188 dirs[0].dir_idx = 0; 9189 files[0].dir_idx = 0; 9190 ndirs = 1; 9191 9192 for (i = 1; i < numfiles; i++) 9193 if (files[i].fname - files[i].path == dirs[ndirs - 1].length 9194 && memcmp (dirs[ndirs - 1].path, files[i].path, 9195 dirs[ndirs - 1].length) == 0) 9196 { 9197 /* Same directory as last entry. */ 9198 files[i].dir_idx = ndirs - 1; 9199 ++dirs[ndirs - 1].count; 9200 } 9201 else 9202 { 9203 int j; 9204 9205 /* This is a new directory. */ 9206 dirs[ndirs].path = files[i].path; 9207 dirs[ndirs].length = files[i].fname - files[i].path; 9208 dirs[ndirs].count = 1; 9209 dirs[ndirs].dir_idx = ndirs; 9210 files[i].dir_idx = ndirs; 9211 9212 /* Search for a prefix. */ 9213 dirs[ndirs].prefix = -1; 9214 for (j = 0; j < ndirs; j++) 9215 if (dirs[j].length < dirs[ndirs].length 9216 && dirs[j].length > 1 9217 && (dirs[ndirs].prefix == -1 9218 || dirs[j].length > dirs[dirs[ndirs].prefix].length) 9219 && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0) 9220 dirs[ndirs].prefix = j; 9221 9222 ++ndirs; 9223 } 9224 9225 /* Now to the actual work. We have to find a subset of the directories which 9226 allow expressing the file name using references to the directory table 9227 with the least amount of characters. We do not do an exhaustive search 9228 where we would have to check out every combination of every single 9229 possible prefix. Instead we use a heuristic which provides nearly optimal 9230 results in most cases and never is much off. */ 9231 saved = XALLOCAVEC (int, ndirs); 9232 savehere = XALLOCAVEC (int, ndirs); 9233 9234 memset (saved, '\0', ndirs * sizeof (saved[0])); 9235 for (i = 0; i < ndirs; i++) 9236 { 9237 int j; 9238 int total; 9239 9240 /* We can always save some space for the current directory. But this 9241 does not mean it will be enough to justify adding the directory. */ 9242 savehere[i] = dirs[i].length; 9243 total = (savehere[i] - saved[i]) * dirs[i].count; 9244 9245 for (j = i + 1; j < ndirs; j++) 9246 { 9247 savehere[j] = 0; 9248 if (saved[j] < dirs[i].length) 9249 { 9250 /* Determine whether the dirs[i] path is a prefix of the 9251 dirs[j] path. */ 9252 int k; 9253 9254 k = dirs[j].prefix; 9255 while (k != -1 && k != (int) i) 9256 k = dirs[k].prefix; 9257 9258 if (k == (int) i) 9259 { 9260 /* Yes it is. We can possibly save some memory by 9261 writing the filenames in dirs[j] relative to 9262 dirs[i]. */ 9263 savehere[j] = dirs[i].length; 9264 total += (savehere[j] - saved[j]) * dirs[j].count; 9265 } 9266 } 9267 } 9268 9269 /* Check whether we can save enough to justify adding the dirs[i] 9270 directory. */ 9271 if (total > dirs[i].length + 1) 9272 { 9273 /* It's worthwhile adding. */ 9274 for (j = i; j < ndirs; j++) 9275 if (savehere[j] > 0) 9276 { 9277 /* Remember how much we saved for this directory so far. */ 9278 saved[j] = savehere[j]; 9279 9280 /* Remember the prefix directory. */ 9281 dirs[j].dir_idx = i; 9282 } 9283 } 9284 } 9285 9286 /* Emit the directory name table. */ 9287 idx_offset = dirs[0].length > 0 ? 1 : 0; 9288 for (i = 1 - idx_offset; i < ndirs; i++) 9289 dw2_asm_output_nstring (dirs[i].path, 9290 dirs[i].length 9291 - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR, 9292 "Directory Entry: %#x", i + idx_offset); 9293 9294 dw2_asm_output_data (1, 0, "End directory table"); 9295 9296 /* We have to emit them in the order of emitted_number since that's 9297 used in the debug info generation. To do this efficiently we 9298 generate a back-mapping of the indices first. */ 9299 backmap = XALLOCAVEC (int, numfiles); 9300 for (i = 0; i < numfiles; i++) 9301 backmap[files[i].file_idx->emitted_number - 1] = i; 9302 9303 /* Now write all the file names. */ 9304 for (i = 0; i < numfiles; i++) 9305 { 9306 int file_idx = backmap[i]; 9307 int dir_idx = dirs[files[file_idx].dir_idx].dir_idx; 9308 9309 #ifdef VMS_DEBUGGING_INFO 9310 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */ 9311 9312 /* Setting these fields can lead to debugger miscomparisons, 9313 but VMS Debug requires them to be set correctly. */ 9314 9315 int ver; 9316 long long cdt; 9317 long siz; 9318 int maxfilelen = strlen (files[file_idx].path) 9319 + dirs[dir_idx].length 9320 + MAX_VMS_VERSION_LEN + 1; 9321 char *filebuf = XALLOCAVEC (char, maxfilelen); 9322 9323 vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver); 9324 snprintf (filebuf, maxfilelen, "%s;%d", 9325 files[file_idx].path + dirs[dir_idx].length, ver); 9326 9327 dw2_asm_output_nstring 9328 (filebuf, -1, "File Entry: %#x", (unsigned) i + 1); 9329 9330 /* Include directory index. */ 9331 dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL); 9332 9333 /* Modification time. */ 9334 dw2_asm_output_data_uleb128 9335 ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0) 9336 ? cdt : 0, 9337 NULL); 9338 9339 /* File length in bytes. */ 9340 dw2_asm_output_data_uleb128 9341 ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0) 9342 ? siz : 0, 9343 NULL); 9344 #else 9345 dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1, 9346 "File Entry: %#x", (unsigned) i + 1); 9347 9348 /* Include directory index. */ 9349 dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL); 9350 9351 /* Modification time. */ 9352 dw2_asm_output_data_uleb128 (0, NULL); 9353 9354 /* File length in bytes. */ 9355 dw2_asm_output_data_uleb128 (0, NULL); 9356 #endif /* VMS_DEBUGGING_INFO */ 9357 } 9358 9359 dw2_asm_output_data (1, 0, "End file name table"); 9360 } 9361 9362 9363 /* Output one line number table into the .debug_line section. */ 9364 9365 static void 9366 output_one_line_info_table (dw_line_info_table *table) 9367 { 9368 char line_label[MAX_ARTIFICIAL_LABEL_BYTES]; 9369 unsigned int current_line = 1; 9370 bool current_is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START; 9371 dw_line_info_entry *ent; 9372 size_t i; 9373 9374 FOR_EACH_VEC_ELT (dw_line_info_entry, table->entries, i, ent) 9375 { 9376 switch (ent->opcode) 9377 { 9378 case LI_set_address: 9379 /* ??? Unfortunately, we have little choice here currently, and 9380 must always use the most general form. GCC does not know the 9381 address delta itself, so we can't use DW_LNS_advance_pc. Many 9382 ports do have length attributes which will give an upper bound 9383 on the address range. We could perhaps use length attributes 9384 to determine when it is safe to use DW_LNS_fixed_advance_pc. */ 9385 ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, ent->val); 9386 9387 /* This can handle any delta. This takes 9388 4+DWARF2_ADDR_SIZE bytes. */ 9389 dw2_asm_output_data (1, 0, "set address %s", line_label); 9390 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL); 9391 dw2_asm_output_data (1, DW_LNE_set_address, NULL); 9392 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL); 9393 break; 9394 9395 case LI_set_line: 9396 if (ent->val == current_line) 9397 { 9398 /* We still need to start a new row, so output a copy insn. */ 9399 dw2_asm_output_data (1, DW_LNS_copy, 9400 "copy line %u", current_line); 9401 } 9402 else 9403 { 9404 int line_offset = ent->val - current_line; 9405 int line_delta = line_offset - DWARF_LINE_BASE; 9406 9407 current_line = ent->val; 9408 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1)) 9409 { 9410 /* This can handle deltas from -10 to 234, using the current 9411 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE. 9412 This takes 1 byte. */ 9413 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta, 9414 "line %u", current_line); 9415 } 9416 else 9417 { 9418 /* This can handle any delta. This takes at least 4 bytes, 9419 depending on the value being encoded. */ 9420 dw2_asm_output_data (1, DW_LNS_advance_line, 9421 "advance to line %u", current_line); 9422 dw2_asm_output_data_sleb128 (line_offset, NULL); 9423 dw2_asm_output_data (1, DW_LNS_copy, NULL); 9424 } 9425 } 9426 break; 9427 9428 case LI_set_file: 9429 dw2_asm_output_data (1, DW_LNS_set_file, "set file %u", ent->val); 9430 dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val); 9431 break; 9432 9433 case LI_set_column: 9434 dw2_asm_output_data (1, DW_LNS_set_column, "column %u", ent->val); 9435 dw2_asm_output_data_uleb128 (ent->val, "%u", ent->val); 9436 break; 9437 9438 case LI_negate_stmt: 9439 current_is_stmt = !current_is_stmt; 9440 dw2_asm_output_data (1, DW_LNS_negate_stmt, 9441 "is_stmt %d", current_is_stmt); 9442 break; 9443 9444 case LI_set_prologue_end: 9445 dw2_asm_output_data (1, DW_LNS_set_prologue_end, 9446 "set prologue end"); 9447 break; 9448 9449 case LI_set_epilogue_begin: 9450 dw2_asm_output_data (1, DW_LNS_set_epilogue_begin, 9451 "set epilogue begin"); 9452 break; 9453 9454 case LI_set_discriminator: 9455 dw2_asm_output_data (1, 0, "discriminator %u", ent->val); 9456 dw2_asm_output_data_uleb128 (1 + size_of_uleb128 (ent->val), NULL); 9457 dw2_asm_output_data (1, DW_LNE_set_discriminator, NULL); 9458 dw2_asm_output_data_uleb128 (ent->val, NULL); 9459 break; 9460 } 9461 } 9462 9463 /* Emit debug info for the address of the end of the table. */ 9464 dw2_asm_output_data (1, 0, "set address %s", table->end_label); 9465 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL); 9466 dw2_asm_output_data (1, DW_LNE_set_address, NULL); 9467 dw2_asm_output_addr (DWARF2_ADDR_SIZE, table->end_label, NULL); 9468 9469 dw2_asm_output_data (1, 0, "end sequence"); 9470 dw2_asm_output_data_uleb128 (1, NULL); 9471 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL); 9472 } 9473 9474 /* Output the source line number correspondence information. This 9475 information goes into the .debug_line section. */ 9476 9477 static void 9478 output_line_info (void) 9479 { 9480 char l1[20], l2[20], p1[20], p2[20]; 9481 int ver = dwarf_version; 9482 bool saw_one = false; 9483 int opc; 9484 9485 ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0); 9486 ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0); 9487 ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0); 9488 ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0); 9489 9490 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4) 9491 dw2_asm_output_data (4, 0xffffffff, 9492 "Initial length escape value indicating 64-bit DWARF extension"); 9493 dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1, 9494 "Length of Source Line Info"); 9495 ASM_OUTPUT_LABEL (asm_out_file, l1); 9496 9497 dw2_asm_output_data (2, ver, "DWARF Version"); 9498 dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length"); 9499 ASM_OUTPUT_LABEL (asm_out_file, p1); 9500 9501 /* Define the architecture-dependent minimum instruction length (in bytes). 9502 In this implementation of DWARF, this field is used for information 9503 purposes only. Since GCC generates assembly language, we have no 9504 a priori knowledge of how many instruction bytes are generated for each 9505 source line, and therefore can use only the DW_LNE_set_address and 9506 DW_LNS_fixed_advance_pc line information commands. Accordingly, we fix 9507 this as '1', which is "correct enough" for all architectures, 9508 and don't let the target override. */ 9509 dw2_asm_output_data (1, 1, "Minimum Instruction Length"); 9510 9511 if (ver >= 4) 9512 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN, 9513 "Maximum Operations Per Instruction"); 9514 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START, 9515 "Default is_stmt_start flag"); 9516 dw2_asm_output_data (1, DWARF_LINE_BASE, 9517 "Line Base Value (Special Opcodes)"); 9518 dw2_asm_output_data (1, DWARF_LINE_RANGE, 9519 "Line Range Value (Special Opcodes)"); 9520 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE, 9521 "Special Opcode Base"); 9522 9523 for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++) 9524 { 9525 int n_op_args; 9526 switch (opc) 9527 { 9528 case DW_LNS_advance_pc: 9529 case DW_LNS_advance_line: 9530 case DW_LNS_set_file: 9531 case DW_LNS_set_column: 9532 case DW_LNS_fixed_advance_pc: 9533 case DW_LNS_set_isa: 9534 n_op_args = 1; 9535 break; 9536 default: 9537 n_op_args = 0; 9538 break; 9539 } 9540 9541 dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args", 9542 opc, n_op_args); 9543 } 9544 9545 /* Write out the information about the files we use. */ 9546 output_file_names (); 9547 ASM_OUTPUT_LABEL (asm_out_file, p2); 9548 9549 if (separate_line_info) 9550 { 9551 dw_line_info_table *table; 9552 size_t i; 9553 9554 FOR_EACH_VEC_ELT (dw_line_info_table_p, separate_line_info, i, table) 9555 if (table->in_use) 9556 { 9557 output_one_line_info_table (table); 9558 saw_one = true; 9559 } 9560 } 9561 if (cold_text_section_line_info && cold_text_section_line_info->in_use) 9562 { 9563 output_one_line_info_table (cold_text_section_line_info); 9564 saw_one = true; 9565 } 9566 9567 /* ??? Some Darwin linkers crash on a .debug_line section with no 9568 sequences. Further, merely a DW_LNE_end_sequence entry is not 9569 sufficient -- the address column must also be initialized. 9570 Make sure to output at least one set_address/end_sequence pair, 9571 choosing .text since that section is always present. */ 9572 if (text_section_line_info->in_use || !saw_one) 9573 output_one_line_info_table (text_section_line_info); 9574 9575 /* Output the marker for the end of the line number info. */ 9576 ASM_OUTPUT_LABEL (asm_out_file, l2); 9577 } 9578 9579 /* Given a pointer to a tree node for some base type, return a pointer to 9580 a DIE that describes the given type. 9581 9582 This routine must only be called for GCC type nodes that correspond to 9583 Dwarf base (fundamental) types. */ 9584 9585 static dw_die_ref 9586 base_type_die (tree type) 9587 { 9588 dw_die_ref base_type_result; 9589 enum dwarf_type encoding; 9590 9591 if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE) 9592 return 0; 9593 9594 /* If this is a subtype that should not be emitted as a subrange type, 9595 use the base type. See subrange_type_for_debug_p. */ 9596 if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE) 9597 type = TREE_TYPE (type); 9598 9599 switch (TREE_CODE (type)) 9600 { 9601 case INTEGER_TYPE: 9602 if ((dwarf_version >= 4 || !dwarf_strict) 9603 && TYPE_NAME (type) 9604 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL 9605 && DECL_IS_BUILTIN (TYPE_NAME (type)) 9606 && DECL_NAME (TYPE_NAME (type))) 9607 { 9608 const char *name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); 9609 if (strcmp (name, "char16_t") == 0 9610 || strcmp (name, "char32_t") == 0) 9611 { 9612 encoding = DW_ATE_UTF; 9613 break; 9614 } 9615 } 9616 if (TYPE_STRING_FLAG (type)) 9617 { 9618 if (TYPE_UNSIGNED (type)) 9619 encoding = DW_ATE_unsigned_char; 9620 else 9621 encoding = DW_ATE_signed_char; 9622 } 9623 else if (TYPE_UNSIGNED (type)) 9624 encoding = DW_ATE_unsigned; 9625 else 9626 encoding = DW_ATE_signed; 9627 break; 9628 9629 case REAL_TYPE: 9630 if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type))) 9631 { 9632 if (dwarf_version >= 3 || !dwarf_strict) 9633 encoding = DW_ATE_decimal_float; 9634 else 9635 encoding = DW_ATE_lo_user; 9636 } 9637 else 9638 encoding = DW_ATE_float; 9639 break; 9640 9641 case FIXED_POINT_TYPE: 9642 if (!(dwarf_version >= 3 || !dwarf_strict)) 9643 encoding = DW_ATE_lo_user; 9644 else if (TYPE_UNSIGNED (type)) 9645 encoding = DW_ATE_unsigned_fixed; 9646 else 9647 encoding = DW_ATE_signed_fixed; 9648 break; 9649 9650 /* Dwarf2 doesn't know anything about complex ints, so use 9651 a user defined type for it. */ 9652 case COMPLEX_TYPE: 9653 if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE) 9654 encoding = DW_ATE_complex_float; 9655 else 9656 encoding = DW_ATE_lo_user; 9657 break; 9658 9659 case BOOLEAN_TYPE: 9660 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */ 9661 encoding = DW_ATE_boolean; 9662 break; 9663 9664 default: 9665 /* No other TREE_CODEs are Dwarf fundamental types. */ 9666 gcc_unreachable (); 9667 } 9668 9669 base_type_result = new_die (DW_TAG_base_type, comp_unit_die (), type); 9670 9671 add_AT_unsigned (base_type_result, DW_AT_byte_size, 9672 int_size_in_bytes (type)); 9673 add_AT_unsigned (base_type_result, DW_AT_encoding, encoding); 9674 9675 return base_type_result; 9676 } 9677 9678 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the 9679 given input type is a Dwarf "fundamental" type. Otherwise return null. */ 9680 9681 static inline int 9682 is_base_type (tree type) 9683 { 9684 switch (TREE_CODE (type)) 9685 { 9686 case ERROR_MARK: 9687 case VOID_TYPE: 9688 case INTEGER_TYPE: 9689 case REAL_TYPE: 9690 case FIXED_POINT_TYPE: 9691 case COMPLEX_TYPE: 9692 case BOOLEAN_TYPE: 9693 return 1; 9694 9695 case ARRAY_TYPE: 9696 case RECORD_TYPE: 9697 case UNION_TYPE: 9698 case QUAL_UNION_TYPE: 9699 case ENUMERAL_TYPE: 9700 case FUNCTION_TYPE: 9701 case METHOD_TYPE: 9702 case POINTER_TYPE: 9703 case REFERENCE_TYPE: 9704 case NULLPTR_TYPE: 9705 case OFFSET_TYPE: 9706 case LANG_TYPE: 9707 case VECTOR_TYPE: 9708 return 0; 9709 9710 default: 9711 gcc_unreachable (); 9712 } 9713 9714 return 0; 9715 } 9716 9717 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE 9718 node, return the size in bits for the type if it is a constant, or else 9719 return the alignment for the type if the type's size is not constant, or 9720 else return BITS_PER_WORD if the type actually turns out to be an 9721 ERROR_MARK node. */ 9722 9723 static inline unsigned HOST_WIDE_INT 9724 simple_type_size_in_bits (const_tree type) 9725 { 9726 if (TREE_CODE (type) == ERROR_MARK) 9727 return BITS_PER_WORD; 9728 else if (TYPE_SIZE (type) == NULL_TREE) 9729 return 0; 9730 else if (host_integerp (TYPE_SIZE (type), 1)) 9731 return tree_low_cst (TYPE_SIZE (type), 1); 9732 else 9733 return TYPE_ALIGN (type); 9734 } 9735 9736 /* Similarly, but return a double_int instead of UHWI. */ 9737 9738 static inline double_int 9739 double_int_type_size_in_bits (const_tree type) 9740 { 9741 if (TREE_CODE (type) == ERROR_MARK) 9742 return uhwi_to_double_int (BITS_PER_WORD); 9743 else if (TYPE_SIZE (type) == NULL_TREE) 9744 return double_int_zero; 9745 else if (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST) 9746 return tree_to_double_int (TYPE_SIZE (type)); 9747 else 9748 return uhwi_to_double_int (TYPE_ALIGN (type)); 9749 } 9750 9751 /* Given a pointer to a tree node for a subrange type, return a pointer 9752 to a DIE that describes the given type. */ 9753 9754 static dw_die_ref 9755 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die) 9756 { 9757 dw_die_ref subrange_die; 9758 const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type); 9759 9760 if (context_die == NULL) 9761 context_die = comp_unit_die (); 9762 9763 subrange_die = new_die (DW_TAG_subrange_type, context_die, type); 9764 9765 if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes) 9766 { 9767 /* The size of the subrange type and its base type do not match, 9768 so we need to generate a size attribute for the subrange type. */ 9769 add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes); 9770 } 9771 9772 if (low) 9773 add_bound_info (subrange_die, DW_AT_lower_bound, low); 9774 if (high) 9775 add_bound_info (subrange_die, DW_AT_upper_bound, high); 9776 9777 return subrange_die; 9778 } 9779 9780 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging 9781 entry that chains various modifiers in front of the given type. */ 9782 9783 static dw_die_ref 9784 modified_type_die (tree type, int is_const_type, int is_volatile_type, 9785 dw_die_ref context_die) 9786 { 9787 enum tree_code code = TREE_CODE (type); 9788 dw_die_ref mod_type_die; 9789 dw_die_ref sub_die = NULL; 9790 tree item_type = NULL; 9791 tree qualified_type; 9792 tree name, low, high; 9793 dw_die_ref mod_scope; 9794 9795 if (code == ERROR_MARK) 9796 return NULL; 9797 9798 /* See if we already have the appropriately qualified variant of 9799 this type. */ 9800 qualified_type 9801 = get_qualified_type (type, 9802 ((is_const_type ? TYPE_QUAL_CONST : 0) 9803 | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0))); 9804 9805 if (qualified_type == sizetype 9806 && TYPE_NAME (qualified_type) 9807 && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL) 9808 { 9809 tree t = TREE_TYPE (TYPE_NAME (qualified_type)); 9810 9811 gcc_checking_assert (TREE_CODE (t) == INTEGER_TYPE 9812 && TYPE_PRECISION (t) 9813 == TYPE_PRECISION (qualified_type) 9814 && TYPE_UNSIGNED (t) 9815 == TYPE_UNSIGNED (qualified_type)); 9816 qualified_type = t; 9817 } 9818 9819 /* If we do, then we can just use its DIE, if it exists. */ 9820 if (qualified_type) 9821 { 9822 mod_type_die = lookup_type_die (qualified_type); 9823 if (mod_type_die) 9824 return mod_type_die; 9825 } 9826 9827 name = qualified_type ? TYPE_NAME (qualified_type) : NULL; 9828 9829 /* Handle C typedef types. */ 9830 if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name) 9831 && !DECL_ARTIFICIAL (name)) 9832 { 9833 tree dtype = TREE_TYPE (name); 9834 9835 if (qualified_type == dtype) 9836 { 9837 /* For a named type, use the typedef. */ 9838 gen_type_die (qualified_type, context_die); 9839 return lookup_type_die (qualified_type); 9840 } 9841 else if (is_const_type < TYPE_READONLY (dtype) 9842 || is_volatile_type < TYPE_VOLATILE (dtype) 9843 || (is_const_type <= TYPE_READONLY (dtype) 9844 && is_volatile_type <= TYPE_VOLATILE (dtype) 9845 && DECL_ORIGINAL_TYPE (name) != type)) 9846 /* cv-unqualified version of named type. Just use the unnamed 9847 type to which it refers. */ 9848 return modified_type_die (DECL_ORIGINAL_TYPE (name), 9849 is_const_type, is_volatile_type, 9850 context_die); 9851 /* Else cv-qualified version of named type; fall through. */ 9852 } 9853 9854 mod_scope = scope_die_for (type, context_die); 9855 9856 if (is_const_type 9857 /* If both is_const_type and is_volatile_type, prefer the path 9858 which leads to a qualified type. */ 9859 && (!is_volatile_type 9860 || get_qualified_type (type, TYPE_QUAL_CONST) == NULL_TREE 9861 || get_qualified_type (type, TYPE_QUAL_VOLATILE) != NULL_TREE)) 9862 { 9863 mod_type_die = new_die (DW_TAG_const_type, mod_scope, type); 9864 sub_die = modified_type_die (type, 0, is_volatile_type, context_die); 9865 } 9866 else if (is_volatile_type) 9867 { 9868 mod_type_die = new_die (DW_TAG_volatile_type, mod_scope, type); 9869 sub_die = modified_type_die (type, is_const_type, 0, context_die); 9870 } 9871 else if (code == POINTER_TYPE) 9872 { 9873 mod_type_die = new_die (DW_TAG_pointer_type, mod_scope, type); 9874 add_AT_unsigned (mod_type_die, DW_AT_byte_size, 9875 simple_type_size_in_bits (type) / BITS_PER_UNIT); 9876 item_type = TREE_TYPE (type); 9877 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type))) 9878 add_AT_unsigned (mod_type_die, DW_AT_address_class, 9879 TYPE_ADDR_SPACE (item_type)); 9880 } 9881 else if (code == REFERENCE_TYPE) 9882 { 9883 if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4) 9884 mod_type_die = new_die (DW_TAG_rvalue_reference_type, mod_scope, 9885 type); 9886 else 9887 mod_type_die = new_die (DW_TAG_reference_type, mod_scope, type); 9888 add_AT_unsigned (mod_type_die, DW_AT_byte_size, 9889 simple_type_size_in_bits (type) / BITS_PER_UNIT); 9890 item_type = TREE_TYPE (type); 9891 if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type))) 9892 add_AT_unsigned (mod_type_die, DW_AT_address_class, 9893 TYPE_ADDR_SPACE (item_type)); 9894 } 9895 else if (code == INTEGER_TYPE 9896 && TREE_TYPE (type) != NULL_TREE 9897 && subrange_type_for_debug_p (type, &low, &high)) 9898 { 9899 mod_type_die = subrange_type_die (type, low, high, context_die); 9900 item_type = TREE_TYPE (type); 9901 } 9902 else if (is_base_type (type)) 9903 mod_type_die = base_type_die (type); 9904 else 9905 { 9906 gen_type_die (type, context_die); 9907 9908 /* We have to get the type_main_variant here (and pass that to the 9909 `lookup_type_die' routine) because the ..._TYPE node we have 9910 might simply be a *copy* of some original type node (where the 9911 copy was created to help us keep track of typedef names) and 9912 that copy might have a different TYPE_UID from the original 9913 ..._TYPE node. */ 9914 if (TREE_CODE (type) != VECTOR_TYPE) 9915 return lookup_type_die (type_main_variant (type)); 9916 else 9917 /* Vectors have the debugging information in the type, 9918 not the main variant. */ 9919 return lookup_type_die (type); 9920 } 9921 9922 /* Builtin types don't have a DECL_ORIGINAL_TYPE. For those, 9923 don't output a DW_TAG_typedef, since there isn't one in the 9924 user's program; just attach a DW_AT_name to the type. 9925 Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type 9926 if the base type already has the same name. */ 9927 if (name 9928 && ((TREE_CODE (name) != TYPE_DECL 9929 && (qualified_type == TYPE_MAIN_VARIANT (type) 9930 || (!is_const_type && !is_volatile_type))) 9931 || (TREE_CODE (name) == TYPE_DECL 9932 && TREE_TYPE (name) == qualified_type 9933 && DECL_NAME (name)))) 9934 { 9935 if (TREE_CODE (name) == TYPE_DECL) 9936 /* Could just call add_name_and_src_coords_attributes here, 9937 but since this is a builtin type it doesn't have any 9938 useful source coordinates anyway. */ 9939 name = DECL_NAME (name); 9940 add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name)); 9941 } 9942 /* This probably indicates a bug. */ 9943 else if (mod_type_die && mod_type_die->die_tag == DW_TAG_base_type) 9944 { 9945 name = TYPE_NAME (type); 9946 if (name 9947 && TREE_CODE (name) == TYPE_DECL) 9948 name = DECL_NAME (name); 9949 add_name_attribute (mod_type_die, 9950 name ? IDENTIFIER_POINTER (name) : "__unknown__"); 9951 } 9952 9953 if (qualified_type) 9954 equate_type_number_to_die (qualified_type, mod_type_die); 9955 9956 if (item_type) 9957 /* We must do this after the equate_type_number_to_die call, in case 9958 this is a recursive type. This ensures that the modified_type_die 9959 recursion will terminate even if the type is recursive. Recursive 9960 types are possible in Ada. */ 9961 sub_die = modified_type_die (item_type, 9962 TYPE_READONLY (item_type), 9963 TYPE_VOLATILE (item_type), 9964 context_die); 9965 9966 if (sub_die != NULL) 9967 add_AT_die_ref (mod_type_die, DW_AT_type, sub_die); 9968 9969 add_gnat_descriptive_type_attribute (mod_type_die, type, context_die); 9970 if (TYPE_ARTIFICIAL (type)) 9971 add_AT_flag (mod_type_die, DW_AT_artificial, 1); 9972 9973 return mod_type_die; 9974 } 9975 9976 /* Generate DIEs for the generic parameters of T. 9977 T must be either a generic type or a generic function. 9978 See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more. */ 9979 9980 static void 9981 gen_generic_params_dies (tree t) 9982 { 9983 tree parms, args; 9984 int parms_num, i; 9985 dw_die_ref die = NULL; 9986 9987 if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t))) 9988 return; 9989 9990 if (TYPE_P (t)) 9991 die = lookup_type_die (t); 9992 else if (DECL_P (t)) 9993 die = lookup_decl_die (t); 9994 9995 gcc_assert (die); 9996 9997 parms = lang_hooks.get_innermost_generic_parms (t); 9998 if (!parms) 9999 /* T has no generic parameter. It means T is neither a generic type 10000 or function. End of story. */ 10001 return; 10002 10003 parms_num = TREE_VEC_LENGTH (parms); 10004 args = lang_hooks.get_innermost_generic_args (t); 10005 for (i = 0; i < parms_num; i++) 10006 { 10007 tree parm, arg, arg_pack_elems; 10008 10009 parm = TREE_VEC_ELT (parms, i); 10010 arg = TREE_VEC_ELT (args, i); 10011 arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg); 10012 gcc_assert (parm && TREE_VALUE (parm) && arg); 10013 10014 if (parm && TREE_VALUE (parm) && arg) 10015 { 10016 /* If PARM represents a template parameter pack, 10017 emit a DW_TAG_GNU_template_parameter_pack DIE, followed 10018 by DW_TAG_template_*_parameter DIEs for the argument 10019 pack elements of ARG. Note that ARG would then be 10020 an argument pack. */ 10021 if (arg_pack_elems) 10022 template_parameter_pack_die (TREE_VALUE (parm), 10023 arg_pack_elems, 10024 die); 10025 else 10026 generic_parameter_die (TREE_VALUE (parm), arg, 10027 true /* Emit DW_AT_name */, die); 10028 } 10029 } 10030 } 10031 10032 /* Create and return a DIE for PARM which should be 10033 the representation of a generic type parameter. 10034 For instance, in the C++ front end, PARM would be a template parameter. 10035 ARG is the argument to PARM. 10036 EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the 10037 name of the PARM. 10038 PARENT_DIE is the parent DIE which the new created DIE should be added to, 10039 as a child node. */ 10040 10041 static dw_die_ref 10042 generic_parameter_die (tree parm, tree arg, 10043 bool emit_name_p, 10044 dw_die_ref parent_die) 10045 { 10046 dw_die_ref tmpl_die = NULL; 10047 const char *name = NULL; 10048 10049 if (!parm || !DECL_NAME (parm) || !arg) 10050 return NULL; 10051 10052 /* We support non-type generic parameters and arguments, 10053 type generic parameters and arguments, as well as 10054 generic generic parameters (a.k.a. template template parameters in C++) 10055 and arguments. */ 10056 if (TREE_CODE (parm) == PARM_DECL) 10057 /* PARM is a nontype generic parameter */ 10058 tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm); 10059 else if (TREE_CODE (parm) == TYPE_DECL) 10060 /* PARM is a type generic parameter. */ 10061 tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm); 10062 else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm)) 10063 /* PARM is a generic generic parameter. 10064 Its DIE is a GNU extension. It shall have a 10065 DW_AT_name attribute to represent the name of the template template 10066 parameter, and a DW_AT_GNU_template_name attribute to represent the 10067 name of the template template argument. */ 10068 tmpl_die = new_die (DW_TAG_GNU_template_template_param, 10069 parent_die, parm); 10070 else 10071 gcc_unreachable (); 10072 10073 if (tmpl_die) 10074 { 10075 tree tmpl_type; 10076 10077 /* If PARM is a generic parameter pack, it means we are 10078 emitting debug info for a template argument pack element. 10079 In other terms, ARG is a template argument pack element. 10080 In that case, we don't emit any DW_AT_name attribute for 10081 the die. */ 10082 if (emit_name_p) 10083 { 10084 name = IDENTIFIER_POINTER (DECL_NAME (parm)); 10085 gcc_assert (name); 10086 add_AT_string (tmpl_die, DW_AT_name, name); 10087 } 10088 10089 if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm)) 10090 { 10091 /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter 10092 TMPL_DIE should have a child DW_AT_type attribute that is set 10093 to the type of the argument to PARM, which is ARG. 10094 If PARM is a type generic parameter, TMPL_DIE should have a 10095 child DW_AT_type that is set to ARG. */ 10096 tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg); 10097 add_type_attribute (tmpl_die, tmpl_type, 0, 10098 TREE_THIS_VOLATILE (tmpl_type), 10099 parent_die); 10100 } 10101 else 10102 { 10103 /* So TMPL_DIE is a DIE representing a 10104 a generic generic template parameter, a.k.a template template 10105 parameter in C++ and arg is a template. */ 10106 10107 /* The DW_AT_GNU_template_name attribute of the DIE must be set 10108 to the name of the argument. */ 10109 name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1); 10110 if (name) 10111 add_AT_string (tmpl_die, DW_AT_GNU_template_name, name); 10112 } 10113 10114 if (TREE_CODE (parm) == PARM_DECL) 10115 /* So PARM is a non-type generic parameter. 10116 DWARF3 5.6.8 says we must set a DW_AT_const_value child 10117 attribute of TMPL_DIE which value represents the value 10118 of ARG. 10119 We must be careful here: 10120 The value of ARG might reference some function decls. 10121 We might currently be emitting debug info for a generic 10122 type and types are emitted before function decls, we don't 10123 know if the function decls referenced by ARG will actually be 10124 emitted after cgraph computations. 10125 So must defer the generation of the DW_AT_const_value to 10126 after cgraph is ready. */ 10127 append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg); 10128 } 10129 10130 return tmpl_die; 10131 } 10132 10133 /* Generate and return a DW_TAG_GNU_template_parameter_pack DIE representing. 10134 PARM_PACK must be a template parameter pack. The returned DIE 10135 will be child DIE of PARENT_DIE. */ 10136 10137 static dw_die_ref 10138 template_parameter_pack_die (tree parm_pack, 10139 tree parm_pack_args, 10140 dw_die_ref parent_die) 10141 { 10142 dw_die_ref die; 10143 int j; 10144 10145 gcc_assert (parent_die && parm_pack); 10146 10147 die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack); 10148 add_name_and_src_coords_attributes (die, parm_pack); 10149 for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++) 10150 generic_parameter_die (parm_pack, 10151 TREE_VEC_ELT (parm_pack_args, j), 10152 false /* Don't emit DW_AT_name */, 10153 die); 10154 return die; 10155 } 10156 10157 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is 10158 an enumerated type. */ 10159 10160 static inline int 10161 type_is_enum (const_tree type) 10162 { 10163 return TREE_CODE (type) == ENUMERAL_TYPE; 10164 } 10165 10166 /* Return the DBX register number described by a given RTL node. */ 10167 10168 static unsigned int 10169 dbx_reg_number (const_rtx rtl) 10170 { 10171 unsigned regno = REGNO (rtl); 10172 10173 gcc_assert (regno < FIRST_PSEUDO_REGISTER); 10174 10175 #ifdef LEAF_REG_REMAP 10176 if (current_function_uses_only_leaf_regs) 10177 { 10178 int leaf_reg = LEAF_REG_REMAP (regno); 10179 if (leaf_reg != -1) 10180 regno = (unsigned) leaf_reg; 10181 } 10182 #endif 10183 10184 return DBX_REGISTER_NUMBER (regno); 10185 } 10186 10187 /* Optionally add a DW_OP_piece term to a location description expression. 10188 DW_OP_piece is only added if the location description expression already 10189 doesn't end with DW_OP_piece. */ 10190 10191 static void 10192 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size) 10193 { 10194 dw_loc_descr_ref loc; 10195 10196 if (*list_head != NULL) 10197 { 10198 /* Find the end of the chain. */ 10199 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next) 10200 ; 10201 10202 if (loc->dw_loc_opc != DW_OP_piece) 10203 loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0); 10204 } 10205 } 10206 10207 /* Return a location descriptor that designates a machine register or 10208 zero if there is none. */ 10209 10210 static dw_loc_descr_ref 10211 reg_loc_descriptor (rtx rtl, enum var_init_status initialized) 10212 { 10213 rtx regs; 10214 10215 if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER) 10216 return 0; 10217 10218 /* We only use "frame base" when we're sure we're talking about the 10219 post-prologue local stack frame. We do this by *not* running 10220 register elimination until this point, and recognizing the special 10221 argument pointer and soft frame pointer rtx's. 10222 Use DW_OP_fbreg offset DW_OP_stack_value in this case. */ 10223 if ((rtl == arg_pointer_rtx || rtl == frame_pointer_rtx) 10224 && eliminate_regs (rtl, VOIDmode, NULL_RTX) != rtl) 10225 { 10226 dw_loc_descr_ref result = NULL; 10227 10228 if (dwarf_version >= 4 || !dwarf_strict) 10229 { 10230 result = mem_loc_descriptor (rtl, GET_MODE (rtl), VOIDmode, 10231 initialized); 10232 if (result) 10233 add_loc_descr (&result, 10234 new_loc_descr (DW_OP_stack_value, 0, 0)); 10235 } 10236 return result; 10237 } 10238 10239 regs = targetm.dwarf_register_span (rtl); 10240 10241 if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs) 10242 return multiple_reg_loc_descriptor (rtl, regs, initialized); 10243 else 10244 return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized); 10245 } 10246 10247 /* Return a location descriptor that designates a machine register for 10248 a given hard register number. */ 10249 10250 static dw_loc_descr_ref 10251 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized) 10252 { 10253 dw_loc_descr_ref reg_loc_descr; 10254 10255 if (regno <= 31) 10256 reg_loc_descr 10257 = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0); 10258 else 10259 reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0); 10260 10261 if (initialized == VAR_INIT_STATUS_UNINITIALIZED) 10262 add_loc_descr (®_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0)); 10263 10264 return reg_loc_descr; 10265 } 10266 10267 /* Given an RTL of a register, return a location descriptor that 10268 designates a value that spans more than one register. */ 10269 10270 static dw_loc_descr_ref 10271 multiple_reg_loc_descriptor (rtx rtl, rtx regs, 10272 enum var_init_status initialized) 10273 { 10274 int nregs, size, i; 10275 unsigned reg; 10276 dw_loc_descr_ref loc_result = NULL; 10277 10278 reg = REGNO (rtl); 10279 #ifdef LEAF_REG_REMAP 10280 if (current_function_uses_only_leaf_regs) 10281 { 10282 int leaf_reg = LEAF_REG_REMAP (reg); 10283 if (leaf_reg != -1) 10284 reg = (unsigned) leaf_reg; 10285 } 10286 #endif 10287 gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl)); 10288 nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)]; 10289 10290 /* Simple, contiguous registers. */ 10291 if (regs == NULL_RTX) 10292 { 10293 size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs; 10294 10295 loc_result = NULL; 10296 while (nregs--) 10297 { 10298 dw_loc_descr_ref t; 10299 10300 t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg), 10301 VAR_INIT_STATUS_INITIALIZED); 10302 add_loc_descr (&loc_result, t); 10303 add_loc_descr_op_piece (&loc_result, size); 10304 ++reg; 10305 } 10306 return loc_result; 10307 } 10308 10309 /* Now onto stupid register sets in non contiguous locations. */ 10310 10311 gcc_assert (GET_CODE (regs) == PARALLEL); 10312 10313 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0))); 10314 loc_result = NULL; 10315 10316 for (i = 0; i < XVECLEN (regs, 0); ++i) 10317 { 10318 dw_loc_descr_ref t; 10319 10320 t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)), 10321 VAR_INIT_STATUS_INITIALIZED); 10322 add_loc_descr (&loc_result, t); 10323 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0))); 10324 add_loc_descr_op_piece (&loc_result, size); 10325 } 10326 10327 if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED) 10328 add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0)); 10329 return loc_result; 10330 } 10331 10332 static unsigned long size_of_int_loc_descriptor (HOST_WIDE_INT); 10333 10334 /* Return a location descriptor that designates a constant i, 10335 as a compound operation from constant (i >> shift), constant shift 10336 and DW_OP_shl. */ 10337 10338 static dw_loc_descr_ref 10339 int_shift_loc_descriptor (HOST_WIDE_INT i, int shift) 10340 { 10341 dw_loc_descr_ref ret = int_loc_descriptor (i >> shift); 10342 add_loc_descr (&ret, int_loc_descriptor (shift)); 10343 add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0)); 10344 return ret; 10345 } 10346 10347 /* Return a location descriptor that designates a constant. */ 10348 10349 static dw_loc_descr_ref 10350 int_loc_descriptor (HOST_WIDE_INT i) 10351 { 10352 enum dwarf_location_atom op; 10353 10354 /* Pick the smallest representation of a constant, rather than just 10355 defaulting to the LEB encoding. */ 10356 if (i >= 0) 10357 { 10358 int clz = clz_hwi (i); 10359 int ctz = ctz_hwi (i); 10360 if (i <= 31) 10361 op = (enum dwarf_location_atom) (DW_OP_lit0 + i); 10362 else if (i <= 0xff) 10363 op = DW_OP_const1u; 10364 else if (i <= 0xffff) 10365 op = DW_OP_const2u; 10366 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5 10367 && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT) 10368 /* DW_OP_litX DW_OP_litY DW_OP_shl takes just 3 bytes and 10369 DW_OP_litX DW_OP_const1u Y DW_OP_shl takes just 4 bytes, 10370 while DW_OP_const4u is 5 bytes. */ 10371 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 5); 10372 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8 10373 && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT) 10374 /* DW_OP_const1u X DW_OP_litY DW_OP_shl takes just 4 bytes, 10375 while DW_OP_const4u is 5 bytes. */ 10376 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8); 10377 else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff) 10378 op = DW_OP_const4u; 10379 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8 10380 && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT) 10381 /* DW_OP_const1u X DW_OP_const1u Y DW_OP_shl takes just 5 bytes, 10382 while DW_OP_constu of constant >= 0x100000000 takes at least 10383 6 bytes. */ 10384 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 8); 10385 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16 10386 && clz + 16 + (size_of_uleb128 (i) > 5 ? 255 : 31) 10387 >= HOST_BITS_PER_WIDE_INT) 10388 /* DW_OP_const2u X DW_OP_litY DW_OP_shl takes just 5 bytes, 10389 DW_OP_const2u X DW_OP_const1u Y DW_OP_shl takes 6 bytes, 10390 while DW_OP_constu takes in this case at least 6 bytes. */ 10391 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 16); 10392 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32 10393 && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT 10394 && size_of_uleb128 (i) > 6) 10395 /* DW_OP_const4u X DW_OP_litY DW_OP_shl takes just 7 bytes. */ 10396 return int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT - clz - 32); 10397 else 10398 op = DW_OP_constu; 10399 } 10400 else 10401 { 10402 if (i >= -0x80) 10403 op = DW_OP_const1s; 10404 else if (i >= -0x8000) 10405 op = DW_OP_const2s; 10406 else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000) 10407 { 10408 if (size_of_int_loc_descriptor (i) < 5) 10409 { 10410 dw_loc_descr_ref ret = int_loc_descriptor (-i); 10411 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0)); 10412 return ret; 10413 } 10414 op = DW_OP_const4s; 10415 } 10416 else 10417 { 10418 if (size_of_int_loc_descriptor (i) 10419 < (unsigned long) 1 + size_of_sleb128 (i)) 10420 { 10421 dw_loc_descr_ref ret = int_loc_descriptor (-i); 10422 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0)); 10423 return ret; 10424 } 10425 op = DW_OP_consts; 10426 } 10427 } 10428 10429 return new_loc_descr (op, i, 0); 10430 } 10431 10432 /* Return size_of_locs (int_shift_loc_descriptor (i, shift)) 10433 without actually allocating it. */ 10434 10435 static unsigned long 10436 size_of_int_shift_loc_descriptor (HOST_WIDE_INT i, int shift) 10437 { 10438 return size_of_int_loc_descriptor (i >> shift) 10439 + size_of_int_loc_descriptor (shift) 10440 + 1; 10441 } 10442 10443 /* Return size_of_locs (int_loc_descriptor (i)) without 10444 actually allocating it. */ 10445 10446 static unsigned long 10447 size_of_int_loc_descriptor (HOST_WIDE_INT i) 10448 { 10449 unsigned long s; 10450 10451 if (i >= 0) 10452 { 10453 int clz, ctz; 10454 if (i <= 31) 10455 return 1; 10456 else if (i <= 0xff) 10457 return 2; 10458 else if (i <= 0xffff) 10459 return 3; 10460 clz = clz_hwi (i); 10461 ctz = ctz_hwi (i); 10462 if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 5 10463 && clz + 5 + 255 >= HOST_BITS_PER_WIDE_INT) 10464 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT 10465 - clz - 5); 10466 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8 10467 && clz + 8 + 31 >= HOST_BITS_PER_WIDE_INT) 10468 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT 10469 - clz - 8); 10470 else if (HOST_BITS_PER_WIDE_INT == 32 || i <= 0xffffffff) 10471 return 5; 10472 s = size_of_uleb128 ((unsigned HOST_WIDE_INT) i); 10473 if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 8 10474 && clz + 8 + 255 >= HOST_BITS_PER_WIDE_INT) 10475 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT 10476 - clz - 8); 10477 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 16 10478 && clz + 16 + (s > 5 ? 255 : 31) >= HOST_BITS_PER_WIDE_INT) 10479 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT 10480 - clz - 16); 10481 else if (clz + ctz >= HOST_BITS_PER_WIDE_INT - 32 10482 && clz + 32 + 31 >= HOST_BITS_PER_WIDE_INT 10483 && s > 6) 10484 return size_of_int_shift_loc_descriptor (i, HOST_BITS_PER_WIDE_INT 10485 - clz - 32); 10486 else 10487 return 1 + s; 10488 } 10489 else 10490 { 10491 if (i >= -0x80) 10492 return 2; 10493 else if (i >= -0x8000) 10494 return 3; 10495 else if (HOST_BITS_PER_WIDE_INT == 32 || i >= -0x80000000) 10496 { 10497 if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i) 10498 { 10499 s = size_of_int_loc_descriptor (-i) + 1; 10500 if (s < 5) 10501 return s; 10502 } 10503 return 5; 10504 } 10505 else 10506 { 10507 unsigned long r = 1 + size_of_sleb128 (i); 10508 if (-(unsigned HOST_WIDE_INT) i != (unsigned HOST_WIDE_INT) i) 10509 { 10510 s = size_of_int_loc_descriptor (-i) + 1; 10511 if (s < r) 10512 return s; 10513 } 10514 return r; 10515 } 10516 } 10517 } 10518 10519 /* Return loc description representing "address" of integer value. 10520 This can appear only as toplevel expression. */ 10521 10522 static dw_loc_descr_ref 10523 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i) 10524 { 10525 int litsize; 10526 dw_loc_descr_ref loc_result = NULL; 10527 10528 if (!(dwarf_version >= 4 || !dwarf_strict)) 10529 return NULL; 10530 10531 litsize = size_of_int_loc_descriptor (i); 10532 /* Determine if DW_OP_stack_value or DW_OP_implicit_value 10533 is more compact. For DW_OP_stack_value we need: 10534 litsize + 1 (DW_OP_stack_value) 10535 and for DW_OP_implicit_value: 10536 1 (DW_OP_implicit_value) + 1 (length) + size. */ 10537 if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size) 10538 { 10539 loc_result = int_loc_descriptor (i); 10540 add_loc_descr (&loc_result, 10541 new_loc_descr (DW_OP_stack_value, 0, 0)); 10542 return loc_result; 10543 } 10544 10545 loc_result = new_loc_descr (DW_OP_implicit_value, 10546 size, 0); 10547 loc_result->dw_loc_oprnd2.val_class = dw_val_class_const; 10548 loc_result->dw_loc_oprnd2.v.val_int = i; 10549 return loc_result; 10550 } 10551 10552 /* Return a location descriptor that designates a base+offset location. */ 10553 10554 static dw_loc_descr_ref 10555 based_loc_descr (rtx reg, HOST_WIDE_INT offset, 10556 enum var_init_status initialized) 10557 { 10558 unsigned int regno; 10559 dw_loc_descr_ref result; 10560 dw_fde_ref fde = cfun->fde; 10561 10562 /* We only use "frame base" when we're sure we're talking about the 10563 post-prologue local stack frame. We do this by *not* running 10564 register elimination until this point, and recognizing the special 10565 argument pointer and soft frame pointer rtx's. */ 10566 if (reg == arg_pointer_rtx || reg == frame_pointer_rtx) 10567 { 10568 rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX); 10569 10570 if (elim != reg) 10571 { 10572 if (GET_CODE (elim) == PLUS) 10573 { 10574 offset += INTVAL (XEXP (elim, 1)); 10575 elim = XEXP (elim, 0); 10576 } 10577 gcc_assert ((SUPPORTS_STACK_ALIGNMENT 10578 && (elim == hard_frame_pointer_rtx 10579 || elim == stack_pointer_rtx)) 10580 || elim == (frame_pointer_needed 10581 ? hard_frame_pointer_rtx 10582 : stack_pointer_rtx)); 10583 10584 /* If drap register is used to align stack, use frame 10585 pointer + offset to access stack variables. If stack 10586 is aligned without drap, use stack pointer + offset to 10587 access stack variables. */ 10588 if (crtl->stack_realign_tried 10589 && reg == frame_pointer_rtx) 10590 { 10591 int base_reg 10592 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM) 10593 ? HARD_FRAME_POINTER_REGNUM 10594 : REGNO (elim)); 10595 return new_reg_loc_descr (base_reg, offset); 10596 } 10597 10598 gcc_assert (frame_pointer_fb_offset_valid); 10599 offset += frame_pointer_fb_offset; 10600 return new_loc_descr (DW_OP_fbreg, offset, 0); 10601 } 10602 } 10603 10604 regno = DWARF_FRAME_REGNUM (REGNO (reg)); 10605 10606 if (!optimize && fde 10607 && (fde->drap_reg == regno || fde->vdrap_reg == regno)) 10608 { 10609 /* Use cfa+offset to represent the location of arguments passed 10610 on the stack when drap is used to align stack. 10611 Only do this when not optimizing, for optimized code var-tracking 10612 is supposed to track where the arguments live and the register 10613 used as vdrap or drap in some spot might be used for something 10614 else in other part of the routine. */ 10615 return new_loc_descr (DW_OP_fbreg, offset, 0); 10616 } 10617 10618 if (regno <= 31) 10619 result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno), 10620 offset, 0); 10621 else 10622 result = new_loc_descr (DW_OP_bregx, regno, offset); 10623 10624 if (initialized == VAR_INIT_STATUS_UNINITIALIZED) 10625 add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0)); 10626 10627 return result; 10628 } 10629 10630 /* Return true if this RTL expression describes a base+offset calculation. */ 10631 10632 static inline int 10633 is_based_loc (const_rtx rtl) 10634 { 10635 return (GET_CODE (rtl) == PLUS 10636 && ((REG_P (XEXP (rtl, 0)) 10637 && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER 10638 && CONST_INT_P (XEXP (rtl, 1))))); 10639 } 10640 10641 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0) 10642 failed. */ 10643 10644 static dw_loc_descr_ref 10645 tls_mem_loc_descriptor (rtx mem) 10646 { 10647 tree base; 10648 dw_loc_descr_ref loc_result; 10649 10650 if (MEM_EXPR (mem) == NULL_TREE || !MEM_OFFSET_KNOWN_P (mem)) 10651 return NULL; 10652 10653 base = get_base_address (MEM_EXPR (mem)); 10654 if (base == NULL 10655 || TREE_CODE (base) != VAR_DECL 10656 || !DECL_THREAD_LOCAL_P (base)) 10657 return NULL; 10658 10659 loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1); 10660 if (loc_result == NULL) 10661 return NULL; 10662 10663 if (MEM_OFFSET (mem)) 10664 loc_descr_plus_const (&loc_result, MEM_OFFSET (mem)); 10665 10666 return loc_result; 10667 } 10668 10669 /* Output debug info about reason why we failed to expand expression as dwarf 10670 expression. */ 10671 10672 static void 10673 expansion_failed (tree expr, rtx rtl, char const *reason) 10674 { 10675 if (dump_file && (dump_flags & TDF_DETAILS)) 10676 { 10677 fprintf (dump_file, "Failed to expand as dwarf: "); 10678 if (expr) 10679 print_generic_expr (dump_file, expr, dump_flags); 10680 if (rtl) 10681 { 10682 fprintf (dump_file, "\n"); 10683 print_rtl (dump_file, rtl); 10684 } 10685 fprintf (dump_file, "\nReason: %s\n", reason); 10686 } 10687 } 10688 10689 /* Helper function for const_ok_for_output, called either directly 10690 or via for_each_rtx. */ 10691 10692 static int 10693 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED) 10694 { 10695 rtx rtl = *rtlp; 10696 10697 if (GET_CODE (rtl) == UNSPEC) 10698 { 10699 /* If delegitimize_address couldn't do anything with the UNSPEC, assume 10700 we can't express it in the debug info. */ 10701 #ifdef ENABLE_CHECKING 10702 /* Don't complain about TLS UNSPECs, those are just too hard to 10703 delegitimize. */ 10704 if (XVECLEN (rtl, 0) != 1 10705 || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF 10706 || SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0)) == NULL 10707 || TREE_CODE (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0))) != VAR_DECL 10708 || !DECL_THREAD_LOCAL_P (SYMBOL_REF_DECL (XVECEXP (rtl, 0, 0)))) 10709 inform (current_function_decl 10710 ? DECL_SOURCE_LOCATION (current_function_decl) 10711 : UNKNOWN_LOCATION, 10712 #if NUM_UNSPEC_VALUES > 0 10713 "non-delegitimized UNSPEC %s (%d) found in variable location", 10714 ((XINT (rtl, 1) >= 0 && XINT (rtl, 1) < NUM_UNSPEC_VALUES) 10715 ? unspec_strings[XINT (rtl, 1)] : "unknown"), 10716 XINT (rtl, 1)); 10717 #else 10718 "non-delegitimized UNSPEC %d found in variable location", 10719 XINT (rtl, 1)); 10720 #endif 10721 #endif 10722 expansion_failed (NULL_TREE, rtl, 10723 "UNSPEC hasn't been delegitimized.\n"); 10724 return 1; 10725 } 10726 10727 if (targetm.const_not_ok_for_debug_p (rtl)) 10728 { 10729 expansion_failed (NULL_TREE, rtl, 10730 "Expression rejected for debug by the backend.\n"); 10731 return 1; 10732 } 10733 10734 if (GET_CODE (rtl) != SYMBOL_REF) 10735 return 0; 10736 10737 if (CONSTANT_POOL_ADDRESS_P (rtl)) 10738 { 10739 bool marked; 10740 get_pool_constant_mark (rtl, &marked); 10741 /* If all references to this pool constant were optimized away, 10742 it was not output and thus we can't represent it. */ 10743 if (!marked) 10744 { 10745 expansion_failed (NULL_TREE, rtl, 10746 "Constant was removed from constant pool.\n"); 10747 return 1; 10748 } 10749 } 10750 10751 if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE) 10752 return 1; 10753 10754 /* Avoid references to external symbols in debug info, on several targets 10755 the linker might even refuse to link when linking a shared library, 10756 and in many other cases the relocations for .debug_info/.debug_loc are 10757 dropped, so the address becomes zero anyway. Hidden symbols, guaranteed 10758 to be defined within the same shared library or executable are fine. */ 10759 if (SYMBOL_REF_EXTERNAL_P (rtl)) 10760 { 10761 tree decl = SYMBOL_REF_DECL (rtl); 10762 10763 if (decl == NULL || !targetm.binds_local_p (decl)) 10764 { 10765 expansion_failed (NULL_TREE, rtl, 10766 "Symbol not defined in current TU.\n"); 10767 return 1; 10768 } 10769 } 10770 10771 return 0; 10772 } 10773 10774 /* Return true if constant RTL can be emitted in DW_OP_addr or 10775 DW_AT_const_value. TLS SYMBOL_REFs, external SYMBOL_REFs or 10776 non-marked constant pool SYMBOL_REFs can't be referenced in it. */ 10777 10778 static bool 10779 const_ok_for_output (rtx rtl) 10780 { 10781 if (GET_CODE (rtl) == SYMBOL_REF) 10782 return const_ok_for_output_1 (&rtl, NULL) == 0; 10783 10784 if (GET_CODE (rtl) == CONST) 10785 return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0; 10786 10787 return true; 10788 } 10789 10790 /* Return a reference to DW_TAG_base_type corresponding to MODE and UNSIGNEDP 10791 if possible, NULL otherwise. */ 10792 10793 static dw_die_ref 10794 base_type_for_mode (enum machine_mode mode, bool unsignedp) 10795 { 10796 dw_die_ref type_die; 10797 tree type = lang_hooks.types.type_for_mode (mode, unsignedp); 10798 10799 if (type == NULL) 10800 return NULL; 10801 switch (TREE_CODE (type)) 10802 { 10803 case INTEGER_TYPE: 10804 case REAL_TYPE: 10805 break; 10806 default: 10807 return NULL; 10808 } 10809 type_die = lookup_type_die (type); 10810 if (!type_die) 10811 type_die = modified_type_die (type, false, false, comp_unit_die ()); 10812 if (type_die == NULL || type_die->die_tag != DW_TAG_base_type) 10813 return NULL; 10814 return type_die; 10815 } 10816 10817 /* For OP descriptor assumed to be in unsigned MODE, convert it to a unsigned 10818 type matching MODE, or, if MODE is narrower than or as wide as 10819 DWARF2_ADDR_SIZE, untyped. Return NULL if the conversion is not 10820 possible. */ 10821 10822 static dw_loc_descr_ref 10823 convert_descriptor_to_mode (enum machine_mode mode, dw_loc_descr_ref op) 10824 { 10825 enum machine_mode outer_mode = mode; 10826 dw_die_ref type_die; 10827 dw_loc_descr_ref cvt; 10828 10829 if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE) 10830 { 10831 add_loc_descr (&op, new_loc_descr (DW_OP_GNU_convert, 0, 0)); 10832 return op; 10833 } 10834 type_die = base_type_for_mode (outer_mode, 1); 10835 if (type_die == NULL) 10836 return NULL; 10837 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0); 10838 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 10839 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die; 10840 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0; 10841 add_loc_descr (&op, cvt); 10842 return op; 10843 } 10844 10845 /* Return location descriptor for comparison OP with operands OP0 and OP1. */ 10846 10847 static dw_loc_descr_ref 10848 compare_loc_descriptor (enum dwarf_location_atom op, dw_loc_descr_ref op0, 10849 dw_loc_descr_ref op1) 10850 { 10851 dw_loc_descr_ref ret = op0; 10852 add_loc_descr (&ret, op1); 10853 add_loc_descr (&ret, new_loc_descr (op, 0, 0)); 10854 if (STORE_FLAG_VALUE != 1) 10855 { 10856 add_loc_descr (&ret, int_loc_descriptor (STORE_FLAG_VALUE)); 10857 add_loc_descr (&ret, new_loc_descr (DW_OP_mul, 0, 0)); 10858 } 10859 return ret; 10860 } 10861 10862 /* Return location descriptor for signed comparison OP RTL. */ 10863 10864 static dw_loc_descr_ref 10865 scompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl, 10866 enum machine_mode mem_mode) 10867 { 10868 enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0)); 10869 dw_loc_descr_ref op0, op1; 10870 int shift; 10871 10872 if (op_mode == VOIDmode) 10873 op_mode = GET_MODE (XEXP (rtl, 1)); 10874 if (op_mode == VOIDmode) 10875 return NULL; 10876 10877 if (dwarf_strict 10878 && (GET_MODE_CLASS (op_mode) != MODE_INT 10879 || GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE)) 10880 return NULL; 10881 10882 op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode, 10883 VAR_INIT_STATUS_INITIALIZED); 10884 op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode, 10885 VAR_INIT_STATUS_INITIALIZED); 10886 10887 if (op0 == NULL || op1 == NULL) 10888 return NULL; 10889 10890 if (GET_MODE_CLASS (op_mode) != MODE_INT 10891 || GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE) 10892 return compare_loc_descriptor (op, op0, op1); 10893 10894 if (GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE) 10895 { 10896 dw_die_ref type_die = base_type_for_mode (op_mode, 0); 10897 dw_loc_descr_ref cvt; 10898 10899 if (type_die == NULL) 10900 return NULL; 10901 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0); 10902 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 10903 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die; 10904 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0; 10905 add_loc_descr (&op0, cvt); 10906 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0); 10907 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 10908 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die; 10909 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0; 10910 add_loc_descr (&op1, cvt); 10911 return compare_loc_descriptor (op, op0, op1); 10912 } 10913 10914 shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode)) * BITS_PER_UNIT; 10915 /* For eq/ne, if the operands are known to be zero-extended, 10916 there is no need to do the fancy shifting up. */ 10917 if (op == DW_OP_eq || op == DW_OP_ne) 10918 { 10919 dw_loc_descr_ref last0, last1; 10920 for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next) 10921 ; 10922 for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next) 10923 ; 10924 /* deref_size zero extends, and for constants we can check 10925 whether they are zero extended or not. */ 10926 if (((last0->dw_loc_opc == DW_OP_deref_size 10927 && last0->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode)) 10928 || (CONST_INT_P (XEXP (rtl, 0)) 10929 && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0)) 10930 == (INTVAL (XEXP (rtl, 0)) & GET_MODE_MASK (op_mode)))) 10931 && ((last1->dw_loc_opc == DW_OP_deref_size 10932 && last1->dw_loc_oprnd1.v.val_int <= GET_MODE_SIZE (op_mode)) 10933 || (CONST_INT_P (XEXP (rtl, 1)) 10934 && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 1)) 10935 == (INTVAL (XEXP (rtl, 1)) & GET_MODE_MASK (op_mode))))) 10936 return compare_loc_descriptor (op, op0, op1); 10937 10938 /* EQ/NE comparison against constant in narrower type than 10939 DWARF2_ADDR_SIZE can be performed either as 10940 DW_OP_const1u <shift> DW_OP_shl DW_OP_const* <cst << shift> 10941 DW_OP_{eq,ne} 10942 or 10943 DW_OP_const*u <mode_mask> DW_OP_and DW_OP_const* <cst & mode_mask> 10944 DW_OP_{eq,ne}. Pick whatever is shorter. */ 10945 if (CONST_INT_P (XEXP (rtl, 1)) 10946 && GET_MODE_BITSIZE (op_mode) < HOST_BITS_PER_WIDE_INT 10947 && (size_of_int_loc_descriptor (shift) + 1 10948 + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift) 10949 >= size_of_int_loc_descriptor (GET_MODE_MASK (op_mode)) + 1 10950 + size_of_int_loc_descriptor (INTVAL (XEXP (rtl, 1)) 10951 & GET_MODE_MASK (op_mode)))) 10952 { 10953 add_loc_descr (&op0, int_loc_descriptor (GET_MODE_MASK (op_mode))); 10954 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0)); 10955 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) 10956 & GET_MODE_MASK (op_mode)); 10957 return compare_loc_descriptor (op, op0, op1); 10958 } 10959 } 10960 add_loc_descr (&op0, int_loc_descriptor (shift)); 10961 add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0)); 10962 if (CONST_INT_P (XEXP (rtl, 1))) 10963 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift); 10964 else 10965 { 10966 add_loc_descr (&op1, int_loc_descriptor (shift)); 10967 add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0)); 10968 } 10969 return compare_loc_descriptor (op, op0, op1); 10970 } 10971 10972 /* Return location descriptor for unsigned comparison OP RTL. */ 10973 10974 static dw_loc_descr_ref 10975 ucompare_loc_descriptor (enum dwarf_location_atom op, rtx rtl, 10976 enum machine_mode mem_mode) 10977 { 10978 enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0)); 10979 dw_loc_descr_ref op0, op1; 10980 10981 if (op_mode == VOIDmode) 10982 op_mode = GET_MODE (XEXP (rtl, 1)); 10983 if (op_mode == VOIDmode) 10984 return NULL; 10985 if (GET_MODE_CLASS (op_mode) != MODE_INT) 10986 return NULL; 10987 10988 if (dwarf_strict && GET_MODE_SIZE (op_mode) > DWARF2_ADDR_SIZE) 10989 return NULL; 10990 10991 op0 = mem_loc_descriptor (XEXP (rtl, 0), op_mode, mem_mode, 10992 VAR_INIT_STATUS_INITIALIZED); 10993 op1 = mem_loc_descriptor (XEXP (rtl, 1), op_mode, mem_mode, 10994 VAR_INIT_STATUS_INITIALIZED); 10995 10996 if (op0 == NULL || op1 == NULL) 10997 return NULL; 10998 10999 if (GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE) 11000 { 11001 HOST_WIDE_INT mask = GET_MODE_MASK (op_mode); 11002 dw_loc_descr_ref last0, last1; 11003 for (last0 = op0; last0->dw_loc_next != NULL; last0 = last0->dw_loc_next) 11004 ; 11005 for (last1 = op1; last1->dw_loc_next != NULL; last1 = last1->dw_loc_next) 11006 ; 11007 if (CONST_INT_P (XEXP (rtl, 0))) 11008 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask); 11009 /* deref_size zero extends, so no need to mask it again. */ 11010 else if (last0->dw_loc_opc != DW_OP_deref_size 11011 || last0->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode)) 11012 { 11013 add_loc_descr (&op0, int_loc_descriptor (mask)); 11014 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0)); 11015 } 11016 if (CONST_INT_P (XEXP (rtl, 1))) 11017 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask); 11018 /* deref_size zero extends, so no need to mask it again. */ 11019 else if (last1->dw_loc_opc != DW_OP_deref_size 11020 || last1->dw_loc_oprnd1.v.val_int > GET_MODE_SIZE (op_mode)) 11021 { 11022 add_loc_descr (&op1, int_loc_descriptor (mask)); 11023 add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0)); 11024 } 11025 } 11026 else if (GET_MODE_SIZE (op_mode) == DWARF2_ADDR_SIZE) 11027 { 11028 HOST_WIDE_INT bias = 1; 11029 bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1); 11030 add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0)); 11031 if (CONST_INT_P (XEXP (rtl, 1))) 11032 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias 11033 + INTVAL (XEXP (rtl, 1))); 11034 else 11035 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, 11036 bias, 0)); 11037 } 11038 return compare_loc_descriptor (op, op0, op1); 11039 } 11040 11041 /* Return location descriptor for {U,S}{MIN,MAX}. */ 11042 11043 static dw_loc_descr_ref 11044 minmax_loc_descriptor (rtx rtl, enum machine_mode mode, 11045 enum machine_mode mem_mode) 11046 { 11047 enum dwarf_location_atom op; 11048 dw_loc_descr_ref op0, op1, ret; 11049 dw_loc_descr_ref bra_node, drop_node; 11050 11051 if (dwarf_strict 11052 && (GET_MODE_CLASS (mode) != MODE_INT 11053 || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE)) 11054 return NULL; 11055 11056 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, 11057 VAR_INIT_STATUS_INITIALIZED); 11058 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, 11059 VAR_INIT_STATUS_INITIALIZED); 11060 11061 if (op0 == NULL || op1 == NULL) 11062 return NULL; 11063 11064 add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0)); 11065 add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0)); 11066 add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0)); 11067 if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX) 11068 { 11069 if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE) 11070 { 11071 HOST_WIDE_INT mask = GET_MODE_MASK (mode); 11072 add_loc_descr (&op0, int_loc_descriptor (mask)); 11073 add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0)); 11074 add_loc_descr (&op1, int_loc_descriptor (mask)); 11075 add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0)); 11076 } 11077 else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE) 11078 { 11079 HOST_WIDE_INT bias = 1; 11080 bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1); 11081 add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0)); 11082 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0)); 11083 } 11084 } 11085 else if (GET_MODE_CLASS (mode) == MODE_INT 11086 && GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE) 11087 { 11088 int shift = (DWARF2_ADDR_SIZE - GET_MODE_SIZE (mode)) * BITS_PER_UNIT; 11089 add_loc_descr (&op0, int_loc_descriptor (shift)); 11090 add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0)); 11091 add_loc_descr (&op1, int_loc_descriptor (shift)); 11092 add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0)); 11093 } 11094 else if (GET_MODE_CLASS (mode) == MODE_INT 11095 && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE) 11096 { 11097 dw_die_ref type_die = base_type_for_mode (mode, 0); 11098 dw_loc_descr_ref cvt; 11099 if (type_die == NULL) 11100 return NULL; 11101 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0); 11102 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 11103 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die; 11104 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0; 11105 add_loc_descr (&op0, cvt); 11106 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0); 11107 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 11108 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die; 11109 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0; 11110 add_loc_descr (&op1, cvt); 11111 } 11112 11113 if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN) 11114 op = DW_OP_lt; 11115 else 11116 op = DW_OP_gt; 11117 ret = op0; 11118 add_loc_descr (&ret, op1); 11119 add_loc_descr (&ret, new_loc_descr (op, 0, 0)); 11120 bra_node = new_loc_descr (DW_OP_bra, 0, 0); 11121 add_loc_descr (&ret, bra_node); 11122 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0)); 11123 drop_node = new_loc_descr (DW_OP_drop, 0, 0); 11124 add_loc_descr (&ret, drop_node); 11125 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc; 11126 bra_node->dw_loc_oprnd1.v.val_loc = drop_node; 11127 if ((GET_CODE (rtl) == SMIN || GET_CODE (rtl) == SMAX) 11128 && GET_MODE_CLASS (mode) == MODE_INT 11129 && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE) 11130 ret = convert_descriptor_to_mode (mode, ret); 11131 return ret; 11132 } 11133 11134 /* Helper function for mem_loc_descriptor. Perform OP binary op, 11135 but after converting arguments to type_die, afterwards 11136 convert back to unsigned. */ 11137 11138 static dw_loc_descr_ref 11139 typed_binop (enum dwarf_location_atom op, rtx rtl, dw_die_ref type_die, 11140 enum machine_mode mode, enum machine_mode mem_mode) 11141 { 11142 dw_loc_descr_ref cvt, op0, op1; 11143 11144 if (type_die == NULL) 11145 return NULL; 11146 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, 11147 VAR_INIT_STATUS_INITIALIZED); 11148 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, 11149 VAR_INIT_STATUS_INITIALIZED); 11150 if (op0 == NULL || op1 == NULL) 11151 return NULL; 11152 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0); 11153 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 11154 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die; 11155 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0; 11156 add_loc_descr (&op0, cvt); 11157 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0); 11158 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 11159 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die; 11160 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0; 11161 add_loc_descr (&op1, cvt); 11162 add_loc_descr (&op0, op1); 11163 add_loc_descr (&op0, new_loc_descr (op, 0, 0)); 11164 return convert_descriptor_to_mode (mode, op0); 11165 } 11166 11167 /* CLZ (where constV is CLZ_DEFINED_VALUE_AT_ZERO computed value, 11168 const0 is DW_OP_lit0 or corresponding typed constant, 11169 const1 is DW_OP_lit1 or corresponding typed constant 11170 and constMSB is constant with just the MSB bit set 11171 for the mode): 11172 DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4> 11173 L1: const0 DW_OP_swap 11174 L2: DW_OP_dup constMSB DW_OP_and DW_OP_bra <L3> const1 DW_OP_shl 11175 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2> 11176 L3: DW_OP_drop 11177 L4: DW_OP_nop 11178 11179 CTZ is similar: 11180 DW_OP_dup DW_OP_bra <L1> DW_OP_drop constV DW_OP_skip <L4> 11181 L1: const0 DW_OP_swap 11182 L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr 11183 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2> 11184 L3: DW_OP_drop 11185 L4: DW_OP_nop 11186 11187 FFS is similar: 11188 DW_OP_dup DW_OP_bra <L1> DW_OP_drop const0 DW_OP_skip <L4> 11189 L1: const1 DW_OP_swap 11190 L2: DW_OP_dup const1 DW_OP_and DW_OP_bra <L3> const1 DW_OP_shr 11191 DW_OP_swap DW_OP_plus_uconst <1> DW_OP_swap DW_OP_skip <L2> 11192 L3: DW_OP_drop 11193 L4: DW_OP_nop */ 11194 11195 static dw_loc_descr_ref 11196 clz_loc_descriptor (rtx rtl, enum machine_mode mode, 11197 enum machine_mode mem_mode) 11198 { 11199 dw_loc_descr_ref op0, ret, tmp; 11200 HOST_WIDE_INT valv; 11201 dw_loc_descr_ref l1jump, l1label; 11202 dw_loc_descr_ref l2jump, l2label; 11203 dw_loc_descr_ref l3jump, l3label; 11204 dw_loc_descr_ref l4jump, l4label; 11205 rtx msb; 11206 11207 if (GET_MODE_CLASS (mode) != MODE_INT 11208 || GET_MODE (XEXP (rtl, 0)) != mode 11209 || (GET_CODE (rtl) == CLZ 11210 && GET_MODE_BITSIZE (mode) > 2 * HOST_BITS_PER_WIDE_INT)) 11211 return NULL; 11212 11213 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, 11214 VAR_INIT_STATUS_INITIALIZED); 11215 if (op0 == NULL) 11216 return NULL; 11217 ret = op0; 11218 if (GET_CODE (rtl) == CLZ) 11219 { 11220 if (!CLZ_DEFINED_VALUE_AT_ZERO (mode, valv)) 11221 valv = GET_MODE_BITSIZE (mode); 11222 } 11223 else if (GET_CODE (rtl) == FFS) 11224 valv = 0; 11225 else if (!CTZ_DEFINED_VALUE_AT_ZERO (mode, valv)) 11226 valv = GET_MODE_BITSIZE (mode); 11227 add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0)); 11228 l1jump = new_loc_descr (DW_OP_bra, 0, 0); 11229 add_loc_descr (&ret, l1jump); 11230 add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0)); 11231 tmp = mem_loc_descriptor (GEN_INT (valv), mode, mem_mode, 11232 VAR_INIT_STATUS_INITIALIZED); 11233 if (tmp == NULL) 11234 return NULL; 11235 add_loc_descr (&ret, tmp); 11236 l4jump = new_loc_descr (DW_OP_skip, 0, 0); 11237 add_loc_descr (&ret, l4jump); 11238 l1label = mem_loc_descriptor (GET_CODE (rtl) == FFS 11239 ? const1_rtx : const0_rtx, 11240 mode, mem_mode, 11241 VAR_INIT_STATUS_INITIALIZED); 11242 if (l1label == NULL) 11243 return NULL; 11244 add_loc_descr (&ret, l1label); 11245 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0)); 11246 l2label = new_loc_descr (DW_OP_dup, 0, 0); 11247 add_loc_descr (&ret, l2label); 11248 if (GET_CODE (rtl) != CLZ) 11249 msb = const1_rtx; 11250 else if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT) 11251 msb = GEN_INT ((unsigned HOST_WIDE_INT) 1 11252 << (GET_MODE_BITSIZE (mode) - 1)); 11253 else 11254 msb = immed_double_const (0, (unsigned HOST_WIDE_INT) 1 11255 << (GET_MODE_BITSIZE (mode) 11256 - HOST_BITS_PER_WIDE_INT - 1), mode); 11257 if (GET_CODE (msb) == CONST_INT && INTVAL (msb) < 0) 11258 tmp = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32 11259 ? DW_OP_const4u : HOST_BITS_PER_WIDE_INT == 64 11260 ? DW_OP_const8u : DW_OP_constu, INTVAL (msb), 0); 11261 else 11262 tmp = mem_loc_descriptor (msb, mode, mem_mode, 11263 VAR_INIT_STATUS_INITIALIZED); 11264 if (tmp == NULL) 11265 return NULL; 11266 add_loc_descr (&ret, tmp); 11267 add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0)); 11268 l3jump = new_loc_descr (DW_OP_bra, 0, 0); 11269 add_loc_descr (&ret, l3jump); 11270 tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode, 11271 VAR_INIT_STATUS_INITIALIZED); 11272 if (tmp == NULL) 11273 return NULL; 11274 add_loc_descr (&ret, tmp); 11275 add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == CLZ 11276 ? DW_OP_shl : DW_OP_shr, 0, 0)); 11277 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0)); 11278 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 1, 0)); 11279 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0)); 11280 l2jump = new_loc_descr (DW_OP_skip, 0, 0); 11281 add_loc_descr (&ret, l2jump); 11282 l3label = new_loc_descr (DW_OP_drop, 0, 0); 11283 add_loc_descr (&ret, l3label); 11284 l4label = new_loc_descr (DW_OP_nop, 0, 0); 11285 add_loc_descr (&ret, l4label); 11286 l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc; 11287 l1jump->dw_loc_oprnd1.v.val_loc = l1label; 11288 l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc; 11289 l2jump->dw_loc_oprnd1.v.val_loc = l2label; 11290 l3jump->dw_loc_oprnd1.val_class = dw_val_class_loc; 11291 l3jump->dw_loc_oprnd1.v.val_loc = l3label; 11292 l4jump->dw_loc_oprnd1.val_class = dw_val_class_loc; 11293 l4jump->dw_loc_oprnd1.v.val_loc = l4label; 11294 return ret; 11295 } 11296 11297 /* POPCOUNT (const0 is DW_OP_lit0 or corresponding typed constant, 11298 const1 is DW_OP_lit1 or corresponding typed constant): 11299 const0 DW_OP_swap 11300 L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and 11301 DW_OP_plus DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1> 11302 L2: DW_OP_drop 11303 11304 PARITY is similar: 11305 L1: DW_OP_dup DW_OP_bra <L2> DW_OP_dup DW_OP_rot const1 DW_OP_and 11306 DW_OP_xor DW_OP_swap const1 DW_OP_shr DW_OP_skip <L1> 11307 L2: DW_OP_drop */ 11308 11309 static dw_loc_descr_ref 11310 popcount_loc_descriptor (rtx rtl, enum machine_mode mode, 11311 enum machine_mode mem_mode) 11312 { 11313 dw_loc_descr_ref op0, ret, tmp; 11314 dw_loc_descr_ref l1jump, l1label; 11315 dw_loc_descr_ref l2jump, l2label; 11316 11317 if (GET_MODE_CLASS (mode) != MODE_INT 11318 || GET_MODE (XEXP (rtl, 0)) != mode) 11319 return NULL; 11320 11321 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, 11322 VAR_INIT_STATUS_INITIALIZED); 11323 if (op0 == NULL) 11324 return NULL; 11325 ret = op0; 11326 tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode, 11327 VAR_INIT_STATUS_INITIALIZED); 11328 if (tmp == NULL) 11329 return NULL; 11330 add_loc_descr (&ret, tmp); 11331 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0)); 11332 l1label = new_loc_descr (DW_OP_dup, 0, 0); 11333 add_loc_descr (&ret, l1label); 11334 l2jump = new_loc_descr (DW_OP_bra, 0, 0); 11335 add_loc_descr (&ret, l2jump); 11336 add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0)); 11337 add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0)); 11338 tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode, 11339 VAR_INIT_STATUS_INITIALIZED); 11340 if (tmp == NULL) 11341 return NULL; 11342 add_loc_descr (&ret, tmp); 11343 add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0)); 11344 add_loc_descr (&ret, new_loc_descr (GET_CODE (rtl) == POPCOUNT 11345 ? DW_OP_plus : DW_OP_xor, 0, 0)); 11346 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0)); 11347 tmp = mem_loc_descriptor (const1_rtx, mode, mem_mode, 11348 VAR_INIT_STATUS_INITIALIZED); 11349 add_loc_descr (&ret, tmp); 11350 add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0)); 11351 l1jump = new_loc_descr (DW_OP_skip, 0, 0); 11352 add_loc_descr (&ret, l1jump); 11353 l2label = new_loc_descr (DW_OP_drop, 0, 0); 11354 add_loc_descr (&ret, l2label); 11355 l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc; 11356 l1jump->dw_loc_oprnd1.v.val_loc = l1label; 11357 l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc; 11358 l2jump->dw_loc_oprnd1.v.val_loc = l2label; 11359 return ret; 11360 } 11361 11362 /* BSWAP (constS is initial shift count, either 56 or 24): 11363 constS const0 11364 L1: DW_OP_pick <2> constS DW_OP_pick <3> DW_OP_minus DW_OP_shr 11365 const255 DW_OP_and DW_OP_pick <2> DW_OP_shl DW_OP_or 11366 DW_OP_swap DW_OP_dup const0 DW_OP_eq DW_OP_bra <L2> const8 11367 DW_OP_minus DW_OP_swap DW_OP_skip <L1> 11368 L2: DW_OP_drop DW_OP_swap DW_OP_drop */ 11369 11370 static dw_loc_descr_ref 11371 bswap_loc_descriptor (rtx rtl, enum machine_mode mode, 11372 enum machine_mode mem_mode) 11373 { 11374 dw_loc_descr_ref op0, ret, tmp; 11375 dw_loc_descr_ref l1jump, l1label; 11376 dw_loc_descr_ref l2jump, l2label; 11377 11378 if (GET_MODE_CLASS (mode) != MODE_INT 11379 || BITS_PER_UNIT != 8 11380 || (GET_MODE_BITSIZE (mode) != 32 11381 && GET_MODE_BITSIZE (mode) != 64)) 11382 return NULL; 11383 11384 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, 11385 VAR_INIT_STATUS_INITIALIZED); 11386 if (op0 == NULL) 11387 return NULL; 11388 11389 ret = op0; 11390 tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8), 11391 mode, mem_mode, 11392 VAR_INIT_STATUS_INITIALIZED); 11393 if (tmp == NULL) 11394 return NULL; 11395 add_loc_descr (&ret, tmp); 11396 tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode, 11397 VAR_INIT_STATUS_INITIALIZED); 11398 if (tmp == NULL) 11399 return NULL; 11400 add_loc_descr (&ret, tmp); 11401 l1label = new_loc_descr (DW_OP_pick, 2, 0); 11402 add_loc_descr (&ret, l1label); 11403 tmp = mem_loc_descriptor (GEN_INT (GET_MODE_BITSIZE (mode) - 8), 11404 mode, mem_mode, 11405 VAR_INIT_STATUS_INITIALIZED); 11406 add_loc_descr (&ret, tmp); 11407 add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 3, 0)); 11408 add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0)); 11409 add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0)); 11410 tmp = mem_loc_descriptor (GEN_INT (255), mode, mem_mode, 11411 VAR_INIT_STATUS_INITIALIZED); 11412 if (tmp == NULL) 11413 return NULL; 11414 add_loc_descr (&ret, tmp); 11415 add_loc_descr (&ret, new_loc_descr (DW_OP_and, 0, 0)); 11416 add_loc_descr (&ret, new_loc_descr (DW_OP_pick, 2, 0)); 11417 add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0)); 11418 add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0)); 11419 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0)); 11420 add_loc_descr (&ret, new_loc_descr (DW_OP_dup, 0, 0)); 11421 tmp = mem_loc_descriptor (const0_rtx, mode, mem_mode, 11422 VAR_INIT_STATUS_INITIALIZED); 11423 add_loc_descr (&ret, tmp); 11424 add_loc_descr (&ret, new_loc_descr (DW_OP_eq, 0, 0)); 11425 l2jump = new_loc_descr (DW_OP_bra, 0, 0); 11426 add_loc_descr (&ret, l2jump); 11427 tmp = mem_loc_descriptor (GEN_INT (8), mode, mem_mode, 11428 VAR_INIT_STATUS_INITIALIZED); 11429 add_loc_descr (&ret, tmp); 11430 add_loc_descr (&ret, new_loc_descr (DW_OP_minus, 0, 0)); 11431 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0)); 11432 l1jump = new_loc_descr (DW_OP_skip, 0, 0); 11433 add_loc_descr (&ret, l1jump); 11434 l2label = new_loc_descr (DW_OP_drop, 0, 0); 11435 add_loc_descr (&ret, l2label); 11436 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0)); 11437 add_loc_descr (&ret, new_loc_descr (DW_OP_drop, 0, 0)); 11438 l1jump->dw_loc_oprnd1.val_class = dw_val_class_loc; 11439 l1jump->dw_loc_oprnd1.v.val_loc = l1label; 11440 l2jump->dw_loc_oprnd1.val_class = dw_val_class_loc; 11441 l2jump->dw_loc_oprnd1.v.val_loc = l2label; 11442 return ret; 11443 } 11444 11445 /* ROTATE (constMASK is mode mask, BITSIZE is bitsize of mode): 11446 DW_OP_over DW_OP_over DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot 11447 [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_neg 11448 DW_OP_plus_uconst <BITSIZE> DW_OP_shr DW_OP_or 11449 11450 ROTATERT is similar: 11451 DW_OP_over DW_OP_over DW_OP_neg DW_OP_plus_uconst <BITSIZE> 11452 DW_OP_shl [ constMASK DW_OP_and ] DW_OP_rot 11453 [ DW_OP_swap constMASK DW_OP_and DW_OP_swap ] DW_OP_shr DW_OP_or */ 11454 11455 static dw_loc_descr_ref 11456 rotate_loc_descriptor (rtx rtl, enum machine_mode mode, 11457 enum machine_mode mem_mode) 11458 { 11459 rtx rtlop1 = XEXP (rtl, 1); 11460 dw_loc_descr_ref op0, op1, ret, mask[2] = { NULL, NULL }; 11461 int i; 11462 11463 if (GET_MODE_CLASS (mode) != MODE_INT) 11464 return NULL; 11465 11466 if (GET_MODE (rtlop1) != VOIDmode 11467 && GET_MODE_BITSIZE (GET_MODE (rtlop1)) < GET_MODE_BITSIZE (mode)) 11468 rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1); 11469 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, 11470 VAR_INIT_STATUS_INITIALIZED); 11471 op1 = mem_loc_descriptor (rtlop1, mode, mem_mode, 11472 VAR_INIT_STATUS_INITIALIZED); 11473 if (op0 == NULL || op1 == NULL) 11474 return NULL; 11475 if (GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE) 11476 for (i = 0; i < 2; i++) 11477 { 11478 if (GET_MODE_BITSIZE (mode) < HOST_BITS_PER_WIDE_INT) 11479 mask[i] = mem_loc_descriptor (GEN_INT (GET_MODE_MASK (mode)), 11480 mode, mem_mode, 11481 VAR_INIT_STATUS_INITIALIZED); 11482 else if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT) 11483 mask[i] = new_loc_descr (HOST_BITS_PER_WIDE_INT == 32 11484 ? DW_OP_const4u 11485 : HOST_BITS_PER_WIDE_INT == 64 11486 ? DW_OP_const8u : DW_OP_constu, 11487 GET_MODE_MASK (mode), 0); 11488 else 11489 mask[i] = NULL; 11490 if (mask[i] == NULL) 11491 return NULL; 11492 add_loc_descr (&mask[i], new_loc_descr (DW_OP_and, 0, 0)); 11493 } 11494 ret = op0; 11495 add_loc_descr (&ret, op1); 11496 add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0)); 11497 add_loc_descr (&ret, new_loc_descr (DW_OP_over, 0, 0)); 11498 if (GET_CODE (rtl) == ROTATERT) 11499 { 11500 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0)); 11501 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 11502 GET_MODE_BITSIZE (mode), 0)); 11503 } 11504 add_loc_descr (&ret, new_loc_descr (DW_OP_shl, 0, 0)); 11505 if (mask[0] != NULL) 11506 add_loc_descr (&ret, mask[0]); 11507 add_loc_descr (&ret, new_loc_descr (DW_OP_rot, 0, 0)); 11508 if (mask[1] != NULL) 11509 { 11510 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0)); 11511 add_loc_descr (&ret, mask[1]); 11512 add_loc_descr (&ret, new_loc_descr (DW_OP_swap, 0, 0)); 11513 } 11514 if (GET_CODE (rtl) == ROTATE) 11515 { 11516 add_loc_descr (&ret, new_loc_descr (DW_OP_neg, 0, 0)); 11517 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, 11518 GET_MODE_BITSIZE (mode), 0)); 11519 } 11520 add_loc_descr (&ret, new_loc_descr (DW_OP_shr, 0, 0)); 11521 add_loc_descr (&ret, new_loc_descr (DW_OP_or, 0, 0)); 11522 return ret; 11523 } 11524 11525 /* Helper function for mem_loc_descriptor. Return DW_OP_GNU_parameter_ref 11526 for DEBUG_PARAMETER_REF RTL. */ 11527 11528 static dw_loc_descr_ref 11529 parameter_ref_descriptor (rtx rtl) 11530 { 11531 dw_loc_descr_ref ret; 11532 dw_die_ref ref; 11533 11534 if (dwarf_strict) 11535 return NULL; 11536 gcc_assert (TREE_CODE (DEBUG_PARAMETER_REF_DECL (rtl)) == PARM_DECL); 11537 ref = lookup_decl_die (DEBUG_PARAMETER_REF_DECL (rtl)); 11538 ret = new_loc_descr (DW_OP_GNU_parameter_ref, 0, 0); 11539 if (ref) 11540 { 11541 ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 11542 ret->dw_loc_oprnd1.v.val_die_ref.die = ref; 11543 ret->dw_loc_oprnd1.v.val_die_ref.external = 0; 11544 } 11545 else 11546 { 11547 ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref; 11548 ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_PARAMETER_REF_DECL (rtl); 11549 } 11550 return ret; 11551 } 11552 11553 /* Helper function to get mode of MEM's address. */ 11554 11555 enum machine_mode 11556 get_address_mode (rtx mem) 11557 { 11558 enum machine_mode mode = GET_MODE (XEXP (mem, 0)); 11559 if (mode != VOIDmode) 11560 return mode; 11561 return targetm.addr_space.address_mode (MEM_ADDR_SPACE (mem)); 11562 } 11563 11564 /* The following routine converts the RTL for a variable or parameter 11565 (resident in memory) into an equivalent Dwarf representation of a 11566 mechanism for getting the address of that same variable onto the top of a 11567 hypothetical "address evaluation" stack. 11568 11569 When creating memory location descriptors, we are effectively transforming 11570 the RTL for a memory-resident object into its Dwarf postfix expression 11571 equivalent. This routine recursively descends an RTL tree, turning 11572 it into Dwarf postfix code as it goes. 11573 11574 MODE is the mode that should be assumed for the rtl if it is VOIDmode. 11575 11576 MEM_MODE is the mode of the memory reference, needed to handle some 11577 autoincrement addressing modes. 11578 11579 Return 0 if we can't represent the location. */ 11580 11581 dw_loc_descr_ref 11582 mem_loc_descriptor (rtx rtl, enum machine_mode mode, 11583 enum machine_mode mem_mode, 11584 enum var_init_status initialized) 11585 { 11586 dw_loc_descr_ref mem_loc_result = NULL; 11587 enum dwarf_location_atom op; 11588 dw_loc_descr_ref op0, op1; 11589 11590 if (mode == VOIDmode) 11591 mode = GET_MODE (rtl); 11592 11593 /* Note that for a dynamically sized array, the location we will generate a 11594 description of here will be the lowest numbered location which is 11595 actually within the array. That's *not* necessarily the same as the 11596 zeroth element of the array. */ 11597 11598 rtl = targetm.delegitimize_address (rtl); 11599 11600 if (mode != GET_MODE (rtl) && GET_MODE (rtl) != VOIDmode) 11601 return NULL; 11602 11603 switch (GET_CODE (rtl)) 11604 { 11605 case POST_INC: 11606 case POST_DEC: 11607 case POST_MODIFY: 11608 return mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, initialized); 11609 11610 case SUBREG: 11611 /* The case of a subreg may arise when we have a local (register) 11612 variable or a formal (register) parameter which doesn't quite fill 11613 up an entire register. For now, just assume that it is 11614 legitimate to make the Dwarf info refer to the whole register which 11615 contains the given subreg. */ 11616 if (!subreg_lowpart_p (rtl)) 11617 break; 11618 if (GET_MODE_CLASS (mode) == MODE_INT 11619 && GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) == MODE_INT 11620 && (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE 11621 #ifdef POINTERS_EXTEND_UNSIGNED 11622 || (mode == Pmode && mem_mode != VOIDmode) 11623 #endif 11624 ) 11625 && GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))) <= DWARF2_ADDR_SIZE) 11626 { 11627 mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl), 11628 GET_MODE (SUBREG_REG (rtl)), 11629 mem_mode, initialized); 11630 break; 11631 } 11632 if (dwarf_strict) 11633 break; 11634 if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl)))) 11635 break; 11636 if (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl))) 11637 && (GET_MODE_CLASS (mode) != MODE_INT 11638 || GET_MODE_CLASS (GET_MODE (SUBREG_REG (rtl))) != MODE_INT)) 11639 break; 11640 else 11641 { 11642 dw_die_ref type_die; 11643 dw_loc_descr_ref cvt; 11644 11645 mem_loc_result = mem_loc_descriptor (SUBREG_REG (rtl), 11646 GET_MODE (SUBREG_REG (rtl)), 11647 mem_mode, initialized); 11648 if (mem_loc_result == NULL) 11649 break; 11650 type_die = base_type_for_mode (mode, 11651 GET_MODE_CLASS (mode) == MODE_INT); 11652 if (type_die == NULL) 11653 { 11654 mem_loc_result = NULL; 11655 break; 11656 } 11657 if (GET_MODE_SIZE (mode) 11658 != GET_MODE_SIZE (GET_MODE (SUBREG_REG (rtl)))) 11659 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0); 11660 else 11661 cvt = new_loc_descr (DW_OP_GNU_reinterpret, 0, 0); 11662 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 11663 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die; 11664 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0; 11665 add_loc_descr (&mem_loc_result, cvt); 11666 } 11667 break; 11668 11669 case REG: 11670 if (GET_MODE_CLASS (mode) != MODE_INT 11671 || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE 11672 #ifdef POINTERS_EXTEND_UNSIGNED 11673 && (mode != Pmode || mem_mode == VOIDmode) 11674 #endif 11675 )) 11676 { 11677 dw_die_ref type_die; 11678 11679 if (dwarf_strict) 11680 break; 11681 if (REGNO (rtl) > FIRST_PSEUDO_REGISTER) 11682 break; 11683 type_die = base_type_for_mode (mode, 11684 GET_MODE_CLASS (mode) == MODE_INT); 11685 if (type_die == NULL) 11686 break; 11687 mem_loc_result = new_loc_descr (DW_OP_GNU_regval_type, 11688 dbx_reg_number (rtl), 0); 11689 mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_die_ref; 11690 mem_loc_result->dw_loc_oprnd2.v.val_die_ref.die = type_die; 11691 mem_loc_result->dw_loc_oprnd2.v.val_die_ref.external = 0; 11692 break; 11693 } 11694 /* Whenever a register number forms a part of the description of the 11695 method for calculating the (dynamic) address of a memory resident 11696 object, DWARF rules require the register number be referred to as 11697 a "base register". This distinction is not based in any way upon 11698 what category of register the hardware believes the given register 11699 belongs to. This is strictly DWARF terminology we're dealing with 11700 here. Note that in cases where the location of a memory-resident 11701 data object could be expressed as: OP_ADD (OP_BASEREG (basereg), 11702 OP_CONST (0)) the actual DWARF location descriptor that we generate 11703 may just be OP_BASEREG (basereg). This may look deceptively like 11704 the object in question was allocated to a register (rather than in 11705 memory) so DWARF consumers need to be aware of the subtle 11706 distinction between OP_REG and OP_BASEREG. */ 11707 if (REGNO (rtl) < FIRST_PSEUDO_REGISTER) 11708 mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED); 11709 else if (stack_realign_drap 11710 && crtl->drap_reg 11711 && crtl->args.internal_arg_pointer == rtl 11712 && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER) 11713 { 11714 /* If RTL is internal_arg_pointer, which has been optimized 11715 out, use DRAP instead. */ 11716 mem_loc_result = based_loc_descr (crtl->drap_reg, 0, 11717 VAR_INIT_STATUS_INITIALIZED); 11718 } 11719 break; 11720 11721 case SIGN_EXTEND: 11722 case ZERO_EXTEND: 11723 if (GET_MODE_CLASS (mode) != MODE_INT) 11724 break; 11725 op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)), 11726 mem_mode, VAR_INIT_STATUS_INITIALIZED); 11727 if (op0 == 0) 11728 break; 11729 else if (GET_CODE (rtl) == ZERO_EXTEND 11730 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE 11731 && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) 11732 < HOST_BITS_PER_WIDE_INT 11733 /* If DW_OP_const{1,2,4}u won't be used, it is shorter 11734 to expand zero extend as two shifts instead of 11735 masking. */ 11736 && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= 4) 11737 { 11738 enum machine_mode imode = GET_MODE (XEXP (rtl, 0)); 11739 mem_loc_result = op0; 11740 add_loc_descr (&mem_loc_result, 11741 int_loc_descriptor (GET_MODE_MASK (imode))); 11742 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_and, 0, 0)); 11743 } 11744 else if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE) 11745 { 11746 int shift = DWARF2_ADDR_SIZE 11747 - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))); 11748 shift *= BITS_PER_UNIT; 11749 if (GET_CODE (rtl) == SIGN_EXTEND) 11750 op = DW_OP_shra; 11751 else 11752 op = DW_OP_shr; 11753 mem_loc_result = op0; 11754 add_loc_descr (&mem_loc_result, int_loc_descriptor (shift)); 11755 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0)); 11756 add_loc_descr (&mem_loc_result, int_loc_descriptor (shift)); 11757 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0)); 11758 } 11759 else if (!dwarf_strict) 11760 { 11761 dw_die_ref type_die1, type_die2; 11762 dw_loc_descr_ref cvt; 11763 11764 type_die1 = base_type_for_mode (GET_MODE (XEXP (rtl, 0)), 11765 GET_CODE (rtl) == ZERO_EXTEND); 11766 if (type_die1 == NULL) 11767 break; 11768 type_die2 = base_type_for_mode (mode, 1); 11769 if (type_die2 == NULL) 11770 break; 11771 mem_loc_result = op0; 11772 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0); 11773 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 11774 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die1; 11775 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0; 11776 add_loc_descr (&mem_loc_result, cvt); 11777 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0); 11778 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 11779 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die2; 11780 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0; 11781 add_loc_descr (&mem_loc_result, cvt); 11782 } 11783 break; 11784 11785 case MEM: 11786 { 11787 rtx new_rtl = avoid_constant_pool_reference (rtl); 11788 if (new_rtl != rtl) 11789 { 11790 mem_loc_result = mem_loc_descriptor (new_rtl, mode, mem_mode, 11791 initialized); 11792 if (mem_loc_result != NULL) 11793 return mem_loc_result; 11794 } 11795 } 11796 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), 11797 get_address_mode (rtl), mode, 11798 VAR_INIT_STATUS_INITIALIZED); 11799 if (mem_loc_result == NULL) 11800 mem_loc_result = tls_mem_loc_descriptor (rtl); 11801 if (mem_loc_result != NULL) 11802 { 11803 if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE 11804 || GET_MODE_CLASS (mode) != MODE_INT) 11805 { 11806 dw_die_ref type_die; 11807 dw_loc_descr_ref deref; 11808 11809 if (dwarf_strict) 11810 return NULL; 11811 type_die 11812 = base_type_for_mode (mode, GET_MODE_CLASS (mode) == MODE_INT); 11813 if (type_die == NULL) 11814 return NULL; 11815 deref = new_loc_descr (DW_OP_GNU_deref_type, 11816 GET_MODE_SIZE (mode), 0); 11817 deref->dw_loc_oprnd2.val_class = dw_val_class_die_ref; 11818 deref->dw_loc_oprnd2.v.val_die_ref.die = type_die; 11819 deref->dw_loc_oprnd2.v.val_die_ref.external = 0; 11820 add_loc_descr (&mem_loc_result, deref); 11821 } 11822 else if (GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE) 11823 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0)); 11824 else 11825 add_loc_descr (&mem_loc_result, 11826 new_loc_descr (DW_OP_deref_size, 11827 GET_MODE_SIZE (mode), 0)); 11828 } 11829 break; 11830 11831 case LO_SUM: 11832 return mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, initialized); 11833 11834 case LABEL_REF: 11835 /* Some ports can transform a symbol ref into a label ref, because 11836 the symbol ref is too far away and has to be dumped into a constant 11837 pool. */ 11838 case CONST: 11839 case SYMBOL_REF: 11840 if (GET_MODE_CLASS (mode) != MODE_INT 11841 || (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE 11842 #ifdef POINTERS_EXTEND_UNSIGNED 11843 && (mode != Pmode || mem_mode == VOIDmode) 11844 #endif 11845 )) 11846 break; 11847 if (GET_CODE (rtl) == SYMBOL_REF 11848 && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE) 11849 { 11850 dw_loc_descr_ref temp; 11851 11852 /* If this is not defined, we have no way to emit the data. */ 11853 if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel) 11854 break; 11855 11856 /* We used to emit DW_OP_addr here, but that's wrong, since 11857 DW_OP_addr should be relocated by the debug info consumer, 11858 while DW_OP_GNU_push_tls_address operand should not. */ 11859 temp = new_loc_descr (DWARF2_ADDR_SIZE == 4 11860 ? DW_OP_const4u : DW_OP_const8u, 0, 0); 11861 temp->dw_loc_oprnd1.val_class = dw_val_class_addr; 11862 temp->dw_loc_oprnd1.v.val_addr = rtl; 11863 temp->dtprel = true; 11864 11865 mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0); 11866 add_loc_descr (&mem_loc_result, temp); 11867 11868 break; 11869 } 11870 11871 if (!const_ok_for_output (rtl)) 11872 break; 11873 11874 symref: 11875 mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0); 11876 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr; 11877 mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl; 11878 VEC_safe_push (rtx, gc, used_rtx_array, rtl); 11879 break; 11880 11881 case CONCAT: 11882 case CONCATN: 11883 case VAR_LOCATION: 11884 case DEBUG_IMPLICIT_PTR: 11885 expansion_failed (NULL_TREE, rtl, 11886 "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor"); 11887 return 0; 11888 11889 case ENTRY_VALUE: 11890 if (dwarf_strict) 11891 return NULL; 11892 if (REG_P (ENTRY_VALUE_EXP (rtl))) 11893 { 11894 if (GET_MODE_CLASS (mode) != MODE_INT 11895 || GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE) 11896 op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode, 11897 VOIDmode, VAR_INIT_STATUS_INITIALIZED); 11898 else 11899 op0 11900 = one_reg_loc_descriptor (dbx_reg_number (ENTRY_VALUE_EXP (rtl)), 11901 VAR_INIT_STATUS_INITIALIZED); 11902 } 11903 else if (MEM_P (ENTRY_VALUE_EXP (rtl)) 11904 && REG_P (XEXP (ENTRY_VALUE_EXP (rtl), 0))) 11905 { 11906 op0 = mem_loc_descriptor (ENTRY_VALUE_EXP (rtl), mode, 11907 VOIDmode, VAR_INIT_STATUS_INITIALIZED); 11908 if (op0 && op0->dw_loc_opc == DW_OP_fbreg) 11909 return NULL; 11910 } 11911 else 11912 gcc_unreachable (); 11913 if (op0 == NULL) 11914 return NULL; 11915 mem_loc_result = new_loc_descr (DW_OP_GNU_entry_value, 0, 0); 11916 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_loc; 11917 mem_loc_result->dw_loc_oprnd1.v.val_loc = op0; 11918 break; 11919 11920 case DEBUG_PARAMETER_REF: 11921 mem_loc_result = parameter_ref_descriptor (rtl); 11922 break; 11923 11924 case PRE_MODIFY: 11925 /* Extract the PLUS expression nested inside and fall into 11926 PLUS code below. */ 11927 rtl = XEXP (rtl, 1); 11928 goto plus; 11929 11930 case PRE_INC: 11931 case PRE_DEC: 11932 /* Turn these into a PLUS expression and fall into the PLUS code 11933 below. */ 11934 rtl = gen_rtx_PLUS (mode, XEXP (rtl, 0), 11935 GEN_INT (GET_CODE (rtl) == PRE_INC 11936 ? GET_MODE_UNIT_SIZE (mem_mode) 11937 : -GET_MODE_UNIT_SIZE (mem_mode))); 11938 11939 /* ... fall through ... */ 11940 11941 case PLUS: 11942 plus: 11943 if (is_based_loc (rtl) 11944 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE 11945 && GET_MODE_CLASS (mode) == MODE_INT) 11946 mem_loc_result = based_loc_descr (XEXP (rtl, 0), 11947 INTVAL (XEXP (rtl, 1)), 11948 VAR_INIT_STATUS_INITIALIZED); 11949 else 11950 { 11951 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, 11952 VAR_INIT_STATUS_INITIALIZED); 11953 if (mem_loc_result == 0) 11954 break; 11955 11956 if (CONST_INT_P (XEXP (rtl, 1)) 11957 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE) 11958 loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1))); 11959 else 11960 { 11961 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, 11962 VAR_INIT_STATUS_INITIALIZED); 11963 if (op1 == 0) 11964 break; 11965 add_loc_descr (&mem_loc_result, op1); 11966 add_loc_descr (&mem_loc_result, 11967 new_loc_descr (DW_OP_plus, 0, 0)); 11968 } 11969 } 11970 break; 11971 11972 /* If a pseudo-reg is optimized away, it is possible for it to 11973 be replaced with a MEM containing a multiply or shift. */ 11974 case MINUS: 11975 op = DW_OP_minus; 11976 goto do_binop; 11977 11978 case MULT: 11979 op = DW_OP_mul; 11980 goto do_binop; 11981 11982 case DIV: 11983 if (!dwarf_strict 11984 && GET_MODE_CLASS (mode) == MODE_INT 11985 && GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE) 11986 { 11987 mem_loc_result = typed_binop (DW_OP_div, rtl, 11988 base_type_for_mode (mode, 0), 11989 mode, mem_mode); 11990 break; 11991 } 11992 op = DW_OP_div; 11993 goto do_binop; 11994 11995 case UMOD: 11996 op = DW_OP_mod; 11997 goto do_binop; 11998 11999 case ASHIFT: 12000 op = DW_OP_shl; 12001 goto do_shift; 12002 12003 case ASHIFTRT: 12004 op = DW_OP_shra; 12005 goto do_shift; 12006 12007 case LSHIFTRT: 12008 op = DW_OP_shr; 12009 goto do_shift; 12010 12011 do_shift: 12012 if (GET_MODE_CLASS (mode) != MODE_INT) 12013 break; 12014 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, 12015 VAR_INIT_STATUS_INITIALIZED); 12016 { 12017 rtx rtlop1 = XEXP (rtl, 1); 12018 if (GET_MODE (rtlop1) != VOIDmode 12019 && GET_MODE_BITSIZE (GET_MODE (rtlop1)) 12020 < GET_MODE_BITSIZE (mode)) 12021 rtlop1 = gen_rtx_ZERO_EXTEND (mode, rtlop1); 12022 op1 = mem_loc_descriptor (rtlop1, mode, mem_mode, 12023 VAR_INIT_STATUS_INITIALIZED); 12024 } 12025 12026 if (op0 == 0 || op1 == 0) 12027 break; 12028 12029 mem_loc_result = op0; 12030 add_loc_descr (&mem_loc_result, op1); 12031 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0)); 12032 break; 12033 12034 case AND: 12035 op = DW_OP_and; 12036 goto do_binop; 12037 12038 case IOR: 12039 op = DW_OP_or; 12040 goto do_binop; 12041 12042 case XOR: 12043 op = DW_OP_xor; 12044 goto do_binop; 12045 12046 do_binop: 12047 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, 12048 VAR_INIT_STATUS_INITIALIZED); 12049 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, 12050 VAR_INIT_STATUS_INITIALIZED); 12051 12052 if (op0 == 0 || op1 == 0) 12053 break; 12054 12055 mem_loc_result = op0; 12056 add_loc_descr (&mem_loc_result, op1); 12057 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0)); 12058 break; 12059 12060 case MOD: 12061 if (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE && !dwarf_strict) 12062 { 12063 mem_loc_result = typed_binop (DW_OP_mod, rtl, 12064 base_type_for_mode (mode, 0), 12065 mode, mem_mode); 12066 break; 12067 } 12068 12069 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, 12070 VAR_INIT_STATUS_INITIALIZED); 12071 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, 12072 VAR_INIT_STATUS_INITIALIZED); 12073 12074 if (op0 == 0 || op1 == 0) 12075 break; 12076 12077 mem_loc_result = op0; 12078 add_loc_descr (&mem_loc_result, op1); 12079 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0)); 12080 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0)); 12081 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0)); 12082 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0)); 12083 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0)); 12084 break; 12085 12086 case UDIV: 12087 if (!dwarf_strict && GET_MODE_CLASS (mode) == MODE_INT) 12088 { 12089 if (GET_MODE_CLASS (mode) > DWARF2_ADDR_SIZE) 12090 { 12091 op = DW_OP_div; 12092 goto do_binop; 12093 } 12094 mem_loc_result = typed_binop (DW_OP_div, rtl, 12095 base_type_for_mode (mode, 1), 12096 mode, mem_mode); 12097 } 12098 break; 12099 12100 case NOT: 12101 op = DW_OP_not; 12102 goto do_unop; 12103 12104 case ABS: 12105 op = DW_OP_abs; 12106 goto do_unop; 12107 12108 case NEG: 12109 op = DW_OP_neg; 12110 goto do_unop; 12111 12112 do_unop: 12113 op0 = mem_loc_descriptor (XEXP (rtl, 0), mode, mem_mode, 12114 VAR_INIT_STATUS_INITIALIZED); 12115 12116 if (op0 == 0) 12117 break; 12118 12119 mem_loc_result = op0; 12120 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0)); 12121 break; 12122 12123 case CONST_INT: 12124 if (GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE 12125 #ifdef POINTERS_EXTEND_UNSIGNED 12126 || (mode == Pmode 12127 && mem_mode != VOIDmode 12128 && trunc_int_for_mode (INTVAL (rtl), ptr_mode) == INTVAL (rtl)) 12129 #endif 12130 ) 12131 { 12132 mem_loc_result = int_loc_descriptor (INTVAL (rtl)); 12133 break; 12134 } 12135 if (!dwarf_strict 12136 && (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT 12137 || GET_MODE_BITSIZE (mode) == 2 * HOST_BITS_PER_WIDE_INT)) 12138 { 12139 dw_die_ref type_die = base_type_for_mode (mode, 1); 12140 enum machine_mode amode; 12141 if (type_die == NULL) 12142 return NULL; 12143 amode = mode_for_size (DWARF2_ADDR_SIZE * BITS_PER_UNIT, 12144 MODE_INT, 0); 12145 if (INTVAL (rtl) >= 0 12146 && amode != BLKmode 12147 && trunc_int_for_mode (INTVAL (rtl), amode) == INTVAL (rtl) 12148 /* const DW_OP_GNU_convert <XXX> vs. 12149 DW_OP_GNU_const_type <XXX, 1, const>. */ 12150 && size_of_int_loc_descriptor (INTVAL (rtl)) + 1 + 1 12151 < (unsigned long) 1 + 1 + 1 + GET_MODE_SIZE (mode)) 12152 { 12153 mem_loc_result = int_loc_descriptor (INTVAL (rtl)); 12154 op0 = new_loc_descr (DW_OP_GNU_convert, 0, 0); 12155 op0->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 12156 op0->dw_loc_oprnd1.v.val_die_ref.die = type_die; 12157 op0->dw_loc_oprnd1.v.val_die_ref.external = 0; 12158 add_loc_descr (&mem_loc_result, op0); 12159 return mem_loc_result; 12160 } 12161 mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 12162 INTVAL (rtl)); 12163 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 12164 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die; 12165 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0; 12166 if (GET_MODE_BITSIZE (mode) == HOST_BITS_PER_WIDE_INT) 12167 mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_const; 12168 else 12169 { 12170 mem_loc_result->dw_loc_oprnd2.val_class 12171 = dw_val_class_const_double; 12172 mem_loc_result->dw_loc_oprnd2.v.val_double 12173 = shwi_to_double_int (INTVAL (rtl)); 12174 } 12175 } 12176 break; 12177 12178 case CONST_DOUBLE: 12179 if (!dwarf_strict) 12180 { 12181 dw_die_ref type_die; 12182 12183 /* Note that a CONST_DOUBLE rtx could represent either an integer 12184 or a floating-point constant. A CONST_DOUBLE is used whenever 12185 the constant requires more than one word in order to be 12186 adequately represented. We output CONST_DOUBLEs as blocks. */ 12187 if (mode == VOIDmode 12188 || (GET_MODE (rtl) == VOIDmode 12189 && GET_MODE_BITSIZE (mode) != 2 * HOST_BITS_PER_WIDE_INT)) 12190 break; 12191 type_die = base_type_for_mode (mode, 12192 GET_MODE_CLASS (mode) == MODE_INT); 12193 if (type_die == NULL) 12194 return NULL; 12195 mem_loc_result = new_loc_descr (DW_OP_GNU_const_type, 0, 0); 12196 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 12197 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.die = type_die; 12198 mem_loc_result->dw_loc_oprnd1.v.val_die_ref.external = 0; 12199 if (SCALAR_FLOAT_MODE_P (mode)) 12200 { 12201 unsigned int length = GET_MODE_SIZE (mode); 12202 unsigned char *array 12203 = (unsigned char*) ggc_alloc_atomic (length); 12204 12205 insert_float (rtl, array); 12206 mem_loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec; 12207 mem_loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4; 12208 mem_loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4; 12209 mem_loc_result->dw_loc_oprnd2.v.val_vec.array = array; 12210 } 12211 else 12212 { 12213 mem_loc_result->dw_loc_oprnd2.val_class 12214 = dw_val_class_const_double; 12215 mem_loc_result->dw_loc_oprnd2.v.val_double 12216 = rtx_to_double_int (rtl); 12217 } 12218 } 12219 break; 12220 12221 case EQ: 12222 mem_loc_result = scompare_loc_descriptor (DW_OP_eq, rtl, mem_mode); 12223 break; 12224 12225 case GE: 12226 mem_loc_result = scompare_loc_descriptor (DW_OP_ge, rtl, mem_mode); 12227 break; 12228 12229 case GT: 12230 mem_loc_result = scompare_loc_descriptor (DW_OP_gt, rtl, mem_mode); 12231 break; 12232 12233 case LE: 12234 mem_loc_result = scompare_loc_descriptor (DW_OP_le, rtl, mem_mode); 12235 break; 12236 12237 case LT: 12238 mem_loc_result = scompare_loc_descriptor (DW_OP_lt, rtl, mem_mode); 12239 break; 12240 12241 case NE: 12242 mem_loc_result = scompare_loc_descriptor (DW_OP_ne, rtl, mem_mode); 12243 break; 12244 12245 case GEU: 12246 mem_loc_result = ucompare_loc_descriptor (DW_OP_ge, rtl, mem_mode); 12247 break; 12248 12249 case GTU: 12250 mem_loc_result = ucompare_loc_descriptor (DW_OP_gt, rtl, mem_mode); 12251 break; 12252 12253 case LEU: 12254 mem_loc_result = ucompare_loc_descriptor (DW_OP_le, rtl, mem_mode); 12255 break; 12256 12257 case LTU: 12258 mem_loc_result = ucompare_loc_descriptor (DW_OP_lt, rtl, mem_mode); 12259 break; 12260 12261 case UMIN: 12262 case UMAX: 12263 if (GET_MODE_CLASS (mode) != MODE_INT) 12264 break; 12265 /* FALLTHRU */ 12266 case SMIN: 12267 case SMAX: 12268 mem_loc_result = minmax_loc_descriptor (rtl, mode, mem_mode); 12269 break; 12270 12271 case ZERO_EXTRACT: 12272 case SIGN_EXTRACT: 12273 if (CONST_INT_P (XEXP (rtl, 1)) 12274 && CONST_INT_P (XEXP (rtl, 2)) 12275 && ((unsigned) INTVAL (XEXP (rtl, 1)) 12276 + (unsigned) INTVAL (XEXP (rtl, 2)) 12277 <= GET_MODE_BITSIZE (mode)) 12278 && GET_MODE_CLASS (mode) == MODE_INT 12279 && GET_MODE_SIZE (mode) <= DWARF2_ADDR_SIZE 12280 && GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE) 12281 { 12282 int shift, size; 12283 op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)), 12284 mem_mode, VAR_INIT_STATUS_INITIALIZED); 12285 if (op0 == 0) 12286 break; 12287 if (GET_CODE (rtl) == SIGN_EXTRACT) 12288 op = DW_OP_shra; 12289 else 12290 op = DW_OP_shr; 12291 mem_loc_result = op0; 12292 size = INTVAL (XEXP (rtl, 1)); 12293 shift = INTVAL (XEXP (rtl, 2)); 12294 if (BITS_BIG_ENDIAN) 12295 shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) 12296 - shift - size; 12297 if (shift + size != (int) DWARF2_ADDR_SIZE) 12298 { 12299 add_loc_descr (&mem_loc_result, 12300 int_loc_descriptor (DWARF2_ADDR_SIZE 12301 - shift - size)); 12302 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0)); 12303 } 12304 if (size != (int) DWARF2_ADDR_SIZE) 12305 { 12306 add_loc_descr (&mem_loc_result, 12307 int_loc_descriptor (DWARF2_ADDR_SIZE - size)); 12308 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0)); 12309 } 12310 } 12311 break; 12312 12313 case IF_THEN_ELSE: 12314 { 12315 dw_loc_descr_ref op2, bra_node, drop_node; 12316 op0 = mem_loc_descriptor (XEXP (rtl, 0), 12317 GET_MODE (XEXP (rtl, 0)) == VOIDmode 12318 ? word_mode : GET_MODE (XEXP (rtl, 0)), 12319 mem_mode, VAR_INIT_STATUS_INITIALIZED); 12320 op1 = mem_loc_descriptor (XEXP (rtl, 1), mode, mem_mode, 12321 VAR_INIT_STATUS_INITIALIZED); 12322 op2 = mem_loc_descriptor (XEXP (rtl, 2), mode, mem_mode, 12323 VAR_INIT_STATUS_INITIALIZED); 12324 if (op0 == NULL || op1 == NULL || op2 == NULL) 12325 break; 12326 12327 mem_loc_result = op1; 12328 add_loc_descr (&mem_loc_result, op2); 12329 add_loc_descr (&mem_loc_result, op0); 12330 bra_node = new_loc_descr (DW_OP_bra, 0, 0); 12331 add_loc_descr (&mem_loc_result, bra_node); 12332 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0)); 12333 drop_node = new_loc_descr (DW_OP_drop, 0, 0); 12334 add_loc_descr (&mem_loc_result, drop_node); 12335 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc; 12336 bra_node->dw_loc_oprnd1.v.val_loc = drop_node; 12337 } 12338 break; 12339 12340 case FLOAT_EXTEND: 12341 case FLOAT_TRUNCATE: 12342 case FLOAT: 12343 case UNSIGNED_FLOAT: 12344 case FIX: 12345 case UNSIGNED_FIX: 12346 if (!dwarf_strict) 12347 { 12348 dw_die_ref type_die; 12349 dw_loc_descr_ref cvt; 12350 12351 op0 = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (XEXP (rtl, 0)), 12352 mem_mode, VAR_INIT_STATUS_INITIALIZED); 12353 if (op0 == NULL) 12354 break; 12355 if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) == MODE_INT 12356 && (GET_CODE (rtl) == FLOAT 12357 || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) 12358 <= DWARF2_ADDR_SIZE)) 12359 { 12360 type_die = base_type_for_mode (GET_MODE (XEXP (rtl, 0)), 12361 GET_CODE (rtl) == UNSIGNED_FLOAT); 12362 if (type_die == NULL) 12363 break; 12364 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0); 12365 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 12366 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die; 12367 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0; 12368 add_loc_descr (&op0, cvt); 12369 } 12370 type_die = base_type_for_mode (mode, GET_CODE (rtl) == UNSIGNED_FIX); 12371 if (type_die == NULL) 12372 break; 12373 cvt = new_loc_descr (DW_OP_GNU_convert, 0, 0); 12374 cvt->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 12375 cvt->dw_loc_oprnd1.v.val_die_ref.die = type_die; 12376 cvt->dw_loc_oprnd1.v.val_die_ref.external = 0; 12377 add_loc_descr (&op0, cvt); 12378 if (GET_MODE_CLASS (mode) == MODE_INT 12379 && (GET_CODE (rtl) == FIX 12380 || GET_MODE_SIZE (mode) < DWARF2_ADDR_SIZE)) 12381 { 12382 op0 = convert_descriptor_to_mode (mode, op0); 12383 if (op0 == NULL) 12384 break; 12385 } 12386 mem_loc_result = op0; 12387 } 12388 break; 12389 12390 case CLZ: 12391 case CTZ: 12392 case FFS: 12393 mem_loc_result = clz_loc_descriptor (rtl, mode, mem_mode); 12394 break; 12395 12396 case POPCOUNT: 12397 case PARITY: 12398 mem_loc_result = popcount_loc_descriptor (rtl, mode, mem_mode); 12399 break; 12400 12401 case BSWAP: 12402 mem_loc_result = bswap_loc_descriptor (rtl, mode, mem_mode); 12403 break; 12404 12405 case ROTATE: 12406 case ROTATERT: 12407 mem_loc_result = rotate_loc_descriptor (rtl, mode, mem_mode); 12408 break; 12409 12410 case COMPARE: 12411 case TRUNCATE: 12412 /* In theory, we could implement the above. */ 12413 /* DWARF cannot represent the unsigned compare operations 12414 natively. */ 12415 case SS_MULT: 12416 case US_MULT: 12417 case SS_DIV: 12418 case US_DIV: 12419 case SS_PLUS: 12420 case US_PLUS: 12421 case SS_MINUS: 12422 case US_MINUS: 12423 case SS_NEG: 12424 case US_NEG: 12425 case SS_ABS: 12426 case SS_ASHIFT: 12427 case US_ASHIFT: 12428 case SS_TRUNCATE: 12429 case US_TRUNCATE: 12430 case UNORDERED: 12431 case ORDERED: 12432 case UNEQ: 12433 case UNGE: 12434 case UNGT: 12435 case UNLE: 12436 case UNLT: 12437 case LTGT: 12438 case FRACT_CONVERT: 12439 case UNSIGNED_FRACT_CONVERT: 12440 case SAT_FRACT: 12441 case UNSIGNED_SAT_FRACT: 12442 case SQRT: 12443 case ASM_OPERANDS: 12444 case VEC_MERGE: 12445 case VEC_SELECT: 12446 case VEC_CONCAT: 12447 case VEC_DUPLICATE: 12448 case UNSPEC: 12449 case HIGH: 12450 case FMA: 12451 case STRICT_LOW_PART: 12452 case CONST_VECTOR: 12453 case CONST_FIXED: 12454 case CLRSB: 12455 /* If delegitimize_address couldn't do anything with the UNSPEC, we 12456 can't express it in the debug info. This can happen e.g. with some 12457 TLS UNSPECs. */ 12458 break; 12459 12460 case CONST_STRING: 12461 resolve_one_addr (&rtl, NULL); 12462 goto symref; 12463 12464 default: 12465 #ifdef ENABLE_CHECKING 12466 print_rtl (stderr, rtl); 12467 gcc_unreachable (); 12468 #else 12469 break; 12470 #endif 12471 } 12472 12473 if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED) 12474 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0)); 12475 12476 return mem_loc_result; 12477 } 12478 12479 /* Return a descriptor that describes the concatenation of two locations. 12480 This is typically a complex variable. */ 12481 12482 static dw_loc_descr_ref 12483 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized) 12484 { 12485 dw_loc_descr_ref cc_loc_result = NULL; 12486 dw_loc_descr_ref x0_ref 12487 = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED); 12488 dw_loc_descr_ref x1_ref 12489 = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED); 12490 12491 if (x0_ref == 0 || x1_ref == 0) 12492 return 0; 12493 12494 cc_loc_result = x0_ref; 12495 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0))); 12496 12497 add_loc_descr (&cc_loc_result, x1_ref); 12498 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1))); 12499 12500 if (initialized == VAR_INIT_STATUS_UNINITIALIZED) 12501 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0)); 12502 12503 return cc_loc_result; 12504 } 12505 12506 /* Return a descriptor that describes the concatenation of N 12507 locations. */ 12508 12509 static dw_loc_descr_ref 12510 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized) 12511 { 12512 unsigned int i; 12513 dw_loc_descr_ref cc_loc_result = NULL; 12514 unsigned int n = XVECLEN (concatn, 0); 12515 12516 for (i = 0; i < n; ++i) 12517 { 12518 dw_loc_descr_ref ref; 12519 rtx x = XVECEXP (concatn, 0, i); 12520 12521 ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED); 12522 if (ref == NULL) 12523 return NULL; 12524 12525 add_loc_descr (&cc_loc_result, ref); 12526 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x))); 12527 } 12528 12529 if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED) 12530 add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0)); 12531 12532 return cc_loc_result; 12533 } 12534 12535 /* Helper function for loc_descriptor. Return DW_OP_GNU_implicit_pointer 12536 for DEBUG_IMPLICIT_PTR RTL. */ 12537 12538 static dw_loc_descr_ref 12539 implicit_ptr_descriptor (rtx rtl, HOST_WIDE_INT offset) 12540 { 12541 dw_loc_descr_ref ret; 12542 dw_die_ref ref; 12543 12544 if (dwarf_strict) 12545 return NULL; 12546 gcc_assert (TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == VAR_DECL 12547 || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == PARM_DECL 12548 || TREE_CODE (DEBUG_IMPLICIT_PTR_DECL (rtl)) == RESULT_DECL); 12549 ref = lookup_decl_die (DEBUG_IMPLICIT_PTR_DECL (rtl)); 12550 ret = new_loc_descr (DW_OP_GNU_implicit_pointer, 0, offset); 12551 ret->dw_loc_oprnd2.val_class = dw_val_class_const; 12552 if (ref) 12553 { 12554 ret->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 12555 ret->dw_loc_oprnd1.v.val_die_ref.die = ref; 12556 ret->dw_loc_oprnd1.v.val_die_ref.external = 0; 12557 } 12558 else 12559 { 12560 ret->dw_loc_oprnd1.val_class = dw_val_class_decl_ref; 12561 ret->dw_loc_oprnd1.v.val_decl_ref = DEBUG_IMPLICIT_PTR_DECL (rtl); 12562 } 12563 return ret; 12564 } 12565 12566 /* Output a proper Dwarf location descriptor for a variable or parameter 12567 which is either allocated in a register or in a memory location. For a 12568 register, we just generate an OP_REG and the register number. For a 12569 memory location we provide a Dwarf postfix expression describing how to 12570 generate the (dynamic) address of the object onto the address stack. 12571 12572 MODE is mode of the decl if this loc_descriptor is going to be used in 12573 .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are 12574 allowed, VOIDmode otherwise. 12575 12576 If we don't know how to describe it, return 0. */ 12577 12578 static dw_loc_descr_ref 12579 loc_descriptor (rtx rtl, enum machine_mode mode, 12580 enum var_init_status initialized) 12581 { 12582 dw_loc_descr_ref loc_result = NULL; 12583 12584 switch (GET_CODE (rtl)) 12585 { 12586 case SUBREG: 12587 /* The case of a subreg may arise when we have a local (register) 12588 variable or a formal (register) parameter which doesn't quite fill 12589 up an entire register. For now, just assume that it is 12590 legitimate to make the Dwarf info refer to the whole register which 12591 contains the given subreg. */ 12592 if (REG_P (SUBREG_REG (rtl)) && subreg_lowpart_p (rtl)) 12593 loc_result = loc_descriptor (SUBREG_REG (rtl), 12594 GET_MODE (SUBREG_REG (rtl)), initialized); 12595 else 12596 goto do_default; 12597 break; 12598 12599 case REG: 12600 loc_result = reg_loc_descriptor (rtl, initialized); 12601 break; 12602 12603 case MEM: 12604 loc_result = mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl), 12605 GET_MODE (rtl), initialized); 12606 if (loc_result == NULL) 12607 loc_result = tls_mem_loc_descriptor (rtl); 12608 if (loc_result == NULL) 12609 { 12610 rtx new_rtl = avoid_constant_pool_reference (rtl); 12611 if (new_rtl != rtl) 12612 loc_result = loc_descriptor (new_rtl, mode, initialized); 12613 } 12614 break; 12615 12616 case CONCAT: 12617 loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1), 12618 initialized); 12619 break; 12620 12621 case CONCATN: 12622 loc_result = concatn_loc_descriptor (rtl, initialized); 12623 break; 12624 12625 case VAR_LOCATION: 12626 /* Single part. */ 12627 if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL) 12628 { 12629 rtx loc = PAT_VAR_LOCATION_LOC (rtl); 12630 if (GET_CODE (loc) == EXPR_LIST) 12631 loc = XEXP (loc, 0); 12632 loc_result = loc_descriptor (loc, mode, initialized); 12633 break; 12634 } 12635 12636 rtl = XEXP (rtl, 1); 12637 /* FALLTHRU */ 12638 12639 case PARALLEL: 12640 { 12641 rtvec par_elems = XVEC (rtl, 0); 12642 int num_elem = GET_NUM_ELEM (par_elems); 12643 enum machine_mode mode; 12644 int i; 12645 12646 /* Create the first one, so we have something to add to. */ 12647 loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0), 12648 VOIDmode, initialized); 12649 if (loc_result == NULL) 12650 return NULL; 12651 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0)); 12652 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode)); 12653 for (i = 1; i < num_elem; i++) 12654 { 12655 dw_loc_descr_ref temp; 12656 12657 temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0), 12658 VOIDmode, initialized); 12659 if (temp == NULL) 12660 return NULL; 12661 add_loc_descr (&loc_result, temp); 12662 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0)); 12663 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode)); 12664 } 12665 } 12666 break; 12667 12668 case CONST_INT: 12669 if (mode != VOIDmode && mode != BLKmode) 12670 loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode), 12671 INTVAL (rtl)); 12672 break; 12673 12674 case CONST_DOUBLE: 12675 if (mode == VOIDmode) 12676 mode = GET_MODE (rtl); 12677 12678 if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict)) 12679 { 12680 gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl)); 12681 12682 /* Note that a CONST_DOUBLE rtx could represent either an integer 12683 or a floating-point constant. A CONST_DOUBLE is used whenever 12684 the constant requires more than one word in order to be 12685 adequately represented. We output CONST_DOUBLEs as blocks. */ 12686 loc_result = new_loc_descr (DW_OP_implicit_value, 12687 GET_MODE_SIZE (mode), 0); 12688 if (SCALAR_FLOAT_MODE_P (mode)) 12689 { 12690 unsigned int length = GET_MODE_SIZE (mode); 12691 unsigned char *array 12692 = (unsigned char*) ggc_alloc_atomic (length); 12693 12694 insert_float (rtl, array); 12695 loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec; 12696 loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4; 12697 loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4; 12698 loc_result->dw_loc_oprnd2.v.val_vec.array = array; 12699 } 12700 else 12701 { 12702 loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double; 12703 loc_result->dw_loc_oprnd2.v.val_double 12704 = rtx_to_double_int (rtl); 12705 } 12706 } 12707 break; 12708 12709 case CONST_VECTOR: 12710 if (mode == VOIDmode) 12711 mode = GET_MODE (rtl); 12712 12713 if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict)) 12714 { 12715 unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl)); 12716 unsigned int length = CONST_VECTOR_NUNITS (rtl); 12717 unsigned char *array = (unsigned char *) 12718 ggc_alloc_atomic (length * elt_size); 12719 unsigned int i; 12720 unsigned char *p; 12721 12722 gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl)); 12723 switch (GET_MODE_CLASS (mode)) 12724 { 12725 case MODE_VECTOR_INT: 12726 for (i = 0, p = array; i < length; i++, p += elt_size) 12727 { 12728 rtx elt = CONST_VECTOR_ELT (rtl, i); 12729 double_int val = rtx_to_double_int (elt); 12730 12731 if (elt_size <= sizeof (HOST_WIDE_INT)) 12732 insert_int (double_int_to_shwi (val), elt_size, p); 12733 else 12734 { 12735 gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT)); 12736 insert_double (val, p); 12737 } 12738 } 12739 break; 12740 12741 case MODE_VECTOR_FLOAT: 12742 for (i = 0, p = array; i < length; i++, p += elt_size) 12743 { 12744 rtx elt = CONST_VECTOR_ELT (rtl, i); 12745 insert_float (elt, p); 12746 } 12747 break; 12748 12749 default: 12750 gcc_unreachable (); 12751 } 12752 12753 loc_result = new_loc_descr (DW_OP_implicit_value, 12754 length * elt_size, 0); 12755 loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec; 12756 loc_result->dw_loc_oprnd2.v.val_vec.length = length; 12757 loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size; 12758 loc_result->dw_loc_oprnd2.v.val_vec.array = array; 12759 } 12760 break; 12761 12762 case CONST: 12763 if (mode == VOIDmode 12764 || GET_CODE (XEXP (rtl, 0)) == CONST_INT 12765 || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE 12766 || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR) 12767 { 12768 loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized); 12769 break; 12770 } 12771 /* FALLTHROUGH */ 12772 case SYMBOL_REF: 12773 if (!const_ok_for_output (rtl)) 12774 break; 12775 case LABEL_REF: 12776 if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE 12777 && (dwarf_version >= 4 || !dwarf_strict)) 12778 { 12779 loc_result = new_loc_descr (DW_OP_addr, 0, 0); 12780 loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr; 12781 loc_result->dw_loc_oprnd1.v.val_addr = rtl; 12782 add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0)); 12783 VEC_safe_push (rtx, gc, used_rtx_array, rtl); 12784 } 12785 break; 12786 12787 case DEBUG_IMPLICIT_PTR: 12788 loc_result = implicit_ptr_descriptor (rtl, 0); 12789 break; 12790 12791 case PLUS: 12792 if (GET_CODE (XEXP (rtl, 0)) == DEBUG_IMPLICIT_PTR 12793 && CONST_INT_P (XEXP (rtl, 1))) 12794 { 12795 loc_result 12796 = implicit_ptr_descriptor (XEXP (rtl, 0), INTVAL (XEXP (rtl, 1))); 12797 break; 12798 } 12799 /* FALLTHRU */ 12800 do_default: 12801 default: 12802 if ((GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode 12803 && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE 12804 && dwarf_version >= 4) 12805 || (!dwarf_strict && mode != VOIDmode && mode != BLKmode)) 12806 { 12807 /* Value expression. */ 12808 loc_result = mem_loc_descriptor (rtl, mode, VOIDmode, initialized); 12809 if (loc_result) 12810 add_loc_descr (&loc_result, 12811 new_loc_descr (DW_OP_stack_value, 0, 0)); 12812 } 12813 break; 12814 } 12815 12816 return loc_result; 12817 } 12818 12819 /* We need to figure out what section we should use as the base for the 12820 address ranges where a given location is valid. 12821 1. If this particular DECL has a section associated with it, use that. 12822 2. If this function has a section associated with it, use that. 12823 3. Otherwise, use the text section. 12824 XXX: If you split a variable across multiple sections, we won't notice. */ 12825 12826 static const char * 12827 secname_for_decl (const_tree decl) 12828 { 12829 const char *secname; 12830 12831 if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl)) 12832 { 12833 tree sectree = DECL_SECTION_NAME (decl); 12834 secname = TREE_STRING_POINTER (sectree); 12835 } 12836 else if (current_function_decl && DECL_SECTION_NAME (current_function_decl)) 12837 { 12838 tree sectree = DECL_SECTION_NAME (current_function_decl); 12839 secname = TREE_STRING_POINTER (sectree); 12840 } 12841 else if (cfun && in_cold_section_p) 12842 secname = crtl->subsections.cold_section_label; 12843 else 12844 secname = text_section_label; 12845 12846 return secname; 12847 } 12848 12849 /* Return true when DECL_BY_REFERENCE is defined and set for DECL. */ 12850 12851 static bool 12852 decl_by_reference_p (tree decl) 12853 { 12854 return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL 12855 || TREE_CODE (decl) == VAR_DECL) 12856 && DECL_BY_REFERENCE (decl)); 12857 } 12858 12859 /* Helper function for dw_loc_list. Compute proper Dwarf location descriptor 12860 for VARLOC. */ 12861 12862 static dw_loc_descr_ref 12863 dw_loc_list_1 (tree loc, rtx varloc, int want_address, 12864 enum var_init_status initialized) 12865 { 12866 int have_address = 0; 12867 dw_loc_descr_ref descr; 12868 enum machine_mode mode; 12869 12870 if (want_address != 2) 12871 { 12872 gcc_assert (GET_CODE (varloc) == VAR_LOCATION); 12873 /* Single part. */ 12874 if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL) 12875 { 12876 varloc = PAT_VAR_LOCATION_LOC (varloc); 12877 if (GET_CODE (varloc) == EXPR_LIST) 12878 varloc = XEXP (varloc, 0); 12879 mode = GET_MODE (varloc); 12880 if (MEM_P (varloc)) 12881 { 12882 rtx addr = XEXP (varloc, 0); 12883 descr = mem_loc_descriptor (addr, get_address_mode (varloc), 12884 mode, initialized); 12885 if (descr) 12886 have_address = 1; 12887 else 12888 { 12889 rtx x = avoid_constant_pool_reference (varloc); 12890 if (x != varloc) 12891 descr = mem_loc_descriptor (x, mode, VOIDmode, 12892 initialized); 12893 } 12894 } 12895 else 12896 descr = mem_loc_descriptor (varloc, mode, VOIDmode, initialized); 12897 } 12898 else 12899 return 0; 12900 } 12901 else 12902 { 12903 if (GET_CODE (varloc) == VAR_LOCATION) 12904 mode = DECL_MODE (PAT_VAR_LOCATION_DECL (varloc)); 12905 else 12906 mode = DECL_MODE (loc); 12907 descr = loc_descriptor (varloc, mode, initialized); 12908 have_address = 1; 12909 } 12910 12911 if (!descr) 12912 return 0; 12913 12914 if (want_address == 2 && !have_address 12915 && (dwarf_version >= 4 || !dwarf_strict)) 12916 { 12917 if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE) 12918 { 12919 expansion_failed (loc, NULL_RTX, 12920 "DWARF address size mismatch"); 12921 return 0; 12922 } 12923 add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0)); 12924 have_address = 1; 12925 } 12926 /* Show if we can't fill the request for an address. */ 12927 if (want_address && !have_address) 12928 { 12929 expansion_failed (loc, NULL_RTX, 12930 "Want address and only have value"); 12931 return 0; 12932 } 12933 12934 /* If we've got an address and don't want one, dereference. */ 12935 if (!want_address && have_address) 12936 { 12937 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc)); 12938 enum dwarf_location_atom op; 12939 12940 if (size > DWARF2_ADDR_SIZE || size == -1) 12941 { 12942 expansion_failed (loc, NULL_RTX, 12943 "DWARF address size mismatch"); 12944 return 0; 12945 } 12946 else if (size == DWARF2_ADDR_SIZE) 12947 op = DW_OP_deref; 12948 else 12949 op = DW_OP_deref_size; 12950 12951 add_loc_descr (&descr, new_loc_descr (op, size, 0)); 12952 } 12953 12954 return descr; 12955 } 12956 12957 /* Create a DW_OP_piece or DW_OP_bit_piece for bitsize, or return NULL 12958 if it is not possible. */ 12959 12960 static dw_loc_descr_ref 12961 new_loc_descr_op_bit_piece (HOST_WIDE_INT bitsize, HOST_WIDE_INT offset) 12962 { 12963 if ((bitsize % BITS_PER_UNIT) == 0 && offset == 0) 12964 return new_loc_descr (DW_OP_piece, bitsize / BITS_PER_UNIT, 0); 12965 else if (dwarf_version >= 3 || !dwarf_strict) 12966 return new_loc_descr (DW_OP_bit_piece, bitsize, offset); 12967 else 12968 return NULL; 12969 } 12970 12971 /* Helper function for dw_loc_list. Compute proper Dwarf location descriptor 12972 for VAR_LOC_NOTE for variable DECL that has been optimized by SRA. */ 12973 12974 static dw_loc_descr_ref 12975 dw_sra_loc_expr (tree decl, rtx loc) 12976 { 12977 rtx p; 12978 unsigned int padsize = 0; 12979 dw_loc_descr_ref descr, *descr_tail; 12980 unsigned HOST_WIDE_INT decl_size; 12981 rtx varloc; 12982 enum var_init_status initialized; 12983 12984 if (DECL_SIZE (decl) == NULL 12985 || !host_integerp (DECL_SIZE (decl), 1)) 12986 return NULL; 12987 12988 decl_size = tree_low_cst (DECL_SIZE (decl), 1); 12989 descr = NULL; 12990 descr_tail = &descr; 12991 12992 for (p = loc; p; p = XEXP (p, 1)) 12993 { 12994 unsigned int bitsize = decl_piece_bitsize (p); 12995 rtx loc_note = *decl_piece_varloc_ptr (p); 12996 dw_loc_descr_ref cur_descr; 12997 dw_loc_descr_ref *tail, last = NULL; 12998 unsigned int opsize = 0; 12999 13000 if (loc_note == NULL_RTX 13001 || NOTE_VAR_LOCATION_LOC (loc_note) == NULL_RTX) 13002 { 13003 padsize += bitsize; 13004 continue; 13005 } 13006 initialized = NOTE_VAR_LOCATION_STATUS (loc_note); 13007 varloc = NOTE_VAR_LOCATION (loc_note); 13008 cur_descr = dw_loc_list_1 (decl, varloc, 2, initialized); 13009 if (cur_descr == NULL) 13010 { 13011 padsize += bitsize; 13012 continue; 13013 } 13014 13015 /* Check that cur_descr either doesn't use 13016 DW_OP_*piece operations, or their sum is equal 13017 to bitsize. Otherwise we can't embed it. */ 13018 for (tail = &cur_descr; *tail != NULL; 13019 tail = &(*tail)->dw_loc_next) 13020 if ((*tail)->dw_loc_opc == DW_OP_piece) 13021 { 13022 opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned 13023 * BITS_PER_UNIT; 13024 last = *tail; 13025 } 13026 else if ((*tail)->dw_loc_opc == DW_OP_bit_piece) 13027 { 13028 opsize += (*tail)->dw_loc_oprnd1.v.val_unsigned; 13029 last = *tail; 13030 } 13031 13032 if (last != NULL && opsize != bitsize) 13033 { 13034 padsize += bitsize; 13035 continue; 13036 } 13037 13038 /* If there is a hole, add DW_OP_*piece after empty DWARF 13039 expression, which means that those bits are optimized out. */ 13040 if (padsize) 13041 { 13042 if (padsize > decl_size) 13043 return NULL; 13044 decl_size -= padsize; 13045 *descr_tail = new_loc_descr_op_bit_piece (padsize, 0); 13046 if (*descr_tail == NULL) 13047 return NULL; 13048 descr_tail = &(*descr_tail)->dw_loc_next; 13049 padsize = 0; 13050 } 13051 *descr_tail = cur_descr; 13052 descr_tail = tail; 13053 if (bitsize > decl_size) 13054 return NULL; 13055 decl_size -= bitsize; 13056 if (last == NULL) 13057 { 13058 HOST_WIDE_INT offset = 0; 13059 if (GET_CODE (varloc) == VAR_LOCATION 13060 && GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL) 13061 { 13062 varloc = PAT_VAR_LOCATION_LOC (varloc); 13063 if (GET_CODE (varloc) == EXPR_LIST) 13064 varloc = XEXP (varloc, 0); 13065 } 13066 do 13067 { 13068 if (GET_CODE (varloc) == CONST 13069 || GET_CODE (varloc) == SIGN_EXTEND 13070 || GET_CODE (varloc) == ZERO_EXTEND) 13071 varloc = XEXP (varloc, 0); 13072 else if (GET_CODE (varloc) == SUBREG) 13073 varloc = SUBREG_REG (varloc); 13074 else 13075 break; 13076 } 13077 while (1); 13078 /* DW_OP_bit_size offset should be zero for register 13079 or implicit location descriptions and empty location 13080 descriptions, but for memory addresses needs big endian 13081 adjustment. */ 13082 if (MEM_P (varloc)) 13083 { 13084 unsigned HOST_WIDE_INT memsize 13085 = MEM_SIZE (varloc) * BITS_PER_UNIT; 13086 if (memsize != bitsize) 13087 { 13088 if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN 13089 && (memsize > BITS_PER_WORD || bitsize > BITS_PER_WORD)) 13090 return NULL; 13091 if (memsize < bitsize) 13092 return NULL; 13093 if (BITS_BIG_ENDIAN) 13094 offset = memsize - bitsize; 13095 } 13096 } 13097 13098 *descr_tail = new_loc_descr_op_bit_piece (bitsize, offset); 13099 if (*descr_tail == NULL) 13100 return NULL; 13101 descr_tail = &(*descr_tail)->dw_loc_next; 13102 } 13103 } 13104 13105 /* If there were any non-empty expressions, add padding till the end of 13106 the decl. */ 13107 if (descr != NULL && decl_size != 0) 13108 { 13109 *descr_tail = new_loc_descr_op_bit_piece (decl_size, 0); 13110 if (*descr_tail == NULL) 13111 return NULL; 13112 } 13113 return descr; 13114 } 13115 13116 /* Return the dwarf representation of the location list LOC_LIST of 13117 DECL. WANT_ADDRESS has the same meaning as in loc_list_from_tree 13118 function. */ 13119 13120 static dw_loc_list_ref 13121 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address) 13122 { 13123 const char *endname, *secname; 13124 rtx varloc; 13125 enum var_init_status initialized; 13126 struct var_loc_node *node; 13127 dw_loc_descr_ref descr; 13128 char label_id[MAX_ARTIFICIAL_LABEL_BYTES]; 13129 dw_loc_list_ref list = NULL; 13130 dw_loc_list_ref *listp = &list; 13131 13132 /* Now that we know what section we are using for a base, 13133 actually construct the list of locations. 13134 The first location information is what is passed to the 13135 function that creates the location list, and the remaining 13136 locations just get added on to that list. 13137 Note that we only know the start address for a location 13138 (IE location changes), so to build the range, we use 13139 the range [current location start, next location start]. 13140 This means we have to special case the last node, and generate 13141 a range of [last location start, end of function label]. */ 13142 13143 secname = secname_for_decl (decl); 13144 13145 for (node = loc_list->first; node; node = node->next) 13146 if (GET_CODE (node->loc) == EXPR_LIST 13147 || NOTE_VAR_LOCATION_LOC (node->loc) != NULL_RTX) 13148 { 13149 if (GET_CODE (node->loc) == EXPR_LIST) 13150 { 13151 /* This requires DW_OP_{,bit_}piece, which is not usable 13152 inside DWARF expressions. */ 13153 if (want_address != 2) 13154 continue; 13155 descr = dw_sra_loc_expr (decl, node->loc); 13156 if (descr == NULL) 13157 continue; 13158 } 13159 else 13160 { 13161 initialized = NOTE_VAR_LOCATION_STATUS (node->loc); 13162 varloc = NOTE_VAR_LOCATION (node->loc); 13163 descr = dw_loc_list_1 (decl, varloc, want_address, initialized); 13164 } 13165 if (descr) 13166 { 13167 bool range_across_switch = false; 13168 /* If section switch happens in between node->label 13169 and node->next->label (or end of function) and 13170 we can't emit it as a single entry list, 13171 emit two ranges, first one ending at the end 13172 of first partition and second one starting at the 13173 beginning of second partition. */ 13174 if (node == loc_list->last_before_switch 13175 && (node != loc_list->first || loc_list->first->next) 13176 && current_function_decl) 13177 { 13178 endname = cfun->fde->dw_fde_end; 13179 range_across_switch = true; 13180 } 13181 /* The variable has a location between NODE->LABEL and 13182 NODE->NEXT->LABEL. */ 13183 else if (node->next) 13184 endname = node->next->label; 13185 /* If the variable has a location at the last label 13186 it keeps its location until the end of function. */ 13187 else if (!current_function_decl) 13188 endname = text_end_label; 13189 else 13190 { 13191 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL, 13192 current_function_funcdef_no); 13193 endname = ggc_strdup (label_id); 13194 } 13195 13196 *listp = new_loc_list (descr, node->label, endname, secname); 13197 if (TREE_CODE (decl) == PARM_DECL 13198 && node == loc_list->first 13199 && GET_CODE (node->loc) == NOTE 13200 && strcmp (node->label, endname) == 0) 13201 (*listp)->force = true; 13202 listp = &(*listp)->dw_loc_next; 13203 13204 if (range_across_switch) 13205 { 13206 if (GET_CODE (node->loc) == EXPR_LIST) 13207 descr = dw_sra_loc_expr (decl, node->loc); 13208 else 13209 { 13210 initialized = NOTE_VAR_LOCATION_STATUS (node->loc); 13211 varloc = NOTE_VAR_LOCATION (node->loc); 13212 descr = dw_loc_list_1 (decl, varloc, want_address, 13213 initialized); 13214 } 13215 gcc_assert (descr); 13216 /* The variable has a location between NODE->LABEL and 13217 NODE->NEXT->LABEL. */ 13218 if (node->next) 13219 endname = node->next->label; 13220 else 13221 endname = cfun->fde->dw_fde_second_end; 13222 *listp = new_loc_list (descr, 13223 cfun->fde->dw_fde_second_begin, 13224 endname, secname); 13225 listp = &(*listp)->dw_loc_next; 13226 } 13227 } 13228 } 13229 13230 /* Try to avoid the overhead of a location list emitting a location 13231 expression instead, but only if we didn't have more than one 13232 location entry in the first place. If some entries were not 13233 representable, we don't want to pretend a single entry that was 13234 applies to the entire scope in which the variable is 13235 available. */ 13236 if (list && loc_list->first->next) 13237 gen_llsym (list); 13238 13239 return list; 13240 } 13241 13242 /* Return if the loc_list has only single element and thus can be represented 13243 as location description. */ 13244 13245 static bool 13246 single_element_loc_list_p (dw_loc_list_ref list) 13247 { 13248 gcc_assert (!list->dw_loc_next || list->ll_symbol); 13249 return !list->ll_symbol; 13250 } 13251 13252 /* To each location in list LIST add loc descr REF. */ 13253 13254 static void 13255 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref) 13256 { 13257 dw_loc_descr_ref copy; 13258 add_loc_descr (&list->expr, ref); 13259 list = list->dw_loc_next; 13260 while (list) 13261 { 13262 copy = ggc_alloc_dw_loc_descr_node (); 13263 memcpy (copy, ref, sizeof (dw_loc_descr_node)); 13264 add_loc_descr (&list->expr, copy); 13265 while (copy->dw_loc_next) 13266 { 13267 dw_loc_descr_ref new_copy = ggc_alloc_dw_loc_descr_node (); 13268 memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node)); 13269 copy->dw_loc_next = new_copy; 13270 copy = new_copy; 13271 } 13272 list = list->dw_loc_next; 13273 } 13274 } 13275 13276 /* Given two lists RET and LIST 13277 produce location list that is result of adding expression in LIST 13278 to expression in RET on each possition in program. 13279 Might be destructive on both RET and LIST. 13280 13281 TODO: We handle only simple cases of RET or LIST having at most one 13282 element. General case would inolve sorting the lists in program order 13283 and merging them that will need some additional work. 13284 Adding that will improve quality of debug info especially for SRA-ed 13285 structures. */ 13286 13287 static void 13288 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list) 13289 { 13290 if (!list) 13291 return; 13292 if (!*ret) 13293 { 13294 *ret = list; 13295 return; 13296 } 13297 if (!list->dw_loc_next) 13298 { 13299 add_loc_descr_to_each (*ret, list->expr); 13300 return; 13301 } 13302 if (!(*ret)->dw_loc_next) 13303 { 13304 add_loc_descr_to_each (list, (*ret)->expr); 13305 *ret = list; 13306 return; 13307 } 13308 expansion_failed (NULL_TREE, NULL_RTX, 13309 "Don't know how to merge two non-trivial" 13310 " location lists.\n"); 13311 *ret = NULL; 13312 return; 13313 } 13314 13315 /* LOC is constant expression. Try a luck, look it up in constant 13316 pool and return its loc_descr of its address. */ 13317 13318 static dw_loc_descr_ref 13319 cst_pool_loc_descr (tree loc) 13320 { 13321 /* Get an RTL for this, if something has been emitted. */ 13322 rtx rtl = lookup_constant_def (loc); 13323 13324 if (!rtl || !MEM_P (rtl)) 13325 { 13326 gcc_assert (!rtl); 13327 return 0; 13328 } 13329 gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF); 13330 13331 /* TODO: We might get more coverage if we was actually delaying expansion 13332 of all expressions till end of compilation when constant pools are fully 13333 populated. */ 13334 if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0)))) 13335 { 13336 expansion_failed (loc, NULL_RTX, 13337 "CST value in contant pool but not marked."); 13338 return 0; 13339 } 13340 return mem_loc_descriptor (XEXP (rtl, 0), get_address_mode (rtl), 13341 GET_MODE (rtl), VAR_INIT_STATUS_INITIALIZED); 13342 } 13343 13344 /* Return dw_loc_list representing address of addr_expr LOC 13345 by looking for innder INDIRECT_REF expression and turing it 13346 into simple arithmetics. */ 13347 13348 static dw_loc_list_ref 13349 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev) 13350 { 13351 tree obj, offset; 13352 HOST_WIDE_INT bitsize, bitpos, bytepos; 13353 enum machine_mode mode; 13354 int volatilep; 13355 int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc)); 13356 dw_loc_list_ref list_ret = NULL, list_ret1 = NULL; 13357 13358 obj = get_inner_reference (TREE_OPERAND (loc, 0), 13359 &bitsize, &bitpos, &offset, &mode, 13360 &unsignedp, &volatilep, false); 13361 STRIP_NOPS (obj); 13362 if (bitpos % BITS_PER_UNIT) 13363 { 13364 expansion_failed (loc, NULL_RTX, "bitfield access"); 13365 return 0; 13366 } 13367 if (!INDIRECT_REF_P (obj)) 13368 { 13369 expansion_failed (obj, 13370 NULL_RTX, "no indirect ref in inner refrence"); 13371 return 0; 13372 } 13373 if (!offset && !bitpos) 13374 list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1); 13375 else if (toplev 13376 && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE 13377 && (dwarf_version >= 4 || !dwarf_strict)) 13378 { 13379 list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0); 13380 if (!list_ret) 13381 return 0; 13382 if (offset) 13383 { 13384 /* Variable offset. */ 13385 list_ret1 = loc_list_from_tree (offset, 0); 13386 if (list_ret1 == 0) 13387 return 0; 13388 add_loc_list (&list_ret, list_ret1); 13389 if (!list_ret) 13390 return 0; 13391 add_loc_descr_to_each (list_ret, 13392 new_loc_descr (DW_OP_plus, 0, 0)); 13393 } 13394 bytepos = bitpos / BITS_PER_UNIT; 13395 if (bytepos > 0) 13396 add_loc_descr_to_each (list_ret, 13397 new_loc_descr (DW_OP_plus_uconst, 13398 bytepos, 0)); 13399 else if (bytepos < 0) 13400 loc_list_plus_const (list_ret, bytepos); 13401 add_loc_descr_to_each (list_ret, 13402 new_loc_descr (DW_OP_stack_value, 0, 0)); 13403 } 13404 return list_ret; 13405 } 13406 13407 13408 /* Generate Dwarf location list representing LOC. 13409 If WANT_ADDRESS is false, expression computing LOC will be computed 13410 If WANT_ADDRESS is 1, expression computing address of LOC will be returned 13411 if WANT_ADDRESS is 2, expression computing address useable in location 13412 will be returned (i.e. DW_OP_reg can be used 13413 to refer to register values). */ 13414 13415 static dw_loc_list_ref 13416 loc_list_from_tree (tree loc, int want_address) 13417 { 13418 dw_loc_descr_ref ret = NULL, ret1 = NULL; 13419 dw_loc_list_ref list_ret = NULL, list_ret1 = NULL; 13420 int have_address = 0; 13421 enum dwarf_location_atom op; 13422 13423 /* ??? Most of the time we do not take proper care for sign/zero 13424 extending the values properly. Hopefully this won't be a real 13425 problem... */ 13426 13427 switch (TREE_CODE (loc)) 13428 { 13429 case ERROR_MARK: 13430 expansion_failed (loc, NULL_RTX, "ERROR_MARK"); 13431 return 0; 13432 13433 case PLACEHOLDER_EXPR: 13434 /* This case involves extracting fields from an object to determine the 13435 position of other fields. We don't try to encode this here. The 13436 only user of this is Ada, which encodes the needed information using 13437 the names of types. */ 13438 expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR"); 13439 return 0; 13440 13441 case CALL_EXPR: 13442 expansion_failed (loc, NULL_RTX, "CALL_EXPR"); 13443 /* There are no opcodes for these operations. */ 13444 return 0; 13445 13446 case PREINCREMENT_EXPR: 13447 case PREDECREMENT_EXPR: 13448 case POSTINCREMENT_EXPR: 13449 case POSTDECREMENT_EXPR: 13450 expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT"); 13451 /* There are no opcodes for these operations. */ 13452 return 0; 13453 13454 case ADDR_EXPR: 13455 /* If we already want an address, see if there is INDIRECT_REF inside 13456 e.g. for &this->field. */ 13457 if (want_address) 13458 { 13459 list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref 13460 (loc, want_address == 2); 13461 if (list_ret) 13462 have_address = 1; 13463 else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0)) 13464 && (ret = cst_pool_loc_descr (loc))) 13465 have_address = 1; 13466 } 13467 /* Otherwise, process the argument and look for the address. */ 13468 if (!list_ret && !ret) 13469 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1); 13470 else 13471 { 13472 if (want_address) 13473 expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR"); 13474 return NULL; 13475 } 13476 break; 13477 13478 case VAR_DECL: 13479 if (DECL_THREAD_LOCAL_P (loc)) 13480 { 13481 rtx rtl; 13482 enum dwarf_location_atom first_op; 13483 enum dwarf_location_atom second_op; 13484 bool dtprel = false; 13485 13486 if (targetm.have_tls) 13487 { 13488 /* If this is not defined, we have no way to emit the 13489 data. */ 13490 if (!targetm.asm_out.output_dwarf_dtprel) 13491 return 0; 13492 13493 /* The way DW_OP_GNU_push_tls_address is specified, we 13494 can only look up addresses of objects in the current 13495 module. We used DW_OP_addr as first op, but that's 13496 wrong, because DW_OP_addr is relocated by the debug 13497 info consumer, while DW_OP_GNU_push_tls_address 13498 operand shouldn't be. */ 13499 if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc)) 13500 return 0; 13501 first_op = DWARF2_ADDR_SIZE == 4 ? DW_OP_const4u : DW_OP_const8u; 13502 dtprel = true; 13503 second_op = DW_OP_GNU_push_tls_address; 13504 } 13505 else 13506 { 13507 if (!targetm.emutls.debug_form_tls_address 13508 || !(dwarf_version >= 3 || !dwarf_strict)) 13509 return 0; 13510 /* We stuffed the control variable into the DECL_VALUE_EXPR 13511 to signal (via DECL_HAS_VALUE_EXPR_P) that the decl should 13512 no longer appear in gimple code. We used the control 13513 variable in specific so that we could pick it up here. */ 13514 loc = DECL_VALUE_EXPR (loc); 13515 first_op = DW_OP_addr; 13516 second_op = DW_OP_form_tls_address; 13517 } 13518 13519 rtl = rtl_for_decl_location (loc); 13520 if (rtl == NULL_RTX) 13521 return 0; 13522 13523 if (!MEM_P (rtl)) 13524 return 0; 13525 rtl = XEXP (rtl, 0); 13526 if (! CONSTANT_P (rtl)) 13527 return 0; 13528 13529 ret = new_loc_descr (first_op, 0, 0); 13530 ret->dw_loc_oprnd1.val_class = dw_val_class_addr; 13531 ret->dw_loc_oprnd1.v.val_addr = rtl; 13532 ret->dtprel = dtprel; 13533 13534 ret1 = new_loc_descr (second_op, 0, 0); 13535 add_loc_descr (&ret, ret1); 13536 13537 have_address = 1; 13538 break; 13539 } 13540 /* FALLTHRU */ 13541 13542 case PARM_DECL: 13543 case RESULT_DECL: 13544 if (DECL_HAS_VALUE_EXPR_P (loc)) 13545 return loc_list_from_tree (DECL_VALUE_EXPR (loc), 13546 want_address); 13547 /* FALLTHRU */ 13548 13549 case FUNCTION_DECL: 13550 { 13551 rtx rtl; 13552 var_loc_list *loc_list = lookup_decl_loc (loc); 13553 13554 if (loc_list && loc_list->first) 13555 { 13556 list_ret = dw_loc_list (loc_list, loc, want_address); 13557 have_address = want_address != 0; 13558 break; 13559 } 13560 rtl = rtl_for_decl_location (loc); 13561 if (rtl == NULL_RTX) 13562 { 13563 expansion_failed (loc, NULL_RTX, "DECL has no RTL"); 13564 return 0; 13565 } 13566 else if (CONST_INT_P (rtl)) 13567 { 13568 HOST_WIDE_INT val = INTVAL (rtl); 13569 if (TYPE_UNSIGNED (TREE_TYPE (loc))) 13570 val &= GET_MODE_MASK (DECL_MODE (loc)); 13571 ret = int_loc_descriptor (val); 13572 } 13573 else if (GET_CODE (rtl) == CONST_STRING) 13574 { 13575 expansion_failed (loc, NULL_RTX, "CONST_STRING"); 13576 return 0; 13577 } 13578 else if (CONSTANT_P (rtl) && const_ok_for_output (rtl)) 13579 { 13580 ret = new_loc_descr (DW_OP_addr, 0, 0); 13581 ret->dw_loc_oprnd1.val_class = dw_val_class_addr; 13582 ret->dw_loc_oprnd1.v.val_addr = rtl; 13583 } 13584 else 13585 { 13586 enum machine_mode mode, mem_mode; 13587 13588 /* Certain constructs can only be represented at top-level. */ 13589 if (want_address == 2) 13590 { 13591 ret = loc_descriptor (rtl, VOIDmode, 13592 VAR_INIT_STATUS_INITIALIZED); 13593 have_address = 1; 13594 } 13595 else 13596 { 13597 mode = GET_MODE (rtl); 13598 mem_mode = VOIDmode; 13599 if (MEM_P (rtl)) 13600 { 13601 mem_mode = mode; 13602 mode = get_address_mode (rtl); 13603 rtl = XEXP (rtl, 0); 13604 have_address = 1; 13605 } 13606 ret = mem_loc_descriptor (rtl, mode, mem_mode, 13607 VAR_INIT_STATUS_INITIALIZED); 13608 } 13609 if (!ret) 13610 expansion_failed (loc, rtl, 13611 "failed to produce loc descriptor for rtl"); 13612 } 13613 } 13614 break; 13615 13616 case MEM_REF: 13617 /* ??? FIXME. */ 13618 if (!integer_zerop (TREE_OPERAND (loc, 1))) 13619 return 0; 13620 /* Fallthru. */ 13621 case INDIRECT_REF: 13622 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0); 13623 have_address = 1; 13624 break; 13625 13626 case COMPOUND_EXPR: 13627 return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address); 13628 13629 CASE_CONVERT: 13630 case VIEW_CONVERT_EXPR: 13631 case SAVE_EXPR: 13632 case MODIFY_EXPR: 13633 return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address); 13634 13635 case COMPONENT_REF: 13636 case BIT_FIELD_REF: 13637 case ARRAY_REF: 13638 case ARRAY_RANGE_REF: 13639 case REALPART_EXPR: 13640 case IMAGPART_EXPR: 13641 { 13642 tree obj, offset; 13643 HOST_WIDE_INT bitsize, bitpos, bytepos; 13644 enum machine_mode mode; 13645 int volatilep; 13646 int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc)); 13647 13648 obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode, 13649 &unsignedp, &volatilep, false); 13650 13651 gcc_assert (obj != loc); 13652 13653 list_ret = loc_list_from_tree (obj, 13654 want_address == 2 13655 && !bitpos && !offset ? 2 : 1); 13656 /* TODO: We can extract value of the small expression via shifting even 13657 for nonzero bitpos. */ 13658 if (list_ret == 0) 13659 return 0; 13660 if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0) 13661 { 13662 expansion_failed (loc, NULL_RTX, 13663 "bitfield access"); 13664 return 0; 13665 } 13666 13667 if (offset != NULL_TREE) 13668 { 13669 /* Variable offset. */ 13670 list_ret1 = loc_list_from_tree (offset, 0); 13671 if (list_ret1 == 0) 13672 return 0; 13673 add_loc_list (&list_ret, list_ret1); 13674 if (!list_ret) 13675 return 0; 13676 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0)); 13677 } 13678 13679 bytepos = bitpos / BITS_PER_UNIT; 13680 if (bytepos > 0) 13681 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0)); 13682 else if (bytepos < 0) 13683 loc_list_plus_const (list_ret, bytepos); 13684 13685 have_address = 1; 13686 break; 13687 } 13688 13689 case INTEGER_CST: 13690 if ((want_address || !host_integerp (loc, 0)) 13691 && (ret = cst_pool_loc_descr (loc))) 13692 have_address = 1; 13693 else if (want_address == 2 13694 && host_integerp (loc, 0) 13695 && (ret = address_of_int_loc_descriptor 13696 (int_size_in_bytes (TREE_TYPE (loc)), 13697 tree_low_cst (loc, 0)))) 13698 have_address = 1; 13699 else if (host_integerp (loc, 0)) 13700 ret = int_loc_descriptor (tree_low_cst (loc, 0)); 13701 else 13702 { 13703 expansion_failed (loc, NULL_RTX, 13704 "Integer operand is not host integer"); 13705 return 0; 13706 } 13707 break; 13708 13709 case CONSTRUCTOR: 13710 case REAL_CST: 13711 case STRING_CST: 13712 case COMPLEX_CST: 13713 if ((ret = cst_pool_loc_descr (loc))) 13714 have_address = 1; 13715 else 13716 /* We can construct small constants here using int_loc_descriptor. */ 13717 expansion_failed (loc, NULL_RTX, 13718 "constructor or constant not in constant pool"); 13719 break; 13720 13721 case TRUTH_AND_EXPR: 13722 case TRUTH_ANDIF_EXPR: 13723 case BIT_AND_EXPR: 13724 op = DW_OP_and; 13725 goto do_binop; 13726 13727 case TRUTH_XOR_EXPR: 13728 case BIT_XOR_EXPR: 13729 op = DW_OP_xor; 13730 goto do_binop; 13731 13732 case TRUTH_OR_EXPR: 13733 case TRUTH_ORIF_EXPR: 13734 case BIT_IOR_EXPR: 13735 op = DW_OP_or; 13736 goto do_binop; 13737 13738 case FLOOR_DIV_EXPR: 13739 case CEIL_DIV_EXPR: 13740 case ROUND_DIV_EXPR: 13741 case TRUNC_DIV_EXPR: 13742 if (TYPE_UNSIGNED (TREE_TYPE (loc))) 13743 return 0; 13744 op = DW_OP_div; 13745 goto do_binop; 13746 13747 case MINUS_EXPR: 13748 op = DW_OP_minus; 13749 goto do_binop; 13750 13751 case FLOOR_MOD_EXPR: 13752 case CEIL_MOD_EXPR: 13753 case ROUND_MOD_EXPR: 13754 case TRUNC_MOD_EXPR: 13755 if (TYPE_UNSIGNED (TREE_TYPE (loc))) 13756 { 13757 op = DW_OP_mod; 13758 goto do_binop; 13759 } 13760 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0); 13761 list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0); 13762 if (list_ret == 0 || list_ret1 == 0) 13763 return 0; 13764 13765 add_loc_list (&list_ret, list_ret1); 13766 if (list_ret == 0) 13767 return 0; 13768 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0)); 13769 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0)); 13770 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0)); 13771 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0)); 13772 add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0)); 13773 break; 13774 13775 case MULT_EXPR: 13776 op = DW_OP_mul; 13777 goto do_binop; 13778 13779 case LSHIFT_EXPR: 13780 op = DW_OP_shl; 13781 goto do_binop; 13782 13783 case RSHIFT_EXPR: 13784 op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra); 13785 goto do_binop; 13786 13787 case POINTER_PLUS_EXPR: 13788 case PLUS_EXPR: 13789 if (host_integerp (TREE_OPERAND (loc, 1), 0)) 13790 { 13791 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0); 13792 if (list_ret == 0) 13793 return 0; 13794 13795 loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0)); 13796 break; 13797 } 13798 13799 op = DW_OP_plus; 13800 goto do_binop; 13801 13802 case LE_EXPR: 13803 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0)))) 13804 return 0; 13805 13806 op = DW_OP_le; 13807 goto do_binop; 13808 13809 case GE_EXPR: 13810 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0)))) 13811 return 0; 13812 13813 op = DW_OP_ge; 13814 goto do_binop; 13815 13816 case LT_EXPR: 13817 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0)))) 13818 return 0; 13819 13820 op = DW_OP_lt; 13821 goto do_binop; 13822 13823 case GT_EXPR: 13824 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0)))) 13825 return 0; 13826 13827 op = DW_OP_gt; 13828 goto do_binop; 13829 13830 case EQ_EXPR: 13831 op = DW_OP_eq; 13832 goto do_binop; 13833 13834 case NE_EXPR: 13835 op = DW_OP_ne; 13836 goto do_binop; 13837 13838 do_binop: 13839 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0); 13840 list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0); 13841 if (list_ret == 0 || list_ret1 == 0) 13842 return 0; 13843 13844 add_loc_list (&list_ret, list_ret1); 13845 if (list_ret == 0) 13846 return 0; 13847 add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0)); 13848 break; 13849 13850 case TRUTH_NOT_EXPR: 13851 case BIT_NOT_EXPR: 13852 op = DW_OP_not; 13853 goto do_unop; 13854 13855 case ABS_EXPR: 13856 op = DW_OP_abs; 13857 goto do_unop; 13858 13859 case NEGATE_EXPR: 13860 op = DW_OP_neg; 13861 goto do_unop; 13862 13863 do_unop: 13864 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0); 13865 if (list_ret == 0) 13866 return 0; 13867 13868 add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0)); 13869 break; 13870 13871 case MIN_EXPR: 13872 case MAX_EXPR: 13873 { 13874 const enum tree_code code = 13875 TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR; 13876 13877 loc = build3 (COND_EXPR, TREE_TYPE (loc), 13878 build2 (code, integer_type_node, 13879 TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)), 13880 TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0)); 13881 } 13882 13883 /* ... fall through ... */ 13884 13885 case COND_EXPR: 13886 { 13887 dw_loc_descr_ref lhs 13888 = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0); 13889 dw_loc_list_ref rhs 13890 = loc_list_from_tree (TREE_OPERAND (loc, 2), 0); 13891 dw_loc_descr_ref bra_node, jump_node, tmp; 13892 13893 list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0); 13894 if (list_ret == 0 || lhs == 0 || rhs == 0) 13895 return 0; 13896 13897 bra_node = new_loc_descr (DW_OP_bra, 0, 0); 13898 add_loc_descr_to_each (list_ret, bra_node); 13899 13900 add_loc_list (&list_ret, rhs); 13901 jump_node = new_loc_descr (DW_OP_skip, 0, 0); 13902 add_loc_descr_to_each (list_ret, jump_node); 13903 13904 add_loc_descr_to_each (list_ret, lhs); 13905 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc; 13906 bra_node->dw_loc_oprnd1.v.val_loc = lhs; 13907 13908 /* ??? Need a node to point the skip at. Use a nop. */ 13909 tmp = new_loc_descr (DW_OP_nop, 0, 0); 13910 add_loc_descr_to_each (list_ret, tmp); 13911 jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc; 13912 jump_node->dw_loc_oprnd1.v.val_loc = tmp; 13913 } 13914 break; 13915 13916 case FIX_TRUNC_EXPR: 13917 return 0; 13918 13919 default: 13920 /* Leave front-end specific codes as simply unknown. This comes 13921 up, for instance, with the C STMT_EXPR. */ 13922 if ((unsigned int) TREE_CODE (loc) 13923 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE) 13924 { 13925 expansion_failed (loc, NULL_RTX, 13926 "language specific tree node"); 13927 return 0; 13928 } 13929 13930 #ifdef ENABLE_CHECKING 13931 /* Otherwise this is a generic code; we should just lists all of 13932 these explicitly. We forgot one. */ 13933 gcc_unreachable (); 13934 #else 13935 /* In a release build, we want to degrade gracefully: better to 13936 generate incomplete debugging information than to crash. */ 13937 return NULL; 13938 #endif 13939 } 13940 13941 if (!ret && !list_ret) 13942 return 0; 13943 13944 if (want_address == 2 && !have_address 13945 && (dwarf_version >= 4 || !dwarf_strict)) 13946 { 13947 if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE) 13948 { 13949 expansion_failed (loc, NULL_RTX, 13950 "DWARF address size mismatch"); 13951 return 0; 13952 } 13953 if (ret) 13954 add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0)); 13955 else 13956 add_loc_descr_to_each (list_ret, 13957 new_loc_descr (DW_OP_stack_value, 0, 0)); 13958 have_address = 1; 13959 } 13960 /* Show if we can't fill the request for an address. */ 13961 if (want_address && !have_address) 13962 { 13963 expansion_failed (loc, NULL_RTX, 13964 "Want address and only have value"); 13965 return 0; 13966 } 13967 13968 gcc_assert (!ret || !list_ret); 13969 13970 /* If we've got an address and don't want one, dereference. */ 13971 if (!want_address && have_address) 13972 { 13973 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc)); 13974 13975 if (size > DWARF2_ADDR_SIZE || size == -1) 13976 { 13977 expansion_failed (loc, NULL_RTX, 13978 "DWARF address size mismatch"); 13979 return 0; 13980 } 13981 else if (size == DWARF2_ADDR_SIZE) 13982 op = DW_OP_deref; 13983 else 13984 op = DW_OP_deref_size; 13985 13986 if (ret) 13987 add_loc_descr (&ret, new_loc_descr (op, size, 0)); 13988 else 13989 add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0)); 13990 } 13991 if (ret) 13992 list_ret = new_loc_list (ret, NULL, NULL, NULL); 13993 13994 return list_ret; 13995 } 13996 13997 /* Same as above but return only single location expression. */ 13998 static dw_loc_descr_ref 13999 loc_descriptor_from_tree (tree loc, int want_address) 14000 { 14001 dw_loc_list_ref ret = loc_list_from_tree (loc, want_address); 14002 if (!ret) 14003 return NULL; 14004 if (ret->dw_loc_next) 14005 { 14006 expansion_failed (loc, NULL_RTX, 14007 "Location list where only loc descriptor needed"); 14008 return NULL; 14009 } 14010 return ret->expr; 14011 } 14012 14013 /* Given a value, round it up to the lowest multiple of `boundary' 14014 which is not less than the value itself. */ 14015 14016 static inline HOST_WIDE_INT 14017 ceiling (HOST_WIDE_INT value, unsigned int boundary) 14018 { 14019 return (((value + boundary - 1) / boundary) * boundary); 14020 } 14021 14022 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a 14023 pointer to the declared type for the relevant field variable, or return 14024 `integer_type_node' if the given node turns out to be an 14025 ERROR_MARK node. */ 14026 14027 static inline tree 14028 field_type (const_tree decl) 14029 { 14030 tree type; 14031 14032 if (TREE_CODE (decl) == ERROR_MARK) 14033 return integer_type_node; 14034 14035 type = DECL_BIT_FIELD_TYPE (decl); 14036 if (type == NULL_TREE) 14037 type = TREE_TYPE (decl); 14038 14039 return type; 14040 } 14041 14042 /* Given a pointer to a tree node, return the alignment in bits for 14043 it, or else return BITS_PER_WORD if the node actually turns out to 14044 be an ERROR_MARK node. */ 14045 14046 static inline unsigned 14047 simple_type_align_in_bits (const_tree type) 14048 { 14049 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD; 14050 } 14051 14052 static inline unsigned 14053 simple_decl_align_in_bits (const_tree decl) 14054 { 14055 return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD; 14056 } 14057 14058 /* Return the result of rounding T up to ALIGN. */ 14059 14060 static inline double_int 14061 round_up_to_align (double_int t, unsigned int align) 14062 { 14063 double_int alignd = uhwi_to_double_int (align); 14064 t = double_int_add (t, alignd); 14065 t = double_int_add (t, double_int_minus_one); 14066 t = double_int_div (t, alignd, true, TRUNC_DIV_EXPR); 14067 t = double_int_mul (t, alignd); 14068 return t; 14069 } 14070 14071 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the 14072 lowest addressed byte of the "containing object" for the given FIELD_DECL, 14073 or return 0 if we are unable to determine what that offset is, either 14074 because the argument turns out to be a pointer to an ERROR_MARK node, or 14075 because the offset is actually variable. (We can't handle the latter case 14076 just yet). */ 14077 14078 static HOST_WIDE_INT 14079 field_byte_offset (const_tree decl) 14080 { 14081 double_int object_offset_in_bits; 14082 double_int object_offset_in_bytes; 14083 double_int bitpos_int; 14084 14085 if (TREE_CODE (decl) == ERROR_MARK) 14086 return 0; 14087 14088 gcc_assert (TREE_CODE (decl) == FIELD_DECL); 14089 14090 /* We cannot yet cope with fields whose positions are variable, so 14091 for now, when we see such things, we simply return 0. Someday, we may 14092 be able to handle such cases, but it will be damn difficult. */ 14093 if (TREE_CODE (bit_position (decl)) != INTEGER_CST) 14094 return 0; 14095 14096 bitpos_int = tree_to_double_int (bit_position (decl)); 14097 14098 #ifdef PCC_BITFIELD_TYPE_MATTERS 14099 if (PCC_BITFIELD_TYPE_MATTERS) 14100 { 14101 tree type; 14102 tree field_size_tree; 14103 double_int deepest_bitpos; 14104 double_int field_size_in_bits; 14105 unsigned int type_align_in_bits; 14106 unsigned int decl_align_in_bits; 14107 double_int type_size_in_bits; 14108 14109 type = field_type (decl); 14110 type_size_in_bits = double_int_type_size_in_bits (type); 14111 type_align_in_bits = simple_type_align_in_bits (type); 14112 14113 field_size_tree = DECL_SIZE (decl); 14114 14115 /* The size could be unspecified if there was an error, or for 14116 a flexible array member. */ 14117 if (!field_size_tree) 14118 field_size_tree = bitsize_zero_node; 14119 14120 /* If the size of the field is not constant, use the type size. */ 14121 if (TREE_CODE (field_size_tree) == INTEGER_CST) 14122 field_size_in_bits = tree_to_double_int (field_size_tree); 14123 else 14124 field_size_in_bits = type_size_in_bits; 14125 14126 decl_align_in_bits = simple_decl_align_in_bits (decl); 14127 14128 /* The GCC front-end doesn't make any attempt to keep track of the 14129 starting bit offset (relative to the start of the containing 14130 structure type) of the hypothetical "containing object" for a 14131 bit-field. Thus, when computing the byte offset value for the 14132 start of the "containing object" of a bit-field, we must deduce 14133 this information on our own. This can be rather tricky to do in 14134 some cases. For example, handling the following structure type 14135 definition when compiling for an i386/i486 target (which only 14136 aligns long long's to 32-bit boundaries) can be very tricky: 14137 14138 struct S { int field1; long long field2:31; }; 14139 14140 Fortunately, there is a simple rule-of-thumb which can be used 14141 in such cases. When compiling for an i386/i486, GCC will 14142 allocate 8 bytes for the structure shown above. It decides to 14143 do this based upon one simple rule for bit-field allocation. 14144 GCC allocates each "containing object" for each bit-field at 14145 the first (i.e. lowest addressed) legitimate alignment boundary 14146 (based upon the required minimum alignment for the declared 14147 type of the field) which it can possibly use, subject to the 14148 condition that there is still enough available space remaining 14149 in the containing object (when allocated at the selected point) 14150 to fully accommodate all of the bits of the bit-field itself. 14151 14152 This simple rule makes it obvious why GCC allocates 8 bytes for 14153 each object of the structure type shown above. When looking 14154 for a place to allocate the "containing object" for `field2', 14155 the compiler simply tries to allocate a 64-bit "containing 14156 object" at each successive 32-bit boundary (starting at zero) 14157 until it finds a place to allocate that 64- bit field such that 14158 at least 31 contiguous (and previously unallocated) bits remain 14159 within that selected 64 bit field. (As it turns out, for the 14160 example above, the compiler finds it is OK to allocate the 14161 "containing object" 64-bit field at bit-offset zero within the 14162 structure type.) 14163 14164 Here we attempt to work backwards from the limited set of facts 14165 we're given, and we try to deduce from those facts, where GCC 14166 must have believed that the containing object started (within 14167 the structure type). The value we deduce is then used (by the 14168 callers of this routine) to generate DW_AT_location and 14169 DW_AT_bit_offset attributes for fields (both bit-fields and, in 14170 the case of DW_AT_location, regular fields as well). */ 14171 14172 /* Figure out the bit-distance from the start of the structure to 14173 the "deepest" bit of the bit-field. */ 14174 deepest_bitpos = double_int_add (bitpos_int, field_size_in_bits); 14175 14176 /* This is the tricky part. Use some fancy footwork to deduce 14177 where the lowest addressed bit of the containing object must 14178 be. */ 14179 object_offset_in_bits 14180 = double_int_sub (deepest_bitpos, type_size_in_bits); 14181 14182 /* Round up to type_align by default. This works best for 14183 bitfields. */ 14184 object_offset_in_bits 14185 = round_up_to_align (object_offset_in_bits, type_align_in_bits); 14186 14187 if (double_int_ucmp (object_offset_in_bits, bitpos_int) > 0) 14188 { 14189 object_offset_in_bits 14190 = double_int_sub (deepest_bitpos, type_size_in_bits); 14191 14192 /* Round up to decl_align instead. */ 14193 object_offset_in_bits 14194 = round_up_to_align (object_offset_in_bits, decl_align_in_bits); 14195 } 14196 } 14197 else 14198 #endif /* PCC_BITFIELD_TYPE_MATTERS */ 14199 object_offset_in_bits = bitpos_int; 14200 14201 object_offset_in_bytes 14202 = double_int_div (object_offset_in_bits, 14203 uhwi_to_double_int (BITS_PER_UNIT), true, 14204 TRUNC_DIV_EXPR); 14205 return double_int_to_shwi (object_offset_in_bytes); 14206 } 14207 14208 /* The following routines define various Dwarf attributes and any data 14209 associated with them. */ 14210 14211 /* Add a location description attribute value to a DIE. 14212 14213 This emits location attributes suitable for whole variables and 14214 whole parameters. Note that the location attributes for struct fields are 14215 generated by the routine `data_member_location_attribute' below. */ 14216 14217 static inline void 14218 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind, 14219 dw_loc_list_ref descr) 14220 { 14221 if (descr == 0) 14222 return; 14223 if (single_element_loc_list_p (descr)) 14224 add_AT_loc (die, attr_kind, descr->expr); 14225 else 14226 add_AT_loc_list (die, attr_kind, descr); 14227 } 14228 14229 /* Add DW_AT_accessibility attribute to DIE if needed. */ 14230 14231 static void 14232 add_accessibility_attribute (dw_die_ref die, tree decl) 14233 { 14234 /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type 14235 children, otherwise the default is DW_ACCESS_public. In DWARF2 14236 the default has always been DW_ACCESS_public. */ 14237 if (TREE_PROTECTED (decl)) 14238 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected); 14239 else if (TREE_PRIVATE (decl)) 14240 { 14241 if (dwarf_version == 2 14242 || die->die_parent == NULL 14243 || die->die_parent->die_tag != DW_TAG_class_type) 14244 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private); 14245 } 14246 else if (dwarf_version > 2 14247 && die->die_parent 14248 && die->die_parent->die_tag == DW_TAG_class_type) 14249 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public); 14250 } 14251 14252 /* Attach the specialized form of location attribute used for data members of 14253 struct and union types. In the special case of a FIELD_DECL node which 14254 represents a bit-field, the "offset" part of this special location 14255 descriptor must indicate the distance in bytes from the lowest-addressed 14256 byte of the containing struct or union type to the lowest-addressed byte of 14257 the "containing object" for the bit-field. (See the `field_byte_offset' 14258 function above). 14259 14260 For any given bit-field, the "containing object" is a hypothetical object 14261 (of some integral or enum type) within which the given bit-field lives. The 14262 type of this hypothetical "containing object" is always the same as the 14263 declared type of the individual bit-field itself (for GCC anyway... the 14264 DWARF spec doesn't actually mandate this). Note that it is the size (in 14265 bytes) of the hypothetical "containing object" which will be given in the 14266 DW_AT_byte_size attribute for this bit-field. (See the 14267 `byte_size_attribute' function below.) It is also used when calculating the 14268 value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute' 14269 function below.) */ 14270 14271 static void 14272 add_data_member_location_attribute (dw_die_ref die, tree decl) 14273 { 14274 HOST_WIDE_INT offset; 14275 dw_loc_descr_ref loc_descr = 0; 14276 14277 if (TREE_CODE (decl) == TREE_BINFO) 14278 { 14279 /* We're working on the TAG_inheritance for a base class. */ 14280 if (BINFO_VIRTUAL_P (decl) && is_cxx ()) 14281 { 14282 /* For C++ virtual bases we can't just use BINFO_OFFSET, as they 14283 aren't at a fixed offset from all (sub)objects of the same 14284 type. We need to extract the appropriate offset from our 14285 vtable. The following dwarf expression means 14286 14287 BaseAddr = ObAddr + *((*ObAddr) - Offset) 14288 14289 This is specific to the V3 ABI, of course. */ 14290 14291 dw_loc_descr_ref tmp; 14292 14293 /* Make a copy of the object address. */ 14294 tmp = new_loc_descr (DW_OP_dup, 0, 0); 14295 add_loc_descr (&loc_descr, tmp); 14296 14297 /* Extract the vtable address. */ 14298 tmp = new_loc_descr (DW_OP_deref, 0, 0); 14299 add_loc_descr (&loc_descr, tmp); 14300 14301 /* Calculate the address of the offset. */ 14302 offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0); 14303 gcc_assert (offset < 0); 14304 14305 tmp = int_loc_descriptor (-offset); 14306 add_loc_descr (&loc_descr, tmp); 14307 tmp = new_loc_descr (DW_OP_minus, 0, 0); 14308 add_loc_descr (&loc_descr, tmp); 14309 14310 /* Extract the offset. */ 14311 tmp = new_loc_descr (DW_OP_deref, 0, 0); 14312 add_loc_descr (&loc_descr, tmp); 14313 14314 /* Add it to the object address. */ 14315 tmp = new_loc_descr (DW_OP_plus, 0, 0); 14316 add_loc_descr (&loc_descr, tmp); 14317 } 14318 else 14319 offset = tree_low_cst (BINFO_OFFSET (decl), 0); 14320 } 14321 else 14322 offset = field_byte_offset (decl); 14323 14324 if (! loc_descr) 14325 { 14326 if (dwarf_version > 2) 14327 { 14328 /* Don't need to output a location expression, just the constant. */ 14329 if (offset < 0) 14330 add_AT_int (die, DW_AT_data_member_location, offset); 14331 else 14332 add_AT_unsigned (die, DW_AT_data_member_location, offset); 14333 return; 14334 } 14335 else 14336 { 14337 enum dwarf_location_atom op; 14338 14339 /* The DWARF2 standard says that we should assume that the structure 14340 address is already on the stack, so we can specify a structure 14341 field address by using DW_OP_plus_uconst. */ 14342 14343 #ifdef MIPS_DEBUGGING_INFO 14344 /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst 14345 operator correctly. It works only if we leave the offset on the 14346 stack. */ 14347 op = DW_OP_constu; 14348 #else 14349 op = DW_OP_plus_uconst; 14350 #endif 14351 14352 loc_descr = new_loc_descr (op, offset, 0); 14353 } 14354 } 14355 14356 add_AT_loc (die, DW_AT_data_member_location, loc_descr); 14357 } 14358 14359 /* Writes integer values to dw_vec_const array. */ 14360 14361 static void 14362 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest) 14363 { 14364 while (size != 0) 14365 { 14366 *dest++ = val & 0xff; 14367 val >>= 8; 14368 --size; 14369 } 14370 } 14371 14372 /* Reads integers from dw_vec_const array. Inverse of insert_int. */ 14373 14374 static HOST_WIDE_INT 14375 extract_int (const unsigned char *src, unsigned int size) 14376 { 14377 HOST_WIDE_INT val = 0; 14378 14379 src += size; 14380 while (size != 0) 14381 { 14382 val <<= 8; 14383 val |= *--src & 0xff; 14384 --size; 14385 } 14386 return val; 14387 } 14388 14389 /* Writes double_int values to dw_vec_const array. */ 14390 14391 static void 14392 insert_double (double_int val, unsigned char *dest) 14393 { 14394 unsigned char *p0 = dest; 14395 unsigned char *p1 = dest + sizeof (HOST_WIDE_INT); 14396 14397 if (WORDS_BIG_ENDIAN) 14398 { 14399 p0 = p1; 14400 p1 = dest; 14401 } 14402 14403 insert_int ((HOST_WIDE_INT) val.low, sizeof (HOST_WIDE_INT), p0); 14404 insert_int ((HOST_WIDE_INT) val.high, sizeof (HOST_WIDE_INT), p1); 14405 } 14406 14407 /* Writes floating point values to dw_vec_const array. */ 14408 14409 static void 14410 insert_float (const_rtx rtl, unsigned char *array) 14411 { 14412 REAL_VALUE_TYPE rv; 14413 long val[4]; 14414 int i; 14415 14416 REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl); 14417 real_to_target (val, &rv, GET_MODE (rtl)); 14418 14419 /* real_to_target puts 32-bit pieces in each long. Pack them. */ 14420 for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++) 14421 { 14422 insert_int (val[i], 4, array); 14423 array += 4; 14424 } 14425 } 14426 14427 /* Attach a DW_AT_const_value attribute for a variable or a parameter which 14428 does not have a "location" either in memory or in a register. These 14429 things can arise in GNU C when a constant is passed as an actual parameter 14430 to an inlined function. They can also arise in C++ where declared 14431 constants do not necessarily get memory "homes". */ 14432 14433 static bool 14434 add_const_value_attribute (dw_die_ref die, rtx rtl) 14435 { 14436 switch (GET_CODE (rtl)) 14437 { 14438 case CONST_INT: 14439 { 14440 HOST_WIDE_INT val = INTVAL (rtl); 14441 14442 if (val < 0) 14443 add_AT_int (die, DW_AT_const_value, val); 14444 else 14445 add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val); 14446 } 14447 return true; 14448 14449 case CONST_DOUBLE: 14450 /* Note that a CONST_DOUBLE rtx could represent either an integer or a 14451 floating-point constant. A CONST_DOUBLE is used whenever the 14452 constant requires more than one word in order to be adequately 14453 represented. */ 14454 { 14455 enum machine_mode mode = GET_MODE (rtl); 14456 14457 if (SCALAR_FLOAT_MODE_P (mode)) 14458 { 14459 unsigned int length = GET_MODE_SIZE (mode); 14460 unsigned char *array = (unsigned char *) ggc_alloc_atomic (length); 14461 14462 insert_float (rtl, array); 14463 add_AT_vec (die, DW_AT_const_value, length / 4, 4, array); 14464 } 14465 else 14466 add_AT_double (die, DW_AT_const_value, 14467 CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl)); 14468 } 14469 return true; 14470 14471 case CONST_VECTOR: 14472 { 14473 enum machine_mode mode = GET_MODE (rtl); 14474 unsigned int elt_size = GET_MODE_UNIT_SIZE (mode); 14475 unsigned int length = CONST_VECTOR_NUNITS (rtl); 14476 unsigned char *array = (unsigned char *) ggc_alloc_atomic 14477 (length * elt_size); 14478 unsigned int i; 14479 unsigned char *p; 14480 14481 switch (GET_MODE_CLASS (mode)) 14482 { 14483 case MODE_VECTOR_INT: 14484 for (i = 0, p = array; i < length; i++, p += elt_size) 14485 { 14486 rtx elt = CONST_VECTOR_ELT (rtl, i); 14487 double_int val = rtx_to_double_int (elt); 14488 14489 if (elt_size <= sizeof (HOST_WIDE_INT)) 14490 insert_int (double_int_to_shwi (val), elt_size, p); 14491 else 14492 { 14493 gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT)); 14494 insert_double (val, p); 14495 } 14496 } 14497 break; 14498 14499 case MODE_VECTOR_FLOAT: 14500 for (i = 0, p = array; i < length; i++, p += elt_size) 14501 { 14502 rtx elt = CONST_VECTOR_ELT (rtl, i); 14503 insert_float (elt, p); 14504 } 14505 break; 14506 14507 default: 14508 gcc_unreachable (); 14509 } 14510 14511 add_AT_vec (die, DW_AT_const_value, length, elt_size, array); 14512 } 14513 return true; 14514 14515 case CONST_STRING: 14516 if (dwarf_version >= 4 || !dwarf_strict) 14517 { 14518 dw_loc_descr_ref loc_result; 14519 resolve_one_addr (&rtl, NULL); 14520 rtl_addr: 14521 loc_result = new_loc_descr (DW_OP_addr, 0, 0); 14522 loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr; 14523 loc_result->dw_loc_oprnd1.v.val_addr = rtl; 14524 add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0)); 14525 add_AT_loc (die, DW_AT_location, loc_result); 14526 VEC_safe_push (rtx, gc, used_rtx_array, rtl); 14527 return true; 14528 } 14529 return false; 14530 14531 case CONST: 14532 if (CONSTANT_P (XEXP (rtl, 0))) 14533 return add_const_value_attribute (die, XEXP (rtl, 0)); 14534 /* FALLTHROUGH */ 14535 case SYMBOL_REF: 14536 if (!const_ok_for_output (rtl)) 14537 return false; 14538 case LABEL_REF: 14539 if (dwarf_version >= 4 || !dwarf_strict) 14540 goto rtl_addr; 14541 return false; 14542 14543 case PLUS: 14544 /* In cases where an inlined instance of an inline function is passed 14545 the address of an `auto' variable (which is local to the caller) we 14546 can get a situation where the DECL_RTL of the artificial local 14547 variable (for the inlining) which acts as a stand-in for the 14548 corresponding formal parameter (of the inline function) will look 14549 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not 14550 exactly a compile-time constant expression, but it isn't the address 14551 of the (artificial) local variable either. Rather, it represents the 14552 *value* which the artificial local variable always has during its 14553 lifetime. We currently have no way to represent such quasi-constant 14554 values in Dwarf, so for now we just punt and generate nothing. */ 14555 return false; 14556 14557 case HIGH: 14558 case CONST_FIXED: 14559 return false; 14560 14561 case MEM: 14562 if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING 14563 && MEM_READONLY_P (rtl) 14564 && GET_MODE (rtl) == BLKmode) 14565 { 14566 add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0)); 14567 return true; 14568 } 14569 return false; 14570 14571 default: 14572 /* No other kinds of rtx should be possible here. */ 14573 gcc_unreachable (); 14574 } 14575 return false; 14576 } 14577 14578 /* Determine whether the evaluation of EXPR references any variables 14579 or functions which aren't otherwise used (and therefore may not be 14580 output). */ 14581 static tree 14582 reference_to_unused (tree * tp, int * walk_subtrees, 14583 void * data ATTRIBUTE_UNUSED) 14584 { 14585 if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp)) 14586 *walk_subtrees = 0; 14587 14588 if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp) 14589 && ! TREE_ASM_WRITTEN (*tp)) 14590 return *tp; 14591 /* ??? The C++ FE emits debug information for using decls, so 14592 putting gcc_unreachable here falls over. See PR31899. For now 14593 be conservative. */ 14594 else if (!cgraph_global_info_ready 14595 && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL)) 14596 return *tp; 14597 else if (TREE_CODE (*tp) == VAR_DECL) 14598 { 14599 struct varpool_node *node = varpool_get_node (*tp); 14600 if (!node || !node->needed) 14601 return *tp; 14602 } 14603 else if (TREE_CODE (*tp) == FUNCTION_DECL 14604 && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp))) 14605 { 14606 /* The call graph machinery must have finished analyzing, 14607 optimizing and gimplifying the CU by now. 14608 So if *TP has no call graph node associated 14609 to it, it means *TP will not be emitted. */ 14610 if (!cgraph_get_node (*tp)) 14611 return *tp; 14612 } 14613 else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp)) 14614 return *tp; 14615 14616 return NULL_TREE; 14617 } 14618 14619 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE, 14620 for use in a later add_const_value_attribute call. */ 14621 14622 static rtx 14623 rtl_for_decl_init (tree init, tree type) 14624 { 14625 rtx rtl = NULL_RTX; 14626 14627 STRIP_NOPS (init); 14628 14629 /* If a variable is initialized with a string constant without embedded 14630 zeros, build CONST_STRING. */ 14631 if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE) 14632 { 14633 tree enttype = TREE_TYPE (type); 14634 tree domain = TYPE_DOMAIN (type); 14635 enum machine_mode mode = TYPE_MODE (enttype); 14636 14637 if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1 14638 && domain 14639 && integer_zerop (TYPE_MIN_VALUE (domain)) 14640 && compare_tree_int (TYPE_MAX_VALUE (domain), 14641 TREE_STRING_LENGTH (init) - 1) == 0 14642 && ((size_t) TREE_STRING_LENGTH (init) 14643 == strlen (TREE_STRING_POINTER (init)) + 1)) 14644 { 14645 rtl = gen_rtx_CONST_STRING (VOIDmode, 14646 ggc_strdup (TREE_STRING_POINTER (init))); 14647 rtl = gen_rtx_MEM (BLKmode, rtl); 14648 MEM_READONLY_P (rtl) = 1; 14649 } 14650 } 14651 /* Other aggregates, and complex values, could be represented using 14652 CONCAT: FIXME! */ 14653 else if (AGGREGATE_TYPE_P (type) 14654 || (TREE_CODE (init) == VIEW_CONVERT_EXPR 14655 && AGGREGATE_TYPE_P (TREE_TYPE (TREE_OPERAND (init, 0)))) 14656 || TREE_CODE (type) == COMPLEX_TYPE) 14657 ; 14658 /* Vectors only work if their mode is supported by the target. 14659 FIXME: generic vectors ought to work too. */ 14660 else if (TREE_CODE (type) == VECTOR_TYPE 14661 && !VECTOR_MODE_P (TYPE_MODE (type))) 14662 ; 14663 /* If the initializer is something that we know will expand into an 14664 immediate RTL constant, expand it now. We must be careful not to 14665 reference variables which won't be output. */ 14666 else if (initializer_constant_valid_p (init, type) 14667 && ! walk_tree (&init, reference_to_unused, NULL, NULL)) 14668 { 14669 /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if 14670 possible. */ 14671 if (TREE_CODE (type) == VECTOR_TYPE) 14672 switch (TREE_CODE (init)) 14673 { 14674 case VECTOR_CST: 14675 break; 14676 case CONSTRUCTOR: 14677 if (TREE_CONSTANT (init)) 14678 { 14679 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init); 14680 bool constant_p = true; 14681 tree value; 14682 unsigned HOST_WIDE_INT ix; 14683 14684 /* Even when ctor is constant, it might contain non-*_CST 14685 elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't 14686 belong into VECTOR_CST nodes. */ 14687 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value) 14688 if (!CONSTANT_CLASS_P (value)) 14689 { 14690 constant_p = false; 14691 break; 14692 } 14693 14694 if (constant_p) 14695 { 14696 init = build_vector_from_ctor (type, elts); 14697 break; 14698 } 14699 } 14700 /* FALLTHRU */ 14701 14702 default: 14703 return NULL; 14704 } 14705 14706 rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER); 14707 14708 /* If expand_expr returns a MEM, it wasn't immediate. */ 14709 gcc_assert (!rtl || !MEM_P (rtl)); 14710 } 14711 14712 return rtl; 14713 } 14714 14715 /* Generate RTL for the variable DECL to represent its location. */ 14716 14717 static rtx 14718 rtl_for_decl_location (tree decl) 14719 { 14720 rtx rtl; 14721 14722 /* Here we have to decide where we are going to say the parameter "lives" 14723 (as far as the debugger is concerned). We only have a couple of 14724 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL. 14725 14726 DECL_RTL normally indicates where the parameter lives during most of the 14727 activation of the function. If optimization is enabled however, this 14728 could be either NULL or else a pseudo-reg. Both of those cases indicate 14729 that the parameter doesn't really live anywhere (as far as the code 14730 generation parts of GCC are concerned) during most of the function's 14731 activation. That will happen (for example) if the parameter is never 14732 referenced within the function. 14733 14734 We could just generate a location descriptor here for all non-NULL 14735 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be 14736 a little nicer than that if we also consider DECL_INCOMING_RTL in cases 14737 where DECL_RTL is NULL or is a pseudo-reg. 14738 14739 Note however that we can only get away with using DECL_INCOMING_RTL as 14740 a backup substitute for DECL_RTL in certain limited cases. In cases 14741 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl), 14742 we can be sure that the parameter was passed using the same type as it is 14743 declared to have within the function, and that its DECL_INCOMING_RTL 14744 points us to a place where a value of that type is passed. 14745 14746 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different, 14747 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL 14748 because in these cases DECL_INCOMING_RTL points us to a value of some 14749 type which is *different* from the type of the parameter itself. Thus, 14750 if we tried to use DECL_INCOMING_RTL to generate a location attribute in 14751 such cases, the debugger would end up (for example) trying to fetch a 14752 `float' from a place which actually contains the first part of a 14753 `double'. That would lead to really incorrect and confusing 14754 output at debug-time. 14755 14756 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL 14757 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There 14758 are a couple of exceptions however. On little-endian machines we can 14759 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is 14760 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is 14761 an integral type that is smaller than TREE_TYPE (decl). These cases arise 14762 when (on a little-endian machine) a non-prototyped function has a 14763 parameter declared to be of type `short' or `char'. In such cases, 14764 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will 14765 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the 14766 passed `int' value. If the debugger then uses that address to fetch 14767 a `short' or a `char' (on a little-endian machine) the result will be 14768 the correct data, so we allow for such exceptional cases below. 14769 14770 Note that our goal here is to describe the place where the given formal 14771 parameter lives during most of the function's activation (i.e. between the 14772 end of the prologue and the start of the epilogue). We'll do that as best 14773 as we can. Note however that if the given formal parameter is modified 14774 sometime during the execution of the function, then a stack backtrace (at 14775 debug-time) will show the function as having been called with the *new* 14776 value rather than the value which was originally passed in. This happens 14777 rarely enough that it is not a major problem, but it *is* a problem, and 14778 I'd like to fix it. 14779 14780 A future version of dwarf2out.c may generate two additional attributes for 14781 any given DW_TAG_formal_parameter DIE which will describe the "passed 14782 type" and the "passed location" for the given formal parameter in addition 14783 to the attributes we now generate to indicate the "declared type" and the 14784 "active location" for each parameter. This additional set of attributes 14785 could be used by debuggers for stack backtraces. Separately, note that 14786 sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also. 14787 This happens (for example) for inlined-instances of inline function formal 14788 parameters which are never referenced. This really shouldn't be 14789 happening. All PARM_DECL nodes should get valid non-NULL 14790 DECL_INCOMING_RTL values. FIXME. */ 14791 14792 /* Use DECL_RTL as the "location" unless we find something better. */ 14793 rtl = DECL_RTL_IF_SET (decl); 14794 14795 /* When generating abstract instances, ignore everything except 14796 constants, symbols living in memory, and symbols living in 14797 fixed registers. */ 14798 if (! reload_completed) 14799 { 14800 if (rtl 14801 && (CONSTANT_P (rtl) 14802 || (MEM_P (rtl) 14803 && CONSTANT_P (XEXP (rtl, 0))) 14804 || (REG_P (rtl) 14805 && TREE_CODE (decl) == VAR_DECL 14806 && TREE_STATIC (decl)))) 14807 { 14808 rtl = targetm.delegitimize_address (rtl); 14809 return rtl; 14810 } 14811 rtl = NULL_RTX; 14812 } 14813 else if (TREE_CODE (decl) == PARM_DECL) 14814 { 14815 if (rtl == NULL_RTX 14816 || is_pseudo_reg (rtl) 14817 || (MEM_P (rtl) 14818 && is_pseudo_reg (XEXP (rtl, 0)) 14819 && DECL_INCOMING_RTL (decl) 14820 && MEM_P (DECL_INCOMING_RTL (decl)) 14821 && GET_MODE (rtl) == GET_MODE (DECL_INCOMING_RTL (decl)))) 14822 { 14823 tree declared_type = TREE_TYPE (decl); 14824 tree passed_type = DECL_ARG_TYPE (decl); 14825 enum machine_mode dmode = TYPE_MODE (declared_type); 14826 enum machine_mode pmode = TYPE_MODE (passed_type); 14827 14828 /* This decl represents a formal parameter which was optimized out. 14829 Note that DECL_INCOMING_RTL may be NULL in here, but we handle 14830 all cases where (rtl == NULL_RTX) just below. */ 14831 if (dmode == pmode) 14832 rtl = DECL_INCOMING_RTL (decl); 14833 else if ((rtl == NULL_RTX || is_pseudo_reg (rtl)) 14834 && SCALAR_INT_MODE_P (dmode) 14835 && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode) 14836 && DECL_INCOMING_RTL (decl)) 14837 { 14838 rtx inc = DECL_INCOMING_RTL (decl); 14839 if (REG_P (inc)) 14840 rtl = inc; 14841 else if (MEM_P (inc)) 14842 { 14843 if (BYTES_BIG_ENDIAN) 14844 rtl = adjust_address_nv (inc, dmode, 14845 GET_MODE_SIZE (pmode) 14846 - GET_MODE_SIZE (dmode)); 14847 else 14848 rtl = inc; 14849 } 14850 } 14851 } 14852 14853 /* If the parm was passed in registers, but lives on the stack, then 14854 make a big endian correction if the mode of the type of the 14855 parameter is not the same as the mode of the rtl. */ 14856 /* ??? This is the same series of checks that are made in dbxout.c before 14857 we reach the big endian correction code there. It isn't clear if all 14858 of these checks are necessary here, but keeping them all is the safe 14859 thing to do. */ 14860 else if (MEM_P (rtl) 14861 && XEXP (rtl, 0) != const0_rtx 14862 && ! CONSTANT_P (XEXP (rtl, 0)) 14863 /* Not passed in memory. */ 14864 && !MEM_P (DECL_INCOMING_RTL (decl)) 14865 /* Not passed by invisible reference. */ 14866 && (!REG_P (XEXP (rtl, 0)) 14867 || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM 14868 || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM 14869 #if !HARD_FRAME_POINTER_IS_ARG_POINTER 14870 || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM 14871 #endif 14872 ) 14873 /* Big endian correction check. */ 14874 && BYTES_BIG_ENDIAN 14875 && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl) 14876 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))) 14877 < UNITS_PER_WORD)) 14878 { 14879 int offset = (UNITS_PER_WORD 14880 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))); 14881 14882 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)), 14883 plus_constant (XEXP (rtl, 0), offset)); 14884 } 14885 } 14886 else if (TREE_CODE (decl) == VAR_DECL 14887 && rtl 14888 && MEM_P (rtl) 14889 && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl)) 14890 && BYTES_BIG_ENDIAN) 14891 { 14892 int rsize = GET_MODE_SIZE (GET_MODE (rtl)); 14893 int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))); 14894 14895 /* If a variable is declared "register" yet is smaller than 14896 a register, then if we store the variable to memory, it 14897 looks like we're storing a register-sized value, when in 14898 fact we are not. We need to adjust the offset of the 14899 storage location to reflect the actual value's bytes, 14900 else gdb will not be able to display it. */ 14901 if (rsize > dsize) 14902 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)), 14903 plus_constant (XEXP (rtl, 0), rsize-dsize)); 14904 } 14905 14906 /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant, 14907 and will have been substituted directly into all expressions that use it. 14908 C does not have such a concept, but C++ and other languages do. */ 14909 if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl)) 14910 rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl)); 14911 14912 if (rtl) 14913 rtl = targetm.delegitimize_address (rtl); 14914 14915 /* If we don't look past the constant pool, we risk emitting a 14916 reference to a constant pool entry that isn't referenced from 14917 code, and thus is not emitted. */ 14918 if (rtl) 14919 rtl = avoid_constant_pool_reference (rtl); 14920 14921 /* Try harder to get a rtl. If this symbol ends up not being emitted 14922 in the current CU, resolve_addr will remove the expression referencing 14923 it. */ 14924 if (rtl == NULL_RTX 14925 && TREE_CODE (decl) == VAR_DECL 14926 && !DECL_EXTERNAL (decl) 14927 && TREE_STATIC (decl) 14928 && DECL_NAME (decl) 14929 && !DECL_HARD_REGISTER (decl) 14930 && DECL_MODE (decl) != VOIDmode) 14931 { 14932 rtl = make_decl_rtl_for_debug (decl); 14933 if (!MEM_P (rtl) 14934 || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF 14935 || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl) 14936 rtl = NULL_RTX; 14937 } 14938 14939 return rtl; 14940 } 14941 14942 /* Check whether decl is a Fortran COMMON symbol. If not, NULL_TREE is 14943 returned. If so, the decl for the COMMON block is returned, and the 14944 value is the offset into the common block for the symbol. */ 14945 14946 static tree 14947 fortran_common (tree decl, HOST_WIDE_INT *value) 14948 { 14949 tree val_expr, cvar; 14950 enum machine_mode mode; 14951 HOST_WIDE_INT bitsize, bitpos; 14952 tree offset; 14953 int volatilep = 0, unsignedp = 0; 14954 14955 /* If the decl isn't a VAR_DECL, or if it isn't static, or if 14956 it does not have a value (the offset into the common area), or if it 14957 is thread local (as opposed to global) then it isn't common, and shouldn't 14958 be handled as such. */ 14959 if (TREE_CODE (decl) != VAR_DECL 14960 || !TREE_STATIC (decl) 14961 || !DECL_HAS_VALUE_EXPR_P (decl) 14962 || !is_fortran ()) 14963 return NULL_TREE; 14964 14965 val_expr = DECL_VALUE_EXPR (decl); 14966 if (TREE_CODE (val_expr) != COMPONENT_REF) 14967 return NULL_TREE; 14968 14969 cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset, 14970 &mode, &unsignedp, &volatilep, true); 14971 14972 if (cvar == NULL_TREE 14973 || TREE_CODE (cvar) != VAR_DECL 14974 || DECL_ARTIFICIAL (cvar) 14975 || !TREE_PUBLIC (cvar)) 14976 return NULL_TREE; 14977 14978 *value = 0; 14979 if (offset != NULL) 14980 { 14981 if (!host_integerp (offset, 0)) 14982 return NULL_TREE; 14983 *value = tree_low_cst (offset, 0); 14984 } 14985 if (bitpos != 0) 14986 *value += bitpos / BITS_PER_UNIT; 14987 14988 return cvar; 14989 } 14990 14991 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value 14992 data attribute for a variable or a parameter. We generate the 14993 DW_AT_const_value attribute only in those cases where the given variable 14994 or parameter does not have a true "location" either in memory or in a 14995 register. This can happen (for example) when a constant is passed as an 14996 actual argument in a call to an inline function. (It's possible that 14997 these things can crop up in other ways also.) Note that one type of 14998 constant value which can be passed into an inlined function is a constant 14999 pointer. This can happen for example if an actual argument in an inlined 15000 function call evaluates to a compile-time constant address. 15001 15002 CACHE_P is true if it is worth caching the location list for DECL, 15003 so that future calls can reuse it rather than regenerate it from scratch. 15004 This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines, 15005 since we will need to refer to them each time the function is inlined. */ 15006 15007 static bool 15008 add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p, 15009 enum dwarf_attribute attr) 15010 { 15011 rtx rtl; 15012 dw_loc_list_ref list; 15013 var_loc_list *loc_list; 15014 cached_dw_loc_list *cache; 15015 void **slot; 15016 15017 if (TREE_CODE (decl) == ERROR_MARK) 15018 return false; 15019 15020 gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL 15021 || TREE_CODE (decl) == RESULT_DECL); 15022 15023 /* Try to get some constant RTL for this decl, and use that as the value of 15024 the location. */ 15025 15026 rtl = rtl_for_decl_location (decl); 15027 if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING) 15028 && add_const_value_attribute (die, rtl)) 15029 return true; 15030 15031 /* See if we have single element location list that is equivalent to 15032 a constant value. That way we are better to use add_const_value_attribute 15033 rather than expanding constant value equivalent. */ 15034 loc_list = lookup_decl_loc (decl); 15035 if (loc_list 15036 && loc_list->first 15037 && loc_list->first->next == NULL 15038 && NOTE_P (loc_list->first->loc) 15039 && NOTE_VAR_LOCATION (loc_list->first->loc) 15040 && NOTE_VAR_LOCATION_LOC (loc_list->first->loc)) 15041 { 15042 struct var_loc_node *node; 15043 15044 node = loc_list->first; 15045 rtl = NOTE_VAR_LOCATION_LOC (node->loc); 15046 if (GET_CODE (rtl) == EXPR_LIST) 15047 rtl = XEXP (rtl, 0); 15048 if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING) 15049 && add_const_value_attribute (die, rtl)) 15050 return true; 15051 } 15052 /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its 15053 list several times. See if we've already cached the contents. */ 15054 list = NULL; 15055 if (loc_list == NULL || cached_dw_loc_list_table == NULL) 15056 cache_p = false; 15057 if (cache_p) 15058 { 15059 cache = (cached_dw_loc_list *) 15060 htab_find_with_hash (cached_dw_loc_list_table, decl, DECL_UID (decl)); 15061 if (cache) 15062 list = cache->loc_list; 15063 } 15064 if (list == NULL) 15065 { 15066 list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2); 15067 /* It is usually worth caching this result if the decl is from 15068 BLOCK_NONLOCALIZED_VARS and if the list has at least two elements. */ 15069 if (cache_p && list && list->dw_loc_next) 15070 { 15071 slot = htab_find_slot_with_hash (cached_dw_loc_list_table, decl, 15072 DECL_UID (decl), INSERT); 15073 cache = ggc_alloc_cleared_cached_dw_loc_list (); 15074 cache->decl_id = DECL_UID (decl); 15075 cache->loc_list = list; 15076 *slot = cache; 15077 } 15078 } 15079 if (list) 15080 { 15081 add_AT_location_description (die, attr, list); 15082 return true; 15083 } 15084 /* None of that worked, so it must not really have a location; 15085 try adding a constant value attribute from the DECL_INITIAL. */ 15086 return tree_add_const_value_attribute_for_decl (die, decl); 15087 } 15088 15089 /* Add VARIABLE and DIE into deferred locations list. */ 15090 15091 static void 15092 defer_location (tree variable, dw_die_ref die) 15093 { 15094 deferred_locations entry; 15095 entry.variable = variable; 15096 entry.die = die; 15097 VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry); 15098 } 15099 15100 /* Helper function for tree_add_const_value_attribute. Natively encode 15101 initializer INIT into an array. Return true if successful. */ 15102 15103 static bool 15104 native_encode_initializer (tree init, unsigned char *array, int size) 15105 { 15106 tree type; 15107 15108 if (init == NULL_TREE) 15109 return false; 15110 15111 STRIP_NOPS (init); 15112 switch (TREE_CODE (init)) 15113 { 15114 case STRING_CST: 15115 type = TREE_TYPE (init); 15116 if (TREE_CODE (type) == ARRAY_TYPE) 15117 { 15118 tree enttype = TREE_TYPE (type); 15119 enum machine_mode mode = TYPE_MODE (enttype); 15120 15121 if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1) 15122 return false; 15123 if (int_size_in_bytes (type) != size) 15124 return false; 15125 if (size > TREE_STRING_LENGTH (init)) 15126 { 15127 memcpy (array, TREE_STRING_POINTER (init), 15128 TREE_STRING_LENGTH (init)); 15129 memset (array + TREE_STRING_LENGTH (init), 15130 '\0', size - TREE_STRING_LENGTH (init)); 15131 } 15132 else 15133 memcpy (array, TREE_STRING_POINTER (init), size); 15134 return true; 15135 } 15136 return false; 15137 case CONSTRUCTOR: 15138 type = TREE_TYPE (init); 15139 if (int_size_in_bytes (type) != size) 15140 return false; 15141 if (TREE_CODE (type) == ARRAY_TYPE) 15142 { 15143 HOST_WIDE_INT min_index; 15144 unsigned HOST_WIDE_INT cnt; 15145 int curpos = 0, fieldsize; 15146 constructor_elt *ce; 15147 15148 if (TYPE_DOMAIN (type) == NULL_TREE 15149 || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0)) 15150 return false; 15151 15152 fieldsize = int_size_in_bytes (TREE_TYPE (type)); 15153 if (fieldsize <= 0) 15154 return false; 15155 15156 min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0); 15157 memset (array, '\0', size); 15158 FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce) 15159 { 15160 tree val = ce->value; 15161 tree index = ce->index; 15162 int pos = curpos; 15163 if (index && TREE_CODE (index) == RANGE_EXPR) 15164 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index) 15165 * fieldsize; 15166 else if (index) 15167 pos = (tree_low_cst (index, 0) - min_index) * fieldsize; 15168 15169 if (val) 15170 { 15171 STRIP_NOPS (val); 15172 if (!native_encode_initializer (val, array + pos, fieldsize)) 15173 return false; 15174 } 15175 curpos = pos + fieldsize; 15176 if (index && TREE_CODE (index) == RANGE_EXPR) 15177 { 15178 int count = tree_low_cst (TREE_OPERAND (index, 1), 0) 15179 - tree_low_cst (TREE_OPERAND (index, 0), 0); 15180 while (count-- > 0) 15181 { 15182 if (val) 15183 memcpy (array + curpos, array + pos, fieldsize); 15184 curpos += fieldsize; 15185 } 15186 } 15187 gcc_assert (curpos <= size); 15188 } 15189 return true; 15190 } 15191 else if (TREE_CODE (type) == RECORD_TYPE 15192 || TREE_CODE (type) == UNION_TYPE) 15193 { 15194 tree field = NULL_TREE; 15195 unsigned HOST_WIDE_INT cnt; 15196 constructor_elt *ce; 15197 15198 if (int_size_in_bytes (type) != size) 15199 return false; 15200 15201 if (TREE_CODE (type) == RECORD_TYPE) 15202 field = TYPE_FIELDS (type); 15203 15204 FOR_EACH_VEC_ELT (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce) 15205 { 15206 tree val = ce->value; 15207 int pos, fieldsize; 15208 15209 if (ce->index != 0) 15210 field = ce->index; 15211 15212 if (val) 15213 STRIP_NOPS (val); 15214 15215 if (field == NULL_TREE || DECL_BIT_FIELD (field)) 15216 return false; 15217 15218 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE 15219 && TYPE_DOMAIN (TREE_TYPE (field)) 15220 && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field)))) 15221 return false; 15222 else if (DECL_SIZE_UNIT (field) == NULL_TREE 15223 || !host_integerp (DECL_SIZE_UNIT (field), 0)) 15224 return false; 15225 fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0); 15226 pos = int_byte_position (field); 15227 gcc_assert (pos + fieldsize <= size); 15228 if (val 15229 && !native_encode_initializer (val, array + pos, fieldsize)) 15230 return false; 15231 } 15232 return true; 15233 } 15234 return false; 15235 case VIEW_CONVERT_EXPR: 15236 case NON_LVALUE_EXPR: 15237 return native_encode_initializer (TREE_OPERAND (init, 0), array, size); 15238 default: 15239 return native_encode_expr (init, array, size) == size; 15240 } 15241 } 15242 15243 /* Attach a DW_AT_const_value attribute to DIE. The value of the 15244 attribute is the const value T. */ 15245 15246 static bool 15247 tree_add_const_value_attribute (dw_die_ref die, tree t) 15248 { 15249 tree init; 15250 tree type = TREE_TYPE (t); 15251 rtx rtl; 15252 15253 if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node) 15254 return false; 15255 15256 init = t; 15257 gcc_assert (!DECL_P (init)); 15258 15259 rtl = rtl_for_decl_init (init, type); 15260 if (rtl) 15261 return add_const_value_attribute (die, rtl); 15262 /* If the host and target are sane, try harder. */ 15263 else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8 15264 && initializer_constant_valid_p (init, type)) 15265 { 15266 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init)); 15267 if (size > 0 && (int) size == size) 15268 { 15269 unsigned char *array = (unsigned char *) 15270 ggc_alloc_cleared_atomic (size); 15271 15272 if (native_encode_initializer (init, array, size)) 15273 { 15274 add_AT_vec (die, DW_AT_const_value, size, 1, array); 15275 return true; 15276 } 15277 } 15278 } 15279 return false; 15280 } 15281 15282 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the 15283 attribute is the const value of T, where T is an integral constant 15284 variable with static storage duration 15285 (so it can't be a PARM_DECL or a RESULT_DECL). */ 15286 15287 static bool 15288 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl) 15289 { 15290 15291 if (!decl 15292 || (TREE_CODE (decl) != VAR_DECL 15293 && TREE_CODE (decl) != CONST_DECL) 15294 || (TREE_CODE (decl) == VAR_DECL 15295 && !TREE_STATIC (decl))) 15296 return false; 15297 15298 if (TREE_READONLY (decl) 15299 && ! TREE_THIS_VOLATILE (decl) 15300 && DECL_INITIAL (decl)) 15301 /* OK */; 15302 else 15303 return false; 15304 15305 /* Don't add DW_AT_const_value if abstract origin already has one. */ 15306 if (get_AT (var_die, DW_AT_const_value)) 15307 return false; 15308 15309 return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl)); 15310 } 15311 15312 /* Convert the CFI instructions for the current function into a 15313 location list. This is used for DW_AT_frame_base when we targeting 15314 a dwarf2 consumer that does not support the dwarf3 15315 DW_OP_call_frame_cfa. OFFSET is a constant to be added to all CFA 15316 expressions. */ 15317 15318 static dw_loc_list_ref 15319 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset) 15320 { 15321 int ix; 15322 dw_fde_ref fde; 15323 dw_loc_list_ref list, *list_tail; 15324 dw_cfi_ref cfi; 15325 dw_cfa_location last_cfa, next_cfa; 15326 const char *start_label, *last_label, *section; 15327 dw_cfa_location remember; 15328 15329 fde = cfun->fde; 15330 gcc_assert (fde != NULL); 15331 15332 section = secname_for_decl (current_function_decl); 15333 list_tail = &list; 15334 list = NULL; 15335 15336 memset (&next_cfa, 0, sizeof (next_cfa)); 15337 next_cfa.reg = INVALID_REGNUM; 15338 remember = next_cfa; 15339 15340 start_label = fde->dw_fde_begin; 15341 15342 /* ??? Bald assumption that the CIE opcode list does not contain 15343 advance opcodes. */ 15344 FOR_EACH_VEC_ELT (dw_cfi_ref, cie_cfi_vec, ix, cfi) 15345 lookup_cfa_1 (cfi, &next_cfa, &remember); 15346 15347 last_cfa = next_cfa; 15348 last_label = start_label; 15349 15350 if (fde->dw_fde_second_begin && fde->dw_fde_switch_cfi_index == 0) 15351 { 15352 /* If the first partition contained no CFI adjustments, the 15353 CIE opcodes apply to the whole first partition. */ 15354 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset), 15355 fde->dw_fde_begin, fde->dw_fde_end, section); 15356 list_tail =&(*list_tail)->dw_loc_next; 15357 start_label = last_label = fde->dw_fde_second_begin; 15358 } 15359 15360 FOR_EACH_VEC_ELT (dw_cfi_ref, fde->dw_fde_cfi, ix, cfi) 15361 { 15362 switch (cfi->dw_cfi_opc) 15363 { 15364 case DW_CFA_set_loc: 15365 case DW_CFA_advance_loc1: 15366 case DW_CFA_advance_loc2: 15367 case DW_CFA_advance_loc4: 15368 if (!cfa_equal_p (&last_cfa, &next_cfa)) 15369 { 15370 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset), 15371 start_label, last_label, section); 15372 15373 list_tail = &(*list_tail)->dw_loc_next; 15374 last_cfa = next_cfa; 15375 start_label = last_label; 15376 } 15377 last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr; 15378 break; 15379 15380 case DW_CFA_advance_loc: 15381 /* The encoding is complex enough that we should never emit this. */ 15382 gcc_unreachable (); 15383 15384 default: 15385 lookup_cfa_1 (cfi, &next_cfa, &remember); 15386 break; 15387 } 15388 if (ix + 1 == fde->dw_fde_switch_cfi_index) 15389 { 15390 if (!cfa_equal_p (&last_cfa, &next_cfa)) 15391 { 15392 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset), 15393 start_label, last_label, section); 15394 15395 list_tail = &(*list_tail)->dw_loc_next; 15396 last_cfa = next_cfa; 15397 start_label = last_label; 15398 } 15399 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset), 15400 start_label, fde->dw_fde_end, section); 15401 list_tail = &(*list_tail)->dw_loc_next; 15402 start_label = last_label = fde->dw_fde_second_begin; 15403 } 15404 } 15405 15406 if (!cfa_equal_p (&last_cfa, &next_cfa)) 15407 { 15408 *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset), 15409 start_label, last_label, section); 15410 list_tail = &(*list_tail)->dw_loc_next; 15411 start_label = last_label; 15412 } 15413 15414 *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset), 15415 start_label, 15416 fde->dw_fde_second_begin 15417 ? fde->dw_fde_second_end : fde->dw_fde_end, 15418 section); 15419 15420 if (list && list->dw_loc_next) 15421 gen_llsym (list); 15422 15423 return list; 15424 } 15425 15426 /* Compute a displacement from the "steady-state frame pointer" to the 15427 frame base (often the same as the CFA), and store it in 15428 frame_pointer_fb_offset. OFFSET is added to the displacement 15429 before the latter is negated. */ 15430 15431 static void 15432 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset) 15433 { 15434 rtx reg, elim; 15435 15436 #ifdef FRAME_POINTER_CFA_OFFSET 15437 reg = frame_pointer_rtx; 15438 offset += FRAME_POINTER_CFA_OFFSET (current_function_decl); 15439 #else 15440 reg = arg_pointer_rtx; 15441 offset += ARG_POINTER_CFA_OFFSET (current_function_decl); 15442 #endif 15443 15444 elim = eliminate_regs (reg, VOIDmode, NULL_RTX); 15445 if (GET_CODE (elim) == PLUS) 15446 { 15447 offset += INTVAL (XEXP (elim, 1)); 15448 elim = XEXP (elim, 0); 15449 } 15450 15451 frame_pointer_fb_offset = -offset; 15452 15453 /* ??? AVR doesn't set up valid eliminations when there is no stack frame 15454 in which to eliminate. This is because it's stack pointer isn't 15455 directly accessible as a register within the ISA. To work around 15456 this, assume that while we cannot provide a proper value for 15457 frame_pointer_fb_offset, we won't need one either. */ 15458 frame_pointer_fb_offset_valid 15459 = ((SUPPORTS_STACK_ALIGNMENT 15460 && (elim == hard_frame_pointer_rtx 15461 || elim == stack_pointer_rtx)) 15462 || elim == (frame_pointer_needed 15463 ? hard_frame_pointer_rtx 15464 : stack_pointer_rtx)); 15465 } 15466 15467 /* Generate a DW_AT_name attribute given some string value to be included as 15468 the value of the attribute. */ 15469 15470 static void 15471 add_name_attribute (dw_die_ref die, const char *name_string) 15472 { 15473 if (name_string != NULL && *name_string != 0) 15474 { 15475 if (demangle_name_func) 15476 name_string = (*demangle_name_func) (name_string); 15477 15478 add_AT_string (die, DW_AT_name, name_string); 15479 } 15480 } 15481 15482 /* Retrieve the descriptive type of TYPE, if any, make sure it has a 15483 DIE and attach a DW_AT_GNAT_descriptive_type attribute to the DIE 15484 of TYPE accordingly. 15485 15486 ??? This is a temporary measure until after we're able to generate 15487 regular DWARF for the complex Ada type system. */ 15488 15489 static void 15490 add_gnat_descriptive_type_attribute (dw_die_ref die, tree type, 15491 dw_die_ref context_die) 15492 { 15493 tree dtype; 15494 dw_die_ref dtype_die; 15495 15496 if (!lang_hooks.types.descriptive_type) 15497 return; 15498 15499 dtype = lang_hooks.types.descriptive_type (type); 15500 if (!dtype) 15501 return; 15502 15503 dtype_die = lookup_type_die (dtype); 15504 if (!dtype_die) 15505 { 15506 gen_type_die (dtype, context_die); 15507 dtype_die = lookup_type_die (dtype); 15508 gcc_assert (dtype_die); 15509 } 15510 15511 add_AT_die_ref (die, DW_AT_GNAT_descriptive_type, dtype_die); 15512 } 15513 15514 /* Generate a DW_AT_comp_dir attribute for DIE. */ 15515 15516 static void 15517 add_comp_dir_attribute (dw_die_ref die) 15518 { 15519 const char *wd = get_src_pwd (); 15520 char *wd1; 15521 15522 if (wd == NULL) 15523 return; 15524 15525 if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR) 15526 { 15527 int wdlen; 15528 15529 wdlen = strlen (wd); 15530 wd1 = (char *) ggc_alloc_atomic (wdlen + 2); 15531 strcpy (wd1, wd); 15532 wd1 [wdlen] = DIR_SEPARATOR; 15533 wd1 [wdlen + 1] = 0; 15534 wd = wd1; 15535 } 15536 15537 add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd)); 15538 } 15539 15540 /* Return the default for DW_AT_lower_bound, or -1 if there is not any 15541 default. */ 15542 15543 static int 15544 lower_bound_default (void) 15545 { 15546 switch (get_AT_unsigned (comp_unit_die (), DW_AT_language)) 15547 { 15548 case DW_LANG_C: 15549 case DW_LANG_C89: 15550 case DW_LANG_C99: 15551 case DW_LANG_C_plus_plus: 15552 case DW_LANG_ObjC: 15553 case DW_LANG_ObjC_plus_plus: 15554 case DW_LANG_Java: 15555 return 0; 15556 case DW_LANG_Fortran77: 15557 case DW_LANG_Fortran90: 15558 case DW_LANG_Fortran95: 15559 return 1; 15560 case DW_LANG_UPC: 15561 case DW_LANG_D: 15562 case DW_LANG_Python: 15563 return dwarf_version >= 4 ? 0 : -1; 15564 case DW_LANG_Ada95: 15565 case DW_LANG_Ada83: 15566 case DW_LANG_Cobol74: 15567 case DW_LANG_Cobol85: 15568 case DW_LANG_Pascal83: 15569 case DW_LANG_Modula2: 15570 case DW_LANG_PLI: 15571 return dwarf_version >= 4 ? 1 : -1; 15572 default: 15573 return -1; 15574 } 15575 } 15576 15577 /* Given a tree node describing an array bound (either lower or upper) output 15578 a representation for that bound. */ 15579 15580 static void 15581 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound) 15582 { 15583 switch (TREE_CODE (bound)) 15584 { 15585 case ERROR_MARK: 15586 return; 15587 15588 /* All fixed-bounds are represented by INTEGER_CST nodes. */ 15589 case INTEGER_CST: 15590 { 15591 unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound)); 15592 int dflt; 15593 15594 /* Use the default if possible. */ 15595 if (bound_attr == DW_AT_lower_bound 15596 && host_integerp (bound, 0) 15597 && (dflt = lower_bound_default ()) != -1 15598 && tree_low_cst (bound, 0) == dflt) 15599 ; 15600 15601 /* Otherwise represent the bound as an unsigned value with the 15602 precision of its type. The precision and signedness of the 15603 type will be necessary to re-interpret it unambiguously. */ 15604 else if (prec < HOST_BITS_PER_WIDE_INT) 15605 { 15606 unsigned HOST_WIDE_INT mask 15607 = ((unsigned HOST_WIDE_INT) 1 << prec) - 1; 15608 add_AT_unsigned (subrange_die, bound_attr, 15609 TREE_INT_CST_LOW (bound) & mask); 15610 } 15611 else if (prec == HOST_BITS_PER_WIDE_INT 15612 || TREE_INT_CST_HIGH (bound) == 0) 15613 add_AT_unsigned (subrange_die, bound_attr, 15614 TREE_INT_CST_LOW (bound)); 15615 else 15616 add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound), 15617 TREE_INT_CST_LOW (bound)); 15618 } 15619 break; 15620 15621 CASE_CONVERT: 15622 case VIEW_CONVERT_EXPR: 15623 add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0)); 15624 break; 15625 15626 case SAVE_EXPR: 15627 break; 15628 15629 case VAR_DECL: 15630 case PARM_DECL: 15631 case RESULT_DECL: 15632 { 15633 dw_die_ref decl_die = lookup_decl_die (bound); 15634 15635 /* ??? Can this happen, or should the variable have been bound 15636 first? Probably it can, since I imagine that we try to create 15637 the types of parameters in the order in which they exist in 15638 the list, and won't have created a forward reference to a 15639 later parameter. */ 15640 if (decl_die != NULL) 15641 { 15642 add_AT_die_ref (subrange_die, bound_attr, decl_die); 15643 break; 15644 } 15645 } 15646 /* FALLTHRU */ 15647 15648 default: 15649 { 15650 /* Otherwise try to create a stack operation procedure to 15651 evaluate the value of the array bound. */ 15652 15653 dw_die_ref ctx, decl_die; 15654 dw_loc_list_ref list; 15655 15656 list = loc_list_from_tree (bound, 2); 15657 if (list == NULL || single_element_loc_list_p (list)) 15658 { 15659 /* If DW_AT_*bound is not a reference nor constant, it is 15660 a DWARF expression rather than location description. 15661 For that loc_list_from_tree (bound, 0) is needed. 15662 If that fails to give a single element list, 15663 fall back to outputting this as a reference anyway. */ 15664 dw_loc_list_ref list2 = loc_list_from_tree (bound, 0); 15665 if (list2 && single_element_loc_list_p (list2)) 15666 { 15667 add_AT_loc (subrange_die, bound_attr, list2->expr); 15668 break; 15669 } 15670 } 15671 if (list == NULL) 15672 break; 15673 15674 if (current_function_decl == 0) 15675 ctx = comp_unit_die (); 15676 else 15677 ctx = lookup_decl_die (current_function_decl); 15678 15679 decl_die = new_die (DW_TAG_variable, ctx, bound); 15680 add_AT_flag (decl_die, DW_AT_artificial, 1); 15681 add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx); 15682 add_AT_location_description (decl_die, DW_AT_location, list); 15683 add_AT_die_ref (subrange_die, bound_attr, decl_die); 15684 break; 15685 } 15686 } 15687 } 15688 15689 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing 15690 possibly nested array subscripts in a flat sequence if COLLAPSE_P is true. 15691 Note that the block of subscript information for an array type also 15692 includes information about the element type of the given array type. */ 15693 15694 static void 15695 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p) 15696 { 15697 unsigned dimension_number; 15698 tree lower, upper; 15699 dw_die_ref subrange_die; 15700 15701 for (dimension_number = 0; 15702 TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p); 15703 type = TREE_TYPE (type), dimension_number++) 15704 { 15705 tree domain = TYPE_DOMAIN (type); 15706 15707 if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0) 15708 break; 15709 15710 /* Arrays come in three flavors: Unspecified bounds, fixed bounds, 15711 and (in GNU C only) variable bounds. Handle all three forms 15712 here. */ 15713 subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL); 15714 if (domain) 15715 { 15716 /* We have an array type with specified bounds. */ 15717 lower = TYPE_MIN_VALUE (domain); 15718 upper = TYPE_MAX_VALUE (domain); 15719 15720 /* Define the index type. */ 15721 if (TREE_TYPE (domain)) 15722 { 15723 /* ??? This is probably an Ada unnamed subrange type. Ignore the 15724 TREE_TYPE field. We can't emit debug info for this 15725 because it is an unnamed integral type. */ 15726 if (TREE_CODE (domain) == INTEGER_TYPE 15727 && TYPE_NAME (domain) == NULL_TREE 15728 && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE 15729 && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE) 15730 ; 15731 else 15732 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0, 15733 type_die); 15734 } 15735 15736 /* ??? If upper is NULL, the array has unspecified length, 15737 but it does have a lower bound. This happens with Fortran 15738 dimension arr(N:*) 15739 Since the debugger is definitely going to need to know N 15740 to produce useful results, go ahead and output the lower 15741 bound solo, and hope the debugger can cope. */ 15742 15743 add_bound_info (subrange_die, DW_AT_lower_bound, lower); 15744 if (upper) 15745 add_bound_info (subrange_die, DW_AT_upper_bound, upper); 15746 } 15747 15748 /* Otherwise we have an array type with an unspecified length. The 15749 DWARF-2 spec does not say how to handle this; let's just leave out the 15750 bounds. */ 15751 } 15752 } 15753 15754 static void 15755 add_byte_size_attribute (dw_die_ref die, tree tree_node) 15756 { 15757 unsigned size; 15758 15759 switch (TREE_CODE (tree_node)) 15760 { 15761 case ERROR_MARK: 15762 size = 0; 15763 break; 15764 case ENUMERAL_TYPE: 15765 case RECORD_TYPE: 15766 case UNION_TYPE: 15767 case QUAL_UNION_TYPE: 15768 size = int_size_in_bytes (tree_node); 15769 break; 15770 case FIELD_DECL: 15771 /* For a data member of a struct or union, the DW_AT_byte_size is 15772 generally given as the number of bytes normally allocated for an 15773 object of the *declared* type of the member itself. This is true 15774 even for bit-fields. */ 15775 size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT; 15776 break; 15777 default: 15778 gcc_unreachable (); 15779 } 15780 15781 /* Note that `size' might be -1 when we get to this point. If it is, that 15782 indicates that the byte size of the entity in question is variable. We 15783 have no good way of expressing this fact in Dwarf at the present time, 15784 so just let the -1 pass on through. */ 15785 add_AT_unsigned (die, DW_AT_byte_size, size); 15786 } 15787 15788 /* For a FIELD_DECL node which represents a bit-field, output an attribute 15789 which specifies the distance in bits from the highest order bit of the 15790 "containing object" for the bit-field to the highest order bit of the 15791 bit-field itself. 15792 15793 For any given bit-field, the "containing object" is a hypothetical object 15794 (of some integral or enum type) within which the given bit-field lives. The 15795 type of this hypothetical "containing object" is always the same as the 15796 declared type of the individual bit-field itself. The determination of the 15797 exact location of the "containing object" for a bit-field is rather 15798 complicated. It's handled by the `field_byte_offset' function (above). 15799 15800 Note that it is the size (in bytes) of the hypothetical "containing object" 15801 which will be given in the DW_AT_byte_size attribute for this bit-field. 15802 (See `byte_size_attribute' above). */ 15803 15804 static inline void 15805 add_bit_offset_attribute (dw_die_ref die, tree decl) 15806 { 15807 HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl); 15808 tree type = DECL_BIT_FIELD_TYPE (decl); 15809 HOST_WIDE_INT bitpos_int; 15810 HOST_WIDE_INT highest_order_object_bit_offset; 15811 HOST_WIDE_INT highest_order_field_bit_offset; 15812 HOST_WIDE_INT bit_offset; 15813 15814 /* Must be a field and a bit field. */ 15815 gcc_assert (type && TREE_CODE (decl) == FIELD_DECL); 15816 15817 /* We can't yet handle bit-fields whose offsets are variable, so if we 15818 encounter such things, just return without generating any attribute 15819 whatsoever. Likewise for variable or too large size. */ 15820 if (! host_integerp (bit_position (decl), 0) 15821 || ! host_integerp (DECL_SIZE (decl), 1)) 15822 return; 15823 15824 bitpos_int = int_bit_position (decl); 15825 15826 /* Note that the bit offset is always the distance (in bits) from the 15827 highest-order bit of the "containing object" to the highest-order bit of 15828 the bit-field itself. Since the "high-order end" of any object or field 15829 is different on big-endian and little-endian machines, the computation 15830 below must take account of these differences. */ 15831 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT; 15832 highest_order_field_bit_offset = bitpos_int; 15833 15834 if (! BYTES_BIG_ENDIAN) 15835 { 15836 highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0); 15837 highest_order_object_bit_offset += simple_type_size_in_bits (type); 15838 } 15839 15840 bit_offset 15841 = (! BYTES_BIG_ENDIAN 15842 ? highest_order_object_bit_offset - highest_order_field_bit_offset 15843 : highest_order_field_bit_offset - highest_order_object_bit_offset); 15844 15845 if (bit_offset < 0) 15846 add_AT_int (die, DW_AT_bit_offset, bit_offset); 15847 else 15848 add_AT_unsigned (die, DW_AT_bit_offset, (unsigned HOST_WIDE_INT) bit_offset); 15849 } 15850 15851 /* For a FIELD_DECL node which represents a bit field, output an attribute 15852 which specifies the length in bits of the given field. */ 15853 15854 static inline void 15855 add_bit_size_attribute (dw_die_ref die, tree decl) 15856 { 15857 /* Must be a field and a bit field. */ 15858 gcc_assert (TREE_CODE (decl) == FIELD_DECL 15859 && DECL_BIT_FIELD_TYPE (decl)); 15860 15861 if (host_integerp (DECL_SIZE (decl), 1)) 15862 add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1)); 15863 } 15864 15865 /* If the compiled language is ANSI C, then add a 'prototyped' 15866 attribute, if arg types are given for the parameters of a function. */ 15867 15868 static inline void 15869 add_prototyped_attribute (dw_die_ref die, tree func_type) 15870 { 15871 if (get_AT_unsigned (comp_unit_die (), DW_AT_language) == DW_LANG_C89 15872 && prototype_p (func_type)) 15873 add_AT_flag (die, DW_AT_prototyped, 1); 15874 } 15875 15876 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found 15877 by looking in either the type declaration or object declaration 15878 equate table. */ 15879 15880 static inline dw_die_ref 15881 add_abstract_origin_attribute (dw_die_ref die, tree origin) 15882 { 15883 dw_die_ref origin_die = NULL; 15884 15885 if (TREE_CODE (origin) != FUNCTION_DECL) 15886 { 15887 /* We may have gotten separated from the block for the inlined 15888 function, if we're in an exception handler or some such; make 15889 sure that the abstract function has been written out. 15890 15891 Doing this for nested functions is wrong, however; functions are 15892 distinct units, and our context might not even be inline. */ 15893 tree fn = origin; 15894 15895 if (TYPE_P (fn)) 15896 fn = TYPE_STUB_DECL (fn); 15897 15898 fn = decl_function_context (fn); 15899 if (fn) 15900 dwarf2out_abstract_function (fn); 15901 } 15902 15903 if (DECL_P (origin)) 15904 origin_die = lookup_decl_die (origin); 15905 else if (TYPE_P (origin)) 15906 origin_die = lookup_type_die (origin); 15907 15908 /* XXX: Functions that are never lowered don't always have correct block 15909 trees (in the case of java, they simply have no block tree, in some other 15910 languages). For these functions, there is nothing we can really do to 15911 output correct debug info for inlined functions in all cases. Rather 15912 than die, we'll just produce deficient debug info now, in that we will 15913 have variables without a proper abstract origin. In the future, when all 15914 functions are lowered, we should re-add a gcc_assert (origin_die) 15915 here. */ 15916 15917 if (origin_die) 15918 add_AT_die_ref (die, DW_AT_abstract_origin, origin_die); 15919 return origin_die; 15920 } 15921 15922 /* We do not currently support the pure_virtual attribute. */ 15923 15924 static inline void 15925 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl) 15926 { 15927 if (DECL_VINDEX (func_decl)) 15928 { 15929 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual); 15930 15931 if (host_integerp (DECL_VINDEX (func_decl), 0)) 15932 add_AT_loc (die, DW_AT_vtable_elem_location, 15933 new_loc_descr (DW_OP_constu, 15934 tree_low_cst (DECL_VINDEX (func_decl), 0), 15935 0)); 15936 15937 /* GNU extension: Record what type this method came from originally. */ 15938 if (debug_info_level > DINFO_LEVEL_TERSE 15939 && DECL_CONTEXT (func_decl)) 15940 add_AT_die_ref (die, DW_AT_containing_type, 15941 lookup_type_die (DECL_CONTEXT (func_decl))); 15942 } 15943 } 15944 15945 /* Add a DW_AT_linkage_name or DW_AT_MIPS_linkage_name attribute for the 15946 given decl. This used to be a vendor extension until after DWARF 4 15947 standardized it. */ 15948 15949 static void 15950 add_linkage_attr (dw_die_ref die, tree decl) 15951 { 15952 const char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)); 15953 15954 /* Mimic what assemble_name_raw does with a leading '*'. */ 15955 if (name[0] == '*') 15956 name = &name[1]; 15957 15958 if (dwarf_version >= 4) 15959 add_AT_string (die, DW_AT_linkage_name, name); 15960 else 15961 add_AT_string (die, DW_AT_MIPS_linkage_name, name); 15962 } 15963 15964 /* Add source coordinate attributes for the given decl. */ 15965 15966 static void 15967 add_src_coords_attributes (dw_die_ref die, tree decl) 15968 { 15969 expanded_location s; 15970 15971 if (DECL_SOURCE_LOCATION (decl) == UNKNOWN_LOCATION) 15972 return; 15973 s = expand_location (DECL_SOURCE_LOCATION (decl)); 15974 add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file)); 15975 add_AT_unsigned (die, DW_AT_decl_line, s.line); 15976 } 15977 15978 /* Add DW_AT_{,MIPS_}linkage_name attribute for the given decl. */ 15979 15980 static void 15981 add_linkage_name (dw_die_ref die, tree decl) 15982 { 15983 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL) 15984 && TREE_PUBLIC (decl) 15985 && !DECL_ABSTRACT (decl) 15986 && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl)) 15987 && die->die_tag != DW_TAG_member) 15988 { 15989 /* Defer until we have an assembler name set. */ 15990 if (!DECL_ASSEMBLER_NAME_SET_P (decl)) 15991 { 15992 limbo_die_node *asm_name; 15993 15994 asm_name = ggc_alloc_cleared_limbo_die_node (); 15995 asm_name->die = die; 15996 asm_name->created_for = decl; 15997 asm_name->next = deferred_asm_name; 15998 deferred_asm_name = asm_name; 15999 } 16000 else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)) 16001 add_linkage_attr (die, decl); 16002 } 16003 } 16004 16005 /* Add a DW_AT_name attribute and source coordinate attribute for the 16006 given decl, but only if it actually has a name. */ 16007 16008 static void 16009 add_name_and_src_coords_attributes (dw_die_ref die, tree decl) 16010 { 16011 tree decl_name; 16012 16013 decl_name = DECL_NAME (decl); 16014 if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL) 16015 { 16016 const char *name = dwarf2_name (decl, 0); 16017 if (name) 16018 add_name_attribute (die, name); 16019 if (! DECL_ARTIFICIAL (decl)) 16020 add_src_coords_attributes (die, decl); 16021 16022 add_linkage_name (die, decl); 16023 } 16024 16025 #ifdef VMS_DEBUGGING_INFO 16026 /* Get the function's name, as described by its RTL. This may be different 16027 from the DECL_NAME name used in the source file. */ 16028 if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl)) 16029 { 16030 add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address, 16031 XEXP (DECL_RTL (decl), 0)); 16032 VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0)); 16033 } 16034 #endif /* VMS_DEBUGGING_INFO */ 16035 } 16036 16037 #ifdef VMS_DEBUGGING_INFO 16038 /* Output the debug main pointer die for VMS */ 16039 16040 void 16041 dwarf2out_vms_debug_main_pointer (void) 16042 { 16043 char label[MAX_ARTIFICIAL_LABEL_BYTES]; 16044 dw_die_ref die; 16045 16046 /* Allocate the VMS debug main subprogram die. */ 16047 die = ggc_alloc_cleared_die_node (); 16048 die->die_tag = DW_TAG_subprogram; 16049 add_name_attribute (die, VMS_DEBUG_MAIN_POINTER); 16050 ASM_GENERATE_INTERNAL_LABEL (label, PROLOGUE_END_LABEL, 16051 current_function_funcdef_no); 16052 add_AT_lbl_id (die, DW_AT_entry_pc, label); 16053 16054 /* Make it the first child of comp_unit_die (). */ 16055 die->die_parent = comp_unit_die (); 16056 if (comp_unit_die ()->die_child) 16057 { 16058 die->die_sib = comp_unit_die ()->die_child->die_sib; 16059 comp_unit_die ()->die_child->die_sib = die; 16060 } 16061 else 16062 { 16063 die->die_sib = die; 16064 comp_unit_die ()->die_child = die; 16065 } 16066 } 16067 #endif /* VMS_DEBUGGING_INFO */ 16068 16069 /* Push a new declaration scope. */ 16070 16071 static void 16072 push_decl_scope (tree scope) 16073 { 16074 VEC_safe_push (tree, gc, decl_scope_table, scope); 16075 } 16076 16077 /* Pop a declaration scope. */ 16078 16079 static inline void 16080 pop_decl_scope (void) 16081 { 16082 VEC_pop (tree, decl_scope_table); 16083 } 16084 16085 /* walk_tree helper function for uses_local_type, below. */ 16086 16087 static tree 16088 uses_local_type_r (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED) 16089 { 16090 if (!TYPE_P (*tp)) 16091 *walk_subtrees = 0; 16092 else 16093 { 16094 tree name = TYPE_NAME (*tp); 16095 if (name && DECL_P (name) && decl_function_context (name)) 16096 return *tp; 16097 } 16098 return NULL_TREE; 16099 } 16100 16101 /* If TYPE involves a function-local type (including a local typedef to a 16102 non-local type), returns that type; otherwise returns NULL_TREE. */ 16103 16104 static tree 16105 uses_local_type (tree type) 16106 { 16107 tree used = walk_tree_without_duplicates (&type, uses_local_type_r, NULL); 16108 return used; 16109 } 16110 16111 /* Return the DIE for the scope that immediately contains this type. 16112 Non-named types that do not involve a function-local type get global 16113 scope. Named types nested in namespaces or other types get their 16114 containing scope. All other types (i.e. function-local named types) get 16115 the current active scope. */ 16116 16117 static dw_die_ref 16118 scope_die_for (tree t, dw_die_ref context_die) 16119 { 16120 dw_die_ref scope_die = NULL; 16121 tree containing_scope; 16122 16123 /* Non-types always go in the current scope. */ 16124 gcc_assert (TYPE_P (t)); 16125 16126 /* Use the scope of the typedef, rather than the scope of the type 16127 it refers to. */ 16128 if (TYPE_NAME (t) && DECL_P (TYPE_NAME (t))) 16129 containing_scope = DECL_CONTEXT (TYPE_NAME (t)); 16130 else 16131 containing_scope = TYPE_CONTEXT (t); 16132 16133 /* Use the containing namespace if there is one. */ 16134 if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL) 16135 { 16136 if (context_die == lookup_decl_die (containing_scope)) 16137 /* OK */; 16138 else if (debug_info_level > DINFO_LEVEL_TERSE) 16139 context_die = get_context_die (containing_scope); 16140 else 16141 containing_scope = NULL_TREE; 16142 } 16143 16144 /* Ignore function type "scopes" from the C frontend. They mean that 16145 a tagged type is local to a parmlist of a function declarator, but 16146 that isn't useful to DWARF. */ 16147 if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE) 16148 containing_scope = NULL_TREE; 16149 16150 if (SCOPE_FILE_SCOPE_P (containing_scope)) 16151 { 16152 /* If T uses a local type keep it local as well, to avoid references 16153 to function-local DIEs from outside the function. */ 16154 if (current_function_decl && uses_local_type (t)) 16155 scope_die = context_die; 16156 else 16157 scope_die = comp_unit_die (); 16158 } 16159 else if (TYPE_P (containing_scope)) 16160 { 16161 /* For types, we can just look up the appropriate DIE. */ 16162 if (debug_info_level > DINFO_LEVEL_TERSE) 16163 scope_die = get_context_die (containing_scope); 16164 else 16165 { 16166 scope_die = lookup_type_die_strip_naming_typedef (containing_scope); 16167 if (scope_die == NULL) 16168 scope_die = comp_unit_die (); 16169 } 16170 } 16171 else 16172 scope_die = context_die; 16173 16174 return scope_die; 16175 } 16176 16177 /* Returns nonzero if CONTEXT_DIE is internal to a function. */ 16178 16179 static inline int 16180 local_scope_p (dw_die_ref context_die) 16181 { 16182 for (; context_die; context_die = context_die->die_parent) 16183 if (context_die->die_tag == DW_TAG_inlined_subroutine 16184 || context_die->die_tag == DW_TAG_subprogram) 16185 return 1; 16186 16187 return 0; 16188 } 16189 16190 /* Returns nonzero if CONTEXT_DIE is a class. */ 16191 16192 static inline int 16193 class_scope_p (dw_die_ref context_die) 16194 { 16195 return (context_die 16196 && (context_die->die_tag == DW_TAG_structure_type 16197 || context_die->die_tag == DW_TAG_class_type 16198 || context_die->die_tag == DW_TAG_interface_type 16199 || context_die->die_tag == DW_TAG_union_type)); 16200 } 16201 16202 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding 16203 whether or not to treat a DIE in this context as a declaration. */ 16204 16205 static inline int 16206 class_or_namespace_scope_p (dw_die_ref context_die) 16207 { 16208 return (class_scope_p (context_die) 16209 || (context_die && context_die->die_tag == DW_TAG_namespace)); 16210 } 16211 16212 /* Many forms of DIEs require a "type description" attribute. This 16213 routine locates the proper "type descriptor" die for the type given 16214 by 'type', and adds a DW_AT_type attribute below the given die. */ 16215 16216 static void 16217 add_type_attribute (dw_die_ref object_die, tree type, int decl_const, 16218 int decl_volatile, dw_die_ref context_die) 16219 { 16220 enum tree_code code = TREE_CODE (type); 16221 dw_die_ref type_die = NULL; 16222 16223 /* ??? If this type is an unnamed subrange type of an integral, floating-point 16224 or fixed-point type, use the inner type. This is because we have no 16225 support for unnamed types in base_type_die. This can happen if this is 16226 an Ada subrange type. Correct solution is emit a subrange type die. */ 16227 if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE) 16228 && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0) 16229 type = TREE_TYPE (type), code = TREE_CODE (type); 16230 16231 if (code == ERROR_MARK 16232 /* Handle a special case. For functions whose return type is void, we 16233 generate *no* type attribute. (Note that no object may have type 16234 `void', so this only applies to function return types). */ 16235 || code == VOID_TYPE) 16236 return; 16237 16238 type_die = modified_type_die (type, 16239 decl_const || TYPE_READONLY (type), 16240 decl_volatile || TYPE_VOLATILE (type), 16241 context_die); 16242 16243 if (type_die != NULL) 16244 add_AT_die_ref (object_die, DW_AT_type, type_die); 16245 } 16246 16247 /* Given an object die, add the calling convention attribute for the 16248 function call type. */ 16249 static void 16250 add_calling_convention_attribute (dw_die_ref subr_die, tree decl) 16251 { 16252 enum dwarf_calling_convention value = DW_CC_normal; 16253 16254 value = ((enum dwarf_calling_convention) 16255 targetm.dwarf_calling_convention (TREE_TYPE (decl))); 16256 16257 if (is_fortran () 16258 && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__")) 16259 { 16260 /* DWARF 2 doesn't provide a way to identify a program's source-level 16261 entry point. DW_AT_calling_convention attributes are only meant 16262 to describe functions' calling conventions. However, lacking a 16263 better way to signal the Fortran main program, we used this for 16264 a long time, following existing custom. Now, DWARF 4 has 16265 DW_AT_main_subprogram, which we add below, but some tools still 16266 rely on the old way, which we thus keep. */ 16267 value = DW_CC_program; 16268 16269 if (dwarf_version >= 4 || !dwarf_strict) 16270 add_AT_flag (subr_die, DW_AT_main_subprogram, 1); 16271 } 16272 16273 /* Only add the attribute if the backend requests it, and 16274 is not DW_CC_normal. */ 16275 if (value && (value != DW_CC_normal)) 16276 add_AT_unsigned (subr_die, DW_AT_calling_convention, value); 16277 } 16278 16279 /* Given a tree pointer to a struct, class, union, or enum type node, return 16280 a pointer to the (string) tag name for the given type, or zero if the type 16281 was declared without a tag. */ 16282 16283 static const char * 16284 type_tag (const_tree type) 16285 { 16286 const char *name = 0; 16287 16288 if (TYPE_NAME (type) != 0) 16289 { 16290 tree t = 0; 16291 16292 /* Find the IDENTIFIER_NODE for the type name. */ 16293 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE 16294 && !TYPE_NAMELESS (type)) 16295 t = TYPE_NAME (type); 16296 16297 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to 16298 a TYPE_DECL node, regardless of whether or not a `typedef' was 16299 involved. */ 16300 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL 16301 && ! DECL_IGNORED_P (TYPE_NAME (type))) 16302 { 16303 /* We want to be extra verbose. Don't call dwarf_name if 16304 DECL_NAME isn't set. The default hook for decl_printable_name 16305 doesn't like that, and in this context it's correct to return 16306 0, instead of "<anonymous>" or the like. */ 16307 if (DECL_NAME (TYPE_NAME (type)) 16308 && !DECL_NAMELESS (TYPE_NAME (type))) 16309 name = lang_hooks.dwarf_name (TYPE_NAME (type), 2); 16310 } 16311 16312 /* Now get the name as a string, or invent one. */ 16313 if (!name && t != 0) 16314 name = IDENTIFIER_POINTER (t); 16315 } 16316 16317 return (name == 0 || *name == '\0') ? 0 : name; 16318 } 16319 16320 /* Return the type associated with a data member, make a special check 16321 for bit field types. */ 16322 16323 static inline tree 16324 member_declared_type (const_tree member) 16325 { 16326 return (DECL_BIT_FIELD_TYPE (member) 16327 ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member)); 16328 } 16329 16330 /* Get the decl's label, as described by its RTL. This may be different 16331 from the DECL_NAME name used in the source file. */ 16332 16333 #if 0 16334 static const char * 16335 decl_start_label (tree decl) 16336 { 16337 rtx x; 16338 const char *fnname; 16339 16340 x = DECL_RTL (decl); 16341 gcc_assert (MEM_P (x)); 16342 16343 x = XEXP (x, 0); 16344 gcc_assert (GET_CODE (x) == SYMBOL_REF); 16345 16346 fnname = XSTR (x, 0); 16347 return fnname; 16348 } 16349 #endif 16350 16351 /* These routines generate the internal representation of the DIE's for 16352 the compilation unit. Debugging information is collected by walking 16353 the declaration trees passed in from dwarf2out_decl(). */ 16354 16355 static void 16356 gen_array_type_die (tree type, dw_die_ref context_die) 16357 { 16358 dw_die_ref scope_die = scope_die_for (type, context_die); 16359 dw_die_ref array_die; 16360 16361 /* GNU compilers represent multidimensional array types as sequences of one 16362 dimensional array types whose element types are themselves array types. 16363 We sometimes squish that down to a single array_type DIE with multiple 16364 subscripts in the Dwarf debugging info. The draft Dwarf specification 16365 say that we are allowed to do this kind of compression in C, because 16366 there is no difference between an array of arrays and a multidimensional 16367 array. We don't do this for Ada to remain as close as possible to the 16368 actual representation, which is especially important against the language 16369 flexibilty wrt arrays of variable size. */ 16370 16371 bool collapse_nested_arrays = !is_ada (); 16372 tree element_type; 16373 16374 /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as 16375 DW_TAG_string_type doesn't have DW_AT_type attribute). */ 16376 if (TYPE_STRING_FLAG (type) 16377 && TREE_CODE (type) == ARRAY_TYPE 16378 && is_fortran () 16379 && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node)) 16380 { 16381 HOST_WIDE_INT size; 16382 16383 array_die = new_die (DW_TAG_string_type, scope_die, type); 16384 add_name_attribute (array_die, type_tag (type)); 16385 equate_type_number_to_die (type, array_die); 16386 size = int_size_in_bytes (type); 16387 if (size >= 0) 16388 add_AT_unsigned (array_die, DW_AT_byte_size, size); 16389 else if (TYPE_DOMAIN (type) != NULL_TREE 16390 && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE 16391 && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type)))) 16392 { 16393 tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type)); 16394 dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2); 16395 16396 size = int_size_in_bytes (TREE_TYPE (szdecl)); 16397 if (loc && size > 0) 16398 { 16399 add_AT_location_description (array_die, DW_AT_string_length, loc); 16400 if (size != DWARF2_ADDR_SIZE) 16401 add_AT_unsigned (array_die, DW_AT_byte_size, size); 16402 } 16403 } 16404 return; 16405 } 16406 16407 /* ??? The SGI dwarf reader fails for array of array of enum types 16408 (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner 16409 array type comes before the outer array type. We thus call gen_type_die 16410 before we new_die and must prevent nested array types collapsing for this 16411 target. */ 16412 16413 #ifdef MIPS_DEBUGGING_INFO 16414 gen_type_die (TREE_TYPE (type), context_die); 16415 collapse_nested_arrays = false; 16416 #endif 16417 16418 array_die = new_die (DW_TAG_array_type, scope_die, type); 16419 add_name_attribute (array_die, type_tag (type)); 16420 equate_type_number_to_die (type, array_die); 16421 16422 if (TREE_CODE (type) == VECTOR_TYPE) 16423 add_AT_flag (array_die, DW_AT_GNU_vector, 1); 16424 16425 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */ 16426 if (is_fortran () 16427 && TREE_CODE (type) == ARRAY_TYPE 16428 && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE 16429 && !TYPE_STRING_FLAG (TREE_TYPE (type))) 16430 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major); 16431 16432 #if 0 16433 /* We default the array ordering. SDB will probably do 16434 the right things even if DW_AT_ordering is not present. It's not even 16435 an issue until we start to get into multidimensional arrays anyway. If 16436 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays, 16437 then we'll have to put the DW_AT_ordering attribute back in. (But if 16438 and when we find out that we need to put these in, we will only do so 16439 for multidimensional arrays. */ 16440 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major); 16441 #endif 16442 16443 #ifdef MIPS_DEBUGGING_INFO 16444 /* The SGI compilers handle arrays of unknown bound by setting 16445 AT_declaration and not emitting any subrange DIEs. */ 16446 if (TREE_CODE (type) == ARRAY_TYPE 16447 && ! TYPE_DOMAIN (type)) 16448 add_AT_flag (array_die, DW_AT_declaration, 1); 16449 else 16450 #endif 16451 if (TREE_CODE (type) == VECTOR_TYPE) 16452 { 16453 /* For VECTOR_TYPEs we use an array die with appropriate bounds. */ 16454 dw_die_ref subrange_die = new_die (DW_TAG_subrange_type, array_die, NULL); 16455 add_bound_info (subrange_die, DW_AT_lower_bound, size_zero_node); 16456 add_bound_info (subrange_die, DW_AT_upper_bound, 16457 size_int (TYPE_VECTOR_SUBPARTS (type) - 1)); 16458 } 16459 else 16460 add_subscript_info (array_die, type, collapse_nested_arrays); 16461 16462 /* Add representation of the type of the elements of this array type and 16463 emit the corresponding DIE if we haven't done it already. */ 16464 element_type = TREE_TYPE (type); 16465 if (collapse_nested_arrays) 16466 while (TREE_CODE (element_type) == ARRAY_TYPE) 16467 { 16468 if (TYPE_STRING_FLAG (element_type) && is_fortran ()) 16469 break; 16470 element_type = TREE_TYPE (element_type); 16471 } 16472 16473 #ifndef MIPS_DEBUGGING_INFO 16474 gen_type_die (element_type, context_die); 16475 #endif 16476 16477 add_type_attribute (array_die, element_type, 0, 0, context_die); 16478 16479 add_gnat_descriptive_type_attribute (array_die, type, context_die); 16480 if (TYPE_ARTIFICIAL (type)) 16481 add_AT_flag (array_die, DW_AT_artificial, 1); 16482 16483 if (get_AT (array_die, DW_AT_name)) 16484 add_pubtype (type, array_die); 16485 } 16486 16487 static dw_loc_descr_ref 16488 descr_info_loc (tree val, tree base_decl) 16489 { 16490 HOST_WIDE_INT size; 16491 dw_loc_descr_ref loc, loc2; 16492 enum dwarf_location_atom op; 16493 16494 if (val == base_decl) 16495 return new_loc_descr (DW_OP_push_object_address, 0, 0); 16496 16497 switch (TREE_CODE (val)) 16498 { 16499 CASE_CONVERT: 16500 return descr_info_loc (TREE_OPERAND (val, 0), base_decl); 16501 case VAR_DECL: 16502 return loc_descriptor_from_tree (val, 0); 16503 case INTEGER_CST: 16504 if (host_integerp (val, 0)) 16505 return int_loc_descriptor (tree_low_cst (val, 0)); 16506 break; 16507 case INDIRECT_REF: 16508 size = int_size_in_bytes (TREE_TYPE (val)); 16509 if (size < 0) 16510 break; 16511 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl); 16512 if (!loc) 16513 break; 16514 if (size == DWARF2_ADDR_SIZE) 16515 add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0)); 16516 else 16517 add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0)); 16518 return loc; 16519 case POINTER_PLUS_EXPR: 16520 case PLUS_EXPR: 16521 if (host_integerp (TREE_OPERAND (val, 1), 1) 16522 && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1) 16523 < 16384) 16524 { 16525 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl); 16526 if (!loc) 16527 break; 16528 loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0)); 16529 } 16530 else 16531 { 16532 op = DW_OP_plus; 16533 do_binop: 16534 loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl); 16535 if (!loc) 16536 break; 16537 loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl); 16538 if (!loc2) 16539 break; 16540 add_loc_descr (&loc, loc2); 16541 add_loc_descr (&loc2, new_loc_descr (op, 0, 0)); 16542 } 16543 return loc; 16544 case MINUS_EXPR: 16545 op = DW_OP_minus; 16546 goto do_binop; 16547 case MULT_EXPR: 16548 op = DW_OP_mul; 16549 goto do_binop; 16550 case EQ_EXPR: 16551 op = DW_OP_eq; 16552 goto do_binop; 16553 case NE_EXPR: 16554 op = DW_OP_ne; 16555 goto do_binop; 16556 default: 16557 break; 16558 } 16559 return NULL; 16560 } 16561 16562 static void 16563 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr, 16564 tree val, tree base_decl) 16565 { 16566 dw_loc_descr_ref loc; 16567 16568 if (host_integerp (val, 0)) 16569 { 16570 add_AT_unsigned (die, attr, tree_low_cst (val, 0)); 16571 return; 16572 } 16573 16574 loc = descr_info_loc (val, base_decl); 16575 if (!loc) 16576 return; 16577 16578 add_AT_loc (die, attr, loc); 16579 } 16580 16581 /* This routine generates DIE for array with hidden descriptor, details 16582 are filled into *info by a langhook. */ 16583 16584 static void 16585 gen_descr_array_type_die (tree type, struct array_descr_info *info, 16586 dw_die_ref context_die) 16587 { 16588 dw_die_ref scope_die = scope_die_for (type, context_die); 16589 dw_die_ref array_die; 16590 int dim; 16591 16592 array_die = new_die (DW_TAG_array_type, scope_die, type); 16593 add_name_attribute (array_die, type_tag (type)); 16594 equate_type_number_to_die (type, array_die); 16595 16596 /* For Fortran multidimensional arrays use DW_ORD_col_major ordering. */ 16597 if (is_fortran () 16598 && info->ndimensions >= 2) 16599 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major); 16600 16601 if (info->data_location) 16602 add_descr_info_field (array_die, DW_AT_data_location, info->data_location, 16603 info->base_decl); 16604 if (info->associated) 16605 add_descr_info_field (array_die, DW_AT_associated, info->associated, 16606 info->base_decl); 16607 if (info->allocated) 16608 add_descr_info_field (array_die, DW_AT_allocated, info->allocated, 16609 info->base_decl); 16610 16611 for (dim = 0; dim < info->ndimensions; dim++) 16612 { 16613 dw_die_ref subrange_die 16614 = new_die (DW_TAG_subrange_type, array_die, NULL); 16615 16616 if (info->dimen[dim].lower_bound) 16617 { 16618 /* If it is the default value, omit it. */ 16619 int dflt; 16620 16621 if (host_integerp (info->dimen[dim].lower_bound, 0) 16622 && (dflt = lower_bound_default ()) != -1 16623 && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt) 16624 ; 16625 else 16626 add_descr_info_field (subrange_die, DW_AT_lower_bound, 16627 info->dimen[dim].lower_bound, 16628 info->base_decl); 16629 } 16630 if (info->dimen[dim].upper_bound) 16631 add_descr_info_field (subrange_die, DW_AT_upper_bound, 16632 info->dimen[dim].upper_bound, 16633 info->base_decl); 16634 if (info->dimen[dim].stride) 16635 add_descr_info_field (subrange_die, DW_AT_byte_stride, 16636 info->dimen[dim].stride, 16637 info->base_decl); 16638 } 16639 16640 gen_type_die (info->element_type, context_die); 16641 add_type_attribute (array_die, info->element_type, 0, 0, context_die); 16642 16643 if (get_AT (array_die, DW_AT_name)) 16644 add_pubtype (type, array_die); 16645 } 16646 16647 #if 0 16648 static void 16649 gen_entry_point_die (tree decl, dw_die_ref context_die) 16650 { 16651 tree origin = decl_ultimate_origin (decl); 16652 dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl); 16653 16654 if (origin != NULL) 16655 add_abstract_origin_attribute (decl_die, origin); 16656 else 16657 { 16658 add_name_and_src_coords_attributes (decl_die, decl); 16659 add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)), 16660 0, 0, context_die); 16661 } 16662 16663 if (DECL_ABSTRACT (decl)) 16664 equate_decl_number_to_die (decl, decl_die); 16665 else 16666 add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl)); 16667 } 16668 #endif 16669 16670 /* Walk through the list of incomplete types again, trying once more to 16671 emit full debugging info for them. */ 16672 16673 static void 16674 retry_incomplete_types (void) 16675 { 16676 int i; 16677 16678 for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--) 16679 if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i), 16680 DINFO_USAGE_DIR_USE)) 16681 gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die ()); 16682 } 16683 16684 /* Determine what tag to use for a record type. */ 16685 16686 static enum dwarf_tag 16687 record_type_tag (tree type) 16688 { 16689 if (! lang_hooks.types.classify_record) 16690 return DW_TAG_structure_type; 16691 16692 switch (lang_hooks.types.classify_record (type)) 16693 { 16694 case RECORD_IS_STRUCT: 16695 return DW_TAG_structure_type; 16696 16697 case RECORD_IS_CLASS: 16698 return DW_TAG_class_type; 16699 16700 case RECORD_IS_INTERFACE: 16701 if (dwarf_version >= 3 || !dwarf_strict) 16702 return DW_TAG_interface_type; 16703 return DW_TAG_structure_type; 16704 16705 default: 16706 gcc_unreachable (); 16707 } 16708 } 16709 16710 /* Generate a DIE to represent an enumeration type. Note that these DIEs 16711 include all of the information about the enumeration values also. Each 16712 enumerated type name/value is listed as a child of the enumerated type 16713 DIE. */ 16714 16715 static dw_die_ref 16716 gen_enumeration_type_die (tree type, dw_die_ref context_die) 16717 { 16718 dw_die_ref type_die = lookup_type_die (type); 16719 16720 if (type_die == NULL) 16721 { 16722 type_die = new_die (DW_TAG_enumeration_type, 16723 scope_die_for (type, context_die), type); 16724 equate_type_number_to_die (type, type_die); 16725 add_name_attribute (type_die, type_tag (type)); 16726 if (dwarf_version >= 4 || !dwarf_strict) 16727 { 16728 if (ENUM_IS_SCOPED (type)) 16729 add_AT_flag (type_die, DW_AT_enum_class, 1); 16730 if (ENUM_IS_OPAQUE (type)) 16731 add_AT_flag (type_die, DW_AT_declaration, 1); 16732 } 16733 } 16734 else if (! TYPE_SIZE (type)) 16735 return type_die; 16736 else 16737 remove_AT (type_die, DW_AT_declaration); 16738 16739 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the 16740 given enum type is incomplete, do not generate the DW_AT_byte_size 16741 attribute or the DW_AT_element_list attribute. */ 16742 if (TYPE_SIZE (type)) 16743 { 16744 tree link; 16745 16746 TREE_ASM_WRITTEN (type) = 1; 16747 add_byte_size_attribute (type_die, type); 16748 if (TYPE_STUB_DECL (type) != NULL_TREE) 16749 { 16750 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type)); 16751 add_accessibility_attribute (type_die, TYPE_STUB_DECL (type)); 16752 } 16753 16754 /* If the first reference to this type was as the return type of an 16755 inline function, then it may not have a parent. Fix this now. */ 16756 if (type_die->die_parent == NULL) 16757 add_child_die (scope_die_for (type, context_die), type_die); 16758 16759 for (link = TYPE_VALUES (type); 16760 link != NULL; link = TREE_CHAIN (link)) 16761 { 16762 dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link); 16763 tree value = TREE_VALUE (link); 16764 16765 add_name_attribute (enum_die, 16766 IDENTIFIER_POINTER (TREE_PURPOSE (link))); 16767 16768 if (TREE_CODE (value) == CONST_DECL) 16769 value = DECL_INITIAL (value); 16770 16771 if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value)))) 16772 /* DWARF2 does not provide a way of indicating whether or 16773 not enumeration constants are signed or unsigned. GDB 16774 always assumes the values are signed, so we output all 16775 values as if they were signed. That means that 16776 enumeration constants with very large unsigned values 16777 will appear to have negative values in the debugger. */ 16778 add_AT_int (enum_die, DW_AT_const_value, 16779 tree_low_cst (value, tree_int_cst_sgn (value) > 0)); 16780 } 16781 16782 add_gnat_descriptive_type_attribute (type_die, type, context_die); 16783 if (TYPE_ARTIFICIAL (type)) 16784 add_AT_flag (type_die, DW_AT_artificial, 1); 16785 } 16786 else 16787 add_AT_flag (type_die, DW_AT_declaration, 1); 16788 16789 if (get_AT (type_die, DW_AT_name)) 16790 add_pubtype (type, type_die); 16791 16792 return type_die; 16793 } 16794 16795 /* Generate a DIE to represent either a real live formal parameter decl or to 16796 represent just the type of some formal parameter position in some function 16797 type. 16798 16799 Note that this routine is a bit unusual because its argument may be a 16800 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which 16801 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE 16802 node. If it's the former then this function is being called to output a 16803 DIE to represent a formal parameter object (or some inlining thereof). If 16804 it's the latter, then this function is only being called to output a 16805 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal 16806 argument type of some subprogram type. 16807 If EMIT_NAME_P is true, name and source coordinate attributes 16808 are emitted. */ 16809 16810 static dw_die_ref 16811 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p, 16812 dw_die_ref context_die) 16813 { 16814 tree node_or_origin = node ? node : origin; 16815 tree ultimate_origin; 16816 dw_die_ref parm_die 16817 = new_die (DW_TAG_formal_parameter, context_die, node); 16818 16819 switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin))) 16820 { 16821 case tcc_declaration: 16822 ultimate_origin = decl_ultimate_origin (node_or_origin); 16823 if (node || ultimate_origin) 16824 origin = ultimate_origin; 16825 if (origin != NULL) 16826 add_abstract_origin_attribute (parm_die, origin); 16827 else if (emit_name_p) 16828 add_name_and_src_coords_attributes (parm_die, node); 16829 if (origin == NULL 16830 || (! DECL_ABSTRACT (node_or_origin) 16831 && variably_modified_type_p (TREE_TYPE (node_or_origin), 16832 decl_function_context 16833 (node_or_origin)))) 16834 { 16835 tree type = TREE_TYPE (node_or_origin); 16836 if (decl_by_reference_p (node_or_origin)) 16837 add_type_attribute (parm_die, TREE_TYPE (type), 0, 0, 16838 context_die); 16839 else 16840 add_type_attribute (parm_die, type, 16841 TREE_READONLY (node_or_origin), 16842 TREE_THIS_VOLATILE (node_or_origin), 16843 context_die); 16844 } 16845 if (origin == NULL && DECL_ARTIFICIAL (node)) 16846 add_AT_flag (parm_die, DW_AT_artificial, 1); 16847 16848 if (node && node != origin) 16849 equate_decl_number_to_die (node, parm_die); 16850 if (! DECL_ABSTRACT (node_or_origin)) 16851 add_location_or_const_value_attribute (parm_die, node_or_origin, 16852 node == NULL, DW_AT_location); 16853 16854 break; 16855 16856 case tcc_type: 16857 /* We were called with some kind of a ..._TYPE node. */ 16858 add_type_attribute (parm_die, node_or_origin, 0, 0, context_die); 16859 break; 16860 16861 default: 16862 gcc_unreachable (); 16863 } 16864 16865 return parm_die; 16866 } 16867 16868 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate 16869 children DW_TAG_formal_parameter DIEs representing the arguments of the 16870 parameter pack. 16871 16872 PARM_PACK must be a function parameter pack. 16873 PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN 16874 must point to the subsequent arguments of the function PACK_ARG belongs to. 16875 SUBR_DIE is the DIE of the function PACK_ARG belongs to. 16876 If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument 16877 following the last one for which a DIE was generated. */ 16878 16879 static dw_die_ref 16880 gen_formal_parameter_pack_die (tree parm_pack, 16881 tree pack_arg, 16882 dw_die_ref subr_die, 16883 tree *next_arg) 16884 { 16885 tree arg; 16886 dw_die_ref parm_pack_die; 16887 16888 gcc_assert (parm_pack 16889 && lang_hooks.function_parameter_pack_p (parm_pack) 16890 && subr_die); 16891 16892 parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack); 16893 add_src_coords_attributes (parm_pack_die, parm_pack); 16894 16895 for (arg = pack_arg; arg; arg = DECL_CHAIN (arg)) 16896 { 16897 if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg, 16898 parm_pack)) 16899 break; 16900 gen_formal_parameter_die (arg, NULL, 16901 false /* Don't emit name attribute. */, 16902 parm_pack_die); 16903 } 16904 if (next_arg) 16905 *next_arg = arg; 16906 return parm_pack_die; 16907 } 16908 16909 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis 16910 at the end of an (ANSI prototyped) formal parameters list. */ 16911 16912 static void 16913 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die) 16914 { 16915 new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type); 16916 } 16917 16918 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a 16919 DW_TAG_unspecified_parameters DIE) to represent the types of the formal 16920 parameters as specified in some function type specification (except for 16921 those which appear as part of a function *definition*). */ 16922 16923 static void 16924 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die) 16925 { 16926 tree link; 16927 tree formal_type = NULL; 16928 tree first_parm_type; 16929 tree arg; 16930 16931 if (TREE_CODE (function_or_method_type) == FUNCTION_DECL) 16932 { 16933 arg = DECL_ARGUMENTS (function_or_method_type); 16934 function_or_method_type = TREE_TYPE (function_or_method_type); 16935 } 16936 else 16937 arg = NULL_TREE; 16938 16939 first_parm_type = TYPE_ARG_TYPES (function_or_method_type); 16940 16941 /* Make our first pass over the list of formal parameter types and output a 16942 DW_TAG_formal_parameter DIE for each one. */ 16943 for (link = first_parm_type; link; ) 16944 { 16945 dw_die_ref parm_die; 16946 16947 formal_type = TREE_VALUE (link); 16948 if (formal_type == void_type_node) 16949 break; 16950 16951 /* Output a (nameless) DIE to represent the formal parameter itself. */ 16952 parm_die = gen_formal_parameter_die (formal_type, NULL, 16953 true /* Emit name attribute. */, 16954 context_die); 16955 if (TREE_CODE (function_or_method_type) == METHOD_TYPE 16956 && link == first_parm_type) 16957 { 16958 add_AT_flag (parm_die, DW_AT_artificial, 1); 16959 if (dwarf_version >= 3 || !dwarf_strict) 16960 add_AT_die_ref (context_die, DW_AT_object_pointer, parm_die); 16961 } 16962 else if (arg && DECL_ARTIFICIAL (arg)) 16963 add_AT_flag (parm_die, DW_AT_artificial, 1); 16964 16965 link = TREE_CHAIN (link); 16966 if (arg) 16967 arg = DECL_CHAIN (arg); 16968 } 16969 16970 /* If this function type has an ellipsis, add a 16971 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */ 16972 if (formal_type != void_type_node) 16973 gen_unspecified_parameters_die (function_or_method_type, context_die); 16974 16975 /* Make our second (and final) pass over the list of formal parameter types 16976 and output DIEs to represent those types (as necessary). */ 16977 for (link = TYPE_ARG_TYPES (function_or_method_type); 16978 link && TREE_VALUE (link); 16979 link = TREE_CHAIN (link)) 16980 gen_type_die (TREE_VALUE (link), context_die); 16981 } 16982 16983 /* We want to generate the DIE for TYPE so that we can generate the 16984 die for MEMBER, which has been defined; we will need to refer back 16985 to the member declaration nested within TYPE. If we're trying to 16986 generate minimal debug info for TYPE, processing TYPE won't do the 16987 trick; we need to attach the member declaration by hand. */ 16988 16989 static void 16990 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die) 16991 { 16992 gen_type_die (type, context_die); 16993 16994 /* If we're trying to avoid duplicate debug info, we may not have 16995 emitted the member decl for this function. Emit it now. */ 16996 if (TYPE_STUB_DECL (type) 16997 && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)) 16998 && ! lookup_decl_die (member)) 16999 { 17000 dw_die_ref type_die; 17001 gcc_assert (!decl_ultimate_origin (member)); 17002 17003 push_decl_scope (type); 17004 type_die = lookup_type_die_strip_naming_typedef (type); 17005 if (TREE_CODE (member) == FUNCTION_DECL) 17006 gen_subprogram_die (member, type_die); 17007 else if (TREE_CODE (member) == FIELD_DECL) 17008 { 17009 /* Ignore the nameless fields that are used to skip bits but handle 17010 C++ anonymous unions and structs. */ 17011 if (DECL_NAME (member) != NULL_TREE 17012 || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE 17013 || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE) 17014 { 17015 gen_type_die (member_declared_type (member), type_die); 17016 gen_field_die (member, type_die); 17017 } 17018 } 17019 else 17020 gen_variable_die (member, NULL_TREE, type_die); 17021 17022 pop_decl_scope (); 17023 } 17024 } 17025 17026 /* Generate the DWARF2 info for the "abstract" instance of a function which we 17027 may later generate inlined and/or out-of-line instances of. */ 17028 17029 static void 17030 dwarf2out_abstract_function (tree decl) 17031 { 17032 dw_die_ref old_die; 17033 tree save_fn; 17034 tree context; 17035 int was_abstract; 17036 htab_t old_decl_loc_table; 17037 htab_t old_cached_dw_loc_list_table; 17038 int old_call_site_count, old_tail_call_site_count; 17039 struct call_arg_loc_node *old_call_arg_locations; 17040 17041 /* Make sure we have the actual abstract inline, not a clone. */ 17042 decl = DECL_ORIGIN (decl); 17043 17044 old_die = lookup_decl_die (decl); 17045 if (old_die && get_AT (old_die, DW_AT_inline)) 17046 /* We've already generated the abstract instance. */ 17047 return; 17048 17049 /* We can be called while recursively when seeing block defining inlined subroutine 17050 DIE. Be sure to not clobber the outer location table nor use it or we would 17051 get locations in abstract instantces. */ 17052 old_decl_loc_table = decl_loc_table; 17053 decl_loc_table = NULL; 17054 old_cached_dw_loc_list_table = cached_dw_loc_list_table; 17055 cached_dw_loc_list_table = NULL; 17056 old_call_arg_locations = call_arg_locations; 17057 call_arg_locations = NULL; 17058 old_call_site_count = call_site_count; 17059 call_site_count = -1; 17060 old_tail_call_site_count = tail_call_site_count; 17061 tail_call_site_count = -1; 17062 17063 /* Be sure we've emitted the in-class declaration DIE (if any) first, so 17064 we don't get confused by DECL_ABSTRACT. */ 17065 if (debug_info_level > DINFO_LEVEL_TERSE) 17066 { 17067 context = decl_class_context (decl); 17068 if (context) 17069 gen_type_die_for_member 17070 (context, decl, decl_function_context (decl) ? NULL : comp_unit_die ()); 17071 } 17072 17073 /* Pretend we've just finished compiling this function. */ 17074 save_fn = current_function_decl; 17075 current_function_decl = decl; 17076 push_cfun (DECL_STRUCT_FUNCTION (decl)); 17077 17078 was_abstract = DECL_ABSTRACT (decl); 17079 set_decl_abstract_flags (decl, 1); 17080 dwarf2out_decl (decl); 17081 if (! was_abstract) 17082 set_decl_abstract_flags (decl, 0); 17083 17084 current_function_decl = save_fn; 17085 decl_loc_table = old_decl_loc_table; 17086 cached_dw_loc_list_table = old_cached_dw_loc_list_table; 17087 call_arg_locations = old_call_arg_locations; 17088 call_site_count = old_call_site_count; 17089 tail_call_site_count = old_tail_call_site_count; 17090 pop_cfun (); 17091 } 17092 17093 /* Helper function of premark_used_types() which gets called through 17094 htab_traverse. 17095 17096 Marks the DIE of a given type in *SLOT as perennial, so it never gets 17097 marked as unused by prune_unused_types. */ 17098 17099 static int 17100 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED) 17101 { 17102 tree type; 17103 dw_die_ref die; 17104 17105 type = (tree) *slot; 17106 die = lookup_type_die (type); 17107 if (die != NULL) 17108 die->die_perennial_p = 1; 17109 return 1; 17110 } 17111 17112 /* Helper function of premark_types_used_by_global_vars which gets called 17113 through htab_traverse. 17114 17115 Marks the DIE of a given type in *SLOT as perennial, so it never gets 17116 marked as unused by prune_unused_types. The DIE of the type is marked 17117 only if the global variable using the type will actually be emitted. */ 17118 17119 static int 17120 premark_types_used_by_global_vars_helper (void **slot, 17121 void *data ATTRIBUTE_UNUSED) 17122 { 17123 struct types_used_by_vars_entry *entry; 17124 dw_die_ref die; 17125 17126 entry = (struct types_used_by_vars_entry *) *slot; 17127 gcc_assert (entry->type != NULL 17128 && entry->var_decl != NULL); 17129 die = lookup_type_die (entry->type); 17130 if (die) 17131 { 17132 /* Ask cgraph if the global variable really is to be emitted. 17133 If yes, then we'll keep the DIE of ENTRY->TYPE. */ 17134 struct varpool_node *node = varpool_get_node (entry->var_decl); 17135 if (node && node->needed) 17136 { 17137 die->die_perennial_p = 1; 17138 /* Keep the parent DIEs as well. */ 17139 while ((die = die->die_parent) && die->die_perennial_p == 0) 17140 die->die_perennial_p = 1; 17141 } 17142 } 17143 return 1; 17144 } 17145 17146 /* Mark all members of used_types_hash as perennial. */ 17147 17148 static void 17149 premark_used_types (void) 17150 { 17151 if (cfun && cfun->used_types_hash) 17152 htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL); 17153 } 17154 17155 /* Mark all members of types_used_by_vars_entry as perennial. */ 17156 17157 static void 17158 premark_types_used_by_global_vars (void) 17159 { 17160 if (types_used_by_vars_hash) 17161 htab_traverse (types_used_by_vars_hash, 17162 premark_types_used_by_global_vars_helper, NULL); 17163 } 17164 17165 /* Generate a DW_TAG_GNU_call_site DIE in function DECL under SUBR_DIE 17166 for CA_LOC call arg loc node. */ 17167 17168 static dw_die_ref 17169 gen_call_site_die (tree decl, dw_die_ref subr_die, 17170 struct call_arg_loc_node *ca_loc) 17171 { 17172 dw_die_ref stmt_die = NULL, die; 17173 tree block = ca_loc->block; 17174 17175 while (block 17176 && block != DECL_INITIAL (decl) 17177 && TREE_CODE (block) == BLOCK) 17178 { 17179 if (VEC_length (dw_die_ref, block_map) > BLOCK_NUMBER (block)) 17180 stmt_die = VEC_index (dw_die_ref, block_map, BLOCK_NUMBER (block)); 17181 if (stmt_die) 17182 break; 17183 block = BLOCK_SUPERCONTEXT (block); 17184 } 17185 if (stmt_die == NULL) 17186 stmt_die = subr_die; 17187 die = new_die (DW_TAG_GNU_call_site, stmt_die, NULL_TREE); 17188 add_AT_lbl_id (die, DW_AT_low_pc, ca_loc->label); 17189 if (ca_loc->tail_call_p) 17190 add_AT_flag (die, DW_AT_GNU_tail_call, 1); 17191 if (ca_loc->symbol_ref) 17192 { 17193 dw_die_ref tdie = lookup_decl_die (SYMBOL_REF_DECL (ca_loc->symbol_ref)); 17194 if (tdie) 17195 add_AT_die_ref (die, DW_AT_abstract_origin, tdie); 17196 else 17197 add_AT_addr (die, DW_AT_abstract_origin, ca_loc->symbol_ref); 17198 } 17199 return die; 17200 } 17201 17202 /* Generate a DIE to represent a declared function (either file-scope or 17203 block-local). */ 17204 17205 static void 17206 gen_subprogram_die (tree decl, dw_die_ref context_die) 17207 { 17208 tree origin = decl_ultimate_origin (decl); 17209 dw_die_ref subr_die; 17210 tree outer_scope; 17211 dw_die_ref old_die = lookup_decl_die (decl); 17212 int declaration = (current_function_decl != decl 17213 || class_or_namespace_scope_p (context_die)); 17214 17215 premark_used_types (); 17216 17217 /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we 17218 started to generate the abstract instance of an inline, decided to output 17219 its containing class, and proceeded to emit the declaration of the inline 17220 from the member list for the class. If so, DECLARATION takes priority; 17221 we'll get back to the abstract instance when done with the class. */ 17222 17223 /* The class-scope declaration DIE must be the primary DIE. */ 17224 if (origin && declaration && class_or_namespace_scope_p (context_die)) 17225 { 17226 origin = NULL; 17227 gcc_assert (!old_die); 17228 } 17229 17230 /* Now that the C++ front end lazily declares artificial member fns, we 17231 might need to retrofit the declaration into its class. */ 17232 if (!declaration && !origin && !old_die 17233 && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl)) 17234 && !class_or_namespace_scope_p (context_die) 17235 && debug_info_level > DINFO_LEVEL_TERSE) 17236 old_die = force_decl_die (decl); 17237 17238 if (origin != NULL) 17239 { 17240 gcc_assert (!declaration || local_scope_p (context_die)); 17241 17242 /* Fixup die_parent for the abstract instance of a nested 17243 inline function. */ 17244 if (old_die && old_die->die_parent == NULL) 17245 add_child_die (context_die, old_die); 17246 17247 subr_die = new_die (DW_TAG_subprogram, context_die, decl); 17248 add_abstract_origin_attribute (subr_die, origin); 17249 /* This is where the actual code for a cloned function is. 17250 Let's emit linkage name attribute for it. This helps 17251 debuggers to e.g, set breakpoints into 17252 constructors/destructors when the user asks "break 17253 K::K". */ 17254 add_linkage_name (subr_die, decl); 17255 } 17256 else if (old_die) 17257 { 17258 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl)); 17259 struct dwarf_file_data * file_index = lookup_filename (s.file); 17260 17261 if (!get_AT_flag (old_die, DW_AT_declaration) 17262 /* We can have a normal definition following an inline one in the 17263 case of redefinition of GNU C extern inlines. 17264 It seems reasonable to use AT_specification in this case. */ 17265 && !get_AT (old_die, DW_AT_inline)) 17266 { 17267 /* Detect and ignore this case, where we are trying to output 17268 something we have already output. */ 17269 return; 17270 } 17271 17272 /* If the definition comes from the same place as the declaration, 17273 maybe use the old DIE. We always want the DIE for this function 17274 that has the *_pc attributes to be under comp_unit_die so the 17275 debugger can find it. We also need to do this for abstract 17276 instances of inlines, since the spec requires the out-of-line copy 17277 to have the same parent. For local class methods, this doesn't 17278 apply; we just use the old DIE. */ 17279 if ((is_cu_die (old_die->die_parent) || context_die == NULL) 17280 && (DECL_ARTIFICIAL (decl) 17281 || (get_AT_file (old_die, DW_AT_decl_file) == file_index 17282 && (get_AT_unsigned (old_die, DW_AT_decl_line) 17283 == (unsigned) s.line)))) 17284 { 17285 subr_die = old_die; 17286 17287 /* Clear out the declaration attribute and the formal parameters. 17288 Do not remove all children, because it is possible that this 17289 declaration die was forced using force_decl_die(). In such 17290 cases die that forced declaration die (e.g. TAG_imported_module) 17291 is one of the children that we do not want to remove. */ 17292 remove_AT (subr_die, DW_AT_declaration); 17293 remove_AT (subr_die, DW_AT_object_pointer); 17294 remove_child_TAG (subr_die, DW_TAG_formal_parameter); 17295 } 17296 else 17297 { 17298 subr_die = new_die (DW_TAG_subprogram, context_die, decl); 17299 add_AT_specification (subr_die, old_die); 17300 if (get_AT_file (old_die, DW_AT_decl_file) != file_index) 17301 add_AT_file (subr_die, DW_AT_decl_file, file_index); 17302 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line) 17303 add_AT_unsigned (subr_die, DW_AT_decl_line, s.line); 17304 } 17305 } 17306 else 17307 { 17308 subr_die = new_die (DW_TAG_subprogram, context_die, decl); 17309 17310 if (TREE_PUBLIC (decl)) 17311 add_AT_flag (subr_die, DW_AT_external, 1); 17312 17313 add_name_and_src_coords_attributes (subr_die, decl); 17314 if (debug_info_level > DINFO_LEVEL_TERSE) 17315 { 17316 add_prototyped_attribute (subr_die, TREE_TYPE (decl)); 17317 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)), 17318 0, 0, context_die); 17319 } 17320 17321 add_pure_or_virtual_attribute (subr_die, decl); 17322 if (DECL_ARTIFICIAL (decl)) 17323 add_AT_flag (subr_die, DW_AT_artificial, 1); 17324 17325 add_accessibility_attribute (subr_die, decl); 17326 } 17327 17328 if (declaration) 17329 { 17330 if (!old_die || !get_AT (old_die, DW_AT_inline)) 17331 { 17332 add_AT_flag (subr_die, DW_AT_declaration, 1); 17333 17334 /* If this is an explicit function declaration then generate 17335 a DW_AT_explicit attribute. */ 17336 if (lang_hooks.decls.function_decl_explicit_p (decl) 17337 && (dwarf_version >= 3 || !dwarf_strict)) 17338 add_AT_flag (subr_die, DW_AT_explicit, 1); 17339 17340 /* The first time we see a member function, it is in the context of 17341 the class to which it belongs. We make sure of this by emitting 17342 the class first. The next time is the definition, which is 17343 handled above. The two may come from the same source text. 17344 17345 Note that force_decl_die() forces function declaration die. It is 17346 later reused to represent definition. */ 17347 equate_decl_number_to_die (decl, subr_die); 17348 } 17349 } 17350 else if (DECL_ABSTRACT (decl)) 17351 { 17352 if (DECL_DECLARED_INLINE_P (decl)) 17353 { 17354 if (cgraph_function_possibly_inlined_p (decl)) 17355 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined); 17356 else 17357 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined); 17358 } 17359 else 17360 { 17361 if (cgraph_function_possibly_inlined_p (decl)) 17362 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined); 17363 else 17364 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined); 17365 } 17366 17367 if (DECL_DECLARED_INLINE_P (decl) 17368 && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl))) 17369 add_AT_flag (subr_die, DW_AT_artificial, 1); 17370 17371 equate_decl_number_to_die (decl, subr_die); 17372 } 17373 else if (!DECL_EXTERNAL (decl)) 17374 { 17375 HOST_WIDE_INT cfa_fb_offset; 17376 17377 if (!old_die || !get_AT (old_die, DW_AT_inline)) 17378 equate_decl_number_to_die (decl, subr_die); 17379 17380 if (!flag_reorder_blocks_and_partition) 17381 { 17382 dw_fde_ref fde = cfun->fde; 17383 if (fde->dw_fde_begin) 17384 { 17385 /* We have already generated the labels. */ 17386 add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin); 17387 add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end); 17388 } 17389 else 17390 { 17391 /* Create start/end labels and add the range. */ 17392 char label_id[MAX_ARTIFICIAL_LABEL_BYTES]; 17393 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL, 17394 current_function_funcdef_no); 17395 add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id); 17396 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL, 17397 current_function_funcdef_no); 17398 add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id); 17399 } 17400 17401 #if VMS_DEBUGGING_INFO 17402 /* HP OpenVMS Industry Standard 64: DWARF Extensions 17403 Section 2.3 Prologue and Epilogue Attributes: 17404 When a breakpoint is set on entry to a function, it is generally 17405 desirable for execution to be suspended, not on the very first 17406 instruction of the function, but rather at a point after the 17407 function's frame has been set up, after any language defined local 17408 declaration processing has been completed, and before execution of 17409 the first statement of the function begins. Debuggers generally 17410 cannot properly determine where this point is. Similarly for a 17411 breakpoint set on exit from a function. The prologue and epilogue 17412 attributes allow a compiler to communicate the location(s) to use. */ 17413 17414 { 17415 if (fde->dw_fde_vms_end_prologue) 17416 add_AT_vms_delta (subr_die, DW_AT_HP_prologue, 17417 fde->dw_fde_begin, fde->dw_fde_vms_end_prologue); 17418 17419 if (fde->dw_fde_vms_begin_epilogue) 17420 add_AT_vms_delta (subr_die, DW_AT_HP_epilogue, 17421 fde->dw_fde_begin, fde->dw_fde_vms_begin_epilogue); 17422 } 17423 #endif 17424 17425 add_pubname (decl, subr_die); 17426 } 17427 else 17428 { 17429 /* Generate pubnames entries for the split function code ranges. */ 17430 dw_fde_ref fde = cfun->fde; 17431 17432 if (fde->dw_fde_second_begin) 17433 { 17434 if (dwarf_version >= 3 || !dwarf_strict) 17435 { 17436 /* We should use ranges for non-contiguous code section 17437 addresses. Use the actual code range for the initial 17438 section, since the HOT/COLD labels might precede an 17439 alignment offset. */ 17440 bool range_list_added = false; 17441 add_ranges_by_labels (subr_die, fde->dw_fde_begin, 17442 fde->dw_fde_end, &range_list_added); 17443 add_ranges_by_labels (subr_die, fde->dw_fde_second_begin, 17444 fde->dw_fde_second_end, 17445 &range_list_added); 17446 add_pubname (decl, subr_die); 17447 if (range_list_added) 17448 add_ranges (NULL); 17449 } 17450 else 17451 { 17452 /* There is no real support in DW2 for this .. so we make 17453 a work-around. First, emit the pub name for the segment 17454 containing the function label. Then make and emit a 17455 simplified subprogram DIE for the second segment with the 17456 name pre-fixed by __hot/cold_sect_of_. We use the same 17457 linkage name for the second die so that gdb will find both 17458 sections when given "b foo". */ 17459 const char *name = NULL; 17460 tree decl_name = DECL_NAME (decl); 17461 dw_die_ref seg_die; 17462 17463 /* Do the 'primary' section. */ 17464 add_AT_lbl_id (subr_die, DW_AT_low_pc, 17465 fde->dw_fde_begin); 17466 add_AT_lbl_id (subr_die, DW_AT_high_pc, 17467 fde->dw_fde_end); 17468 /* Add it. */ 17469 add_pubname (decl, subr_die); 17470 17471 /* Build a minimal DIE for the secondary section. */ 17472 seg_die = new_die (DW_TAG_subprogram, 17473 subr_die->die_parent, decl); 17474 17475 if (TREE_PUBLIC (decl)) 17476 add_AT_flag (seg_die, DW_AT_external, 1); 17477 17478 if (decl_name != NULL 17479 && IDENTIFIER_POINTER (decl_name) != NULL) 17480 { 17481 name = dwarf2_name (decl, 1); 17482 if (! DECL_ARTIFICIAL (decl)) 17483 add_src_coords_attributes (seg_die, decl); 17484 17485 add_linkage_name (seg_die, decl); 17486 } 17487 gcc_assert (name != NULL); 17488 add_pure_or_virtual_attribute (seg_die, decl); 17489 if (DECL_ARTIFICIAL (decl)) 17490 add_AT_flag (seg_die, DW_AT_artificial, 1); 17491 17492 name = concat ("__second_sect_of_", name, NULL); 17493 add_AT_lbl_id (seg_die, DW_AT_low_pc, 17494 fde->dw_fde_second_begin); 17495 add_AT_lbl_id (seg_die, DW_AT_high_pc, 17496 fde->dw_fde_second_end); 17497 add_name_attribute (seg_die, name); 17498 add_pubname_string (name, seg_die); 17499 } 17500 } 17501 else 17502 { 17503 add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin); 17504 add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end); 17505 add_pubname (decl, subr_die); 17506 } 17507 } 17508 17509 #ifdef MIPS_DEBUGGING_INFO 17510 /* Add a reference to the FDE for this routine. */ 17511 add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, cfun->fde->fde_index); 17512 #endif 17513 17514 cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl); 17515 17516 /* We define the "frame base" as the function's CFA. This is more 17517 convenient for several reasons: (1) It's stable across the prologue 17518 and epilogue, which makes it better than just a frame pointer, 17519 (2) With dwarf3, there exists a one-byte encoding that allows us 17520 to reference the .debug_frame data by proxy, but failing that, 17521 (3) We can at least reuse the code inspection and interpretation 17522 code that determines the CFA position at various points in the 17523 function. */ 17524 if (dwarf_version >= 3) 17525 { 17526 dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0); 17527 add_AT_loc (subr_die, DW_AT_frame_base, op); 17528 } 17529 else 17530 { 17531 dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset); 17532 if (list->dw_loc_next) 17533 add_AT_loc_list (subr_die, DW_AT_frame_base, list); 17534 else 17535 add_AT_loc (subr_die, DW_AT_frame_base, list->expr); 17536 } 17537 17538 /* Compute a displacement from the "steady-state frame pointer" to 17539 the CFA. The former is what all stack slots and argument slots 17540 will reference in the rtl; the later is what we've told the 17541 debugger about. We'll need to adjust all frame_base references 17542 by this displacement. */ 17543 compute_frame_pointer_to_fb_displacement (cfa_fb_offset); 17544 17545 if (cfun->static_chain_decl) 17546 add_AT_location_description (subr_die, DW_AT_static_link, 17547 loc_list_from_tree (cfun->static_chain_decl, 2)); 17548 } 17549 17550 /* Generate child dies for template paramaters. */ 17551 if (debug_info_level > DINFO_LEVEL_TERSE) 17552 gen_generic_params_dies (decl); 17553 17554 /* Now output descriptions of the arguments for this function. This gets 17555 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list 17556 for a FUNCTION_DECL doesn't indicate cases where there was a trailing 17557 `...' at the end of the formal parameter list. In order to find out if 17558 there was a trailing ellipsis or not, we must instead look at the type 17559 associated with the FUNCTION_DECL. This will be a node of type 17560 FUNCTION_TYPE. If the chain of type nodes hanging off of this 17561 FUNCTION_TYPE node ends with a void_type_node then there should *not* be 17562 an ellipsis at the end. */ 17563 17564 /* In the case where we are describing a mere function declaration, all we 17565 need to do here (and all we *can* do here) is to describe the *types* of 17566 its formal parameters. */ 17567 if (debug_info_level <= DINFO_LEVEL_TERSE) 17568 ; 17569 else if (declaration) 17570 gen_formal_types_die (decl, subr_die); 17571 else 17572 { 17573 /* Generate DIEs to represent all known formal parameters. */ 17574 tree parm = DECL_ARGUMENTS (decl); 17575 tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl); 17576 tree generic_decl_parm = generic_decl 17577 ? DECL_ARGUMENTS (generic_decl) 17578 : NULL; 17579 17580 /* Now we want to walk the list of parameters of the function and 17581 emit their relevant DIEs. 17582 17583 We consider the case of DECL being an instance of a generic function 17584 as well as it being a normal function. 17585 17586 If DECL is an instance of a generic function we walk the 17587 parameters of the generic function declaration _and_ the parameters of 17588 DECL itself. This is useful because we want to emit specific DIEs for 17589 function parameter packs and those are declared as part of the 17590 generic function declaration. In that particular case, 17591 the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE. 17592 That DIE has children DIEs representing the set of arguments 17593 of the pack. Note that the set of pack arguments can be empty. 17594 In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any 17595 children DIE. 17596 17597 Otherwise, we just consider the parameters of DECL. */ 17598 while (generic_decl_parm || parm) 17599 { 17600 if (generic_decl_parm 17601 && lang_hooks.function_parameter_pack_p (generic_decl_parm)) 17602 gen_formal_parameter_pack_die (generic_decl_parm, 17603 parm, subr_die, 17604 &parm); 17605 else if (parm) 17606 { 17607 dw_die_ref parm_die = gen_decl_die (parm, NULL, subr_die); 17608 17609 if (parm == DECL_ARGUMENTS (decl) 17610 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE 17611 && parm_die 17612 && (dwarf_version >= 3 || !dwarf_strict)) 17613 add_AT_die_ref (subr_die, DW_AT_object_pointer, parm_die); 17614 17615 parm = DECL_CHAIN (parm); 17616 } 17617 17618 if (generic_decl_parm) 17619 generic_decl_parm = DECL_CHAIN (generic_decl_parm); 17620 } 17621 17622 /* Decide whether we need an unspecified_parameters DIE at the end. 17623 There are 2 more cases to do this for: 1) the ansi ... declaration - 17624 this is detectable when the end of the arg list is not a 17625 void_type_node 2) an unprototyped function declaration (not a 17626 definition). This just means that we have no info about the 17627 parameters at all. */ 17628 if (prototype_p (TREE_TYPE (decl))) 17629 { 17630 /* This is the prototyped case, check for.... */ 17631 if (stdarg_p (TREE_TYPE (decl))) 17632 gen_unspecified_parameters_die (decl, subr_die); 17633 } 17634 else if (DECL_INITIAL (decl) == NULL_TREE) 17635 gen_unspecified_parameters_die (decl, subr_die); 17636 } 17637 17638 /* Output Dwarf info for all of the stuff within the body of the function 17639 (if it has one - it may be just a declaration). */ 17640 outer_scope = DECL_INITIAL (decl); 17641 17642 /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent 17643 a function. This BLOCK actually represents the outermost binding contour 17644 for the function, i.e. the contour in which the function's formal 17645 parameters and labels get declared. Curiously, it appears that the front 17646 end doesn't actually put the PARM_DECL nodes for the current function onto 17647 the BLOCK_VARS list for this outer scope, but are strung off of the 17648 DECL_ARGUMENTS list for the function instead. 17649 17650 The BLOCK_VARS list for the `outer_scope' does provide us with a list of 17651 the LABEL_DECL nodes for the function however, and we output DWARF info 17652 for those in decls_for_scope. Just within the `outer_scope' there will be 17653 a BLOCK node representing the function's outermost pair of curly braces, 17654 and any blocks used for the base and member initializers of a C++ 17655 constructor function. */ 17656 if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK) 17657 { 17658 int call_site_note_count = 0; 17659 int tail_call_site_note_count = 0; 17660 17661 /* Emit a DW_TAG_variable DIE for a named return value. */ 17662 if (DECL_NAME (DECL_RESULT (decl))) 17663 gen_decl_die (DECL_RESULT (decl), NULL, subr_die); 17664 17665 current_function_has_inlines = 0; 17666 decls_for_scope (outer_scope, subr_die, 0); 17667 17668 if (call_arg_locations && !dwarf_strict) 17669 { 17670 struct call_arg_loc_node *ca_loc; 17671 for (ca_loc = call_arg_locations; ca_loc; ca_loc = ca_loc->next) 17672 { 17673 dw_die_ref die = NULL; 17674 rtx tloc = NULL_RTX, tlocc = NULL_RTX; 17675 rtx arg, next_arg; 17676 17677 for (arg = NOTE_VAR_LOCATION (ca_loc->call_arg_loc_note); 17678 arg; arg = next_arg) 17679 { 17680 dw_loc_descr_ref reg, val; 17681 enum machine_mode mode = GET_MODE (XEXP (XEXP (arg, 0), 1)); 17682 dw_die_ref cdie, tdie = NULL; 17683 17684 next_arg = XEXP (arg, 1); 17685 if (REG_P (XEXP (XEXP (arg, 0), 0)) 17686 && next_arg 17687 && MEM_P (XEXP (XEXP (next_arg, 0), 0)) 17688 && REG_P (XEXP (XEXP (XEXP (next_arg, 0), 0), 0)) 17689 && REGNO (XEXP (XEXP (arg, 0), 0)) 17690 == REGNO (XEXP (XEXP (XEXP (next_arg, 0), 0), 0))) 17691 next_arg = XEXP (next_arg, 1); 17692 if (mode == VOIDmode) 17693 { 17694 mode = GET_MODE (XEXP (XEXP (arg, 0), 0)); 17695 if (mode == VOIDmode) 17696 mode = GET_MODE (XEXP (arg, 0)); 17697 } 17698 if (mode == VOIDmode || mode == BLKmode) 17699 continue; 17700 if (XEXP (XEXP (arg, 0), 0) == pc_rtx) 17701 { 17702 gcc_assert (ca_loc->symbol_ref == NULL_RTX); 17703 tloc = XEXP (XEXP (arg, 0), 1); 17704 continue; 17705 } 17706 else if (GET_CODE (XEXP (XEXP (arg, 0), 0)) == CLOBBER 17707 && XEXP (XEXP (XEXP (arg, 0), 0), 0) == pc_rtx) 17708 { 17709 gcc_assert (ca_loc->symbol_ref == NULL_RTX); 17710 tlocc = XEXP (XEXP (arg, 0), 1); 17711 continue; 17712 } 17713 reg = NULL; 17714 if (REG_P (XEXP (XEXP (arg, 0), 0))) 17715 reg = reg_loc_descriptor (XEXP (XEXP (arg, 0), 0), 17716 VAR_INIT_STATUS_INITIALIZED); 17717 else if (MEM_P (XEXP (XEXP (arg, 0), 0))) 17718 { 17719 rtx mem = XEXP (XEXP (arg, 0), 0); 17720 reg = mem_loc_descriptor (XEXP (mem, 0), 17721 get_address_mode (mem), 17722 GET_MODE (mem), 17723 VAR_INIT_STATUS_INITIALIZED); 17724 } 17725 else if (GET_CODE (XEXP (XEXP (arg, 0), 0)) 17726 == DEBUG_PARAMETER_REF) 17727 { 17728 tree tdecl 17729 = DEBUG_PARAMETER_REF_DECL (XEXP (XEXP (arg, 0), 0)); 17730 tdie = lookup_decl_die (tdecl); 17731 if (tdie == NULL) 17732 continue; 17733 } 17734 else 17735 continue; 17736 if (reg == NULL 17737 && GET_CODE (XEXP (XEXP (arg, 0), 0)) 17738 != DEBUG_PARAMETER_REF) 17739 continue; 17740 val = mem_loc_descriptor (XEXP (XEXP (arg, 0), 1), mode, 17741 VOIDmode, 17742 VAR_INIT_STATUS_INITIALIZED); 17743 if (val == NULL) 17744 continue; 17745 if (die == NULL) 17746 die = gen_call_site_die (decl, subr_die, ca_loc); 17747 cdie = new_die (DW_TAG_GNU_call_site_parameter, die, 17748 NULL_TREE); 17749 if (reg != NULL) 17750 add_AT_loc (cdie, DW_AT_location, reg); 17751 else if (tdie != NULL) 17752 add_AT_die_ref (cdie, DW_AT_abstract_origin, tdie); 17753 add_AT_loc (cdie, DW_AT_GNU_call_site_value, val); 17754 if (next_arg != XEXP (arg, 1)) 17755 { 17756 mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 1)); 17757 if (mode == VOIDmode) 17758 mode = GET_MODE (XEXP (XEXP (XEXP (arg, 1), 0), 0)); 17759 val = mem_loc_descriptor (XEXP (XEXP (XEXP (arg, 1), 17760 0), 1), 17761 mode, VOIDmode, 17762 VAR_INIT_STATUS_INITIALIZED); 17763 if (val != NULL) 17764 add_AT_loc (cdie, DW_AT_GNU_call_site_data_value, val); 17765 } 17766 } 17767 if (die == NULL 17768 && (ca_loc->symbol_ref || tloc)) 17769 die = gen_call_site_die (decl, subr_die, ca_loc); 17770 if (die != NULL && (tloc != NULL_RTX || tlocc != NULL_RTX)) 17771 { 17772 dw_loc_descr_ref tval = NULL; 17773 17774 if (tloc != NULL_RTX) 17775 tval = mem_loc_descriptor (tloc, 17776 GET_MODE (tloc) == VOIDmode 17777 ? Pmode : GET_MODE (tloc), 17778 VOIDmode, 17779 VAR_INIT_STATUS_INITIALIZED); 17780 if (tval) 17781 add_AT_loc (die, DW_AT_GNU_call_site_target, tval); 17782 else if (tlocc != NULL_RTX) 17783 { 17784 tval = mem_loc_descriptor (tlocc, 17785 GET_MODE (tlocc) == VOIDmode 17786 ? Pmode : GET_MODE (tlocc), 17787 VOIDmode, 17788 VAR_INIT_STATUS_INITIALIZED); 17789 if (tval) 17790 add_AT_loc (die, DW_AT_GNU_call_site_target_clobbered, 17791 tval); 17792 } 17793 } 17794 if (die != NULL) 17795 { 17796 call_site_note_count++; 17797 if (ca_loc->tail_call_p) 17798 tail_call_site_note_count++; 17799 } 17800 } 17801 } 17802 call_arg_locations = NULL; 17803 call_arg_loc_last = NULL; 17804 if (tail_call_site_count >= 0 17805 && tail_call_site_count == tail_call_site_note_count 17806 && !dwarf_strict) 17807 { 17808 if (call_site_count >= 0 17809 && call_site_count == call_site_note_count) 17810 add_AT_flag (subr_die, DW_AT_GNU_all_call_sites, 1); 17811 else 17812 add_AT_flag (subr_die, DW_AT_GNU_all_tail_call_sites, 1); 17813 } 17814 call_site_count = -1; 17815 tail_call_site_count = -1; 17816 } 17817 /* Add the calling convention attribute if requested. */ 17818 add_calling_convention_attribute (subr_die, decl); 17819 17820 } 17821 17822 /* Returns a hash value for X (which really is a die_struct). */ 17823 17824 static hashval_t 17825 common_block_die_table_hash (const void *x) 17826 { 17827 const_dw_die_ref d = (const_dw_die_ref) x; 17828 return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent); 17829 } 17830 17831 /* Return nonzero if decl_id and die_parent of die_struct X is the same 17832 as decl_id and die_parent of die_struct Y. */ 17833 17834 static int 17835 common_block_die_table_eq (const void *x, const void *y) 17836 { 17837 const_dw_die_ref d = (const_dw_die_ref) x; 17838 const_dw_die_ref e = (const_dw_die_ref) y; 17839 return d->decl_id == e->decl_id && d->die_parent == e->die_parent; 17840 } 17841 17842 /* Generate a DIE to represent a declared data object. 17843 Either DECL or ORIGIN must be non-null. */ 17844 17845 static void 17846 gen_variable_die (tree decl, tree origin, dw_die_ref context_die) 17847 { 17848 HOST_WIDE_INT off; 17849 tree com_decl; 17850 tree decl_or_origin = decl ? decl : origin; 17851 tree ultimate_origin; 17852 dw_die_ref var_die; 17853 dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL; 17854 dw_die_ref origin_die; 17855 bool declaration = (DECL_EXTERNAL (decl_or_origin) 17856 || class_or_namespace_scope_p (context_die)); 17857 bool specialization_p = false; 17858 17859 ultimate_origin = decl_ultimate_origin (decl_or_origin); 17860 if (decl || ultimate_origin) 17861 origin = ultimate_origin; 17862 com_decl = fortran_common (decl_or_origin, &off); 17863 17864 /* Symbol in common gets emitted as a child of the common block, in the form 17865 of a data member. */ 17866 if (com_decl) 17867 { 17868 dw_die_ref com_die; 17869 dw_loc_list_ref loc; 17870 die_node com_die_arg; 17871 17872 var_die = lookup_decl_die (decl_or_origin); 17873 if (var_die) 17874 { 17875 if (get_AT (var_die, DW_AT_location) == NULL) 17876 { 17877 loc = loc_list_from_tree (com_decl, off ? 1 : 2); 17878 if (loc) 17879 { 17880 if (off) 17881 { 17882 /* Optimize the common case. */ 17883 if (single_element_loc_list_p (loc) 17884 && loc->expr->dw_loc_opc == DW_OP_addr 17885 && loc->expr->dw_loc_next == NULL 17886 && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) 17887 == SYMBOL_REF) 17888 loc->expr->dw_loc_oprnd1.v.val_addr 17889 = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off); 17890 else 17891 loc_list_plus_const (loc, off); 17892 } 17893 add_AT_location_description (var_die, DW_AT_location, loc); 17894 remove_AT (var_die, DW_AT_declaration); 17895 } 17896 } 17897 return; 17898 } 17899 17900 if (common_block_die_table == NULL) 17901 common_block_die_table 17902 = htab_create_ggc (10, common_block_die_table_hash, 17903 common_block_die_table_eq, NULL); 17904 17905 com_die_arg.decl_id = DECL_UID (com_decl); 17906 com_die_arg.die_parent = context_die; 17907 com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg); 17908 loc = loc_list_from_tree (com_decl, 2); 17909 if (com_die == NULL) 17910 { 17911 const char *cnam 17912 = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl)); 17913 void **slot; 17914 17915 com_die = new_die (DW_TAG_common_block, context_die, decl); 17916 add_name_and_src_coords_attributes (com_die, com_decl); 17917 if (loc) 17918 { 17919 add_AT_location_description (com_die, DW_AT_location, loc); 17920 /* Avoid sharing the same loc descriptor between 17921 DW_TAG_common_block and DW_TAG_variable. */ 17922 loc = loc_list_from_tree (com_decl, 2); 17923 } 17924 else if (DECL_EXTERNAL (decl)) 17925 add_AT_flag (com_die, DW_AT_declaration, 1); 17926 add_pubname_string (cnam, com_die); /* ??? needed? */ 17927 com_die->decl_id = DECL_UID (com_decl); 17928 slot = htab_find_slot (common_block_die_table, com_die, INSERT); 17929 *slot = (void *) com_die; 17930 } 17931 else if (get_AT (com_die, DW_AT_location) == NULL && loc) 17932 { 17933 add_AT_location_description (com_die, DW_AT_location, loc); 17934 loc = loc_list_from_tree (com_decl, 2); 17935 remove_AT (com_die, DW_AT_declaration); 17936 } 17937 var_die = new_die (DW_TAG_variable, com_die, decl); 17938 add_name_and_src_coords_attributes (var_die, decl); 17939 add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl), 17940 TREE_THIS_VOLATILE (decl), context_die); 17941 add_AT_flag (var_die, DW_AT_external, 1); 17942 if (loc) 17943 { 17944 if (off) 17945 { 17946 /* Optimize the common case. */ 17947 if (single_element_loc_list_p (loc) 17948 && loc->expr->dw_loc_opc == DW_OP_addr 17949 && loc->expr->dw_loc_next == NULL 17950 && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF) 17951 loc->expr->dw_loc_oprnd1.v.val_addr 17952 = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off); 17953 else 17954 loc_list_plus_const (loc, off); 17955 } 17956 add_AT_location_description (var_die, DW_AT_location, loc); 17957 } 17958 else if (DECL_EXTERNAL (decl)) 17959 add_AT_flag (var_die, DW_AT_declaration, 1); 17960 equate_decl_number_to_die (decl, var_die); 17961 return; 17962 } 17963 17964 /* If the compiler emitted a definition for the DECL declaration 17965 and if we already emitted a DIE for it, don't emit a second 17966 DIE for it again. Allow re-declarations of DECLs that are 17967 inside functions, though. */ 17968 if (old_die && declaration && !local_scope_p (context_die)) 17969 return; 17970 17971 /* For static data members, the declaration in the class is supposed 17972 to have DW_TAG_member tag; the specification should still be 17973 DW_TAG_variable referencing the DW_TAG_member DIE. */ 17974 if (declaration && class_scope_p (context_die)) 17975 var_die = new_die (DW_TAG_member, context_die, decl); 17976 else 17977 var_die = new_die (DW_TAG_variable, context_die, decl); 17978 17979 origin_die = NULL; 17980 if (origin != NULL) 17981 origin_die = add_abstract_origin_attribute (var_die, origin); 17982 17983 /* Loop unrolling can create multiple blocks that refer to the same 17984 static variable, so we must test for the DW_AT_declaration flag. 17985 17986 ??? Loop unrolling/reorder_blocks should perhaps be rewritten to 17987 copy decls and set the DECL_ABSTRACT flag on them instead of 17988 sharing them. 17989 17990 ??? Duplicated blocks have been rewritten to use .debug_ranges. 17991 17992 ??? The declare_in_namespace support causes us to get two DIEs for one 17993 variable, both of which are declarations. We want to avoid considering 17994 one to be a specification, so we must test that this DIE is not a 17995 declaration. */ 17996 else if (old_die && TREE_STATIC (decl) && ! declaration 17997 && get_AT_flag (old_die, DW_AT_declaration) == 1) 17998 { 17999 /* This is a definition of a C++ class level static. */ 18000 add_AT_specification (var_die, old_die); 18001 specialization_p = true; 18002 if (DECL_NAME (decl)) 18003 { 18004 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl)); 18005 struct dwarf_file_data * file_index = lookup_filename (s.file); 18006 18007 if (get_AT_file (old_die, DW_AT_decl_file) != file_index) 18008 add_AT_file (var_die, DW_AT_decl_file, file_index); 18009 18010 if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line) 18011 add_AT_unsigned (var_die, DW_AT_decl_line, s.line); 18012 18013 if (old_die->die_tag == DW_TAG_member) 18014 add_linkage_name (var_die, decl); 18015 } 18016 } 18017 else 18018 add_name_and_src_coords_attributes (var_die, decl); 18019 18020 if ((origin == NULL && !specialization_p) 18021 || (origin != NULL 18022 && !DECL_ABSTRACT (decl_or_origin) 18023 && variably_modified_type_p (TREE_TYPE (decl_or_origin), 18024 decl_function_context 18025 (decl_or_origin)))) 18026 { 18027 tree type = TREE_TYPE (decl_or_origin); 18028 18029 if (decl_by_reference_p (decl_or_origin)) 18030 add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die); 18031 else 18032 add_type_attribute (var_die, type, TREE_READONLY (decl_or_origin), 18033 TREE_THIS_VOLATILE (decl_or_origin), context_die); 18034 } 18035 18036 if (origin == NULL && !specialization_p) 18037 { 18038 if (TREE_PUBLIC (decl)) 18039 add_AT_flag (var_die, DW_AT_external, 1); 18040 18041 if (DECL_ARTIFICIAL (decl)) 18042 add_AT_flag (var_die, DW_AT_artificial, 1); 18043 18044 add_accessibility_attribute (var_die, decl); 18045 } 18046 18047 if (declaration) 18048 add_AT_flag (var_die, DW_AT_declaration, 1); 18049 18050 if (decl && (DECL_ABSTRACT (decl) || declaration || old_die == NULL)) 18051 equate_decl_number_to_die (decl, var_die); 18052 18053 if (! declaration 18054 && (! DECL_ABSTRACT (decl_or_origin) 18055 /* Local static vars are shared between all clones/inlines, 18056 so emit DW_AT_location on the abstract DIE if DECL_RTL is 18057 already set. */ 18058 || (TREE_CODE (decl_or_origin) == VAR_DECL 18059 && TREE_STATIC (decl_or_origin) 18060 && DECL_RTL_SET_P (decl_or_origin))) 18061 /* When abstract origin already has DW_AT_location attribute, no need 18062 to add it again. */ 18063 && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL)) 18064 { 18065 if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin) 18066 && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin))) 18067 defer_location (decl_or_origin, var_die); 18068 else 18069 add_location_or_const_value_attribute (var_die, decl_or_origin, 18070 decl == NULL, DW_AT_location); 18071 add_pubname (decl_or_origin, var_die); 18072 } 18073 else 18074 tree_add_const_value_attribute_for_decl (var_die, decl_or_origin); 18075 } 18076 18077 /* Generate a DIE to represent a named constant. */ 18078 18079 static void 18080 gen_const_die (tree decl, dw_die_ref context_die) 18081 { 18082 dw_die_ref const_die; 18083 tree type = TREE_TYPE (decl); 18084 18085 const_die = new_die (DW_TAG_constant, context_die, decl); 18086 add_name_and_src_coords_attributes (const_die, decl); 18087 add_type_attribute (const_die, type, 1, 0, context_die); 18088 if (TREE_PUBLIC (decl)) 18089 add_AT_flag (const_die, DW_AT_external, 1); 18090 if (DECL_ARTIFICIAL (decl)) 18091 add_AT_flag (const_die, DW_AT_artificial, 1); 18092 tree_add_const_value_attribute_for_decl (const_die, decl); 18093 } 18094 18095 /* Generate a DIE to represent a label identifier. */ 18096 18097 static void 18098 gen_label_die (tree decl, dw_die_ref context_die) 18099 { 18100 tree origin = decl_ultimate_origin (decl); 18101 dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl); 18102 rtx insn; 18103 char label[MAX_ARTIFICIAL_LABEL_BYTES]; 18104 18105 if (origin != NULL) 18106 add_abstract_origin_attribute (lbl_die, origin); 18107 else 18108 add_name_and_src_coords_attributes (lbl_die, decl); 18109 18110 if (DECL_ABSTRACT (decl)) 18111 equate_decl_number_to_die (decl, lbl_die); 18112 else 18113 { 18114 insn = DECL_RTL_IF_SET (decl); 18115 18116 /* Deleted labels are programmer specified labels which have been 18117 eliminated because of various optimizations. We still emit them 18118 here so that it is possible to put breakpoints on them. */ 18119 if (insn 18120 && (LABEL_P (insn) 18121 || ((NOTE_P (insn) 18122 && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL)))) 18123 { 18124 /* When optimization is enabled (via -O) some parts of the compiler 18125 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which 18126 represent source-level labels which were explicitly declared by 18127 the user. This really shouldn't be happening though, so catch 18128 it if it ever does happen. */ 18129 gcc_assert (!INSN_DELETED_P (insn)); 18130 18131 ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn)); 18132 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label); 18133 } 18134 else if (insn 18135 && NOTE_P (insn) 18136 && NOTE_KIND (insn) == NOTE_INSN_DELETED_DEBUG_LABEL 18137 && CODE_LABEL_NUMBER (insn) != -1) 18138 { 18139 ASM_GENERATE_INTERNAL_LABEL (label, "LDL", CODE_LABEL_NUMBER (insn)); 18140 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label); 18141 } 18142 } 18143 } 18144 18145 /* A helper function for gen_inlined_subroutine_die. Add source coordinate 18146 attributes to the DIE for a block STMT, to describe where the inlined 18147 function was called from. This is similar to add_src_coords_attributes. */ 18148 18149 static inline void 18150 add_call_src_coords_attributes (tree stmt, dw_die_ref die) 18151 { 18152 expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt)); 18153 18154 if (dwarf_version >= 3 || !dwarf_strict) 18155 { 18156 add_AT_file (die, DW_AT_call_file, lookup_filename (s.file)); 18157 add_AT_unsigned (die, DW_AT_call_line, s.line); 18158 } 18159 } 18160 18161 18162 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die. 18163 Add low_pc and high_pc attributes to the DIE for a block STMT. */ 18164 18165 static inline void 18166 add_high_low_attributes (tree stmt, dw_die_ref die) 18167 { 18168 char label[MAX_ARTIFICIAL_LABEL_BYTES]; 18169 18170 if (BLOCK_FRAGMENT_CHAIN (stmt) 18171 && (dwarf_version >= 3 || !dwarf_strict)) 18172 { 18173 tree chain; 18174 18175 if (inlined_function_outer_scope_p (stmt)) 18176 { 18177 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL, 18178 BLOCK_NUMBER (stmt)); 18179 add_AT_lbl_id (die, DW_AT_entry_pc, label); 18180 } 18181 18182 add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt)); 18183 18184 chain = BLOCK_FRAGMENT_CHAIN (stmt); 18185 do 18186 { 18187 add_ranges (chain); 18188 chain = BLOCK_FRAGMENT_CHAIN (chain); 18189 } 18190 while (chain); 18191 add_ranges (NULL); 18192 } 18193 else 18194 { 18195 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL, 18196 BLOCK_NUMBER (stmt)); 18197 add_AT_lbl_id (die, DW_AT_low_pc, label); 18198 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL, 18199 BLOCK_NUMBER (stmt)); 18200 add_AT_lbl_id (die, DW_AT_high_pc, label); 18201 } 18202 } 18203 18204 /* Generate a DIE for a lexical block. */ 18205 18206 static void 18207 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth) 18208 { 18209 dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt); 18210 18211 if (call_arg_locations) 18212 { 18213 if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt)) 18214 VEC_safe_grow_cleared (dw_die_ref, heap, block_map, 18215 BLOCK_NUMBER (stmt) + 1); 18216 VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), stmt_die); 18217 } 18218 18219 if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt)) 18220 add_high_low_attributes (stmt, stmt_die); 18221 18222 decls_for_scope (stmt, stmt_die, depth); 18223 } 18224 18225 /* Generate a DIE for an inlined subprogram. */ 18226 18227 static void 18228 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth) 18229 { 18230 tree decl; 18231 18232 /* The instance of function that is effectively being inlined shall not 18233 be abstract. */ 18234 gcc_assert (! BLOCK_ABSTRACT (stmt)); 18235 18236 decl = block_ultimate_origin (stmt); 18237 18238 /* Emit info for the abstract instance first, if we haven't yet. We 18239 must emit this even if the block is abstract, otherwise when we 18240 emit the block below (or elsewhere), we may end up trying to emit 18241 a die whose origin die hasn't been emitted, and crashing. */ 18242 dwarf2out_abstract_function (decl); 18243 18244 if (! BLOCK_ABSTRACT (stmt)) 18245 { 18246 dw_die_ref subr_die 18247 = new_die (DW_TAG_inlined_subroutine, context_die, stmt); 18248 18249 if (call_arg_locations) 18250 { 18251 if (VEC_length (dw_die_ref, block_map) <= BLOCK_NUMBER (stmt)) 18252 VEC_safe_grow_cleared (dw_die_ref, heap, block_map, 18253 BLOCK_NUMBER (stmt) + 1); 18254 VEC_replace (dw_die_ref, block_map, BLOCK_NUMBER (stmt), subr_die); 18255 } 18256 add_abstract_origin_attribute (subr_die, decl); 18257 if (TREE_ASM_WRITTEN (stmt)) 18258 add_high_low_attributes (stmt, subr_die); 18259 add_call_src_coords_attributes (stmt, subr_die); 18260 18261 decls_for_scope (stmt, subr_die, depth); 18262 current_function_has_inlines = 1; 18263 } 18264 } 18265 18266 /* Generate a DIE for a field in a record, or structure. */ 18267 18268 static void 18269 gen_field_die (tree decl, dw_die_ref context_die) 18270 { 18271 dw_die_ref decl_die; 18272 18273 if (TREE_TYPE (decl) == error_mark_node) 18274 return; 18275 18276 decl_die = new_die (DW_TAG_member, context_die, decl); 18277 add_name_and_src_coords_attributes (decl_die, decl); 18278 add_type_attribute (decl_die, member_declared_type (decl), 18279 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl), 18280 context_die); 18281 18282 if (DECL_BIT_FIELD_TYPE (decl)) 18283 { 18284 add_byte_size_attribute (decl_die, decl); 18285 add_bit_size_attribute (decl_die, decl); 18286 add_bit_offset_attribute (decl_die, decl); 18287 } 18288 18289 if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE) 18290 add_data_member_location_attribute (decl_die, decl); 18291 18292 if (DECL_ARTIFICIAL (decl)) 18293 add_AT_flag (decl_die, DW_AT_artificial, 1); 18294 18295 add_accessibility_attribute (decl_die, decl); 18296 18297 /* Equate decl number to die, so that we can look up this decl later on. */ 18298 equate_decl_number_to_die (decl, decl_die); 18299 } 18300 18301 #if 0 18302 /* Don't generate either pointer_type DIEs or reference_type DIEs here. 18303 Use modified_type_die instead. 18304 We keep this code here just in case these types of DIEs may be needed to 18305 represent certain things in other languages (e.g. Pascal) someday. */ 18306 18307 static void 18308 gen_pointer_type_die (tree type, dw_die_ref context_die) 18309 { 18310 dw_die_ref ptr_die 18311 = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type); 18312 18313 equate_type_number_to_die (type, ptr_die); 18314 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die); 18315 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE); 18316 } 18317 18318 /* Don't generate either pointer_type DIEs or reference_type DIEs here. 18319 Use modified_type_die instead. 18320 We keep this code here just in case these types of DIEs may be needed to 18321 represent certain things in other languages (e.g. Pascal) someday. */ 18322 18323 static void 18324 gen_reference_type_die (tree type, dw_die_ref context_die) 18325 { 18326 dw_die_ref ref_die, scope_die = scope_die_for (type, context_die); 18327 18328 if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4) 18329 ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type); 18330 else 18331 ref_die = new_die (DW_TAG_reference_type, scope_die, type); 18332 18333 equate_type_number_to_die (type, ref_die); 18334 add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die); 18335 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE); 18336 } 18337 #endif 18338 18339 /* Generate a DIE for a pointer to a member type. */ 18340 18341 static void 18342 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die) 18343 { 18344 dw_die_ref ptr_die 18345 = new_die (DW_TAG_ptr_to_member_type, 18346 scope_die_for (type, context_die), type); 18347 18348 equate_type_number_to_die (type, ptr_die); 18349 add_AT_die_ref (ptr_die, DW_AT_containing_type, 18350 lookup_type_die (TYPE_OFFSET_BASETYPE (type))); 18351 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die); 18352 } 18353 18354 typedef const char *dchar_p; /* For DEF_VEC_P. */ 18355 DEF_VEC_P(dchar_p); 18356 DEF_VEC_ALLOC_P(dchar_p,heap); 18357 18358 static char *producer_string; 18359 18360 /* Return a heap allocated producer string including command line options 18361 if -grecord-gcc-switches. */ 18362 18363 static char * 18364 gen_producer_string (void) 18365 { 18366 size_t j; 18367 VEC(dchar_p, heap) *switches = NULL; 18368 const char *language_string = lang_hooks.name; 18369 char *producer, *tail; 18370 const char *p; 18371 size_t len = dwarf_record_gcc_switches ? 0 : 3; 18372 size_t plen = strlen (language_string) + 1 + strlen (version_string); 18373 18374 for (j = 1; dwarf_record_gcc_switches && j < save_decoded_options_count; j++) 18375 switch (save_decoded_options[j].opt_index) 18376 { 18377 case OPT_o: 18378 case OPT_d: 18379 case OPT_dumpbase: 18380 case OPT_dumpdir: 18381 case OPT_auxbase: 18382 case OPT_auxbase_strip: 18383 case OPT_quiet: 18384 case OPT_version: 18385 case OPT_v: 18386 case OPT_w: 18387 case OPT_L: 18388 case OPT_D: 18389 case OPT_I: 18390 case OPT_U: 18391 case OPT_SPECIAL_unknown: 18392 case OPT_SPECIAL_ignore: 18393 case OPT_SPECIAL_program_name: 18394 case OPT_SPECIAL_input_file: 18395 case OPT_grecord_gcc_switches: 18396 case OPT_gno_record_gcc_switches: 18397 case OPT__output_pch_: 18398 case OPT_fdiagnostics_show_location_: 18399 case OPT_fdiagnostics_show_option: 18400 case OPT_fverbose_asm: 18401 case OPT____: 18402 case OPT__sysroot_: 18403 case OPT_nostdinc: 18404 case OPT_nostdinc__: 18405 /* Ignore these. */ 18406 continue; 18407 default: 18408 gcc_checking_assert (save_decoded_options[j].canonical_option[0][0] 18409 == '-'); 18410 switch (save_decoded_options[j].canonical_option[0][1]) 18411 { 18412 case 'M': 18413 case 'i': 18414 case 'W': 18415 continue; 18416 case 'f': 18417 if (strncmp (save_decoded_options[j].canonical_option[0] + 2, 18418 "dump", 4) == 0) 18419 continue; 18420 break; 18421 default: 18422 break; 18423 } 18424 VEC_safe_push (dchar_p, heap, switches, 18425 save_decoded_options[j].orig_option_with_args_text); 18426 len += strlen (save_decoded_options[j].orig_option_with_args_text) + 1; 18427 break; 18428 } 18429 18430 producer = XNEWVEC (char, plen + 1 + len + 1); 18431 tail = producer; 18432 sprintf (tail, "%s %s", language_string, version_string); 18433 tail += plen; 18434 18435 if (!dwarf_record_gcc_switches) 18436 { 18437 #ifdef MIPS_DEBUGGING_INFO 18438 /* The MIPS/SGI compilers place the 'cc' command line options in the 18439 producer string. The SGI debugger looks for -g, -g1, -g2, or -g3; 18440 if they do not appear in the producer string, the debugger reaches 18441 the conclusion that the object file is stripped and has no debugging 18442 information. To get the MIPS/SGI debugger to believe that there is 18443 debugging information in the object file, we add a -g to the producer 18444 string. */ 18445 if (debug_info_level > DINFO_LEVEL_TERSE) 18446 { 18447 memcpy (tail, " -g", 3); 18448 tail += 3; 18449 } 18450 #endif 18451 } 18452 18453 FOR_EACH_VEC_ELT (dchar_p, switches, j, p) 18454 { 18455 len = strlen (p); 18456 *tail = ' '; 18457 memcpy (tail + 1, p, len); 18458 tail += len + 1; 18459 } 18460 18461 *tail = '\0'; 18462 VEC_free (dchar_p, heap, switches); 18463 return producer; 18464 } 18465 18466 /* Generate the DIE for the compilation unit. */ 18467 18468 static dw_die_ref 18469 gen_compile_unit_die (const char *filename) 18470 { 18471 dw_die_ref die; 18472 const char *language_string = lang_hooks.name; 18473 int language; 18474 18475 die = new_die (DW_TAG_compile_unit, NULL, NULL); 18476 18477 if (filename) 18478 { 18479 add_name_attribute (die, filename); 18480 /* Don't add cwd for <built-in>. */ 18481 if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<') 18482 add_comp_dir_attribute (die); 18483 } 18484 18485 if (producer_string == NULL) 18486 producer_string = gen_producer_string (); 18487 add_AT_string (die, DW_AT_producer, producer_string); 18488 18489 /* If our producer is LTO try to figure out a common language to use 18490 from the global list of translation units. */ 18491 if (strcmp (language_string, "GNU GIMPLE") == 0) 18492 { 18493 unsigned i; 18494 tree t; 18495 const char *common_lang = NULL; 18496 18497 FOR_EACH_VEC_ELT (tree, all_translation_units, i, t) 18498 { 18499 if (!TRANSLATION_UNIT_LANGUAGE (t)) 18500 continue; 18501 if (!common_lang) 18502 common_lang = TRANSLATION_UNIT_LANGUAGE (t); 18503 else if (strcmp (common_lang, TRANSLATION_UNIT_LANGUAGE (t)) == 0) 18504 ; 18505 else if (strncmp (common_lang, "GNU C", 5) == 0 18506 && strncmp (TRANSLATION_UNIT_LANGUAGE (t), "GNU C", 5) == 0) 18507 /* Mixing C and C++ is ok, use C++ in that case. */ 18508 common_lang = "GNU C++"; 18509 else 18510 { 18511 /* Fall back to C. */ 18512 common_lang = NULL; 18513 break; 18514 } 18515 } 18516 18517 if (common_lang) 18518 language_string = common_lang; 18519 } 18520 18521 language = DW_LANG_C89; 18522 if (strcmp (language_string, "GNU C++") == 0) 18523 language = DW_LANG_C_plus_plus; 18524 else if (strcmp (language_string, "GNU F77") == 0) 18525 language = DW_LANG_Fortran77; 18526 else if (strcmp (language_string, "GNU Pascal") == 0) 18527 language = DW_LANG_Pascal83; 18528 else if (dwarf_version >= 3 || !dwarf_strict) 18529 { 18530 if (strcmp (language_string, "GNU Ada") == 0) 18531 language = DW_LANG_Ada95; 18532 else if (strcmp (language_string, "GNU Fortran") == 0) 18533 language = DW_LANG_Fortran95; 18534 else if (strcmp (language_string, "GNU Java") == 0) 18535 language = DW_LANG_Java; 18536 else if (strcmp (language_string, "GNU Objective-C") == 0) 18537 language = DW_LANG_ObjC; 18538 else if (strcmp (language_string, "GNU Objective-C++") == 0) 18539 language = DW_LANG_ObjC_plus_plus; 18540 else if (dwarf_version >= 5 || !dwarf_strict) 18541 { 18542 if (strcmp (language_string, "GNU Go") == 0) 18543 language = DW_LANG_Go; 18544 } 18545 } 18546 18547 add_AT_unsigned (die, DW_AT_language, language); 18548 18549 switch (language) 18550 { 18551 case DW_LANG_Fortran77: 18552 case DW_LANG_Fortran90: 18553 case DW_LANG_Fortran95: 18554 /* Fortran has case insensitive identifiers and the front-end 18555 lowercases everything. */ 18556 add_AT_unsigned (die, DW_AT_identifier_case, DW_ID_down_case); 18557 break; 18558 default: 18559 /* The default DW_ID_case_sensitive doesn't need to be specified. */ 18560 break; 18561 } 18562 return die; 18563 } 18564 18565 /* Generate the DIE for a base class. */ 18566 18567 static void 18568 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die) 18569 { 18570 dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo); 18571 18572 add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die); 18573 add_data_member_location_attribute (die, binfo); 18574 18575 if (BINFO_VIRTUAL_P (binfo)) 18576 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual); 18577 18578 /* In DWARF3+ the default is DW_ACCESS_private only in DW_TAG_class_type 18579 children, otherwise the default is DW_ACCESS_public. In DWARF2 18580 the default has always been DW_ACCESS_private. */ 18581 if (access == access_public_node) 18582 { 18583 if (dwarf_version == 2 18584 || context_die->die_tag == DW_TAG_class_type) 18585 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public); 18586 } 18587 else if (access == access_protected_node) 18588 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected); 18589 else if (dwarf_version > 2 18590 && context_die->die_tag != DW_TAG_class_type) 18591 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_private); 18592 } 18593 18594 /* Generate a DIE for a class member. */ 18595 18596 static void 18597 gen_member_die (tree type, dw_die_ref context_die) 18598 { 18599 tree member; 18600 tree binfo = TYPE_BINFO (type); 18601 dw_die_ref child; 18602 18603 /* If this is not an incomplete type, output descriptions of each of its 18604 members. Note that as we output the DIEs necessary to represent the 18605 members of this record or union type, we will also be trying to output 18606 DIEs to represent the *types* of those members. However the `type' 18607 function (above) will specifically avoid generating type DIEs for member 18608 types *within* the list of member DIEs for this (containing) type except 18609 for those types (of members) which are explicitly marked as also being 18610 members of this (containing) type themselves. The g++ front- end can 18611 force any given type to be treated as a member of some other (containing) 18612 type by setting the TYPE_CONTEXT of the given (member) type to point to 18613 the TREE node representing the appropriate (containing) type. */ 18614 18615 /* First output info about the base classes. */ 18616 if (binfo) 18617 { 18618 VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo); 18619 int i; 18620 tree base; 18621 18622 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++) 18623 gen_inheritance_die (base, 18624 (accesses ? VEC_index (tree, accesses, i) 18625 : access_public_node), context_die); 18626 } 18627 18628 /* Now output info about the data members and type members. */ 18629 for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN (member)) 18630 { 18631 /* If we thought we were generating minimal debug info for TYPE 18632 and then changed our minds, some of the member declarations 18633 may have already been defined. Don't define them again, but 18634 do put them in the right order. */ 18635 18636 child = lookup_decl_die (member); 18637 if (child) 18638 splice_child_die (context_die, child); 18639 else 18640 gen_decl_die (member, NULL, context_die); 18641 } 18642 18643 /* Now output info about the function members (if any). */ 18644 for (member = TYPE_METHODS (type); member; member = DECL_CHAIN (member)) 18645 { 18646 /* Don't include clones in the member list. */ 18647 if (DECL_ABSTRACT_ORIGIN (member)) 18648 continue; 18649 18650 child = lookup_decl_die (member); 18651 if (child) 18652 splice_child_die (context_die, child); 18653 else 18654 gen_decl_die (member, NULL, context_die); 18655 } 18656 } 18657 18658 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG 18659 is set, we pretend that the type was never defined, so we only get the 18660 member DIEs needed by later specification DIEs. */ 18661 18662 static void 18663 gen_struct_or_union_type_die (tree type, dw_die_ref context_die, 18664 enum debug_info_usage usage) 18665 { 18666 dw_die_ref type_die = lookup_type_die (type); 18667 dw_die_ref scope_die = 0; 18668 int nested = 0; 18669 int complete = (TYPE_SIZE (type) 18670 && (! TYPE_STUB_DECL (type) 18671 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type)))); 18672 int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace); 18673 complete = complete && should_emit_struct_debug (type, usage); 18674 18675 if (type_die && ! complete) 18676 return; 18677 18678 if (TYPE_CONTEXT (type) != NULL_TREE 18679 && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type)) 18680 || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL)) 18681 nested = 1; 18682 18683 scope_die = scope_die_for (type, context_die); 18684 18685 if (! type_die || (nested && is_cu_die (scope_die))) 18686 /* First occurrence of type or toplevel definition of nested class. */ 18687 { 18688 dw_die_ref old_die = type_die; 18689 18690 type_die = new_die (TREE_CODE (type) == RECORD_TYPE 18691 ? record_type_tag (type) : DW_TAG_union_type, 18692 scope_die, type); 18693 equate_type_number_to_die (type, type_die); 18694 if (old_die) 18695 add_AT_specification (type_die, old_die); 18696 else 18697 add_name_attribute (type_die, type_tag (type)); 18698 } 18699 else 18700 remove_AT (type_die, DW_AT_declaration); 18701 18702 /* Generate child dies for template paramaters. */ 18703 if (debug_info_level > DINFO_LEVEL_TERSE 18704 && COMPLETE_TYPE_P (type)) 18705 schedule_generic_params_dies_gen (type); 18706 18707 /* If this type has been completed, then give it a byte_size attribute and 18708 then give a list of members. */ 18709 if (complete && !ns_decl) 18710 { 18711 /* Prevent infinite recursion in cases where the type of some member of 18712 this type is expressed in terms of this type itself. */ 18713 TREE_ASM_WRITTEN (type) = 1; 18714 add_byte_size_attribute (type_die, type); 18715 if (TYPE_STUB_DECL (type) != NULL_TREE) 18716 { 18717 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type)); 18718 add_accessibility_attribute (type_die, TYPE_STUB_DECL (type)); 18719 } 18720 18721 /* If the first reference to this type was as the return type of an 18722 inline function, then it may not have a parent. Fix this now. */ 18723 if (type_die->die_parent == NULL) 18724 add_child_die (scope_die, type_die); 18725 18726 push_decl_scope (type); 18727 gen_member_die (type, type_die); 18728 pop_decl_scope (); 18729 18730 add_gnat_descriptive_type_attribute (type_die, type, context_die); 18731 if (TYPE_ARTIFICIAL (type)) 18732 add_AT_flag (type_die, DW_AT_artificial, 1); 18733 18734 /* GNU extension: Record what type our vtable lives in. */ 18735 if (TYPE_VFIELD (type)) 18736 { 18737 tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type)); 18738 18739 gen_type_die (vtype, context_die); 18740 add_AT_die_ref (type_die, DW_AT_containing_type, 18741 lookup_type_die (vtype)); 18742 } 18743 } 18744 else 18745 { 18746 add_AT_flag (type_die, DW_AT_declaration, 1); 18747 18748 /* We don't need to do this for function-local types. */ 18749 if (TYPE_STUB_DECL (type) 18750 && ! decl_function_context (TYPE_STUB_DECL (type))) 18751 VEC_safe_push (tree, gc, incomplete_types, type); 18752 } 18753 18754 if (get_AT (type_die, DW_AT_name)) 18755 add_pubtype (type, type_die); 18756 } 18757 18758 /* Generate a DIE for a subroutine _type_. */ 18759 18760 static void 18761 gen_subroutine_type_die (tree type, dw_die_ref context_die) 18762 { 18763 tree return_type = TREE_TYPE (type); 18764 dw_die_ref subr_die 18765 = new_die (DW_TAG_subroutine_type, 18766 scope_die_for (type, context_die), type); 18767 18768 equate_type_number_to_die (type, subr_die); 18769 add_prototyped_attribute (subr_die, type); 18770 add_type_attribute (subr_die, return_type, 0, 0, context_die); 18771 gen_formal_types_die (type, subr_die); 18772 18773 if (get_AT (subr_die, DW_AT_name)) 18774 add_pubtype (type, subr_die); 18775 } 18776 18777 /* Generate a DIE for a type definition. */ 18778 18779 static void 18780 gen_typedef_die (tree decl, dw_die_ref context_die) 18781 { 18782 dw_die_ref type_die; 18783 tree origin; 18784 18785 if (TREE_ASM_WRITTEN (decl)) 18786 return; 18787 18788 TREE_ASM_WRITTEN (decl) = 1; 18789 type_die = new_die (DW_TAG_typedef, context_die, decl); 18790 origin = decl_ultimate_origin (decl); 18791 if (origin != NULL) 18792 add_abstract_origin_attribute (type_die, origin); 18793 else 18794 { 18795 tree type; 18796 18797 add_name_and_src_coords_attributes (type_die, decl); 18798 if (DECL_ORIGINAL_TYPE (decl)) 18799 { 18800 type = DECL_ORIGINAL_TYPE (decl); 18801 18802 gcc_assert (type != TREE_TYPE (decl)); 18803 equate_type_number_to_die (TREE_TYPE (decl), type_die); 18804 } 18805 else 18806 { 18807 type = TREE_TYPE (decl); 18808 18809 if (is_naming_typedef_decl (TYPE_NAME (type))) 18810 { 18811 /* Here, we are in the case of decl being a typedef naming 18812 an anonymous type, e.g: 18813 typedef struct {...} foo; 18814 In that case TREE_TYPE (decl) is not a typedef variant 18815 type and TYPE_NAME of the anonymous type is set to the 18816 TYPE_DECL of the typedef. This construct is emitted by 18817 the C++ FE. 18818 18819 TYPE is the anonymous struct named by the typedef 18820 DECL. As we need the DW_AT_type attribute of the 18821 DW_TAG_typedef to point to the DIE of TYPE, let's 18822 generate that DIE right away. add_type_attribute 18823 called below will then pick (via lookup_type_die) that 18824 anonymous struct DIE. */ 18825 if (!TREE_ASM_WRITTEN (type)) 18826 gen_tagged_type_die (type, context_die, DINFO_USAGE_DIR_USE); 18827 18828 /* This is a GNU Extension. We are adding a 18829 DW_AT_linkage_name attribute to the DIE of the 18830 anonymous struct TYPE. The value of that attribute 18831 is the name of the typedef decl naming the anonymous 18832 struct. This greatly eases the work of consumers of 18833 this debug info. */ 18834 add_linkage_attr (lookup_type_die (type), decl); 18835 } 18836 } 18837 18838 add_type_attribute (type_die, type, TREE_READONLY (decl), 18839 TREE_THIS_VOLATILE (decl), context_die); 18840 18841 if (is_naming_typedef_decl (decl)) 18842 /* We want that all subsequent calls to lookup_type_die with 18843 TYPE in argument yield the DW_TAG_typedef we have just 18844 created. */ 18845 equate_type_number_to_die (type, type_die); 18846 18847 add_accessibility_attribute (type_die, decl); 18848 } 18849 18850 if (DECL_ABSTRACT (decl)) 18851 equate_decl_number_to_die (decl, type_die); 18852 18853 if (get_AT (type_die, DW_AT_name)) 18854 add_pubtype (decl, type_die); 18855 } 18856 18857 /* Generate a DIE for a struct, class, enum or union type. */ 18858 18859 static void 18860 gen_tagged_type_die (tree type, 18861 dw_die_ref context_die, 18862 enum debug_info_usage usage) 18863 { 18864 int need_pop; 18865 18866 if (type == NULL_TREE 18867 || !is_tagged_type (type)) 18868 return; 18869 18870 /* If this is a nested type whose containing class hasn't been written 18871 out yet, writing it out will cover this one, too. This does not apply 18872 to instantiations of member class templates; they need to be added to 18873 the containing class as they are generated. FIXME: This hurts the 18874 idea of combining type decls from multiple TUs, since we can't predict 18875 what set of template instantiations we'll get. */ 18876 if (TYPE_CONTEXT (type) 18877 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type)) 18878 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type))) 18879 { 18880 gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage); 18881 18882 if (TREE_ASM_WRITTEN (type)) 18883 return; 18884 18885 /* If that failed, attach ourselves to the stub. */ 18886 push_decl_scope (TYPE_CONTEXT (type)); 18887 context_die = lookup_type_die (TYPE_CONTEXT (type)); 18888 need_pop = 1; 18889 } 18890 else if (TYPE_CONTEXT (type) != NULL_TREE 18891 && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL)) 18892 { 18893 /* If this type is local to a function that hasn't been written 18894 out yet, use a NULL context for now; it will be fixed up in 18895 decls_for_scope. */ 18896 context_die = lookup_decl_die (TYPE_CONTEXT (type)); 18897 /* A declaration DIE doesn't count; nested types need to go in the 18898 specification. */ 18899 if (context_die && is_declaration_die (context_die)) 18900 context_die = NULL; 18901 need_pop = 0; 18902 } 18903 else 18904 { 18905 context_die = declare_in_namespace (type, context_die); 18906 need_pop = 0; 18907 } 18908 18909 if (TREE_CODE (type) == ENUMERAL_TYPE) 18910 { 18911 /* This might have been written out by the call to 18912 declare_in_namespace. */ 18913 if (!TREE_ASM_WRITTEN (type)) 18914 gen_enumeration_type_die (type, context_die); 18915 } 18916 else 18917 gen_struct_or_union_type_die (type, context_die, usage); 18918 18919 if (need_pop) 18920 pop_decl_scope (); 18921 18922 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix 18923 it up if it is ever completed. gen_*_type_die will set it for us 18924 when appropriate. */ 18925 } 18926 18927 /* Generate a type description DIE. */ 18928 18929 static void 18930 gen_type_die_with_usage (tree type, dw_die_ref context_die, 18931 enum debug_info_usage usage) 18932 { 18933 struct array_descr_info info; 18934 18935 if (type == NULL_TREE || type == error_mark_node) 18936 return; 18937 18938 if (TYPE_NAME (type) != NULL_TREE 18939 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL 18940 && is_redundant_typedef (TYPE_NAME (type)) 18941 && DECL_ORIGINAL_TYPE (TYPE_NAME (type))) 18942 /* The DECL of this type is a typedef we don't want to emit debug 18943 info for but we want debug info for its underlying typedef. 18944 This can happen for e.g, the injected-class-name of a C++ 18945 type. */ 18946 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type)); 18947 18948 /* If TYPE is a typedef type variant, let's generate debug info 18949 for the parent typedef which TYPE is a type of. */ 18950 if (typedef_variant_p (type)) 18951 { 18952 if (TREE_ASM_WRITTEN (type)) 18953 return; 18954 18955 /* Prevent broken recursion; we can't hand off to the same type. */ 18956 gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type); 18957 18958 /* Give typedefs the right scope. */ 18959 context_die = scope_die_for (type, context_die); 18960 18961 TREE_ASM_WRITTEN (type) = 1; 18962 18963 gen_decl_die (TYPE_NAME (type), NULL, context_die); 18964 return; 18965 } 18966 18967 /* If type is an anonymous tagged type named by a typedef, let's 18968 generate debug info for the typedef. */ 18969 if (is_naming_typedef_decl (TYPE_NAME (type))) 18970 { 18971 /* Use the DIE of the containing namespace as the parent DIE of 18972 the type description DIE we want to generate. */ 18973 if (DECL_CONTEXT (TYPE_NAME (type)) 18974 && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL) 18975 context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type))); 18976 18977 gen_decl_die (TYPE_NAME (type), NULL, context_die); 18978 return; 18979 } 18980 18981 /* If this is an array type with hidden descriptor, handle it first. */ 18982 if (!TREE_ASM_WRITTEN (type) 18983 && lang_hooks.types.get_array_descr_info 18984 && lang_hooks.types.get_array_descr_info (type, &info) 18985 && (dwarf_version >= 3 || !dwarf_strict)) 18986 { 18987 gen_descr_array_type_die (type, &info, context_die); 18988 TREE_ASM_WRITTEN (type) = 1; 18989 return; 18990 } 18991 18992 /* We are going to output a DIE to represent the unqualified version 18993 of this type (i.e. without any const or volatile qualifiers) so 18994 get the main variant (i.e. the unqualified version) of this type 18995 now. (Vectors are special because the debugging info is in the 18996 cloned type itself). */ 18997 if (TREE_CODE (type) != VECTOR_TYPE) 18998 type = type_main_variant (type); 18999 19000 if (TREE_ASM_WRITTEN (type)) 19001 return; 19002 19003 switch (TREE_CODE (type)) 19004 { 19005 case ERROR_MARK: 19006 break; 19007 19008 case POINTER_TYPE: 19009 case REFERENCE_TYPE: 19010 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This 19011 ensures that the gen_type_die recursion will terminate even if the 19012 type is recursive. Recursive types are possible in Ada. */ 19013 /* ??? We could perhaps do this for all types before the switch 19014 statement. */ 19015 TREE_ASM_WRITTEN (type) = 1; 19016 19017 /* For these types, all that is required is that we output a DIE (or a 19018 set of DIEs) to represent the "basis" type. */ 19019 gen_type_die_with_usage (TREE_TYPE (type), context_die, 19020 DINFO_USAGE_IND_USE); 19021 break; 19022 19023 case OFFSET_TYPE: 19024 /* This code is used for C++ pointer-to-data-member types. 19025 Output a description of the relevant class type. */ 19026 gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die, 19027 DINFO_USAGE_IND_USE); 19028 19029 /* Output a description of the type of the object pointed to. */ 19030 gen_type_die_with_usage (TREE_TYPE (type), context_die, 19031 DINFO_USAGE_IND_USE); 19032 19033 /* Now output a DIE to represent this pointer-to-data-member type 19034 itself. */ 19035 gen_ptr_to_mbr_type_die (type, context_die); 19036 break; 19037 19038 case FUNCTION_TYPE: 19039 /* Force out return type (in case it wasn't forced out already). */ 19040 gen_type_die_with_usage (TREE_TYPE (type), context_die, 19041 DINFO_USAGE_DIR_USE); 19042 gen_subroutine_type_die (type, context_die); 19043 break; 19044 19045 case METHOD_TYPE: 19046 /* Force out return type (in case it wasn't forced out already). */ 19047 gen_type_die_with_usage (TREE_TYPE (type), context_die, 19048 DINFO_USAGE_DIR_USE); 19049 gen_subroutine_type_die (type, context_die); 19050 break; 19051 19052 case ARRAY_TYPE: 19053 gen_array_type_die (type, context_die); 19054 break; 19055 19056 case VECTOR_TYPE: 19057 gen_array_type_die (type, context_die); 19058 break; 19059 19060 case ENUMERAL_TYPE: 19061 case RECORD_TYPE: 19062 case UNION_TYPE: 19063 case QUAL_UNION_TYPE: 19064 gen_tagged_type_die (type, context_die, usage); 19065 return; 19066 19067 case VOID_TYPE: 19068 case INTEGER_TYPE: 19069 case REAL_TYPE: 19070 case FIXED_POINT_TYPE: 19071 case COMPLEX_TYPE: 19072 case BOOLEAN_TYPE: 19073 /* No DIEs needed for fundamental types. */ 19074 break; 19075 19076 case NULLPTR_TYPE: 19077 case LANG_TYPE: 19078 /* Just use DW_TAG_unspecified_type. */ 19079 { 19080 dw_die_ref type_die = lookup_type_die (type); 19081 if (type_die == NULL) 19082 { 19083 tree name = TYPE_NAME (type); 19084 if (TREE_CODE (name) == TYPE_DECL) 19085 name = DECL_NAME (name); 19086 type_die = new_die (DW_TAG_unspecified_type, comp_unit_die (), type); 19087 add_name_attribute (type_die, IDENTIFIER_POINTER (name)); 19088 equate_type_number_to_die (type, type_die); 19089 } 19090 } 19091 break; 19092 19093 default: 19094 gcc_unreachable (); 19095 } 19096 19097 TREE_ASM_WRITTEN (type) = 1; 19098 } 19099 19100 static void 19101 gen_type_die (tree type, dw_die_ref context_die) 19102 { 19103 gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE); 19104 } 19105 19106 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the 19107 things which are local to the given block. */ 19108 19109 static void 19110 gen_block_die (tree stmt, dw_die_ref context_die, int depth) 19111 { 19112 int must_output_die = 0; 19113 bool inlined_func; 19114 19115 /* Ignore blocks that are NULL. */ 19116 if (stmt == NULL_TREE) 19117 return; 19118 19119 inlined_func = inlined_function_outer_scope_p (stmt); 19120 19121 /* If the block is one fragment of a non-contiguous block, do not 19122 process the variables, since they will have been done by the 19123 origin block. Do process subblocks. */ 19124 if (BLOCK_FRAGMENT_ORIGIN (stmt)) 19125 { 19126 tree sub; 19127 19128 for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub)) 19129 gen_block_die (sub, context_die, depth + 1); 19130 19131 return; 19132 } 19133 19134 /* Determine if we need to output any Dwarf DIEs at all to represent this 19135 block. */ 19136 if (inlined_func) 19137 /* The outer scopes for inlinings *must* always be represented. We 19138 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */ 19139 must_output_die = 1; 19140 else 19141 { 19142 /* Determine if this block directly contains any "significant" 19143 local declarations which we will need to output DIEs for. */ 19144 if (debug_info_level > DINFO_LEVEL_TERSE) 19145 /* We are not in terse mode so *any* local declaration counts 19146 as being a "significant" one. */ 19147 must_output_die = ((BLOCK_VARS (stmt) != NULL 19148 || BLOCK_NUM_NONLOCALIZED_VARS (stmt)) 19149 && (TREE_USED (stmt) 19150 || TREE_ASM_WRITTEN (stmt) 19151 || BLOCK_ABSTRACT (stmt))); 19152 else if ((TREE_USED (stmt) 19153 || TREE_ASM_WRITTEN (stmt) 19154 || BLOCK_ABSTRACT (stmt)) 19155 && !dwarf2out_ignore_block (stmt)) 19156 must_output_die = 1; 19157 } 19158 19159 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block 19160 DIE for any block which contains no significant local declarations at 19161 all. Rather, in such cases we just call `decls_for_scope' so that any 19162 needed Dwarf info for any sub-blocks will get properly generated. Note 19163 that in terse mode, our definition of what constitutes a "significant" 19164 local declaration gets restricted to include only inlined function 19165 instances and local (nested) function definitions. */ 19166 if (must_output_die) 19167 { 19168 if (inlined_func) 19169 { 19170 /* If STMT block is abstract, that means we have been called 19171 indirectly from dwarf2out_abstract_function. 19172 That function rightfully marks the descendent blocks (of 19173 the abstract function it is dealing with) as being abstract, 19174 precisely to prevent us from emitting any 19175 DW_TAG_inlined_subroutine DIE as a descendent 19176 of an abstract function instance. So in that case, we should 19177 not call gen_inlined_subroutine_die. 19178 19179 Later though, when cgraph asks dwarf2out to emit info 19180 for the concrete instance of the function decl into which 19181 the concrete instance of STMT got inlined, the later will lead 19182 to the generation of a DW_TAG_inlined_subroutine DIE. */ 19183 if (! BLOCK_ABSTRACT (stmt)) 19184 gen_inlined_subroutine_die (stmt, context_die, depth); 19185 } 19186 else 19187 gen_lexical_block_die (stmt, context_die, depth); 19188 } 19189 else 19190 decls_for_scope (stmt, context_die, depth); 19191 } 19192 19193 /* Process variable DECL (or variable with origin ORIGIN) within 19194 block STMT and add it to CONTEXT_DIE. */ 19195 static void 19196 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die) 19197 { 19198 dw_die_ref die; 19199 tree decl_or_origin = decl ? decl : origin; 19200 19201 if (TREE_CODE (decl_or_origin) == FUNCTION_DECL) 19202 die = lookup_decl_die (decl_or_origin); 19203 else if (TREE_CODE (decl_or_origin) == TYPE_DECL 19204 && TYPE_DECL_IS_STUB (decl_or_origin)) 19205 die = lookup_type_die (TREE_TYPE (decl_or_origin)); 19206 else 19207 die = NULL; 19208 19209 if (die != NULL && die->die_parent == NULL) 19210 add_child_die (context_die, die); 19211 else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL) 19212 dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin), 19213 stmt, context_die); 19214 else 19215 gen_decl_die (decl, origin, context_die); 19216 } 19217 19218 /* Generate all of the decls declared within a given scope and (recursively) 19219 all of its sub-blocks. */ 19220 19221 static void 19222 decls_for_scope (tree stmt, dw_die_ref context_die, int depth) 19223 { 19224 tree decl; 19225 unsigned int i; 19226 tree subblocks; 19227 19228 /* Ignore NULL blocks. */ 19229 if (stmt == NULL_TREE) 19230 return; 19231 19232 /* Output the DIEs to represent all of the data objects and typedefs 19233 declared directly within this block but not within any nested 19234 sub-blocks. Also, nested function and tag DIEs have been 19235 generated with a parent of NULL; fix that up now. */ 19236 for (decl = BLOCK_VARS (stmt); decl != NULL; decl = DECL_CHAIN (decl)) 19237 process_scope_var (stmt, decl, NULL_TREE, context_die); 19238 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++) 19239 process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i), 19240 context_die); 19241 19242 /* If we're at -g1, we're not interested in subblocks. */ 19243 if (debug_info_level <= DINFO_LEVEL_TERSE) 19244 return; 19245 19246 /* Output the DIEs to represent all sub-blocks (and the items declared 19247 therein) of this block. */ 19248 for (subblocks = BLOCK_SUBBLOCKS (stmt); 19249 subblocks != NULL; 19250 subblocks = BLOCK_CHAIN (subblocks)) 19251 gen_block_die (subblocks, context_die, depth + 1); 19252 } 19253 19254 /* Is this a typedef we can avoid emitting? */ 19255 19256 static inline int 19257 is_redundant_typedef (const_tree decl) 19258 { 19259 if (TYPE_DECL_IS_STUB (decl)) 19260 return 1; 19261 19262 if (DECL_ARTIFICIAL (decl) 19263 && DECL_CONTEXT (decl) 19264 && is_tagged_type (DECL_CONTEXT (decl)) 19265 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL 19266 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl)))) 19267 /* Also ignore the artificial member typedef for the class name. */ 19268 return 1; 19269 19270 return 0; 19271 } 19272 19273 /* Return TRUE if TYPE is a typedef that names a type for linkage 19274 purposes. This kind of typedefs is produced by the C++ FE for 19275 constructs like: 19276 19277 typedef struct {...} foo; 19278 19279 In that case, there is no typedef variant type produced for foo. 19280 Rather, the TREE_TYPE of the TYPE_DECL of foo is the anonymous 19281 struct type. */ 19282 19283 static bool 19284 is_naming_typedef_decl (const_tree decl) 19285 { 19286 if (decl == NULL_TREE 19287 || TREE_CODE (decl) != TYPE_DECL 19288 || !is_tagged_type (TREE_TYPE (decl)) 19289 || DECL_IS_BUILTIN (decl) 19290 || is_redundant_typedef (decl) 19291 /* It looks like Ada produces TYPE_DECLs that are very similar 19292 to C++ naming typedefs but that have different 19293 semantics. Let's be specific to c++ for now. */ 19294 || !is_cxx ()) 19295 return FALSE; 19296 19297 return (DECL_ORIGINAL_TYPE (decl) == NULL_TREE 19298 && TYPE_NAME (TREE_TYPE (decl)) == decl 19299 && (TYPE_STUB_DECL (TREE_TYPE (decl)) 19300 != TYPE_NAME (TREE_TYPE (decl)))); 19301 } 19302 19303 /* Returns the DIE for a context. */ 19304 19305 static inline dw_die_ref 19306 get_context_die (tree context) 19307 { 19308 if (context) 19309 { 19310 /* Find die that represents this context. */ 19311 if (TYPE_P (context)) 19312 { 19313 context = TYPE_MAIN_VARIANT (context); 19314 return strip_naming_typedef (context, force_type_die (context)); 19315 } 19316 else 19317 return force_decl_die (context); 19318 } 19319 return comp_unit_die (); 19320 } 19321 19322 /* Returns the DIE for decl. A DIE will always be returned. */ 19323 19324 static dw_die_ref 19325 force_decl_die (tree decl) 19326 { 19327 dw_die_ref decl_die; 19328 unsigned saved_external_flag; 19329 tree save_fn = NULL_TREE; 19330 decl_die = lookup_decl_die (decl); 19331 if (!decl_die) 19332 { 19333 dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl)); 19334 19335 decl_die = lookup_decl_die (decl); 19336 if (decl_die) 19337 return decl_die; 19338 19339 switch (TREE_CODE (decl)) 19340 { 19341 case FUNCTION_DECL: 19342 /* Clear current_function_decl, so that gen_subprogram_die thinks 19343 that this is a declaration. At this point, we just want to force 19344 declaration die. */ 19345 save_fn = current_function_decl; 19346 current_function_decl = NULL_TREE; 19347 gen_subprogram_die (decl, context_die); 19348 current_function_decl = save_fn; 19349 break; 19350 19351 case VAR_DECL: 19352 /* Set external flag to force declaration die. Restore it after 19353 gen_decl_die() call. */ 19354 saved_external_flag = DECL_EXTERNAL (decl); 19355 DECL_EXTERNAL (decl) = 1; 19356 gen_decl_die (decl, NULL, context_die); 19357 DECL_EXTERNAL (decl) = saved_external_flag; 19358 break; 19359 19360 case NAMESPACE_DECL: 19361 if (dwarf_version >= 3 || !dwarf_strict) 19362 dwarf2out_decl (decl); 19363 else 19364 /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace. */ 19365 decl_die = comp_unit_die (); 19366 break; 19367 19368 case TRANSLATION_UNIT_DECL: 19369 decl_die = comp_unit_die (); 19370 break; 19371 19372 default: 19373 gcc_unreachable (); 19374 } 19375 19376 /* We should be able to find the DIE now. */ 19377 if (!decl_die) 19378 decl_die = lookup_decl_die (decl); 19379 gcc_assert (decl_die); 19380 } 19381 19382 return decl_die; 19383 } 19384 19385 /* Returns the DIE for TYPE, that must not be a base type. A DIE is 19386 always returned. */ 19387 19388 static dw_die_ref 19389 force_type_die (tree type) 19390 { 19391 dw_die_ref type_die; 19392 19393 type_die = lookup_type_die (type); 19394 if (!type_die) 19395 { 19396 dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type)); 19397 19398 type_die = modified_type_die (type, TYPE_READONLY (type), 19399 TYPE_VOLATILE (type), context_die); 19400 gcc_assert (type_die); 19401 } 19402 return type_die; 19403 } 19404 19405 /* Force out any required namespaces to be able to output DECL, 19406 and return the new context_die for it, if it's changed. */ 19407 19408 static dw_die_ref 19409 setup_namespace_context (tree thing, dw_die_ref context_die) 19410 { 19411 tree context = (DECL_P (thing) 19412 ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing)); 19413 if (context && TREE_CODE (context) == NAMESPACE_DECL) 19414 /* Force out the namespace. */ 19415 context_die = force_decl_die (context); 19416 19417 return context_die; 19418 } 19419 19420 /* Emit a declaration DIE for THING (which is either a DECL or a tagged 19421 type) within its namespace, if appropriate. 19422 19423 For compatibility with older debuggers, namespace DIEs only contain 19424 declarations; all definitions are emitted at CU scope. */ 19425 19426 static dw_die_ref 19427 declare_in_namespace (tree thing, dw_die_ref context_die) 19428 { 19429 dw_die_ref ns_context; 19430 19431 if (debug_info_level <= DINFO_LEVEL_TERSE) 19432 return context_die; 19433 19434 /* If this decl is from an inlined function, then don't try to emit it in its 19435 namespace, as we will get confused. It would have already been emitted 19436 when the abstract instance of the inline function was emitted anyways. */ 19437 if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing)) 19438 return context_die; 19439 19440 ns_context = setup_namespace_context (thing, context_die); 19441 19442 if (ns_context != context_die) 19443 { 19444 if (is_fortran ()) 19445 return ns_context; 19446 if (DECL_P (thing)) 19447 gen_decl_die (thing, NULL, ns_context); 19448 else 19449 gen_type_die (thing, ns_context); 19450 } 19451 return context_die; 19452 } 19453 19454 /* Generate a DIE for a namespace or namespace alias. */ 19455 19456 static void 19457 gen_namespace_die (tree decl, dw_die_ref context_die) 19458 { 19459 dw_die_ref namespace_die; 19460 19461 /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace 19462 they are an alias of. */ 19463 if (DECL_ABSTRACT_ORIGIN (decl) == NULL) 19464 { 19465 /* Output a real namespace or module. */ 19466 context_die = setup_namespace_context (decl, comp_unit_die ()); 19467 namespace_die = new_die (is_fortran () 19468 ? DW_TAG_module : DW_TAG_namespace, 19469 context_die, decl); 19470 /* For Fortran modules defined in different CU don't add src coords. */ 19471 if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl)) 19472 { 19473 const char *name = dwarf2_name (decl, 0); 19474 if (name) 19475 add_name_attribute (namespace_die, name); 19476 } 19477 else 19478 add_name_and_src_coords_attributes (namespace_die, decl); 19479 if (DECL_EXTERNAL (decl)) 19480 add_AT_flag (namespace_die, DW_AT_declaration, 1); 19481 equate_decl_number_to_die (decl, namespace_die); 19482 } 19483 else 19484 { 19485 /* Output a namespace alias. */ 19486 19487 /* Force out the namespace we are an alias of, if necessary. */ 19488 dw_die_ref origin_die 19489 = force_decl_die (DECL_ABSTRACT_ORIGIN (decl)); 19490 19491 if (DECL_FILE_SCOPE_P (decl) 19492 || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL) 19493 context_die = setup_namespace_context (decl, comp_unit_die ()); 19494 /* Now create the namespace alias DIE. */ 19495 namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl); 19496 add_name_and_src_coords_attributes (namespace_die, decl); 19497 add_AT_die_ref (namespace_die, DW_AT_import, origin_die); 19498 equate_decl_number_to_die (decl, namespace_die); 19499 } 19500 } 19501 19502 /* Generate Dwarf debug information for a decl described by DECL. 19503 The return value is currently only meaningful for PARM_DECLs, 19504 for all other decls it returns NULL. */ 19505 19506 static dw_die_ref 19507 gen_decl_die (tree decl, tree origin, dw_die_ref context_die) 19508 { 19509 tree decl_or_origin = decl ? decl : origin; 19510 tree class_origin = NULL, ultimate_origin; 19511 19512 if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin)) 19513 return NULL; 19514 19515 switch (TREE_CODE (decl_or_origin)) 19516 { 19517 case ERROR_MARK: 19518 break; 19519 19520 case CONST_DECL: 19521 if (!is_fortran () && !is_ada ()) 19522 { 19523 /* The individual enumerators of an enum type get output when we output 19524 the Dwarf representation of the relevant enum type itself. */ 19525 break; 19526 } 19527 19528 /* Emit its type. */ 19529 gen_type_die (TREE_TYPE (decl), context_die); 19530 19531 /* And its containing namespace. */ 19532 context_die = declare_in_namespace (decl, context_die); 19533 19534 gen_const_die (decl, context_die); 19535 break; 19536 19537 case FUNCTION_DECL: 19538 /* Don't output any DIEs to represent mere function declarations, 19539 unless they are class members or explicit block externs. */ 19540 if (DECL_INITIAL (decl_or_origin) == NULL_TREE 19541 && DECL_FILE_SCOPE_P (decl_or_origin) 19542 && (current_function_decl == NULL_TREE 19543 || DECL_ARTIFICIAL (decl_or_origin))) 19544 break; 19545 19546 #if 0 19547 /* FIXME */ 19548 /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN 19549 on local redeclarations of global functions. That seems broken. */ 19550 if (current_function_decl != decl) 19551 /* This is only a declaration. */; 19552 #endif 19553 19554 /* If we're emitting a clone, emit info for the abstract instance. */ 19555 if (origin || DECL_ORIGIN (decl) != decl) 19556 dwarf2out_abstract_function (origin 19557 ? DECL_ORIGIN (origin) 19558 : DECL_ABSTRACT_ORIGIN (decl)); 19559 19560 /* If we're emitting an out-of-line copy of an inline function, 19561 emit info for the abstract instance and set up to refer to it. */ 19562 else if (cgraph_function_possibly_inlined_p (decl) 19563 && ! DECL_ABSTRACT (decl) 19564 && ! class_or_namespace_scope_p (context_die) 19565 /* dwarf2out_abstract_function won't emit a die if this is just 19566 a declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in 19567 that case, because that works only if we have a die. */ 19568 && DECL_INITIAL (decl) != NULL_TREE) 19569 { 19570 dwarf2out_abstract_function (decl); 19571 set_decl_origin_self (decl); 19572 } 19573 19574 /* Otherwise we're emitting the primary DIE for this decl. */ 19575 else if (debug_info_level > DINFO_LEVEL_TERSE) 19576 { 19577 /* Before we describe the FUNCTION_DECL itself, make sure that we 19578 have its containing type. */ 19579 if (!origin) 19580 origin = decl_class_context (decl); 19581 if (origin != NULL_TREE) 19582 gen_type_die (origin, context_die); 19583 19584 /* And its return type. */ 19585 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die); 19586 19587 /* And its virtual context. */ 19588 if (DECL_VINDEX (decl) != NULL_TREE) 19589 gen_type_die (DECL_CONTEXT (decl), context_die); 19590 19591 /* Make sure we have a member DIE for decl. */ 19592 if (origin != NULL_TREE) 19593 gen_type_die_for_member (origin, decl, context_die); 19594 19595 /* And its containing namespace. */ 19596 context_die = declare_in_namespace (decl, context_die); 19597 } 19598 19599 /* Now output a DIE to represent the function itself. */ 19600 if (decl) 19601 gen_subprogram_die (decl, context_die); 19602 break; 19603 19604 case TYPE_DECL: 19605 /* If we are in terse mode, don't generate any DIEs to represent any 19606 actual typedefs. */ 19607 if (debug_info_level <= DINFO_LEVEL_TERSE) 19608 break; 19609 19610 /* In the special case of a TYPE_DECL node representing the declaration 19611 of some type tag, if the given TYPE_DECL is marked as having been 19612 instantiated from some other (original) TYPE_DECL node (e.g. one which 19613 was generated within the original definition of an inline function) we 19614 used to generate a special (abbreviated) DW_TAG_structure_type, 19615 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. But nothing 19616 should be actually referencing those DIEs, as variable DIEs with that 19617 type would be emitted already in the abstract origin, so it was always 19618 removed during unused type prunning. Don't add anything in this 19619 case. */ 19620 if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE) 19621 break; 19622 19623 if (is_redundant_typedef (decl)) 19624 gen_type_die (TREE_TYPE (decl), context_die); 19625 else 19626 /* Output a DIE to represent the typedef itself. */ 19627 gen_typedef_die (decl, context_die); 19628 break; 19629 19630 case LABEL_DECL: 19631 if (debug_info_level >= DINFO_LEVEL_NORMAL) 19632 gen_label_die (decl, context_die); 19633 break; 19634 19635 case VAR_DECL: 19636 case RESULT_DECL: 19637 /* If we are in terse mode, don't generate any DIEs to represent any 19638 variable declarations or definitions. */ 19639 if (debug_info_level <= DINFO_LEVEL_TERSE) 19640 break; 19641 19642 /* Output any DIEs that are needed to specify the type of this data 19643 object. */ 19644 if (decl_by_reference_p (decl_or_origin)) 19645 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die); 19646 else 19647 gen_type_die (TREE_TYPE (decl_or_origin), context_die); 19648 19649 /* And its containing type. */ 19650 class_origin = decl_class_context (decl_or_origin); 19651 if (class_origin != NULL_TREE) 19652 gen_type_die_for_member (class_origin, decl_or_origin, context_die); 19653 19654 /* And its containing namespace. */ 19655 context_die = declare_in_namespace (decl_or_origin, context_die); 19656 19657 /* Now output the DIE to represent the data object itself. This gets 19658 complicated because of the possibility that the VAR_DECL really 19659 represents an inlined instance of a formal parameter for an inline 19660 function. */ 19661 ultimate_origin = decl_ultimate_origin (decl_or_origin); 19662 if (ultimate_origin != NULL_TREE 19663 && TREE_CODE (ultimate_origin) == PARM_DECL) 19664 gen_formal_parameter_die (decl, origin, 19665 true /* Emit name attribute. */, 19666 context_die); 19667 else 19668 gen_variable_die (decl, origin, context_die); 19669 break; 19670 19671 case FIELD_DECL: 19672 /* Ignore the nameless fields that are used to skip bits but handle C++ 19673 anonymous unions and structs. */ 19674 if (DECL_NAME (decl) != NULL_TREE 19675 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE 19676 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE) 19677 { 19678 gen_type_die (member_declared_type (decl), context_die); 19679 gen_field_die (decl, context_die); 19680 } 19681 break; 19682 19683 case PARM_DECL: 19684 if (DECL_BY_REFERENCE (decl_or_origin)) 19685 gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die); 19686 else 19687 gen_type_die (TREE_TYPE (decl_or_origin), context_die); 19688 return gen_formal_parameter_die (decl, origin, 19689 true /* Emit name attribute. */, 19690 context_die); 19691 19692 case NAMESPACE_DECL: 19693 case IMPORTED_DECL: 19694 if (dwarf_version >= 3 || !dwarf_strict) 19695 gen_namespace_die (decl, context_die); 19696 break; 19697 19698 default: 19699 /* Probably some frontend-internal decl. Assume we don't care. */ 19700 gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES); 19701 break; 19702 } 19703 19704 return NULL; 19705 } 19706 19707 /* Output debug information for global decl DECL. Called from toplev.c after 19708 compilation proper has finished. */ 19709 19710 static void 19711 dwarf2out_global_decl (tree decl) 19712 { 19713 /* Output DWARF2 information for file-scope tentative data object 19714 declarations, file-scope (extern) function declarations (which 19715 had no corresponding body) and file-scope tagged type declarations 19716 and definitions which have not yet been forced out. */ 19717 if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl)) 19718 dwarf2out_decl (decl); 19719 } 19720 19721 /* Output debug information for type decl DECL. Called from toplev.c 19722 and from language front ends (to record built-in types). */ 19723 static void 19724 dwarf2out_type_decl (tree decl, int local) 19725 { 19726 if (!local) 19727 dwarf2out_decl (decl); 19728 } 19729 19730 /* Output debug information for imported module or decl DECL. 19731 NAME is non-NULL name in the lexical block if the decl has been renamed. 19732 LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK) 19733 that DECL belongs to. 19734 LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK. */ 19735 static void 19736 dwarf2out_imported_module_or_decl_1 (tree decl, 19737 tree name, 19738 tree lexical_block, 19739 dw_die_ref lexical_block_die) 19740 { 19741 expanded_location xloc; 19742 dw_die_ref imported_die = NULL; 19743 dw_die_ref at_import_die; 19744 19745 if (TREE_CODE (decl) == IMPORTED_DECL) 19746 { 19747 xloc = expand_location (DECL_SOURCE_LOCATION (decl)); 19748 decl = IMPORTED_DECL_ASSOCIATED_DECL (decl); 19749 gcc_assert (decl); 19750 } 19751 else 19752 xloc = expand_location (input_location); 19753 19754 if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL) 19755 { 19756 at_import_die = force_type_die (TREE_TYPE (decl)); 19757 /* For namespace N { typedef void T; } using N::T; base_type_die 19758 returns NULL, but DW_TAG_imported_declaration requires 19759 the DW_AT_import tag. Force creation of DW_TAG_typedef. */ 19760 if (!at_import_die) 19761 { 19762 gcc_assert (TREE_CODE (decl) == TYPE_DECL); 19763 gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl))); 19764 at_import_die = lookup_type_die (TREE_TYPE (decl)); 19765 gcc_assert (at_import_die); 19766 } 19767 } 19768 else 19769 { 19770 at_import_die = lookup_decl_die (decl); 19771 if (!at_import_die) 19772 { 19773 /* If we're trying to avoid duplicate debug info, we may not have 19774 emitted the member decl for this field. Emit it now. */ 19775 if (TREE_CODE (decl) == FIELD_DECL) 19776 { 19777 tree type = DECL_CONTEXT (decl); 19778 19779 if (TYPE_CONTEXT (type) 19780 && TYPE_P (TYPE_CONTEXT (type)) 19781 && !should_emit_struct_debug (TYPE_CONTEXT (type), 19782 DINFO_USAGE_DIR_USE)) 19783 return; 19784 gen_type_die_for_member (type, decl, 19785 get_context_die (TYPE_CONTEXT (type))); 19786 } 19787 at_import_die = force_decl_die (decl); 19788 } 19789 } 19790 19791 if (TREE_CODE (decl) == NAMESPACE_DECL) 19792 { 19793 if (dwarf_version >= 3 || !dwarf_strict) 19794 imported_die = new_die (DW_TAG_imported_module, 19795 lexical_block_die, 19796 lexical_block); 19797 else 19798 return; 19799 } 19800 else 19801 imported_die = new_die (DW_TAG_imported_declaration, 19802 lexical_block_die, 19803 lexical_block); 19804 19805 add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file)); 19806 add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line); 19807 if (name) 19808 add_AT_string (imported_die, DW_AT_name, 19809 IDENTIFIER_POINTER (name)); 19810 add_AT_die_ref (imported_die, DW_AT_import, at_import_die); 19811 } 19812 19813 /* Output debug information for imported module or decl DECL. 19814 NAME is non-NULL name in context if the decl has been renamed. 19815 CHILD is true if decl is one of the renamed decls as part of 19816 importing whole module. */ 19817 19818 static void 19819 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context, 19820 bool child) 19821 { 19822 /* dw_die_ref at_import_die; */ 19823 dw_die_ref scope_die; 19824 19825 if (debug_info_level <= DINFO_LEVEL_TERSE) 19826 return; 19827 19828 gcc_assert (decl); 19829 19830 /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs. 19831 We need decl DIE for reference and scope die. First, get DIE for the decl 19832 itself. */ 19833 19834 /* Get the scope die for decl context. Use comp_unit_die for global module 19835 or decl. If die is not found for non globals, force new die. */ 19836 if (context 19837 && TYPE_P (context) 19838 && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE)) 19839 return; 19840 19841 if (!(dwarf_version >= 3 || !dwarf_strict)) 19842 return; 19843 19844 scope_die = get_context_die (context); 19845 19846 if (child) 19847 { 19848 gcc_assert (scope_die->die_child); 19849 gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module); 19850 gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL); 19851 scope_die = scope_die->die_child; 19852 } 19853 19854 /* OK, now we have DIEs for decl as well as scope. Emit imported die. */ 19855 dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die); 19856 19857 } 19858 19859 /* Write the debugging output for DECL. */ 19860 19861 void 19862 dwarf2out_decl (tree decl) 19863 { 19864 dw_die_ref context_die = comp_unit_die (); 19865 19866 switch (TREE_CODE (decl)) 19867 { 19868 case ERROR_MARK: 19869 return; 19870 19871 case FUNCTION_DECL: 19872 /* What we would really like to do here is to filter out all mere 19873 file-scope declarations of file-scope functions which are never 19874 referenced later within this translation unit (and keep all of ones 19875 that *are* referenced later on) but we aren't clairvoyant, so we have 19876 no idea which functions will be referenced in the future (i.e. later 19877 on within the current translation unit). So here we just ignore all 19878 file-scope function declarations which are not also definitions. If 19879 and when the debugger needs to know something about these functions, 19880 it will have to hunt around and find the DWARF information associated 19881 with the definition of the function. 19882 19883 We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL 19884 nodes represent definitions and which ones represent mere 19885 declarations. We have to check DECL_INITIAL instead. That's because 19886 the C front-end supports some weird semantics for "extern inline" 19887 function definitions. These can get inlined within the current 19888 translation unit (and thus, we need to generate Dwarf info for their 19889 abstract instances so that the Dwarf info for the concrete inlined 19890 instances can have something to refer to) but the compiler never 19891 generates any out-of-lines instances of such things (despite the fact 19892 that they *are* definitions). 19893 19894 The important point is that the C front-end marks these "extern 19895 inline" functions as DECL_EXTERNAL, but we need to generate DWARF for 19896 them anyway. Note that the C++ front-end also plays some similar games 19897 for inline function definitions appearing within include files which 19898 also contain `#pragma interface' pragmas. */ 19899 if (DECL_INITIAL (decl) == NULL_TREE) 19900 return; 19901 19902 /* If we're a nested function, initially use a parent of NULL; if we're 19903 a plain function, this will be fixed up in decls_for_scope. If 19904 we're a method, it will be ignored, since we already have a DIE. */ 19905 if (decl_function_context (decl) 19906 /* But if we're in terse mode, we don't care about scope. */ 19907 && debug_info_level > DINFO_LEVEL_TERSE) 19908 context_die = NULL; 19909 break; 19910 19911 case VAR_DECL: 19912 /* Ignore this VAR_DECL if it refers to a file-scope extern data object 19913 declaration and if the declaration was never even referenced from 19914 within this entire compilation unit. We suppress these DIEs in 19915 order to save space in the .debug section (by eliminating entries 19916 which are probably useless). Note that we must not suppress 19917 block-local extern declarations (whether used or not) because that 19918 would screw-up the debugger's name lookup mechanism and cause it to 19919 miss things which really ought to be in scope at a given point. */ 19920 if (DECL_EXTERNAL (decl) && !TREE_USED (decl)) 19921 return; 19922 19923 /* For local statics lookup proper context die. */ 19924 if (TREE_STATIC (decl) 19925 && DECL_CONTEXT (decl) 19926 && TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL) 19927 context_die = lookup_decl_die (DECL_CONTEXT (decl)); 19928 19929 /* If we are in terse mode, don't generate any DIEs to represent any 19930 variable declarations or definitions. */ 19931 if (debug_info_level <= DINFO_LEVEL_TERSE) 19932 return; 19933 break; 19934 19935 case CONST_DECL: 19936 if (debug_info_level <= DINFO_LEVEL_TERSE) 19937 return; 19938 if (!is_fortran () && !is_ada ()) 19939 return; 19940 if (TREE_STATIC (decl) && decl_function_context (decl)) 19941 context_die = lookup_decl_die (DECL_CONTEXT (decl)); 19942 break; 19943 19944 case NAMESPACE_DECL: 19945 case IMPORTED_DECL: 19946 if (debug_info_level <= DINFO_LEVEL_TERSE) 19947 return; 19948 if (lookup_decl_die (decl) != NULL) 19949 return; 19950 break; 19951 19952 case TYPE_DECL: 19953 /* Don't emit stubs for types unless they are needed by other DIEs. */ 19954 if (TYPE_DECL_SUPPRESS_DEBUG (decl)) 19955 return; 19956 19957 /* Don't bother trying to generate any DIEs to represent any of the 19958 normal built-in types for the language we are compiling. */ 19959 if (DECL_IS_BUILTIN (decl)) 19960 return; 19961 19962 /* If we are in terse mode, don't generate any DIEs for types. */ 19963 if (debug_info_level <= DINFO_LEVEL_TERSE) 19964 return; 19965 19966 /* If we're a function-scope tag, initially use a parent of NULL; 19967 this will be fixed up in decls_for_scope. */ 19968 if (decl_function_context (decl)) 19969 context_die = NULL; 19970 19971 break; 19972 19973 default: 19974 return; 19975 } 19976 19977 gen_decl_die (decl, NULL, context_die); 19978 } 19979 19980 /* Write the debugging output for DECL. */ 19981 19982 static void 19983 dwarf2out_function_decl (tree decl) 19984 { 19985 dwarf2out_decl (decl); 19986 call_arg_locations = NULL; 19987 call_arg_loc_last = NULL; 19988 call_site_count = -1; 19989 tail_call_site_count = -1; 19990 VEC_free (dw_die_ref, heap, block_map); 19991 htab_empty (decl_loc_table); 19992 htab_empty (cached_dw_loc_list_table); 19993 } 19994 19995 /* Output a marker (i.e. a label) for the beginning of the generated code for 19996 a lexical block. */ 19997 19998 static void 19999 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED, 20000 unsigned int blocknum) 20001 { 20002 switch_to_section (current_function_section ()); 20003 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum); 20004 } 20005 20006 /* Output a marker (i.e. a label) for the end of the generated code for a 20007 lexical block. */ 20008 20009 static void 20010 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum) 20011 { 20012 switch_to_section (current_function_section ()); 20013 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum); 20014 } 20015 20016 /* Returns nonzero if it is appropriate not to emit any debugging 20017 information for BLOCK, because it doesn't contain any instructions. 20018 20019 Don't allow this for blocks with nested functions or local classes 20020 as we would end up with orphans, and in the presence of scheduling 20021 we may end up calling them anyway. */ 20022 20023 static bool 20024 dwarf2out_ignore_block (const_tree block) 20025 { 20026 tree decl; 20027 unsigned int i; 20028 20029 for (decl = BLOCK_VARS (block); decl; decl = DECL_CHAIN (decl)) 20030 if (TREE_CODE (decl) == FUNCTION_DECL 20031 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))) 20032 return 0; 20033 for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++) 20034 { 20035 decl = BLOCK_NONLOCALIZED_VAR (block, i); 20036 if (TREE_CODE (decl) == FUNCTION_DECL 20037 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))) 20038 return 0; 20039 } 20040 20041 return 1; 20042 } 20043 20044 /* Hash table routines for file_hash. */ 20045 20046 static int 20047 file_table_eq (const void *p1_p, const void *p2_p) 20048 { 20049 const struct dwarf_file_data *const p1 = 20050 (const struct dwarf_file_data *) p1_p; 20051 const char *const p2 = (const char *) p2_p; 20052 return filename_cmp (p1->filename, p2) == 0; 20053 } 20054 20055 static hashval_t 20056 file_table_hash (const void *p_p) 20057 { 20058 const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p; 20059 return htab_hash_string (p->filename); 20060 } 20061 20062 /* Lookup FILE_NAME (in the list of filenames that we know about here in 20063 dwarf2out.c) and return its "index". The index of each (known) filename is 20064 just a unique number which is associated with only that one filename. We 20065 need such numbers for the sake of generating labels (in the .debug_sfnames 20066 section) and references to those files numbers (in the .debug_srcinfo 20067 and.debug_macinfo sections). If the filename given as an argument is not 20068 found in our current list, add it to the list and assign it the next 20069 available unique index number. In order to speed up searches, we remember 20070 the index of the filename was looked up last. This handles the majority of 20071 all searches. */ 20072 20073 static struct dwarf_file_data * 20074 lookup_filename (const char *file_name) 20075 { 20076 void ** slot; 20077 struct dwarf_file_data * created; 20078 20079 /* Check to see if the file name that was searched on the previous 20080 call matches this file name. If so, return the index. */ 20081 if (file_table_last_lookup 20082 && (file_name == file_table_last_lookup->filename 20083 || filename_cmp (file_table_last_lookup->filename, file_name) == 0)) 20084 return file_table_last_lookup; 20085 20086 /* Didn't match the previous lookup, search the table. */ 20087 slot = htab_find_slot_with_hash (file_table, file_name, 20088 htab_hash_string (file_name), INSERT); 20089 if (*slot) 20090 return (struct dwarf_file_data *) *slot; 20091 20092 created = ggc_alloc_dwarf_file_data (); 20093 created->filename = file_name; 20094 created->emitted_number = 0; 20095 *slot = created; 20096 return created; 20097 } 20098 20099 /* If the assembler will construct the file table, then translate the compiler 20100 internal file table number into the assembler file table number, and emit 20101 a .file directive if we haven't already emitted one yet. The file table 20102 numbers are different because we prune debug info for unused variables and 20103 types, which may include filenames. */ 20104 20105 static int 20106 maybe_emit_file (struct dwarf_file_data * fd) 20107 { 20108 if (! fd->emitted_number) 20109 { 20110 if (last_emitted_file) 20111 fd->emitted_number = last_emitted_file->emitted_number + 1; 20112 else 20113 fd->emitted_number = 1; 20114 last_emitted_file = fd; 20115 20116 if (DWARF2_ASM_LINE_DEBUG_INFO) 20117 { 20118 fprintf (asm_out_file, "\t.file %u ", fd->emitted_number); 20119 output_quoted_string (asm_out_file, 20120 remap_debug_filename (fd->filename)); 20121 fputc ('\n', asm_out_file); 20122 } 20123 } 20124 20125 return fd->emitted_number; 20126 } 20127 20128 /* Schedule generation of a DW_AT_const_value attribute to DIE. 20129 That generation should happen after function debug info has been 20130 generated. The value of the attribute is the constant value of ARG. */ 20131 20132 static void 20133 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg) 20134 { 20135 die_arg_entry entry; 20136 20137 if (!die || !arg) 20138 return; 20139 20140 if (!tmpl_value_parm_die_table) 20141 tmpl_value_parm_die_table 20142 = VEC_alloc (die_arg_entry, gc, 32); 20143 20144 entry.die = die; 20145 entry.arg = arg; 20146 VEC_safe_push (die_arg_entry, gc, 20147 tmpl_value_parm_die_table, 20148 &entry); 20149 } 20150 20151 /* Return TRUE if T is an instance of generic type, FALSE 20152 otherwise. */ 20153 20154 static bool 20155 generic_type_p (tree t) 20156 { 20157 if (t == NULL_TREE || !TYPE_P (t)) 20158 return false; 20159 return lang_hooks.get_innermost_generic_parms (t) != NULL_TREE; 20160 } 20161 20162 /* Schedule the generation of the generic parameter dies for the 20163 instance of generic type T. The proper generation itself is later 20164 done by gen_scheduled_generic_parms_dies. */ 20165 20166 static void 20167 schedule_generic_params_dies_gen (tree t) 20168 { 20169 if (!generic_type_p (t)) 20170 return; 20171 20172 if (generic_type_instances == NULL) 20173 generic_type_instances = VEC_alloc (tree, gc, 256); 20174 20175 VEC_safe_push (tree, gc, generic_type_instances, t); 20176 } 20177 20178 /* Add a DW_AT_const_value attribute to DIEs that were scheduled 20179 by append_entry_to_tmpl_value_parm_die_table. This function must 20180 be called after function DIEs have been generated. */ 20181 20182 static void 20183 gen_remaining_tmpl_value_param_die_attribute (void) 20184 { 20185 if (tmpl_value_parm_die_table) 20186 { 20187 unsigned i; 20188 die_arg_entry *e; 20189 20190 FOR_EACH_VEC_ELT (die_arg_entry, tmpl_value_parm_die_table, i, e) 20191 tree_add_const_value_attribute (e->die, e->arg); 20192 } 20193 } 20194 20195 /* Generate generic parameters DIEs for instances of generic types 20196 that have been previously scheduled by 20197 schedule_generic_params_dies_gen. This function must be called 20198 after all the types of the CU have been laid out. */ 20199 20200 static void 20201 gen_scheduled_generic_parms_dies (void) 20202 { 20203 unsigned i; 20204 tree t; 20205 20206 if (generic_type_instances == NULL) 20207 return; 20208 20209 FOR_EACH_VEC_ELT (tree, generic_type_instances, i, t) 20210 gen_generic_params_dies (t); 20211 } 20212 20213 20214 /* Replace DW_AT_name for the decl with name. */ 20215 20216 static void 20217 dwarf2out_set_name (tree decl, tree name) 20218 { 20219 dw_die_ref die; 20220 dw_attr_ref attr; 20221 const char *dname; 20222 20223 die = TYPE_SYMTAB_DIE (decl); 20224 if (!die) 20225 return; 20226 20227 dname = dwarf2_name (name, 0); 20228 if (!dname) 20229 return; 20230 20231 attr = get_AT (die, DW_AT_name); 20232 if (attr) 20233 { 20234 struct indirect_string_node *node; 20235 20236 node = find_AT_string (dname); 20237 /* replace the string. */ 20238 attr->dw_attr_val.v.val_str = node; 20239 } 20240 20241 else 20242 add_name_attribute (die, dname); 20243 } 20244 20245 /* Called by the final INSN scan whenever we see a var location. We 20246 use it to drop labels in the right places, and throw the location in 20247 our lookup table. */ 20248 20249 static void 20250 dwarf2out_var_location (rtx loc_note) 20251 { 20252 char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2]; 20253 struct var_loc_node *newloc; 20254 rtx next_real, next_note; 20255 static const char *last_label; 20256 static const char *last_postcall_label; 20257 static bool last_in_cold_section_p; 20258 static rtx expected_next_loc_note; 20259 tree decl; 20260 bool var_loc_p; 20261 20262 if (!NOTE_P (loc_note)) 20263 { 20264 if (CALL_P (loc_note)) 20265 { 20266 call_site_count++; 20267 if (SIBLING_CALL_P (loc_note)) 20268 tail_call_site_count++; 20269 } 20270 return; 20271 } 20272 20273 var_loc_p = NOTE_KIND (loc_note) == NOTE_INSN_VAR_LOCATION; 20274 if (var_loc_p && !DECL_P (NOTE_VAR_LOCATION_DECL (loc_note))) 20275 return; 20276 20277 /* Optimize processing a large consecutive sequence of location 20278 notes so we don't spend too much time in next_real_insn. If the 20279 next insn is another location note, remember the next_real_insn 20280 calculation for next time. */ 20281 next_real = cached_next_real_insn; 20282 if (next_real) 20283 { 20284 if (expected_next_loc_note != loc_note) 20285 next_real = NULL_RTX; 20286 } 20287 20288 next_note = NEXT_INSN (loc_note); 20289 if (! next_note 20290 || INSN_DELETED_P (next_note) 20291 || GET_CODE (next_note) != NOTE 20292 || (NOTE_KIND (next_note) != NOTE_INSN_VAR_LOCATION 20293 && NOTE_KIND (next_note) != NOTE_INSN_CALL_ARG_LOCATION)) 20294 next_note = NULL_RTX; 20295 20296 if (! next_real) 20297 next_real = next_real_insn (loc_note); 20298 20299 if (next_note) 20300 { 20301 expected_next_loc_note = next_note; 20302 cached_next_real_insn = next_real; 20303 } 20304 else 20305 cached_next_real_insn = NULL_RTX; 20306 20307 /* If there are no instructions which would be affected by this note, 20308 don't do anything. */ 20309 if (var_loc_p 20310 && next_real == NULL_RTX 20311 && !NOTE_DURING_CALL_P (loc_note)) 20312 return; 20313 20314 if (next_real == NULL_RTX) 20315 next_real = get_last_insn (); 20316 20317 /* If there were any real insns between note we processed last time 20318 and this note (or if it is the first note), clear 20319 last_{,postcall_}label so that they are not reused this time. */ 20320 if (last_var_location_insn == NULL_RTX 20321 || last_var_location_insn != next_real 20322 || last_in_cold_section_p != in_cold_section_p) 20323 { 20324 last_label = NULL; 20325 last_postcall_label = NULL; 20326 } 20327 20328 if (var_loc_p) 20329 { 20330 decl = NOTE_VAR_LOCATION_DECL (loc_note); 20331 newloc = add_var_loc_to_decl (decl, loc_note, 20332 NOTE_DURING_CALL_P (loc_note) 20333 ? last_postcall_label : last_label); 20334 if (newloc == NULL) 20335 return; 20336 } 20337 else 20338 { 20339 decl = NULL_TREE; 20340 newloc = NULL; 20341 } 20342 20343 /* If there were no real insns between note we processed last time 20344 and this note, use the label we emitted last time. Otherwise 20345 create a new label and emit it. */ 20346 if (last_label == NULL) 20347 { 20348 ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num); 20349 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num); 20350 loclabel_num++; 20351 last_label = ggc_strdup (loclabel); 20352 } 20353 20354 if (!var_loc_p) 20355 { 20356 struct call_arg_loc_node *ca_loc 20357 = ggc_alloc_cleared_call_arg_loc_node (); 20358 rtx prev = prev_real_insn (loc_note), x; 20359 ca_loc->call_arg_loc_note = loc_note; 20360 ca_loc->next = NULL; 20361 ca_loc->label = last_label; 20362 gcc_assert (prev 20363 && (CALL_P (prev) 20364 || (NONJUMP_INSN_P (prev) 20365 && GET_CODE (PATTERN (prev)) == SEQUENCE 20366 && CALL_P (XVECEXP (PATTERN (prev), 0, 0))))); 20367 if (!CALL_P (prev)) 20368 prev = XVECEXP (PATTERN (prev), 0, 0); 20369 ca_loc->tail_call_p = SIBLING_CALL_P (prev); 20370 x = PATTERN (prev); 20371 if (GET_CODE (x) == PARALLEL) 20372 x = XVECEXP (x, 0, 0); 20373 if (GET_CODE (x) == SET) 20374 x = SET_SRC (x); 20375 if (GET_CODE (x) == CALL && MEM_P (XEXP (x, 0))) 20376 { 20377 x = XEXP (XEXP (x, 0), 0); 20378 if (GET_CODE (x) == SYMBOL_REF 20379 && SYMBOL_REF_DECL (x) 20380 && TREE_CODE (SYMBOL_REF_DECL (x)) == FUNCTION_DECL) 20381 ca_loc->symbol_ref = x; 20382 } 20383 ca_loc->block = insn_scope (prev); 20384 if (call_arg_locations) 20385 call_arg_loc_last->next = ca_loc; 20386 else 20387 call_arg_locations = ca_loc; 20388 call_arg_loc_last = ca_loc; 20389 } 20390 else if (!NOTE_DURING_CALL_P (loc_note)) 20391 newloc->label = last_label; 20392 else 20393 { 20394 if (!last_postcall_label) 20395 { 20396 sprintf (loclabel, "%s-1", last_label); 20397 last_postcall_label = ggc_strdup (loclabel); 20398 } 20399 newloc->label = last_postcall_label; 20400 } 20401 20402 last_var_location_insn = next_real; 20403 last_in_cold_section_p = in_cold_section_p; 20404 } 20405 20406 /* Note in one location list that text section has changed. */ 20407 20408 static int 20409 var_location_switch_text_section_1 (void **slot, void *data ATTRIBUTE_UNUSED) 20410 { 20411 var_loc_list *list = (var_loc_list *) *slot; 20412 if (list->first) 20413 list->last_before_switch 20414 = list->last->next ? list->last->next : list->last; 20415 return 1; 20416 } 20417 20418 /* Note in all location lists that text section has changed. */ 20419 20420 static void 20421 var_location_switch_text_section (void) 20422 { 20423 if (decl_loc_table == NULL) 20424 return; 20425 20426 htab_traverse (decl_loc_table, var_location_switch_text_section_1, NULL); 20427 } 20428 20429 /* Create a new line number table. */ 20430 20431 static dw_line_info_table * 20432 new_line_info_table (void) 20433 { 20434 dw_line_info_table *table; 20435 20436 table = ggc_alloc_cleared_dw_line_info_table_struct (); 20437 table->file_num = 1; 20438 table->line_num = 1; 20439 table->is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START; 20440 20441 return table; 20442 } 20443 20444 /* Lookup the "current" table into which we emit line info, so 20445 that we don't have to do it for every source line. */ 20446 20447 static void 20448 set_cur_line_info_table (section *sec) 20449 { 20450 dw_line_info_table *table; 20451 20452 if (sec == text_section) 20453 table = text_section_line_info; 20454 else if (sec == cold_text_section) 20455 { 20456 table = cold_text_section_line_info; 20457 if (!table) 20458 { 20459 cold_text_section_line_info = table = new_line_info_table (); 20460 table->end_label = cold_end_label; 20461 } 20462 } 20463 else 20464 { 20465 const char *end_label; 20466 20467 if (flag_reorder_blocks_and_partition) 20468 { 20469 if (in_cold_section_p) 20470 end_label = crtl->subsections.cold_section_end_label; 20471 else 20472 end_label = crtl->subsections.hot_section_end_label; 20473 } 20474 else 20475 { 20476 char label[MAX_ARTIFICIAL_LABEL_BYTES]; 20477 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL, 20478 current_function_funcdef_no); 20479 end_label = ggc_strdup (label); 20480 } 20481 20482 table = new_line_info_table (); 20483 table->end_label = end_label; 20484 20485 VEC_safe_push (dw_line_info_table_p, gc, separate_line_info, table); 20486 } 20487 20488 if (DWARF2_ASM_LINE_DEBUG_INFO) 20489 table->is_stmt = (cur_line_info_table 20490 ? cur_line_info_table->is_stmt 20491 : DWARF_LINE_DEFAULT_IS_STMT_START); 20492 cur_line_info_table = table; 20493 } 20494 20495 20496 /* We need to reset the locations at the beginning of each 20497 function. We can't do this in the end_function hook, because the 20498 declarations that use the locations won't have been output when 20499 that hook is called. Also compute have_multiple_function_sections here. */ 20500 20501 static void 20502 dwarf2out_begin_function (tree fun) 20503 { 20504 section *sec = function_section (fun); 20505 20506 if (sec != text_section) 20507 have_multiple_function_sections = true; 20508 20509 if (flag_reorder_blocks_and_partition && !cold_text_section) 20510 { 20511 gcc_assert (current_function_decl == fun); 20512 cold_text_section = unlikely_text_section (); 20513 switch_to_section (cold_text_section); 20514 ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label); 20515 switch_to_section (sec); 20516 } 20517 20518 dwarf2out_note_section_used (); 20519 call_site_count = 0; 20520 tail_call_site_count = 0; 20521 20522 set_cur_line_info_table (sec); 20523 } 20524 20525 /* Add OPCODE+VAL as an entry at the end of the opcode array in TABLE. */ 20526 20527 static void 20528 push_dw_line_info_entry (dw_line_info_table *table, 20529 enum dw_line_info_opcode opcode, unsigned int val) 20530 { 20531 dw_line_info_entry e; 20532 e.opcode = opcode; 20533 e.val = val; 20534 VEC_safe_push (dw_line_info_entry, gc, table->entries, &e); 20535 } 20536 20537 /* Output a label to mark the beginning of a source code line entry 20538 and record information relating to this source line, in 20539 'line_info_table' for later output of the .debug_line section. */ 20540 /* ??? The discriminator parameter ought to be unsigned. */ 20541 20542 static void 20543 dwarf2out_source_line (unsigned int line, const char *filename, 20544 int discriminator, bool is_stmt) 20545 { 20546 unsigned int file_num; 20547 dw_line_info_table *table; 20548 20549 if (debug_info_level < DINFO_LEVEL_NORMAL || line == 0) 20550 return; 20551 20552 /* The discriminator column was added in dwarf4. Simplify the below 20553 by simply removing it if we're not supposed to output it. */ 20554 if (dwarf_version < 4 && dwarf_strict) 20555 discriminator = 0; 20556 20557 table = cur_line_info_table; 20558 file_num = maybe_emit_file (lookup_filename (filename)); 20559 20560 /* ??? TODO: Elide duplicate line number entries. Traditionally, 20561 the debugger has used the second (possibly duplicate) line number 20562 at the beginning of the function to mark the end of the prologue. 20563 We could eliminate any other duplicates within the function. For 20564 Dwarf3, we ought to include the DW_LNS_set_prologue_end mark in 20565 that second line number entry. */ 20566 /* Recall that this end-of-prologue indication is *not* the same thing 20567 as the end_prologue debug hook. The NOTE_INSN_PROLOGUE_END note, 20568 to which the hook corresponds, follows the last insn that was 20569 emitted by gen_prologue. What we need is to preceed the first insn 20570 that had been emitted after NOTE_INSN_FUNCTION_BEG, i.e. the first 20571 insn that corresponds to something the user wrote. These may be 20572 very different locations once scheduling is enabled. */ 20573 20574 if (0 && file_num == table->file_num 20575 && line == table->line_num 20576 && discriminator == table->discrim_num 20577 && is_stmt == table->is_stmt) 20578 return; 20579 20580 switch_to_section (current_function_section ()); 20581 20582 /* If requested, emit something human-readable. */ 20583 if (flag_debug_asm) 20584 fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START, filename, line); 20585 20586 if (DWARF2_ASM_LINE_DEBUG_INFO) 20587 { 20588 /* Emit the .loc directive understood by GNU as. */ 20589 /* "\t.loc %u %u 0 is_stmt %u discriminator %u", 20590 file_num, line, is_stmt, discriminator */ 20591 fputs ("\t.loc ", asm_out_file); 20592 fprint_ul (asm_out_file, file_num); 20593 putc (' ', asm_out_file); 20594 fprint_ul (asm_out_file, line); 20595 putc (' ', asm_out_file); 20596 putc ('0', asm_out_file); 20597 20598 if (is_stmt != table->is_stmt) 20599 { 20600 fputs (" is_stmt ", asm_out_file); 20601 putc (is_stmt ? '1' : '0', asm_out_file); 20602 } 20603 if (SUPPORTS_DISCRIMINATOR && discriminator != 0) 20604 { 20605 gcc_assert (discriminator > 0); 20606 fputs (" discriminator ", asm_out_file); 20607 fprint_ul (asm_out_file, (unsigned long) discriminator); 20608 } 20609 putc ('\n', asm_out_file); 20610 } 20611 else 20612 { 20613 unsigned int label_num = ++line_info_label_num; 20614 20615 targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL, label_num); 20616 20617 push_dw_line_info_entry (table, LI_set_address, label_num); 20618 if (file_num != table->file_num) 20619 push_dw_line_info_entry (table, LI_set_file, file_num); 20620 if (discriminator != table->discrim_num) 20621 push_dw_line_info_entry (table, LI_set_discriminator, discriminator); 20622 if (is_stmt != table->is_stmt) 20623 push_dw_line_info_entry (table, LI_negate_stmt, 0); 20624 push_dw_line_info_entry (table, LI_set_line, line); 20625 } 20626 20627 table->file_num = file_num; 20628 table->line_num = line; 20629 table->discrim_num = discriminator; 20630 table->is_stmt = is_stmt; 20631 table->in_use = true; 20632 } 20633 20634 /* Record the beginning of a new source file. */ 20635 20636 static void 20637 dwarf2out_start_source_file (unsigned int lineno, const char *filename) 20638 { 20639 if (flag_eliminate_dwarf2_dups && ! use_debug_types) 20640 { 20641 /* Record the beginning of the file for break_out_includes. */ 20642 dw_die_ref bincl_die; 20643 20644 bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die (), NULL); 20645 add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename)); 20646 } 20647 20648 if (debug_info_level >= DINFO_LEVEL_VERBOSE) 20649 { 20650 macinfo_entry e; 20651 e.code = DW_MACINFO_start_file; 20652 e.lineno = lineno; 20653 e.info = ggc_strdup (filename); 20654 VEC_safe_push (macinfo_entry, gc, macinfo_table, &e); 20655 } 20656 } 20657 20658 /* Record the end of a source file. */ 20659 20660 static void 20661 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED) 20662 { 20663 if (flag_eliminate_dwarf2_dups && ! use_debug_types) 20664 /* Record the end of the file for break_out_includes. */ 20665 new_die (DW_TAG_GNU_EINCL, comp_unit_die (), NULL); 20666 20667 if (debug_info_level >= DINFO_LEVEL_VERBOSE) 20668 { 20669 macinfo_entry e; 20670 e.code = DW_MACINFO_end_file; 20671 e.lineno = lineno; 20672 e.info = NULL; 20673 VEC_safe_push (macinfo_entry, gc, macinfo_table, &e); 20674 } 20675 } 20676 20677 /* Called from debug_define in toplev.c. The `buffer' parameter contains 20678 the tail part of the directive line, i.e. the part which is past the 20679 initial whitespace, #, whitespace, directive-name, whitespace part. */ 20680 20681 static void 20682 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED, 20683 const char *buffer ATTRIBUTE_UNUSED) 20684 { 20685 if (debug_info_level >= DINFO_LEVEL_VERBOSE) 20686 { 20687 macinfo_entry e; 20688 /* Insert a dummy first entry to be able to optimize the whole 20689 predefined macro block using DW_MACRO_GNU_transparent_include. */ 20690 if (VEC_empty (macinfo_entry, macinfo_table) && lineno <= 1) 20691 { 20692 e.code = 0; 20693 e.lineno = 0; 20694 e.info = NULL; 20695 VEC_safe_push (macinfo_entry, gc, macinfo_table, &e); 20696 } 20697 e.code = DW_MACINFO_define; 20698 e.lineno = lineno; 20699 e.info = ggc_strdup (buffer); 20700 VEC_safe_push (macinfo_entry, gc, macinfo_table, &e); 20701 } 20702 } 20703 20704 /* Called from debug_undef in toplev.c. The `buffer' parameter contains 20705 the tail part of the directive line, i.e. the part which is past the 20706 initial whitespace, #, whitespace, directive-name, whitespace part. */ 20707 20708 static void 20709 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED, 20710 const char *buffer ATTRIBUTE_UNUSED) 20711 { 20712 if (debug_info_level >= DINFO_LEVEL_VERBOSE) 20713 { 20714 macinfo_entry e; 20715 /* Insert a dummy first entry to be able to optimize the whole 20716 predefined macro block using DW_MACRO_GNU_transparent_include. */ 20717 if (VEC_empty (macinfo_entry, macinfo_table) && lineno <= 1) 20718 { 20719 e.code = 0; 20720 e.lineno = 0; 20721 e.info = NULL; 20722 VEC_safe_push (macinfo_entry, gc, macinfo_table, &e); 20723 } 20724 e.code = DW_MACINFO_undef; 20725 e.lineno = lineno; 20726 e.info = ggc_strdup (buffer); 20727 VEC_safe_push (macinfo_entry, gc, macinfo_table, &e); 20728 } 20729 } 20730 20731 /* Routines to manipulate hash table of CUs. */ 20732 20733 static hashval_t 20734 htab_macinfo_hash (const void *of) 20735 { 20736 const macinfo_entry *const entry = 20737 (const macinfo_entry *) of; 20738 20739 return htab_hash_string (entry->info); 20740 } 20741 20742 static int 20743 htab_macinfo_eq (const void *of1, const void *of2) 20744 { 20745 const macinfo_entry *const entry1 = (const macinfo_entry *) of1; 20746 const macinfo_entry *const entry2 = (const macinfo_entry *) of2; 20747 20748 return !strcmp (entry1->info, entry2->info); 20749 } 20750 20751 /* Output a single .debug_macinfo entry. */ 20752 20753 static void 20754 output_macinfo_op (macinfo_entry *ref) 20755 { 20756 int file_num; 20757 size_t len; 20758 struct indirect_string_node *node; 20759 char label[MAX_ARTIFICIAL_LABEL_BYTES]; 20760 struct dwarf_file_data *fd; 20761 20762 switch (ref->code) 20763 { 20764 case DW_MACINFO_start_file: 20765 fd = lookup_filename (ref->info); 20766 file_num = maybe_emit_file (fd); 20767 dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file"); 20768 dw2_asm_output_data_uleb128 (ref->lineno, 20769 "Included from line number %lu", 20770 (unsigned long) ref->lineno); 20771 dw2_asm_output_data_uleb128 (file_num, "file %s", ref->info); 20772 break; 20773 case DW_MACINFO_end_file: 20774 dw2_asm_output_data (1, DW_MACINFO_end_file, "End file"); 20775 break; 20776 case DW_MACINFO_define: 20777 case DW_MACINFO_undef: 20778 len = strlen (ref->info) + 1; 20779 if (!dwarf_strict 20780 && len > DWARF_OFFSET_SIZE 20781 && !DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 20782 && (debug_str_section->common.flags & SECTION_MERGE) != 0) 20783 { 20784 ref->code = ref->code == DW_MACINFO_define 20785 ? DW_MACRO_GNU_define_indirect 20786 : DW_MACRO_GNU_undef_indirect; 20787 output_macinfo_op (ref); 20788 return; 20789 } 20790 dw2_asm_output_data (1, ref->code, 20791 ref->code == DW_MACINFO_define 20792 ? "Define macro" : "Undefine macro"); 20793 dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu", 20794 (unsigned long) ref->lineno); 20795 dw2_asm_output_nstring (ref->info, -1, "The macro"); 20796 break; 20797 case DW_MACRO_GNU_define_indirect: 20798 case DW_MACRO_GNU_undef_indirect: 20799 node = find_AT_string (ref->info); 20800 if (node->form != DW_FORM_strp) 20801 { 20802 char label[32]; 20803 ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter); 20804 ++dw2_string_counter; 20805 node->label = xstrdup (label); 20806 node->form = DW_FORM_strp; 20807 } 20808 dw2_asm_output_data (1, ref->code, 20809 ref->code == DW_MACRO_GNU_define_indirect 20810 ? "Define macro indirect" 20811 : "Undefine macro indirect"); 20812 dw2_asm_output_data_uleb128 (ref->lineno, "At line number %lu", 20813 (unsigned long) ref->lineno); 20814 dw2_asm_output_offset (DWARF_OFFSET_SIZE, node->label, 20815 debug_str_section, "The macro: \"%s\"", 20816 ref->info); 20817 break; 20818 case DW_MACRO_GNU_transparent_include: 20819 dw2_asm_output_data (1, ref->code, "Transparent include"); 20820 ASM_GENERATE_INTERNAL_LABEL (label, 20821 DEBUG_MACRO_SECTION_LABEL, ref->lineno); 20822 dw2_asm_output_offset (DWARF_OFFSET_SIZE, label, NULL, NULL); 20823 break; 20824 default: 20825 fprintf (asm_out_file, "%s unrecognized macinfo code %lu\n", 20826 ASM_COMMENT_START, (unsigned long) ref->code); 20827 break; 20828 } 20829 } 20830 20831 /* Attempt to make a sequence of define/undef macinfo ops shareable with 20832 other compilation unit .debug_macinfo sections. IDX is the first 20833 index of a define/undef, return the number of ops that should be 20834 emitted in a comdat .debug_macinfo section and emit 20835 a DW_MACRO_GNU_transparent_include entry referencing it. 20836 If the define/undef entry should be emitted normally, return 0. */ 20837 20838 static unsigned 20839 optimize_macinfo_range (unsigned int idx, VEC (macinfo_entry, gc) *files, 20840 htab_t *macinfo_htab) 20841 { 20842 macinfo_entry *first, *second, *cur, *inc; 20843 char linebuf[sizeof (HOST_WIDE_INT) * 3 + 1]; 20844 unsigned char checksum[16]; 20845 struct md5_ctx ctx; 20846 char *grp_name, *tail; 20847 const char *base; 20848 unsigned int i, count, encoded_filename_len, linebuf_len; 20849 void **slot; 20850 20851 first = VEC_index (macinfo_entry, macinfo_table, idx); 20852 second = VEC_index (macinfo_entry, macinfo_table, idx + 1); 20853 20854 /* Optimize only if there are at least two consecutive define/undef ops, 20855 and either all of them are before first DW_MACINFO_start_file 20856 with lineno {0,1} (i.e. predefined macro block), or all of them are 20857 in some included header file. */ 20858 if (second->code != DW_MACINFO_define && second->code != DW_MACINFO_undef) 20859 return 0; 20860 if (VEC_empty (macinfo_entry, files)) 20861 { 20862 if (first->lineno > 1 || second->lineno > 1) 20863 return 0; 20864 } 20865 else if (first->lineno == 0) 20866 return 0; 20867 20868 /* Find the last define/undef entry that can be grouped together 20869 with first and at the same time compute md5 checksum of their 20870 codes, linenumbers and strings. */ 20871 md5_init_ctx (&ctx); 20872 for (i = idx; VEC_iterate (macinfo_entry, macinfo_table, i, cur); i++) 20873 if (cur->code != DW_MACINFO_define && cur->code != DW_MACINFO_undef) 20874 break; 20875 else if (VEC_empty (macinfo_entry, files) && cur->lineno > 1) 20876 break; 20877 else 20878 { 20879 unsigned char code = cur->code; 20880 md5_process_bytes (&code, 1, &ctx); 20881 checksum_uleb128 (cur->lineno, &ctx); 20882 md5_process_bytes (cur->info, strlen (cur->info) + 1, &ctx); 20883 } 20884 md5_finish_ctx (&ctx, checksum); 20885 count = i - idx; 20886 20887 /* From the containing include filename (if any) pick up just 20888 usable characters from its basename. */ 20889 if (VEC_empty (macinfo_entry, files)) 20890 base = ""; 20891 else 20892 base = lbasename (VEC_last (macinfo_entry, files)->info); 20893 for (encoded_filename_len = 0, i = 0; base[i]; i++) 20894 if (ISIDNUM (base[i]) || base[i] == '.') 20895 encoded_filename_len++; 20896 /* Count . at the end. */ 20897 if (encoded_filename_len) 20898 encoded_filename_len++; 20899 20900 sprintf (linebuf, HOST_WIDE_INT_PRINT_UNSIGNED, first->lineno); 20901 linebuf_len = strlen (linebuf); 20902 20903 /* The group name format is: wmN.[<encoded filename>.]<lineno>.<md5sum> */ 20904 grp_name = XALLOCAVEC (char, 4 + encoded_filename_len + linebuf_len + 1 20905 + 16 * 2 + 1); 20906 memcpy (grp_name, DWARF_OFFSET_SIZE == 4 ? "wm4." : "wm8.", 4); 20907 tail = grp_name + 4; 20908 if (encoded_filename_len) 20909 { 20910 for (i = 0; base[i]; i++) 20911 if (ISIDNUM (base[i]) || base[i] == '.') 20912 *tail++ = base[i]; 20913 *tail++ = '.'; 20914 } 20915 memcpy (tail, linebuf, linebuf_len); 20916 tail += linebuf_len; 20917 *tail++ = '.'; 20918 for (i = 0; i < 16; i++) 20919 sprintf (tail + i * 2, "%02x", checksum[i] & 0xff); 20920 20921 /* Construct a macinfo_entry for DW_MACRO_GNU_transparent_include 20922 in the empty vector entry before the first define/undef. */ 20923 inc = VEC_index (macinfo_entry, macinfo_table, idx - 1); 20924 inc->code = DW_MACRO_GNU_transparent_include; 20925 inc->lineno = 0; 20926 inc->info = ggc_strdup (grp_name); 20927 if (*macinfo_htab == NULL) 20928 *macinfo_htab = htab_create (10, htab_macinfo_hash, htab_macinfo_eq, NULL); 20929 /* Avoid emitting duplicates. */ 20930 slot = htab_find_slot (*macinfo_htab, inc, INSERT); 20931 if (*slot != NULL) 20932 { 20933 inc->code = 0; 20934 inc->info = NULL; 20935 /* If such an entry has been used before, just emit 20936 a DW_MACRO_GNU_transparent_include op. */ 20937 inc = (macinfo_entry *) *slot; 20938 output_macinfo_op (inc); 20939 /* And clear all macinfo_entry in the range to avoid emitting them 20940 in the second pass. */ 20941 for (i = idx; 20942 VEC_iterate (macinfo_entry, macinfo_table, i, cur) 20943 && i < idx + count; 20944 i++) 20945 { 20946 cur->code = 0; 20947 cur->info = NULL; 20948 } 20949 } 20950 else 20951 { 20952 *slot = inc; 20953 inc->lineno = htab_elements (*macinfo_htab); 20954 output_macinfo_op (inc); 20955 } 20956 return count; 20957 } 20958 20959 /* Output macinfo section(s). */ 20960 20961 static void 20962 output_macinfo (void) 20963 { 20964 unsigned i; 20965 unsigned long length = VEC_length (macinfo_entry, macinfo_table); 20966 macinfo_entry *ref; 20967 VEC (macinfo_entry, gc) *files = NULL; 20968 htab_t macinfo_htab = NULL; 20969 20970 if (! length) 20971 return; 20972 20973 /* output_macinfo* uses these interchangeably. */ 20974 gcc_assert ((int) DW_MACINFO_define == (int) DW_MACRO_GNU_define 20975 && (int) DW_MACINFO_undef == (int) DW_MACRO_GNU_undef 20976 && (int) DW_MACINFO_start_file == (int) DW_MACRO_GNU_start_file 20977 && (int) DW_MACINFO_end_file == (int) DW_MACRO_GNU_end_file); 20978 20979 /* For .debug_macro emit the section header. */ 20980 if (!dwarf_strict) 20981 { 20982 dw2_asm_output_data (2, 4, "DWARF macro version number"); 20983 if (DWARF_OFFSET_SIZE == 8) 20984 dw2_asm_output_data (1, 3, "Flags: 64-bit, lineptr present"); 20985 else 20986 dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present"); 20987 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_line_section_label, 20988 debug_line_section, NULL); 20989 } 20990 20991 /* In the first loop, it emits the primary .debug_macinfo section 20992 and after each emitted op the macinfo_entry is cleared. 20993 If a longer range of define/undef ops can be optimized using 20994 DW_MACRO_GNU_transparent_include, the 20995 DW_MACRO_GNU_transparent_include op is emitted and kept in 20996 the vector before the first define/undef in the range and the 20997 whole range of define/undef ops is not emitted and kept. */ 20998 for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++) 20999 { 21000 switch (ref->code) 21001 { 21002 case DW_MACINFO_start_file: 21003 VEC_safe_push (macinfo_entry, gc, files, ref); 21004 break; 21005 case DW_MACINFO_end_file: 21006 if (!VEC_empty (macinfo_entry, files)) 21007 VEC_pop (macinfo_entry, files); 21008 break; 21009 case DW_MACINFO_define: 21010 case DW_MACINFO_undef: 21011 if (!dwarf_strict 21012 && HAVE_COMDAT_GROUP 21013 && VEC_length (macinfo_entry, files) != 1 21014 && i > 0 21015 && i + 1 < length 21016 && VEC_index (macinfo_entry, macinfo_table, i - 1)->code == 0) 21017 { 21018 unsigned count = optimize_macinfo_range (i, files, &macinfo_htab); 21019 if (count) 21020 { 21021 i += count - 1; 21022 continue; 21023 } 21024 } 21025 break; 21026 case 0: 21027 /* A dummy entry may be inserted at the beginning to be able 21028 to optimize the whole block of predefined macros. */ 21029 if (i == 0) 21030 continue; 21031 default: 21032 break; 21033 } 21034 output_macinfo_op (ref); 21035 ref->info = NULL; 21036 ref->code = 0; 21037 } 21038 21039 if (macinfo_htab == NULL) 21040 return; 21041 21042 htab_delete (macinfo_htab); 21043 21044 /* If any DW_MACRO_GNU_transparent_include were used, on those 21045 DW_MACRO_GNU_transparent_include entries terminate the 21046 current chain and switch to a new comdat .debug_macinfo 21047 section and emit the define/undef entries within it. */ 21048 for (i = 0; VEC_iterate (macinfo_entry, macinfo_table, i, ref); i++) 21049 switch (ref->code) 21050 { 21051 case 0: 21052 continue; 21053 case DW_MACRO_GNU_transparent_include: 21054 { 21055 char label[MAX_ARTIFICIAL_LABEL_BYTES]; 21056 tree comdat_key = get_identifier (ref->info); 21057 /* Terminate the previous .debug_macinfo section. */ 21058 dw2_asm_output_data (1, 0, "End compilation unit"); 21059 targetm.asm_out.named_section (DEBUG_MACRO_SECTION, 21060 SECTION_DEBUG 21061 | SECTION_LINKONCE, 21062 comdat_key); 21063 ASM_GENERATE_INTERNAL_LABEL (label, 21064 DEBUG_MACRO_SECTION_LABEL, 21065 ref->lineno); 21066 ASM_OUTPUT_LABEL (asm_out_file, label); 21067 ref->code = 0; 21068 ref->info = NULL; 21069 dw2_asm_output_data (2, 4, "DWARF macro version number"); 21070 if (DWARF_OFFSET_SIZE == 8) 21071 dw2_asm_output_data (1, 1, "Flags: 64-bit"); 21072 else 21073 dw2_asm_output_data (1, 0, "Flags: 32-bit"); 21074 } 21075 break; 21076 case DW_MACINFO_define: 21077 case DW_MACINFO_undef: 21078 output_macinfo_op (ref); 21079 ref->code = 0; 21080 ref->info = NULL; 21081 break; 21082 default: 21083 gcc_unreachable (); 21084 } 21085 } 21086 21087 /* Set up for Dwarf output at the start of compilation. */ 21088 21089 static void 21090 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) 21091 { 21092 /* Allocate the file_table. */ 21093 file_table = htab_create_ggc (50, file_table_hash, 21094 file_table_eq, NULL); 21095 21096 /* Allocate the decl_die_table. */ 21097 decl_die_table = htab_create_ggc (10, decl_die_table_hash, 21098 decl_die_table_eq, NULL); 21099 21100 /* Allocate the decl_loc_table. */ 21101 decl_loc_table = htab_create_ggc (10, decl_loc_table_hash, 21102 decl_loc_table_eq, NULL); 21103 21104 /* Allocate the cached_dw_loc_list_table. */ 21105 cached_dw_loc_list_table 21106 = htab_create_ggc (10, cached_dw_loc_list_table_hash, 21107 cached_dw_loc_list_table_eq, NULL); 21108 21109 /* Allocate the initial hunk of the decl_scope_table. */ 21110 decl_scope_table = VEC_alloc (tree, gc, 256); 21111 21112 /* Allocate the initial hunk of the abbrev_die_table. */ 21113 abbrev_die_table = ggc_alloc_cleared_vec_dw_die_ref 21114 (ABBREV_DIE_TABLE_INCREMENT); 21115 abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT; 21116 /* Zero-th entry is allocated, but unused. */ 21117 abbrev_die_table_in_use = 1; 21118 21119 /* Allocate the pubtypes and pubnames vectors. */ 21120 pubname_table = VEC_alloc (pubname_entry, gc, 32); 21121 pubtype_table = VEC_alloc (pubname_entry, gc, 32); 21122 21123 incomplete_types = VEC_alloc (tree, gc, 64); 21124 21125 used_rtx_array = VEC_alloc (rtx, gc, 32); 21126 21127 debug_info_section = get_section (DEBUG_INFO_SECTION, 21128 SECTION_DEBUG, NULL); 21129 debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION, 21130 SECTION_DEBUG, NULL); 21131 debug_aranges_section = get_section (DEBUG_ARANGES_SECTION, 21132 SECTION_DEBUG, NULL); 21133 debug_macinfo_section = get_section (dwarf_strict 21134 ? DEBUG_MACINFO_SECTION 21135 : DEBUG_MACRO_SECTION, 21136 SECTION_DEBUG, NULL); 21137 debug_line_section = get_section (DEBUG_LINE_SECTION, 21138 SECTION_DEBUG, NULL); 21139 debug_loc_section = get_section (DEBUG_LOC_SECTION, 21140 SECTION_DEBUG, NULL); 21141 debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION, 21142 SECTION_DEBUG, NULL); 21143 debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION, 21144 SECTION_DEBUG, NULL); 21145 debug_str_section = get_section (DEBUG_STR_SECTION, 21146 DEBUG_STR_SECTION_FLAGS, NULL); 21147 debug_ranges_section = get_section (DEBUG_RANGES_SECTION, 21148 SECTION_DEBUG, NULL); 21149 debug_frame_section = get_section (DEBUG_FRAME_SECTION, 21150 SECTION_DEBUG, NULL); 21151 21152 ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0); 21153 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label, 21154 DEBUG_ABBREV_SECTION_LABEL, 0); 21155 ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0); 21156 ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label, 21157 COLD_TEXT_SECTION_LABEL, 0); 21158 ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0); 21159 21160 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label, 21161 DEBUG_INFO_SECTION_LABEL, 0); 21162 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label, 21163 DEBUG_LINE_SECTION_LABEL, 0); 21164 ASM_GENERATE_INTERNAL_LABEL (ranges_section_label, 21165 DEBUG_RANGES_SECTION_LABEL, 0); 21166 ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label, 21167 dwarf_strict 21168 ? DEBUG_MACINFO_SECTION_LABEL 21169 : DEBUG_MACRO_SECTION_LABEL, 0); 21170 21171 if (debug_info_level >= DINFO_LEVEL_VERBOSE) 21172 macinfo_table = VEC_alloc (macinfo_entry, gc, 64); 21173 21174 switch_to_section (text_section); 21175 ASM_OUTPUT_LABEL (asm_out_file, text_section_label); 21176 21177 /* Make sure the line number table for .text always exists. */ 21178 text_section_line_info = new_line_info_table (); 21179 text_section_line_info->end_label = text_end_label; 21180 } 21181 21182 /* Called before cgraph_optimize starts outputtting functions, variables 21183 and toplevel asms into assembly. */ 21184 21185 static void 21186 dwarf2out_assembly_start (void) 21187 { 21188 if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE 21189 && dwarf2out_do_cfi_asm () 21190 && (!(flag_unwind_tables || flag_exceptions) 21191 || targetm_common.except_unwind_info (&global_options) != UI_DWARF2)) 21192 fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n"); 21193 } 21194 21195 /* A helper function for dwarf2out_finish called through 21196 htab_traverse. Emit one queued .debug_str string. */ 21197 21198 static int 21199 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED) 21200 { 21201 struct indirect_string_node *node = (struct indirect_string_node *) *h; 21202 21203 if (node->form == DW_FORM_strp) 21204 { 21205 switch_to_section (debug_str_section); 21206 ASM_OUTPUT_LABEL (asm_out_file, node->label); 21207 assemble_string (node->str, strlen (node->str) + 1); 21208 } 21209 21210 return 1; 21211 } 21212 21213 #if ENABLE_ASSERT_CHECKING 21214 /* Verify that all marks are clear. */ 21215 21216 static void 21217 verify_marks_clear (dw_die_ref die) 21218 { 21219 dw_die_ref c; 21220 21221 gcc_assert (! die->die_mark); 21222 FOR_EACH_CHILD (die, c, verify_marks_clear (c)); 21223 } 21224 #endif /* ENABLE_ASSERT_CHECKING */ 21225 21226 /* Clear the marks for a die and its children. 21227 Be cool if the mark isn't set. */ 21228 21229 static void 21230 prune_unmark_dies (dw_die_ref die) 21231 { 21232 dw_die_ref c; 21233 21234 if (die->die_mark) 21235 die->die_mark = 0; 21236 FOR_EACH_CHILD (die, c, prune_unmark_dies (c)); 21237 } 21238 21239 /* Given DIE that we're marking as used, find any other dies 21240 it references as attributes and mark them as used. */ 21241 21242 static void 21243 prune_unused_types_walk_attribs (dw_die_ref die) 21244 { 21245 dw_attr_ref a; 21246 unsigned ix; 21247 21248 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 21249 { 21250 if (a->dw_attr_val.val_class == dw_val_class_die_ref) 21251 { 21252 /* A reference to another DIE. 21253 Make sure that it will get emitted. 21254 If it was broken out into a comdat group, don't follow it. */ 21255 if (! use_debug_types 21256 || a->dw_attr == DW_AT_specification 21257 || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL) 21258 prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1); 21259 } 21260 /* Set the string's refcount to 0 so that prune_unused_types_mark 21261 accounts properly for it. */ 21262 if (AT_class (a) == dw_val_class_str) 21263 a->dw_attr_val.v.val_str->refcount = 0; 21264 } 21265 } 21266 21267 /* Mark the generic parameters and arguments children DIEs of DIE. */ 21268 21269 static void 21270 prune_unused_types_mark_generic_parms_dies (dw_die_ref die) 21271 { 21272 dw_die_ref c; 21273 21274 if (die == NULL || die->die_child == NULL) 21275 return; 21276 c = die->die_child; 21277 do 21278 { 21279 switch (c->die_tag) 21280 { 21281 case DW_TAG_template_type_param: 21282 case DW_TAG_template_value_param: 21283 case DW_TAG_GNU_template_template_param: 21284 case DW_TAG_GNU_template_parameter_pack: 21285 prune_unused_types_mark (c, 1); 21286 break; 21287 default: 21288 break; 21289 } 21290 c = c->die_sib; 21291 } while (c && c != die->die_child); 21292 } 21293 21294 /* Mark DIE as being used. If DOKIDS is true, then walk down 21295 to DIE's children. */ 21296 21297 static void 21298 prune_unused_types_mark (dw_die_ref die, int dokids) 21299 { 21300 dw_die_ref c; 21301 21302 if (die->die_mark == 0) 21303 { 21304 /* We haven't done this node yet. Mark it as used. */ 21305 die->die_mark = 1; 21306 /* If this is the DIE of a generic type instantiation, 21307 mark the children DIEs that describe its generic parms and 21308 args. */ 21309 prune_unused_types_mark_generic_parms_dies (die); 21310 21311 /* We also have to mark its parents as used. 21312 (But we don't want to mark our parents' kids due to this.) */ 21313 if (die->die_parent) 21314 prune_unused_types_mark (die->die_parent, 0); 21315 21316 /* Mark any referenced nodes. */ 21317 prune_unused_types_walk_attribs (die); 21318 21319 /* If this node is a specification, 21320 also mark the definition, if it exists. */ 21321 if (get_AT_flag (die, DW_AT_declaration) && die->die_definition) 21322 prune_unused_types_mark (die->die_definition, 1); 21323 } 21324 21325 if (dokids && die->die_mark != 2) 21326 { 21327 /* We need to walk the children, but haven't done so yet. 21328 Remember that we've walked the kids. */ 21329 die->die_mark = 2; 21330 21331 /* If this is an array type, we need to make sure our 21332 kids get marked, even if they're types. If we're 21333 breaking out types into comdat sections, do this 21334 for all type definitions. */ 21335 if (die->die_tag == DW_TAG_array_type 21336 || (use_debug_types 21337 && is_type_die (die) && ! is_declaration_die (die))) 21338 FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1)); 21339 else 21340 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c)); 21341 } 21342 } 21343 21344 /* For local classes, look if any static member functions were emitted 21345 and if so, mark them. */ 21346 21347 static void 21348 prune_unused_types_walk_local_classes (dw_die_ref die) 21349 { 21350 dw_die_ref c; 21351 21352 if (die->die_mark == 2) 21353 return; 21354 21355 switch (die->die_tag) 21356 { 21357 case DW_TAG_structure_type: 21358 case DW_TAG_union_type: 21359 case DW_TAG_class_type: 21360 break; 21361 21362 case DW_TAG_subprogram: 21363 if (!get_AT_flag (die, DW_AT_declaration) 21364 || die->die_definition != NULL) 21365 prune_unused_types_mark (die, 1); 21366 return; 21367 21368 default: 21369 return; 21370 } 21371 21372 /* Mark children. */ 21373 FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c)); 21374 } 21375 21376 /* Walk the tree DIE and mark types that we actually use. */ 21377 21378 static void 21379 prune_unused_types_walk (dw_die_ref die) 21380 { 21381 dw_die_ref c; 21382 21383 /* Don't do anything if this node is already marked and 21384 children have been marked as well. */ 21385 if (die->die_mark == 2) 21386 return; 21387 21388 switch (die->die_tag) 21389 { 21390 case DW_TAG_structure_type: 21391 case DW_TAG_union_type: 21392 case DW_TAG_class_type: 21393 if (die->die_perennial_p) 21394 break; 21395 21396 for (c = die->die_parent; c; c = c->die_parent) 21397 if (c->die_tag == DW_TAG_subprogram) 21398 break; 21399 21400 /* Finding used static member functions inside of classes 21401 is needed just for local classes, because for other classes 21402 static member function DIEs with DW_AT_specification 21403 are emitted outside of the DW_TAG_*_type. If we ever change 21404 it, we'd need to call this even for non-local classes. */ 21405 if (c) 21406 prune_unused_types_walk_local_classes (die); 21407 21408 /* It's a type node --- don't mark it. */ 21409 return; 21410 21411 case DW_TAG_const_type: 21412 case DW_TAG_packed_type: 21413 case DW_TAG_pointer_type: 21414 case DW_TAG_reference_type: 21415 case DW_TAG_rvalue_reference_type: 21416 case DW_TAG_volatile_type: 21417 case DW_TAG_typedef: 21418 case DW_TAG_array_type: 21419 case DW_TAG_interface_type: 21420 case DW_TAG_friend: 21421 case DW_TAG_variant_part: 21422 case DW_TAG_enumeration_type: 21423 case DW_TAG_subroutine_type: 21424 case DW_TAG_string_type: 21425 case DW_TAG_set_type: 21426 case DW_TAG_subrange_type: 21427 case DW_TAG_ptr_to_member_type: 21428 case DW_TAG_file_type: 21429 if (die->die_perennial_p) 21430 break; 21431 21432 /* It's a type node --- don't mark it. */ 21433 return; 21434 21435 default: 21436 /* Mark everything else. */ 21437 break; 21438 } 21439 21440 if (die->die_mark == 0) 21441 { 21442 die->die_mark = 1; 21443 21444 /* Now, mark any dies referenced from here. */ 21445 prune_unused_types_walk_attribs (die); 21446 } 21447 21448 die->die_mark = 2; 21449 21450 /* Mark children. */ 21451 FOR_EACH_CHILD (die, c, prune_unused_types_walk (c)); 21452 } 21453 21454 /* Increment the string counts on strings referred to from DIE's 21455 attributes. */ 21456 21457 static void 21458 prune_unused_types_update_strings (dw_die_ref die) 21459 { 21460 dw_attr_ref a; 21461 unsigned ix; 21462 21463 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 21464 if (AT_class (a) == dw_val_class_str) 21465 { 21466 struct indirect_string_node *s = a->dw_attr_val.v.val_str; 21467 s->refcount++; 21468 /* Avoid unnecessarily putting strings that are used less than 21469 twice in the hash table. */ 21470 if (s->refcount 21471 == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2)) 21472 { 21473 void ** slot; 21474 slot = htab_find_slot_with_hash (debug_str_hash, s->str, 21475 htab_hash_string (s->str), 21476 INSERT); 21477 gcc_assert (*slot == NULL); 21478 *slot = s; 21479 } 21480 } 21481 } 21482 21483 /* Remove from the tree DIE any dies that aren't marked. */ 21484 21485 static void 21486 prune_unused_types_prune (dw_die_ref die) 21487 { 21488 dw_die_ref c; 21489 21490 gcc_assert (die->die_mark); 21491 prune_unused_types_update_strings (die); 21492 21493 if (! die->die_child) 21494 return; 21495 21496 c = die->die_child; 21497 do { 21498 dw_die_ref prev = c; 21499 for (c = c->die_sib; ! c->die_mark; c = c->die_sib) 21500 if (c == die->die_child) 21501 { 21502 /* No marked children between 'prev' and the end of the list. */ 21503 if (prev == c) 21504 /* No marked children at all. */ 21505 die->die_child = NULL; 21506 else 21507 { 21508 prev->die_sib = c->die_sib; 21509 die->die_child = prev; 21510 } 21511 return; 21512 } 21513 21514 if (c != prev->die_sib) 21515 prev->die_sib = c; 21516 prune_unused_types_prune (c); 21517 } while (c != die->die_child); 21518 } 21519 21520 /* Remove dies representing declarations that we never use. */ 21521 21522 static void 21523 prune_unused_types (void) 21524 { 21525 unsigned int i; 21526 limbo_die_node *node; 21527 comdat_type_node *ctnode; 21528 pubname_ref pub; 21529 dw_die_ref base_type; 21530 21531 #if ENABLE_ASSERT_CHECKING 21532 /* All the marks should already be clear. */ 21533 verify_marks_clear (comp_unit_die ()); 21534 for (node = limbo_die_list; node; node = node->next) 21535 verify_marks_clear (node->die); 21536 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next) 21537 verify_marks_clear (ctnode->root_die); 21538 #endif /* ENABLE_ASSERT_CHECKING */ 21539 21540 /* Mark types that are used in global variables. */ 21541 premark_types_used_by_global_vars (); 21542 21543 /* Set the mark on nodes that are actually used. */ 21544 prune_unused_types_walk (comp_unit_die ()); 21545 for (node = limbo_die_list; node; node = node->next) 21546 prune_unused_types_walk (node->die); 21547 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next) 21548 { 21549 prune_unused_types_walk (ctnode->root_die); 21550 prune_unused_types_mark (ctnode->type_die, 1); 21551 } 21552 21553 /* Also set the mark on nodes referenced from the 21554 pubname_table. */ 21555 FOR_EACH_VEC_ELT (pubname_entry, pubname_table, i, pub) 21556 prune_unused_types_mark (pub->die, 1); 21557 for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++) 21558 prune_unused_types_mark (base_type, 1); 21559 21560 if (debug_str_hash) 21561 htab_empty (debug_str_hash); 21562 prune_unused_types_prune (comp_unit_die ()); 21563 for (node = limbo_die_list; node; node = node->next) 21564 prune_unused_types_prune (node->die); 21565 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next) 21566 prune_unused_types_prune (ctnode->root_die); 21567 21568 /* Leave the marks clear. */ 21569 prune_unmark_dies (comp_unit_die ()); 21570 for (node = limbo_die_list; node; node = node->next) 21571 prune_unmark_dies (node->die); 21572 for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next) 21573 prune_unmark_dies (ctnode->root_die); 21574 } 21575 21576 /* Set the parameter to true if there are any relative pathnames in 21577 the file table. */ 21578 static int 21579 file_table_relative_p (void ** slot, void *param) 21580 { 21581 bool *p = (bool *) param; 21582 struct dwarf_file_data *d = (struct dwarf_file_data *) *slot; 21583 if (!IS_ABSOLUTE_PATH (d->filename)) 21584 { 21585 *p = true; 21586 return 0; 21587 } 21588 return 1; 21589 } 21590 21591 /* Routines to manipulate hash table of comdat type units. */ 21592 21593 static hashval_t 21594 htab_ct_hash (const void *of) 21595 { 21596 hashval_t h; 21597 const comdat_type_node *const type_node = (const comdat_type_node *) of; 21598 21599 memcpy (&h, type_node->signature, sizeof (h)); 21600 return h; 21601 } 21602 21603 static int 21604 htab_ct_eq (const void *of1, const void *of2) 21605 { 21606 const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1; 21607 const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2; 21608 21609 return (! memcmp (type_node_1->signature, type_node_2->signature, 21610 DWARF_TYPE_SIGNATURE_SIZE)); 21611 } 21612 21613 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref 21614 to the location it would have been added, should we know its 21615 DECL_ASSEMBLER_NAME when we added other attributes. This will 21616 probably improve compactness of debug info, removing equivalent 21617 abbrevs, and hide any differences caused by deferring the 21618 computation of the assembler name, triggered by e.g. PCH. */ 21619 21620 static inline void 21621 move_linkage_attr (dw_die_ref die) 21622 { 21623 unsigned ix = VEC_length (dw_attr_node, die->die_attr); 21624 dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1); 21625 21626 gcc_assert (linkage.dw_attr == DW_AT_linkage_name 21627 || linkage.dw_attr == DW_AT_MIPS_linkage_name); 21628 21629 while (--ix > 0) 21630 { 21631 dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1); 21632 21633 if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name) 21634 break; 21635 } 21636 21637 if (ix != VEC_length (dw_attr_node, die->die_attr) - 1) 21638 { 21639 VEC_pop (dw_attr_node, die->die_attr); 21640 VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage); 21641 } 21642 } 21643 21644 /* Helper function for resolve_addr, mark DW_TAG_base_type nodes 21645 referenced from typed stack ops and count how often they are used. */ 21646 21647 static void 21648 mark_base_types (dw_loc_descr_ref loc) 21649 { 21650 dw_die_ref base_type = NULL; 21651 21652 for (; loc; loc = loc->dw_loc_next) 21653 { 21654 switch (loc->dw_loc_opc) 21655 { 21656 case DW_OP_GNU_regval_type: 21657 case DW_OP_GNU_deref_type: 21658 base_type = loc->dw_loc_oprnd2.v.val_die_ref.die; 21659 break; 21660 case DW_OP_GNU_convert: 21661 case DW_OP_GNU_reinterpret: 21662 if (loc->dw_loc_oprnd1.val_class == dw_val_class_unsigned_const) 21663 continue; 21664 /* FALLTHRU */ 21665 case DW_OP_GNU_const_type: 21666 base_type = loc->dw_loc_oprnd1.v.val_die_ref.die; 21667 break; 21668 case DW_OP_GNU_entry_value: 21669 mark_base_types (loc->dw_loc_oprnd1.v.val_loc); 21670 continue; 21671 default: 21672 continue; 21673 } 21674 gcc_assert (base_type->die_parent == comp_unit_die ()); 21675 if (base_type->die_mark) 21676 base_type->die_mark++; 21677 else 21678 { 21679 VEC_safe_push (dw_die_ref, heap, base_types, base_type); 21680 base_type->die_mark = 1; 21681 } 21682 } 21683 } 21684 21685 /* Comparison function for sorting marked base types. */ 21686 21687 static int 21688 base_type_cmp (const void *x, const void *y) 21689 { 21690 dw_die_ref dx = *(const dw_die_ref *) x; 21691 dw_die_ref dy = *(const dw_die_ref *) y; 21692 unsigned int byte_size1, byte_size2; 21693 unsigned int encoding1, encoding2; 21694 if (dx->die_mark > dy->die_mark) 21695 return -1; 21696 if (dx->die_mark < dy->die_mark) 21697 return 1; 21698 byte_size1 = get_AT_unsigned (dx, DW_AT_byte_size); 21699 byte_size2 = get_AT_unsigned (dy, DW_AT_byte_size); 21700 if (byte_size1 < byte_size2) 21701 return 1; 21702 if (byte_size1 > byte_size2) 21703 return -1; 21704 encoding1 = get_AT_unsigned (dx, DW_AT_encoding); 21705 encoding2 = get_AT_unsigned (dy, DW_AT_encoding); 21706 if (encoding1 < encoding2) 21707 return 1; 21708 if (encoding1 > encoding2) 21709 return -1; 21710 return 0; 21711 } 21712 21713 /* Move base types marked by mark_base_types as early as possible 21714 in the CU, sorted by decreasing usage count both to make the 21715 uleb128 references as small as possible and to make sure they 21716 will have die_offset already computed by calc_die_sizes when 21717 sizes of typed stack loc ops is computed. */ 21718 21719 static void 21720 move_marked_base_types (void) 21721 { 21722 unsigned int i; 21723 dw_die_ref base_type, die, c; 21724 21725 if (VEC_empty (dw_die_ref, base_types)) 21726 return; 21727 21728 /* Sort by decreasing usage count, they will be added again in that 21729 order later on. */ 21730 VEC_qsort (dw_die_ref, base_types, base_type_cmp); 21731 die = comp_unit_die (); 21732 c = die->die_child; 21733 do 21734 { 21735 dw_die_ref prev = c; 21736 c = c->die_sib; 21737 while (c->die_mark) 21738 { 21739 remove_child_with_prev (c, prev); 21740 /* As base types got marked, there must be at least 21741 one node other than DW_TAG_base_type. */ 21742 gcc_assert (c != c->die_sib); 21743 c = c->die_sib; 21744 } 21745 } 21746 while (c != die->die_child); 21747 gcc_assert (die->die_child); 21748 c = die->die_child; 21749 for (i = 0; VEC_iterate (dw_die_ref, base_types, i, base_type); i++) 21750 { 21751 base_type->die_mark = 0; 21752 base_type->die_sib = c->die_sib; 21753 c->die_sib = base_type; 21754 c = base_type; 21755 } 21756 } 21757 21758 /* Helper function for resolve_addr, attempt to resolve 21759 one CONST_STRING, return non-zero if not successful. Similarly verify that 21760 SYMBOL_REFs refer to variables emitted in the current CU. */ 21761 21762 static int 21763 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED) 21764 { 21765 rtx rtl = *addr; 21766 21767 if (GET_CODE (rtl) == CONST_STRING) 21768 { 21769 size_t len = strlen (XSTR (rtl, 0)) + 1; 21770 tree t = build_string (len, XSTR (rtl, 0)); 21771 tree tlen = size_int (len - 1); 21772 TREE_TYPE (t) 21773 = build_array_type (char_type_node, build_index_type (tlen)); 21774 rtl = lookup_constant_def (t); 21775 if (!rtl || !MEM_P (rtl)) 21776 return 1; 21777 rtl = XEXP (rtl, 0); 21778 VEC_safe_push (rtx, gc, used_rtx_array, rtl); 21779 *addr = rtl; 21780 return 0; 21781 } 21782 21783 if (GET_CODE (rtl) == SYMBOL_REF 21784 && SYMBOL_REF_DECL (rtl)) 21785 { 21786 if (TREE_CONSTANT_POOL_ADDRESS_P (rtl)) 21787 { 21788 if (!TREE_ASM_WRITTEN (DECL_INITIAL (SYMBOL_REF_DECL (rtl)))) 21789 return 1; 21790 } 21791 else if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl))) 21792 return 1; 21793 } 21794 21795 if (GET_CODE (rtl) == CONST 21796 && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL)) 21797 return 1; 21798 21799 return 0; 21800 } 21801 21802 /* Helper function for resolve_addr, handle one location 21803 expression, return false if at least one CONST_STRING or SYMBOL_REF in 21804 the location list couldn't be resolved. */ 21805 21806 static bool 21807 resolve_addr_in_expr (dw_loc_descr_ref loc) 21808 { 21809 dw_loc_descr_ref keep = NULL; 21810 for (; loc; loc = loc->dw_loc_next) 21811 switch (loc->dw_loc_opc) 21812 { 21813 case DW_OP_addr: 21814 if (resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL)) 21815 return false; 21816 break; 21817 case DW_OP_const4u: 21818 case DW_OP_const8u: 21819 if (loc->dtprel 21820 && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL)) 21821 return false; 21822 break; 21823 case DW_OP_plus_uconst: 21824 if (size_of_loc_descr (loc) 21825 > size_of_int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned) 21826 + 1 21827 && loc->dw_loc_oprnd1.v.val_unsigned > 0) 21828 { 21829 dw_loc_descr_ref repl 21830 = int_loc_descriptor (loc->dw_loc_oprnd1.v.val_unsigned); 21831 add_loc_descr (&repl, new_loc_descr (DW_OP_plus, 0, 0)); 21832 add_loc_descr (&repl, loc->dw_loc_next); 21833 *loc = *repl; 21834 } 21835 break; 21836 case DW_OP_implicit_value: 21837 if (loc->dw_loc_oprnd2.val_class == dw_val_class_addr 21838 && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)) 21839 return false; 21840 break; 21841 case DW_OP_GNU_implicit_pointer: 21842 case DW_OP_GNU_parameter_ref: 21843 if (loc->dw_loc_oprnd1.val_class == dw_val_class_decl_ref) 21844 { 21845 dw_die_ref ref 21846 = lookup_decl_die (loc->dw_loc_oprnd1.v.val_decl_ref); 21847 if (ref == NULL) 21848 return false; 21849 loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref; 21850 loc->dw_loc_oprnd1.v.val_die_ref.die = ref; 21851 loc->dw_loc_oprnd1.v.val_die_ref.external = 0; 21852 } 21853 break; 21854 case DW_OP_GNU_const_type: 21855 case DW_OP_GNU_regval_type: 21856 case DW_OP_GNU_deref_type: 21857 case DW_OP_GNU_convert: 21858 case DW_OP_GNU_reinterpret: 21859 while (loc->dw_loc_next 21860 && loc->dw_loc_next->dw_loc_opc == DW_OP_GNU_convert) 21861 { 21862 dw_die_ref base1, base2; 21863 unsigned enc1, enc2, size1, size2; 21864 if (loc->dw_loc_opc == DW_OP_GNU_regval_type 21865 || loc->dw_loc_opc == DW_OP_GNU_deref_type) 21866 base1 = loc->dw_loc_oprnd2.v.val_die_ref.die; 21867 else if (loc->dw_loc_oprnd1.val_class 21868 == dw_val_class_unsigned_const) 21869 break; 21870 else 21871 base1 = loc->dw_loc_oprnd1.v.val_die_ref.die; 21872 if (loc->dw_loc_next->dw_loc_oprnd1.val_class 21873 == dw_val_class_unsigned_const) 21874 break; 21875 base2 = loc->dw_loc_next->dw_loc_oprnd1.v.val_die_ref.die; 21876 gcc_assert (base1->die_tag == DW_TAG_base_type 21877 && base2->die_tag == DW_TAG_base_type); 21878 enc1 = get_AT_unsigned (base1, DW_AT_encoding); 21879 enc2 = get_AT_unsigned (base2, DW_AT_encoding); 21880 size1 = get_AT_unsigned (base1, DW_AT_byte_size); 21881 size2 = get_AT_unsigned (base2, DW_AT_byte_size); 21882 if (size1 == size2 21883 && (((enc1 == DW_ATE_unsigned || enc1 == DW_ATE_signed) 21884 && (enc2 == DW_ATE_unsigned || enc2 == DW_ATE_signed) 21885 && loc != keep) 21886 || enc1 == enc2)) 21887 { 21888 /* Optimize away next DW_OP_GNU_convert after 21889 adjusting LOC's base type die reference. */ 21890 if (loc->dw_loc_opc == DW_OP_GNU_regval_type 21891 || loc->dw_loc_opc == DW_OP_GNU_deref_type) 21892 loc->dw_loc_oprnd2.v.val_die_ref.die = base2; 21893 else 21894 loc->dw_loc_oprnd1.v.val_die_ref.die = base2; 21895 loc->dw_loc_next = loc->dw_loc_next->dw_loc_next; 21896 continue; 21897 } 21898 /* Don't change integer DW_OP_GNU_convert after e.g. floating 21899 point typed stack entry. */ 21900 else if (enc1 != DW_ATE_unsigned && enc1 != DW_ATE_signed) 21901 keep = loc->dw_loc_next; 21902 break; 21903 } 21904 break; 21905 default: 21906 break; 21907 } 21908 return true; 21909 } 21910 21911 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to 21912 an address in .rodata section if the string literal is emitted there, 21913 or remove the containing location list or replace DW_AT_const_value 21914 with DW_AT_location and empty location expression, if it isn't found 21915 in .rodata. Similarly for SYMBOL_REFs, keep only those that refer 21916 to something that has been emitted in the current CU. */ 21917 21918 static void 21919 resolve_addr (dw_die_ref die) 21920 { 21921 dw_die_ref c; 21922 dw_attr_ref a; 21923 dw_loc_list_ref *curr, *start, loc; 21924 unsigned ix; 21925 21926 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 21927 switch (AT_class (a)) 21928 { 21929 case dw_val_class_loc_list: 21930 start = curr = AT_loc_list_ptr (a); 21931 loc = *curr; 21932 gcc_assert (loc); 21933 /* The same list can be referenced more than once. See if we have 21934 already recorded the result from a previous pass. */ 21935 if (loc->replaced) 21936 *curr = loc->dw_loc_next; 21937 else if (!loc->resolved_addr) 21938 { 21939 /* As things stand, we do not expect or allow one die to 21940 reference a suffix of another die's location list chain. 21941 References must be identical or completely separate. 21942 There is therefore no need to cache the result of this 21943 pass on any list other than the first; doing so 21944 would lead to unnecessary writes. */ 21945 while (*curr) 21946 { 21947 gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr); 21948 if (!resolve_addr_in_expr ((*curr)->expr)) 21949 { 21950 dw_loc_list_ref next = (*curr)->dw_loc_next; 21951 if (next && (*curr)->ll_symbol) 21952 { 21953 gcc_assert (!next->ll_symbol); 21954 next->ll_symbol = (*curr)->ll_symbol; 21955 } 21956 *curr = next; 21957 } 21958 else 21959 { 21960 mark_base_types ((*curr)->expr); 21961 curr = &(*curr)->dw_loc_next; 21962 } 21963 } 21964 if (loc == *start) 21965 loc->resolved_addr = 1; 21966 else 21967 { 21968 loc->replaced = 1; 21969 loc->dw_loc_next = *start; 21970 } 21971 } 21972 if (!*start) 21973 { 21974 remove_AT (die, a->dw_attr); 21975 ix--; 21976 } 21977 break; 21978 case dw_val_class_loc: 21979 { 21980 dw_loc_descr_ref l = AT_loc (a); 21981 /* For -gdwarf-2 don't attempt to optimize 21982 DW_AT_data_member_location containing 21983 DW_OP_plus_uconst - older consumers might 21984 rely on it being that op instead of a more complex, 21985 but shorter, location description. */ 21986 if ((dwarf_version > 2 21987 || a->dw_attr != DW_AT_data_member_location 21988 || l == NULL 21989 || l->dw_loc_opc != DW_OP_plus_uconst 21990 || l->dw_loc_next != NULL) 21991 && !resolve_addr_in_expr (l)) 21992 { 21993 remove_AT (die, a->dw_attr); 21994 ix--; 21995 } 21996 else 21997 mark_base_types (l); 21998 } 21999 break; 22000 case dw_val_class_addr: 22001 if (a->dw_attr == DW_AT_const_value 22002 && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL)) 22003 { 22004 remove_AT (die, a->dw_attr); 22005 ix--; 22006 } 22007 if (die->die_tag == DW_TAG_GNU_call_site 22008 && a->dw_attr == DW_AT_abstract_origin) 22009 { 22010 tree tdecl = SYMBOL_REF_DECL (a->dw_attr_val.v.val_addr); 22011 dw_die_ref tdie = lookup_decl_die (tdecl); 22012 if (tdie == NULL 22013 && DECL_EXTERNAL (tdecl) 22014 && DECL_ABSTRACT_ORIGIN (tdecl) == NULL_TREE) 22015 { 22016 force_decl_die (tdecl); 22017 tdie = lookup_decl_die (tdecl); 22018 } 22019 if (tdie) 22020 { 22021 a->dw_attr_val.val_class = dw_val_class_die_ref; 22022 a->dw_attr_val.v.val_die_ref.die = tdie; 22023 a->dw_attr_val.v.val_die_ref.external = 0; 22024 } 22025 else 22026 { 22027 remove_AT (die, a->dw_attr); 22028 ix--; 22029 } 22030 } 22031 break; 22032 default: 22033 break; 22034 } 22035 22036 FOR_EACH_CHILD (die, c, resolve_addr (c)); 22037 } 22038 22039 /* Helper routines for optimize_location_lists. 22040 This pass tries to share identical local lists in .debug_loc 22041 section. */ 22042 22043 /* Iteratively hash operands of LOC opcode. */ 22044 22045 static inline hashval_t 22046 hash_loc_operands (dw_loc_descr_ref loc, hashval_t hash) 22047 { 22048 dw_val_ref val1 = &loc->dw_loc_oprnd1; 22049 dw_val_ref val2 = &loc->dw_loc_oprnd2; 22050 22051 switch (loc->dw_loc_opc) 22052 { 22053 case DW_OP_const4u: 22054 case DW_OP_const8u: 22055 if (loc->dtprel) 22056 goto hash_addr; 22057 /* FALLTHRU */ 22058 case DW_OP_const1u: 22059 case DW_OP_const1s: 22060 case DW_OP_const2u: 22061 case DW_OP_const2s: 22062 case DW_OP_const4s: 22063 case DW_OP_const8s: 22064 case DW_OP_constu: 22065 case DW_OP_consts: 22066 case DW_OP_pick: 22067 case DW_OP_plus_uconst: 22068 case DW_OP_breg0: 22069 case DW_OP_breg1: 22070 case DW_OP_breg2: 22071 case DW_OP_breg3: 22072 case DW_OP_breg4: 22073 case DW_OP_breg5: 22074 case DW_OP_breg6: 22075 case DW_OP_breg7: 22076 case DW_OP_breg8: 22077 case DW_OP_breg9: 22078 case DW_OP_breg10: 22079 case DW_OP_breg11: 22080 case DW_OP_breg12: 22081 case DW_OP_breg13: 22082 case DW_OP_breg14: 22083 case DW_OP_breg15: 22084 case DW_OP_breg16: 22085 case DW_OP_breg17: 22086 case DW_OP_breg18: 22087 case DW_OP_breg19: 22088 case DW_OP_breg20: 22089 case DW_OP_breg21: 22090 case DW_OP_breg22: 22091 case DW_OP_breg23: 22092 case DW_OP_breg24: 22093 case DW_OP_breg25: 22094 case DW_OP_breg26: 22095 case DW_OP_breg27: 22096 case DW_OP_breg28: 22097 case DW_OP_breg29: 22098 case DW_OP_breg30: 22099 case DW_OP_breg31: 22100 case DW_OP_regx: 22101 case DW_OP_fbreg: 22102 case DW_OP_piece: 22103 case DW_OP_deref_size: 22104 case DW_OP_xderef_size: 22105 hash = iterative_hash_object (val1->v.val_int, hash); 22106 break; 22107 case DW_OP_skip: 22108 case DW_OP_bra: 22109 { 22110 int offset; 22111 22112 gcc_assert (val1->val_class == dw_val_class_loc); 22113 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3); 22114 hash = iterative_hash_object (offset, hash); 22115 } 22116 break; 22117 case DW_OP_implicit_value: 22118 hash = iterative_hash_object (val1->v.val_unsigned, hash); 22119 switch (val2->val_class) 22120 { 22121 case dw_val_class_const: 22122 hash = iterative_hash_object (val2->v.val_int, hash); 22123 break; 22124 case dw_val_class_vec: 22125 { 22126 unsigned int elt_size = val2->v.val_vec.elt_size; 22127 unsigned int len = val2->v.val_vec.length; 22128 22129 hash = iterative_hash_object (elt_size, hash); 22130 hash = iterative_hash_object (len, hash); 22131 hash = iterative_hash (val2->v.val_vec.array, 22132 len * elt_size, hash); 22133 } 22134 break; 22135 case dw_val_class_const_double: 22136 hash = iterative_hash_object (val2->v.val_double.low, hash); 22137 hash = iterative_hash_object (val2->v.val_double.high, hash); 22138 break; 22139 case dw_val_class_addr: 22140 hash = iterative_hash_rtx (val2->v.val_addr, hash); 22141 break; 22142 default: 22143 gcc_unreachable (); 22144 } 22145 break; 22146 case DW_OP_bregx: 22147 case DW_OP_bit_piece: 22148 hash = iterative_hash_object (val1->v.val_int, hash); 22149 hash = iterative_hash_object (val2->v.val_int, hash); 22150 break; 22151 case DW_OP_addr: 22152 hash_addr: 22153 if (loc->dtprel) 22154 { 22155 unsigned char dtprel = 0xd1; 22156 hash = iterative_hash_object (dtprel, hash); 22157 } 22158 hash = iterative_hash_rtx (val1->v.val_addr, hash); 22159 break; 22160 case DW_OP_GNU_implicit_pointer: 22161 hash = iterative_hash_object (val2->v.val_int, hash); 22162 break; 22163 case DW_OP_GNU_entry_value: 22164 hash = hash_loc_operands (val1->v.val_loc, hash); 22165 break; 22166 case DW_OP_GNU_regval_type: 22167 case DW_OP_GNU_deref_type: 22168 { 22169 unsigned int byte_size 22170 = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_byte_size); 22171 unsigned int encoding 22172 = get_AT_unsigned (val2->v.val_die_ref.die, DW_AT_encoding); 22173 hash = iterative_hash_object (val1->v.val_int, hash); 22174 hash = iterative_hash_object (byte_size, hash); 22175 hash = iterative_hash_object (encoding, hash); 22176 } 22177 break; 22178 case DW_OP_GNU_convert: 22179 case DW_OP_GNU_reinterpret: 22180 if (val1->val_class == dw_val_class_unsigned_const) 22181 { 22182 hash = iterative_hash_object (val1->v.val_unsigned, hash); 22183 break; 22184 } 22185 /* FALLTHRU */ 22186 case DW_OP_GNU_const_type: 22187 { 22188 unsigned int byte_size 22189 = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_byte_size); 22190 unsigned int encoding 22191 = get_AT_unsigned (val1->v.val_die_ref.die, DW_AT_encoding); 22192 hash = iterative_hash_object (byte_size, hash); 22193 hash = iterative_hash_object (encoding, hash); 22194 if (loc->dw_loc_opc != DW_OP_GNU_const_type) 22195 break; 22196 hash = iterative_hash_object (val2->val_class, hash); 22197 switch (val2->val_class) 22198 { 22199 case dw_val_class_const: 22200 hash = iterative_hash_object (val2->v.val_int, hash); 22201 break; 22202 case dw_val_class_vec: 22203 { 22204 unsigned int elt_size = val2->v.val_vec.elt_size; 22205 unsigned int len = val2->v.val_vec.length; 22206 22207 hash = iterative_hash_object (elt_size, hash); 22208 hash = iterative_hash_object (len, hash); 22209 hash = iterative_hash (val2->v.val_vec.array, 22210 len * elt_size, hash); 22211 } 22212 break; 22213 case dw_val_class_const_double: 22214 hash = iterative_hash_object (val2->v.val_double.low, hash); 22215 hash = iterative_hash_object (val2->v.val_double.high, hash); 22216 break; 22217 default: 22218 gcc_unreachable (); 22219 } 22220 } 22221 break; 22222 22223 default: 22224 /* Other codes have no operands. */ 22225 break; 22226 } 22227 return hash; 22228 } 22229 22230 /* Iteratively hash the whole DWARF location expression LOC. */ 22231 22232 static inline hashval_t 22233 hash_locs (dw_loc_descr_ref loc, hashval_t hash) 22234 { 22235 dw_loc_descr_ref l; 22236 bool sizes_computed = false; 22237 /* Compute sizes, so that DW_OP_skip/DW_OP_bra can be checksummed. */ 22238 size_of_locs (loc); 22239 22240 for (l = loc; l != NULL; l = l->dw_loc_next) 22241 { 22242 enum dwarf_location_atom opc = l->dw_loc_opc; 22243 hash = iterative_hash_object (opc, hash); 22244 if ((opc == DW_OP_skip || opc == DW_OP_bra) && !sizes_computed) 22245 { 22246 size_of_locs (loc); 22247 sizes_computed = true; 22248 } 22249 hash = hash_loc_operands (l, hash); 22250 } 22251 return hash; 22252 } 22253 22254 /* Compute hash of the whole location list LIST_HEAD. */ 22255 22256 static inline void 22257 hash_loc_list (dw_loc_list_ref list_head) 22258 { 22259 dw_loc_list_ref curr = list_head; 22260 hashval_t hash = 0; 22261 22262 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next) 22263 { 22264 hash = iterative_hash (curr->begin, strlen (curr->begin) + 1, hash); 22265 hash = iterative_hash (curr->end, strlen (curr->end) + 1, hash); 22266 if (curr->section) 22267 hash = iterative_hash (curr->section, strlen (curr->section) + 1, 22268 hash); 22269 hash = hash_locs (curr->expr, hash); 22270 } 22271 list_head->hash = hash; 22272 } 22273 22274 /* Return true if X and Y opcodes have the same operands. */ 22275 22276 static inline bool 22277 compare_loc_operands (dw_loc_descr_ref x, dw_loc_descr_ref y) 22278 { 22279 dw_val_ref valx1 = &x->dw_loc_oprnd1; 22280 dw_val_ref valx2 = &x->dw_loc_oprnd2; 22281 dw_val_ref valy1 = &y->dw_loc_oprnd1; 22282 dw_val_ref valy2 = &y->dw_loc_oprnd2; 22283 22284 switch (x->dw_loc_opc) 22285 { 22286 case DW_OP_const4u: 22287 case DW_OP_const8u: 22288 if (x->dtprel) 22289 goto hash_addr; 22290 /* FALLTHRU */ 22291 case DW_OP_const1u: 22292 case DW_OP_const1s: 22293 case DW_OP_const2u: 22294 case DW_OP_const2s: 22295 case DW_OP_const4s: 22296 case DW_OP_const8s: 22297 case DW_OP_constu: 22298 case DW_OP_consts: 22299 case DW_OP_pick: 22300 case DW_OP_plus_uconst: 22301 case DW_OP_breg0: 22302 case DW_OP_breg1: 22303 case DW_OP_breg2: 22304 case DW_OP_breg3: 22305 case DW_OP_breg4: 22306 case DW_OP_breg5: 22307 case DW_OP_breg6: 22308 case DW_OP_breg7: 22309 case DW_OP_breg8: 22310 case DW_OP_breg9: 22311 case DW_OP_breg10: 22312 case DW_OP_breg11: 22313 case DW_OP_breg12: 22314 case DW_OP_breg13: 22315 case DW_OP_breg14: 22316 case DW_OP_breg15: 22317 case DW_OP_breg16: 22318 case DW_OP_breg17: 22319 case DW_OP_breg18: 22320 case DW_OP_breg19: 22321 case DW_OP_breg20: 22322 case DW_OP_breg21: 22323 case DW_OP_breg22: 22324 case DW_OP_breg23: 22325 case DW_OP_breg24: 22326 case DW_OP_breg25: 22327 case DW_OP_breg26: 22328 case DW_OP_breg27: 22329 case DW_OP_breg28: 22330 case DW_OP_breg29: 22331 case DW_OP_breg30: 22332 case DW_OP_breg31: 22333 case DW_OP_regx: 22334 case DW_OP_fbreg: 22335 case DW_OP_piece: 22336 case DW_OP_deref_size: 22337 case DW_OP_xderef_size: 22338 return valx1->v.val_int == valy1->v.val_int; 22339 case DW_OP_skip: 22340 case DW_OP_bra: 22341 gcc_assert (valx1->val_class == dw_val_class_loc 22342 && valy1->val_class == dw_val_class_loc 22343 && x->dw_loc_addr == y->dw_loc_addr); 22344 return valx1->v.val_loc->dw_loc_addr == valy1->v.val_loc->dw_loc_addr; 22345 case DW_OP_implicit_value: 22346 if (valx1->v.val_unsigned != valy1->v.val_unsigned 22347 || valx2->val_class != valy2->val_class) 22348 return false; 22349 switch (valx2->val_class) 22350 { 22351 case dw_val_class_const: 22352 return valx2->v.val_int == valy2->v.val_int; 22353 case dw_val_class_vec: 22354 return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size 22355 && valx2->v.val_vec.length == valy2->v.val_vec.length 22356 && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array, 22357 valx2->v.val_vec.elt_size 22358 * valx2->v.val_vec.length) == 0; 22359 case dw_val_class_const_double: 22360 return valx2->v.val_double.low == valy2->v.val_double.low 22361 && valx2->v.val_double.high == valy2->v.val_double.high; 22362 case dw_val_class_addr: 22363 return rtx_equal_p (valx2->v.val_addr, valy2->v.val_addr); 22364 default: 22365 gcc_unreachable (); 22366 } 22367 case DW_OP_bregx: 22368 case DW_OP_bit_piece: 22369 return valx1->v.val_int == valy1->v.val_int 22370 && valx2->v.val_int == valy2->v.val_int; 22371 case DW_OP_addr: 22372 hash_addr: 22373 return rtx_equal_p (valx1->v.val_addr, valy1->v.val_addr); 22374 case DW_OP_GNU_implicit_pointer: 22375 return valx1->val_class == dw_val_class_die_ref 22376 && valx1->val_class == valy1->val_class 22377 && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die 22378 && valx2->v.val_int == valy2->v.val_int; 22379 case DW_OP_GNU_entry_value: 22380 return compare_loc_operands (valx1->v.val_loc, valy1->v.val_loc); 22381 case DW_OP_GNU_const_type: 22382 if (valx1->v.val_die_ref.die != valy1->v.val_die_ref.die 22383 || valx2->val_class != valy2->val_class) 22384 return false; 22385 switch (valx2->val_class) 22386 { 22387 case dw_val_class_const: 22388 return valx2->v.val_int == valy2->v.val_int; 22389 case dw_val_class_vec: 22390 return valx2->v.val_vec.elt_size == valy2->v.val_vec.elt_size 22391 && valx2->v.val_vec.length == valy2->v.val_vec.length 22392 && memcmp (valx2->v.val_vec.array, valy2->v.val_vec.array, 22393 valx2->v.val_vec.elt_size 22394 * valx2->v.val_vec.length) == 0; 22395 case dw_val_class_const_double: 22396 return valx2->v.val_double.low == valy2->v.val_double.low 22397 && valx2->v.val_double.high == valy2->v.val_double.high; 22398 default: 22399 gcc_unreachable (); 22400 } 22401 case DW_OP_GNU_regval_type: 22402 case DW_OP_GNU_deref_type: 22403 return valx1->v.val_int == valy1->v.val_int 22404 && valx2->v.val_die_ref.die == valy2->v.val_die_ref.die; 22405 case DW_OP_GNU_convert: 22406 case DW_OP_GNU_reinterpret: 22407 if (valx1->val_class != valy1->val_class) 22408 return false; 22409 if (valx1->val_class == dw_val_class_unsigned_const) 22410 return valx1->v.val_unsigned == valy1->v.val_unsigned; 22411 return valx1->v.val_die_ref.die == valy1->v.val_die_ref.die; 22412 case DW_OP_GNU_parameter_ref: 22413 return valx1->val_class == dw_val_class_die_ref 22414 && valx1->val_class == valy1->val_class 22415 && valx1->v.val_die_ref.die == valy1->v.val_die_ref.die; 22416 default: 22417 /* Other codes have no operands. */ 22418 return true; 22419 } 22420 } 22421 22422 /* Return true if DWARF location expressions X and Y are the same. */ 22423 22424 static inline bool 22425 compare_locs (dw_loc_descr_ref x, dw_loc_descr_ref y) 22426 { 22427 for (; x != NULL && y != NULL; x = x->dw_loc_next, y = y->dw_loc_next) 22428 if (x->dw_loc_opc != y->dw_loc_opc 22429 || x->dtprel != y->dtprel 22430 || !compare_loc_operands (x, y)) 22431 break; 22432 return x == NULL && y == NULL; 22433 } 22434 22435 /* Return precomputed hash of location list X. */ 22436 22437 static hashval_t 22438 loc_list_hash (const void *x) 22439 { 22440 return ((const struct dw_loc_list_struct *) x)->hash; 22441 } 22442 22443 /* Return 1 if location lists X and Y are the same. */ 22444 22445 static int 22446 loc_list_eq (const void *x, const void *y) 22447 { 22448 const struct dw_loc_list_struct *a = (const struct dw_loc_list_struct *) x; 22449 const struct dw_loc_list_struct *b = (const struct dw_loc_list_struct *) y; 22450 if (a == b) 22451 return 1; 22452 if (a->hash != b->hash) 22453 return 0; 22454 for (; a != NULL && b != NULL; a = a->dw_loc_next, b = b->dw_loc_next) 22455 if (strcmp (a->begin, b->begin) != 0 22456 || strcmp (a->end, b->end) != 0 22457 || (a->section == NULL) != (b->section == NULL) 22458 || (a->section && strcmp (a->section, b->section) != 0) 22459 || !compare_locs (a->expr, b->expr)) 22460 break; 22461 return a == NULL && b == NULL; 22462 } 22463 22464 /* Recursively optimize location lists referenced from DIE 22465 children and share them whenever possible. */ 22466 22467 static void 22468 optimize_location_lists_1 (dw_die_ref die, htab_t htab) 22469 { 22470 dw_die_ref c; 22471 dw_attr_ref a; 22472 unsigned ix; 22473 void **slot; 22474 22475 FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a) 22476 if (AT_class (a) == dw_val_class_loc_list) 22477 { 22478 dw_loc_list_ref list = AT_loc_list (a); 22479 /* TODO: perform some optimizations here, before hashing 22480 it and storing into the hash table. */ 22481 hash_loc_list (list); 22482 slot = htab_find_slot_with_hash (htab, list, list->hash, 22483 INSERT); 22484 if (*slot == NULL) 22485 *slot = (void *) list; 22486 else 22487 a->dw_attr_val.v.val_loc_list = (dw_loc_list_ref) *slot; 22488 } 22489 22490 FOR_EACH_CHILD (die, c, optimize_location_lists_1 (c, htab)); 22491 } 22492 22493 /* Optimize location lists referenced from DIE 22494 children and share them whenever possible. */ 22495 22496 static void 22497 optimize_location_lists (dw_die_ref die) 22498 { 22499 htab_t htab = htab_create (500, loc_list_hash, loc_list_eq, NULL); 22500 optimize_location_lists_1 (die, htab); 22501 htab_delete (htab); 22502 } 22503 22504 /* Output stuff that dwarf requires at the end of every file, 22505 and generate the DWARF-2 debugging info. */ 22506 22507 static void 22508 dwarf2out_finish (const char *filename) 22509 { 22510 limbo_die_node *node, *next_node; 22511 comdat_type_node *ctnode; 22512 htab_t comdat_type_table; 22513 unsigned int i; 22514 22515 /* PCH might result in DW_AT_producer string being restored from the 22516 header compilation, fix it up if needed. */ 22517 dw_attr_ref producer = get_AT (comp_unit_die (), DW_AT_producer); 22518 if (strcmp (AT_string (producer), producer_string) != 0) 22519 { 22520 struct indirect_string_node *node = find_AT_string (producer_string); 22521 producer->dw_attr_val.v.val_str = node; 22522 } 22523 22524 gen_scheduled_generic_parms_dies (); 22525 gen_remaining_tmpl_value_param_die_attribute (); 22526 22527 /* Add the name for the main input file now. We delayed this from 22528 dwarf2out_init to avoid complications with PCH. */ 22529 add_name_attribute (comp_unit_die (), remap_debug_filename (filename)); 22530 if (!IS_ABSOLUTE_PATH (filename)) 22531 add_comp_dir_attribute (comp_unit_die ()); 22532 else if (get_AT (comp_unit_die (), DW_AT_comp_dir) == NULL) 22533 { 22534 bool p = false; 22535 htab_traverse (file_table, file_table_relative_p, &p); 22536 if (p) 22537 add_comp_dir_attribute (comp_unit_die ()); 22538 } 22539 22540 for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++) 22541 { 22542 add_location_or_const_value_attribute ( 22543 VEC_index (deferred_locations, deferred_locations_list, i)->die, 22544 VEC_index (deferred_locations, deferred_locations_list, i)->variable, 22545 false, 22546 DW_AT_location); 22547 } 22548 22549 /* Traverse the limbo die list, and add parent/child links. The only 22550 dies without parents that should be here are concrete instances of 22551 inline functions, and the comp_unit_die. We can ignore the comp_unit_die. 22552 For concrete instances, we can get the parent die from the abstract 22553 instance. */ 22554 for (node = limbo_die_list; node; node = next_node) 22555 { 22556 dw_die_ref die = node->die; 22557 next_node = node->next; 22558 22559 if (die->die_parent == NULL) 22560 { 22561 dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin); 22562 22563 if (origin && origin->die_parent) 22564 add_child_die (origin->die_parent, die); 22565 else if (is_cu_die (die)) 22566 ; 22567 else if (seen_error ()) 22568 /* It's OK to be confused by errors in the input. */ 22569 add_child_die (comp_unit_die (), die); 22570 else 22571 { 22572 /* In certain situations, the lexical block containing a 22573 nested function can be optimized away, which results 22574 in the nested function die being orphaned. Likewise 22575 with the return type of that nested function. Force 22576 this to be a child of the containing function. 22577 22578 It may happen that even the containing function got fully 22579 inlined and optimized out. In that case we are lost and 22580 assign the empty child. This should not be big issue as 22581 the function is likely unreachable too. */ 22582 gcc_assert (node->created_for); 22583 22584 if (DECL_P (node->created_for)) 22585 origin = get_context_die (DECL_CONTEXT (node->created_for)); 22586 else if (TYPE_P (node->created_for)) 22587 origin = scope_die_for (node->created_for, comp_unit_die ()); 22588 else 22589 origin = comp_unit_die (); 22590 22591 add_child_die (origin, die); 22592 } 22593 } 22594 } 22595 22596 limbo_die_list = NULL; 22597 22598 #if ENABLE_ASSERT_CHECKING 22599 { 22600 dw_die_ref die = comp_unit_die (), c; 22601 FOR_EACH_CHILD (die, c, gcc_assert (! c->die_mark)); 22602 } 22603 #endif 22604 resolve_addr (comp_unit_die ()); 22605 move_marked_base_types (); 22606 22607 for (node = deferred_asm_name; node; node = node->next) 22608 { 22609 tree decl = node->created_for; 22610 /* When generating LTO bytecode we can not generate new assembler 22611 names at this point and all important decls got theirs via 22612 free-lang-data. */ 22613 if ((!flag_generate_lto || DECL_ASSEMBLER_NAME_SET_P (decl)) 22614 && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)) 22615 { 22616 add_linkage_attr (node->die, decl); 22617 move_linkage_attr (node->die); 22618 } 22619 } 22620 22621 deferred_asm_name = NULL; 22622 22623 /* Walk through the list of incomplete types again, trying once more to 22624 emit full debugging info for them. */ 22625 retry_incomplete_types (); 22626 22627 if (flag_eliminate_unused_debug_types) 22628 prune_unused_types (); 22629 22630 /* Generate separate CUs for each of the include files we've seen. 22631 They will go into limbo_die_list. */ 22632 if (flag_eliminate_dwarf2_dups && ! use_debug_types) 22633 break_out_includes (comp_unit_die ()); 22634 22635 /* Generate separate COMDAT sections for type DIEs. */ 22636 if (use_debug_types) 22637 { 22638 break_out_comdat_types (comp_unit_die ()); 22639 22640 /* Each new type_unit DIE was added to the limbo die list when created. 22641 Since these have all been added to comdat_type_list, clear the 22642 limbo die list. */ 22643 limbo_die_list = NULL; 22644 22645 /* For each new comdat type unit, copy declarations for incomplete 22646 types to make the new unit self-contained (i.e., no direct 22647 references to the main compile unit). */ 22648 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next) 22649 copy_decls_for_unworthy_types (ctnode->root_die); 22650 copy_decls_for_unworthy_types (comp_unit_die ()); 22651 22652 /* In the process of copying declarations from one unit to another, 22653 we may have left some declarations behind that are no longer 22654 referenced. Prune them. */ 22655 prune_unused_types (); 22656 } 22657 22658 /* Traverse the DIE's and add add sibling attributes to those DIE's 22659 that have children. */ 22660 add_sibling_attributes (comp_unit_die ()); 22661 for (node = limbo_die_list; node; node = node->next) 22662 add_sibling_attributes (node->die); 22663 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next) 22664 add_sibling_attributes (ctnode->root_die); 22665 22666 /* Output a terminator label for the .text section. */ 22667 switch_to_section (text_section); 22668 targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0); 22669 if (cold_text_section) 22670 { 22671 switch_to_section (cold_text_section); 22672 targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0); 22673 } 22674 22675 /* We can only use the low/high_pc attributes if all of the code was 22676 in .text. */ 22677 if (!have_multiple_function_sections 22678 || (dwarf_version < 3 && dwarf_strict)) 22679 { 22680 /* Don't add if the CU has no associated code. */ 22681 if (text_section_used) 22682 { 22683 add_AT_lbl_id (comp_unit_die (), DW_AT_low_pc, text_section_label); 22684 add_AT_lbl_id (comp_unit_die (), DW_AT_high_pc, text_end_label); 22685 } 22686 } 22687 else 22688 { 22689 unsigned fde_idx; 22690 dw_fde_ref fde; 22691 bool range_list_added = false; 22692 22693 if (text_section_used) 22694 add_ranges_by_labels (comp_unit_die (), text_section_label, 22695 text_end_label, &range_list_added); 22696 if (cold_text_section_used) 22697 add_ranges_by_labels (comp_unit_die (), cold_text_section_label, 22698 cold_end_label, &range_list_added); 22699 22700 FOR_EACH_VEC_ELT (dw_fde_ref, fde_vec, fde_idx, fde) 22701 { 22702 if (!fde->in_std_section) 22703 add_ranges_by_labels (comp_unit_die (), fde->dw_fde_begin, 22704 fde->dw_fde_end, &range_list_added); 22705 if (fde->dw_fde_second_begin && !fde->second_in_std_section) 22706 add_ranges_by_labels (comp_unit_die (), fde->dw_fde_second_begin, 22707 fde->dw_fde_second_end, &range_list_added); 22708 } 22709 22710 if (range_list_added) 22711 { 22712 /* We need to give .debug_loc and .debug_ranges an appropriate 22713 "base address". Use zero so that these addresses become 22714 absolute. Historically, we've emitted the unexpected 22715 DW_AT_entry_pc instead of DW_AT_low_pc for this purpose. 22716 Emit both to give time for other tools to adapt. */ 22717 add_AT_addr (comp_unit_die (), DW_AT_low_pc, const0_rtx); 22718 if (! dwarf_strict && dwarf_version < 4) 22719 add_AT_addr (comp_unit_die (), DW_AT_entry_pc, const0_rtx); 22720 22721 add_ranges (NULL); 22722 } 22723 } 22724 22725 if (debug_info_level >= DINFO_LEVEL_NORMAL) 22726 add_AT_lineptr (comp_unit_die (), DW_AT_stmt_list, 22727 debug_line_section_label); 22728 22729 if (have_macinfo) 22730 add_AT_macptr (comp_unit_die (), 22731 dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros, 22732 macinfo_section_label); 22733 22734 if (have_location_lists) 22735 optimize_location_lists (comp_unit_die ()); 22736 22737 /* Output all of the compilation units. We put the main one last so that 22738 the offsets are available to output_pubnames. */ 22739 for (node = limbo_die_list; node; node = node->next) 22740 output_comp_unit (node->die, 0); 22741 22742 comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL); 22743 for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next) 22744 { 22745 void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT); 22746 22747 /* Don't output duplicate types. */ 22748 if (*slot != HTAB_EMPTY_ENTRY) 22749 continue; 22750 22751 /* Add a pointer to the line table for the main compilation unit 22752 so that the debugger can make sense of DW_AT_decl_file 22753 attributes. */ 22754 if (debug_info_level >= DINFO_LEVEL_NORMAL) 22755 add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list, 22756 debug_line_section_label); 22757 22758 output_comdat_type_unit (ctnode); 22759 *slot = ctnode; 22760 } 22761 htab_delete (comdat_type_table); 22762 22763 /* Output the main compilation unit if non-empty or if .debug_macinfo 22764 or .debug_macro will be emitted. */ 22765 output_comp_unit (comp_unit_die (), have_macinfo); 22766 22767 /* Output the abbreviation table. */ 22768 if (abbrev_die_table_in_use != 1) 22769 { 22770 switch_to_section (debug_abbrev_section); 22771 ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label); 22772 output_abbrev_section (); 22773 } 22774 22775 /* Output location list section if necessary. */ 22776 if (have_location_lists) 22777 { 22778 /* Output the location lists info. */ 22779 switch_to_section (debug_loc_section); 22780 ASM_GENERATE_INTERNAL_LABEL (loc_section_label, 22781 DEBUG_LOC_SECTION_LABEL, 0); 22782 ASM_OUTPUT_LABEL (asm_out_file, loc_section_label); 22783 output_location_lists (comp_unit_die ()); 22784 } 22785 22786 /* Output public names table if necessary. */ 22787 if (!VEC_empty (pubname_entry, pubname_table)) 22788 { 22789 gcc_assert (info_section_emitted); 22790 switch_to_section (debug_pubnames_section); 22791 output_pubnames (pubname_table); 22792 } 22793 22794 /* Output public types table if necessary. */ 22795 /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2. 22796 It shouldn't hurt to emit it always, since pure DWARF2 consumers 22797 simply won't look for the section. */ 22798 if (!VEC_empty (pubname_entry, pubtype_table)) 22799 { 22800 bool empty = false; 22801 22802 if (flag_eliminate_unused_debug_types) 22803 { 22804 /* The pubtypes table might be emptied by pruning unused items. */ 22805 unsigned i; 22806 pubname_ref p; 22807 empty = true; 22808 FOR_EACH_VEC_ELT (pubname_entry, pubtype_table, i, p) 22809 if (p->die->die_offset != 0) 22810 { 22811 empty = false; 22812 break; 22813 } 22814 } 22815 if (!empty) 22816 { 22817 gcc_assert (info_section_emitted); 22818 switch_to_section (debug_pubtypes_section); 22819 output_pubnames (pubtype_table); 22820 } 22821 } 22822 22823 /* Output the address range information if a CU (.debug_info section) 22824 was emitted. We output an empty table even if we had no functions 22825 to put in it. This because the consumer has no way to tell the 22826 difference between an empty table that we omitted and failure to 22827 generate a table that would have contained data. */ 22828 if (info_section_emitted) 22829 { 22830 unsigned long aranges_length = size_of_aranges (); 22831 22832 switch_to_section (debug_aranges_section); 22833 output_aranges (aranges_length); 22834 } 22835 22836 /* Output ranges section if necessary. */ 22837 if (ranges_table_in_use) 22838 { 22839 switch_to_section (debug_ranges_section); 22840 ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label); 22841 output_ranges (); 22842 } 22843 22844 /* Have to end the macro section. */ 22845 if (have_macinfo) 22846 { 22847 switch_to_section (debug_macinfo_section); 22848 ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label); 22849 output_macinfo (); 22850 dw2_asm_output_data (1, 0, "End compilation unit"); 22851 } 22852 22853 /* Output the source line correspondence table. We must do this 22854 even if there is no line information. Otherwise, on an empty 22855 translation unit, we will generate a present, but empty, 22856 .debug_info section. IRIX 6.5 `nm' will then complain when 22857 examining the file. This is done late so that any filenames 22858 used by the debug_info section are marked as 'used'. */ 22859 switch_to_section (debug_line_section); 22860 ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label); 22861 if (! DWARF2_ASM_LINE_DEBUG_INFO) 22862 output_line_info (); 22863 22864 /* If we emitted any DW_FORM_strp form attribute, output the string 22865 table too. */ 22866 if (debug_str_hash) 22867 htab_traverse (debug_str_hash, output_indirect_string, NULL); 22868 } 22869 22870 #include "gt-dwarf2out.h" 22871