Добрый день.
Процессор ARM11, компилятор ADS 1.2
Имеется следующая функция:
Код
UCHAR RFC4357_KeyUnwrap(GOST28147_BCTX_PTR pX,
RFC4357_WRAPPED_KEY_PTR pWrappedKey,
PUCHAR pUnwrappingKey,
PUCHAR pUnwrappedKey) {
UCHAR kd[32];
UCHAR ke[32];
/* calc diversified key */
memcpy(kd, pUnwrappingKey, 32);
...
/* decrypt key */
memcpy(ke, pWrappedKey->KEY, 32);
...
}
Во время второго вызова memcpy() возникает исключение Misaligned. И действительно, перед вызовом функции R1 = 010CF0BA.
Из листинга видно, что при первом вызове вызывается функция __rt_memcpy, а при втором - __rt_memcpy_w.
Собственно, вопросы:
1. Из каких соображений компилятор в 1-м случае поставил функцию побайтного копирования, а во 2-м - пословного?
2. Как сказать компилятору, чтобы он во 2-м случае тоже использовал __rt_memcpy?