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++编译器
对于不同工作区中的同一代码库、链接器输出为何会不同(尤其是.cinit 段)?
.cinit 0 82337c4c 000028f4
82337c4c 00001da6 (.cinit、.fardata.load)[加载映像、压缩= rle]
823399f2 00000002 --hole --[填充= 0]
823399f4 00000a22 (.cinit.JPEGIENC_TI_dSect1.load)[加载图像、压缩= RLE]
8233a416 00000002 --hole --[填充= 0]
8233a418 00000081 (.cinit、.data.load)[加载映像、压缩= rle]
8233a499 00000003 --hole --[填充= 0]
8233a49c 00000012 (.cinit、.data:IRAM.load)[加载映像、压缩= RLE]
8233a4ae 00000002 --hole --[填充= 0]
8233a4b0 0000000c (_TI_handler_table)
8233a4bc 0000000b (.cinit.data:未缓存:PcibxDriver.load)[加载映像、压缩= rle]
8233a4c7 00000001 --hole --[填充= 0]
8233a4c8 00000008 (.cinit、.bss.load)[加载映像、压缩= zero_init]
8233a4d0 00000008 (.cinit.data:dsptrace.load)[加载映像、压缩= zero_init]
8233a4d8 00000008 (.cinit.data:IRAM_app.load)[加载映像、压缩= zero_init]
8233a4e0 00000008 (.cinit.far.load)[加载映像、压缩= zero_init]
8233a4e8 00000008 (.cinit.heap_DDR_cached_local.load)[加载映像、压缩= zero_init]
8233a4f0 00000050 (_TI_cinit_table)
.cinit 0 82337c6c 000028f0
82337c6c 00001da2 (.cinit、.fardata.load)[加载映像、压缩= rle]
82339a0e 00000002 --hole --[填充= 0]
82339a10 00000a22 (.cinit.JPEGIENC_TI_dSect1.load)[加载图像、压缩= RLE]
8233a432 00000002 --hole --[填充= 0]
8233a434 00000081 (.cinit.data.load)[加载映像、压缩= rle]
8233a4b5 00000003 --hole --[填充= 0]
8233a4b8 00000011 (.cinit.data:IRAM.load)[加载映像、压缩= RLE]
8233a4c9 00000003 --hole --[填充= 0]
8233a4cc 0000000c (_TI_handler_table)
8233a4d8 0000000b (.cinit.data:未缓存:PcibxDriver.load)[加载映像、压缩= RLE]
8233a4e3 00000001 --hole --[填充= 0]
8233a4e4 00000008 (.cinit、.bss.load)[加载映像、压缩= zero_init]
8233a4ec 00000008 (.cinit.data:dsptrace.load)[加载映像、压缩= zero_init]
8233a4f4 00000008 (.cinit.data:IRAM_app.load)[加载映像、压缩= zero_init]
8233a4fc 00000008 (.cinit.far.load)[加载映像、压缩= zero_init]
8233a504 00000008 (.cinit.heap_DDR_cached_local.load)[加载映像、压缩= zero_init]
8233a50c 00000050 (_TI_cinit_table)
我使用的是 CCS 5.3.0和 C6000编译器工具7.4.1
虽然可以看到.cinit 中的更多差异、但这些差异距离问题的根本原因更远。 例如、.cinit 从其他地址开始。 这意味着较低地址的其他段必须更短。 通过压缩.fardata 和.data:IRAM 等初始化段来创建.cinit 段。 这两个段压缩到不同的长度。
在两个构建的映射文件中、请仔细检查.fardata 和.data:IRAM 段。 我怀疑您会看到差异。 这些差异更接近问题的根本原因。
谢谢、此致、
乔治
现在、忽略.cinit 中的差异。 关注.text 中的差异。 我怀疑这更接近根本原因。
Smriti Verma 说:对于.text 段,差异不是一致的 i.e;具有不同大小的函数因编译而异。
这很奇怪。 我无法想象是什么原因造成了这种情况。 选择一个您已看到更改大小的函数。 差异越大越好。 对于包含该函数 的源文件、请按照文章如何提交编译器测试用例中的说明提交测试用例。 此外、指示更改大小的函数的名称。 我不知道我将仅从这个测试案例中找到根本原因。 但我相信它会推动调查。
谢谢、此致、
乔治
我收到了您通过私人渠道发送的测试案例。 谢谢你。
源代码没有什么解释函数在不同构建之间更改大小的原因。
但我确实注意到您使用的是非常旧的编译器版本7.4.2。 该编译器中的错误中包括 该线程中讨论的错误。 简而言之、编译器临时文件名可能不唯一。 在由于并行 make、大量编译同时发生的情况下、这可能会导致奇怪的问题。 我不知道这是否是您问题的原因。 但是、升级编译器是值得的、只是为了确保我们不会遇到此问题。
该错误的修复程序首先出现在版本7.4.22中。 但是、由于您必须进行升级、您也可以获得最后的7.4.x 版本、即7.4.24。 请注意、所有7.4.x 版本之间的唯一区别是错误修复。 其他所有内容都是相同的。
因此、我建议您从 这个网站获得版本7.4.24。
谢谢、此致、
乔治
因为已经有一段时间了,我想你已经解决了这个问题。 非常感谢您的解决。
谢谢、此致、
乔治