[Nasm-bugs] [Bug 3392402] New: EVEX relocation offset issue
no-reply at bugzilla-nasm.gorcunov.org
no-reply at bugzilla-nasm.gorcunov.org
Wed Apr 19 15:54:44 PDT 2017
https://bugzilla.nasm.us/show_bug.cgi?id=3392402
Bug ID: 3392402
Summary: EVEX relocation offset issue
Product: NASM
Version: unspecified
Hardware: All
OS: All
Status: OPEN
Severity: normal
Priority: Medium
Component: Assembler
Assignee: nobody at nasm.us
Reporter: henrik at gramner.com
CC: gorcunov at gmail.com, hpa at zytor.com, nasm-bugs at nasm.us
Assembling an EVEX instruction with an address consisting of a base register
plus a relocation offset doesn't seem to work correctly.
Using -f win32 results in "error: COFF format does not support non-32-bit
relocations".
With other output formats it assembles but with an 8-bit offset which is too
small to fit a relocation.
Using identical code except with a VEX-encoded instruction yields the expected
result.
This appears to be related to compressed displacements because adding an offset
which can't be encoded with a compressed displacement seems to work at a quick
glance.
I tried forcing a 32-bit offset by using the dword keyword in the address but
that doesn't seem to affect compressed displacements at all.
Even more weird is that adding a constant offset that's a multiple of the
compressed displacement silently drops the relocation completely.
Test case:
foo:
vmovdqa32 zmm0, [eax+foo] ; error
vmovdqa32 zmm0, [dword eax+foo] ; (no difference)
vmovdqa32 zmm0, [eax+foo+1] ; possibly ok?
vmovdqa32 zmm0, [eax+foo+64] ; drops 'foo' completely
vmovdqa32 zmm0, [eax+64] ; equal to the above
--
You are receiving this mail because:
You are on the CC list for the bug.
You are watching all bug changes.
More information about the Nasm-bugs
mailing list