请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号: RM57L843
我正在使用一个需要计算 IP 校验和的程序、似乎 tiarmclang 编译器中有一个错误。 当我 在-os 下编译 bug-report.c(使用 ARM-CGT-CLANG 4.0.3.LTS) 时)时、会丢弃第 102 行和第 103 行:
fakehdr.zero = 0;
fakehdr.protocol = protocol;
也就是说、这些值永远不会存储到存储器中的偏移 8 和 9 中。 那么校验和计算的输出不正确。
在-O0 下编译会生成正确的输出(值存储到偏移 8 和 9 中)。
该错误似乎已在 3.2.3.LTS 与 4.0.0.LTS 之间的某个时间引入。 该错误在 5.0.STS 之前继续存在。
3.2.3.LTS:
84: 68d0 ldr r0, [r2, #12]
86: 2400 movs r4, #0
88: 6912 ldr r2, [r2, #16]
8a: f88d 1009 strb.w r1, [sp, #9]
8e: 4661 mov r1, r12
90: f88d 4008 strb.w r4, [sp, #8]
94: 9000 str r0, [sp]
96: fa9c f09c rev16.w r0, r12
9a: 9201 str r2, [sp, #4]
9c: f8ad 000a strh.w r0, [sp, #10]
a0: 4618 mov r0, r3
a2: f7ff fffe bl 0xa2 <checksum+0xa2> @ imm = #-4
4.0.0.LTS:
74: 68d0 ldr r0, [r2, #0xc]
76: ba4c rev16 r4, r1
78: 6912 ldr r2, [r2, #0x10]
7a: f8ad 400a strh.w r4, [sp, #0xa]
7e: e9cd 0200 strd r0, r2, [sp]
82: 4618 mov r0, r3
84: f7ff fffe bl 0x84 <checksum+0x84> @ imm = #-0x4
5.0.0.STS:
72: 68d0 ldr r0, [r2, #0xc]
74: ba4c rev16 r4, r1
76: 6912 ldr r2, [r2, #0x10]
78: f8ad 400a strh.w r4, [sp, #0xa]
7c: e9cd 0200 strd r0, r2, [sp]
80: 4618 mov r0, r3
82: f7ff fffe bl 0x82 <checksum+0x82> @ imm = #-0x4