mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-08-17 23:58:25 +00:00
HV: build: make relocation-related code configurable
The relocation feature relies on the ld option "-z noreloc-overflow" which is only available for binutils >= 2.27, while on Ubuntu 16.04 or older the default version of binutils is 2.26. This patch wraps the relocation code with a configurable macro and make it undefined by default to avoid default build failures. NOTE: This is just a hotfix. The code dropped with undefined CONFIG_RELOC needs to be reviewed by the original author of this feature. Checks to the binutils version will also follow up. Signed-off-by: Junjie Mao <junjie.mao@intel.com>
This commit is contained in:
parent
057a384f8e
commit
a23549aa91
@ -63,12 +63,14 @@ LDFLAGS += -Wl,--gc-sections -nostartfiles -nostdlib
|
|||||||
LDFLAGS += -Wl,-n,-z,max-page-size=0x1000
|
LDFLAGS += -Wl,-n,-z,max-page-size=0x1000
|
||||||
LDFLAGS += -Wl,-z,noexecstack
|
LDFLAGS += -Wl,-z,noexecstack
|
||||||
|
|
||||||
|
ifeq (y, $(CONFIG_RELOC))
|
||||||
# on X86_64, when build with "-pie", GCC fails on linking R_X86_64_32
|
# on X86_64, when build with "-pie", GCC fails on linking R_X86_64_32
|
||||||
# relocations with "recompile with fPIC" error, because it may cause
|
# relocations with "recompile with fPIC" error, because it may cause
|
||||||
# run-time relocation overflow if it runs at address above 4GB.
|
# run-time relocation overflow if it runs at address above 4GB.
|
||||||
# We know it's safe because Hypervisor runs under 4GB. "noreloc-overflow"
|
# We know it's safe because Hypervisor runs under 4GB. "noreloc-overflow"
|
||||||
# is used to avoid the compile error
|
# is used to avoid the compile error
|
||||||
LDFLAGS += -pie -z noreloc-overflow
|
LDFLAGS += -pie -z noreloc-overflow
|
||||||
|
endif
|
||||||
|
|
||||||
ARCH_CFLAGS += -gdwarf-2
|
ARCH_CFLAGS += -gdwarf-2
|
||||||
ARCH_ASFLAGS += -gdwarf-2 -DASSEMBLER=1
|
ARCH_ASFLAGS += -gdwarf-2 -DASSEMBLER=1
|
||||||
|
@ -123,3 +123,7 @@ config UEFI_OS_LOADER_NAME
|
|||||||
config MTRR_ENABLED
|
config MTRR_ENABLED
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
config RELOC
|
||||||
|
bool "Enable relocation"
|
||||||
|
default n
|
||||||
|
@ -68,6 +68,7 @@ static uint64_t trampoline_relo_addr(void *addr)
|
|||||||
return (uint64_t)addr - get_hv_image_delta();
|
return (uint64_t)addr - get_hv_image_delta();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_RELOC
|
||||||
void _relocate(void)
|
void _relocate(void)
|
||||||
{
|
{
|
||||||
struct Elf64_Dyn *dyn;
|
struct Elf64_Dyn *dyn;
|
||||||
@ -136,6 +137,11 @@ void _relocate(void)
|
|||||||
start = (struct Elf64_Rel *)((char *)start + size);
|
start = (struct Elf64_Rel *)((char *)start + size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
void _relocate(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
uint64_t read_trampoline_sym(void *sym)
|
uint64_t read_trampoline_sym(void *sym)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user