Lines Matching refs:td

61 static void default_result(struct tdescr *td, bool force_exit)  in default_result()  argument
63 if (td->result == KSFT_SKIP) { in default_result()
65 } else if (td->pass) { in default_result()
67 td->result = KSFT_PASS; in default_result()
70 td->result = KSFT_FAIL; in default_result()
74 exit(td->result); in default_result()
85 static bool handle_signal_unsupported(struct tdescr *td, in handle_signal_unsupported() argument
88 if (feats_ok(td)) in handle_signal_unsupported()
94 if (!td->initialized) { in handle_signal_unsupported()
100 td->pass = 1; in handle_signal_unsupported()
107 static bool handle_signal_trigger(struct tdescr *td, in handle_signal_trigger() argument
110 td->triggered = 1; in handle_signal_trigger()
112 td->run(td, si, uc); in handle_signal_trigger()
117 static bool handle_signal_ok(struct tdescr *td, in handle_signal_ok() argument
124 assert(!td->sig_trig || td->triggered); in handle_signal_ok()
128 si->si_addr, si->si_code, td->token, td->token - si->si_addr); in handle_signal_ok()
135 if (!td->sanity_disabled && !td->token) { in handle_signal_ok()
146 if (td->sig_ok == SIGSEGV && si->si_code != SEGV_ACCERR) { in handle_signal_ok()
151 td->pass = 1; in handle_signal_ok()
163 static bool handle_signal_copyctx(struct tdescr *td, in handle_signal_copyctx() argument
168 memcpy(td->live_uc, uc, td->live_sz); in handle_signal_copyctx()
169 ASSERT_GOOD_CONTEXT(td->live_uc); in handle_signal_copyctx()
170 td->live_uc_valid = 1; in handle_signal_copyctx()
202 static int default_setup(struct tdescr *td) in default_setup() argument
208 sa.sa_flags |= td->sa_flags; in default_setup()
222 if (td->sig_trig) in default_setup()
223 unblock_signal(td->sig_trig); in default_setup()
224 if (td->sig_ok) in default_setup()
225 unblock_signal(td->sig_ok); in default_setup()
226 if (td->sig_unsupp) in default_setup()
227 unblock_signal(td->sig_unsupp); in default_setup()
229 if (td->timeout) { in default_setup()
231 alarm(td->timeout); in default_setup()
238 static inline int default_trigger(struct tdescr *td) in default_trigger() argument
240 return !raise(td->sig_trig); in default_trigger()
243 int test_init(struct tdescr *td) in test_init() argument
245 if (td->sig_trig == sig_copyctx) { in test_init()
254 td->minsigstksz = getauxval(AT_MINSIGSTKSZ); in test_init()
255 if (!td->minsigstksz) in test_init()
256 td->minsigstksz = MINSIGSTKSZ; in test_init()
257 fprintf(stderr, "Detected MINSTKSIGSZ:%d\n", td->minsigstksz); in test_init()
259 if (td->feats_required) { in test_init()
260 td->feats_supported = 0; in test_init()
266 td->feats_supported |= FEAT_SSBS; in test_init()
268 td->feats_supported |= FEAT_SVE; in test_init()
269 if (feats_ok(td)) { in test_init()
272 feats_to_string(td->feats_required & in test_init()
273 td->feats_supported)); in test_init()
277 feats_to_string(td->feats_required & in test_init()
278 ~td->feats_supported)); in test_init()
279 td->result = KSFT_SKIP; in test_init()
285 if (td->init && !td->init(td)) { in test_init()
289 td->initialized = 1; in test_init()
295 int test_setup(struct tdescr *td) in test_setup() argument
299 assert(td); in test_setup()
300 assert(td->name); in test_setup()
301 assert(td->run); in test_setup()
304 td->result = KSFT_FAIL; in test_setup()
305 if (td->setup) in test_setup()
306 return td->setup(td); in test_setup()
308 return default_setup(td); in test_setup()
311 int test_run(struct tdescr *td) in test_run() argument
313 if (td->sig_trig) { in test_run()
314 if (td->trigger) in test_run()
315 return td->trigger(td); in test_run()
317 return default_trigger(td); in test_run()
319 return td->run(td, NULL, NULL); in test_run()
323 void test_result(struct tdescr *td) in test_result() argument
325 if (td->initialized && td->result != KSFT_SKIP && td->check_result) in test_result()
326 td->check_result(td); in test_result()
327 default_result(td, 0); in test_result()
330 void test_cleanup(struct tdescr *td) in test_cleanup() argument
332 if (td->cleanup) in test_cleanup()
333 td->cleanup(td); in test_cleanup()