acrn-hypervisor/hypervisor/bsp/ld/link_ram.ld.in
Yonghua Huang 4d13ad9d08 hv: enable NX in hypervisor
- enable NX feature in hypervisor:
  1. Set 'XD' bit for all pages, including pages for guests
     when initialize MMU tables in hypervisor.
  2. remove 'XD' bit for pages that contain hypervisor instructions.
  3. enable MSR EFER.NXE,which will enable page access restriction by
     preventing instruction fetches form pages with XD bit set.

- remove "-Wl -z noexecstack" GCC flag option in hypervisor
  Makefile as it would not affect stack attribute in hyervisor,
  which setup stack itself, instead of by loader.

Tracked-On: #1122
Signed-off-by: Yonghua Huang <yonghua.huang@intel.com>
Acked-by: Anthony Xu <anthony.xu@intel.com>
2018-12-12 12:53:18 +08:00

95 lines
1.6 KiB
Plaintext

ENTRY(cpu_primary_start_32)
MEMORY
{
/* Low 1MB of memory for secondary processor start-up */
lowram : ORIGIN = 0, LENGTH = CONFIG_LOW_RAM_SIZE
/* 32 MBytes of RAM for HV */
ram : ORIGIN = CONFIG_HV_RAM_START, LENGTH = CONFIG_HV_RAM_SIZE
}
SECTIONS
{
.boot :
{
_ld_ram_start = . ;
KEEP(*(multiboot_header)) ;
} > ram
.entry :
{
KEEP(*(entry)) ;
} > ram
.text :
{
*(.text .text*) ;
*(.gnu.linkonce.t*)
*(.note.gnu.build-id)
*(.retpoline_thunk)
} > ram
/*Align text top boundary to 2MBytes.*/
. = ALIGN(0x200000);
ld_text_end = . ;
.rodata :
{
*(.rodata*) ;
} > ram
.rela :
{
*(.rela*)
*(.dyn*)
} > ram
. = ALIGN(4) ;
ld_trampoline_load = .;
.trampoline : AT (ld_trampoline_load)
{
ld_trampoline_start = .;
*(.trampoline_reset);
. = ALIGN(4);
ld_trampoline_end = .;
} > lowram
ld_trampoline_size = ld_trampoline_end - ld_trampoline_start;
.data (ld_trampoline_load + ld_trampoline_size):
{
*(.data) ;
*(.data*) ;
*(.sdata)
*(.gnu.linkonce.d*)
} > ram
.bss_noinit (NOLOAD):
{
. = ALIGN(4) ;
*(.bss_noinit) ;
*(.bss_noinit*) ;
. = ALIGN(4) ;
} > ram
.bss (NOLOAD):
{
. = ALIGN(4) ;
ld_bss_start = . ;
*(.bss) ;
*(.bss*) ;
*(COMMON) ;
. = ALIGN(4) ;
ld_bss_end = . ;
} > ram
_ld_ram_size = LENGTH(ram) ;
_ld_ram_end = _ld_ram_size + _ld_ram_start ;
}