linux - mprotect 是否刷新 ARM Linux 上的指令缓存?

标签 linux arm jit self-modifying mprotect

我正在 ARM Linux 上编写一个 JIT,它执行一个包含自修改代码的指令集。该指令集没有任何缓存刷新指令(在这方面类似于 x86)。

如果我将一些代码写入页面,然后在该页面上调用 mprotect,是否足以使指令缓存失效?还是我还需要在这些页面上使用 cacheflush 系统调用?

最佳答案

您希望 mmap/mprotect 系统调用会建立立即更新的映射,并且不需要进一步的交互来使用指定的内存范围。我看到内核确实刷新了 mprotect 上的缓存。在这种情况下,不需要刷新缓存。

但是,我还看到某些版本的 libc 在 mprotect 之后调用了 cacheflush,这意味着某些环境需要缓存冲洗(或以前)。我猜测这是一个错误的解决方法。

您总是可以添加对 cacheflush 的调用;虽然它是额外的代码,但它不应该有害——最坏的情况是,缓存已经被刷新了。你总是可以编写一个快速测试,看看会发生什么......

关于linux - mprotect 是否刷新 ARM Linux 上的指令缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2777725/

相关文章:

c++ - 在运行时知道类的大小

linux - 交叉编译器ldd

linux - awk 不打印分隔符

linux - RHEL6.5的截图应用

linux - 监听端口putty隧道不工作

c - 将硬 float 链接到 softfp 不良性能

assembly - 汇编代码中的 .arm 是什么?

java - JIT 优化器是否优化乘法?

c++ - Raspberry Pi 3 上的 QML 性能

java - javac 无法优化我的代码吗?