diff --git a/.gitignore b/.gitignore index 237d230..bdc3de8 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,4 @@ /gcc-8.0.1-20180131.tar.xz /gcc-8.0.1-20180207.tar.xz /gcc-8.0.1-20180210.tar.xz +/gcc-8.0.1-20180218.tar.xz diff --git a/gcc.spec b/gcc.spec index 4919b75..3352a13 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,10 +1,10 @@ -%global DATE 20180210 -%global SVNREV 257551 +%global DATE 20180218 +%global SVNREV 257796 %global gcc_version 8.0.1 %global gcc_major 8 # Note, gcc_release must be integer, if you want to add suffixes to -# %{release}, append them after %{gcc_release} on Release: line. -%global gcc_release 0.13 +# %%{release}, append them after %%{gcc_release} on Release: line. +%global gcc_release 0.14 %global nvptx_tools_gitrev c28050f60193b3b95a18866a96f03334e874e78f %global nvptx_newlib_gitrev aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24 %global _unpackaged_files_terminate_build 0 @@ -100,21 +100,21 @@ License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2 Group: Development/Languages # The source for this package was pulled from upstream's vcs. Use the # following commands to generate the tarball: -# svn export svn://gcc.gnu.org/svn/gcc/branches/redhat/gcc-8-branch@%{SVNREV} gcc-%{version}-%{DATE} -# tar cf - gcc-%{version}-%{DATE} | xz -9e > gcc-%{version}-%{DATE}.tar.xz +# svn export svn://gcc.gnu.org/svn/gcc/branches/redhat/gcc-8-branch@%%{SVNREV} gcc-%%{version}-%%{DATE} +# tar cf - gcc-%%{version}-%%{DATE} | xz -9e > gcc-%%{version}-%%{DATE}.tar.xz Source0: gcc-%{version}-%{DATE}.tar.xz # The source for nvptx-tools package was pulled from upstream's vcs. Use the # following commands to generate the tarball: # git clone https://github.com/MentorEmbedded/nvptx-tools.git # cd nvptx-tools -# git archive origin/master --prefix=nvptx-tools-%{nvptx_tools_gitrev}/ | xz -9e > ../nvptx-tools-%{nvptx_tools_gitrev}.tar.xz +# git archive origin/master --prefix=nvptx-tools-%%{nvptx_tools_gitrev}/ | xz -9e > ../nvptx-tools-%%{nvptx_tools_gitrev}.tar.xz # cd ..; rm -rf nvptx-tools Source1: nvptx-tools-%{nvptx_tools_gitrev}.tar.xz # The source for nvptx-newlib package was pulled from upstream's vcs. Use the # following commands to generate the tarball: # git clone https://github.com/MentorEmbedded/nvptx-newlib.git # cd nvptx-newlib -# git archive origin/master --prefix=nvptx-newlib-%{nvptx_newlib_gitrev}/ | xz -9 > ../nvptx-newlib-%{nvptx_newlib_gitrev}.tar.xz +# git archive origin/master --prefix=nvptx-newlib-%%{nvptx_newlib_gitrev}/ | xz -9 > ../nvptx-newlib-%%{nvptx_newlib_gitrev}.tar.xz # cd ..; rm -rf nvptx-newlib Source2: nvptx-newlib-%{nvptx_newlib_gitrev}.tar.xz %global isl_version 0.16.1 @@ -126,7 +126,7 @@ URL: http://gcc.gnu.org # Need binutils which support --hash-style=gnu >= 2.17.50.0.2-7 # Need binutils which support mffgpr and mftgpr >= 2.17.50.0.2-8 # Need binutils which support --build-id >= 2.17.50.0.17-3 -# Need binutils which support %gnu_unique_object >= 2.19.51.0.14 +# Need binutils which support %%gnu_unique_object >= 2.19.51.0.14 # Need binutils which support .cfi_sections >= 2.19.51.0.14-33 # Need binutils which support --no-add-needed >= 2.20.51.0.2-12 # Need binutils which support -plugin @@ -139,6 +139,7 @@ BuildRequires: texinfo, texinfo-tex, /usr/bin/pod2man BuildRequires: systemtap-sdt-devel >= 1.3 BuildRequires: gmp-devel >= 4.1.2-8, mpfr-devel >= 2.2.1, libmpc-devel >= 0.8.1 BuildRequires: python2-devel, python3-devel +BuildRequires: gcc, gcc-c++ %if %{build_go} BuildRequires: hostname, procps %endif @@ -189,7 +190,7 @@ Requires: cpp = %{version}-%{release} # Need binutils that supports --hash-style=gnu # Need binutils that support mffgpr/mftgpr # Need binutils that support --build-id -# Need binutils that support %gnu_unique_object +# Need binutils that support %%gnu_unique_object # Need binutils that support .cfi_sections # Need binutils that support --no-add-needed # Need binutils that support -plugin @@ -234,7 +235,6 @@ Patch9: gcc8-aarch64-async-unw-tables.patch Patch10: gcc8-foffload-default.patch Patch11: gcc8-Wno-format-security.patch Patch12: gcc8-rh1512529-aarch64.patch -Patch13: gcc8-lvu-revert.patch Patch1000: nvptx-tools-no-ptxas.patch Patch1001: nvptx-tools-build.patch @@ -794,7 +794,6 @@ to NVidia PTX capable devices if available. %patch10 -p0 -b .foffload-default~ %patch11 -p0 -b .Wno-format-security~ %patch12 -p0 -b .rh1512529-aarch64~ -%patch13 -p0 -b .lvu-revert~ cd nvptx-tools-%{nvptx_tools_gitrev} %patch1000 -p1 -b .nvptx-tools-no-ptxas~ @@ -2752,8 +2751,8 @@ fi %dir %{_prefix}/lib/gcc/%{gcc_target_platform} %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major} %dir %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include -#%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/itm.h -#%{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/include/itm_weak.h +#%%{_prefix}/lib/gcc/%%{gcc_target_platform}/%%{gcc_major}/include/itm.h +#%%{_prefix}/lib/gcc/%%{gcc_target_platform}/%%{gcc_major}/include/itm_weak.h %ifnarch sparcv9 sparc64 ppc ppc64 ppc64p7 %{_prefix}/lib/gcc/%{gcc_target_platform}/%{gcc_major}/libitm.so %endif @@ -3053,6 +3052,32 @@ fi %endif %changelog +* Sun Feb 18 2018 Jakub Jelinek 8.0.1-0.14 +- update from the trunk + - PRs ada/84277, bootstrap/82939, bootstrap/84405, c++/79064, c++/79626, + c++/81853, c++/82468, c++/82664, c++/82764, c++/83227, c++/83835, + c++/83990, c++/84045, c++/84080, c++/84151, c++/84192, c++/84263, + c++/84281, c++/84314, c++/84330, c++/84333, c++/84338, c++/84341, + c++/84350, c++/84364, c++/84368, c++/84375, c++/84376, c++/84420, + c++/84421, c/82210, c/84108, c/84305, debug/84319, debug/84342, + fortran/35299, fortran/54223, fortran/68746, fortran/80945, + fortran/84074, fortran/84270, fortran/84273, fortran/84276, + fortran/84313, fortran/84354, fortran/84381, fortran/84385, + fortran/84389, fortran/84409, fortran/84418, ipa/84425, + libgfortran/84389, libgfortran/84412, libstdc++/81797, + middle-end/83665, middle-end/84309, other/82368, preprocessor/83063, + preprocessor/83708, rtl-optimization/70023, rtl-optimization/81443, + rtl-optimization/83723, rtl-optimization/84169, sanitizer/84307, + sanitizer/84340, target/79242, target/81535, target/82862, + target/83758, target/83760, target/83831, target/83984, target/84220, + target/84239, target/84266, target/84272, target/84279, target/84335, + target/84336, target/84359, target/84365, target/84370, target/84372, + tree-optimization/83698, tree-optimization/84016, + tree-optimization/84190, tree-optimization/84321, + tree-optimization/84334, tree-optimization/84339, + tree-optimization/84357, tree-optimization/84383, + tree-optimization/84399, tree-optimization/84417 + * Sat Feb 10 2018 Jakub Jelinek 8.0.1-0.13 - update from the trunk - PRs c++/77522, c++/80567, c++/81610, c++/81917, c++/83204, c++/83659, diff --git a/gcc8-lvu-revert.patch b/gcc8-lvu-revert.patch deleted file mode 100644 index c47ca1c..0000000 --- a/gcc8-lvu-revert.patch +++ /dev/null @@ -1,2679 +0,0 @@ -Revert: - -2018-02-09 Alexandre Oliva - - * cfgexpand.c (expand_gimple_basic_block): Handle inline entry - markers. - * dwarf2out.c (dwarf2_debug_hooks): Enable inline_entry hook. - (BLOCK_INLINE_ENTRY_LABEL): New. - (dwarf2out_var_location): Disregard inline entry markers. - (inline_entry_data): New struct. - (inline_entry_data_hasher): New hashtable type. - (inline_entry_data_hasher::hash): New. - (inline_entry_data_hasher::equal): New. - (inline_entry_data_table): New variable. - (add_high_low_attributes): Add DW_AT_entry_pc and - DW_AT_GNU_entry_view attributes if a pending entry is found - in inline_entry_data_table. Add old entry_pc attribute only - if debug nonbinding markers are disabled. - (gen_inlined_subroutine_die): Set BLOCK_DIE if nonbinding - markers are enabled. - (block_within_block_p, dwarf2out_inline_entry): New. - (dwarf2out_finish): Check that no entries remained in - inline_entry_data_table. - * final.c (reemit_insn_block_notes): Handle inline entry notes. - (final_scan_insn, notice_source_line): Likewise. - (rest_of_clean_state): Skip inline entry markers. - * gimple-pretty-print.c (dump_gimple_debug): Handle inline entry - markers. - * gimple.c (gimple_build_debug_inline_entry): New. - * gimple.h (enum gimple_debug_subcode): Add - GIMPLE_DEBUG_INLINE_ENTRY. - (gimple_build_debug_inline_entry): Declare. - (gimple_debug_inline_entry_p): New. - (gimple_debug_nonbind_marker_p): Adjust. - * insn-notes.def (INLINE_ENTRY): New. - * print-rtl.c (rtx_writer::print_rtx_operand_code_0): Handle - inline entry marker notes. - (print_insn): Likewise. - * rtl.h (NOTE_MARKER_P): Add INLINE_ENTRY support. - (INSN_DEBUG_MARKER_KIND): Likewise. - (GEN_RTX_DEBUG_MARKER_INLINE_ENTRY_PAT): New. - * tree-inline.c (expand_call_inline): Build and insert - debug_inline_entry stmt. - * tree-ssa-live.c (remove_unused_scope_block_p): Preserve - inline entry blocks early, if nonbind markers are enabled. - (dump_scope_block): Dump fragment info. - * var-tracking.c (reemit_marker_as_note): Handle inline entry note. - * doc/gimple.texi (gimple_debug_inline_entry_p): New. - (gimple_build_debug_inline_entry): New. - * doc/invoke.texi (gstatement-frontiers, gno-statement-frontiers): - Enable/disable inline entry points too. - * doc/rtl.texi (NOTE_INSN_INLINE_ENTRY): New. - (DEBUG_INSN): Describe inline entry markers. - - * common.opt (gvariable-location-views): New. - (gvariable-location-views=incompat5): New. - * config.in: Rebuilt. - * configure: Rebuilt. - * configure.ac: Test assembler for view support. - * dwarf2asm.c (dw2_asm_output_symname_uleb128): New. - * dwarf2asm.h (dw2_asm_output_symname_uleb128): Declare. - * dwarf2out.c (var_loc_view): New typedef. - (struct dw_loc_list_struct): Add vl_symbol, vbegin, vend. - (dwarf2out_locviews_in_attribute): New. - (dwarf2out_locviews_in_loclist): New. - (dw_val_equal_p): Compare val_view_list of dw_val_class_view_lists. - (enum dw_line_info_opcode): Add LI_adv_address. - (struct dw_line_info_table): Add view. - (RESET_NEXT_VIEW, RESETTING_VIEW_P): New macros. - (DWARF2_ASM_VIEW_DEBUG_INFO): Define default. - (zero_view_p): New variable. - (ZERO_VIEW_P): New macro. - (output_asm_line_debug_info): New. - (struct var_loc_node): Add view. - (add_AT_view_list, AT_loc_list): New. - (add_var_loc_to_decl): Add view param. Test it against last. - (new_loc_list): Add view params. Record them. - (AT_loc_list_ptr): Handle loc and view lists. - (view_list_to_loc_list_val_node): New. - (print_dw_val): Handle dw_val_class_view_list. - (size_of_die): Likewise. - (value_format): Likewise. - (loc_list_has_views): New. - (gen_llsym): Set vl_symbol too. - (maybe_gen_llsym, skip_loc_list_entry): New. - (dwarf2out_maybe_output_loclist_view_pair): New. - (output_loc_list): Output view list or entries too. - (output_view_list_offset): New. - (output_die): Handle dw_val_class_view_list. - (output_dwarf_version): New. - (output_compilation_unit_header): Use it. - (output_skeleton_debug_sections): Likewise. - (output_rnglists, output_line_info): Likewise. - (output_pubnames, output_aranges): Update version comments. - (output_one_line_info_table): Output view numbers in asm comments. - (dw_loc_list): Determine current endview, pass it to new_loc_list. - Call maybe_gen_llsym. - (loc_list_from_tree_1): Adjust. - (add_AT_location_description): Create view list attribute if - needed, check it's absent otherwise. - (convert_cfa_to_fb_loc_list): Adjust. - (maybe_emit_file): Call output_asm_line_debug_info for test. - (dwarf2out_var_location): Reset views as needed. Precompute - add_var_loc_to_decl args. Call get_attr_min_length only if we have the - attribute. Set view. - (new_line_info_table): Reset next view. - (set_cur_line_info_table): Call output_asm_line_debug_info for test. - (dwarf2out_source_line): Likewise. Output view resets and labels to - the assembler, or select appropriate line info opcodes. - (prune_unused_types_walk_attribs): Handle dw_val_class_view_list. - (optimize_string_length): Catch it. Adjust. - (resolve_addr): Copy vl_symbol along with ll_symbol. Handle - dw_val_class_view_list, and remove it if no longer needed. - (hash_loc_list): Hash view numbers. - (loc_list_hasher::equal): Compare them. - (optimize_location_lists): Check whether a view list symbol is - needed, and whether the locview attribute is present, and - whether they match. Remove the locview attribute if no longer - needed. - (index_location_lists): Call skip_loc_list_entry for test. - (dwarf2out_finish): Call output_asm_line_debug_info for test. - Use output_dwarf_version. - * dwarf2out.h (enum dw_val_class): Add dw_val_class_view_list. - (struct dw_val_node): Add val_view_list. - * final.c (SEEN_NEXT_VIEW): New. - (set_next_view_needed): New. - (clear_next_view_needed): New. - (maybe_output_next_view): New. - (final_start_function): Rename to... - (final_start_function_1): ... this. Take pointer to FIRST, - add SEEN parameter. Emit param bindings in the initial view. - (final_start_function): Reintroduce SEEN-less interface. - (final): Rename to... - (final_1): ... this. Take SEEN parameter. Output final pending - next view at the end. - (final): Reintroduce seen-less interface. - (final_scan_insn): Output pending next view before switching - sections or ending a block. Mark the next view as needed when - outputting variable locations. Notify debug backend of section - changes, and of location view changes. - (rest_of_handle_final): Adjust. - * toplev.c (process_options): Autodetect value for debug variable - location views option. Warn on incompat5 without -gdwarf-5. - * doc/invoke.texi (gvariable-location-views): New. - (gvariable-location-views=incompat5): New. - (gno-variable-location-views): New. -include/ - * dwarf2.def (DW_AT_GNU_entry_view): New. - - * dwarf2.def (DW_AT_GNU_locviews): New. - * dwarf2.h (enum dwarf_location_list_entry_type): Add - DW_LLE_GNU_view_pair. - (DW_LLE_view_pair): Define. - ---- include/dwarf2.def (revision 257511) -+++ include/dwarf2.def (revision 257509) -@@ -443,8 +443,6 @@ DW_AT (DW_AT_GNU_pubtypes, 0x2135) - /* Attribute for discriminator. - See http://gcc.gnu.org/wiki/Discriminator */ - DW_AT (DW_AT_GNU_discriminator, 0x2136) --DW_AT (DW_AT_GNU_locviews, 0x2137) --DW_AT (DW_AT_GNU_entry_view, 0x2138) - /* VMS extensions. */ - DW_AT (DW_AT_VMS_rtnbeg_pd_address, 0x2201) - /* GNAT extensions. */ ---- include/dwarf2.h (revision 257511) -+++ include/dwarf2.h (revision 257509) -@@ -298,14 +298,6 @@ enum dwarf_location_list_entry_type - DW_LLE_start_end = 0x07, - DW_LLE_start_length = 0x08, - -- /* -- has the proposal for now; only available to list members. -- -- A (possibly updated) copy of the proposal is available at -- . */ -- DW_LLE_GNU_view_pair = 0x09, --#define DW_LLE_view_pair DW_LLE_GNU_view_pair -- - /* Former extension for Fission. - See http://gcc.gnu.org/wiki/DebugFission. */ - DW_LLE_GNU_end_of_list_entry = 0x00, ---- gcc/doc/gimple.texi (revision 257511) -+++ gcc/doc/gimple.texi (revision 257509) -@@ -836,11 +836,6 @@ Return true if g is a @code{GIMPLE_DEBUG - a source statement. - @end deftypefn - --@deftypefn {GIMPLE function} gimple_debug_inline_entry_p (gimple g) --Return true if g is a @code{GIMPLE_DEBUG} that marks the entry --point of an inlined function. --@end deftypefn -- - @deftypefn {GIMPLE function} gimple_debug_nonbind_marker_p (gimple g) - Return true if g is a @code{GIMPLE_DEBUG} that marks a program location, - without any variable binding. -@@ -1546,7 +1541,6 @@ Set the conditional @code{COND_STMT} to - @cindex @code{GIMPLE_DEBUG} - @cindex @code{GIMPLE_DEBUG_BIND} - @cindex @code{GIMPLE_DEBUG_BEGIN_STMT} --@cindex @code{GIMPLE_DEBUG_INLINE_ENTRY} - - @deftypefn {GIMPLE function} gdebug *gimple_build_debug_bind (tree var, @ - tree value, gimple stmt) -@@ -1632,18 +1626,6 @@ observable, and that none of the side ef - statements are. - @end deftypefn - --@deftypefn {GIMPLE function} gimple gimple_build_debug_inline_entry (tree block, location_t location) --Build a @code{GIMPLE_DEBUG} statement with --@code{GIMPLE_DEBUG_INLINE_ENTRY} @code{subcode}. The effect of this --statement is to tell debug information generation machinery that a --function call at @code{location} underwent inline substitution, that --@code{block} is the enclosing lexical block created for the --substitution, and that at the point of the program in which the stmt is --inserted, all parameters for the inlined function are bound to the --respective arguments, and none of the side effects of its stmts are --observable. --@end deftypefn -- - @node @code{GIMPLE_EH_FILTER} - @subsection @code{GIMPLE_EH_FILTER} - @cindex @code{GIMPLE_EH_FILTER} ---- gcc/doc/invoke.texi (revision 257511) -+++ gcc/doc/invoke.texi (revision 257509) -@@ -348,7 +348,6 @@ Objective-C and Objective-C++ Dialects}. - -gstabs -gstabs+ -gstrict-dwarf -gno-strict-dwarf @gol - -gcolumn-info -gno-column-info @gol - -gstatement-frontiers -gno-statement-frontiers @gol ---gvariable-location-views -gno-variable-location-views @gol - -gvms -gxcoff -gxcoff+ -gz@r{[}=@var{type}@r{]} @gol - -fdebug-prefix-map=@var{old}=@var{new} -fdebug-types-section @gol - -fno-eliminate-unused-debug-types @gol -@@ -7256,34 +7255,6 @@ markers in the line number table. This - compiling with optimization (@option{-Os}, @option{-O}, @option{-O2}, - @dots{}), and outputting DWARF 2 debug information at the normal level. - --@item -gvariable-location-views --@item -gvariable-location-views=incompat5 --@item -gno-variable-location-views --@opindex gvariable-location-views --@opindex gvariable-location-views=incompat5 --@opindex gno-variable-location-views --Augment variable location lists with progressive view numbers implied --from the line number table. This enables debug information consumers to --inspect state at certain points of the program, even if no instructions --associated with the corresponding source locations are present at that --point. If the assembler lacks support for view numbers in line number --tables, this will cause the compiler to emit the line number table, --which generally makes them somewhat less compact. The augmented line --number tables and location lists are fully backward-compatible, so they --can be consumed by debug information consumers that are not aware of --these augmentations, but they won't derive any benefit from them either. --This is enabled by default when outputting DWARF 2 debug information at --the normal level, as long as @option{-fvar-tracking-assignments} is --enabled and @option{-gstrict-dwarf} is not. -- --There is a proposed representation for view numbers that is not backward --compatible with the location list format introduced in DWARF 5, that can --be enabled with @option{-gvariable-location-views=incompat5}. This --option may be removed in the future, is only provided as a reference --implementation of the proposed representation. Debug information --consumers are not expected to support this extended format, and they --would be rendered unable to decode location lists using it. -- - @item -gz@r{[}=@var{type}@r{]} - @opindex gz - Produce compressed debug sections in DWARF format, if that is supported. ---- gcc/doc/rtl.texi (revision 257511) -+++ gcc/doc/rtl.texi (revision 257509) -@@ -3670,10 +3670,7 @@ Refers to a parameter that was completel - @item (debug_marker:@var{mode}) - Marks a program location. With @code{VOIDmode}, it stands for the - beginning of a statement, a recommended inspection point logically after --all prior side effects, and before any subsequent side effects. With --@code{BLKmode}, it indicates an inline entry point: the lexical block --encoded in the @code{INSN_LOCATION} is the enclosing block that encloses --the inlined function. -+all prior side effects, and before any subsequent side effects. - - @end table - -@@ -3957,13 +3954,6 @@ This note is used to generate @code{is_s - debuggign information. It indicates the beginning of a user - statement. - --@findex NOTE_INSN_INLINE_ENTRY --@item NOTE_INSN_INLINE_ENTRY --This note is used to generate @code{entry_pc} for inlined subroutines in --debugging information. It indicates an inspection point at which all --arguments for the inlined function have been bound, and before its first --statement. -- - @end table - - These codes are printed symbolically when they appear in debugging dumps. -@@ -3981,12 +3971,8 @@ binds a user variable tree to an RTL rep - it stands for the value bound to the corresponding - @code{DEBUG_EXPR_DECL}. - --@code{GIMPLE_DEBUG_BEGIN_STMT} and @code{GIMPLE_DEBUG_INLINE_ENTRY} are --expanded to RTL as a @code{DEBUG_INSN} with a @code{DEBUG_MARKER} --@code{PATTERN}; the difference is the RTL mode: the former's --@code{DEBUG_MARKER} is @code{VOIDmode}, whereas the latter is --@code{BLKmode}; information about the inlined function can be taken from --the lexical block encoded in the @code{INSN_LOCATION}. These -+@code{GIMPLE_DEBUG_BEGIN_STMT} is expanded to RTL as a @code{DEBUG_INSN} -+with a @code{VOIDmode} @code{DEBUG_MARKER} @code{PATTERN}. These - @code{DEBUG_INSN}s, that do not carry @code{VAR_LOCATION} information, - just @code{DEBUG_MARKER}s, can be detected by testing - @code{DEBUG_MARKER_INSN_P}, whereas those that do can be recognized as -@@ -3997,8 +3983,8 @@ with respect to each other, particularly - information is kept in pseudo-instruction form, so that, unlike notes, - it gets the same treatment and adjustments that regular instructions - would. It is the variable tracking pass that turns these --pseudo-instructions into @code{NOTE_INSN_VAR_LOCATION}, --@code{NOTE_INSN_BEGIN_STMT} and @code{NOTE_INSN_INLINE_ENTRY} notes, -+pseudo-instructions into @code{NOTE_INSN_VAR_LOCATION} and -+@code{NOTE_INSN_BEGIN_STMT} notes, - analyzing control flow, value equivalences and changes to registers and - memory referenced in value expressions, propagating the values of debug - temporaries and determining expressions that can be used to compute the ---- gcc/dwarf2asm.c (revision 257511) -+++ gcc/dwarf2asm.c (revision 257509) -@@ -767,35 +767,6 @@ dw2_asm_output_data_sleb128 (HOST_WIDE_I - va_end (ap); - } - --/* Output symbol LAB1 as an unsigned LEB128 quantity. LAB1 should be -- an assembler-computed constant, e.g. a view number, because we -- can't have relocations in LEB128 quantities. */ -- --void --dw2_asm_output_symname_uleb128 (const char *lab1 ATTRIBUTE_UNUSED, -- const char *comment, ...) --{ -- va_list ap; -- -- va_start (ap, comment); -- --#ifdef HAVE_AS_LEB128 -- fputs ("\t.uleb128 ", asm_out_file); -- assemble_name (asm_out_file, lab1); --#else -- gcc_unreachable (); --#endif -- -- if (flag_debug_asm && comment) -- { -- fprintf (asm_out_file, "\t%s ", ASM_COMMENT_START); -- vfprintf (asm_out_file, comment, ap); -- } -- fputc ('\n', asm_out_file); -- -- va_end (ap); --} -- - void - dw2_asm_output_delta_uleb128 (const char *lab1 ATTRIBUTE_UNUSED, - const char *lab2 ATTRIBUTE_UNUSED, ---- gcc/dwarf2asm.h (revision 257511) -+++ gcc/dwarf2asm.h (revision 257509) -@@ -70,10 +70,6 @@ extern void dw2_asm_output_data_sleb128 - const char *, ...) - ATTRIBUTE_NULL_PRINTF_2; - --extern void dw2_asm_output_symname_uleb128 (const char *, -- const char *, ...) -- ATTRIBUTE_NULL_PRINTF_2; -- - extern void dw2_asm_output_delta_uleb128 (const char *, const char *, - const char *, ...) - ATTRIBUTE_NULL_PRINTF_3; ---- gcc/configure (revision 257511) -+++ gcc/configure (revision 257509) -@@ -27825,52 +27825,6 @@ $as_echo "$gcc_cv_as_dwarf2_file_buggy" - - $as_echo "#define HAVE_AS_DWARF2_DEBUG_LINE 1" >>confdefs.h - -- -- if test $gcc_cv_as_leb128 = yes; then -- conftest_s="\ -- .file 1 \"conftest.s\" -- .loc 1 3 0 view .LVU1 -- $insn -- .data -- .uleb128 .LVU1 -- .uleb128 .LVU1 --" -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for dwarf2 debug_view support" >&5 --$as_echo_n "checking assembler for dwarf2 debug_view support... " >&6; } --if test "${gcc_cv_as_dwarf2_debug_view+set}" = set; then : -- $as_echo_n "(cached) " >&6 --else -- gcc_cv_as_dwarf2_debug_view=no -- if test $in_tree_gas = yes; then -- if test $in_tree_gas_is_elf = yes \ -- && test $gcc_cv_gas_vers -ge `expr \( \( 2 \* 1000 \) + 27 \) \* 1000 + 0` -- then gcc_cv_as_dwarf2_debug_view=yes --fi -- elif test x$gcc_cv_as != x; then -- $as_echo "$conftest_s" > conftest.s -- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -o conftest.o conftest.s >&5' -- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; }; } -- then -- gcc_cv_as_dwarf2_debug_view=yes -- else -- echo "configure: failed program was" >&5 -- cat conftest.s >&5 -- fi -- rm -f conftest.o conftest.s -- fi --fi --{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_dwarf2_debug_view" >&5 --$as_echo "$gcc_cv_as_dwarf2_debug_view" >&6; } --if test $gcc_cv_as_dwarf2_debug_view = yes; then -- --$as_echo "#define HAVE_AS_DWARF2_DEBUG_VIEW 1" >>confdefs.h -- --fi -- fi - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for --gdwarf2 option" >&5 ---- gcc/final.c (revision 257511) -+++ gcc/final.c (revision 257509) -@@ -110,7 +110,6 @@ along with GCC; see the file COPYING3. - /* Bitflags used by final_scan_insn. */ - #define SEEN_NOTE 1 - #define SEEN_EMITTED 2 --#define SEEN_NEXT_VIEW 4 - - /* Last insn processed by final_scan_insn. */ - static rtx_insn *debug_insn; -@@ -1611,7 +1610,6 @@ reemit_insn_block_notes (void) - break; - - case NOTE_INSN_BEGIN_STMT: -- case NOTE_INSN_INLINE_ENTRY: - this_block = LOCATION_BLOCK (NOTE_MARKER_LOCATION (insn)); - goto set_cur_block_to_this_block; - -@@ -1694,67 +1692,6 @@ get_some_local_dynamic_name () - return 0; - } - --/* Arrange for us to emit a source location note before any further -- real insns or section changes, by setting the SEEN_NEXT_VIEW bit in -- *SEEN, as long as we are keeping track of location views. The bit -- indicates we have referenced the next view at the current PC, so we -- have to emit it. This should be called next to the var_location -- debug hook. */ -- --static inline void --set_next_view_needed (int *seen) --{ -- if (debug_variable_location_views) -- *seen |= SEEN_NEXT_VIEW; --} -- --/* Clear the flag in *SEEN indicating we need to emit the next view. -- This should be called next to the source_line debug hook. */ -- --static inline void --clear_next_view_needed (int *seen) --{ -- *seen &= ~SEEN_NEXT_VIEW; --} -- --/* Test whether we have a pending request to emit the next view in -- *SEEN, and emit it if needed, clearing the request bit. */ -- --static inline void --maybe_output_next_view (int *seen) --{ -- if ((*seen & SEEN_NEXT_VIEW) != 0) -- { -- clear_next_view_needed (seen); -- (*debug_hooks->source_line) (last_linenum, last_columnnum, -- last_filename, last_discriminator, -- false); -- } --} -- --/* We want to emit param bindings (before the first begin_stmt) in the -- initial view, if we are emitting views. To that end, we may -- consume initial notes in the function, processing them in -- final_start_function, before signaling the beginning of the -- prologue, rather than in final. -- -- We don't test whether the DECLs are PARM_DECLs: the assumption is -- that there will be a NOTE_INSN_BEGIN_STMT marker before any -- non-parameter NOTE_INSN_VAR_LOCATION. It's ok if the marker is not -- there, we'll just have more variable locations bound in the initial -- view, which is consistent with their being bound without any code -- that would give them a value. */ -- --static inline bool --in_initial_view_p (rtx_insn *insn) --{ -- return (!DECL_IGNORED_P (current_function_decl) -- && debug_variable_location_views -- && insn && GET_CODE (insn) == NOTE -- && (NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION -- || NOTE_KIND (insn) == NOTE_INSN_DELETED)); --} -- - /* Output assembler code for the start of a function, - and initialize some of the variables in this file - for the new function. The label for the function and associated -@@ -1762,15 +1699,12 @@ in_initial_view_p (rtx_insn *insn) - - FIRST is the first insn of the rtl for the function being compiled. - FILE is the file to write assembler code to. -- SEEN should be initially set to zero, and it may be updated to -- indicate we have references to the next location view, that would -- require us to emit it at the current PC. - OPTIMIZE_P is nonzero if we should eliminate redundant - test and compare insns. */ - --static void --final_start_function_1 (rtx_insn **firstp, FILE *file, int *seen, -- int optimize_p ATTRIBUTE_UNUSED) -+void -+final_start_function (rtx_insn *first, FILE *file, -+ int optimize_p ATTRIBUTE_UNUSED) - { - block_depth = 0; - -@@ -1788,21 +1722,8 @@ final_start_function_1 (rtx_insn **first - if (flag_sanitize & SANITIZE_ADDRESS) - asan_function_start (); - -- rtx_insn *first = *firstp; -- if (in_initial_view_p (first)) -- { -- do -- { -- final_scan_insn (first, file, 0, 0, seen); -- first = NEXT_INSN (first); -- } -- while (in_initial_view_p (first)); -- *firstp = first; -- } -- - if (!DECL_IGNORED_P (current_function_decl)) -- debug_hooks->begin_prologue (last_linenum, last_columnnum, -- last_filename); -+ debug_hooks->begin_prologue (last_linenum, last_columnnum, last_filename); - - if (!dwarf2_debug_info_emitted_p (current_function_decl)) - dwarf2out_begin_prologue (0, 0, NULL); -@@ -1878,17 +1799,6 @@ final_start_function_1 (rtx_insn **first - profile_after_prologue (file); - } - --/* This is an exported final_start_function_1, callable without SEEN. */ -- --void --final_start_function (rtx_insn *first, FILE *file, -- int optimize_p ATTRIBUTE_UNUSED) --{ -- int seen = 0; -- final_start_function_1 (&first, file, &seen, optimize_p); -- gcc_assert (seen == 0); --} -- - static void - profile_after_prologue (FILE *file ATTRIBUTE_UNUSED) - { -@@ -2018,10 +1928,11 @@ dump_basic_block_info (FILE *file, rtx_i - /* Output assembler code for some insns: all or part of a function. - For description of args, see `final_start_function', above. */ - --static void --final_1 (rtx_insn *first, FILE *file, int seen, int optimize_p) -+void -+final (rtx_insn *first, FILE *file, int optimize_p) - { - rtx_insn *insn, *next; -+ int seen = 0; - - /* Used for -dA dump. */ - basic_block *start_to_bb = NULL; -@@ -2088,8 +1999,6 @@ final_1 (rtx_insn *first, FILE *file, in - insn = final_scan_insn (insn, file, optimize_p, 0, &seen); - } - -- maybe_output_next_view (&seen); -- - if (flag_debug_asm) - { - free (start_to_bb); -@@ -2106,23 +2015,6 @@ final_1 (rtx_insn *first, FILE *file, in - delete_insn (insn); - } - } -- --/* This is an exported final_1, callable without SEEN. */ -- --void --final (rtx_insn *first, FILE *file, int optimize_p) --{ -- /* Those that use the internal final_start_function_1/final_1 API -- skip initial debug bind notes in final_start_function_1, and pass -- the modified FIRST to final_1. But those that use the public -- final_start_function/final APIs, final_start_function can't move -- FIRST because it's not passed by reference, so if they were -- skipped there, skip them again here. */ -- while (in_initial_view_p (first)) -- first = NEXT_INSN (first); -- -- final_1 (first, file, 0, optimize_p); --} - - const char * - get_insn_template (int code, rtx insn) -@@ -2263,8 +2155,6 @@ final_scan_insn (rtx_insn *insn, FILE *f - break; - - case NOTE_INSN_SWITCH_TEXT_SECTIONS: -- maybe_output_next_view (seen); -- - in_cold_section_p = !in_cold_section_p; - - if (in_cold_section_p) -@@ -2411,8 +2301,6 @@ final_scan_insn (rtx_insn *insn, FILE *f - break; - - case NOTE_INSN_BLOCK_END: -- maybe_output_next_view (seen); -- - if (debug_info_level == DINFO_LEVEL_NORMAL - || debug_info_level == DINFO_LEVEL_VERBOSE - || write_symbols == DWARF2_DEBUG -@@ -2469,10 +2357,7 @@ final_scan_insn (rtx_insn *insn, FILE *f - case NOTE_INSN_VAR_LOCATION: - case NOTE_INSN_CALL_ARG_LOCATION: - if (!DECL_IGNORED_P (current_function_decl)) -- { -- debug_hooks->var_location (insn); -- set_next_view_needed (seen); -- } -+ debug_hooks->var_location (insn); - break; - - case NOTE_INSN_BEGIN_STMT: -@@ -2480,23 +2365,9 @@ final_scan_insn (rtx_insn *insn, FILE *f - if (!DECL_IGNORED_P (current_function_decl) - && notice_source_line (insn, NULL)) - { -- output_source_line: - (*debug_hooks->source_line) (last_linenum, last_columnnum, - last_filename, last_discriminator, - true); -- clear_next_view_needed (seen); -- } -- break; -- -- case NOTE_INSN_INLINE_ENTRY: -- gcc_checking_assert (cfun->debug_nonbind_markers); -- if (!DECL_IGNORED_P (current_function_decl)) -- { -- if (!notice_source_line (insn, NULL)) -- break; -- (*debug_hooks->inline_entry) (LOCATION_BLOCK -- (NOTE_MARKER_LOCATION (insn))); -- goto output_source_line; - } - break; - -@@ -2692,10 +2563,6 @@ final_scan_insn (rtx_insn *insn, FILE *f - - switch_to_section (current_function_section ()); - -- if (debug_variable_location_views -- && !DECL_IGNORED_P (current_function_decl)) -- debug_hooks->var_location (insn); -- - break; - } - /* Output this line note if it is the first or the last line -@@ -2708,12 +2575,7 @@ final_scan_insn (rtx_insn *insn, FILE *f - (*debug_hooks->source_line) (last_linenum, last_columnnum, - last_filename, last_discriminator, - is_stmt); -- clear_next_view_needed (seen); - } -- else -- maybe_output_next_view (seen); -- -- gcc_checking_assert (!DEBUG_INSN_P (insn)); - - if (GET_CODE (body) == PARALLEL - && GET_CODE (XVECEXP (body, 0, 0)) == ASM_INPUT) -@@ -3180,8 +3042,7 @@ final_scan_insn (rtx_insn *insn, FILE *f - /* Let the debug info back-end know about this call. We do this only - after the instruction has been emitted because labels that may be - created to reference the call instruction must appear after it. */ -- if ((debug_variable_location_views || call_insn != NULL) -- && !DECL_IGNORED_P (current_function_decl)) -+ if (call_insn != NULL && !DECL_IGNORED_P (current_function_decl)) - debug_hooks->var_location (insn); - - current_output_insn = debug_insn = 0; -@@ -3203,17 +3064,6 @@ notice_source_line (rtx_insn *insn, bool - if (NOTE_MARKER_P (insn)) - { - location_t loc = NOTE_MARKER_LOCATION (insn); -- /* The inline entry markers (gimple, insn, note) carry the -- location of the call, because that's what we want to carry -- during compilation, but the location we want to output in -- debug information for the inline entry point is the location -- of the function itself. */ -- if (NOTE_KIND (insn) == NOTE_INSN_INLINE_ENTRY) -- { -- tree block = LOCATION_BLOCK (loc); -- tree fn = block_ultimate_origin (block); -- loc = DECL_SOURCE_LOCATION (fn); -- } - expanded_location xloc = expand_location (loc); - if (xloc.line == 0) - { -@@ -4631,10 +4481,8 @@ rest_of_handle_final (void) - delete_vta_debug_insns (false); - - assemble_start_function (current_function_decl, fnname); -- rtx_insn *first = get_insns (); -- int seen = 0; -- final_start_function_1 (&first, asm_out_file, &seen, optimize); -- final_1 (first, asm_out_file, seen, optimize); -+ final_start_function (get_insns (), asm_out_file, optimize); -+ final (get_insns (), asm_out_file, optimize); - if (flag_ipa_ra - && !lookup_attribute ("noipa", DECL_ATTRIBUTES (current_function_decl))) - collect_fn_hard_reg_usage (); -@@ -4820,7 +4668,6 @@ rest_of_clean_state (void) - && (!NOTE_P (insn) || - (NOTE_KIND (insn) != NOTE_INSN_VAR_LOCATION - && NOTE_KIND (insn) != NOTE_INSN_BEGIN_STMT -- && NOTE_KIND (insn) != NOTE_INSN_INLINE_ENTRY - && NOTE_KIND (insn) != NOTE_INSN_CALL_ARG_LOCATION - && NOTE_KIND (insn) != NOTE_INSN_BLOCK_BEG - && NOTE_KIND (insn) != NOTE_INSN_BLOCK_END ---- gcc/insn-notes.def (revision 257511) -+++ gcc/insn-notes.def (revision 257509) -@@ -71,10 +71,6 @@ INSN_NOTE (CALL_ARG_LOCATION) - /* The beginning of a statement. */ - INSN_NOTE (BEGIN_STMT) - --/* The entry point for an inlined function. Its NOTE_BLOCK references -- the lexical block whose abstract origin is the inlined function. */ --INSN_NOTE (INLINE_ENTRY) -- - /* Record the struct for the following basic block. Uses - NOTE_BASIC_BLOCK. FIXME: Redundant with the basic block pointer - now included in every insn. NOTE: If there's no CFG anymore, in other words, ---- gcc/toplev.c (revision 257511) -+++ gcc/toplev.c (revision 257509) -@@ -1558,22 +1558,6 @@ process_options (void) - || write_symbols == VMS_AND_DWARF2_DEBUG) - && !(flag_selective_scheduling || flag_selective_scheduling2)); - -- if (debug_variable_location_views == AUTODETECT_VALUE) -- { -- debug_variable_location_views = flag_var_tracking -- && debug_info_level >= DINFO_LEVEL_NORMAL -- && (write_symbols == DWARF2_DEBUG -- || write_symbols == VMS_AND_DWARF2_DEBUG) -- && !dwarf_strict; -- } -- else if (debug_variable_location_views == -1 && dwarf_version != 5) -- { -- warning_at (UNKNOWN_LOCATION, 0, -- "without -gdwarf-5, -gvariable-location-views=incompat5 " -- "is equivalent to -gvariable-location-views"); -- debug_variable_location_views = 1; -- } -- - if (flag_tree_cselim == AUTODETECT_VALUE) - { - if (HAVE_conditional_move) ---- gcc/config.in (revision 257511) -+++ gcc/config.in (revision 257509) -@@ -358,12 +358,6 @@ - #endif - - --/* Define if your assembler supports views in dwarf2 .loc directives. */ --#ifndef USED_FOR_TARGET --#undef HAVE_AS_DWARF2_DEBUG_VIEW --#endif -- -- - /* Define if your assembler supports the R_PPC64_ENTRY relocation. */ - #ifndef USED_FOR_TARGET - #undef HAVE_AS_ENTRY_MARKERS ---- gcc/dwarf2out.c (revision 257511) -+++ gcc/dwarf2out.c (revision 257509) -@@ -1291,8 +1291,6 @@ struct GTY((for_user)) addr_table_entry - GTY ((desc ("%1.kind"))) addr; - }; - --typedef unsigned int var_loc_view; -- - /* Location lists are ranges + location descriptions for that range, - so you can track variables that are in different places over - their entire life. */ -@@ -1302,11 +1300,9 @@ typedef struct GTY(()) dw_loc_list_struc - addr_table_entry *begin_entry; - const char *end; /* Label for end of range */ - char *ll_symbol; /* Label for beginning of location list. -- Only on head of list. */ -- char *vl_symbol; /* Label for beginning of view list. Ditto. */ -+ Only on head of list */ - const char *section; /* Section this loclist is relative to */ - dw_loc_descr_ref expr; -- var_loc_view vbegin, vend; - hashval_t hash; - /* True if all addresses in this and subsequent lists are known to be - resolved. */ -@@ -1343,29 +1339,6 @@ dwarf_stack_op_name (unsigned int op) - return "OP_"; - } - --/* Return TRUE iff we're to output location view lists as a separate -- attribute next to the location lists, as an extension compatible -- with DWARF 2 and above. */ -- --static inline bool --dwarf2out_locviews_in_attribute () --{ -- return debug_variable_location_views == 1; --} -- --/* Return TRUE iff we're to output location view lists as part of the -- location lists, as proposed for standardization after DWARF 5. */ -- --static inline bool --dwarf2out_locviews_in_loclist () --{ --#ifndef DW_LLE_view_pair -- return false; --#else -- return debug_variable_location_views == -1; --#endif --} -- - /* Return a pointer to a newly allocated location description. Location - descriptions are simple expression terms that can be strung - together to form more complicated location (address) descriptions. */ -@@ -1428,8 +1401,6 @@ dw_val_equal_p (dw_val_node *a, dw_val_n - return a->v.val_loc == b->v.val_loc; - case dw_val_class_loc_list: - return a->v.val_loc_list == b->v.val_loc_list; -- case dw_val_class_view_list: -- return a->v.val_view_list == b->v.val_view_list; - case dw_val_class_die_ref: - return a->v.val_die_ref.die == b->v.val_die_ref.die; - case dw_val_class_fde_ref: -@@ -2747,7 +2718,6 @@ static void dwarf2out_imported_module_or - dw_die_ref); - static void dwarf2out_abstract_function (tree); - static void dwarf2out_var_location (rtx_insn *); --static void dwarf2out_inline_entry (tree); - static void dwarf2out_size_function (tree); - static void dwarf2out_begin_function (tree); - static void dwarf2out_end_function (unsigned int); -@@ -2801,7 +2771,7 @@ const struct gcc_debug_hooks dwarf2_debu - debug_nothing_rtx_code_label, /* label */ - debug_nothing_int, /* handle_pch */ - dwarf2out_var_location, -- dwarf2out_inline_entry, /* inline_entry */ -+ debug_nothing_tree, /* inline_entry */ - dwarf2out_size_function, /* size_function */ - dwarf2out_switch_text_section, - dwarf2out_set_name, -@@ -2905,15 +2875,7 @@ enum dw_line_info_opcode { - LI_set_epilogue_begin, - - /* Emit a DW_LNE_set_discriminator. */ -- LI_set_discriminator, -- -- /* Output a Fixed Advance PC; the target PC is the label index; the -- base PC is the previous LI_adv_address or LI_set_address entry. -- We only use this when emitting debug views without assembler -- support, at explicit user request. Ideally, we should only use -- it when the offset might be zero but we can't tell: it's the only -- way to maybe change the PC without resetting the view number. */ -- LI_adv_address -+ LI_set_discriminator - }; - - typedef struct GTY(()) dw_line_info_struct { -@@ -2935,25 +2897,6 @@ struct GTY(()) dw_line_info_table { - bool is_stmt; - bool in_use; - -- /* This denotes the NEXT view number. -- -- If it is 0, it is known that the NEXT view will be the first view -- at the given PC. -- -- If it is -1, we've advanced PC but we haven't emitted a line location yet, -- so we shouldn't use this view number. -- -- The meaning of other nonzero values depends on whether we're -- computing views internally or leaving it for the assembler to do -- so. If we're emitting them internally, view denotes the view -- number since the last known advance of PC. If we're leaving it -- for the assembler, it denotes the LVU label number that we're -- going to ask the assembler to assign. */ -- var_loc_view view; -- --#define RESET_NEXT_VIEW(x) ((x) = (var_loc_view)0) --#define RESETTING_VIEW_P(x) ((x) == (var_loc_view)0) -- - vec *entries; - }; - -@@ -3155,71 +3098,6 @@ skeleton_chain_node; - #endif - #endif - --/* Use assembler views in line directives if available. */ --#ifndef DWARF2_ASM_VIEW_DEBUG_INFO --#ifdef HAVE_AS_DWARF2_DEBUG_VIEW --#define DWARF2_ASM_VIEW_DEBUG_INFO 1 --#else --#define DWARF2_ASM_VIEW_DEBUG_INFO 0 --#endif --#endif -- --/* A bit is set in ZERO_VIEW_P if we are using the assembler-supported -- view computation, and it refers to a view identifier for which we -- will not emit a label because it is known to map to a view number -- zero. We won't allocate the bitmap if we're not using assembler -- support for location views, but we have to make the variable -- visible for GGC and for code that will be optimized out for lack of -- support but that's still parsed and compiled. We could abstract it -- out with macros, but it's not worth it. */ --static GTY(()) bitmap zero_view_p; -- --/* Evaluate to TRUE iff N is known to identify the first location view -- at its PC. When not using assembler location view computation, -- that must be view number zero. Otherwise, ZERO_VIEW_P is allocated -- and views label numbers recorded in it are the ones known to be -- zero. */ --#define ZERO_VIEW_P(N) (zero_view_p \ -- ? bitmap_bit_p (zero_view_p, (N)) \ -- : (N) == 0) -- --/* Return true iff we're to emit .loc directives for the assembler to -- generate line number sections. -- -- When we're not emitting views, all we need from the assembler is -- support for .loc directives. -- -- If we are emitting views, we can only use the assembler's .loc -- support if it also supports views. -- -- When the compiler is emitting the line number programs and -- computing view numbers itself, it resets view numbers at known PC -- changes and counts from that, and then it emits view numbers as -- literal constants in locviewlists. There are cases in which the -- compiler is not sure about PC changes, e.g. when extra alignment is -- requested for a label. In these cases, the compiler may not reset -- the view counter, and the potential PC advance in the line number -- program will use an opcode that does not reset the view counter -- even if the PC actually changes, so that compiler and debug info -- consumer can keep view numbers in sync. -- -- When the compiler defers view computation to the assembler, it -- emits symbolic view numbers in locviewlists, with the exception of -- views known to be zero (forced resets, or reset after -- compiler-visible PC changes): instead of emitting symbols for -- these, we emit literal zero and assert the assembler agrees with -- the compiler's assessment. We could use symbolic views everywhere, -- instead of special-casing zero views, but then we'd be unable to -- optimize out locviewlists that contain only zeros. */ -- --static bool --output_asm_line_debug_info (void) --{ -- return (DWARF2_ASM_VIEW_DEBUG_INFO -- || (DWARF2_ASM_LINE_DEBUG_INFO -- && !debug_variable_location_views)); --} -- - /* Minimum line offset in a special line info. opcode. - This value was chosen to give a reasonable range of values. */ - #define DWARF_LINE_BASE -10 -@@ -3329,7 +3207,6 @@ struct GTY ((chain_next ("%h.next"))) va - rtx GTY (()) loc; - const char * GTY (()) label; - struct var_loc_node * GTY (()) next; -- var_loc_view view; - }; - - /* Variable location list. */ -@@ -3538,8 +3415,6 @@ static inline dw_loc_descr_ref AT_loc (d - static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute, - dw_loc_list_ref); - static inline dw_loc_list_ref AT_loc_list (dw_attr_node *); --static void add_AT_view_list (dw_die_ref, enum dwarf_attribute); --static inline dw_loc_list_ref AT_loc_list (dw_attr_node *); - static addr_table_entry *add_addr_table_entry (void *, enum ate_kind); - static void remove_addr_table_entry (addr_table_entry *); - static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx, bool); -@@ -3576,7 +3451,7 @@ static void equate_type_number_to_die (t - static dw_die_ref lookup_decl_die (tree); - static var_loc_list *lookup_decl_loc (const_tree); - static void equate_decl_number_to_die (tree, dw_die_ref); --static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *, var_loc_view); -+static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *); - static void print_spaces (FILE *); - static void print_die (dw_die_ref, FILE *); - static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *); -@@ -3776,8 +3651,8 @@ static void gen_tagged_type_die (tree, d - static void gen_type_die_with_usage (tree, dw_die_ref, enum debug_info_usage); - static void splice_child_die (dw_die_ref, dw_die_ref); - static int file_info_cmp (const void *, const void *); --static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *, var_loc_view, -- const char *, var_loc_view, const char *); -+static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *, -+ const char *, const char *); - static void output_loc_list (dw_loc_list_ref); - static char *gen_internal_sym (const char *); - static bool want_pubnames (void); -@@ -4069,9 +3944,6 @@ static char ranges_base_label[2 * MAX_AR - #ifndef BLOCK_BEGIN_LABEL - #define BLOCK_BEGIN_LABEL "LBB" - #endif --#ifndef BLOCK_INLINE_ENTRY_LABEL --#define BLOCK_INLINE_ENTRY_LABEL "LBI" --#endif - #ifndef BLOCK_END_LABEL - #define BLOCK_END_LABEL "LBE" - #endif -@@ -4776,65 +4648,11 @@ AT_loc_list (dw_attr_node *a) - return a->dw_attr_val.v.val_loc_list; - } - --/* Add a view list attribute to DIE. It must have a DW_AT_location -- attribute, because the view list complements the location list. */ -- --static inline void --add_AT_view_list (dw_die_ref die, enum dwarf_attribute attr_kind) --{ -- dw_attr_node attr; -- -- if (XCOFF_DEBUGGING_INFO && !HAVE_XCOFF_DWARF_EXTRAS) -- return; -- -- attr.dw_attr = attr_kind; -- attr.dw_attr_val.val_class = dw_val_class_view_list; -- attr.dw_attr_val.val_entry = NULL; -- attr.dw_attr_val.v.val_view_list = die; -- add_dwarf_attr (die, &attr); -- gcc_checking_assert (get_AT (die, DW_AT_location)); -- gcc_assert (have_location_lists); --} -- --/* Return a pointer to the location list referenced by the attribute. -- If the named attribute is a view list, look up the corresponding -- DW_AT_location attribute and return its location list. */ -- - static inline dw_loc_list_ref * - AT_loc_list_ptr (dw_attr_node *a) - { -- gcc_assert (a); -- switch (AT_class (a)) -- { -- case dw_val_class_loc_list: -- return &a->dw_attr_val.v.val_loc_list; -- case dw_val_class_view_list: -- { -- dw_attr_node *l; -- l = get_AT (a->dw_attr_val.v.val_view_list, DW_AT_location); -- if (!l) -- return NULL; -- gcc_checking_assert (l + 1 == a); -- return AT_loc_list_ptr (l); -- } -- default: -- gcc_unreachable (); -- } --} -- --/* Return the location attribute value associated with a view list -- attribute value. */ -- --static inline dw_val_node * --view_list_to_loc_list_val_node (dw_val_node *val) --{ -- gcc_assert (val->val_class == dw_val_class_view_list); -- dw_attr_node *loc = get_AT (val->v.val_view_list, DW_AT_location); -- if (!loc) -- return NULL; -- gcc_checking_assert (&(loc + 1)->dw_attr_val == val); -- gcc_assert (AT_class (loc) == dw_val_class_loc_list); -- return &loc->dw_attr_val; -+ gcc_assert (a && AT_class (a) == dw_val_class_loc_list); -+ return &a->dw_attr_val.v.val_loc_list; - } - - struct addr_hasher : ggc_ptr_hash -@@ -6089,7 +5907,7 @@ adjust_piece_list (rtx *dest, rtx *src, - /* Add a variable location node to the linked list for DECL. */ - - static struct var_loc_node * --add_var_loc_to_decl (tree decl, rtx loc_note, const char *label, var_loc_view view) -+add_var_loc_to_decl (tree decl, rtx loc_note, const char *label) - { - unsigned int decl_id; - var_loc_list *temp; -@@ -6178,7 +5996,7 @@ add_var_loc_to_decl (tree decl, rtx loc_ - /* TEMP->LAST here is either pointer to the last but one or - last element in the chained list, LAST is pointer to the - last element. */ -- if (label && strcmp (last->label, label) == 0 && last->view == view) -+ if (label && strcmp (last->label, label) == 0) - { - /* For SRA optimized variables if there weren't any real - insns since last note, just modify the last node. */ -@@ -6194,7 +6012,7 @@ add_var_loc_to_decl (tree decl, rtx loc_ - temp->last->next = NULL; - unused = last; - last = temp->last; -- gcc_assert (strcmp (last->label, label) != 0 || last->view != view); -+ gcc_assert (strcmp (last->label, label) != 0); - } - else - { -@@ -6329,12 +6147,6 @@ print_dw_val (dw_val_node *val, bool rec - fprintf (outfile, "location list -> label:%s", - val->v.val_loc_list->ll_symbol); - break; -- case dw_val_class_view_list: -- val = view_list_to_loc_list_val_node (val); -- fprintf (outfile, "location list with views -> labels:%s and %s", -- val->v.val_loc_list->ll_symbol, -- val->v.val_loc_list->vl_symbol); -- break; - case dw_val_class_range_list: - fprintf (outfile, "range list"); - break; -@@ -9195,7 +9007,6 @@ size_of_die (dw_die_ref die) - } - break; - case dw_val_class_loc_list: -- case dw_val_class_view_list: - if (dwarf_split_debug_info && dwarf_version >= 5) - { - gcc_assert (AT_loc_list (a)->num_assigned); -@@ -9567,7 +9378,6 @@ value_format (dw_attr_node *a) - gcc_unreachable (); - } - case dw_val_class_loc_list: -- case dw_val_class_view_list: - if (dwarf_split_debug_info - && dwarf_version >= 5 - && AT_loc_list (a)->num_assigned) -@@ -9842,8 +9652,7 @@ output_abbrev_section (void) - expression. */ - - static inline dw_loc_list_ref --new_loc_list (dw_loc_descr_ref expr, const char *begin, var_loc_view vbegin, -- const char *end, var_loc_view vend, -+new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end, - const char *section) - { - dw_loc_list_ref retlist = ggc_cleared_alloc (); -@@ -9853,28 +9662,10 @@ new_loc_list (dw_loc_descr_ref expr, con - retlist->end = end; - retlist->expr = expr; - retlist->section = section; -- retlist->vbegin = vbegin; -- retlist->vend = vend; - - return retlist; - } - --/* Return true iff there's any nonzero view number in the loc list. */ -- --static bool --loc_list_has_views (dw_loc_list_ref list) --{ -- if (!debug_variable_location_views) -- return false; -- -- for (dw_loc_list_ref loc = list; -- loc != NULL; loc = loc->dw_loc_next) -- if (!ZERO_VIEW_P (loc->vbegin) || !ZERO_VIEW_P (loc->vend)) -- return true; -- -- return false; --} -- - /* Generate a new internal symbol for this location list node, if it - hasn't got one yet. */ - -@@ -9883,98 +9674,6 @@ gen_llsym (dw_loc_list_ref list) - { - gcc_assert (!list->ll_symbol); - list->ll_symbol = gen_internal_sym ("LLST"); -- -- if (!loc_list_has_views (list)) -- return; -- -- if (dwarf2out_locviews_in_attribute ()) -- { -- /* Use the same label_num for the view list. */ -- label_num--; -- list->vl_symbol = gen_internal_sym ("LVUS"); -- } -- else -- list->vl_symbol = list->ll_symbol; --} -- --/* Generate a symbol for the list, but only if we really want to emit -- it as a list. */ -- --static inline void --maybe_gen_llsym (dw_loc_list_ref list) --{ -- if (!list || (!list->dw_loc_next && !loc_list_has_views (list))) -- return; -- -- gen_llsym (list); --} -- --/* Determine whether or not to skip loc_list entry CURR. If we're not -- to skip it, and SIZEP is non-null, store the size of CURR->expr's -- representation in *SIZEP. */ -- --static bool --skip_loc_list_entry (dw_loc_list_ref curr, unsigned long *sizep = 0) --{ -- /* Don't output an entry that starts and ends at the same address. */ -- if (strcmp (curr->begin, curr->end) == 0 -- && curr->vbegin == curr->vend && !curr->force) -- return true; -- -- unsigned long size = size_of_locs (curr->expr); -- -- /* If the expression is too large, drop it on the floor. We could -- perhaps put it into DW_TAG_dwarf_procedure and refer to that -- in the expression, but >= 64KB expressions for a single value -- in a single range are unlikely very useful. */ -- if (dwarf_version < 5 && size > 0xffff) -- return true; -- -- if (sizep) -- *sizep = size; -- -- return false; --} -- --/* Output a view pair loclist entry for CURR, if it requires one. */ -- --static void --dwarf2out_maybe_output_loclist_view_pair (dw_loc_list_ref curr) --{ -- if (!dwarf2out_locviews_in_loclist ()) -- return; -- -- if (ZERO_VIEW_P (curr->vbegin) && ZERO_VIEW_P (curr->vend)) -- return; -- --#ifdef DW_LLE_view_pair -- dw2_asm_output_data (1, DW_LLE_view_pair, "DW_LLE_view_pair"); -- --# if DWARF2_ASM_VIEW_DEBUG_INFO -- if (ZERO_VIEW_P (curr->vbegin)) -- dw2_asm_output_data_uleb128 (0, "Location view begin"); -- else -- { -- char label[MAX_ARTIFICIAL_LABEL_BYTES]; -- ASM_GENERATE_INTERNAL_LABEL (label, "LVU", curr->vbegin); -- dw2_asm_output_symname_uleb128 (label, "Location view begin"); -- } -- -- if (ZERO_VIEW_P (curr->vend)) -- dw2_asm_output_data_uleb128 (0, "Location view end"); -- else -- { -- char label[MAX_ARTIFICIAL_LABEL_BYTES]; -- ASM_GENERATE_INTERNAL_LABEL (label, "LVU", curr->vend); -- dw2_asm_output_symname_uleb128 (label, "Location view end"); -- } --# else /* !DWARF2_ASM_VIEW_DEBUG_INFO */ -- dw2_asm_output_data_uleb128 (curr->vbegin, "Location view begin"); -- dw2_asm_output_data_uleb128 (curr->vend, "Location view end"); --# endif /* DWARF2_ASM_VIEW_DEBUG_INFO */ --#endif /* DW_LLE_view_pair */ -- -- return; - } - - /* Output the location list given to us. */ -@@ -9982,85 +9681,34 @@ dwarf2out_maybe_output_loclist_view_pair - static void - output_loc_list (dw_loc_list_ref list_head) - { -- int vcount = 0, lcount = 0; -- - if (list_head->emitted) - return; - list_head->emitted = true; - -- if (list_head->vl_symbol && dwarf2out_locviews_in_attribute ()) -- { -- ASM_OUTPUT_LABEL (asm_out_file, list_head->vl_symbol); -- -- for (dw_loc_list_ref curr = list_head; curr != NULL; -- curr = curr->dw_loc_next) -- { -- if (skip_loc_list_entry (curr)) -- continue; -- -- vcount++; -- -- /* ?? dwarf_split_debug_info? */ --#if DWARF2_ASM_VIEW_DEBUG_INFO -- char label[MAX_ARTIFICIAL_LABEL_BYTES]; -- -- if (!ZERO_VIEW_P (curr->vbegin)) -- { -- ASM_GENERATE_INTERNAL_LABEL (label, "LVU", curr->vbegin); -- dw2_asm_output_symname_uleb128 (label, -- "View list begin (%s)", -- list_head->vl_symbol); -- } -- else -- dw2_asm_output_data_uleb128 (0, -- "View list begin (%s)", -- list_head->vl_symbol); -- -- if (!ZERO_VIEW_P (curr->vend)) -- { -- ASM_GENERATE_INTERNAL_LABEL (label, "LVU", curr->vend); -- dw2_asm_output_symname_uleb128 (label, -- "View list end (%s)", -- list_head->vl_symbol); -- } -- else -- dw2_asm_output_data_uleb128 (0, -- "View list end (%s)", -- list_head->vl_symbol); --#else /* !DWARF2_ASM_VIEW_DEBUG_INFO */ -- dw2_asm_output_data_uleb128 (curr->vbegin, -- "View list begin (%s)", -- list_head->vl_symbol); -- dw2_asm_output_data_uleb128 (curr->vend, -- "View list end (%s)", -- list_head->vl_symbol); --#endif -- } -- } -- - ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol); - -+ dw_loc_list_ref curr = list_head; - const char *last_section = NULL; - const char *base_label = NULL; - - /* Walk the location list, and output each range + expression. */ -- for (dw_loc_list_ref curr = list_head; curr != NULL; -- curr = curr->dw_loc_next) -+ for (curr = list_head; curr != NULL; curr = curr->dw_loc_next) - { - unsigned long size; -- -- /* Skip this entry? If we skip it here, we must skip it in the -- view list above as well. */ -- if (skip_loc_list_entry (curr, &size)) -+ /* Don't output an entry that starts and ends at the same address. */ -+ if (strcmp (curr->begin, curr->end) == 0 && !curr->force) -+ continue; -+ size = size_of_locs (curr->expr); -+ /* If the expression is too large, drop it on the floor. We could -+ perhaps put it into DW_TAG_dwarf_procedure and refer to that -+ in the expression, but >= 64KB expressions for a single value -+ in a single range are unlikely very useful. */ -+ if (dwarf_version < 5 && size > 0xffff) - continue; -- -- lcount++; -- - if (dwarf_version >= 5) - { - if (dwarf_split_debug_info) - { -- dwarf2out_maybe_output_loclist_view_pair (curr); - /* For -gsplit-dwarf, emit DW_LLE_starx_length, which has - uleb128 index into .debug_addr and uleb128 length. */ - dw2_asm_output_data (1, DW_LLE_startx_length, -@@ -10078,7 +9726,6 @@ output_loc_list (dw_loc_list_ref list_he - } - else if (!have_multiple_function_sections && HAVE_AS_LEB128) - { -- dwarf2out_maybe_output_loclist_view_pair (curr); - /* If all code is in .text section, the base address is - already provided by the CU attributes. Use - DW_LLE_offset_pair where both addresses are uleb128 encoded -@@ -10129,7 +9776,6 @@ output_loc_list (dw_loc_list_ref list_he - length. */ - if (last_section == NULL) - { -- dwarf2out_maybe_output_loclist_view_pair (curr); - dw2_asm_output_data (1, DW_LLE_start_length, - "DW_LLE_start_length (%s)", - list_head->ll_symbol); -@@ -10144,7 +9790,6 @@ output_loc_list (dw_loc_list_ref list_he - DW_LLE_base_address. */ - else - { -- dwarf2out_maybe_output_loclist_view_pair (curr); - dw2_asm_output_data (1, DW_LLE_offset_pair, - "DW_LLE_offset_pair (%s)", - list_head->ll_symbol); -@@ -10160,7 +9805,6 @@ output_loc_list (dw_loc_list_ref list_he - DW_LLE_start_end with a pair of absolute addresses. */ - else - { -- dwarf2out_maybe_output_loclist_view_pair (curr); - dw2_asm_output_data (1, DW_LLE_start_end, - "DW_LLE_start_end (%s)", - list_head->ll_symbol); -@@ -10239,9 +9883,6 @@ output_loc_list (dw_loc_list_ref list_he - "Location list terminator end (%s)", - list_head->ll_symbol); - } -- -- gcc_assert (!list_head->vl_symbol -- || vcount == lcount * (dwarf2out_locviews_in_attribute () ? 1 : 0)); - } - - /* Output a range_list offset into the .debug_ranges or .debug_rnglists -@@ -10306,22 +9947,6 @@ output_loc_list_offset (dw_attr_node *a) - "%s", dwarf_attr_name (a->dw_attr)); - } - --/* Output the offset into the debug_loc section. */ -- --static void --output_view_list_offset (dw_attr_node *a) --{ -- char *sym = (*AT_loc_list_ptr (a))->vl_symbol; -- -- gcc_assert (sym); -- if (dwarf_split_debug_info) -- dw2_asm_output_delta (DWARF_OFFSET_SIZE, sym, loc_section_label, -- "%s", dwarf_attr_name (a->dw_attr)); -- else -- dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section, -- "%s", dwarf_attr_name (a->dw_attr)); --} -- - /* Output an attribute's index or value appropriately. */ - - static void -@@ -10547,10 +10172,6 @@ output_die (dw_die_ref die) - output_loc_list_offset (a); - break; - -- case dw_val_class_view_list: -- output_view_list_offset (a); -- break; -- - case dw_val_class_die_ref: - if (AT_ref_external (a)) - { -@@ -10735,28 +10356,6 @@ output_die (dw_die_ref die) - (unsigned long) die->die_offset); - } - --/* Output the dwarf version number. */ -- --static void --output_dwarf_version () --{ -- /* ??? For now, if -gdwarf-6 is specified, we output version 5 with -- views in loclist. That will change eventually. */ -- if (dwarf_version == 6) -- { -- static bool once; -- if (!once) -- { -- warning (0, -- "-gdwarf-6 is output as version 5 with incompatibilities"); -- once = true; -- } -- dw2_asm_output_data (2, 5, "DWARF version number"); -- } -- else -- dw2_asm_output_data (2, dwarf_version, "DWARF version number"); --} -- - /* Output the compilation unit that appears at the beginning of the - .debug_info section, and precedes the DIE descriptions. */ - -@@ -10773,7 +10372,7 @@ output_compilation_unit_header (enum dwa - "Length of Compilation Unit Info"); - } - -- output_dwarf_version (); -+ dw2_asm_output_data (2, dwarf_version, "DWARF version number"); - if (dwarf_version >= 5) - { - const char *name; -@@ -10985,7 +10584,7 @@ output_skeleton_debug_sections (dw_die_r - - DWARF_INITIAL_LENGTH_SIZE - + size_of_die (comp_unit), - "Length of Compilation Unit Info"); -- output_dwarf_version (); -+ dw2_asm_output_data (2, dwarf_version, "DWARF version number"); - if (dwarf_version >= 5) - { - dw2_asm_output_data (1, DW_UT_skeleton, "DW_UT_skeleton"); -@@ -11284,7 +10883,7 @@ output_pubnames (vecentries, i, ent) - { -@@ -12284,36 +11880,14 @@ output_one_line_info_table (dw_line_info - to determine when it is safe to use DW_LNS_fixed_advance_pc. */ - ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, ent->val); - -- view = 0; -- - /* This can handle any delta. This takes - 4+DWARF2_ADDR_SIZE bytes. */ -- dw2_asm_output_data (1, 0, "set address %s%s", line_label, -- debug_variable_location_views -- ? ", reset view to 0" : ""); -+ dw2_asm_output_data (1, 0, "set address %s", line_label); - dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL); - dw2_asm_output_data (1, DW_LNE_set_address, NULL); - dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL); -- -- prev_addr = ent; - break; - -- case LI_adv_address: -- { -- ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, ent->val); -- char prev_label[MAX_ARTIFICIAL_LABEL_BYTES]; -- ASM_GENERATE_INTERNAL_LABEL (prev_label, LINE_CODE_LABEL, prev_addr->val); -- -- view++; -- -- dw2_asm_output_data (1, DW_LNS_fixed_advance_pc, "fixed advance PC, increment view to %i", view); -- dw2_asm_output_delta (2, line_label, prev_label, -- "from %s to %s", prev_label, line_label); -- -- prev_addr = ent; -- break; -- } -- - case LI_set_line: - if (ent->val == current_line) - { -@@ -12421,7 +11995,7 @@ output_line_info (bool prologue_only) - - ASM_OUTPUT_LABEL (asm_out_file, l1); - -- output_dwarf_version (); -+ dw2_asm_output_data (2, dwarf_version, "DWARF Version"); - if (dwarf_version >= 5) - { - dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Address Size"); -@@ -16879,7 +16453,6 @@ static dw_loc_list_ref - dw_loc_list (var_loc_list *loc_list, tree decl, int want_address) - { - const char *endname, *secname; -- var_loc_view endview; - rtx varloc; - enum var_init_status initialized; - struct var_loc_node *node; -@@ -16944,27 +16517,24 @@ dw_loc_list (var_loc_list *loc_list, tre - && current_function_decl) - { - endname = cfun->fde->dw_fde_end; -- endview = 0; - range_across_switch = true; - } - /* The variable has a location between NODE->LABEL and - NODE->NEXT->LABEL. */ - else if (node->next) -- endname = node->next->label, endview = node->next->view; -+ endname = node->next->label; - /* If the variable has a location at the last label - it keeps its location until the end of function. */ - else if (!current_function_decl) -- endname = text_end_label, endview = 0; -+ endname = text_end_label; - else - { - ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL, - current_function_funcdef_no); - endname = ggc_strdup (label_id); -- endview = 0; - } - -- *listp = new_loc_list (descr, node->label, node->view, -- endname, endview, secname); -+ *listp = new_loc_list (descr, node->label, endname, secname); - if (TREE_CODE (decl) == PARM_DECL - && node == loc_list->first - && NOTE_P (node->loc) -@@ -16999,11 +16569,11 @@ dw_loc_list (var_loc_list *loc_list, tre - /* The variable has a location between NODE->LABEL and - NODE->NEXT->LABEL. */ - if (node->next) -- endname = node->next->label, endview = node->next->view; -+ endname = node->next->label; - else -- endname = cfun->fde->dw_fde_second_end, endview = 0; -- *listp = new_loc_list (descr, cfun->fde->dw_fde_second_begin, 0, -- endname, endview, secname); -+ endname = cfun->fde->dw_fde_second_end; -+ *listp = new_loc_list (descr, cfun->fde->dw_fde_second_begin, -+ endname, secname); - listp = &(*listp)->dw_loc_next; - } - } -@@ -17014,7 +16584,8 @@ dw_loc_list (var_loc_list *loc_list, tre - representable, we don't want to pretend a single entry that was - applies to the entire scope in which the variable is - available. */ -- maybe_gen_llsym (list); -+ if (list && loc_list->first->next) -+ gen_llsym (list); - - return list; - } -@@ -17833,7 +17404,7 @@ loc_list_from_tree_1 (tree loc, int want - { - if (dwarf_version >= 3 || !dwarf_strict) - return new_loc_list (new_loc_descr (DW_OP_push_object_address, 0, 0), -- NULL, 0, NULL, 0, NULL); -+ NULL, NULL, NULL); - else - return NULL; - } -@@ -18649,7 +18220,7 @@ loc_list_from_tree_1 (tree loc, int want - add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0)); - } - if (ret) -- list_ret = new_loc_list (ret, NULL, 0, NULL, 0, NULL); -+ list_ret = new_loc_list (ret, NULL, NULL, NULL); - - return list_ret; - } -@@ -18973,25 +18544,12 @@ static inline void - add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind, - dw_loc_list_ref descr) - { -- bool check_no_locviews = true; - if (descr == 0) - return; - if (single_element_loc_list_p (descr)) - add_AT_loc (die, attr_kind, descr->expr); - else -- { -- add_AT_loc_list (die, attr_kind, descr); -- gcc_assert (descr->ll_symbol); -- if (attr_kind == DW_AT_location && descr->vl_symbol -- && dwarf2out_locviews_in_attribute ()) -- { -- add_AT_view_list (die, DW_AT_GNU_locviews); -- check_no_locviews = false; -- } -- } -- -- if (check_no_locviews) -- gcc_assert (!get_AT (die, DW_AT_GNU_locviews)); -+ add_AT_loc_list (die, attr_kind, descr); - } - - /* Add DW_AT_accessibility attribute to DIE if needed. */ -@@ -20180,7 +19738,7 @@ convert_cfa_to_fb_loc_list (HOST_WIDE_IN - /* If the first partition contained no CFI adjustments, the - CIE opcodes apply to the whole first partition. */ - *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset), -- fde->dw_fde_begin, 0, fde->dw_fde_end, 0, section); -+ fde->dw_fde_begin, fde->dw_fde_end, section); - list_tail =&(*list_tail)->dw_loc_next; - start_label = last_label = fde->dw_fde_second_begin; - } -@@ -20196,7 +19754,7 @@ convert_cfa_to_fb_loc_list (HOST_WIDE_IN - if (!cfa_equal_p (&last_cfa, &next_cfa)) - { - *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset), -- start_label, 0, last_label, 0, section); -+ start_label, last_label, section); - - list_tail = &(*list_tail)->dw_loc_next; - last_cfa = next_cfa; -@@ -20218,14 +19776,14 @@ convert_cfa_to_fb_loc_list (HOST_WIDE_IN - if (!cfa_equal_p (&last_cfa, &next_cfa)) - { - *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset), -- start_label, 0, last_label, 0, section); -+ start_label, last_label, section); - - list_tail = &(*list_tail)->dw_loc_next; - last_cfa = next_cfa; - start_label = last_label; - } - *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset), -- start_label, 0, fde->dw_fde_end, 0, section); -+ start_label, fde->dw_fde_end, section); - list_tail = &(*list_tail)->dw_loc_next; - start_label = last_label = fde->dw_fde_second_begin; - } -@@ -20234,18 +19792,19 @@ convert_cfa_to_fb_loc_list (HOST_WIDE_IN - if (!cfa_equal_p (&last_cfa, &next_cfa)) - { - *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset), -- start_label, 0, last_label, 0, section); -+ start_label, last_label, section); - list_tail = &(*list_tail)->dw_loc_next; - start_label = last_label; - } - - *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset), -- start_label, 0, -+ start_label, - fde->dw_fde_second_begin -- ? fde->dw_fde_second_end : fde->dw_fde_end, 0, -+ ? fde->dw_fde_second_end : fde->dw_fde_end, - section); - -- maybe_gen_llsym (list); -+ if (list && list->dw_loc_next) -+ gen_llsym (list); - - return list; - } -@@ -23219,48 +22778,6 @@ block_die_hasher::equal (die_struct *x, - return x->decl_id == y->decl_id && x->die_parent == y->die_parent; - } - --/* Hold information about markers for inlined entry points. */ --struct GTY ((for_user)) inline_entry_data --{ -- /* The block that's the inlined_function_outer_scope for an inlined -- function. */ -- tree block; -- -- /* The label at the inlined entry point. */ -- const char *label_pfx; -- unsigned int label_num; -- -- /* The view number to be used as the inlined entry point. */ -- var_loc_view view; --}; -- --struct inline_entry_data_hasher : ggc_ptr_hash --{ -- typedef tree compare_type; -- static inline hashval_t hash (const inline_entry_data *); -- static inline bool equal (const inline_entry_data *, const_tree); --}; -- --/* Hash table routines for inline_entry_data. */ -- --inline hashval_t --inline_entry_data_hasher::hash (const inline_entry_data *data) --{ -- return htab_hash_pointer (data->block); --} -- --inline bool --inline_entry_data_hasher::equal (const inline_entry_data *data, -- const_tree block) --{ -- return data->block == block; --} -- --/* Inlined entry points pending DIE creation in this compilation unit. */ -- --static GTY(()) hash_table *inline_entry_data_table; -- -- - /* Return TRUE if DECL, which may have been previously generated as - OLD_DIE, is a candidate for a DW_AT_specification. DECLARATION is - true if decl (or its origin) is either an extern declaration or a -@@ -23713,42 +23230,6 @@ add_high_low_attributes (tree stmt, dw_d - { - char label[MAX_ARTIFICIAL_LABEL_BYTES]; - -- if (inline_entry_data **iedp -- = !inline_entry_data_table ? NULL -- : inline_entry_data_table->find_slot_with_hash (stmt, -- htab_hash_pointer (stmt), -- NO_INSERT)) -- { -- inline_entry_data *ied = *iedp; -- gcc_assert (MAY_HAVE_DEBUG_MARKER_INSNS); -- gcc_assert (inlined_function_outer_scope_p (stmt)); -- ASM_GENERATE_INTERNAL_LABEL (label, ied->label_pfx, ied->label_num); -- add_AT_lbl_id (die, DW_AT_entry_pc, label); -- -- if (debug_variable_location_views && !ZERO_VIEW_P (ied->view)) -- { -- if (!output_asm_line_debug_info ()) -- add_AT_unsigned (die, DW_AT_GNU_entry_view, ied->view); -- else -- { -- ASM_GENERATE_INTERNAL_LABEL (label, "LVU", ied->view); -- /* FIXME: this will resolve to a small number. Could we -- possibly emit smaller data? Ideally we'd emit a -- uleb128, but that would make the size of DIEs -- impossible for the compiler to compute, since it's -- the assembler that computes the value of the view -- label in this case. Ideally, we'd have a single form -- encompassing both the address and the view, and -- indirecting them through a table might make things -- easier, but even that would be more wasteful, -- space-wise, than what we have now. */ -- add_AT_lbl_id (die, DW_AT_GNU_entry_view, label); -- } -- } -- -- inline_entry_data_table->clear_slot (iedp); -- } -- - if (BLOCK_FRAGMENT_CHAIN (stmt) - && (dwarf_version >= 3 || !dwarf_strict)) - { -@@ -23756,7 +23237,7 @@ add_high_low_attributes (tree stmt, dw_d - dw_die_ref pdie; - dw_attr_node *attr = NULL; - -- if (!MAY_HAVE_DEBUG_MARKER_INSNS && inlined_function_outer_scope_p (stmt)) -+ if (inlined_function_outer_scope_p (stmt)) - { - ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL, - BLOCK_NUMBER (stmt)); -@@ -23921,7 +23402,7 @@ gen_inlined_subroutine_die (tree stmt, d - dw_die_ref subr_die - = new_die (DW_TAG_inlined_subroutine, context_die, stmt); - -- if (call_arg_locations || MAY_HAVE_DEBUG_MARKER_INSNS) -+ if (call_arg_locations) - BLOCK_DIE (stmt) = subr_die; - add_abstract_origin_attribute (subr_die, decl); - if (TREE_ASM_WRITTEN (stmt)) -@@ -26683,7 +26164,7 @@ maybe_emit_file (struct dwarf_file_data - fd->emitted_number = 1; - last_emitted_file = fd; - -- if (output_asm_line_debug_info ()) -+ if (DWARF2_ASM_LINE_DEBUG_INFO) - { - fprintf (asm_out_file, "\t.file %u ", fd->emitted_number); - output_quoted_string (asm_out_file, -@@ -26877,13 +26358,11 @@ dwarf2out_var_location (rtx_insn *loc_no - static rtx_insn *expected_next_loc_note; - tree decl; - bool var_loc_p; -- var_loc_view view = 0; - - if (!NOTE_P (loc_note)) - { - if (CALL_P (loc_note)) - { -- RESET_NEXT_VIEW (cur_line_info_table->view); - call_site_count++; - if (SIBLING_CALL_P (loc_note)) - tail_call_site_count++; -@@ -26917,18 +26396,6 @@ dwarf2out_var_location (rtx_insn *loc_no - } - } - } -- else if (!debug_variable_location_views) -- gcc_unreachable (); -- else if (JUMP_TABLE_DATA_P (loc_note)) -- RESET_NEXT_VIEW (cur_line_info_table->view); -- else if (GET_CODE (loc_note) == USE -- || GET_CODE (loc_note) == CLOBBER -- || GET_CODE (loc_note) == ASM_INPUT -- || asm_noperands (loc_note) >= 0) -- ; -- else if (get_attr_min_length (loc_note) > 0) -- RESET_NEXT_VIEW (cur_line_info_table->view); -- - return; - } - -@@ -26953,7 +26420,6 @@ dwarf2out_var_location (rtx_insn *loc_no - || ! NOTE_P (next_note) - || (NOTE_KIND (next_note) != NOTE_INSN_VAR_LOCATION - && NOTE_KIND (next_note) != NOTE_INSN_BEGIN_STMT -- && NOTE_KIND (next_note) != NOTE_INSN_INLINE_ENTRY - && NOTE_KIND (next_note) != NOTE_INSN_CALL_ARG_LOCATION)) - next_note = NULL; - -@@ -26993,11 +26459,10 @@ create_label: - - if (var_loc_p) - { -- const char *label -- = NOTE_DURING_CALL_P (loc_note) ? last_postcall_label : last_label; -- view = cur_line_info_table->view; - decl = NOTE_VAR_LOCATION_DECL (loc_note); -- newloc = add_var_loc_to_decl (decl, loc_note, label, view); -+ newloc = add_var_loc_to_decl (decl, loc_note, -+ NOTE_DURING_CALL_P (loc_note) -+ ? last_postcall_label : last_label); - if (newloc == NULL) - return; - } -@@ -27038,8 +26503,8 @@ create_label: - else if (GET_CODE (body) == ASM_INPUT - || asm_noperands (body) >= 0) - continue; --#ifdef HAVE_ATTR_length /* ??? We don't include insn-attr.h. */ -- else if (HAVE_ATTR_length && get_attr_min_length (insn) == 0) -+#ifdef HAVE_attr_length -+ else if (get_attr_min_length (insn) == 0) - continue; - #endif - else -@@ -27107,10 +26572,7 @@ create_label: - call_arg_loc_last = ca_loc; - } - else if (loc_note != NULL_RTX && !NOTE_DURING_CALL_P (loc_note)) -- { -- newloc->label = last_label; -- newloc->view = view; -- } -+ newloc->label = last_label; - else - { - if (!last_postcall_label) -@@ -27119,7 +26581,6 @@ create_label: - last_postcall_label = ggc_strdup (loclabel); - } - newloc->label = last_postcall_label; -- newloc->view = view; - } - - if (var_loc_p && flag_debug_asm) -@@ -27147,113 +26608,6 @@ create_label: - last_in_cold_section_p = in_cold_section_p; - } - --/* Check whether BLOCK, a lexical block, is nested within OUTER, or is -- OUTER itself. If BOTHWAYS, check not only that BLOCK can reach -- OUTER through BLOCK_SUPERCONTEXT links, but also that there is a -- path from OUTER to BLOCK through BLOCK_SUBBLOCKs and -- BLOCK_FRAGMENT_ORIGIN links. */ --static bool --block_within_block_p (tree block, tree outer, bool bothways) --{ -- if (block == outer) -- return true; -- -- /* Quickly check that OUTER is up BLOCK's supercontext chain. */ -- for (tree context = BLOCK_SUPERCONTEXT (block); -- context != outer; -- context = BLOCK_SUPERCONTEXT (context)) -- if (!context || TREE_CODE (context) != BLOCK) -- return false; -- -- if (!bothways) -- return true; -- -- /* Now check that each block is actually referenced by its -- parent. */ -- for (tree context = BLOCK_SUPERCONTEXT (block); ; -- context = BLOCK_SUPERCONTEXT (context)) -- { -- if (BLOCK_FRAGMENT_ORIGIN (context)) -- { -- gcc_assert (!BLOCK_SUBBLOCKS (context)); -- context = BLOCK_FRAGMENT_ORIGIN (context); -- } -- for (tree sub = BLOCK_SUBBLOCKS (context); -- sub != block; -- sub = BLOCK_CHAIN (sub)) -- if (!sub) -- return false; -- if (context == outer) -- return true; -- else -- block = context; -- } --} -- --/* Called during final while assembling the marker of the entry point -- for an inlined function. */ -- --static void --dwarf2out_inline_entry (tree block) --{ -- /* If we can't represent it, don't bother. */ -- if (!(dwarf_version >= 3 || !dwarf_strict)) -- return; -- -- gcc_assert (DECL_P (block_ultimate_origin (block))); -- -- /* Sanity check the block tree. This would catch a case in which -- BLOCK got removed from the tree reachable from the outermost -- lexical block, but got retained in markers. It would still link -- back to its parents, but some ancestor would be missing a link -- down the path to the sub BLOCK. If the block got removed, its -- BLOCK_NUMBER will not be a usable value. */ -- if (flag_checking) -- gcc_assert (block_within_block_p (block, -- DECL_INITIAL (current_function_decl), -- true)); -- -- gcc_assert (inlined_function_outer_scope_p (block)); -- gcc_assert (!BLOCK_DIE (block)); -- -- if (BLOCK_FRAGMENT_ORIGIN (block)) -- block = BLOCK_FRAGMENT_ORIGIN (block); -- /* Can the entry point ever not be at the beginning of an -- unfragmented lexical block? */ -- else if (!(BLOCK_FRAGMENT_CHAIN (block) -- || (cur_line_info_table -- && !ZERO_VIEW_P (cur_line_info_table->view)))) -- return; -- -- if (!inline_entry_data_table) -- inline_entry_data_table -- = hash_table::create_ggc (10); -- -- -- inline_entry_data **iedp -- = inline_entry_data_table->find_slot_with_hash (block, -- htab_hash_pointer (block), -- INSERT); -- if (*iedp) -- /* ??? Ideally, we'd record all entry points for the same inlined -- function (some may have been duplicated by e.g. unrolling), but -- we have no way to represent that ATM. */ -- return; -- -- inline_entry_data *ied = *iedp = ggc_cleared_alloc (); -- ied->block = block; -- ied->label_pfx = BLOCK_INLINE_ENTRY_LABEL; -- ied->label_num = BLOCK_NUMBER (block); -- if (cur_line_info_table) -- ied->view = cur_line_info_table->view; -- -- char label[MAX_ARTIFICIAL_LABEL_BYTES]; -- -- ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_INLINE_ENTRY_LABEL, -- BLOCK_NUMBER (block)); -- ASM_OUTPUT_LABEL (asm_out_file, label); --} -- - /* Called from finalize_size_functions for size functions so that their body - can be encoded in the debug info to describe the layout of variable-length - structures. */ -@@ -27298,7 +26652,6 @@ new_line_info_table (void) - table->file_num = 1; - table->line_num = 1; - table->is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START; -- RESET_NEXT_VIEW (table->view); - - return table; - } -@@ -27347,7 +26700,7 @@ set_cur_line_info_table (section *sec) - vec_safe_push (separate_line_info, table); - } - -- if (output_asm_line_debug_info ()) -+ if (DWARF2_ASM_LINE_DEBUG_INFO) - table->is_stmt = (cur_line_info_table - ? cur_line_info_table->is_stmt - : DWARF_LINE_DEFAULT_IS_STMT_START); -@@ -27528,7 +26881,7 @@ dwarf2out_source_line (unsigned int line - filename, line); - } - -- if (output_asm_line_debug_info ()) -+ if (DWARF2_ASM_LINE_DEBUG_INFO) - { - /* Emit the .loc directive understood by GNU as. */ - /* "\t.loc %u %u 0 is_stmt %u discriminator %u", -@@ -27551,50 +26904,6 @@ dwarf2out_source_line (unsigned int line - fputs (" discriminator ", asm_out_file); - fprint_ul (asm_out_file, (unsigned long) discriminator); - } -- if (debug_variable_location_views) -- { -- static var_loc_view lvugid; -- if (!lvugid) -- { -- gcc_assert (!zero_view_p); -- zero_view_p = BITMAP_GGC_ALLOC (); -- bitmap_set_bit (zero_view_p, 0); -- } -- if (!RESETTING_VIEW_P (table->view)) -- { -- /* When we're using the assembler to compute view -- numbers, we output symbolic labels after "view" in -- .loc directives, and the assembler will set them for -- us, so that we can refer to the view numbers in -- location lists. The only exceptions are when we know -- a view will be zero: "-0" is a forced reset, used -- e.g. in the beginning of functions, whereas "0" tells -- the assembler to check that there was a PC change -- since the previous view, in a way that implicitly -- resets the next view. */ -- fputs (" view ", asm_out_file); -- char label[MAX_ARTIFICIAL_LABEL_BYTES]; -- ASM_GENERATE_INTERNAL_LABEL (label, "LVU", table->view); -- assemble_name (asm_out_file, label); -- table->view = ++lvugid; -- } -- else -- { -- if (!table->in_use) -- fputs (" view -0", asm_out_file); -- else -- fputs (" view 0", asm_out_file); -- /* Mark the present view as a zero view. Earlier debug -- binds may have already added its id to loclists to be -- emitted later, so we can't reuse the id for something -- else. However, it's good to know whether a view is -- known to be zero, because then we may be able to -- optimize out locviews that are all zeros, so take -- note of it in zero_view_p. */ -- bitmap_set_bit (zero_view_p, lvugid); -- table->view = ++lvugid; -- } -- } - putc ('\n', asm_out_file); - } - else -@@ -27603,19 +26912,7 @@ dwarf2out_source_line (unsigned int line - - targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL, label_num); - -- if (debug_variable_location_views && table->view) -- push_dw_line_info_entry (table, LI_adv_address, label_num); -- else -- push_dw_line_info_entry (table, LI_set_address, label_num); -- if (debug_variable_location_views) -- { -- if (flag_debug_asm) -- fprintf (asm_out_file, "\t%s view %s%d\n", -- ASM_COMMENT_START, -- table->in_use ? "" : "-", -- table->view); -- table->view++; -- } -+ push_dw_line_info_entry (table, LI_set_address, label_num); - if (file_num != table->file_num) - push_dw_line_info_entry (table, LI_set_file, file_num); - if (discriminator != table->discrim_num) -@@ -28291,10 +27588,9 @@ init_sections_and_labels (bool early_lto - SECTION_DEBUG, NULL); - debug_str_section = get_section (DEBUG_STR_SECTION, - DEBUG_STR_SECTION_FLAGS, NULL); -- if (!dwarf_split_debug_info && !output_asm_line_debug_info ()) -+ if (!dwarf_split_debug_info && !DWARF2_ASM_LINE_DEBUG_INFO) - debug_line_str_section = get_section (DEBUG_LINE_STR_SECTION, - DEBUG_STR_SECTION_FLAGS, NULL); -- - debug_ranges_section = get_section (dwarf_version >= 5 - ? DEBUG_RNGLISTS_SECTION - : DEBUG_RANGES_SECTION, -@@ -28680,11 +27976,6 @@ prune_unused_types_walk_attribs (dw_die_ - prune_unused_types_walk_loc_descr (list->expr); - break; - -- case dw_val_class_view_list: -- /* This points to a loc_list in another attribute, so it's -- already covered. */ -- break; -- - case dw_val_class_die_ref: - /* A reference to another DIE. - Make sure that it will get emitted. -@@ -29784,8 +29075,6 @@ optimize_string_length (dw_attr_node *a) - if (d->expr && non_dwarf_expression (d->expr)) - non_dwarf_expr = true; - break; -- case dw_val_class_view_list: -- gcc_unreachable (); - case dw_val_class_loc: - lv = AT_loc (av); - if (lv == NULL) -@@ -29830,7 +29119,7 @@ optimize_string_length (dw_attr_node *a) - lv = copy_deref_exprloc (d->expr); - if (lv) - { -- *p = new_loc_list (lv, d->begin, d->vbegin, d->end, d->vend, d->section); -+ *p = new_loc_list (lv, d->begin, d->end, d->section); - p = &(*p)->dw_loc_next; - } - else if (!dwarf_strict && d->expr) -@@ -29900,7 +29189,6 @@ resolve_addr (dw_die_ref die) - { - gcc_assert (!next->ll_symbol); - next->ll_symbol = (*curr)->ll_symbol; -- next->vl_symbol = (*curr)->vl_symbol; - } - if (dwarf_split_debug_info) - remove_loc_list_addr_table_entries (l); -@@ -29926,21 +29214,6 @@ resolve_addr (dw_die_ref die) - ix--; - } - break; -- case dw_val_class_view_list: -- { -- gcc_checking_assert (a->dw_attr == DW_AT_GNU_locviews); -- gcc_checking_assert (dwarf2out_locviews_in_attribute ()); -- dw_val_node *llnode -- = view_list_to_loc_list_val_node (&a->dw_attr_val); -- /* If we no longer have a loclist, or it no longer needs -- views, drop this attribute. */ -- if (!llnode || !llnode->v.val_loc_list->vl_symbol) -- { -- remove_AT (die, a->dw_attr); -- ix--; -- } -- break; -- } - case dw_val_class_loc: - { - dw_loc_descr_ref l = AT_loc (a); -@@ -30337,8 +29610,6 @@ hash_loc_list (dw_loc_list_ref list_head - { - hstate.add (curr->begin, strlen (curr->begin) + 1); - hstate.add (curr->end, strlen (curr->end) + 1); -- hstate.add_object (curr->vbegin); -- hstate.add_object (curr->vend); - if (curr->section) - hstate.add (curr->section, strlen (curr->section) + 1); - hash_locs (curr->expr, hstate); -@@ -30560,7 +29831,6 @@ loc_list_hasher::equal (const dw_loc_lis - || strcmp (a->end, b->end) != 0 - || (a->section == NULL) != (b->section == NULL) - || (a->section && strcmp (a->section, b->section) != 0) -- || a->vbegin != b->vbegin || a->vend != b->vend - || !compare_locs (a->expr, b->expr)) - break; - return a == NULL && b == NULL; -@@ -30579,8 +29849,6 @@ optimize_location_lists_1 (dw_die_ref di - dw_attr_node *a; - unsigned ix; - dw_loc_list_struct **slot; -- bool drop_locviews = false; -- bool has_locviews = false; - - FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a) - if (AT_class (a) == dw_val_class_loc_list) -@@ -30591,33 +29859,11 @@ optimize_location_lists_1 (dw_die_ref di - hash_loc_list (list); - slot = htab->find_slot_with_hash (list, list->hash, INSERT); - if (*slot == NULL) -- { -- *slot = list; -- if (loc_list_has_views (list)) -- gcc_assert (list->vl_symbol); -- else if (list->vl_symbol) -- { -- drop_locviews = true; -- list->vl_symbol = NULL; -- } -- } -+ *slot = list; - else -- { -- if (list->vl_symbol && !(*slot)->vl_symbol) -- drop_locviews = true; -- a->dw_attr_val.v.val_loc_list = *slot; -- } -- } -- else if (AT_class (a) == dw_val_class_view_list) -- { -- gcc_checking_assert (a->dw_attr == DW_AT_GNU_locviews); -- has_locviews = true; -+ a->dw_attr_val.v.val_loc_list = *slot; - } - -- -- if (drop_locviews && has_locviews) -- remove_AT (die, DW_AT_GNU_locviews); -- - FOR_EACH_CHILD (die, c, optimize_location_lists_1 (c, htab)); - } - -@@ -30642,7 +29888,7 @@ index_location_lists (dw_die_ref die) - /* Don't index an entry that has already been indexed - or won't be output. */ - if (curr->begin_entry != NULL -- || skip_loc_list_entry (curr)) -+ || (strcmp (curr->begin, curr->end) == 0 && !curr->force)) - continue; - - curr->begin_entry -@@ -30750,9 +29996,6 @@ dwarf2out_finish (const char *) - /* Flush out any latecomers to the limbo party. */ - flush_limbo_die_list (); - -- if (inline_entry_data_table) -- gcc_assert (inline_entry_data_table->elements () == 0); -- - if (flag_checking) - { - verify_die (comp_unit_die ()); -@@ -31069,7 +30312,7 @@ dwarf2out_finish (const char *) - dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1, - "Length of Location Lists"); - ASM_OUTPUT_LABEL (asm_out_file, l1); -- output_dwarf_version (); -+ dw2_asm_output_data (2, dwarf_version, "DWARF Version"); - dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Address Size"); - dw2_asm_output_data (1, 0, "Segment Size"); - dw2_asm_output_data (4, dwarf_split_debug_info ? loc_list_idx : 0, -@@ -31128,7 +30371,7 @@ dwarf2out_finish (const char *) - used by the debug_info section are marked as 'used'. */ - switch_to_section (debug_line_section); - ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label); -- if (! output_asm_line_debug_info ()) -+ if (! DWARF2_ASM_LINE_DEBUG_INFO) - output_line_info (false); - - if (dwarf_split_debug_info && info_section_emitted) ---- gcc/dwarf2out.h (revision 257511) -+++ gcc/dwarf2out.h (revision 257509) -@@ -160,8 +160,7 @@ enum dw_val_class - dw_val_class_discr_list, - dw_val_class_const_implicit, - dw_val_class_unsigned_const_implicit, -- dw_val_class_file_implicit, -- dw_val_class_view_list -+ dw_val_class_file_implicit - }; - - /* Describe a floating point constant value, or a vector constant value. */ -@@ -204,7 +203,6 @@ struct GTY(()) dw_val_node { - rtx GTY ((tag ("dw_val_class_addr"))) val_addr; - unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset; - dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list; -- dw_die_ref GTY ((tag ("dw_val_class_view_list"))) val_view_list; - dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc; - HOST_WIDE_INT GTY ((default)) val_int; - unsigned HOST_WIDE_INT ---- gcc/gimple-pretty-print.c (revision 257511) -+++ gcc/gimple-pretty-print.c (revision 257509) -@@ -1371,19 +1371,6 @@ dump_gimple_debug (pretty_printer *buffe - dump_gimple_fmt (buffer, spc, flags, "# DEBUG BEGIN_STMT"); - break; - -- case GIMPLE_DEBUG_INLINE_ENTRY: -- if (flags & TDF_RAW) -- dump_gimple_fmt (buffer, spc, flags, "%G INLINE_ENTRY %T", gs, -- gimple_block (gs) -- ? block_ultimate_origin (gimple_block (gs)) -- : NULL_TREE); -- else -- dump_gimple_fmt (buffer, spc, flags, "# DEBUG INLINE_ENTRY %T", -- gimple_block (gs) -- ? block_ultimate_origin (gimple_block (gs)) -- : NULL_TREE); -- break; -- - default: - gcc_unreachable (); - } ---- gcc/configure.ac (revision 257511) -+++ gcc/configure.ac (revision 257509) -@@ -4902,25 +4902,9 @@ if test x"$insn" != x; then - - if test $gcc_cv_as_dwarf2_debug_line = yes \ - && test $gcc_cv_as_dwarf2_file_buggy = no; then -- AC_DEFINE(HAVE_AS_DWARF2_DEBUG_LINE, 1, -+ AC_DEFINE(HAVE_AS_DWARF2_DEBUG_LINE, 1, - [Define if your assembler supports dwarf2 .file/.loc directives, - and preserves file table indices exactly as given.]) -- -- if test $gcc_cv_as_leb128 = yes; then -- conftest_s="\ -- .file 1 \"conftest.s\" -- .loc 1 3 0 view .LVU1 -- $insn -- .data -- .uleb128 .LVU1 -- .uleb128 .LVU1 --" -- gcc_GAS_CHECK_FEATURE([dwarf2 debug_view support], -- gcc_cv_as_dwarf2_debug_view, -- [elf,2,27,0],,[$conftest_s],, -- [AC_DEFINE(HAVE_AS_DWARF2_DEBUG_VIEW, 1, -- [Define if your assembler supports views in dwarf2 .loc directives.])]) -- fi - fi - - gcc_GAS_CHECK_FEATURE([--gdwarf2 option], ---- gcc/print-rtl.c (revision 257511) -+++ gcc/print-rtl.c (revision 257509) -@@ -276,7 +276,6 @@ rtx_writer::print_rtx_operand_code_0 (co - break; - - case NOTE_INSN_BEGIN_STMT: -- case NOTE_INSN_INLINE_ENTRY: - #ifndef GENERATOR_FILE - { - expanded_location xloc -@@ -1880,10 +1879,6 @@ print_insn (pretty_printer *pp, const rt - pp_string (pp, "debug begin stmt marker"); - break; - -- case NOTE_INSN_INLINE_ENTRY: -- pp_string (pp, "debug inline entry marker"); -- break; -- - default: - gcc_unreachable (); - } ---- gcc/cfgexpand.c (revision 257511) -+++ gcc/cfgexpand.c (revision 257509) -@@ -5731,15 +5731,6 @@ expand_gimple_basic_block (basic_block b - goto delink_debug_stmt; - else if (gimple_debug_begin_stmt_p (stmt)) - val = GEN_RTX_DEBUG_MARKER_BEGIN_STMT_PAT (); -- else if (gimple_debug_inline_entry_p (stmt)) -- { -- tree block = gimple_block (stmt); -- -- if (block) -- val = GEN_RTX_DEBUG_MARKER_INLINE_ENTRY_PAT (); -- else -- goto delink_debug_stmt; -- } - else - gcc_unreachable (); - ---- gcc/tree-ssa-live.c (revision 257511) -+++ gcc/tree-ssa-live.c (revision 257509) -@@ -520,11 +520,6 @@ remove_unused_scope_block_p (tree scope, - else if (!BLOCK_SUPERCONTEXT (scope) - || TREE_CODE (BLOCK_SUPERCONTEXT (scope)) == FUNCTION_DECL) - unused = false; -- /* Preserve the block, it is referenced by at least the inline -- entry point marker. */ -- else if (debug_nonbind_markers_p -- && inlined_function_outer_scope_p (scope)) -- unused = false; - /* Innermost blocks with no live variables nor statements can be always - eliminated. */ - else if (!nsubblocks) -@@ -553,13 +548,11 @@ remove_unused_scope_block_p (tree scope, - } - else if (BLOCK_VARS (scope) || BLOCK_NUM_NONLOCALIZED_VARS (scope)) - unused = false; -- /* See if this block is important for representation of inlined -- function. Inlined functions are always represented by block -- with block_ultimate_origin being set to FUNCTION_DECL and -- DECL_SOURCE_LOCATION set, unless they expand to nothing... But -- see above for the case of statement frontiers. */ -- else if (!debug_nonbind_markers_p -- && inlined_function_outer_scope_p (scope)) -+ /* See if this block is important for representation of inlined function. -+ Inlined functions are always represented by block with -+ block_ultimate_origin being set to FUNCTION_DECL and DECL_SOURCE_LOCATION -+ set... */ -+ else if (inlined_function_outer_scope_p (scope)) - unused = false; - else - /* Verfify that only blocks with source location set -@@ -647,16 +640,6 @@ dump_scope_block (FILE *file, int indent - fprintf (file, "#%i", BLOCK_NUMBER (origin)); - } - } -- if (BLOCK_FRAGMENT_ORIGIN (scope)) -- fprintf (file, " Fragment of : #%i", -- BLOCK_NUMBER (BLOCK_FRAGMENT_ORIGIN (scope))); -- else if (BLOCK_FRAGMENT_CHAIN (scope)) -- { -- fprintf (file, " Fragment chain :"); -- for (t = BLOCK_FRAGMENT_CHAIN (scope); t ; -- t = BLOCK_FRAGMENT_CHAIN (t)) -- fprintf (file, " #%i", BLOCK_NUMBER (t)); -- } - fprintf (file, " \n"); - for (var = BLOCK_VARS (scope); var; var = DECL_CHAIN (var)) - { ---- gcc/common.opt (revision 257511) -+++ gcc/common.opt (revision 257509) -@@ -2956,13 +2956,6 @@ gtoggle - Common Driver Report Var(flag_gtoggle) - Toggle debug information generation. - --gvariable-location-views --Common Driver Var(debug_variable_location_views, 1) Init(2) --Augment variable location lists with progressive views. -- --gvariable-location-views=incompat5 --Common Driver RejectNegative Var(debug_variable_location_views, -1) Init(2) -- - gvms - Common Driver JoinedOrMissing Negative(gxcoff) - Generate debug information in VMS format. ---- gcc/rtl.h (revision 257511) -+++ gcc/rtl.h (revision 257509) -@@ -1654,8 +1654,7 @@ extern const char * const reg_note_name[ - for which NOTE_MARKER_LOCATION can be used. */ - #define NOTE_MARKER_P(INSN) \ - (NOTE_P (INSN) && \ -- (NOTE_KIND (INSN) == NOTE_INSN_BEGIN_STMT \ -- || NOTE_KIND (INSN) == NOTE_INSN_INLINE_ENTRY)) -+ (NOTE_KIND (INSN) == NOTE_INSN_BEGIN_STMT)) - - /* Variable declaration and the location of a variable. */ - #define PAT_VAR_LOCATION_DECL(PAT) (XCTREE ((PAT), 0, VAR_LOCATION)) -@@ -1693,8 +1692,6 @@ extern const char * const reg_note_name[ - (GET_CODE (PATTERN (INSN)) == DEBUG_MARKER \ - ? (GET_MODE (PATTERN (INSN)) == VOIDmode \ - ? NOTE_INSN_BEGIN_STMT \ -- : GET_MODE (PATTERN (INSN)) == BLKmode \ -- ? NOTE_INSN_INLINE_ENTRY \ - : (enum insn_note)-1) \ - : (enum insn_note)-1) - /* Create patterns for debug markers. These and the above abstract -@@ -1704,8 +1701,6 @@ extern const char * const reg_note_name[ - wouldn't be a problem. */ - #define GEN_RTX_DEBUG_MARKER_BEGIN_STMT_PAT() \ - gen_rtx_DEBUG_MARKER (VOIDmode) --#define GEN_RTX_DEBUG_MARKER_INLINE_ENTRY_PAT() \ -- gen_rtx_DEBUG_MARKER (BLKmode) - - /* The VAR_LOCATION rtx in a DEBUG_INSN. */ - #define INSN_VAR_LOCATION(INSN) \ ---- gcc/tree-inline.c (revision 257511) -+++ gcc/tree-inline.c (revision 257509) -@@ -4605,13 +4605,6 @@ expand_call_inline (basic_block bb, gimp - GSI_NEW_STMT); - } - initialize_inlined_parameters (id, stmt, fn, bb); -- if (debug_nonbind_markers_p && id->block -- && inlined_function_outer_scope_p (id->block)) -- { -- gimple_stmt_iterator si = gsi_last_bb (bb); -- gsi_insert_after (&si, gimple_build_debug_inline_entry -- (id->block, input_location), GSI_NEW_STMT); -- } - - if (DECL_INITIAL (fn)) - { ---- gcc/var-tracking.c (revision 257511) -+++ gcc/var-tracking.c (revision 257509) -@@ -9959,7 +9959,6 @@ reemit_marker_as_note (rtx_insn *insn) - switch (kind) - { - case NOTE_INSN_BEGIN_STMT: -- case NOTE_INSN_INLINE_ENTRY: - { - rtx_insn *note = NULL; - if (cfun->debug_nonbind_markers) ---- gcc/gimple.c (revision 257511) -+++ gcc/gimple.c (revision 257509) -@@ -874,27 +874,6 @@ gimple_build_debug_begin_stmt (tree bloc - } - - --/* Build a new GIMPLE_DEBUG_INLINE_ENTRY statement in BLOCK at -- LOCATION. The BLOCK links to the inlined function. */ -- --gdebug * --gimple_build_debug_inline_entry (tree block, location_t location -- MEM_STAT_DECL) --{ -- gdebug *p -- = as_a ( -- gimple_build_with_ops_stat (GIMPLE_DEBUG, -- (unsigned)GIMPLE_DEBUG_INLINE_ENTRY, 0 -- PASS_MEM_STAT)); -- -- gimple_set_location (p, location); -- gimple_set_block (p, block); -- cfun->debug_marker_count++; -- -- return p; --} -- -- - /* Build a GIMPLE_OMP_CRITICAL statement. - - BODY is the sequence of statements for which only one thread can execute. ---- gcc/gimple.h (revision 257511) -+++ gcc/gimple.h (revision 257509) -@@ -202,8 +202,7 @@ enum gf_mask { - enum gimple_debug_subcode { - GIMPLE_DEBUG_BIND = 0, - GIMPLE_DEBUG_SOURCE_BIND = 1, -- GIMPLE_DEBUG_BEGIN_STMT = 2, -- GIMPLE_DEBUG_INLINE_ENTRY = 3 -+ GIMPLE_DEBUG_BEGIN_STMT = 2 - }; - - /* Masks for selecting a pass local flag (PLF) to work on. These -@@ -1455,7 +1454,6 @@ geh_dispatch *gimple_build_eh_dispatch ( - gdebug *gimple_build_debug_bind (tree, tree, gimple * CXX_MEM_STAT_INFO); - gdebug *gimple_build_debug_source_bind (tree, tree, gimple * CXX_MEM_STAT_INFO); - gdebug *gimple_build_debug_begin_stmt (tree, location_t CXX_MEM_STAT_INFO); --gdebug *gimple_build_debug_inline_entry (tree, location_t CXX_MEM_STAT_INFO); - gomp_critical *gimple_build_omp_critical (gimple_seq, tree, tree); - gomp_for *gimple_build_omp_for (gimple_seq, int, tree, size_t, gimple_seq); - gomp_parallel *gimple_build_omp_parallel (gimple_seq, tree, tree, tree); -@@ -4786,25 +4784,13 @@ gimple_debug_begin_stmt_p (const gimple - return false; - } - --/* Return true if S is a GIMPLE_DEBUG INLINE_ENTRY statement. */ -- --static inline bool --gimple_debug_inline_entry_p (const gimple *s) --{ -- if (is_gimple_debug (s)) -- return s->subcode == GIMPLE_DEBUG_INLINE_ENTRY; -- -- return false; --} -- - /* Return true if S is a GIMPLE_DEBUG non-binding marker statement. */ - - static inline bool - gimple_debug_nonbind_marker_p (const gimple *s) - { - if (is_gimple_debug (s)) -- return s->subcode == GIMPLE_DEBUG_BEGIN_STMT -- || s->subcode == GIMPLE_DEBUG_INLINE_ENTRY; -+ return s->subcode == GIMPLE_DEBUG_BEGIN_STMT; - - return false; - } diff --git a/sources b/sources index f40e372..353b05a 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (gcc-8.0.1-20180210.tar.xz) = 23d9af44e3c8fce98d5614ee5540d9119f5727eddacb217a15e8c8b38eae1ca66fd7d67d4015d2899d34cbbb7df87c5ce5ce13aa7779746973a1bf8b1c959bb0 +SHA512 (gcc-8.0.1-20180218.tar.xz) = a230134977b5137b19d7a40f8997da98d39e7653b3b009c68ed830d08fc5cbc76c0ba97ecc91501ba2bca899d46230f61881c8cc20277453d9ab06906f463cbd SHA512 (nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.xz) = 94f7089365296f7dfa485107b4143bebc850a81586f3460fd896bbbb6ba099a00217d4042133424fd2183b352132f4fd367e6a60599bdae2a26dfd48a77d0e04 SHA512 (nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.xz) = a688cb12cf805950a5abbb13b52f45c81dbee98e310b7ed57ae20e76dbfa5964a16270148374a6426d177db71909d28360490f091c86a5d19d4faa5127beeee1