mirror of
git://sourceware.org/git/libabigail.git
synced 2024-12-24 02:32:16 +00:00
aba99e5106
This option annotates (read "pretty-prints") the types and elf symbols in the form of XML comments in the ABIXML output emitted by the abidw command. Signed-off-by: Ondrej Oprala <ondrej.oprala@gmail.com> * doc/manuals/abidiff.rst: Document the '--no-corpus-path' option. * doc/manuals/abidw.rst: Document the '--no-corpus-path' and '--annotate' options. * include/abg-libxml-utils.h ({un,}escape_xml_comment): Add new function declarations. * include/abg-writer.h: Add new annotate functions (write_{translation_unit,corpus_to_{archive,native_xml_file}}): Add an optional "annotate" parameter defaulting to "false". * src/abg-libxml-utils.cc ({un,}escape_xml_comment): Add new function definitions. * src/abg-writer.cc (annotate): Define new templatized function and specialize it for necessary cases. * tests/Makefile.am: Add runtestannotate as a new test. * tests/data/Makefile.am: Add paths to below reference test outputs. * tests/data/test-annotate/libtest23.so.abi: New reference test output. * tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Likewise. * tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise. * tests/data/test-annotate/test0.abi: Likewise. * tests/data/test-annotate/test1.abi: Likewise. * tests/data/test-annotate/test10-pr18818-gcc.so.abi: Likewise. * tests/data/test-annotate/test11-pr18828.so.abi: Likewise. * tests/data/test-annotate/test12-pr18844.so.abi: Likewise. * tests/data/test-annotate/test13-pr18894.so.abi: Likewise. * tests/data/test-annotate/test14-pr18893.so.abi: Likewise. * tests/data/test-annotate/test15-pr18892.so.abi: Likewise. * tests/data/test-annotate/test16-pr18904.so.abi: Likewise. * tests/data/test-annotate/test17-pr19027.so.abi: Likewise. * tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi: Likewise. * tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi: Likewise. * tests/data/test-annotate/test2.so.abi: Likewise. * tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi: Likewise. * tests/data/test-annotate/test21-pr19092.so.abi: Likewise. * tests/data/test-annotate/test22-pr19097-libstdc++.so.6.0.17.so.abi: Likewise. * tests/data/test-annotate/test3.so.abi: Likewise. * tests/data/test-annotate/test4.so.abi: Likewise. * tests/data/test-annotate/test5.o.abi: Likewise. * tests/data/test-annotate/test6.so.abi: Likewise. * tests/data/test-annotate/test7.so.abi: Likewise. * tests/data/test-annotate/test8-qualified-this-pointer.so.abi: Likewise. * tests/data/test-annotate/test9-pr18818-clang.so.abi: Likewise. * tests/test-annotate.cc: New test for ABIXML annotations. * tools/abidiff.cc: Add the new option '--no-corpus-path'. * tools/abidw.cc: Likewise. Also add the '--annotate' option. reviews round 1 Signed-off-by: Dodji Seketeli <dodji@redhat.com>
119 lines
3.4 KiB
C++
119 lines
3.4 KiB
C++
// -*- mode: C++ -*-
|
|
//
|
|
// Copyright (C) 2013-2015 Red Hat, Inc.
|
|
//
|
|
// This file is part of the GNU Application Binary Interface Generic
|
|
// Analysis and Instrumentation Library (libabigail). This library is
|
|
// free software; you can redistribute it and/or modify it under the
|
|
// terms of the GNU Lesser General Public License as published by the
|
|
// Free Software Foundation; either version 3, or (at your option) any
|
|
// later version.
|
|
|
|
// This library is distributed in the hope that it will be useful, but
|
|
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
// General Lesser Public License for more details.
|
|
|
|
// You should have received a copy of the GNU Lesser General Public
|
|
// License along with this program; see the file COPYING-LGPLV3. If
|
|
// not, see <http://www.gnu.org/licenses/>.
|
|
|
|
/// @file
|
|
|
|
#include <tr1/memory>
|
|
#include <istream>
|
|
#include <abg-sptr-utils.h>
|
|
|
|
namespace abigail
|
|
{
|
|
|
|
/// Internal namespace for xml manipulation utilities.
|
|
namespace xml
|
|
{
|
|
|
|
using sptr_utils::build_sptr;
|
|
using std::tr1::shared_ptr;
|
|
using sptr_utils::reader_sptr;
|
|
using sptr_utils::xml_char_sptr;
|
|
|
|
/// This functor is used to instantiate a shared_ptr for the
|
|
/// xmlTextReader.
|
|
struct textReaderDeleter
|
|
{
|
|
void
|
|
operator()(xmlTextReaderPtr reader)
|
|
{xmlFreeTextReader(reader);}
|
|
};
|
|
|
|
/// This functor is used to instantiate a shared_ptr for xmlChar
|
|
struct charDeleter
|
|
{
|
|
void
|
|
operator()(xmlChar* str)
|
|
{ xmlFree(str); }
|
|
};
|
|
|
|
reader_sptr new_reader_from_file(const std::string& path);
|
|
reader_sptr new_reader_from_buffer(const std::string& buffer);
|
|
reader_sptr new_reader_from_istream(std::istream*);
|
|
bool xml_char_sptr_to_string(xml_char_sptr, std::string&);
|
|
|
|
int get_xml_node_depth(xmlNodePtr);
|
|
|
|
/// Get the name of the current element node the reader is pointing
|
|
/// to. Note that this macro returns an instance of
|
|
/// shared_ptr<xmlChar> so that the caller doesn't have to worry about
|
|
/// managing memory itself. Also note that the reader is a
|
|
/// shared_ptr<xmlTextReader>
|
|
#define XML_READER_GET_NODE_NAME(reader) \
|
|
xml::build_sptr(xmlTextReaderName(reader.get()))
|
|
|
|
/// Get the type of the current node of the shared_ptr<xmlTextReader>
|
|
/// passed in argument.
|
|
#define XML_READER_GET_NODE_TYPE(reader) \
|
|
static_cast<xmlReaderTypes> (xmlTextReaderNodeType(reader.get()))
|
|
|
|
/// Get the value of attribute 'name' on the current node of 'reader'
|
|
/// which is an instance of shared_ptr<xmlTextReader>.
|
|
#define XML_READER_GET_ATTRIBUTE(reader, name) \
|
|
xml::build_sptr(xmlTextReaderGetAttribute(reader.get(), BAD_CAST(name)))
|
|
|
|
/// Get the value of attribute 'name' ont the instance of xmlNodePtr
|
|
/// denoted by 'node'.
|
|
#define XML_NODE_GET_ATTRIBUTE(node, name) \
|
|
xml::build_sptr(xmlGetProp(node, BAD_CAST(name)))
|
|
|
|
#define CHAR_STR(xml_char_str) \
|
|
reinterpret_cast<char*>(xml_char_str.get())
|
|
|
|
void
|
|
escape_xml_string(const std::string& str,
|
|
std::string& escaped);
|
|
|
|
std::string
|
|
escape_xml_string(const std::string& str);
|
|
|
|
void
|
|
escape_xml_comment(const std::string& str,
|
|
std::string& escaped);
|
|
|
|
std::string
|
|
escape_xml_comment(const std::string& str);
|
|
|
|
void
|
|
unescape_xml_string(const std::string& str,
|
|
std::string& escaped);
|
|
|
|
std::string
|
|
unescape_xml_string(const std::string& str);
|
|
|
|
void
|
|
unescape_xml_comment(const std::string& str,
|
|
std::string& escaped);
|
|
|
|
std::string
|
|
unescape_xml_comment(const std::string& str);
|
|
|
|
}//end namespace xml
|
|
}//end namespace abigail
|