ARM64: Enabling Crossgen End-to-End Mscorlib
authorKyungwoo Lee <kyulee@microsoft.com>
Fri, 29 Apr 2016 17:29:28 +0000 (10:29 -0700)
committerKyungwoo Lee <kyulee@microsoft.com>
Fri, 29 Apr 2016 21:52:46 +0000 (14:52 -0700)
commit45798f661f8c8c042f3582cde8b611d1c9c7343f
tree0d75dad9935f95c5bf4bd309899a37456e4478bd
parent601b1051c1022d5f764224e35be59f02a6074ad0
ARM64: Enabling Crossgen End-to-End Mscorlib

Fixes https://github.com/dotnet/coreclr/issues/4350
Fixes https://github.com/dotnet/coreclr/issues/4615

This is a bit large change across VM/Zap/JIT to properly support crossgen
scenario.
1. Fix incorrect `ldr` encoding with size.
2. Enforce JIT data following JIT code per method by allocating them together.
   This guarantees correct PC-relative encoding for such constant data access
   without fix-up.
3. For the general fix-up data acceess, use `adrp/add` instruction pairs with fix-ups.
   Two more relocations types are implemented in all sides.
4. Interface dispatch stub is now implemented which is needed for
interface call for crossgen.

I've verified hello world runs with mscorlib.ni.dll.
14 files changed:
src/inc/clrnt.h
src/inc/utilcode.h
src/jit/codegenarm64.cpp
src/jit/emit.cpp
src/jit/emit.h
src/jit/emitarm64.cpp
src/jit/emitfmtsarm64.h
src/jit/instrsarm64.h
src/utilcode/util.cpp
src/vm/arm64/asmhelpers.asm
src/vm/arm64/stubs.cpp
src/vm/jitinterface.cpp
src/zap/zapinfo.cpp
src/zap/zaprelocs.cpp