]> sourceware.org Git - libabigail.git/commitdiff
abidiff: add a --debug-tc option
authorDodji Seketeli <dodji@redhat.com>
Fri, 7 Oct 2022 20:50:14 +0000 (22:50 +0200)
committerDodji Seketeli <dodji@redhat.com>
Fri, 7 Oct 2022 20:50:14 +0000 (22:50 +0200)
Like what was done for abidw, this patch adds a --debug-tc option to
abidiff to debug type canonicalization issues.

With this option, just like for abidw, during type canonicalization,
each type comparison is done twice: once using structural comparison
and once using canonical comparison.  Both comparisons should yield
the same result otherwise, an abort signal is emitted, asking for
in-depth debugging to understand reason of the difference.

This option is enabled by the configure option
--enable-debug-type-canonicalization.

It proved useful in debugging some comparison errors I was looking at
recently.

* doc/manuals/abidiff.rst: Add documentation for the new
--debug-tc option.  Fix the existing documentation for
--debug-self-comparison.
* tools/abidiff.cc (options::do_debug_self_comparison): Renamed
options::do_debug into this.
(options::do_debug_type_canonicalization): Add new data member.
(display_usage): Fix help string for the --debug option that is
now --debug-self-comparison.  Also, add a help string for the new
option --debug-tc option.
(main): Adjust use options::do_debug into
options::do_debug_self_comparison.  Call
environment::debug_type_canonicalization() if the user provided
the --debug-tc option.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
doc/manuals/abidiff.rst
tools/abidiff.cc

index 0c711d9e85b45e4260097791023cab62c491d96c..c728b3739cb3a87e9a432893590d5a9324286345 100644 (file)
@@ -65,14 +65,37 @@ Options
 
     Display a short help about the command and exit.
 
-  * ``--debug``
+  * ``--debug-self-comparison``
 
-    In this mode, error messages are emitted for types which fail type canonicalization.
+    In this mode, error messages are emitted for types which fail type
+    canonicalization, in some circumstances, when comparing a binary
+    against itself.
 
-    This is an optional ebugging and sanity check option.  To enable
+    When comparing a binary against itself, canonical types of the
+    second binary should be equal (as much as possible) to canonical
+    types of the first binary.  When some discrepancies are detected
+    in this mode, an abort signal is emitted and execution is halted.
+    This option should be used while executing the tool in a debugger,
+    for troubleshooting purposes.
+
+    This is an optional debugging and sanity check option.  To enable
     it the libabigail package needs to be configured with
-    the --enable-debug-self-comparison option.
+    the --enable-debug-self-comparison configure option.
+
+  * ``--debug-tc``
 
+    In this mode, the process of type canonicalization is put under
+    heavy scrutiny.  Basically, during type canonicalization, each
+    type comparison is performed twice: once in a structural mode
+    (comparing every sub-type member-wise), and once using canonical
+    comparison.  The two comparisons should yield the same result.
+    Otherwise, an abort signal is emitted and the process can be
+    debugged to understand why the two kinds of comparison yield
+    different results.
+
+    This is an optional debugging and sanity check option.  To enable
+    it the libabigail package needs to be configured with
+    the --enable-debug-type-canonicalization configure option.
 
   * ``--version | -v``
 
index e0bb35ac46062c927a77544277916713ea33e6ff..9b2ab7844460fc533e1bac35f6ce322e64ab2554 100644 (file)
@@ -109,7 +109,10 @@ struct options
   bool                 show_stats;
   bool                 do_log;
 #ifdef WITH_DEBUG_SELF_COMPARISON
-  bool                 do_debug;
+  bool                 do_debug_self_comparison;
+#endif
+#ifdef WITH_DEBUG_TYPE_CANONICALIZATION
+  bool                 do_debug_type_canonicalization;
 #endif
 #ifdef WITH_CTF
   bool                 use_ctf;
@@ -162,7 +165,11 @@ struct options
 #endif
 #ifdef WITH_DEBUG_SELF_COMPARISON
     ,
-    do_debug()
+      do_debug_self_comparison()
+#endif
+#ifdef WITH_DEBUG_TYPE_CANONICALIZATION
+    ,
+      do_debug_type_canonicalization()
 #endif
   {}
 
@@ -256,7 +263,11 @@ display_usage(const string& prog_name, ostream& out)
     << " --ctf use CTF instead of DWARF in ELF files\n"
 #endif
 #ifdef WITH_DEBUG_SELF_COMPARISON
-    << " --debug debug the process of comparing an ABI corpus against itself"
+    << " --debug-self-comparison debug the process of comparing "
+    "an ABI corpus against itself"
+#endif
+#ifdef WITH_DEBUG_TYPE_CANONICALIZATION
+    << " --debug-tc debug the type canonicalization process"
 #endif
     << " --verbose show verbose messages about internal stuff\n";
 }
@@ -612,8 +623,12 @@ parse_command_line(int argc, char* argv[], options& opts)
         opts.use_ctf = true;
 #endif
 #ifdef WITH_DEBUG_SELF_COMPARISON
-      else if (!strcmp(argv[i], "--debug"))
-       opts.do_debug = true;
+      else if (!strcmp(argv[i], "--debug-self-comparison"))
+       opts.do_debug_self_comparison = true;
+#endif
+#ifdef WITH_DEBUG_TYPE_CANONICALIZATION
+      else if (!strcmp(argv[i], "--debug-tc"))
+       opts.do_debug_type_canonicalization = true;
 #endif
       else
        {
@@ -1143,8 +1158,12 @@ main(int argc, char* argv[])
        env->analyze_exported_interfaces_only(*opts.exported_interfaces_only);
 
 #ifdef WITH_DEBUG_SELF_COMPARISON
-           if (opts.do_debug)
+           if (opts.do_debug_self_comparison)
              env->self_comparison_debug_is_on(true);
+#endif
+#ifdef WITH_DEBUG_TYPE_CANONICALIZATION
+           if (opts.do_debug_type_canonicalization)
+             env->debug_type_canonicalization_is_on(true);
 #endif
       translation_unit_sptr t1, t2;
       abigail::elf_reader::status c1_status =
This page took 0.078829 seconds and 5 git commands to generate.