ctf: ctf_reader::read_corpus now sets a status
Commit Message
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.
Salud!
Signed-off-by: Jose E. Marchesi <jose.marchesi@oracle.com>
* 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.
---
include/abg-ctf-reader.h | 4 +++-
src/abg-ctf-reader.cc | 19 +++++++++++++++----
tools/abidiff.cc | 4 ++--
tools/abilint.cc | 2 +-
4 files changed, 21 insertions(+), 8 deletions(-)
Comments
Hello,
[...]
"Jose E. Marchesi via Libabigail" <libabigail@sourceware.org> a écrit:
> diff --git a/src/abg-ctf-reader.cc b/src/abg-ctf-reader.cc
> index 27eddc2e..9cfa6cb7 100644
> --- a/src/abg-ctf-reader.cc
> +++ b/src/abg-ctf-reader.cc
> @@ -1073,19 +1073,28 @@ create_read_context(std::string elf_path, ir::environment *env)
> /// @return a shared pointer to the read corpus.
>
> corpus_sptr
> -read_corpus(read_context *ctxt)
> +read_corpus(read_context *ctxt, elf_reader::status &status)
> {
I have just added a comment to this function.
[...]
>
> * 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>
Applied to master.
Thanks!
Cheers,
@@ -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
@@ -1073,19 +1073,28 @@ create_read_context(std::string elf_path, ir::environment *env)
/// @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 +1103,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. */
@@ -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
@@ -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