Go to file
Jakub Jelinek 4b33c5aaab dwarf2out: Fix up ranges for -gdwarf-5 -gsplit-dwarf [PR99490]
For -gdwarf-4 -gsplit-dwarf we used to emit .debug_ranges section
(so in the binaries/shared libraries) with DW_AT_ranges from skeleton
units as well as .debug_info.dwo pointing to it through DW_FORM_sec_offset
(and DW_AT_GNU_ranges_base pointing into section, not sure for what
reason exactly).
When DWARF5 support was being added, we've started using .debug_rnglists
section, added DW_AT_rnglists_base to the DW_TAG_skeleton_unit, kept
DW_AT_ranges with DW_FORM_sec_offset in the skeleton and switched
over to DW_FORM_rnglistx for DW_AT_ranges in .debug_info.dwo.
But the DWARF5 spec actually means for the ranges section (at least
everything for those DW_AT_ranges in .debug_info.dwo) to sit
in .debug_rnglists.dwo section next to the .debug_info.dwo, rather than
having consumers look it up in the binary/shared library instead.
Based on some discussions in the DWARF discuss mailing list:
http://lists.dwarfstd.org/pipermail/dwarf-discuss-dwarfstd.org/2021-March/thread.html#4765
this patch mostly follows what LLVM emits for that right now:
1) small .debug_rnglists section (when needed) just to cover the
   skeleton DW_AT_ranges (if present); the content of the section
   uses the Split DWARFy DW_RLE_* codes with addrx encodings where
   possible
2) DW_AT_ranges in the skeleton uses DW_FORM_sec_offset (difference
   from LLVM which uses DW_FORM_rnglistx, which makes it larger
   and ambiguous)
3) DW_AT_rnglists_base attribute is gone from the skeleton (again,
   unlike LLVM where it is just confusing what exactly it means because
   it is inherited; it would make sense if we emitted DW_FORM_rnglistx
   in non-split DWARF, but unless ranges are shared, I'm afraid we'd
   make DWARF larger with fewer relocations by that)
4) usually big .debug_rnglists.dwo section again with using DW_RLE_*x*
   where possible
5) DW_AT_ranges with DW_FORM_rnglistx from .debug_info.dwo referring to
   that .debug_rnglists.dwo ranges

2021-03-31  Jakub Jelinek  <jakub@redhat.com>

	PR debug/99490
	* dwarf2out.c (debug_ranges_dwo_section): New variable.
	(DW_RANGES_IDX_SKELETON): Define.
	(struct dw_ranges): Add begin_entry and end_entry members.
	(DEBUG_DWO_RNGLISTS_SECTION): Define.
	(add_ranges_num): Adjust r initializer for addition of *_entry
	members.
	(add_ranges_by_labels): For -gsplit-dwarf and force_direct,
	set idx to DW_RANGES_IDX_SKELETON.
	(use_distinct_base_address_for_range): New function.
	(index_rnglists): Don't set r->idx if it is equal to
	DW_RANGES_IDX_SKELETON.  Initialize r->begin_entry and
	r->end_entry for -gsplit-dwarf if those will be needed by
	output_rnglists.
	(output_rnglists): Add DWO argument.  If true, switch to
	debug_ranges_dwo_section rather than debug_ranges_section.
	Adjust l1/l2 label indexes.  Only output the offset table when
	dwo is true and don't include in there the skeleton range
	entry if present.  For -gsplit-dwarf, skip ranges that belong
	to the other rnglists section.  Change return type from void
	to bool and return true if there are any range entries for
	the other section.  For dwarf_split_debug_info use
	DW_RLE_startx_endx, DW_RLE_startx_length and DW_RLE_base_addressx
	entries instead of DW_RLE_start_end, DW_RLE_start_length and
	DW_RLE_base_address.  Use use_distinct_base_address_for_range.
	(init_sections_and_labels): Initialize debug_ranges_dwo_section
	if -gsplit-dwarf and DWARF >= 5.  Adjust ranges_section_label
	and range_base_label indexes.
	(dwarf2out_finish): Call index_rnglists earlier before finalizing
	.debug_addr.  Never emit DW_AT_rnglists_base attribute.  For
	-gsplit-dwarf and DWARF >= 5 call output_rnglists up to twice
	with different dwo arguments.
	(dwarf2out_c_finalize): Clear debug_ranges_dwo_section.
2021-03-31 21:25:58 +02:00
c++tools Daily bump. 2021-02-26 00:16:36 +00:00
config Daily bump. 2021-01-06 00:16:55 +00:00
contrib Daily bump. 2021-03-24 00:16:25 +00:00
fixincludes Daily bump. 2020-12-15 00:16:35 +00:00
gcc dwarf2out: Fix up ranges for -gdwarf-5 -gsplit-dwarf [PR99490] 2021-03-31 21:25:58 +02:00
gnattools
gotools Daily bump. 2021-02-03 00:16:23 +00:00
include c++: Adjust mangling of __alignof__ [PR88115] 2021-03-30 22:57:11 -04:00
INSTALL
intl
libada Update copyright years. 2021-01-04 10:26:59 +01:00
libatomic Daily bump. 2021-01-16 00:16:29 +00:00
libbacktrace Daily bump. 2021-03-04 00:16:48 +00:00
libcc1 Daily bump. 2021-01-06 00:16:55 +00:00
libcody Daily bump. 2021-01-13 00:16:36 +00:00
libcpp Daily bump. 2021-03-30 00:16:29 +00:00
libdecnumber Update copyright years. 2021-01-04 10:26:59 +01:00
libffi Daily bump. 2021-01-06 00:16:55 +00:00
libgcc Daily bump. 2021-03-30 00:16:29 +00:00
libgfortran Daily bump. 2021-03-13 00:16:20 +00:00
libgo libgo: update to Go 1.16.2 release 2021-03-15 14:52:55 -07:00
libgomp Daily bump. 2021-03-30 00:16:29 +00:00
libhsail-rt Daily bump. 2021-01-06 00:16:55 +00:00
libiberty c++: Adjust mangling of __alignof__ [PR88115] 2021-03-30 22:57:11 -04:00
libitm Daily bump. 2021-01-16 00:16:29 +00:00
libobjc Daily bump. 2021-01-06 00:16:55 +00:00
liboffloadmic Daily bump. 2021-01-06 00:16:55 +00:00
libphobos Daily bump. 2021-03-27 00:16:27 +00:00
libquadmath Daily bump. 2021-01-06 00:16:55 +00:00
libsanitizer Daily bump. 2021-03-09 00:16:57 +00:00
libssp Daily bump. 2021-01-06 00:16:55 +00:00
libstdc++-v3 improve future::poll calibration loop 2021-03-31 15:45:56 -03:00
libvtv Daily bump. 2021-01-06 00:16:55 +00:00
lto-plugin Daily bump. 2021-01-06 00:16:55 +00:00
maintainer-scripts Daily bump. 2020-12-17 00:16:37 +00:00
zlib Daily bump. 2021-01-06 00:16:55 +00:00
.dir-locals.el .dir-locals.el: Set 'fill-column' to 80 for c-mode 2020-12-14 12:19:56 +01:00
.gitattributes
.gitignore Sync .gitignore with binutils-gdb 2020-12-02 11:04:01 -07:00
ABOUT-NLS
ar-lib
ChangeLog Daily bump. 2021-03-27 00:16:27 +00:00
ChangeLog.jit
ChangeLog.tree-ssa
compile
config-ml.in config-ml.in: Suppress output from multi-do recipes 2020-11-09 14:28:37 +00:00
config.guess config.sub, config.guess : Import upstream 2021-01-25. 2021-02-23 17:21:10 +08:00
config.rpath
config.sub config.sub, config.guess : Import upstream 2021-01-25. 2021-02-23 17:21:10 +08:00
configure Add C++tools 2020-12-15 07:42:59 -08:00
configure.ac Add C++tools 2020-12-15 07:42:59 -08:00
COPYING
COPYING3
COPYING3.LIB
COPYING.LIB
COPYING.RUNTIME
depcomp
install-sh
libtool-ldflags
libtool.m4 Update GNU/Hurd configure support 2021-01-05 16:04:14 -07:00
lt~obsolete.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
MAINTAINERS MAINTAINERS: Add myself as pru port maintainer 2021-03-26 19:52:24 +02:00
Makefile.def sim: drop dep on configure-gdb 2021-03-12 19:48:13 -05:00
Makefile.in sim: drop dep on configure-gdb 2021-03-12 19:48:13 -05:00
Makefile.tpl Add -fprofile-reproducible=parallel-runs to STAGEfeedback_CFLAGS to Makefile.tpl. 2021-03-11 16:18:56 +01:00
missing
mkdep
mkinstalldirs
move-if-change
multilib.am
README
symlink-tree
test-driver
ylwrap

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.