2010-05-06 14 views
5

Estoy escribiendo un JIT en ARM Linux que ejecuta un conjunto de instrucciones que contiene código de auto modificación. El conjunto de instrucciones no tiene ninguna instrucción de vaciado de caché (similar a x86 a ese respecto).¿Protege mprotect la memoria caché de instrucciones en ARM Linux?

Si escribo un código en una página y luego llamo al mprotect en esa página, ¿eso es suficiente para invalidar la caché de instrucciones? ¿O también necesito usar la llamada de sistema cacheflush en esas páginas?

Respuesta

0

Creo que no tiene que vaciar explícitamente el caché.

¿Qué procesador es este? ARMv5? ARMv7?

+1

Hmm, mi objetivo es ARMv5 nominalmente. De acuerdo con ARM ARM, necesita vaciar el caché de instrucciones en el caso de código de modificación automática. Me pregunto si mprotect lo hará por mí. –

3

Es de esperar que las llamadas de sistema de mmap/mprotect establezcan asignaciones que se actualicen de inmediato, y no necesiten más interacción para utilizar los intervalos de memoria especificados. Veo que el kernel en realidad lava los cachés en mprotect. En ese caso, no se requeriría ningún enjuague de caché.

Sin embargo, también veo que algunas versiones de libc llaman cacheflush después de mprotect, lo que implicaría que algunos entornos necesitarían las cachés vaciar (o tener previamente). Supongo que esto es una solución a un error.

Siempre puede agregar la llamada a cacheflush; aunque es un código adicional, no debería ser dañino; en el peor de los casos, las memorias caché ya estarán enrojecidas. Siempre puede escribir una prueba rápida y ver qué sucede ...

Cuestiones relacionadas