我尝试清除指令行中的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无效所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)