mirror of https://github.com/wolfSSL/wolfssl.git
linuxkm/linuxkm_wc_port.h, linuxkm/x86_vector_register_glue.c, wolfcrypt/test/test.c: implement DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_{ON,OFF}, to allow forcing of asm and C paths for kernel module testing.
parent
65836b4069
commit
ee1190cc8c
|
|
@ -247,6 +247,8 @@ CUSTOM_ENTROPY_TIMEHIRES
|
|||
CY_USING_HAL
|
||||
DCP_USE_DCACHE
|
||||
DEBUG_FORCE_VECTOR_REGISTER_ACCESS_FUZZING
|
||||
DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_OFF
|
||||
DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON
|
||||
DILITHIUM_MUL_11_SLOW
|
||||
DILITHIUM_MUL_44_SLOW
|
||||
DILITHIUM_MUL_QINV_SLOW
|
||||
|
|
|
|||
|
|
@ -762,16 +762,63 @@
|
|||
#ifndef CAN_SAVE_VECTOR_REGISTERS
|
||||
#define CAN_SAVE_VECTOR_REGISTERS() wc_can_save_vector_registers_x86()
|
||||
#endif
|
||||
|
||||
#if defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON) && \
|
||||
defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_OFF)
|
||||
#error Conflicting settings for DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_foo
|
||||
#endif
|
||||
|
||||
#ifndef SAVE_VECTOR_REGISTERS
|
||||
#define SAVE_VECTOR_REGISTERS(fail_clause) { \
|
||||
int _svr_ret = wc_save_vector_registers_x86(WC_SVR_FLAG_NONE); \
|
||||
if (_svr_ret != 0) { \
|
||||
fail_clause \
|
||||
} \
|
||||
}
|
||||
|
||||
#if defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON)
|
||||
|
||||
#define SAVE_VECTOR_REGISTERS(fail_clause) { \
|
||||
int _svr_ret = wc_save_vector_registers_x86(WC_SVR_FLAG_NONE); \
|
||||
if (_svr_ret != 0) { \
|
||||
pr_err("ERROR: SAVE_VECTOR_REGISTERS() with DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON " \
|
||||
"failed, code %d in %s at %s L %d\n", _svr_ret, __func__, __FILE__, __LINE__); \
|
||||
dump_stack(); \
|
||||
{ \
|
||||
fail_clause \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
#elif defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_OFF)
|
||||
|
||||
#define SAVE_VECTOR_REGISTERS(fail_clause) { \
|
||||
int _svr_ret = WC_ACCEL_INHIBIT_E; \
|
||||
(void)_svr_ret; \
|
||||
fail_clause \
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#define SAVE_VECTOR_REGISTERS(fail_clause) { \
|
||||
int _svr_ret = wc_save_vector_registers_x86(WC_SVR_FLAG_NONE); \
|
||||
if (_svr_ret != 0) { \
|
||||
fail_clause \
|
||||
} \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#ifndef SAVE_VECTOR_REGISTERS2
|
||||
#ifdef DEBUG_VECTOR_REGISTER_ACCESS_FUZZING
|
||||
#if defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON)
|
||||
#define SAVE_VECTOR_REGISTERS2() \
|
||||
({ \
|
||||
int _svr_ret = wc_save_vector_registers_x86(WC_SVR_FLAG_NONE); \
|
||||
if (_svr_ret != 0) { \
|
||||
pr_err("ERROR: SAVE_VECTOR_REGISTERS2() with DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON " \
|
||||
"returned %d in %s at %s L %d\n", _svr_ret, __func__, __FILE__, __LINE__); \
|
||||
dump_stack(); \
|
||||
} \
|
||||
_svr_ret; \
|
||||
})
|
||||
#elif defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_OFF)
|
||||
#define SAVE_VECTOR_REGISTERS2() WC_ACCEL_INHIBIT_E
|
||||
#elif defined(DEBUG_VECTOR_REGISTER_ACCESS_FUZZING)
|
||||
#define SAVE_VECTOR_REGISTERS2() wc_save_vector_registers_x86(WC_SVR_FLAG_FUZZ)
|
||||
#else
|
||||
#define SAVE_VECTOR_REGISTERS2() wc_save_vector_registers_x86(WC_SVR_FLAG_NONE)
|
||||
|
|
@ -782,7 +829,21 @@
|
|||
#endif
|
||||
|
||||
#ifndef DISABLE_VECTOR_REGISTERS
|
||||
#define DISABLE_VECTOR_REGISTERS() wc_save_vector_registers_x86(WC_SVR_FLAG_INHIBIT)
|
||||
#if defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON)
|
||||
/* There must be no DISABLE_VECTOR_REGISTERS() calls in a
|
||||
* DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON build -- ERROR if any
|
||||
* calls occur.
|
||||
*/
|
||||
#define DISABLE_VECTOR_REGISTERS() \
|
||||
({ \
|
||||
pr_err("ERROR: DISABLE_VECTOR_REGISTERS() with DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON " \
|
||||
"in %s at %s L %d\n", __func__, __FILE__, __LINE__); \
|
||||
dump_stack(); \
|
||||
wc_save_vector_registers_x86(WC_SVR_FLAG_INHIBIT); \
|
||||
})
|
||||
#else
|
||||
#define DISABLE_VECTOR_REGISTERS() wc_save_vector_registers_x86(WC_SVR_FLAG_INHIBIT)
|
||||
#endif
|
||||
#endif
|
||||
#ifndef REENABLE_VECTOR_REGISTERS
|
||||
#define REENABLE_VECTOR_REGISTERS() wc_restore_vector_registers_x86(WC_SVR_FLAG_INHIBIT)
|
||||
|
|
|
|||
|
|
@ -401,11 +401,17 @@ WARN_UNUSED_RESULT int wc_save_vector_registers_x86(enum wc_svr_flags flags)
|
|||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
#ifndef DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON
|
||||
/* EINTR during optest, which is exercised by the kernel test harness, acts
|
||||
* like a failed save, which would emit (and indeed be) an ERROR in
|
||||
* DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON builds.
|
||||
*/
|
||||
{
|
||||
int ret = WC_CHECK_FOR_INTR_SIGNALS();
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
WC_RELAX_LONG_LOOP();
|
||||
|
||||
|
|
|
|||
|
|
@ -25621,7 +25621,9 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t random_bank_test(void)
|
|||
#endif
|
||||
|
||||
ret = wc_rng_bank_init(bank, WC_RNG_BANK_STATIC_SIZE,
|
||||
#ifndef DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON
|
||||
WC_RNG_BANK_FLAG_NO_VECTOR_OPS |
|
||||
#endif
|
||||
WC_RNG_BANK_FLAG_CAN_WAIT,
|
||||
10, HEAP_HINT, INVALID_DEVID);
|
||||
if (ret != 0)
|
||||
|
|
@ -25660,7 +25662,9 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t random_bank_test(void)
|
|||
defined(HAVE_HASHDRBG) && \
|
||||
defined(WC_NO_INTERNAL_FUNCTION_POINTERS) && \
|
||||
defined(HAVE_FIPS) && \
|
||||
FIPS_VERSION3_LT(7,0,0)
|
||||
FIPS_VERSION3_LT(7,0,0) && \
|
||||
!defined(DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON)
|
||||
|
||||
#ifdef WOLFSSL_DRBG_SHA512
|
||||
if (rng_inst->rng.drbgType == WC_DRBG_SHA512) {
|
||||
if (((struct DRBG_SHA512_internal *)rng_inst->rng.drbg512)->sha512.sha_method != 5 /* SHA512_C */)
|
||||
|
|
@ -25672,7 +25676,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t random_bank_test(void)
|
|||
if (((struct DRBG_internal *)rng_inst->rng.drbg)->sha256.sha_method != 7 /* SHA256_C */)
|
||||
ERROR_OUT(WC_TEST_RET_ENC_I(((struct DRBG_internal *)rng_inst->rng.drbg)->sha256.sha_method), out);
|
||||
}
|
||||
#endif
|
||||
#endif /* USE_INTEL_SPEEDUP && ... && !DEBUG_VECTOR_REGISTER_ACCESS_ALWAYS_ON */
|
||||
|
||||
ret = wc_RNG_GenerateBlock(WC_RNG_BANK_INST_TO_RNG(rng_inst), outbuf1, sizeof(outbuf1));
|
||||
if (ret != 0)
|
||||
|
|
|
|||
Loading…
Reference in New Issue