]> sourceware.org Git - libabigail.git/commitdiff
kmidiff: Add CTF support to comparing Kernel trees
authorGuillermo E. Martinez via Libabigail <libabigail@sourceware.org>
Mon, 4 Jul 2022 15:44:35 +0000 (10:44 -0500)
committerDodji Seketeli <dodji@redhat.com>
Fri, 8 Jul 2022 08:20:34 +0000 (10:20 +0200)
This patch adds a new --ctf option to kmidiff to make it support CTF
type information when analysing Linux Kernel trees.

* doc/manuals/kmidiff.rst: Add documentation for the new --ctf option.
* tools/kmidiff.cc (options::use_ctf): Define new data member.
(display_usage): Add a help string for the --ctf option.
(main): Adjust call to pass
build_corpus_group_from_kernel_dist_under with origin being
corpus::CTF_ORIGIN when the user provides the --ctf option.

Signed-off-by: Guillermo E. Martinez <guillermo.e.martinez@oracle.com>
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
doc/manuals/kmidiff.rst
tools/kmidiff.cc

index 011dbafd41fac9ea26a1997a49557602cf2fe28a..ce8168aef9189177313d4323a187eec2caf49027 100644 (file)
@@ -165,6 +165,10 @@ Options
     the :ref:`default suppression specification files
     <abidiff_default_supprs_label>` are loaded .
 
+  * ``--ctf``
+
+    Extract ABI information from CTF debug information, if present in
+    the Kernel and Modules.
 
   * ``--impacted-interfaces | -i``
 
index d89026f9267139e2f485b1ad1add58ce33cfc230..8fd3fed96af2fb13be2a2e1b9e3c23d41b05f876 100644 (file)
@@ -9,6 +9,7 @@
 ///
 /// The source code of the Kernel Module Interface Diff tool.
 
+#include "config.h"
 #include <sys/types.h>
 #include <dirent.h>
 #include <cstring>
@@ -59,6 +60,9 @@ struct options
   bool                 show_hexadecimal_values;
   bool                 show_offsets_sizes_in_bits;
   bool                 show_impacted_interfaces;
+#ifdef WITH_CTF
+  bool                 use_ctf;
+#endif
   string               wrong_option;
   string               kernel_dist_root1;
   string               kernel_dist_root2;
@@ -80,6 +84,10 @@ struct options
       show_hexadecimal_values(true),
       show_offsets_sizes_in_bits(false),
       show_impacted_interfaces(false)
+#ifdef WITH_CTF
+      ,
+      use_ctf(false)
+#endif
   {}
 }; // end struct options.
 
@@ -106,6 +114,9 @@ display_usage(const string& prog_name, ostream& out)
     << " --suppressions|--suppr <path>  specify a suppression file\n"
     << " --kmi-whitelist|-w <path>  path to a kernel module interface "
     "whitelist\n"
+#ifdef WITH_CTF
+    << " --ctf use CTF instead of DWARF in ELF files\n"
+#endif
     << " --impacted-interfaces|-i  show interfaces impacted by ABI changes\n"
     << " --full-impact|-f  show the full impact of changes on top-most "
         "interfaces\n"
@@ -241,6 +252,10 @@ parse_command_line(int argc, char* argv[], options& opts)
          opts.suppression_paths.push_back(argv[j]);
          ++i;
        }
+#ifdef WITH_CTF
+      else if (!strcmp(argv[i], "--ctf"))
+       opts.use_ctf = true;
+#endif
       else if (!strcmp(argv[i], "--impacted-interfaces")
               || !strcmp(argv[i], "-i"))
        opts.show_impacted_interfaces = true;
@@ -395,6 +410,12 @@ main(int argc, char* argv[])
 
   corpus_group_sptr group1, group2;
   string debug_info_root_dir;
+  corpus::origin origin =
+#ifdef WITH_CTF
+   opts.use_ctf ? corpus::CTF_ORIGIN :
+#endif
+   corpus::DWARF_ORIGIN;
+
   if (!opts.kernel_dist_root1.empty())
     {
       file_type ftype = guess_file_type(opts.kernel_dist_root1);
@@ -412,7 +433,7 @@ main(int argc, char* argv[])
                                                      opts.kabi_whitelist_paths,
                                                      opts.read_time_supprs,
                                                      opts.verbose,
-                                                     env);
+                                                     env, origin);
          print_kernel_dist_binary_paths_under(opts.kernel_dist_root1, opts);
        }
       else if (ftype == FILE_TYPE_XML_CORPUS_GROUP)
@@ -438,7 +459,7 @@ main(int argc, char* argv[])
                                                      opts.kabi_whitelist_paths,
                                                      opts.read_time_supprs,
                                                      opts.verbose,
-                                                     env);
+                                                     env, origin);
          print_kernel_dist_binary_paths_under(opts.kernel_dist_root2, opts);
        }
       else if (ftype == FILE_TYPE_XML_CORPUS_GROUP)
This page took 0.036446 seconds and 5 git commands to generate.