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.

[参考译文] 编译器/ARM-CGT:SDSCM00008685附加信息

Guru**** 2952510 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/957048/compiler-arm-cgt-sdscm00008685-additional-information

器件型号:ARM-CGT

工具/软件: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 被更改以解决调试信息中缺少信息的问题、因此用户永远不会看到此错误的影响。   

    谢谢、此致、

    乔治