]> sourceware.org Git - libabigail.git/commitdiff
ctf: ctf_reader::read_corpus now sets a status
authorJose E. Marchesi via Libabigail <libabigail@sourceware.org>
Tue, 16 Nov 2021 17:43:07 +0000 (18:43 +0100)
committerDodji Seketeli <dodji@redhat.com>
Wed, 17 Nov 2021 16:55:53 +0000 (17:55 +0100)
This patch makes ctf_reader::read_corpus to get a reference to a
`status' variable as an argument, and set it to reflect the result of
the read operation.  The utilities calling to ctf_reader::read_corpus
are updated accordingly.

* include/abg-ctf-reader.h: Include abg-elf-reader-common.h.
read_corpus now gets an extra argument `status'.
* src/abg-ctf-reader.cc (read_corpus): Likewise, and set `status'
accordingly when the debug info is not found.
* tools/abilint.cc (main): Pass a status argument to
ctf_reader::read_corpus.
* tools/abidiff.cc (main): Likewise.

Signed-off-by: Jose E. Marchesi <jose.marchesi@oracle.com>
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
include/abg-ctf-reader.h
src/abg-ctf-reader.cc
tools/abidiff.cc
tools/abilint.cc

index 07eccec6e801767ccc6441d5937d79fe100a769f..c0d8bb2b08f44591fd76ae5701d868a9d714dcf5 100644 (file)
@@ -17,6 +17,7 @@
 #include <ostream>
 #include "abg-corpus.h"
 #include "abg-suppression.h"
+#include "abg-elf-reader-common.h"
 
 namespace abigail
 {
@@ -26,7 +27,8 @@ namespace ctf_reader
 class read_context;
 read_context *create_read_context (std::string elf_path,
                                    ir::environment *env);
-corpus_sptr read_corpus (read_context *ctxt);
+corpus_sptr read_corpus (read_context *ctxt,
+                         elf_reader::status& status);
 
 } // end namespace ctf_reader
 } // end namespace abigail
index 27eddc2efdcb33d5f9976ec5fb7fc2f73fee87bc..0370c8aa959ce05c2a01700a42006759efd53cb6 100644 (file)
@@ -1070,22 +1070,34 @@ create_read_context(std::string elf_path, ir::environment *env)
 /// Store the corpus in the same read context.
 ///
 /// @param ctxt the read context to use.
+///
+/// @param status the resulting status of the corpus read.
+///
 /// @return a shared pointer to the read corpus.
 
 corpus_sptr
-read_corpus(read_context *ctxt)
+read_corpus(read_context *ctxt, elf_reader::status &status)
 {
   corpus_sptr corp
     = std::make_shared<corpus>(ctxt->ir_env, ctxt->filename);
 
+  /* Be optimist.  */
+  status = elf_reader::STATUS_OK;
+
   /* Open the ELF file.  */
   if (!open_elf_handler(ctxt))
-    return corp;
+    {
+      status = elf_reader::STATUS_DEBUG_INFO_NOT_FOUND;
+      return corp;
+    }
 
   /* Set some properties of the corpus first.  */
   corp->set_origin(corpus::CTF_ORIGIN);
   if (!slurp_elf_info(ctxt, corp))
-    return corp;
+    {
+      status = elf_reader::STATUS_NO_SYMBOLS_FOUND;
+      return corp;
+    }
 
   /* Build the ctfa from the contents of the relevant ELF sections,
      and process the CTF archive in the read context, if any.
@@ -1094,7 +1106,9 @@ read_corpus(read_context *ctxt)
   int errp;
   ctxt->ctfa = ctf_arc_bufopen(&ctxt->ctf_sect, &ctxt->symtab_sect,
                                &ctxt->strtab_sect, &errp);
-  if (ctxt->ctfa != NULL)
+  if (ctxt->ctfa == NULL)
+    status = elf_reader::STATUS_DEBUG_INFO_NOT_FOUND;
+  else
     process_ctf_archive(ctxt, corp);
 
   /* Cleanup and return.  */
index 157d192fbfbdd18c473769e805e24855be8450bc..f145f4f1cf2d38fd7ae143b5da65c1f6f21e0562 100644 (file)
@@ -1174,7 +1174,7 @@ main(int argc, char* argv[])
                                                               env.get());
 
                 assert (ctxt);
-                c1 = abigail::ctf_reader::read_corpus (ctxt);
+                c1 = abigail::ctf_reader::read_corpus (ctxt, c1_status);
               }
             else
 #endif
@@ -1257,7 +1257,7 @@ main(int argc, char* argv[])
                                                               env.get());
 
                 assert (ctxt);
-                c2 = abigail::ctf_reader::read_corpus (ctxt);
+                c2 = abigail::ctf_reader::read_corpus (ctxt, c2_status);
               }
             else
 #endif
index d8c44f825c3660a30d50f18ff68dce749ee90727..49643b66718a87cc2573647ecc55cb7dba28e647 100644 (file)
@@ -375,7 +375,7 @@ main(int argc, char* argv[])
                                                               env.get());
 
                 assert (ctxt);
-                corp = abigail::ctf_reader::read_corpus (ctxt);
+                corp = abigail::ctf_reader::read_corpus (ctxt, s);
               }
             else
 #endif
This page took 0.037555 seconds and 5 git commands to generate.