如何在 gem5-20 中使用 m5 将其与我自己的 C++ 程序链接起来?
How to use m5 in gem5-20 linking it with my own C++ program?
在 gem5-20 中,我可以通过使用构建 m5 实用程序。
scons build/<arch>/out/m5
但实际上我不知道如何 link M5 到我的 C++ 代码。
本文最后提到了一些必要的操作,希望得到更具体的指导。
http://www.gem5.org/documentation/general_docs/m5ops/
有没有人做过,请帮助我。
谢谢!
祝福!
在 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
与:
main.c
#include <gem5/m5ops.h>
int main(void) {
m5_exit(0);
}
或者对于 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
也可以在以下位置找到官方示例:gem5-resources/src/simplem5_exit.c with instructions at on the README。
这里是一个使用 m5_exit_addr
变体的变体,它使用内存版本的 m5op 而不是指令,它也可以从 KVM 使用,例如:https://gem5-review.googlesource.com/c/public/gem5/+/31219/7
但在实践中,我经常对这个业务没有耐心,所以我就胡作非为,直接添加原始组件as shown here muahahaha e.g.:
#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")
更一般的 m5op 信息也可以在以下位置找到:
相关:
测试于 Ubuntu 20.04.
在 gem5-20 中,我可以通过使用构建 m5 实用程序。
scons build/<arch>/out/m5
但实际上我不知道如何 link M5 到我的 C++ 代码。
本文最后提到了一些必要的操作,希望得到更具体的指导。 http://www.gem5.org/documentation/general_docs/m5ops/ 有没有人做过,请帮助我。 谢谢! 祝福!
在 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
与:
main.c
#include <gem5/m5ops.h>
int main(void) {
m5_exit(0);
}
或者对于 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
也可以在以下位置找到官方示例:gem5-resources/src/simplem5_exit.c with instructions at on the README。
这里是一个使用 m5_exit_addr
变体的变体,它使用内存版本的 m5op 而不是指令,它也可以从 KVM 使用,例如:https://gem5-review.googlesource.com/c/public/gem5/+/31219/7
但在实践中,我经常对这个业务没有耐心,所以我就胡作非为,直接添加原始组件as shown here muahahaha e.g.:
#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")
更一般的 m5op 信息也可以在以下位置找到:
相关:
测试于 Ubuntu 20.04.