[PATCH v6 04/17] libcflat: add abort() and assert()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The test framework may have external dependencies. assert() provides
the ability to abort when those dependencies aren't met. However,
assert() should only be used for unlikely conditions. We can provide
more informative messages with printf() for the more likely problems.

Signed-off-by: Andrew Jones <drjones@xxxxxxxxxx>
Acked-by: Christoffer Dall <christoffer.dall@xxxxxxxxxx>
---
v6: change abort() from macro to function [Paolo Bonzini]
    don't use signal ambiguous status codes [Paolo Bonzini]
---
 Makefile       |  1 +
 lib/abort.c    | 20 ++++++++++++++++++++
 lib/libcflat.h |  9 +++++++++
 3 files changed, 30 insertions(+)
 create mode 100644 lib/abort.c

diff --git a/Makefile b/Makefile
index fba58e36f272f..180189ecd6d8c 100644
--- a/Makefile
+++ b/Makefile
@@ -19,6 +19,7 @@ cflatobjs := \
 	lib/argv.o \
 	lib/printf.o \
 	lib/string.o \
+	lib/abort.o \
 	lib/report.o
 
 # libfdt paths
diff --git a/lib/abort.c b/lib/abort.c
new file mode 100644
index 0000000000000..61f7f924aba4b
--- /dev/null
+++ b/lib/abort.c
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2014, Red Hat Inc, Andrew Jones <drjones@xxxxxxxxxx>
+ *
+ * This work is licensed under the terms of the GNU LGPL, version 2.
+ */
+#include "libcflat.h"
+
+/*
+ * When exit(code) is invoked, qemu will exit with ((code << 1) | 1),
+ * leaving us 128 exit status codes. To avoid confusion with signal
+ * status, we further limit exit codes to those resulting in qemu
+ * exiting with a status < 128. We give abort() the highest (127),
+ * leaving the lower status codes for unit tests.
+ */
+#define ABORT_EXIT_STATUS 63	/* 127 exit status from qemu */
+
+void abort(void)
+{
+	exit(ABORT_EXIT_STATUS);
+}
diff --git a/lib/libcflat.h b/lib/libcflat.h
index c9754695326df..9f76d6741344d 100644
--- a/lib/libcflat.h
+++ b/lib/libcflat.h
@@ -44,6 +44,7 @@ typedef _Bool bool;
 #define false 0
 
 extern void exit(int code);
+extern void abort(void);
 
 extern int printf(const char *fmt, ...);
 extern int snprintf(char *buf, int size, const char *fmt, ...);
@@ -61,4 +62,12 @@ extern long atol(const char *ptr);
 void report(const char *msg_fmt, bool pass, ...);
 void report_xfail(const char *msg_fmt, bool xfail, bool pass, ...);
 int report_summary(void);
+
+#define assert(cond)							\
+do {									\
+	if (!(cond))							\
+		printf("%s:%d: assert failed\n", __FILE__, __LINE__),	\
+		abort();						\
+} while (0)
+
 #endif
-- 
1.9.3

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux