有许多可能的错误和解决方法分散在不同的地方,任何人都可以提供至少一种详细的工作设置,以及确切的 gem5 和编译器版本,希望在 Ubuntu 上吗?
后如何解决:运行gem5在系统调用仿真SE模式时,“致命的内核太旧”?我设法在某些条件下运行了一个静态链接的 hello world。
但是,如果我尝试针对 stdlib 运行一个 ARM 动态链接的:
./out/common/gem5/build/ARM/gem5.opt ./gem5/gem5/configs/example/se.py -c ./a.out
Run Code Online (Sandbox Code Playgroud)
它失败了:
fatal: Unable to open dynamic executable's interpreter.
Run Code Online (Sandbox Code Playgroud)
如何让它找到解释器?希望不要在我的主机根目录上复制我的交叉工具链的解释器。
对于 x86_64,如果我使用我的本机编译器,它就可以工作,并且正如预期的strace那样,它使用本机解释器,但如果我使用交叉编译器,它就不起作用。
当前的常见问题解答说不能使用动态可执行文件:http : //gem5.org/Frequently_Asked_Questions但我不相信它,然后这些演示文稿提到了它:
但不是如何实际使用它。
QEMU 用户模式有这个-L选项。
在 gem5 49f96e7b77925837aa5bc84d4c3453ab5f07408e 中测试
https://www.mail-archive.com/gem5-users@gem5.org/msg15582.html
Gem5 在源代码树中有几个测试,并且有一些文档位于:http : //www.gem5.org/Regression_Tests但这些文档不是很清楚。
有哪些测试以及如何运行它们?
我今天第一次遇到 LDTR ARMv8 指令。
我在ARMv8 DB手册第C3.2.5节“非特权加载/存储”中阅读了它的描述,据我了解,它基本上允许EL1在EL0限制下进行内存访问。
该功能的应用是什么?
这是否意味着使用内核错误使内核将数据写入错误地址的攻击变得更加困难?
考虑到通常有多个进程同时运行,LDTR 如何知道要使用哪个页表转换?或者这些限制是否涉及与页表上指定的权限无关的其他类型的权限?
我可以使用 64 位寄存器,例如:
#include <assert.h>
#include <inttypes.h>
int main(void) {
uint64_t io = 1;
__asm__ (
"add %[io], %[io], 1;"
: [io] "+r" (io)
:
:
);
assert(io == 2);
}
Run Code Online (Sandbox Code Playgroud)
它编译和反汇编:
aarch64-linux-gnu-gcc -ggdb3 -o main.out main.c
gdb-multiarch -batch -ex 'disassemble/rs main' main.out
Run Code Online (Sandbox Code Playgroud)
按预期到 64 位寄存器:
6 __asm__ (
0x0000000000000744 <+16>: a0 0f 40 f9 ldr x0, [x29, #24]
0x0000000000000748 <+20>: 00 04 00 91 add x0, x0, #0x1
0x000000000000074c <+24>: a0 0f 00 f9 str x0, [x29, #24]
Run Code Online (Sandbox Code Playgroud)
如何改用 …
当我遇到MOVZ时,我正在使用反汇编程序,这有点困惑,因为我以前只使用过MOV。
当然,ARMv8 ISA手册解释了所有详细信息,并且MOV是其他三个别名的别名,具体取决于上下文,但是也许有人可以在此处提供一些基本原理,并提供具体示例以加快学习过程。
在 gem5-20 中,我可以使用以下命令构建 m5 实用程序。
\nscons build/<arch>/out/m5\nRun Code Online (Sandbox Code Playgroud)\n但实际上我不知道如何将 M5 链接到我的 C++ 代码。
\n本文档最后提到了一些必要的操作,但我希望得到更具体的指导。\n http://www.gem5.org/documentation/general_docs/m5ops/ \n有人做过吗,请帮助我。\ n谢谢!\n祝愿!
\n