Skip to content

Commit a71dede

Browse files
shiqingglijinxia
authored andcommitted
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>
1 parent a3b44a2 commit a71dede

File tree

5 files changed

+40
-35
lines changed

5 files changed

+40
-35
lines changed

hypervisor/arch/x86/cpu.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,8 @@ void bsp_boot_init(void)
369369
start_tsc = rdtsc();
370370

371371
/* Clear BSS */
372-
(void)memset(_ld_bss_start, 0U, (size_t)(_ld_bss_end - _ld_bss_start));
372+
(void)memset(&_ld_bss_start, 0U,
373+
(size_t)(&_ld_bss_end - &_ld_bss_start));
373374

374375
/* Build time sanity checks to make sure hard-coded offset
375376
* is matching the actual offset!

hypervisor/boot/include/reloc.h

100755100644
Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,25 @@ extern void write_trampoline_sym(void *sym, uint64_t val);
1414
extern uint64_t prepare_trampoline(void);
1515

1616
/* external symbols that are helpful for relocation */
17-
extern uint8_t _DYNAMIC[];
18-
extern const uint8_t _ld_trampoline_load[];
19-
extern uint8_t _ld_trampoline_start[];
20-
extern uint8_t _ld_trampoline_end[];
21-
extern const uint64_t _ld_trampoline_size;
17+
extern uint8_t _DYNAMIC[1];
18+
extern const uint8_t _ld_trampoline_load;
19+
extern uint8_t _ld_trampoline_start;
20+
extern uint8_t _ld_trampoline_end;
21+
extern const uint64_t _ld_trampoline_size;
2222

23-
extern uint8_t cpu_primary_start_32[];
24-
extern uint8_t cpu_primary_start_64[];
23+
extern uint8_t cpu_primary_start_32;
24+
extern uint8_t cpu_primary_start_64;
2525

26-
extern uint8_t trampoline_fixup_cs[];
27-
extern uint8_t trampoline_fixup_ip[];
28-
extern uint8_t trampoline_fixup_target[];
29-
extern uint8_t CPU_Boot_Page_Tables_Start[];
30-
extern uint8_t CPU_Boot_Page_Tables_ptr[];
31-
extern uint8_t trampoline_pdpt_addr[];
32-
extern uint8_t trampoline_gdt_ptr[];
33-
extern uint8_t trampoline_start64_fixup[];
34-
extern uint8_t trampoline_spinlock_ptr[];
26+
extern uint8_t trampoline_fixup_cs;
27+
extern uint8_t trampoline_fixup_ip;
28+
extern uint8_t trampoline_fixup_target;
29+
extern uint8_t CPU_Boot_Page_Tables_Start;
30+
extern uint8_t CPU_Boot_Page_Tables_ptr;
31+
extern uint8_t trampoline_pdpt_addr;
32+
extern uint8_t trampoline_gdt_ptr;
33+
extern uint8_t trampoline_start64_fixup;
34+
extern uint8_t trampoline_spinlock_ptr;
3535

36-
extern uint64_t trampoline_start16_paddr;
36+
extern uint64_t trampoline_start16_paddr;
3737

3838
#endif /* RELOCATE_H */

hypervisor/boot/reloc.c

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ void _relocate(void)
107107
* absolute addresses
108108
*/
109109
trampoline_end = (uint64_t)_ld_trampoline_end - delta;
110-
primary_32_start = (uint64_t)cpu_primary_start_32 - delta;
111-
primary_32_end = (uint64_t)cpu_primary_start_64 - delta;
110+
primary_32_start = (uint64_t)(&cpu_primary_start_32) - delta;
111+
primary_32_end = (uint64_t)(&cpu_primary_start_64) - delta;
112112

113113
while (start < end) {
114114
if ((ELF64_R_TYPE(start->r_info)) == R_X86_64_RELATIVE) {
@@ -168,47 +168,50 @@ static void update_trampoline_code_refs(uint64_t dest_pa)
168168
* trampoline code starts in real mode,
169169
* so the target addres is HPA
170170
*/
171-
val = dest_pa + trampoline_relo_addr(trampoline_fixup_target);
171+
val = dest_pa + trampoline_relo_addr(&trampoline_fixup_target);
172172

173-
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(trampoline_fixup_cs));
173+
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(&trampoline_fixup_cs));
174174
*(uint16_t *)(ptr) = (uint16_t)((val >> 4) & 0xFFFFU);
175175

176-
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(trampoline_fixup_ip));
176+
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(&trampoline_fixup_ip));
177177
*(uint16_t *)(ptr) = (uint16_t)(val & 0xfU);
178178

179179
/* Update temporary page tables */
180-
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(CPU_Boot_Page_Tables_ptr));
180+
ptr = HPA2HVA(dest_pa +
181+
trampoline_relo_addr(&CPU_Boot_Page_Tables_ptr));
181182
*(uint32_t *)(ptr) += (uint32_t)dest_pa;
182183

183-
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(CPU_Boot_Page_Tables_Start));
184+
ptr = HPA2HVA(dest_pa +
185+
trampoline_relo_addr(&CPU_Boot_Page_Tables_Start));
184186
*(uint64_t *)(ptr) += dest_pa;
185187

186-
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(trampoline_pdpt_addr));
188+
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(&trampoline_pdpt_addr));
187189
for (i = 0; i < 4; i++)
188190
*(uint64_t *)(ptr + sizeof(uint64_t) * i) += dest_pa;
189191

190192
/* update the gdt base pointer with relocated offset */
191-
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(trampoline_gdt_ptr));
193+
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(&trampoline_gdt_ptr));
192194
*(uint64_t *)(ptr + 2) += dest_pa;
193195

194196
/* update trampoline jump pointer with relocated offset */
195-
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(trampoline_start64_fixup));
197+
ptr = HPA2HVA(dest_pa +
198+
trampoline_relo_addr(&trampoline_start64_fixup));
196199
*(uint32_t *)ptr += dest_pa;
197200

198201
/* update trampoline's main entry pointer */
199202
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(main_entry));
200203
*(uint64_t *)ptr += get_hv_image_delta();
201204

202205
/* update trampoline's spinlock pointer */
203-
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(trampoline_spinlock_ptr));
206+
ptr = HPA2HVA(dest_pa + trampoline_relo_addr(&trampoline_spinlock_ptr));
204207
*(uint64_t *)ptr += get_hv_image_delta();
205208
}
206209

207210
uint64_t prepare_trampoline(void)
208211
{
209212
uint64_t size, dest_pa;
210213

211-
size = (uint64_t)_ld_trampoline_end - (uint64_t)_ld_trampoline_start;
214+
size = (uint64_t)(&_ld_trampoline_end - &_ld_trampoline_start);
212215
#ifndef CONFIG_EFI_STUB
213216
dest_pa = e820_alloc_low_memory(CONFIG_LOW_RAM_SIZE);
214217
#else
@@ -218,7 +221,8 @@ uint64_t prepare_trampoline(void)
218221
pr_dbg("trampoline code: %llx size %x", dest_pa, size);
219222

220223
/* Copy segment for AP initialization code below 1MB */
221-
memcpy_s(HPA2HVA(dest_pa), (size_t)size, _ld_trampoline_load, (size_t)size);
224+
memcpy_s(HPA2HVA(dest_pa), (size_t)size, &_ld_trampoline_load,
225+
(size_t)size);
222226
update_trampoline_code_refs(dest_pa);
223227
trampoline_start16_paddr = dest_pa;
224228

hypervisor/include/arch/x86/cpu.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@
155155
/**********************************/
156156
/* EXTERNAL VARIABLES */
157157
/**********************************/
158-
extern uint8_t _ld_bss_start[];
159-
extern uint8_t _ld_bss_end[];
158+
extern uint8_t _ld_bss_start;
159+
extern uint8_t _ld_bss_end;
160160

161161
/* In trampoline range, hold the jump target which trampline will jump to */
162162
extern uint64_t main_entry[1];

hypervisor/include/arch/x86/guest/guest.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,14 @@ void init_e820(void);
9393
void obtain_e820_mem_info(void);
9494
extern uint32_t e820_entries;
9595
extern struct e820_entry e820[E820_MAX_ENTRIES];
96-
extern uint32_t boot_regs[];
96+
extern uint32_t boot_regs[2];
9797
extern struct e820_mem_params e820_mem;
9898

9999
int rdmsr_vmexit_handler(struct vcpu *vcpu);
100100
int wrmsr_vmexit_handler(struct vcpu *vcpu);
101101
void init_msr_emulation(struct vcpu *vcpu);
102102

103-
extern const char vm_exit[];
103+
extern const char vm_exit;
104104
struct run_context;
105105
int vmx_vmrun(struct run_context *context, int ops, int ibrs);
106106

0 commit comments

Comments
 (0)