在Linux 2.6.35上,如何清除并使用户模式下的ARM v7处理器caching无效

在Linux 2.6.35上,如何清除并使用户模式下的ARM v7处理器caching无效,第1张

概述在Linux 2.6.35上,如何清除并使用户模式下的ARM v7处理器caching无效

我尝试清除指令行中的ARM v7处理器高速caching,使其无效,因为指令代码可以在执行时更改。

为了达到这个效果,我试了2个变种。 他们来了:

我使用了GCC __clear_cache()函数,但没有给出所需的结果。 caching中的指令代码没有改变。

我查找了GCC的源代码,并find了uclinux-eabi.h文件 ,我find了清除caching的下一个代码:

“asm”错误中不可能的约束

ARM上TLS的代码序列

ARM linux:为什么linux期望寄存器r0被设置为零

如何交叉编译Openwrt的.c文件?

AM335x入门套件使用qemu模拟

/* 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)); }

这个变体也没有给出结果。

也许有人知道我做错了什么?

如何在ARM交叉编译时select要链接的静态库?

移植到不同架构的潜在问题

如何在安装了fun_plug 0.5的D-link DNS 325上编译NodeJs?

铛交叉编译为ARM?

针对ARM交叉编译Node.Js

我自己也有类似的问题。 __clear_cache()的工作,但只有当有问题的内存区域分配使用mmap()与PROT_EXEC设置。 即使处理器似乎很乐​​意从malloc()ed内存执行代码,linux也不会​​刷新指令高速缓存(如果提供的内存范围来自常规malloc()ed内存)。

有关如何执行此 *** 作的示例代码,请参阅https://community.arm.com/groups/processors/blog/2010/02/17/caches-and-self-modifying-code 。

总结

以上是内存溢出为你收集整理的在Linux 2.6.35上,如何清除并使用户模式下的ARM v7处理器caching无效全部内容,希望文章能够帮你解决在Linux 2.6.35上,如何清除并使用户模式下的ARM v7处理器caching无效所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1278527.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存