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。
谢谢、此致、
乔治