@@ -63,7 +63,16 @@ static bool stackinit_range_contains(char *haystack_start, size_t haystack_size,
63
63
#define FETCH_ARG_STRING (var ) var
64
64
#define FETCH_ARG_STRUCT (var ) &var
65
65
66
+ /*
67
+ * On m68k, if the leaf function test variable is longer than 8 bytes,
68
+ * the start of the stack frame moves. 8 is sufficiently large to
69
+ * test m68k char arrays, but leave it at 16 for other architectures.
70
+ */
71
+ #ifdef CONFIG_M68K
72
+ #define FILL_SIZE_STRING 8
73
+ #else
66
74
#define FILL_SIZE_STRING 16
75
+ #endif
67
76
68
77
#define INIT_CLONE_SCALAR /**/
69
78
#define INIT_CLONE_STRING [FILL_SIZE_STRING]
@@ -165,19 +174,23 @@ static noinline void test_ ## name (struct kunit *test) \
165
174
/* Verify all bytes overwritten with 0xFF. */ \
166
175
for (sum = 0 , i = 0 ; i < target_size ; i ++ ) \
167
176
sum += (check_buf [i ] != 0xFF ); \
168
- KUNIT_ASSERT_EQ_MSG (test , sum , 0 , \
169
- "leaf fill was not 0xFF!?\n" ); \
170
177
/* Clear entire check buffer for later bit tests. */ \
171
178
memset (check_buf , 0x00 , sizeof (check_buf )); \
172
179
/* Extract stack-defined variable contents. */ \
173
180
ignored = leaf_ ##name ((unsigned long)&ignored, 0, \
174
181
FETCH_ARG_ ## which(zero)); \
182
+ /* \
183
+ * Delay the sum test to here to do as little as \
184
+ * possible between the two leaf function calls. \
185
+ */ \
186
+ KUNIT_ASSERT_EQ_MSG (test , sum , 0 , \
187
+ "leaf fill was not 0xFF!?\n" ); \
175
188
\
176
189
/* Validate that compiler lined up fill and target. */ \
177
190
KUNIT_ASSERT_TRUE_MSG (test , \
178
191
stackinit_range_contains (fill_start , fill_size , \
179
192
target_start , target_size ), \
180
- "stack fill missed target !? " \
193
+ "stackframe was not the same between calls !? " \
181
194
"(fill %zu wide, target offset by %d)\n" , \
182
195
fill_size , \
183
196
(int )((ssize_t )(uintptr_t )fill_start - \
0 commit comments