gcc/libiberty
Richard Biener 1ea85365b4 re PR go/78628 (GO fails to build a translation unit decl)
2017-08-21  Richard Biener  <rguenther@suse.de>

	include/
	* simple-object.h (simple_object_copy_lto_debug_sections): New
	function.

	libiberty/
	* simple-object-common.h (struct simple_object_functions): Add
	copy_lto_debug_sections hook.
	* simple-object.c: Include fcntl.h.
	(handle_lto_debug_sections): New helper function.
	(simple_object_copy_lto_debug_sections): New function copying
	early LTO debug sections to regular debug sections in a new file.
	(simple_object_start_write): Handle NULL segment_name.
	* simple-object-coff.c (simple_object_coff_functions): Adjust
	for not implemented copy_lto_debug_sections hook.
	* simple-object-mach-o.c (simple_object_mach_o_functions): Likewise.
	* simple-object-xcoff.c (simple_object_xcoff_functions): Likewise.
	* simple-object-elf.c (SHT_NULL, SHT_SYMTAB, SHT_RELA, SHT_REL,
	SHT_GROUP): Add various sectopn header types.
	(SHF_EXCLUDE): Add flag.
	(Elf32_External_Sym, Elf64_External_Sym): Add symbol struct.
	(ELF_ST_BIND, ELF_ST_TYPE, ELF_ST_INFO): Add accessors.
	(STT_OBJECT, STT_FUNC, STT_TLS, STT_GNU_IFUNC): Add Symbol types.
	(STV_DEFAULT): Add symbol visibility.
	(SHN_COMMON): Add special section index name.
	(struct simple_object_elf_write): New.
	(simple_object_elf_start_write): Adjust for new private data.
	(simple_object_elf_write_shdr): Pass in values for all fields
	we write.
	(simple_object_elf_write_to_file): Adjust.  Copy from recorded
	section headers if requested.
	(simple_object_elf_release_write): Release private data.
	(simple_object_elf_copy_lto_debug_sections): Copy and rename sections
	as denoted by PFN and all their dependences, symbols and relocations
	to the empty destination file.
	(simple_object_elf_functions): Adjust for copy_lto_debug_sections hook.

        gcc/
        * debug.h (struct gcc_debug_hooks): Add die_ref_for_decl and
        register_external_die hooks.
        (debug_false_tree_charstarstar_uhwistar): Declare.
        (debug_nothing_tree_charstar_uhwi): Likewise.
        * debug.c (do_nothing_debug_hooks): Adjust.
        (debug_false_tree_charstarstar_uhwistar): New do nothing.
        (debug_nothing_tree_charstar_uhwi): Likewise.
        * dbxout.c (dbx_debug_hooks): Adjust.
        (xcoff_debug_hooks): Likewise.
        * sdbout.c (sdb_debug_hooks): Likewise.
        * vmsdbgout.c (vmsdbg_debug_hooks): Likewise.
        * dwarf2out.c (macinfo_label_base): New global.
	(dwarf2out_register_external_die): New function for the
	register_external_die hook.
        (dwarf2out_die_ref_for_decl): Likewise for die_ref_for_decl.
        (dwarf2_debug_hooks): Use them.
        (dwarf2_lineno_debug_hooks): Adjust.
        (struct die_struct): Add with_offset flag.
        (DEBUG_LTO_DWO_INFO_SECTION, DEBUG_LTO_INFO_SECTION,
        DEBUG_LTO_DWO_ABBREV_SECTION, DEBUG_LTO_ABBREV_SECTION,
        DEBUG_LTO_DWO_MACINFO_SECTION, DEBUG_LTO_MACINFO_SECTION,
        DEBUG_LTO_DWO_MACRO_SECTION, DEBUG_LTO_MACRO_SECTION,
        DEBUG_LTO_LINE_SECTION, DEBUG_LTO_DWO_STR_OFFSETS_SECTION,
        DEBUG_LTO_STR_DWO_SECTION, DEBUG_STR_LTO_SECTION): New macros
        defining section names for the early LTO debug variants.
	(reset_indirect_string): New helper.
        (add_AT_external_die_ref): Helper for dwarf2out_register_external_die.
        (print_dw_val): Add support for offsetted symbol references.
	(get_ultimate_context): Split out from is_cxx.
	(is_cxx): Use get_ultimate_context.
	(is_fortran): Add decl overload.
        (compute_comp_unit_symbol): Split out worker from
	compute_section_prefix.
        (compute_section_prefix): Call compute_comp_unit_symbol and
	set comdat_type_p here.
        (output_die): Skip DIE symbol output for the LTO added one.
        Handle DIE symbol references with offset.
        (output_comp_unit): Guard section name mangling properly.
        For LTO debug sections emit a symbol at the section beginning
        which we use to refer to its DIEs.
        (add_abstract_origin_attribute): For DIEs registered via
        dwarf2out_register_external_die directly refer to the early
        DIE rather than indirectly through the shadow one we created.
	Remove obsolete call to dwarf2out_abstract_function for
	non-function/block origins.
        (gen_array_type_die): When generating early LTO debug do
        not emit DW_AT_string_length.
        (gen_formal_parameter_die): Do not re-create DIEs for PARM_DECLs
        late when in LTO.  As suggested place a gcc_unreachable for
	the DECL_ABSTRACT_P case.
        (gen_subprogram_die): Avoid another specification DIE
        for early built declarations/definitions for the late LTO case.
        (gen_variable_die): Add type references for late duplicated VLA dies
        when in late LTO.
        (gen_inlined_subroutine_die): Do not call dwarf2out_abstract_function,
        we have the abstract instance already.
        (process_scope_var): Adjust decl DIE contexts in LTO which
        first puts them in limbo.
        (gen_decl_die): Do not generate type DIEs late apart from
        types for VLAs or for decls we do not yet have a DIE.  Do not
	call dwarf2out_abstract_function late.
        (dwarf2out_early_global_decl): Make sure to create DIEs
        for abstract instances of a decl first.
        (dwarf2out_late_global_decl): Adjust comment.
        (output_macinfo_op): With multiple macro sections use
	macinfo_label_base to distinguish labels.
        (output_macinfo): Likewise.  Update macinfo_label_base.
	Pass in the line info label.
	(note_variable_value_in_expr): When generating LTO resolve
	all variable values here by generating DIEs as needed.
        (init_sections_and_labels): Add early LTO debug flag parameter
        and generate different sections and names if set.  Add generation
        counter for the labels so we can have multiple of them.
        (reset_dies): Helper to allow DIEs to be output multiple times.
        (dwarf2out_finish): When outputting DIEs to the fat part of an
	LTO object first reset DIEs.
        (dwarf2out_early_finish): Output early DIEs when generating LTO.
	(modified_type_die): Check for decl_ultimate_origin being self
	before recursing.
	(gen_type_die_with_usage): Likewise.
	(gen_typedef_die): Allow decl_ultimate_origin being self.
        (set_decl_abstract_flags): Remove.
        (set_block_abstract_flags): Likewise.
        (dwarf2out_abstract_function): Treat the early generated DIEs
        as the abstract copy and only add DW_AT_inline and
        DW_AT_artificial here and call set_decl_origin_self.
	If the DIE has an abstract origin don't do anything.
	* tree.c (free_lang_data): Build a dummy TRANSLATION_UNIT_DECL
	if we have none yet (Go fails to build one, PR78628).
	(variably_modified_type_p): Prevent endless recursion for Ada
	cyclic pointer types.
        * lto-streamer-in.c: Include debug.h.
        (dref_queue): New global.
        (lto_read_tree_1): Stream in DIE references.
        (lto_input_tree): Register DIE references.
	(input_function): Stream DECL_DEBUG_ARGS.
        * lto-streamer-out.c: Include debug.h.
        (lto_write_tree_1): Output DIE references.
        (DFS::DFS_write_tree_body): Follow DECL_ABSTRACT_ORIGIN.
	Force a TRANSLATION_UNIT_DECL DECL_CONTEXT for file-scope decls.
	(output_function): Stream DECL_DEBUG_ARGS.
        * tree-streamer-in.c (lto_input_ts_decl_common_tree_pointers):
        Stream DECL_ABSTRACT_ORIGIN.
        * tree-streamer-out.c (write_ts_decl_common_tree_pointers): Likewise.
	(write_ts_decl_minimal_tree_pointers): Force a TRANSLATION_UNIT_DECL
	DECL_CONTEXT for file-scope decls.
        * lto-streamer.h (struct dref_entry): Declare.
        (dref_queue): Likewise.
	* cfgexpand.c (pass_expand::execute): Do not call the
	outlining_inline_function hook here.
        * lto-wrapper.c (debug_obj): New global.
        (tool_cleanup): Unlink it if required.
        (debug_objcopy): New function.
        (run_gcc): Handle early debug sections in the IL files by
        extracting them to separate files, partially linkin them and
        feeding the result back as result to the linker.

        * config/darwin.h (DEBUG_LTO_INFO_SECTION, DEBUG_LTO_ABBREV_SECTION,
        DEBUG_LTO_MACINFO_SECTION, DEBUG_LTO_LINE_SECTION,
        DEBUG_STR_LTO_SECTION, DEBUG_LTO_MACRO_SECTION): Put early debug
        sections into a separate segment.
        * config/darwin.c (darwin_asm_named_section): Handle __GNU_DWARF_LTO
        segments.
        (darwin_asm_dwarf_section): Likewise.
        (darwin_asm_output_dwarf_offset): Likewise.

	* config/i386/i386.c (make_resolver_func): Set DECL_IGNORED_P.

        lto/
        * lto.c (unify_scc): Truncate DIE reference queue for dropped SCCs.
        (lto_read_decls): Process TRANSLATION_UNIT_DECLs.  Remove
        TYPE_DECL debug processing, register DIE references from
        prevailing SCCs with the debug machinery.
        (lto_section_with_id): Handle LTO debug sections.

	libstdc++/
	* testsuite/libstdc++-prettyprinters/prettyprinters.exp: Run all
	tests with -flto as well if supported.

        testsuite/
	* c-c++-common/asan/global-overflow-1.c: Adjust diagnostic location
	regex to handle the LTO case.
	* c-c++-common/asan/heap-overflow-1.c: Likewise.
	* c-c++-common/asan/misalign-1.c: Likewise.
	* c-c++-common/asan/misalign-2.c: Likewise.
	* c-c++-common/asan/null-deref-1.c: Likewise.
	* c-c++-common/asan/stack-overflow-1.c: Likewise.
	* c-c++-common/asan/strncpy-overflow-1.c: Likewise.
	* c-c++-common/asan/use-after-free-1.c: Likewise.
	* c-c++-common/asan/alloca_big_alignment.c: Likewise.
	* c-c++-common/asan/alloca_detect_custom_size.c: Likewise.
	* c-c++-common/asan/alloca_overflow_partial.c: Likewise.
	* c-c++-common/asan/alloca_overflow_right.c: Likewise.
	* c-c++-common/asan/alloca_underflow_left.c: Likewise.
	* g++.dg/asan/large-func-test-1.C: Likewise.
	* gfortran.dg/save_6.f90: Add -flto -g variant of save_5.f90.

From-SVN: r251220
2017-08-21 10:29:00 +00:00
..
config
testsuite d-demangle.c (dlang_identifier): Prefix mangled init symbols with `initializer for'. 2017-05-27 11:30:22 +00:00
.gitignore
COPYING.LIB
ChangeLog re PR go/78628 (GO fails to build a translation unit decl) 2017-08-21 10:29:00 +00:00
ChangeLog.jit
Makefile.in Update copyright years. 2017-01-04 12:30:51 +01:00
README
_doprnt.c Update copyright years. 2017-01-04 12:30:51 +01:00
aclocal.m4 - Revert last commit, restore the regenerated files aclocal.m4 and configure 2016-11-15 17:27:39 +00:00
alloca.c
argv.c Update copyright years. 2017-01-04 12:30:51 +01:00
asprintf.c Update copyright years. 2017-01-04 12:30:51 +01:00
at-file.texi
atexit.c
basename.c
bcmp.c
bcopy.c
bsearch.c
bzero.c
calloc.c
choose-temp.c Update copyright years. 2017-01-04 12:30:51 +01:00
clock.c Update copyright years. 2017-01-04 12:30:51 +01:00
concat.c Update copyright years. 2017-01-04 12:30:51 +01:00
config.h-vms
config.in configure.ac (strnlen): Add to AC_CHECK_DECLS. 2017-05-31 00:16:45 -04:00
configure configure.ac (strnlen): Add to AC_CHECK_DECLS. 2017-05-31 00:16:45 -04:00
configure.ac configure.ac (strnlen): Add to AC_CHECK_DECLS. 2017-05-31 00:16:45 -04:00
configure.com
copying-lib.texi Update copyright years. 2017-01-04 12:30:51 +01:00
copysign.c
cp-demangle.c PR demangler/80513 check for overflows and invalid characters in thunks 2017-04-27 10:44:28 +01:00
cp-demangle.h libiberty: Don't update and remove did_subs field from demangler structs. 2017-04-21 09:01:44 +00:00
cp-demint.c cplus_demangle_fill_component: Handle DEMANGLE_COMPONENT_RVALUE_REFERENCE 2017-03-27 14:23:49 +00:00
cplus-dem.c PR demangler/80513 check for overflows and invalid characters in thunks 2017-04-27 10:44:28 +01:00
crc32.c Update copyright years. 2017-01-04 12:30:51 +01:00
d-demangle.c d-demangle.c (dlang_identifier): Prefix mangled init symbols with `initializer for'. 2017-05-27 11:30:22 +00:00
dwarfnames.c include/ChangeLog 2017-07-02 20:00:48 +00:00
dyn-string.c Update copyright years. 2017-01-04 12:30:51 +01:00
fdmatch.c Update copyright years. 2017-01-04 12:30:51 +01:00
ffs.c
fibheap.c Update copyright years. 2017-01-04 12:30:51 +01:00
filename_cmp.c Update copyright years. 2017-01-04 12:30:51 +01:00
floatformat.c Update copyright years. 2017-01-04 12:30:51 +01:00
fnmatch.c Update copyright years. 2017-01-04 12:30:51 +01:00
fnmatch.txh
fopen_unlocked.c Update copyright years. 2017-01-04 12:30:51 +01:00
functions.texi
gather-docs Update copyright years. 2017-01-04 12:30:51 +01:00
getcwd.c
getopt.c Update copyright years. 2017-01-04 12:30:51 +01:00
getopt1.c Update copyright years. 2017-01-04 12:30:51 +01:00
getpagesize.c
getpwd.c
getruntime.c Update copyright years. 2017-01-04 12:30:51 +01:00
gettimeofday.c
hashtab.c Update copyright years. 2017-01-04 12:30:51 +01:00
hex.c Update copyright years. 2017-01-04 12:30:51 +01:00
index.c
insque.c
lbasename.c Update copyright years. 2017-01-04 12:30:51 +01:00
libiberty.texi Update copyright years. 2017-01-04 12:30:51 +01:00
lrealpath.c Update copyright years. 2017-01-04 12:30:51 +01:00
maint-tool Update copyright years. 2017-01-04 12:30:51 +01:00
make-relative-prefix.c Update copyright years. 2017-01-04 12:30:51 +01:00
make-temp-file.c Update copyright years. 2017-01-04 12:30:51 +01:00
makefile.vms
md5.c Update copyright years. 2017-01-04 12:30:51 +01:00
memchr.c
memcmp.c
memcpy.c
memmem.c Update copyright years. 2017-01-04 12:30:51 +01:00
memmove.c
mempcpy.c Update copyright years. 2017-01-04 12:30:51 +01:00
memset.c
mkstemps.c Update copyright years. 2017-01-04 12:30:51 +01:00
msdos.c
objalloc.c Update copyright years. 2017-01-04 12:30:51 +01:00
obstack.c Update copyright years. 2017-01-04 12:30:51 +01:00
obstacks.texi
partition.c Update copyright years. 2017-01-04 12:30:51 +01:00
pex-common.c Update copyright years. 2017-01-04 12:30:51 +01:00
pex-common.h Update copyright years. 2017-01-04 12:30:51 +01:00
pex-djgpp.c Update copyright years. 2017-01-04 12:30:51 +01:00
pex-msdos.c Update copyright years. 2017-01-04 12:30:51 +01:00
pex-one.c Update copyright years. 2017-01-04 12:30:51 +01:00
pex-unix.c Update copyright years. 2017-01-04 12:30:51 +01:00
pex-win32.c Update copyright years. 2017-01-04 12:30:51 +01:00
pexecute.c Update copyright years. 2017-01-04 12:30:51 +01:00
pexecute.txh
physmem.c Update copyright years. 2017-01-04 12:30:51 +01:00
putenv.c Update copyright years. 2017-01-04 12:30:51 +01:00
random.c
regex.c Update copyright years. 2017-01-04 12:30:51 +01:00
rename.c
rindex.c
rust-demangle.c Update copyright years. 2017-01-04 12:30:51 +01:00
safe-ctype.c Update copyright years. 2017-01-04 12:30:51 +01:00
setenv.c Update copyright years. 2017-01-04 12:30:51 +01:00
setproctitle.c Update copyright years. 2017-01-04 12:30:51 +01:00
sha1.c Update copyright years. 2017-01-04 12:30:51 +01:00
sigsetmask.c
simple-object-coff.c re PR go/78628 (GO fails to build a translation unit decl) 2017-08-21 10:29:00 +00:00
simple-object-common.h re PR go/78628 (GO fails to build a translation unit decl) 2017-08-21 10:29:00 +00:00
simple-object-elf.c re PR go/78628 (GO fails to build a translation unit decl) 2017-08-21 10:29:00 +00:00
simple-object-mach-o.c re PR go/78628 (GO fails to build a translation unit decl) 2017-08-21 10:29:00 +00:00
simple-object-xcoff.c re PR go/78628 (GO fails to build a translation unit decl) 2017-08-21 10:29:00 +00:00
simple-object.c re PR go/78628 (GO fails to build a translation unit decl) 2017-08-21 10:29:00 +00:00
simple-object.txh
snprintf.c Update copyright years. 2017-01-04 12:30:51 +01:00
sort.c Update copyright years. 2017-01-04 12:30:51 +01:00
spaces.c Update copyright years. 2017-01-04 12:30:51 +01:00
splay-tree.c Update copyright years. 2017-01-04 12:30:51 +01:00
stack-limit.c Update copyright years. 2017-01-04 12:30:51 +01:00
stpcpy.c Update copyright years. 2017-01-04 12:30:51 +01:00
stpncpy.c Update copyright years. 2017-01-04 12:30:51 +01:00
strcasecmp.c
strchr.c
strdup.c
strerror.c
strncasecmp.c
strncmp.c
strndup.c Update copyright years. 2017-01-04 12:30:51 +01:00
strnlen.c
strrchr.c
strsignal.c
strstr.c
strtod.c Update copyright years. 2017-01-04 12:30:51 +01:00
strtol.c
strtoll.c
strtoul.c
strtoull.c
strverscmp.c Update copyright years. 2017-01-04 12:30:51 +01:00
timeval-utils.c Update copyright years. 2017-01-04 12:30:51 +01:00
tmpnam.c
unlink-if-ordinary.c Update copyright years. 2017-01-04 12:30:51 +01:00
vasprintf.c Update copyright years. 2017-01-04 12:30:51 +01:00
vfork.c
vfprintf.c Update copyright years. 2017-01-04 12:30:51 +01:00
vprintf-support.c Update copyright years. 2017-01-04 12:30:51 +01:00
vprintf-support.h Update copyright years. 2017-01-04 12:30:51 +01:00
vprintf.c
vsnprintf.c Update copyright years. 2017-01-04 12:30:51 +01:00
vsprintf.c Update copyright years. 2017-01-04 12:30:51 +01:00
waitpid.c waitpid.c (wait): Define as a macro that calls _cwait, so that this function works on MinGW. 2017-05-24 17:35:59 -04:00
xasprintf.c Update copyright years. 2017-01-04 12:30:51 +01:00
xatexit.c
xexit.c Update copyright years. 2017-01-04 12:30:51 +01:00
xmalloc.c Update copyright years. 2017-01-04 12:30:51 +01:00
xmemdup.c
xstrdup.c
xstrerror.c
xstrndup.c Update copyright years. 2017-01-04 12:30:51 +01:00
xvasprintf.c Update copyright years. 2017-01-04 12:30:51 +01:00

README

This directory contains the -liberty library of free software.
It is a collection of subroutines used by various GNU programs.
Current members include:

	getopt -- get options from command line
	obstack -- stacks of arbitrarily-sized objects
	strerror -- error message strings corresponding to errno
	strtol -- string-to-long conversion
	strtoul -- string-to-unsigned-long conversion

We expect many of the GNU subroutines that are floating around to
eventually arrive here.

The library must be configured from the top source directory.  Don't
try to run configure in this directory.  Follow the configuration
instructions in ../README.

Please report bugs to "gcc-bugs@gcc.gnu.org" and send fixes to
"gcc-patches@gcc.gnu.org".  Thank you.

ADDING A NEW FILE
=================

There are two sets of files:  Those that are "required" will be
included in the library for all configurations, while those
that are "optional" will be included in the library only if "needed."

To add a new required file, edit Makefile.in to add the source file
name to CFILES and the object file to REQUIRED_OFILES.

To add a new optional file, it must provide a single function, and the
name of the function must be the same as the name of the file.

    * Add the source file name to CFILES in Makefile.in and the object
      file to CONFIGURED_OFILES.

    * Add the function to name to the funcs shell variable in
      configure.ac.

    * Add the function to the AC_CHECK_FUNCS lists just after the
      setting of the funcs shell variable.  These AC_CHECK_FUNCS calls
      are never executed; they are there to make autoheader work
      better.

    * Consider the special cases of building libiberty; as of this
      writing, the special cases are newlib and VxWorks.  If a
      particular special case provides the function, you do not need
      to do anything.  If it does not provide the function, add the
      object file to LIBOBJS, and add the function name to the case
      controlling whether to define HAVE_func.

Finally, in the build directory of libiberty, configure with
"--enable-maintainer-mode", run "make maint-deps" to update
Makefile.in, and run 'make stamp-functions' to regenerate
functions.texi.

The optional file you've added (e.g. getcwd.c) should compile and work
on all hosts where it is needed.  It does not have to work or even
compile on hosts where it is not needed.

ADDING A NEW CONFIGURATION
==========================

On most hosts you should be able to use the scheme for automatically
figuring out which files are needed.  In that case, you probably
don't need a special Makefile stub for that configuration.

If the fully automatic scheme doesn't work, you may be able to get
by with defining EXTRA_OFILES in your Makefile stub.  This is
a list of object file names that should be treated as required
for this configuration - they will be included in libiberty.a,
regardless of whatever might be in the C library.