Я попытался очистить и аннулировать кэш процессора ARM v7 для строки команд, потому что коды команд могут изменяться при выполнении.
Для достижения эффекта я попробовал 2 варианта. Вот они:
Я использовал функцию GCC __ clear_cache () , но это не так. t дать требуемый результат. Коды инструкций в кеше не изменились.
Я поискал исходные коды для GCC и нашел файл uclinux-eabi.h , где я нашел следующий код для очистки кеша:
/ * Очистите кэш инструкций от «нач» до «конец». Это делает
встроенный системный вызов SYS_cacheflush. * /
#undef CLEAR_INSN_CACHE
#define CLEAR_INSN_CACHE (BEG, END) \
{\
регистр беззнаковой длинной _beg __asm ("a1") = (беззнаковой длинной) (BEG); \
регистр беззнаковой длинной _end __asm ("a2") = (беззнаковой длинной) (КОНЕЦ); \
регистр unsigned long _flg __asm ("a3") = 0; \
регистр unsigned long _scno __asm ("r7") = 0xf0002; \
__asm __volatile \
(\
"swi 0x0 @ sys_cacheflush" \
: "= r" (_beg) \
: «0» (_beg), «r» (_end), «r» (_flg), «r» (_scno)); \
}
Этот вариант тоже не дал результата.
Может быть, кто-нибудь знает, что я делаю не так?