From 8d2229ad1e779fbdecfe1d68c02706d075eb81c6 Mon Sep 17 00:00:00 2001 From: Nick Alcock Date: Thu, 4 Jun 2020 19:28:52 +0100 Subject: 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) : 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) Rename to... : ... this. : Drop. : Likewise (migrated to ctf_link_flags). : Rename to... : ... this. : Rename to... : ... this. : 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. --- libctf/ChangeLog | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'libctf/ChangeLog') diff --git a/libctf/ChangeLog b/libctf/ChangeLog index d54af35..c3451ee 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,5 +1,50 @@ 2020-07-22 Nick Alcock + * 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) : 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) Rename to... + : ... this. + : Drop. + : Likewise (migrated to ctf_link_flags). + : Rename to... + : ... this. + : Rename to... + : ... this. + : 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 Nick Alcock + * ctf-impl.h (ctf_strerror): Delete. * ctf-subr.c (ctf_strerror): Likewise. * ctf-error.c (ctf_errmsg): Stop using ctf_strerror: just use -- cgit v1.1