Link EL2 code as a relocatable object

Result in arch/arm64/kvm/hyp/nvhe/el2.o

Signed-off-by: David Brazdil <dbrazdil@google.com>
diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile
index e2e8df7..1006d23 100644
--- a/arch/arm64/kvm/hyp/nvhe/Makefile
+++ b/arch/arm64/kvm/hyp/nvhe/Makefile
@@ -11,15 +11,17 @@
 lib-objs := clear_page.o copy_page.o memcpy.o memset.o
 lib-objs := $(addprefix ../../../lib/, $(lib-objs))
 
-obj-y := ../vgic-v3-sr.o ../timer-sr.o timer-sr.o ../aarch32.o \
+obj-y := el2.o
+
+hyp-y := ../vgic-v3-sr.o ../timer-sr.o timer-sr.o ../aarch32.o \
 	 ../vgic-v2-cpuif-proxy.o sysreg-sr.o debug-sr.o ../entry.o switch.o \
 	 ../fpsimd.o tlb.o hyp-init.o hyp-start.o hyp-main.o ../hyp-entry.o \
 	$(lib-objs) early_alloc.o  page_alloc.o mm_init.o mmu.o setup.o
 
 obj-$(CONFIG_DEBUG_PREEMPT) += percpu.o
 
-obj-y := $(patsubst %.o,%.hyp.o,$(obj-y))
-extra-y := $(patsubst %.hyp.o,%.hyp.tmp.o,$(obj-y))
+hyp-y := $(patsubst %.o,%.hyp.o,$(hyp-y))
+extra-y := $(patsubst %.hyp.o,%.hyp.tmp.o,$(hyp-y))
 
 $(obj)/%.hyp.tmp.o: $(src)/%.c FORCE
 	$(call if_changed_rule,cc_o_c)
@@ -27,6 +29,9 @@
 	$(call if_changed_rule,as_o_S)
 $(obj)/%.hyp.o: $(obj)/%.hyp.tmp.o FORCE
 	$(call if_changed,hypcopy)
+LDFLAGS_el2.o := --relocatable
+$(obj)/el2.o: $(addprefix $(obj)/,$(hyp-y)) FORCE
+	$(call if_changed,ld)
 
 # Generate hyp object to be used in nVHE EL2.
 # All symbols are prefixed to avoid clashes with corresponding VHE symbols.