Always check that no overflow happens during relocation for x86_64.
It's not safe to assume the result returned by ocAllocateSymbolExtras is
always valid if we allocate it neither in lower 2G nor in a contiguous range
with the image.
There are also some minor fixes in this diff:
- off >= 0x7fffffffL should be >
- use of unaligned pointer is undefined behavior, use memcpy instead, gcc will be able to optimize it to mov %edx, (%rax).