gpt4 book ai didi

gem5 - 如何在 se 模式下使用 gem5 中的 m5ops,例如 m5_exit 和 m5_dump_stats

转载 作者:行者123 更新时间:2023-12-05 07:15:12 25 4
gpt4 key购买 nike

我知道这是一个微不足道的问题,但我在 gem5 中运行 m5ops 时遇到困难,让我们以gem5提供的m5-exit.c文件为例,在测试程序中,我将如何编译它并将其链接到文件m5op_x86.S

目前这是我编译和链接它的方式:

gcc m5-exit.c -I ~/Desktop/gem5_86/gem5/include -o test ~/Desktop/gem5_86/gem5/util/m5/m5op_x86.S

我得到的错误:

/tmp/ccXsGX3d.o: relocation R_X86_64_16 against undefined symbol `M5OP_ARM' can not be used when making a PIE object; recompile with -fPIC

我所在的目录是:

gem5/tests/test-progs/m5-exit/src

m5-exit.c 的代码来自 gem5 目录 found here

最佳答案

这是一份副本:How to use m5 in gem5-20这在我的另一个答案中被删除了,因为我之前的仅 DRY 链接答案被删除,随后是不成功的(虽然正确,但没有足够的用户关心)欺骗关闭尝试。

在 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

与:

主.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

但在实践中,我往往就是对这个业务没有耐心,所以就胡作非为,直接加raw assembly as shown here 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")

更多一般的 m5op 信息也可以在以下位置找到:What are pseudo-instructions for in gem5?

在 Ubuntu 20.04 上测试。

关于gem5 - 如何在 se 模式下使用 gem5 中的 m5ops,例如 m5_exit 和 m5_dump_stats,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59649238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com