diff options
Diffstat (limited to 'dwarflint/low.cc')
| -rw-r--r-- | dwarflint/low.cc | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/dwarflint/low.cc b/dwarflint/low.cc new file mode 100644 index 00000000..34dd76e7 --- /dev/null +++ b/dwarflint/low.cc @@ -0,0 +1,68 @@ +/* Pedantic checking of DWARF files + Copyright (C) 2008, 2009, 2010 Red Hat, Inc. + This file is part of Red Hat elfutils. + + Red Hat elfutils is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by the + Free Software Foundation; version 2 of the License. + + Red Hat elfutils 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 Public License for more details. + + You should have received a copy of the GNU General Public License along + with Red Hat elfutils; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. + + Red Hat elfutils is an included package of the Open Invention Network. + An included package of the Open Invention Network is a package for which + Open Invention Network licensees cross-license their patents. No patent + license is granted, either expressly or impliedly, by designation as an + included package. Should you wish to participate in the Open Invention + Network licensing program, please visit www.openinventionnetwork.com + <http://www.openinventionnetwork.com>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "low.h" +#include "messages.h" +#include <stdarg.h> + +bool +address_aligned (uint64_t addr, uint64_t align) +{ + return align < 2 || (addr % align == 0); +} + +bool +necessary_alignment (uint64_t start, uint64_t length, uint64_t align) +{ + return address_aligned (start + length, align) && length < align; +} + +bool +supported_version (unsigned version, + size_t num_supported, struct where *where, ...) +{ + bool retval = false; + va_list ap; + va_start (ap, where); + for (size_t i = 0; i < num_supported; ++i) + { + unsigned v = va_arg (ap, unsigned); + if (version == v) + { + retval = true; + break; + } + } + va_end (ap); + + if (!retval) + wr_error (where, ": unsupported version %d.\n", version); + + return retval; +} |
