Wie klar und ungültig ARM v7 Prozessor-cache vom User-Modus auf Linux 2.6.35

Habe ich versucht klar und ungültig ARM v7-Prozessor-Caches für Instruktion Linie, weil instruction-codes ändern kann in der Ausführung.

Für das erreichen der Wirkung, versuchte ich 2 Varianten. Hier sind Sie:

  1. Ich GCC __clear_cache () - Funktion, aber es hat nicht ein gefordertes Ergebnis. Instruction codes im cache hat sich auch nicht geändert.

  2. Suchte ich einen Quellcode für GCC und fand die uclinux-eabi.h-Datei gefunden, wo ich den nächsten code für das clearing-cache:

    /* Clear the instruction cache from `beg' to `end'.  This makes an
       inline system call to SYS_cacheflush.  */
    #undef CLEAR_INSN_CACHE
    #define CLEAR_INSN_CACHE(BEG, END)                                    \
    {                                                                     \
        register unsigned long _beg __asm ("a1") = (unsigned long) (BEG); \
        register unsigned long _end __asm ("a2") = (unsigned long) (END); \
        register unsigned long _flg __asm ("a3") = 0;                     \
        register unsigned long _scno __asm ("r7") = 0xf0002;              \
        __asm __volatile                                                  \
        (                                                                 \
            "swi 0x0    @ sys_cacheflush"                                 \
            : "=r" (_beg)                                                 \
            : "0" (_beg), "r" (_end), "r" (_flg), "r" (_scno));           \
    }
    

Diese Variante nicht geben, das Ergebnis zu.

Weiss jemand vielleicht was ich falsch mache ?

  • Ich würde schauen, dass der compiler ist eigentlich ehrt Ihre Anfrage zur Verwendung der angegebenen register (a1, a2, a3, r7) durch dumping die generierte Objekt-Datei als Montage. Du bist wohl am Ende mit der falsche Register verwendet wird, der für die kernel-Aufruf (swi).
  • Wie ich es verstehe, ist dies der empfohlene Weg, um asm-Eingänge in bestimmte register, weil es nicht bestimmte Einschränkungen für die einzelnen Register 🙁 stackoverflow.com/q/37358451/224132
Schreibe einen Kommentar