工具/软件:TI C/C++编译器
缺陷报告指出:'VAR1'和'var2'显示在单个寄存器中
为了更好地理解此缺陷的含义、我希望获得更多信息、特别是测试案例的详细信息、其中包括 "var1"和"var2"。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
缺陷报告指出:'VAR1'和'var2'显示在单个寄存器中
为了更好地理解此缺陷的含义、我希望获得更多信息、特别是测试案例的详细信息、其中包括 "var1"和"var2"。
我将自己的一个简单测试案例放在一起、看不到缺陷所指的问题。
拆卸:
141 {
TestDefect():
0000561c: E92D407F 推送 {r0、R1、R2、R3、R4、 R5、R6、r14}
142 unsigned long long var1 = 0xa9a9a9a9565656LL;
00005620: E28FCF5D 添加 R12、PC、#0x174
00005624: E89C000C LDM R12、{R2、R3}
00005628: E88D000C STM R13、{R2、R3}
143 unsigned long long var2 = 1LL;
0000562c: E28DC008 添加 R12、R13、#8
00005630: E3A02000 mov R2、#0
00005634: E3A03001 MOV R3、#1
00005638: E88C000C STM R12、{R2、R3}
145 var1 = var1 + var2;
0000563c: E28DC008 添加 R12、R13、#8
00005640: E89D0018 LDM R13、{R3、R4}
00005644: E89C0060 LDM R12、{R5、R6}
00005648: E0962004 添加 了 R2、R6、R4
0000564c: E0A51003 ADC R1、R5、R3
00005650: E88D0006 STM R13、{R1、R2}
147 var1 = var1 + 2LL;
00005654: E89D000C LDM R13、{R2、R3}
00005658: E3A0C000 MOV R12、#0
0000565c: E3A01002 MOV R1、#2
00005660: E0911003 添加 了 R1、R1、R3
00005664: E0AC0002 ADC r0、R12、R2
00005668: E88D0003 STM R13、{r0、r1}
148 }
.asm
测试定义:
;*------------------------------------------------------------ *
dwcfi CFA_offset、0
STMFD SP!、{A1、A2、A3、A4、 V1、V2、V3、LR};[DPU_V7R4_PIPE0]
dwcfi CFA_offset、32
dwcfi save_reg_to _mem、14、-4
dwcfi save_reg_to _mem、6、-8
dwcfi save_reg_to _mem、5、-12
dwcfi save_reg_to _mem、4、-16
dwcfi save_reg_to _mem、3、-20
dwcfi save_reg_to _mem、2、-24
dwcfi save_reg_to _mem、1、-28
dwcfi save_reg_to _mem、0、-32
$C$DW$29 .dwtag DW_TAG_variable
dwattr $C$DW$29、DW_AT_NAME ("var1")
dwattr $C$DW$29、DW_AT_TI_symbol_name ("var1")
dwattr $C$DW$29、DW_AT_TYPE (*$C$DW$T$15)
dwattr $C$DW$29、DW_AT_LOCATION [DW_OP_Breg13 0]
$C$DW$30 .dwtag DW_TAG_variable
dwattr $C$DW$30、DW_AT_NAME ("var2")
dwattr $C$DW$30、DW_AT_TI_symbol_name ("var2")
dwattr $C$DW$30、DW_AT_TYPE (*$C$DW$T$15)
dwattr $C$DW$30、DW_AT_LOCATION [DW_OP_Breg13 8]
.dwpsn 文件"../main.c"、行142、列29、is_stmt、ISA 2.
ADR V9,$C$LL1 ;[DPU_V7R4_PIPE0]|142|
LDMIA V9、{A4、A3} ;[DPU_V7R4_PIPE0]|142|
STMIA SP、{A4、A3} ;[DPU_V7R4_PIPE0]|142|
.dwpsn 文件"../main.c"、第143行、第29列、is_stmt、ISA 2.
添加 V9、SP、#8 ;[DPU_V7R4_PIPE0]|143|
MOV A3、#0 ;[DPU_V7R4_PIPE0]|143|
MOV A4、#1 ;[DPU_V7R4_pipe1]|143|
STMIA V9、{A4、A3} ;[DPU_V7R4_PIPE0]|143|
.dwpsn 文件"../main.c"、行145、列5、is_stmt、ISA 2.
添加 V9、SP、#8 ;[DPU_V7R4_PIPE0]|145|
LDMIA SP、{V1、A4} ;[DPU_V7R4_PIPE0]|145|
LDMIA V9、{V3、V2} ;[DPU_V7R4_PIPE0]|145|
添加 A3、V3、V1 ;[DPU_V7R4_PIPE0]|145|
ADC A2、V2、A4 ;[DPU_V7R4_PIPE0]|145|
STMIA SP、{A3、A2} ;[DPU_V7R4_PIPE0]|145|
.dwpsn 文件"../main.c"、行147、列5、is_stmt、ISA 2.
LDMIA SP、{A4、A3} ;[DPU_V7R4_PIPE0]|147|
MOV V9、#0 ;[DPU_V7R4_PIPE0]|147|
MOV A2、#2 ;[DPU_V7R4_pipe1]|147|
添加 A2、A2、A4 ;[DPU_V7R4_PIPE0]|147|
ADC A1、V9、A3 ;[DPU_V7R4_PIPE0]|147|
STMIA SP、{A2、A1} ;[DPU_V7R4_PIPE0]|147|
.dwpsn 文件"../main.c"、第148行、第1列、IS_stmt、ISA 2
我缺少什么?
问题出在编译器发出的 DWARF 调试信息中。 DWARF 调试信息对代码的执行没有影响。 它被调试器(如 CCS)用于诸如将地址与一行代码或变量相关联的任务。
当变量被分配给寄存器对时、就会出现此问题。 DWARF 调试信息应该指定对中的两个寄存器、但它只指定一个。 这在您尝试的特定情况下不会发生、因为没有变量分配给寄存器。
CCS 被更改以解决调试信息中缺少信息的问题、因此用户永远不会看到此错误的影响。
谢谢、此致、
乔治