|
|
@@ -96,6 +96,10 @@ LDFLAGS_vmlinux += -G 0 -static -n -nostdlib
|
|
|
KBUILD_AFLAGS_MODULE += -mlong-calls
|
|
|
KBUILD_CFLAGS_MODULE += -mlong-calls
|
|
|
|
|
|
+ifeq ($(CONFIG_RELOCATABLE),y)
|
|
|
+LDFLAGS_vmlinux += --emit-relocs
|
|
|
+endif
|
|
|
+
|
|
|
#
|
|
|
# pass -msoft-float to GAS if it supports it. However on newer binutils
|
|
|
# (specifically newer than 2.24.51.20140728) we then also need to explicitly
|
|
|
@@ -313,6 +317,10 @@ rom.bin rom.sw: vmlinux
|
|
|
$(bootvars-y) $@
|
|
|
endif
|
|
|
|
|
|
+CMD_RELOCS = arch/mips/boot/tools/relocs
|
|
|
+quiet_cmd_relocs = RELOCS $<
|
|
|
+ cmd_relocs = $(CMD_RELOCS) $<
|
|
|
+
|
|
|
#
|
|
|
# Some machines like the Indy need 32-bit ELF binaries for booting purposes.
|
|
|
# Other need ECOFF, so we build a 32-bit ELF binary for them which we then
|
|
|
@@ -321,6 +329,11 @@ endif
|
|
|
quiet_cmd_32 = OBJCOPY $@
|
|
|
cmd_32 = $(OBJCOPY) -O $(32bit-bfd) $(OBJCOPYFLAGS) $< $@
|
|
|
vmlinux.32: vmlinux
|
|
|
+ifeq ($(CONFIG_RELOCATABLE)$(CONFIG_64BIT),yy)
|
|
|
+# Currently, objcopy fails to handle the relocations in the elf64
|
|
|
+# So the relocs tool must be run here to remove them first
|
|
|
+ $(call cmd,relocs)
|
|
|
+endif
|
|
|
$(call cmd,32)
|
|
|
|
|
|
#
|
|
|
@@ -336,6 +349,9 @@ all: $(all-y)
|
|
|
|
|
|
# boot
|
|
|
$(boot-y): $(vmlinux-32) FORCE
|
|
|
+ifeq ($(CONFIG_RELOCATABLE)$(CONFIG_32BIT),yy)
|
|
|
+ $(call cmd,relocs)
|
|
|
+endif
|
|
|
$(Q)$(MAKE) $(build)=arch/mips/boot VMLINUX=$(vmlinux-32) \
|
|
|
$(bootvars-y) arch/mips/boot/$@
|
|
|
|