https://sourceware.org/bugzilla/show_bug.cgi?id=27763
Bug ID: 27763
Summary: x86-64 RIP-relative address with labels wraps around
signed 32-bit integer
Product: binutils
Version: 2.36.1
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: gas
Assignee: unassigned at sourceware dot org
Reporter: andrey.vihrov at gmail dot com
Target Milestone: ---
Consider the following source:
movq test(%rip), %rax
.set test, . + 0xF0000000
When assembled and then disassembled with "objdump -d", this gives
0: 48 8b 05 00 00 00 f0 mov -0x10000000(%rip),%rax
The relative address wraps around and results in a negative displacement.
This affects expressions with labels, such as (test + 1) and (test -
0x1E0000000), but not simply 0xF0000000, which is correctly rejected with
Error: 0xf0000000 out range of signed 32bit displacement
Expressions not smaller than 2^32, such as (test + 0xF0000000), are also
correctly rejected:
Error: value of 8053063680 too large for field of 4 bytes at 3
--
You are receiving this mail because:
You are on the CC list for the bug.