如何在 gem5-20 中使用 m5 将其与我自己的 C++ 程序链接?

Siq*_* Fu 1 gem5

在 gem5-20 中,我可以使用以下命令构建 m5 实用程序。

\n
scons build/<arch>/out/m5\n
Run Code Online (Sandbox Code Playgroud)\n

但实际上我不知道如何将 M5 链接到我的 C++ 代码。

\n

本文档最后提到了一些必要的操作,但我希望得到更具体的指导。\n http://www.gem5.org/documentation/general_docs/m5ops/ \n有人做过吗,请帮助我。\ n谢谢!\n祝愿!

\n

Cir*_*lli 7

在 gem5 046645a4db646ec30cc36b0f5433114e8777dc44 上我可以这样做:

scons -C util/m5 build/x86/out/m5
gcc -static -I include -o main.out main.c util/m5/build/x86/out/libm5.a
Run Code Online (Sandbox Code Playgroud)

和:

主程序

#include <gem5/m5ops.h>

int main(void) {
    m5_exit(0);
}
Run Code Online (Sandbox Code Playgroud)

或者对于 ARM:

sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
scons -C util/m5 build/aarch64/out/m5
aarch64-linux-gnu-gcc -static -I include -o main.out main.c \
  util/m5/build/aarch64/out/libm5.a
Run Code Online (Sandbox Code Playgroud)

还可以在以下位置找到官方示例:gem5-resources/src/simplem5_exit.c ,并在README 中找到说明。

这是一种使用m5_exit_addr变体的方法,它使用 m5op 的内存版本而不是指令,也可以从 KVM 使用,例如: https: //gem5-review.googlesource.com/c/public/gem5/+/ 31219/7

但在实践中,我常常对这项业务没有耐心,所以我只是行为不端,直接添加原始程序集,如下所示muahahaha 例如:

#if defined(__x86_64__)

#define LKMC_M5OPS_CHECKPOINT __asm__ __volatile__ (".word 0x040F; .word 0x0043;" : : "D" (0), "S" (0) :)
#define LKMC_M5OPS_DUMPSTATS  __asm__ __volatile__ (".word 0x040F; .word 0x0041;" : : "D" (0), "S" (0) :)

#elif defined(__aarch64__)

#define LKMC_M5OPS_CHECKPOINT __asm__ __volatile__ ("mov x0, 0; mov x1, 0; .inst 0xFF000110 | (0x43 << 16);" : : : "x0", "x1")
#define LKMC_M5OPS_DUMPSTATS  __asm__ __volatile__ ("mov x0, 0; mov x1, 0; .inst 0xFF000110 | (0x41 << 16);" : : : "x0", "x1")
Run Code Online (Sandbox Code Playgroud)

更一般的 m5op 信息也可以在以下位置找到:Gem5 中的伪指令是什么?

有关的:

在 Ubuntu 20.04 上测试。