#define pr_fmt(fmt) …
#include <kunit/test.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/string.h>
#define MAX_VAR_SIZE …
static u8 check_buf[MAX_VAR_SIZE];
#define VAR_BUFFER …
static volatile u8 forced_mask = …;
static void *fill_start, *target_start;
static size_t fill_size, target_size;
static bool stackinit_range_contains(char *haystack_start, size_t haystack_size,
char *needle_start, size_t needle_size)
{ … }
#define WANT_SUCCESS …
#define XFAIL …
#define DO_NOTHING_TYPE_SCALAR(var_type) …
#define DO_NOTHING_TYPE_STRING(var_type) …
#define DO_NOTHING_TYPE_STRUCT(var_type) …
#define DO_NOTHING_RETURN_SCALAR(ptr) …
#define DO_NOTHING_RETURN_STRING(ptr) …
#define DO_NOTHING_RETURN_STRUCT(ptr) …
#define DO_NOTHING_CALL_SCALAR(var, name) …
#define DO_NOTHING_CALL_STRING(var, name) …
#define DO_NOTHING_CALL_STRUCT(var, name) …
#define FETCH_ARG_SCALAR(var) …
#define FETCH_ARG_STRING(var) …
#define FETCH_ARG_STRUCT(var) …
#ifdef CONFIG_M68K
#define FILL_SIZE_STRING …
#else
#define FILL_SIZE_STRING …
#endif
#define INIT_CLONE_SCALAR …
#define INIT_CLONE_STRING …
#define INIT_CLONE_STRUCT …
#define ZERO_CLONE_SCALAR(zero) …
#define ZERO_CLONE_STRING(zero) …
#define ZERO_CLONE_STRUCT(zero) …
#define INIT_SCALAR_none(var_type) …
#define INIT_SCALAR_zero(var_type) …
#define INIT_STRING_none(var_type) …
#define INIT_STRING_zero(var_type) …
#define INIT_STRUCT_none(var_type) …
#define INIT_STRUCT_zero(var_type) …
#define __static_partial …
#define __static_all …
#define __dynamic_partial …
#define __dynamic_all …
#define __runtime_partial …
#define __runtime_all …
#define INIT_STRUCT_static_partial(var_type) …
#define INIT_STRUCT_static_all(var_type) …
#define INIT_STRUCT_dynamic_partial(var_type) …
#define INIT_STRUCT_dynamic_all(var_type) …
#define INIT_STRUCT_runtime_partial(var_type) …
#define INIT_STRUCT_runtime_all(var_type) …
#define INIT_STRUCT_assigned_static_partial(var_type) …
#define INIT_STRUCT_assigned_static_all(var_type) …
#define INIT_STRUCT_assigned_dynamic_partial(var_type) …
#define INIT_STRUCT_assigned_dynamic_all(var_type) …
#define INIT_STRUCT_assigned_copy(var_type) …
#define DEFINE_TEST_DRIVER(name, var_type, which, xfail) …
#define DEFINE_TEST(name, var_type, which, init_level, xfail) …
struct test_packed { … };
struct test_small_hole { … };
struct test_big_hole { … } __aligned(…);
struct test_trailing_hole { … };
struct test_user { … };
#define ALWAYS_PASS …
#define ALWAYS_FAIL …
#ifdef CONFIG_INIT_STACK_NONE
#define USER_PASS …
#define BYREF_PASS …
#define STRONG_PASS …
#elif defined(CONFIG_GCC_PLUGIN_STRUCTLEAK_USER)
#define USER_PASS …
#define BYREF_PASS …
#define STRONG_PASS …
#elif defined(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF)
#define USER_PASS …
#define BYREF_PASS …
#define STRONG_PASS …
#else
#define USER_PASS …
#define BYREF_PASS …
#define STRONG_PASS …
#endif
#define DEFINE_SCALAR_TEST(name, init, xfail) …
#define DEFINE_SCALAR_TESTS(init, xfail) …
#define DEFINE_STRUCT_TEST(name, init, xfail) …
#define DEFINE_STRUCT_TESTS(init, xfail) …
#define DEFINE_STRUCT_INITIALIZER_TESTS(base, xfail) …
DEFINE_SCALAR_TESTS(zero, ALWAYS_PASS);
DEFINE_STRUCT_TESTS(zero, ALWAYS_PASS);
DEFINE_STRUCT_INITIALIZER_TESTS(static, STRONG_PASS);
DEFINE_STRUCT_INITIALIZER_TESTS(dynamic, STRONG_PASS);
DEFINE_STRUCT_INITIALIZER_TESTS(runtime, STRONG_PASS);
DEFINE_STRUCT_INITIALIZER_TESTS(assigned_static, STRONG_PASS);
DEFINE_STRUCT_INITIALIZER_TESTS(assigned_dynamic, STRONG_PASS);
DEFINE_STRUCT_TESTS(assigned_copy, ALWAYS_FAIL);
DEFINE_SCALAR_TESTS(none, STRONG_PASS);
DEFINE_STRUCT_TESTS(none, BYREF_PASS);
DEFINE_TEST(user, struct test_user, STRUCT, none, USER_PASS);
static int noinline __leaf_switch_none(int path, bool fill)
{ … }
static noinline int leaf_switch_1_none(unsigned long sp, bool fill,
uint64_t *arg)
{ … }
static noinline int leaf_switch_2_none(unsigned long sp, bool fill,
uint64_t *arg)
{ … }
DEFINE_TEST_DRIVER(switch_1_none, uint64_t, SCALAR, ALWAYS_FAIL);
DEFINE_TEST_DRIVER(switch_2_none, uint64_t, SCALAR, ALWAYS_FAIL);
#define KUNIT_test_scalars(init) …
#define KUNIT_test_structs(init) … \
static struct kunit_case stackinit_test_cases[] = …;
static struct kunit_suite stackinit_test_suite = …;
kunit_test_suites(…);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;