summaryrefslogtreecommitdiffstats
path: root/dwarflint/low.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dwarflint/low.cc')
-rw-r--r--dwarflint/low.cc68
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;
+}