binutils-gdb/libctf
Nick Alcock 8d2229ad1e libctf, link: add lazy linking: clean up input members: err/warn cleanup
This rather large and intertwined pile of changes does three things:

First, it transitions from dprintf to ctf_err_warn for things the user might
care about: this one file is the major impetus for the ctf_err_warn
infrastructure, because things like file names are crucial in linker
error messages, and errno values are utterly incapable of
communicating them

Second, it stabilizes the ctf_link APIs: you can now call
ctf_link_add_ctf without a CTF argument (only a NAME), to lazily
ctf_open the file with the given NAME when needed, and close it as soon
as possible, to save memory.  This is not an API change because a null
CTF argument was prohibited before now.

Since getting CTF directly from files uses ctf_open, passing in only a
NAME requires use of libctf, not libctf-nobfd.  The linker's behaviour
is unchanged, as it still passes in a ctf_archive_t as before.

This also let us fix a leak: we were opening ctf_archives and their
containing ctf_files, then only closing the files and leaving the
archives open.

Third, this commit restructures the ctf_link_in_member argument used by
the CTF linking machinery and adjusts its users accordingly.

We drop two members:

- arcname, which is difficult to construct and then only used in error
  messages (that were only dprintf()ed, so never seen!)
- share_mode, since we store the flags passed to ctf_link (including the
  share mode) in a new ctf_file_t.ctf_link_flags to help dedup get hold
  of it

We rename others whose existing names were fairly dreadful:

- done_main_member -> done_parent, using consistent terminology for .ctf
  as the parent of all archive members
- main_input_fp -> in_fp_parent, likewise
- file_name -> in_file_name, likewise

We add one new member, cu_mapped.

Finally, we move the various frees of things like mapping table data to
the top-level ctf_link, since deduplicating links will want to do that
too.

include/
	* ctf-api.h (ECTF_NEEDSBFD): New.
	(ECTF_NERR): Adjust.
	(ctf_link): Rename share_mode arg to flags.
libctf/
	* Makefile.am: Set -DNOBFD=1 in libctf-nobfd, and =0 elsewhere.
	* Makefile.in: Regenerated.
	* ctf-impl.h (ctf_link_input_name): New.
	(ctf_file_t) <ctf_link_flags>: New.
	* ctf-create.c (ctf_serialize): Adjust accordingly.
	* ctf-link.c: Define ctf_open as weak when PIC.
	(ctf_arc_close_thunk): Remove unnecessary thunk.
	(ctf_file_close_thunk): Likewise.
	(ctf_link_input_name): New.
	(ctf_link_input_t): New value of the ctf_file_t.ctf_link_input.
	(ctf_link_input_close): Adjust accordingly.
	(ctf_link_add_ctf_internal): New, split from...
	(ctf_link_add_ctf): ... here.  Return error if lazy loading of
	CTF is not possible.  Change to just call...
	(ctf_link_add): ... this new function.
	(ctf_link_add_cu_mapping): Transition to ctf_err_warn.  Drop the
	ctf_file_close_thunk.
	(ctf_link_in_member_cb_arg_t) <file_name> Rename to...
	<in_file_name>: ... this.
	<arcname>: Drop.
	<share_mode>: Likewise (migrated to ctf_link_flags).
	<done_main_member>: Rename to...
	<done_parent>: ... this.
	<main_input_fp>: Rename to...
	<in_fp_parent>: ... this.
	<cu_mapped>: New.
	(ctf_link_one_type): Adjuwt accordingly.  Transition to
	ctf_err_warn, removing a TODO.
	(ctf_link_one_variable): Note a case too common to warn about.
	Report in the debug stream if a cu-mapped link prevents addition
	of a conflicting variable.
	(ctf_link_one_input_archive_member): Adjust.
	(ctf_link_lazy_open): New, open a CTF archive for linking when
	needed.
	(ctf_link_close_one_input_archive): New, close it again.
	(ctf_link_one_input_archive): Adjust for lazy opening, member
	renames, and ctf_err_warn transition.  Move the
	empty_link_type_mapping call to...
	(ctf_link): ... here.  Adjut for renamings and thunk removal.
	Don't spuriously fail if some input contains no CTF data.
	(ctf_link_write): ctf_err_warn transition.
	* libctf.ver: Remove not-yet-stable comment.
2020-07-22 18:02:18 +01:00
..
.gitignore libctf: restructure error handling to reduce relocations 2020-07-22 17:57:20 +01:00
aclocal.m4 libctf: support platforms with separate libintl 2020-06-26 15:56:39 +01:00
ChangeLog libctf, link: add lazy linking: clean up input members: err/warn cleanup 2020-07-22 18:02:18 +01:00
config.h.in libctf: check for vasprintf 2020-07-22 18:02:18 +01:00
configure libctf: check for vasprintf 2020-07-22 18:02:18 +01:00
configure.ac libctf: check for vasprintf 2020-07-22 18:02:18 +01:00
ctf-archive.c libctf, archive: fix bad error message 2020-07-22 18:02:18 +01:00
ctf-create.c libctf, link: add lazy linking: clean up input members: err/warn cleanup 2020-07-22 18:02:18 +01:00
ctf-decl.c libctf, decl: avoid leaks of the formatted string on error 2020-07-22 18:02:17 +01:00
ctf-decls.h libctf: pass the thunk down properly when wrapping qsort_r 2020-07-22 17:57:52 +01:00
ctf-dump.c libctf, dump: fix slice dumping 2020-07-22 18:02:18 +01:00
ctf-endian.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
ctf-error.c libctf: drop error-prone ctf_strerror 2020-07-22 18:02:18 +01:00
ctf-hash.c libctf: rename the type_mapping_key to type_key 2020-07-22 18:02:18 +01:00
ctf-impl.h libctf, link: add lazy linking: clean up input members: err/warn cleanup 2020-07-22 18:02:18 +01:00
ctf-inlines.h libctf, ld, binutils: add textual error/warning reporting for libctf 2020-07-22 18:02:17 +01:00
ctf-labels.c Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
ctf-link.c libctf, link: add lazy linking: clean up input members: err/warn cleanup 2020-07-22 18:02:18 +01:00
ctf-lookup.c libctf, next: introduce new class of easier-to-use iterators 2020-07-22 17:57:50 +01:00
ctf-open-bfd.c libctf, open: fix opening CTF in binaries with no symtab 2020-07-22 18:02:18 +01:00
ctf-open.c libctf: sort out potential refcount loops 2020-07-22 18:02:18 +01:00
ctf-qsort_r.c Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
ctf-string.c Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
ctf-subr.c libctf: drop error-prone ctf_strerror 2020-07-22 18:02:18 +01:00
ctf-types.c libctf, types: enhance ctf_type_aname to print function arg types 2020-07-22 18:02:17 +01:00
ctf-util.c libctf, next, hash: add dynhash and dynset _next iteration 2020-07-22 17:57:51 +01:00
elf.h Update year range in copyright notice of binutils files 2020-01-01 18:42:54 +10:30
libctf.ver libctf, link: add lazy linking: clean up input members: err/warn cleanup 2020-07-22 18:02:18 +01:00
Makefile.am libctf, link: add lazy linking: clean up input members: err/warn cleanup 2020-07-22 18:02:18 +01:00
Makefile.in libctf, link: add lazy linking: clean up input members: err/warn cleanup 2020-07-22 18:02:18 +01:00
mkerrors.sed libctf: restructure error handling to reduce relocations 2020-07-22 17:57:20 +01:00
swap.h libctf, elfcpp, gold: do not assume that <byteswap.h> contains bswap_* 2020-06-26 15:56:39 +01:00