libabigail
abg-fe-iface.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
2 // -*- Mode: C++ -*-
3 //
4 // Copyright (C) 2022-2023 Red Hat, Inc.
5 //
6 // Author: Dodji Seketeli
7 
8 /// @file
9 ///
10 /// This file contains the declarations for the @ref fe_iface a.k.a
11 /// "Front End Interface".
12 
13 #ifndef __ABG_FE_IFACE_H__
14 #define __ABG_FE_IFACE_H__
15 
16 #include "abg-ir.h"
17 #include "abg-suppression.h"
18 
19 namespace abigail
20 {
21 
22 /// The base class of all libabigail front-ends: The Front End Interface.
23 ///
24 /// A front end reads a given type of binary format and constructs a
25 /// libagbigail internal representation from it.
26 ///
27 /// The middle-end then manipulates that IR.
28 class fe_iface
29 {
30 protected:
31  struct priv;
32  priv* priv_;
33 
34  public:
35 
36  /// The status of the @ref fe_iface::read_corpus call.
37  enum status
38  {
39  /// The status is in an unknown state
41 
42  /// This status is for when the call went OK.
43  STATUS_OK = 1,
44 
45  /// This status is for when the debug info could not be read.
47 
48  /// This status is for when the alternate debug info could not be
49  /// found.
51 
52  /// This status is for when the symbols of the ELF binaries could
53  /// not be read.
55  };
56 
57  /// The generic options that control the behaviour of all Front-End
58  /// interfaces.
59  struct options_type
60  {
61  environment& env;
62  bool load_in_linux_kernel_mode = false;
63  bool load_all_types = false;
64  bool drop_undefined_syms = false;
65  bool show_stats = false;
66  bool do_log = false;
67  bool leverage_dwarf_factorization = true;
68  bool assume_odr_for_cplusplus = true;
70 
71  };// font_end_iface::options_type
72 
73  fe_iface(const std::string& corpus_path, environment& e);
74 
75  virtual ~fe_iface();
76 
77  virtual void
78  initialize(const std::string& corpus_path);
79 
80  const options_type&
81  options() const;
82 
84  options();
85 
86  const std::string&
87  corpus_path() const;
88 
89  void
90  corpus_path(const std::string&);
91 
92  const string&
93  dt_soname() const;
94 
95  void
96  dt_soname(const string&);
97 
98  bool
100 
102  suppressions();
103 
105  suppressions() const;
106 
107  void
109 
110  void
112 
113  corpus_sptr
114  corpus();
115 
116  const corpus_sptr
117  corpus() const;
118 
119  corpus_group_sptr&
120  corpus_group();
121 
122  const corpus_group_sptr&
123  corpus_group() const;
124 
125  void
126  corpus_group(const ir::corpus_group_sptr& cg);
127 
128  bool
129  has_corpus_group() const;
130 
131  corpus_sptr
133 
134  bool
136 
137  corpus_sptr
139 
140  void
142 
143  void
145 
146  virtual ir::corpus_sptr
147  read_corpus(status& status) = 0;
148 }; //end class fe_iface
149 
150 typedef shared_ptr<fe_iface> fe_iface_sptr;
151 
152 std::string
154 
157 
160 
163 
166 
167 }// end namespace abigail
168 #endif // __ABG_FE_IFAC_H__
suppr::suppressions_type & suppressions()
Getter of the vector of suppression specifications associated with the current front-end.
The base class of all libabigail front-ends: The Front End Interface.
Definition: abg-fe-iface.h:28
fe_iface::status & operator|=(fe_iface::status &l, fe_iface::status r)
The bitwise |= operator for the fe_iface::status type.
const options_type & options() const
Getter of the the options of the current Front End Interface.
Definition: abg-fe-iface.cc:92
options_type(environment &)
Constructor of the type fe_iface::options_type.
Definition: abg-fe-iface.cc:57
void maybe_add_fn_to_exported_decls(const function_decl *fn)
Try and add the representation of the ABI of a function to the set of exported declarations of the cu...
The generic options that control the behaviour of all Front-End interfaces.
Definition: abg-fe-iface.h:59
bool current_corpus_is_main_corpus_from_current_group()
Test if the current corpus being built is the main corpus of the current corpus group.
status
The status of the fe_iface::read_corpus call.
Definition: abg-fe-iface.h:37
fe_iface::status & operator&=(fe_iface::status &l, fe_iface::status r)
The bitwise &= operator for the fe_iface::status type.
Abstracts a variable declaration.
Definition: abg-ir.h:2943
bool has_corpus_group() const
Test if there is a corpus group being built.
This status is for when the debug info could not be read.
Definition: abg-fe-iface.h:46
corpus_group_sptr & corpus_group()
Getter for the ABI corpus group being built by the current front-end.
Toplevel namespace for libabigail.
std::string status_to_diagnostic_string(fe_iface::status s)
Return a diagnostic status with english sentences to describe the problems encoded in a given abigail...
Abstraction for a function declaration.
Definition: abg-ir.h:3046
Types of the main internal representation of libabigail.
This is an abstraction of the set of resources necessary to manage several aspects of the internal re...
Definition: abg-ir.h:139
corpus_sptr main_corpus_from_current_group()
Return the main corpus from the current corpus group, if any.
corpus_sptr corpus()
Getter for the ABI corpus being built by the current front-end.
fe_iface(const std::string &corpus_path, environment &e)
Constructor of the type fe_iface.
Definition: abg-fe-iface.cc:68
vector< suppression_sptr > suppressions_type
Convenience typedef for a vector of suppression_sptr.
Definition: abg-fwd.h:1603
This status is for when the symbols of the ELF binaries could not be read.
Definition: abg-fe-iface.h:54
fe_iface::status operator|(fe_iface::status l, fe_iface::status r)
The bitwise OR operator for the fe_iface::status type.
const std::string & corpus_path() const
Getter of the path to the file which an ABI corpus is to be created for.
fe_iface::status operator&(fe_iface::status l, fe_iface::status r)
The bitwise AND operator for the fe_iface::status type.
const string & dt_soname() const
Getter for the SONAME of the analyzed binary.
bool load_in_linux_kernel_mode() const
Test if the input binary is to be considered as a Linux Kernel binary.
void maybe_add_var_to_exported_decls(const var_decl *var)
Try and add the representation of the ABI of a variable to the set of exported declarations of the cu...
The status is in an unknown state.
Definition: abg-fe-iface.h:40
corpus_sptr should_reuse_type_from_corpus_group()
Return true if the current corpus is part of a corpus group being built and if it's not the main corp...
virtual ~fe_iface()
Desctructor of the Front End Interface.
Definition: abg-fe-iface.cc:74
virtual void initialize(const std::string &corpus_path)
Re-initialize the current Front End.
Definition: abg-fe-iface.cc:82
void add_suppressions(const suppr::suppressions_type &)
Add suppressions specifications to the set of suppressions to be used during the construction of the ...
This status is for when the alternate debug info could not be found.
Definition: abg-fe-iface.h:50
This status is for when the call went OK.
Definition: abg-fe-iface.h:43