mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-05-01 13:14:02 +00:00
hv: treewide: fix 'Array has no bounds specified'
MISRAC requires that the array size should be declared explicitly. This patch fixes the issues caused by the arrays that are defined in link_ram.ld.in or assembly file. v1 -> v2: * Update the solution based on the info from the following link. https://sourceware.org/binutils/docs/ld/Source-Code-Reference.html Fix pattern is like below: extern char start_of_ROM, end_of_ROM, start_of_FLASH; memcpy (& start_of_FLASH, & start_of_ROM, & end_of_ROM - & start_of_ROM); Signed-off-by: Shiqing Gao <shiqing.gao@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
parent
a3b44a2fa8
commit
a71dedecd4
@ -369,7 +369,8 @@ void bsp_boot_init(void)
|
||||
start_tsc = rdtsc();
|
||||
|
||||
/* Clear BSS */
|
||||
(void)memset(_ld_bss_start, 0U, (size_t)(_ld_bss_end - _ld_bss_start));
|
||||
(void)memset(&_ld_bss_start, 0U,
|
||||
(size_t)(&_ld_bss_end - &_ld_bss_start));
|
||||
|
||||
/* Build time sanity checks to make sure hard-coded offset
|
||||
* is matching the actual offset!
|
||||
|
34
hypervisor/boot/include/reloc.h
Executable file → Normal file
34
hypervisor/boot/include/reloc.h
Executable file → Normal file
@ -14,25 +14,25 @@ extern void write_trampoline_sym(void *sym, uint64_t val);
|
||||
extern uint64_t prepare_trampoline(void);
|
||||
|
||||
/* external symbols that are helpful for relocation */
|
||||
extern uint8_t _DYNAMIC[];
|
||||
extern const uint8_t _ld_trampoline_load[];
|
||||
extern uint8_t _ld_trampoline_start[];
|
||||
extern uint8_t _ld_trampoline_end[];
|
||||
extern const uint64_t _ld_trampoline_size;
|
||||
extern uint8_t _DYNAMIC[1];
|
||||
extern const uint8_t _ld_trampoline_load;
|
||||
extern uint8_t _ld_trampoline_start;
|
||||
extern uint8_t _ld_trampoline_end;
|
||||
extern const uint64_t _ld_trampoline_size;
|
||||
|
||||
extern uint8_t cpu_primary_start_32[];
|
||||
extern uint8_t cpu_primary_start_64[];
|
||||
extern uint8_t cpu_primary_start_32;
|
||||
extern uint8_t cpu_primary_start_64;
|
||||
|
||||
extern uint8_t trampoline_fixup_cs[];
|
||||
extern uint8_t trampoline_fixup_ip[];
|
||||
extern uint8_t trampoline_fixup_target[];
|
||||
extern uint8_t CPU_Boot_Page_Tables_Start[];
|
||||
extern uint8_t CPU_Boot_Page_Tables_ptr[];
|
||||
extern uint8_t trampoline_pdpt_addr[];
|
||||
extern uint8_t trampoline_gdt_ptr[];
|
||||
extern uint8_t trampoline_start64_fixup[];
|
||||
extern uint8_t trampoline_spinlock_ptr[];
|
||||
extern uint8_t trampoline_fixup_cs;
|
||||
extern uint8_t trampoline_fixup_ip;
|
||||
extern uint8_t trampoline_fixup_target;
|
||||
extern uint8_t CPU_Boot_Page_Tables_Start;
|
||||
extern uint8_t CPU_Boot_Page_Tables_ptr;
|
||||
extern uint8_t trampoline_pdpt_addr;
|
||||
extern uint8_t trampoline_gdt_ptr;
|
||||
extern uint8_t trampoline_start64_fixup;
|
||||
extern uint8_t trampoline_spinlock_ptr;
|
||||
|
||||
extern uint64_t trampoline_start16_paddr;
|
||||
extern uint64_t trampoline_start16_paddr;
|
||||
|
||||
#endif /* RELOCATE_H */
|
||||
|
@ -107,8 +107,8 @@ void _relocate(void)
|
||||
* absolute addresses
|
||||
*/
|
||||
trampoline_end = (uint64_t)_ld_trampoline_end - delta;
|
||||
primary_32_start = (uint64_t)cpu_primary_start_32 - delta;
|
||||
primary_32_end = (uint64_t)cpu_primary_start_64 - delta;
|
||||
primary_32_start = (uint64_t)(&cpu_primary_start_32) - delta;
|
||||
primary_32_end = (uint64_t)(&cpu_primary_start_64) - delta;
|
||||
|
||||
while (start < end) {
|
||||
if ((ELF64_R_TYPE(start->r_info)) == R_X86_64_RELATIVE) {
|
||||
@ -168,31 +168,34 @@ static void update_trampoline_code_refs(uint64_t dest_pa)
|
||||
* trampoline code starts in real mode,
|
||||
* so the target addres is HPA
|
||||
*/
|
||||
val = dest_pa + trampoline_relo_addr(trampoline_fixup_target);
|
||||
val = dest_pa + trampoline_relo_addr(&trampoline_fixup_target);
|
||||
|
||||
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(trampoline_fixup_cs));
|
||||
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(&trampoline_fixup_cs));
|
||||
*(uint16_t *)(ptr) = (uint16_t)((val >> 4) & 0xFFFFU);
|
||||
|
||||
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(trampoline_fixup_ip));
|
||||
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(&trampoline_fixup_ip));
|
||||
*(uint16_t *)(ptr) = (uint16_t)(val & 0xfU);
|
||||
|
||||
/* Update temporary page tables */
|
||||
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(CPU_Boot_Page_Tables_ptr));
|
||||
ptr = HPA2HVA(dest_pa +
|
||||
trampoline_relo_addr(&CPU_Boot_Page_Tables_ptr));
|
||||
*(uint32_t *)(ptr) += (uint32_t)dest_pa;
|
||||
|
||||
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(CPU_Boot_Page_Tables_Start));
|
||||
ptr = HPA2HVA(dest_pa +
|
||||
trampoline_relo_addr(&CPU_Boot_Page_Tables_Start));
|
||||
*(uint64_t *)(ptr) += dest_pa;
|
||||
|
||||
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(trampoline_pdpt_addr));
|
||||
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(&trampoline_pdpt_addr));
|
||||
for (i = 0; i < 4; i++)
|
||||
*(uint64_t *)(ptr + sizeof(uint64_t) * i) += dest_pa;
|
||||
|
||||
/* update the gdt base pointer with relocated offset */
|
||||
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(trampoline_gdt_ptr));
|
||||
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(&trampoline_gdt_ptr));
|
||||
*(uint64_t *)(ptr + 2) += dest_pa;
|
||||
|
||||
/* update trampoline jump pointer with relocated offset */
|
||||
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(trampoline_start64_fixup));
|
||||
ptr = HPA2HVA(dest_pa +
|
||||
trampoline_relo_addr(&trampoline_start64_fixup));
|
||||
*(uint32_t *)ptr += dest_pa;
|
||||
|
||||
/* update trampoline's main entry pointer */
|
||||
@ -200,7 +203,7 @@ static void update_trampoline_code_refs(uint64_t dest_pa)
|
||||
*(uint64_t *)ptr += get_hv_image_delta();
|
||||
|
||||
/* update trampoline's spinlock pointer */
|
||||
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(trampoline_spinlock_ptr));
|
||||
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(&trampoline_spinlock_ptr));
|
||||
*(uint64_t *)ptr += get_hv_image_delta();
|
||||
}
|
||||
|
||||
@ -208,7 +211,7 @@ uint64_t prepare_trampoline(void)
|
||||
{
|
||||
uint64_t size, dest_pa;
|
||||
|
||||
size = (uint64_t)_ld_trampoline_end - (uint64_t)_ld_trampoline_start;
|
||||
size = (uint64_t)(&_ld_trampoline_end - &_ld_trampoline_start);
|
||||
#ifndef CONFIG_EFI_STUB
|
||||
dest_pa = e820_alloc_low_memory(CONFIG_LOW_RAM_SIZE);
|
||||
#else
|
||||
@ -218,7 +221,8 @@ uint64_t prepare_trampoline(void)
|
||||
pr_dbg("trampoline code: %llx size %x", dest_pa, size);
|
||||
|
||||
/* Copy segment for AP initialization code below 1MB */
|
||||
memcpy_s(HPA2HVA(dest_pa), (size_t)size, _ld_trampoline_load, (size_t)size);
|
||||
memcpy_s(HPA2HVA(dest_pa), (size_t)size, &_ld_trampoline_load,
|
||||
(size_t)size);
|
||||
update_trampoline_code_refs(dest_pa);
|
||||
trampoline_start16_paddr = dest_pa;
|
||||
|
||||
|
@ -155,8 +155,8 @@
|
||||
/**********************************/
|
||||
/* EXTERNAL VARIABLES */
|
||||
/**********************************/
|
||||
extern uint8_t _ld_bss_start[];
|
||||
extern uint8_t _ld_bss_end[];
|
||||
extern uint8_t _ld_bss_start;
|
||||
extern uint8_t _ld_bss_end;
|
||||
|
||||
/* In trampoline range, hold the jump target which trampline will jump to */
|
||||
extern uint64_t main_entry[1];
|
||||
|
@ -93,14 +93,14 @@ void init_e820(void);
|
||||
void obtain_e820_mem_info(void);
|
||||
extern uint32_t e820_entries;
|
||||
extern struct e820_entry e820[E820_MAX_ENTRIES];
|
||||
extern uint32_t boot_regs[];
|
||||
extern uint32_t boot_regs[2];
|
||||
extern struct e820_mem_params e820_mem;
|
||||
|
||||
int rdmsr_vmexit_handler(struct vcpu *vcpu);
|
||||
int wrmsr_vmexit_handler(struct vcpu *vcpu);
|
||||
void init_msr_emulation(struct vcpu *vcpu);
|
||||
|
||||
extern const char vm_exit[];
|
||||
extern const char vm_exit;
|
||||
struct run_context;
|
||||
int vmx_vmrun(struct run_context *context, int ops, int ibrs);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user