工具/软件:TI C/C++编译器
您好!
在测试 CGT 8.3.4期间、我们发现、该特定代码开始成为我们内部问题的根本原因。 调查显示,问题稍微复杂一些。 我们的代码使用了不正确的值、但 CGT7编译器生成了额外的错误代码、该代码涵盖了此问题、并由 CGT 8.3.4揭示。 我们目前没有在此处发布任何本地复制、因此我们必须发布部分 ASM 受影响的代码:
- CGT 7 (错误代码-.const 数据被初始化;错误发生在编译+链接阶段、因为它位于".const"区域):
.sect ".const"
.align 8.
.elfsym $P$T0$1、SYM_SIZE (16)
$P$T0$1:
.bits 13、8 ;$P$T0$1.emCores._u8[0]@ 0
.space 15.
- CGT 8 (正确代码):
.sect ".const:$P$T0$1"
.align 8.
.elfsym $P$T0$1、SYM_SIZE (16)
$P$T0$1:
.space 8.
.bits 0xd、32
;$P$T0$1.emPriority @ 64
0、 32位
出现问题的 C++架构如下所示(无法粘贴原始代码、因为它是我们公司的 IP):
//文件1 - C h 文件
#define size 64
typedef uint32_t intValueType;
typedef union maskType maskType;
union maskType
{
uint8_t _u8[size / 8];
uint16_t _U16[size / 16];
uint32_t _u32[size / 32];
uint64_t _t 64}
;uint64_t
//文件2 - C++ HPP 文件
命名空间名称空间1
{
命名空间名称空间2
{
struct SInternalStruct
maskType 值1;
intValueType 值2;
};
}
//
文件3 cpp
void Fun ()
{
maskType 掩码;
//计算掩码
::namespace1::::namespace2::SInternalStructconfig ={ mask,enumValueNonZero};
//此处为诊断添加的调试输出显示,config 中没有填充“enumValueNonZero”值,而是0。
//从系统的角度来看、0的值是所需的值(由 CGT7错误传递)、
//但从代码角度传递非零值(通过 CGT8正确传递),
// CGT8显示了错误,该错误与 CGT7相反,已正确初始化配置
。}
我们报告此问题、因为我们不知道、如果 CGT8中存在相同的问题、但这次没有意外出现。 如果 CGT8中也存在问题、请包含 RSA 内在函数的可能修复(我必须始终提醒它、因为它对我们来说非常重要)。
此致、
ZD