From patchwork Sun Apr 12 01:47:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Wielaard X-Patchwork-Id: 39087 From: mark@klomp.org (Mark Wielaard) Date: Sun, 12 Apr 2020 03:47:57 +0200 Subject: [PATCH 2/2] Add --drop-private-types to abidw. In-Reply-To: <20200412014757.30688-1-mark@klomp.org> References: <20200412014757.30688-1-mark@klomp.org> Message-ID: <20200412014757.30688-2-mark@klomp.org> To create smaller abi XML files it is useful to be able to drop the private types from the representation. * tools/abidw.cc (options): Add drop_private_types bool. (display_usage): Add --drop-private-types. (parse_command_line): Parse --drop-private-types, set opts. (set_suppressions): Call set_drops_artifact_from_ir when drop_private_types set. * doc/manuals/abidw.rst: Document --drop-private-types. Signed-off-by: Mark Wielaard --- doc/manuals/abidw.rst | 8 ++++++++ tools/abidw.cc | 13 +++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/doc/manuals/abidw.rst b/doc/manuals/abidw.rst index 8f6c3c39..05a90003 100644 --- a/doc/manuals/abidw.rst +++ b/doc/manuals/abidw.rst @@ -138,6 +138,14 @@ Options that the tool has to consider. The tool will thus filter out types that are not defined in public headers. + * ``--drop-private-types`` + + This option is to be used with the ``--headers-dir`` and/or + ``header-file`` options. With this option, types that are *NOT* + defined in the headers are entirely dropped from the internal + representation build by Libabigail to represent the ABI and will + not end up in the abi XML file. + * ``--no-linux-kernel-mode`` Without this option, if abipkgiff detects that the binaries it is diff --git a/tools/abidw.cc b/tools/abidw.cc index a8b9ad32..8b163ccd 100644 --- a/tools/abidw.cc +++ b/tools/abidw.cc @@ -109,6 +109,7 @@ struct options bool abidiff; bool annotate; bool do_log; + bool drop_private_types; options() : display_version(), @@ -126,7 +127,8 @@ struct options show_locs(true), abidiff(), annotate(), - do_log() + do_log(), + drop_private_types(false) {} ~options() @@ -158,6 +160,7 @@ display_usage(const string& prog_name, ostream& out) << " --no-corpus-path do not take the path to the corpora into account\n" << " --no-show-locs do not show location information\n" << " --short-locs only print filenames rather than paths\n" + << " --drop-private-types drop private types from representation\n" << " --no-comp-dir-path do not show compilation path information\n" << " --check-alternate-debug-info check alternate debug info " "of \n" @@ -294,6 +297,8 @@ parse_command_line(int argc, char* argv[], options& opts) } else if (!strcmp(argv[i], "--load-all-types")) opts.load_all_types = true; + else if (!strcmp(argv[i], "--drop-private-types")) + opts.drop_private_types = true; else if (!strcmp(argv[i], "--no-linux-kernel-mode")) opts.linux_kernel_mode = false; else if (!strcmp(argv[i], "--abidiff")) @@ -403,7 +408,11 @@ set_suppressions(read_context& read_ctxt, options& opts) abigail::tools_utils::gen_suppr_spec_from_headers(opts.headers_dir, opts.header_files); if (suppr) - supprs.push_back(suppr); + { + if (opts.drop_private_types) + suppr->set_drops_artifact_from_ir(true); + supprs.push_back(suppr); + } using abigail::tools_utils::gen_suppr_spec_from_kernel_abi_whitelists; const suppressions_type& wl_suppr =