Take code like this for x64:
segment .data
abc:
dq 0
segment .text
mov rax,[abc]
This has worked fine up to now. But I've has to switch to 'large address aware' on executables, to be able to address beyond 2GB. Then this crashed, and I was told the fix was to use 'default rel'.
This worked for that example. But not for this one:
mov [rax*8+abc-8], rdx
This works in normal non-large-address mode and without using 'default'. The linker I'm using (GoLink) apparently loads the program beyond 4GB and the address of 'abc' will presumably require more than 32 bits to express.
Is that the problem here, that this address mode can't accommodate address fields more than 32-bits? If so, what's the answer?
(I don't fancy rewriting my code generators to take account of this; I just want to be able to allocate more than 2GB of dynamic memory, and make use of 64-bit pointers which I thought I could already do.)