将 m5ops.h 链接到 C 项目

Linking m5ops.h to a C project

我有一个 C 应用程序正在使用 Gem5 操作中的一个函数,称为 "m5_dumpreset_stats()"。

所以,我做了以下,我包含了这个函数的头文件:

#include "../gem5-stable/util/m5/m5op.h"

然后在我的源文件中调用函数:

void foo()
{
   m5_dumpreset_stats(0,0);
   /* For loop */
   m5_dumpreset_stats(0,0);
}

为了构建我的项目,我使用了 Makefile:

CC=arm-linux-gnueabi-gcc
CFLAGS=-g -c -Wall -O3 -mfpu=neon
LDFLAGS=-static

SOURCES=$ foo.c
OBJECTS=$(SOURCES:.c=.o)

EXECUTABLE=foo

all: $(TASKMAP) $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS) 
$(CC) $(LDFLAGS) $(OBJECTS) -lm -o $@

.c.o:
    $(CC) $(CFLAGS) $< -lm -o $@

 clean: 
    rm -fr $(OBJECTS) $(EXECUTABLE)

我的第一个猜测是我必须 link 使用 Makefile 的库,但老实说,我不知道怎么做?有人可以告诉我正确的方法吗?

P.S : m5_dumpreset_stats(delay,period): 在延迟纳秒内将模拟统计信息保存并重置到文件中;每纳秒重复一次。

由于您的 header 位于通常不被搜索的目录中,因此您的图书馆也可能如此。所以你需要两个标志:-l 引用库和 -L 添加其他库目录进行搜索。

如果我的图书馆 libm5op.a 位于 "../gem5-stable/util/m5",我可能会这样做:

$(CC) $(LDFLAGS) $(OBJECTS) -lm -L"../gem5-stable/util/m5" -lm5op -o $@

或一些适合您的情况。

感谢您的贡献。这是我的解决方案: 看到我正在使用 ARM 内核进行模拟我使用 Makefile.arm 生成一个名为 "m5" 的库然后我必须在我自己的 Makefile 中进行以下更改:

$(EXECUTABLE): $(OBJECTS) 
 $(CC) $(LDFLAGS) $(OBJECTS) -lm -L"/home/anoir/gem5-stable/util/m5" -lm5 -o $@

并且我将包含在我的头文件中以这样调用 m5op.h

  #include "/home/anoir/gem5-stable/util/m5/m5op.h"

最后,我在模拟器中对其进行了测试,并检查了统计文件并完美运行,谢谢你。

gem5 20更新程序

直接对程序集进行硬编码

有时,破解它并添加内联程序集会更容易。例如。在 aarch64 上,要转储您可以执行的统计信息:

mov x0, #0; mov x1, #0; .inst 0xFF000110 | (0x41 << 16);

其中一些说明的列表is available here and how you can deduce them on your own is explained here