mirror of
git://sourceware.org/git/libabigail.git
synced 2024-12-17 23:44:35 +00:00
a9f5fb4089
abidw will write out the exact same size-in-bits address for every
pointer type, reference type, function declaration and function type
even though it is always the same as the translation unit address
size. When giving the --no-write-default-sizes option these aren't
written out anymore. The reader is updated to set the default size
when none is given in the XML description.
Even though size and alignment are handled together in the reader,
default alignment is still set to zero, following commit a05384675
Note that this isn't backward compatible with older libabigail
readers, which will set the size to zero when none is given. So this
option isn't the default.
* doc/manuals/abidw.rst: Document --no-write-default-sizes.
* include/abg-writer.h (set_write_default_sizes): New function
declaration.
(set_common_options): Call set_write_default_sizes.
* src/abg-reader.cc (build_function_decl): Get default size.
(build_pointer_type_def): Likewise.
(build_reference_type_def): Likewise.
(build_function_type): Likewise.
* src/abg-writer.cc (write_context): Add m_write_default_sizes
bool.
(get_write_default_sizes): New method.
(set_write_default_sizes): Likewise.
(write_size_and_alignment): Add default size and alignment
parameters.
(set_write_default_sizes): New function.
(write_type_decl): Set default size and alignment.
(write_pointer_type_def): Likewise.
(write_reference_type_def): Likewise.
(write_function_decl): Likewise.
(write_function_type): Likewise.
(write_class_decl_opening_tag): Likewise.
(write_union_decl_opening_tag): Likewise.
* tests/test-types-stability.cc (perform): Also test --abidiff
with --no-write-default-sizes.
* tools/abidw.cc (option): Add default_sizes bool.
(parse_command_line): Parse --no-write-default-sizes.
(display_usage): Add doc string for --no-write-default-sizes.
Signed-off-by: Mark Wielaard <mark@klomp.org>
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
137 lines
3.7 KiB
C++
137 lines
3.7 KiB
C++
// -*- Mode: C++ -*-
|
|
//
|
|
// Copyright (C) 2013-2020 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/>.
|
|
//
|
|
// Author: Dodji Seketeli
|
|
|
|
/// @file
|
|
///
|
|
/// This file contains the declarations of the entry points to
|
|
/// de-serialize an instance of @ref abigail::translation_unit to an
|
|
/// ABI Instrumentation file in libabigail native XML format.
|
|
|
|
#ifndef __ABG_WRITER_H__
|
|
#define __ABG_WRITER_H__
|
|
|
|
#include "abg-fwd.h"
|
|
|
|
namespace abigail
|
|
{
|
|
namespace xml_writer
|
|
{
|
|
|
|
using namespace abigail::ir;
|
|
|
|
class write_context;
|
|
|
|
/// A convenience typedef for a shared pointer to write_context.
|
|
typedef shared_ptr<write_context> write_context_sptr;
|
|
|
|
write_context_sptr
|
|
create_write_context(const environment *env,
|
|
ostream& output_stream);
|
|
|
|
void
|
|
set_show_locs(write_context& ctxt, bool flag);
|
|
|
|
void
|
|
set_annotate(write_context& ctxt, bool flag);
|
|
|
|
void
|
|
set_write_architecture(write_context& ctxt, bool flag);
|
|
|
|
void
|
|
set_write_corpus_path(write_context& ctxt, bool flag);
|
|
|
|
void
|
|
set_write_comp_dir(write_context& ctxt, bool flag);
|
|
|
|
void
|
|
set_write_elf_needed(write_context& ctxt, bool flag);
|
|
|
|
void
|
|
set_write_default_sizes(write_context& ctxt, bool flag);
|
|
|
|
void
|
|
set_short_locs(write_context& ctxt, bool flag);
|
|
|
|
void
|
|
set_write_parameter_names(write_context& ctxt, bool flag);
|
|
|
|
/// A convenience generic function to set common options (usually used
|
|
/// by Libabigail tools) from a generic options carrying-object, into
|
|
/// a given @ref write_context.
|
|
///
|
|
/// @param ctxt the @ref the write_context to consider.
|
|
///
|
|
/// @param opts the option-carrying object to set the options from.
|
|
/// It must contain data members named: annotate, and show_locs, at
|
|
/// very least.
|
|
template <typename OPTS>
|
|
void
|
|
set_common_options(write_context& ctxt, const OPTS& opts)
|
|
{
|
|
set_annotate(ctxt, opts.annotate);
|
|
set_show_locs(ctxt, opts.show_locs);
|
|
set_write_architecture(ctxt, opts.write_architecture);
|
|
set_write_corpus_path(ctxt, opts.write_corpus_path);
|
|
set_write_comp_dir(ctxt, opts.write_comp_dir);
|
|
set_write_elf_needed(ctxt, opts.write_elf_needed);
|
|
set_write_parameter_names(ctxt, opts.write_parameter_names);
|
|
set_short_locs(ctxt, opts.short_locs);
|
|
set_write_default_sizes(ctxt, opts.default_sizes);
|
|
}
|
|
|
|
void
|
|
set_ostream(write_context& ctxt, ostream& os);
|
|
|
|
bool
|
|
write_translation_unit(write_context& ctxt,
|
|
const translation_unit& tu,
|
|
const unsigned indent);
|
|
|
|
bool
|
|
write_corpus_to_archive(const corpus& corp,
|
|
const string& path,
|
|
const bool annotate = false);
|
|
|
|
bool
|
|
write_corpus_to_archive(const corpus& corp,
|
|
const bool annotate = false);
|
|
|
|
bool
|
|
write_corpus_to_archive(const corpus_sptr corp,
|
|
const bool annotate = false);
|
|
|
|
bool
|
|
write_corpus(write_context& ctxt,
|
|
const corpus_sptr& corpus,
|
|
unsigned indent,
|
|
bool member_of_group = false);
|
|
|
|
bool
|
|
write_corpus_group(write_context& ctx,
|
|
const corpus_group_sptr& group,
|
|
unsigned indent);
|
|
|
|
}// end namespace xml_writer
|
|
}// end namespace abigail
|
|
|
|
#endif // __ABG_WRITER_H__
|