Skip to content

Commit 163a91b

Browse files
authored
Fix relocation addend sign extension on 32-bit platforms (#4846)
* Fix relocation addend sign extension on 32-bit platforms When loading relocations on 32-bit platforms, the addend is read as uint32 and zero-extended to uint64, which corrupts negative addends. For example, -4 (0xFFFFFFFC) becomes 4294967292 instead of remaining -4. Use int32 with sign extension to int64, matching the Windows code path which already handles this correctly.
1 parent 539bebe commit 163a91b

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

core/iwasm/aot/aot_loader.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3872,7 +3872,7 @@ load_relocation_section(const uint8 *buf, const uint8 *buf_end,
38723872
read_uint32(buf, buf_end, offset32);
38733873
relocation->relocation_offset = (uint64)offset32;
38743874
read_uint32(buf, buf_end, addend32);
3875-
relocation->relocation_addend = (uint64)addend32;
3875+
relocation->relocation_addend = (int64)(int32)addend32;
38763876
}
38773877
read_uint32(buf, buf_end, relocation->relocation_type);
38783878
read_uint32(buf, buf_end, symbol_index);

0 commit comments

Comments
 (0)