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.

[参考译文] 编译器/AM6548:带 GCC 的 Cortex A53上的指针分配问题

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/903716/compiler-am6548-pointer-assignment-problem-on-cortex-a53-with-gcc

器件型号:AM6548

工具/软件:TI C/C++编译器

尊敬的支持团队:

我们在 ARM Cortex A53上遇到指针问题。

问题如下:分配指针值时、执行的代码返回64位交换指针。

       u8_g_tmp_ptr=(u8_t *) gFgNrtIdnValues.MACAddr.pData;

例如、当指针为0x000012345678时、  u8_g_tmp_ptr 将变为0x12345678000000。

我们在下面的屏幕截图中捕获错误。

pData 是一个空指针。

typedef 结构体 tagELEMENTDATA

 word_a  wLen;                   //<元素的实际长度

 word_a  wMaxLen;                //<元素的最大长度

 void    *pData;                 //<指向元素数据的指针

}ELEMENTDATA;                      //<结构#tagELEMENTDATA 的类型定义

您能否检查这是否是错误、或者我们是否需要以其他方式使用它。

此致、

 Thomas

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

    我想看看编译器生成的汇编代码。  从命令行运行...

    % arm-none-eabi-objdump -drwS final_execute.out > disassembly.txt 

    然后将生成的文本文件附加到下一个帖子。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    这是提取的段。

    if (xstrncmp ((char *)&ptr[0x2C]、(char *) UCC_TEST_MSG_ID、xstrlen (UCC_TEST_MSG_ID))= 0)
    8007a288:f9401ba0 LDR x0、[X29、#48]
    8007a28c:9100b013添加 x19、x0、#0x2C
    8007a290:58000b00 LDR x0、8007a3f0
    8007a294:97fe91b0 BL 8001e954
    8007a298:12003c00和 W0、W0、#0xFFFF
    8007a29c:2a0003e1 mov W1、W0
    8007a2a0:58000a80 LDR x0、8007a3f0
    8007a2a4:2a0103e2 mov w2、w1
    8007a2a8:aa0003e1 mov x1、x0
    8007a2ac:aa1303e0 mov x0、x19
    8007a2b0:97fe920a BL 8001ead8
    8007a2b4:7100001f CMP W0、#0x0
    8007a2b8:54000641 b.ne 8007a380 // b.any

    U8_g_tmp_ptr=/*(u8_t *)&gFgNrtIdnValues.bArrMACAddr[0];*/
    (U8_t *) gFgNrtIdnValues.MACAddr.pData;
    8007a2bc:580009e0 LDR x0、8007a3f8
    8007a2c0:b9400401 LDR W1、[x0、#4]
    8007a2c4:b9400800 LDR W0、[x0、#8]
    8007a2c8:d3607c00 LSL x0、x0、#32
    8007a2cc:aa010000 Orr x0、x0、x1
    8007a2d0:aa0003e1 mov x1、x0
    U8_g_tmp_ptr=/*(u8_t *)&gFgNrtIdnValues.bArrMACAddr[0];*/
    8007a2d4:58000960 LDR x0、8007a400
    8007a2d8:f9000001 str x1、[x0]
    对于(int i= 2;i < 8;i++)// MAC:dest。 =>发送和发送到主设备
    8007a2dc:52800040 mov W0、#0x2 //#2
    8007a2e0:b9004fa0 str W0、[X29、#76]
    8007a2e4:14000018 b 8007a344

    ptr [i]= ptr [i+6];
    8007a2e8:b9804fa0 ldersw x0、[X29、#76]
    8007a2ec:91001800添加 x0、x0、#0x6
    8007a2f0:f9401ba1 LDR x1、[X29、#48]
    8007a2f4:8b000021添加 x1、x1、x0
    8007a2f8:b9804fa0 ldersw x0、[X29、#76]
    8007a2fc:f9401ba2 LDR x2、[X29、#48]
    8007a300:8b000040添加 x0、x2、x0
    8007a304:39400021 ldrb W1、[x1]
    8007a308:39000001 strb W1、[x0]
    ptR[i+6]=* u8_g_tmp_ptR++;

    此致、  

     Thomas

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

    汇编代码看起来正确。  但是、我在 ARM 汇编方面的专业知识比我想的要少。  因此、我仍然希望向适当的团队提交错误。  遗憾的是、在 GCC ARM 编译器的支持下、最近发生了变化。  我正在询问将此错误归档到何处。

    谢谢、此致、

    乔治

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

    假设您使用 Processor SDK 随附的 GCC ARM 编译器。  它有一个类似的位置

    C:\ti\gcc-linaro-7.2.1-2017.11-i686-mingw32_Aarch64-elf

    请收集测试案例、然后我很乐意将其提交给 Linaro 进行分析。

    对于包含问题指针分配的源文件,请按以前的方式进行编译,但添加以下选项:-E -o name_of_file.txt。  它会对文件进行预处理、并将其写入使用-o 选项命名的文件中。  将该文件附加到下一个帖子。

    仅使用--version 选项运行编译器并显示输出。

    显示如何在问题源文件上调用编译器。 请复制并粘贴文本、不要使用屏幕截图。

    如果您不愿意发布这些详细信息、欢迎您将其私下发送给我。

    谢谢、此致、

    乔治