libabigail
Namespaces | Macros | Functions
abg-tools-utils.cc File Reference
#include "config.h"
#include <sys/types.h>
#include <fts.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <dirent.h>
#include <time.h>
#include <ctype.h>
#include <errno.h>
#include <libgen.h>
#include <libxml/parser.h>
#include <libxml/xmlversion.h>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <iostream>
#include <iterator>
#include <memory>
#include <sstream>
#include "abg-dwarf-reader.h"
#include "abg-internal.h"
#include "abg-regex.h"
#include <abg-ir.h>
#include "abg-config.h"
#include "abg-tools-utils.h"
Include dependency graph for abg-tools-utils.cc:

Go to the source code of this file.

Namespaces

 abigail
 Toplevel namespace for libabigail.
 
 abigail::tools_utils
 Namespace for a set of utility function used by tools based on libabigail.
 

Macros

#define DECLARE_STAT(st)
 
#define TMP_BUF_LEN
 

Functions

bool abidiff_status_has_abi_change (abidiff_status s)
 Test if an instance of. More...
 
bool abidiff_status_has_error (abidiff_status s)
 Test if an instance of. More...
 
bool abidiff_status_has_incompatible_abi_change (abidiff_status s)
 Test if an instance of. More...
 
void add_binaries_into_corpus_group (const fe_iface_sptr &reader, const vector< string > &binaries, const vector< string > &deps_dirs, corpus_group &group)
 For each binary of a vector of binaries, if the binary is present in at least one of the directories listed in a given vector, construct a corpus and add it to a corpus group. More...
 
void add_dependencies_into_corpus_group (const fe_iface_sptr &reader, const corpus &korpus, const vector< string > &deps_dirs, corpus_group &group)
 For each dependency of a given corpus, if it is present in at least one of the directories listed in a given vector, construct a corpus and add it to a corpus group. More...
 
bool base_name (string const &path, string &file_name)
 Return the file name part of a file part. More...
 
corpus_group_sptr build_corpus_group_from_kernel_dist_under (const string &root, const string debug_info_root, const string &vmlinux_path, vector< string > &suppr_paths, vector< string > &kabi_wl_paths, suppressions_type &supprs, bool verbose, environment &env, corpus::origin requested_fe_kind)
 Walk a given directory and build an instance of corpus_group from the vmlinux kernel binary and the linux kernel modules found under that directory and under its sub-directories, recursively. More...
 
bool check_dir (const string &path, ostream &out, const string &prog_name)
 Check if a given path exists, is readable and is a directory. More...
 
bool check_file (const string &path, ostream &out, const string &prog_name)
 Check if a given path exists and is readable. More...
 
bool compare_functions (vector< function_decl * >::const_iterator base, unsigned f1_index, unsigned f2_index)
 Compare two functions that are in a vector of functions. More...
 
void convert_char_stars_to_char_star_stars (const vector< char * > &char_stars, vector< char ** > &char_star_stars)
 Convert a vector<char*> into a vector<char**>. More...
 
elf_based_reader_sptr create_best_elf_based_reader (const string &elf_file_path, const vector< char ** > &debug_info_root_paths, environment &env, corpus::origin requested_fe_kind, bool show_all_types, bool linux_kernel_mode)
 Create the best elf based reader (or front-end), given an ELF file. More...
 
bool decl_names_equal (const string &l, const string &r)
 Compare two fully qualified decl names by taking into account that they might have compontents that are anonymous types/namespace names. More...
 
bool dir_contains_ctf_archive (const string &directory, const string &archive_prefix)
 Test if a directory contains a CTF archive. More...
 
bool dir_exists (const string &path)
 Test that a given directory exists. More...
 
bool dir_is_empty (const string &path)
 Test if a given directory exists and is empty. More...
 
bool dir_name (string const &path, string &dir_name, bool keep_separator_at_end)
 Return the directory part of a file path. More...
 
void dump_function_names (std::vector< function_decl * >::const_iterator a_begin, std::vector< function_decl * >::const_iterator a_end, std::vector< function_decl * >::const_iterator b_begin, std::vector< function_decl * >::const_iterator b_end)
 Dump (to the standard error output stream) a pretty representation of the signatures of two sequences of functions. More...
 
void dump_functions_as_string (std::vector< function_decl * >::const_iterator a_begin, std::vector< function_decl * >::const_iterator a_end, std::vector< function_decl * >::const_iterator b_begin, std::vector< function_decl * >::const_iterator b_end)
 Dump (to the standard error stream) two sequences of strings where each string represent one of the functions in the two sequences of functions given in argument to this function. More...
 
ostream & emit_prefix (const string &prog_name, ostream &out)
 Emit a prefix made of the name of the program which is emitting a message to an output stream. More...
 
bool ensure_dir_path_created (const string &dir_path)
 Ensures #dir_path is a directory and is created. If #dir_path is not created, this function creates it. More...
 
bool ensure_parent_dir_created (const string &path)
 Ensures that the parent directory of #path is created. More...
 
bool execute_command_and_get_output (const string &cmd, vector< string > &lines)
 Execute a shell command and returns its output. More...
 
bool file_exists (const string &path)
 Tests whether a path exists;. More...
 
bool file_has_btf_debug_info (const string &elf_file_path, const vector< char ** > &debug_info_root_paths)
 Test if an ELF file has BTFG debug info. More...
 
bool file_has_ctf_debug_info (const string &elf_file_path, const vector< char ** > &debug_info_root_paths)
 Test if an ELF file has CTF debug info. More...
 
bool file_has_dwarf_debug_info (const string &elf_file_path, const vector< char ** > &debug_info_root_paths)
 Test if an ELF file has DWARF debug info. More...
 
bool file_is_kernel_debuginfo_package (const string &file_name, file_type file_type)
 Tests if a given file name designates a kernel debuginfo package. More...
 
bool file_is_kernel_package (const string &file_path, file_type file_type)
 Tests if a given file name designates a kernel package. More...
 
bool find_file_under_dir (const string &root_dir, const string &file_path_to_look_for, string &result)
 Find a given file under a root directory and return its absolute path. More...
 
bool find_file_under_dirs (const vector< string > &root_dirs, const string &file_path_to_look_for, string &result)
 Find a given file possibly under a set of directories and return its absolute path. More...
 
type_suppression_sptr gen_suppr_spec_from_headers (const string &headers_root_dir)
 Generate a type suppression specification that suppresses ABI changes for types defined in source files that are not in a given header root dir. More...
 
type_suppression_sptr gen_suppr_spec_from_headers (const string &headers_root_dir, const vector< string > &header_files)
 Generate a type suppression specification that suppresses ABI changes for types defined in source files that are neither in a given header root dir, not in a set of header files. More...
 
type_suppression_sptr gen_suppr_spec_from_headers (const vector< string > &headers_root_dirs, const vector< string > &header_files)
 Generate a type suppression specification that suppresses ABI changes for types defined in source files that are neither in a given set of header root directories nor in a set of header files. More...
 
suppressions_type gen_suppr_spec_from_kernel_abi_whitelists (const std::vector< std::string > &abi_whitelist_paths)
 Generate a suppression specification from kernel abi whitelist files. More...
 
string get_abixml_version_string ()
 Return the version string for the ABIXML format. More...
 
const char * get_anonymous_enum_internal_name_prefix ()
 Getter of the prefix for the name of anonymous enums. More...
 
const char * get_anonymous_struct_internal_name_prefix ()
 Getter of the prefix for the name of anonymous structs. More...
 
const char * get_anonymous_subrange_internal_name_prefix ()
 Getter of the prefix for the name of anonymous range. More...
 
const char * get_anonymous_union_internal_name_prefix ()
 Getter of the prefix for the name of anonymous unions. More...
 
bool get_binary_paths_from_kernel_dist (const string &dist_root, const string &debug_info_root_path, string &vmlinux_path, vector< string > &module_paths)
 Get the paths of the vmlinux and kernel module binaries under given directory. More...
 
bool get_binary_paths_from_kernel_dist (const string &dist_root, string &vmlinux_path, vector< string > &module_paths)
 Get the paths of the vmlinux and kernel module binaries under given directory. More...
 
void get_comma_separated_args_of_option (const string &input_str, const string &option, vector< string > &arguments)
 Get a vector of arguments from a string containing a comma-separated list of those arguments. More...
 
bool get_deb_name (const string &str, string &name)
 Get the package name of a .deb package. More...
 
string get_default_system_suppression_file_path ()
 Get the path to the default system suppression file. More...
 
string get_default_user_suppression_file_path ()
 Get the path to the default user suppression file. More...
 
bool get_dependencies (const corpus &korpus, const vector< string > &deps_dirs, set< string > &dependencies)
 Get the dependencies of an ABI corpus, which are found in a set of directories. Note that the dependencies are listed as properties of the ABI corpus. More...
 
bool get_dsos_provided_by_rpm (const string &rpm_path, set< string > &provided_dsos)
 Get the SONAMEs of the DSOs advertised as being "provided" by a given RPM. That set can be considered as being the set of "public" DSOs of the RPM. More...
 
string get_library_version_string ()
 Return the version string of the library. More...
 
size_t get_random_number ()
 Get a pseudo random number. More...
 
string get_random_number_as_string ()
 Get a pseudo random number as string. More...
 
bool get_rpm_arch (const string &str, string &arch)
 Get the architecture string from the NVR of an rpm. More...
 
bool get_rpm_name (const string &str, string &name)
 Get the package name of an rpm package. More...
 
const char * get_system_libdir ()
 Get the value of $libdir variable of the autotools build system. This is where shared libraries are usually installed. More...
 
bool get_vmlinux_path_from_kernel_dist (const string &from, string &vmlinux_path)
 Get the path of the vmlinux binary under the given directory, that must have been generated either from extracting a package. More...
 
file_type guess_file_type (const string &file_path)
 Guess the type of the content of an file. More...
 
file_type guess_file_type (istream &in)
 Guess the type of the content of an input stream. More...
 
void initialize ()
 This function needs to be called before any libabigail function. More...
 
bool is_dir (const string &path)
 Tests if a given path is a directory or a symbolic link to a directory. More...
 
bool is_regular_file (const string &path)
 Test if path is a path to a regular file or a symbolic link to a regular file. More...
 
void load_default_system_suppressions (suppr::suppressions_type &supprs)
 Load the default system suppression specification file and populate a vector of suppression_sptr with its content. More...
 
void load_default_user_suppressions (suppr::suppressions_type &supprs)
 Load the default user suppression specification file and populate a vector of suppression_sptr with its content. More...
 
std::shared_ptr< char > make_path_absolute (const char *p)
 Return a copy of the path given in argument, turning it into an absolute path by prefixing it with the concatenation of the result of get_current_dir_name() and the '/' character. More...
 
char * make_path_absolute_to_be_freed (const char *p)
 Return a copy of the path given in argument, turning it into an absolute path by prefixing it with the concatenation of the result of get_current_dir_name() and the '/' character. More...
 
bool maybe_get_symlink_target_file_path (const string &file_path, string &target_path)
 If a given file is a symbolic link, get the canonicalized absolute path to the target file. More...
 
abidiff_status operator& (abidiff_status l, abidiff_status r)
 The bitwise 'AND' operator for abidiff_status bit masks. More...
 
ostream & operator<< (ostream &o, const timer &t)
 Streaming operator for the timer type. More...
 
ostream & operator<< (ostream &output, file_type r)
 
abidiff_status operator| (abidiff_status l, abidiff_status r)
 The bitwise 'OR' operator for abidiff_status bit masks. More...
 
abidiff_status & operator|= (abidiff_status &l, abidiff_status r)
 The |= operator. More...
 
void real_path (const string &path, string &result)
 Return the real path of a given path. More...
 
bool rpm_contains_file (const string &rpm_path, const string &file_name)
 Test if an RPM package contains a given file. More...
 
bool sorted_strings_common_prefix (vector< string > &input_strings, string &prefix)
 Find the prefix common to a *SORTED* vector of strings. More...
 
bool split_string (const string &input_string, const string &delims, vector< string > &result)
 Split a given string into substrings, given some delimiters. More...
 
corpus_group_sptr stick_corpus_and_binaries_into_corpus_group (const fe_iface_sptr &reader, const corpus_sptr &korpus, const vector< string > &binaries, const vector< string > &bins_dirs)
 Create a corpus group made of a given korpus and a set of binaries found in a set of directories. More...
 
corpus_group_sptr stick_corpus_and_dependencies_into_corpus_group (const fe_iface_sptr &reader, const corpus_sptr &korpus, const vector< string > &deps_dirs)
 Create a corpus group made of a given korpus and the subset of its dependencies that can be found found in a set of directories. More...
 
bool string_begins_with (const string &str, const string &prefix)
 Test if a given string begins with a particular prefix. More...
 
bool string_ends_with (const string &str, const string &suffix)
 Test if a given string ends with a particular suffix. More...
 
bool string_is_ascii (const string &str)
 Test if a string is made of ascii characters. More...
 
bool string_is_ascii_identifier (const string &str)
 Test if a string is made of ascii characters which are identifiers acceptable in C or C++ programs. More...
 
bool string_suffix (const string &input_string, const string &prefix, string &suffix)
 Get the suffix of a string, given a prefix to consider. More...
 
string trim_leading_string (const string &from, const string &to_trim)
 Remove a string of pattern in front of a given string. More...
 
string trim_white_space (const string &str)
 Remove spaces at the beginning and at the end of a given string. More...