ctf: ctf_reader::read_corpus now sets a status

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>
This commit is contained in:
Jose E. Marchesi via Libabigail 2021-11-16 18:43:07 +01:00 committed by Dodji Seketeli
parent eea4e92b2d
commit 8324a223df
4 changed files with 24 additions and 8 deletions

View 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

View 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. */

View 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

View 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