Как очистить и сделать недействительным кеш процессора ARM v7 из пользовательского режима в Linux 2.6.35

Я попытался очистить и аннулировать кэш процессора ARM v7 для строки команд, потому что коды команд могут изменяться при выполнении.

Для достижения эффекта я попробовал 2 варианта. Вот они:

  1. Я использовал функцию GCC __ clear_cache () , но это не так. t дать требуемый результат. Коды инструкций в кеше не изменились.

  2. Я поискал исходные коды для 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)); \
    }
    

Этот вариант тоже не дал результата.

Может быть, кто-нибудь знает, что я делаю не так?

9
задан Benjamin 4 December 2013 в 18:31
поделиться