问题描述
我通过运行自定义 C 可执行文件从 Gem5-Arm 生成了跟踪并得到以下输出:
2000: system.mem_ctrls.dram: Address: 1088 Rank 0 Bank 0 Row 0
46250: system.mem_ctrls.dram: number of read entries for rank 0 is 0
79000: system.cpu: T0 : 0x1044c @_start : mov fp,#0 : IntAlu : D=0x0000000000000000
85000: system.cpu: T0 : 0x10450 @_start+4 : mov lr,#0 : IntAlu : D=0x0000000000000000
121500: system.mem_ctrls.dram: number of read entries for rank 0 is 0
87000: system.cpu: T0 : 0x10454 @_start+8 : ldr r1,[sp] #4
87000: system.cpu: T0 : 0x10454 @_start+8. 0 : ldr r1,[sp] #4 : MemRead : D=0x0000000000000008 A=0xbefffe50
154000: system.cpu: T0 : 0x10454 @_start+8. 1 : addi_uop sp,sp,#4 : IntAlu : D=0x00000000befffe54
156000: system.cpu: T0 : 0x10458 @_start+12 : mov r2,sp : IntAlu : D=0x00000000befffe54
158000: system.cpu: T0 : 0x1045c @_start+16 : str r2,[sp,#-4]!
158000: system.cpu: T0 : 0x1045c @_start+16. 0 : str r2,#-4]! : MemWrite : D=0x00000000befffe54 A=0xbefffe50
160000: system.cpu: T0 : 0x1045c @_start+16. 1 : subi_uop sp,#4 : IntAlu : D=0x00000000befffe50
162000: system.cpu: T0 : 0x10460 @_start+20 : str r0,#-4]!
162000: system.cpu: T0 : 0x10460 @_start+20. 0 : str r0,#-4]! : MemWrite :
我还通过使用 GCC-Arm 交叉编译器运行 C 代码生成了反汇编,下面是输出。
disassembly of section .init:
00010158 <_init>:
10158: e92d4008 push {r3,lr}
1015c: eb0000c9 bl 10488 <call_weak_fn>
10160: e8bd8008 pop {r3,pc}
disassembly of section .text:
00010170 <backtrace_and_maps>:
10170: e3500001 cmp r0,#1
10174: d3a01000 movle r1,#0
10178: c2011001 andgt r1,r1,#1
1017c: e3510000 cmp r1,#0
10180: 012fff1e bxeq lr
10184: e92d47f0 push {r4,r5,r6,r7,r8,r9,sl,lr}
10188: e24ddc05 sub sp,#1280 ; 0x500
比较两个输出文件时,我发现 gem5 有一组不同的指令。
例如,我在GCC trace中没有看到任何movle指令,这是存在于GCC trace中的,为什么会这样?
gem5中如何实现指令行为?
它如何转换微操作中的指令?
以及 gem5 使用的 ARMv8-A 内核是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)