[RFC PATCH 09/13] selftests/powerpc: Add more utility macros

From: Benjamin Gray
Date: Sun Nov 27 2022 - 21:46:21 EST


Adds more assertion variants to provide more context behind why a
failure occurred.

The SIGSAFE_FAIL_* variants are to allow safely asserting conditions
in a signal handler (though we are about to exit, so it's unlikely to
run into an issue with regular FAIL_IF_EXIT).

Also adds an ARRAY_SIZE macro.

These will be used by the following DEXCR selftests.

Signed-off-by: Benjamin Gray <bgray@xxxxxxxxxxxxx>
---
.../testing/selftests/powerpc/include/utils.h | 44 +++++++++++++++++++
1 file changed, 44 insertions(+)

diff --git a/tools/testing/selftests/powerpc/include/utils.h b/tools/testing/selftests/powerpc/include/utils.h
index 95f3a24a4569..b03d2192c6f6 100644
--- a/tools/testing/selftests/powerpc/include/utils.h
+++ b/tools/testing/selftests/powerpc/include/utils.h
@@ -9,12 +9,19 @@
#define __cacheline_aligned __attribute__((aligned(128)))

#include <stdint.h>
+#include <stdio.h>
#include <stdbool.h>
+#include <string.h>
+#include <unistd.h>
#include <linux/auxvec.h>
#include <linux/perf_event.h>
#include <asm/cputable.h>
#include "reg.h"

+#ifndef ARRAY_SIZE
+# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#endif
+
/* Avoid headaches with PRI?64 - just use %ll? always */
typedef unsigned long long u64;
typedef signed long long s64;
@@ -111,6 +118,16 @@ do { \
} \
} while (0)

+#define FAIL_IF_MSG(x, msg) \
+do { \
+ if ((x)) { \
+ fprintf(stderr, \
+ "[FAIL] Test FAILED on line %d: %s\n", \
+ __LINE__, msg); \
+ return 1; \
+ } \
+} while (0)
+
#define FAIL_IF_EXIT(x) \
do { \
if ((x)) { \
@@ -120,6 +137,16 @@ do { \
} \
} while (0)

+#define FAIL_IF_EXIT_MSG(x, msg) \
+do { \
+ if ((x)) { \
+ fprintf(stderr, \
+ "[FAIL] Test FAILED on line %d: %s\n", \
+ __LINE__, msg); \
+ _exit(1); \
+ } \
+} while (0)
+
/* The test harness uses this, yes it's gross */
#define MAGIC_SKIP_RETURN_VALUE 99

@@ -149,6 +176,23 @@ do { \
ssize_t nbytes __attribute__((unused)); \
nbytes = write(STDERR_FILENO, msg, strlen(msg)); })

+#define SIGSAFE_FAIL_IF_EXIT(x) \
+do { \
+ if ((x)) { \
+ sigsafe_err("[FAIL] Test FAILED on line " str(__LINE__) "\n"); \
+ _exit(1); \
+ } \
+} while (0)
+
+#define SIGSAFE_FAIL_IF_EXIT_MSG(x, msg) \
+do { \
+ if ((x)) { \
+ sigsafe_err("[FAIL] Test FAILED on line " \
+ str(__LINE__) ": " msg "\n"); \
+ _exit(1); \
+ } \
+} while (0)
+
/* POWER9 feature */
#ifndef PPC_FEATURE2_ARCH_3_00
#define PPC_FEATURE2_ARCH_3_00 0x00800000
--
2.38.1