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.

[参考译文] TMS320F28386S:链接器输出中的无关数据

Guru**** 2390735 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1296799/tms320f28386s-extraneous-data-in-linker-output

器件型号:TMS320F28386S
主题中讨论的其他器件:C2000WARE

您好!

我将代码从379D 项目移植到386s、并告诉链接器生成 TI-TXT 输出文件。  在检查该文件时、我会看到预期看到的部分。  但我也看到另一部分我无法解释。  它包含文本(可能是 Unicode?) 不是代码的一部分。  它还包含一个类名、该类名是源代码的一部分、但不应出现在构建过程的输出中。  全部都在当前映射到闪存的.const 段中。  TI-TXT 文件的片段如下所示。  导致提供额外信息的原因是什么?  是否需要使用某项设置将其从最终输出中删除?

谢谢!

 

@

4e 00 31 00 30 00 5F 00 5F 00 63 00 78 00

61 00 62 00 69 00 76 00 31 00 32 00 33 00 5F 00

5F 00 66 00 75 00 6E 00 64 00 61 00 6D 00 65 00

6e 00 74 00 61 00 6C 00 5F 00 74 00 79 00 70 00

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

    您好!  

    您是否知道您看到但不希望看到的段名?  

    您正在使用的编译器选项和编译器版本是什么?

    将此查询转发给编译器团队、以更好地帮助您。

    此致

    西达尔特

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

    尊敬的 Siddarth:

                   代码中没有会生成该数据的段。  我不知道它可能是什么。  我们将使用编译器版本 TI v20.2.5.LTS。  编译器标志如下:

    -v28 -ml -mt --cla_support=cla2 --float_support=fpu64 --idiv_support=idiv0 --tmu_support=tmu0 --vcu_support=vcrc --include_path= --include_path= -g --diag_warning=225 --diag_wrap =off --display_error_number --gen_func_subsections=on --abi=eabi --asm_listing

    谢谢!

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

    Ed 您好、

    在调试会话中运行器件时、您是否能够在"Memory Browser"窗口中查看该存储器? 您可以查看发生此情况的地址吗?

    Unknown 说:
    它还包含一个类名,该类名是源代码的一部分,但不应出现在构建过程的输出中。

    您能解释一下吗? 我不确定您所说的内容不应该出现在构建过程的输出中。

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

    您好、Omer:

    我发现了这个问题、因为我设置链接器来生成 TI-TXT 输出。  在该文件中、我将看到类名称以及其他内容。  我在第一个帖子中提供的代码片段包含其他内容之一。  我没有包含足够大的内容来显示类名称(类型)。  但我包含的部分转换为 ASCII、如下所示:

    N.x.x.._.C.x.x.a.i.i.v.1.2.3._.a.n.a.d...M.E.a.T.l._.t.y.p.

    我们的代码不在运行时结果中使用任何类名称或任何其他内容、因此、它们不应显示在加载到闪存中的最终映像中。

    这有什么用吗?

    谢谢!

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

    Ed 您好、

    根据我的理解、是编译代码、但出于某种原因、还有一个额外的部分用于显示您上面引用的值。 此数据显示在"@ "(我想知道这是什么地址,而不是一个名称),并且包含一个不存在的类名(我不相信我知道其名称, 我要确信的是、这是您已经验证过的某些代码不在 driverlib 中或 C2000Ware 中的任何位置)。 这不会影响代码的功能、但您需要尝试了解为什么创建此节、以及是否可以删除它、对吗?

    不幸的是、我这边的问题是、我不知道要在哪里插入这个内存、或者该类是否确实存在、因为我 没有在 C2000Ware 中查找的名称(如果是从那里提取的名称)。  如果您可以提供两个 TI_TXT 输出、这样我就可以完全对它们进行比较、但我知道您是否有机密代码/数据(在这种情况下、您可以尝试在规模较小的项目上重新创建)。

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

    您好、Omer:

    我可以给你一些更多的信息作为私人信息。  但我看不到实现它的方法。  我试图在你的照片上悬停,但一个私人消息不是选项之一。  是否有其他方法可以实现它?

    谢谢!

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

    我想你必须先创建一个朋友请求。

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

    好的。  我做到了这一点。

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

    好的、我们将离线处理此问题、一旦我们有可以公开发布的内容(供未来客户参考)、我将回复此帖子。

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

    从离线对话中,我确定文本信息在.const 段中。  我们的类的构造是这样的,它从具有纯虚拟方法的基类继承。  当我评论这些问题时、问题就消失了。  我检查了379D 项目中的等效部分、该项目使用相同的类而没有进行修改、并且我看不到其中的任何文本信息。  我看到符合预期的 V 类表条目。

    谢谢!

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

    Ed 您好、

    我发现了这个问题、因为我设置链接器来生成 TI-TXT 输出。

    严格地说、链接器不会生成 TI-TXT。 它生成链接的可执行文件、然后将该可执行文件提供给另一个工具以将其转换为 TI-TXT 输出。  链接完成后会生成一些文件、包括映射文件、这些文件显示构成每个输出段的原点输入段。  但是、似乎你已将此信息跟踪到可虚拟化构件中、包括用于函数名称信息的字符串。  因此问题仍然是、为什么这些字符串会被包括在内、因为它们会在.const 中占用存储器

    是否可以发布显示此问题的削减测试案例、以便我们可以编译和重现此问题?  我对生成的目标代码/可执行文件感兴趣、而不是 TI-TXT 格式的数据。  请按照 如何提交编译器测试用例一文中的说明进行操作

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

    您好、Alan!

                   我附上了 pp 文件、并将展示编译器版本的编译器选项粘贴在下方。  如果这样不起作用、我就把整个问题归结为一个我可以提交的非常简单的项目。

     

     e2e.ti.com/.../ChildClass.pp.txt

    "c:/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/bin/cl2000 -v28 -ml -mt --cla_support=cla2 - float_support=fpu64 --idiv_support=idiv0 --tmu_support=tmu0 --vcu_support=vcrc --include_path="C:/cppNameInTiTx"--include_path="C:/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_20.2.5.LTS/include  

    已完成建筑:"../ChildClass.cpp"

     

    谢谢!

     

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

    感谢您提供测试用例。  我以相同的方式构建它、只是添加了选项 -- src_interlist 。  此选项会保存生成的汇编文件。  它与源文件同名、扩展名更改为 .asm 。  此文件包含以下行...

    	.global	||_ZTS11CHILD_CLASS||
    	.sect	".const:.typeinfo:_ZTS11CHILD_CLASS"
    	.align	1
    	.elfsym	||_ZTS11CHILD_CLASS||,SYM_SIZE(14)
    ||_ZTS11CHILD_CLASS||:
    	.bits		0x31,16
    			; _ZTS11CHILD_CLASS[0] @ 0
    	.bits		0x31,16
    			; _ZTS11CHILD_CLASS[1] @ 16
    	.bits		0x43,16
    			; _ZTS11CHILD_CLASS[2] @ 32
    	.bits		0x48,16
    			; _ZTS11CHILD_CLASS[3] @ 48
    	.bits		0x49,16
    			; _ZTS11CHILD_CLASS[4] @ 64
    	.bits		0x4c,16
    			; _ZTS11CHILD_CLASS[5] @ 80
    	.bits		0x44,16
    			; _ZTS11CHILD_CLASS[6] @ 96
    	.bits		0x5f,16
    			; _ZTS11CHILD_CLASS[7] @ 112
    	.bits		0x43,16
    			; _ZTS11CHILD_CLASS[8] @ 128
    	.bits		0x4c,16
    			; _ZTS11CHILD_CLASS[9] @ 144
    	.bits		0x41,16
    			; _ZTS11CHILD_CLASS[10] @ 160
    	.bits		0x53,16
    			; _ZTS11CHILD_CLASS[11] @ 176
    	.bits		0x53,16
    			; _ZTS11CHILD_CLASS[12] @ 192
    	.bits		0,16
    			; _ZTS11CHILD_CLASS[13] @ 208
    

    除其他外、 .位 指令构成字符串 11通道_类 。  这是类类型信息的一部分。   

    根据这一点,从第一个帖子...

    Unknown 说:
    我要将代码从379D 项目移植到386s、并告诉链接器生成 TI-TXT 输出文件。  在检查该文件时、我会看到预期看到的部分。  但我也看到另一部分我无法解释。  它包含文本(可能是 Unicode?) 不是代码的一部分。  它还包含一个类名,该类名是源代码[/引号]的一部分

    ... 上一个编译不能包含此类型信息。  我无法解释这种区别。  我希望这两个版本都具有类型信息。

    请根据379D 项目提供一个测试用例、与您提供的最后一个测试用例类似。  我想、在构建它时、我不会看到类型信息。  我想解释为什么会发生这种情况。

    谢谢。此致、

    -乔治

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

    您好、George、

    很抱歉回复太晚了。  我们的电子邮件服务器正在拒绝入站电子邮件。  我轮询了、找到了您的响应。

    我将处理器更改为379D、并使用相同的结果进行重建。  类名称在 TI-TXT 文件中。  这不是连接器的问题、而是创建 TI-TXT 文件的工具的问题吗?

    我已经将这个归纳为两个项目、一个用于388D、一个用于379d。  也不应在其中包含我们的任何 IP。  如果需要帮助、我可以将它们压缩起来、然后将它们 PM 送给您。

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我把这个问题归结为两个项目,一个用于388D,一个用于379d

    请比较编译(而非链接)选项。  一次使用 --abi=eabi ,而另一个不是?

    谢谢。此致、

    -乔治

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

    您好、George、

    它们都使用--abi=eabi。  这很可能是预料之中的、因为当我为379D 制作第二个项目时、我复制了388D 项目并仅更改了 DSP。  因此、我 将设置更改为 COFF、现在我不再在379D 项目中的 TI-TXT 输出中看到类名称。

    据  

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

    返回上一页

    Unknown 说:
    我要将代码从379D 项目移植到386s

    我假设较旧的工程是使用较旧的 COFF ABI 构建的、而较新的工程是使用较新的 EABI 构建的。  每个 ABI 对 C++类型信息的处理方式不同。  都是这样吗?  此线程是否可以闭合?

    谢谢。此致、

    -乔治

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

    您好、George、

    这两个工程都会构建。  但在使用 EABI 的项目中、TI-TXT 文件包含大量文本信息、如类名、但这些信息不是可执行文件的一部分。  该信息的地址位于闪存空间中。  所以最重要的问题是、多余的信息会消耗闪存中的宝贵空间。

    为了继续调查、作为另一个实验、我尝试更改388D 项目以使用 COFF、并且还需要更改 FPU 和 div 设置。  但这也成功地从 TI-TXT 文件中删除了文本信息。  似乎 EABI 正在向闪存添加其他内容、或将其转换为 TI-TXT 格式的工具正在添加该闪存。

    这有什么用吗?

    谢谢!

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

    问题是、当您使用选项进行构建时、 --abi=eabi ,编译器始终会发出运行时类型标识(RTTI)信息。  这个 RTTI 出现在 .const 使得它变大。  为 .const 段通常分配给闪存。  这就是为什么你看到这样的问题...

    无关的信息在闪存中消耗宝贵的空间。

    根据您提交的测试案例、我提交了 EXT_EP-11597 来对此进行调查。  我们欢迎您通过这个链接来了解这一点。

    为了澄清、这个问题与连接器、十六进制实用程序、或者 TI-TXT 文件无关。

    谢谢。此致、

    -乔治

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

    好的。  我会密切关注这一点。 同时、我将返回到使用 COFF 文件、如果修复此问题、我会切换回 EABI。

    感谢您的帮助、