3

我有一个 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)

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

PS : m5_dumpreset_stats(delay,period): 以延迟纳秒保存和重置模拟统计到文件;每隔几纳秒重复一次。

4

3 回答 3

2

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

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

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

或一些适合您的情况。

于 2016-08-14T18:09:17.770 回答
1

感谢您的贡献。这是我的解决方案:看到我正在使用 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"

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

于 2016-08-14T21:11:41.910 回答
0

gem5 20 更新程序

gem5-20中如何使用m5

直接硬编码程序集

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

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

此处提供了其中一些说明的列表,此处说明了如何自行推断它们。

于 2018-08-24T10:38:48.110 回答