[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v7 3/4] xen/x86: use SYMBOL_HIDE when required
Use SYMBOL_HIDE in cases of comparisons and subtractions of: _start, _end, __2M_rwdata_start, __2M_rwdata_end, _stext, _etext, __end_vpci_array, __start_vpci_array, _stextentry, _etextentry, __trampoline_rel_start, __trampoline_rel_stop, __trampoline_seg_start, __trampoline_seg_stop __per_cpu_start, __per_cpu_data_end as by the C standard [1]. M3CM: Rule-18.2: Subtraction between pointers shall only be applied to pointers that address elements of the same array [1] https://wiki.sei.cmu.edu/confluence/display/c/ARR36-C.+Do+not+subtract+or+compare+two+pointers+that+do+not+refer+to+the+same+array QAVerify: 2761 Signed-off-by: Stefano Stabellini <stefanos@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> CC: JBeulich@xxxxxxxx CC: andrew.cooper3@xxxxxxxxxx --- Changes in v7: - code style - add reviewed-by Changes in v6: - more accurate commit message - remove uneeded extra newline - only use SYMBOL on problematic symbols in alternatives.c - use new SYMBOL macro that returns the native type Changes in v5: - remove two spurious changes - split into three patches - remove SYMBOL() from derived variables --- xen/arch/x86/alternative.c | 3 ++- xen/arch/x86/efi/efi-boot.h | 8 ++++---- xen/arch/x86/percpu.c | 10 ++++++---- xen/arch/x86/setup.c | 9 ++++++--- xen/arch/x86/smpboot.c | 5 +++-- xen/drivers/vpci/vpci.c | 3 ++- 6 files changed, 23 insertions(+), 15 deletions(-) diff --git a/xen/arch/x86/alternative.c b/xen/arch/x86/alternative.c index b8c819a..61e2c54 100644 --- a/xen/arch/x86/alternative.c +++ b/xen/arch/x86/alternative.c @@ -273,7 +273,8 @@ static int __init nmi_apply_alternatives(const struct cpu_user_regs *regs, /* Disable WP to allow patching read-only pages. */ write_cr0(cr0 & ~X86_CR0_WP); - apply_alternatives(__alt_instructions, __alt_instructions_end); + apply_alternatives(SYMBOL_HIDE(__alt_instructions), + SYMBOL_HIDE(__alt_instructions_end)); write_cr0(cr0); diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h index 5789d2c..29a5aa7 100644 --- a/xen/arch/x86/efi/efi-boot.h +++ b/xen/arch/x86/efi/efi-boot.h @@ -111,12 +111,12 @@ static void __init relocate_trampoline(unsigned long phys) return; /* Apply relocations to trampoline. */ - for ( trampoline_ptr = __trampoline_rel_start; - trampoline_ptr < __trampoline_rel_stop; + for ( trampoline_ptr = SYMBOL_HIDE(__trampoline_rel_start); + trampoline_ptr < SYMBOL_HIDE(__trampoline_rel_stop); ++trampoline_ptr ) *(u32 *)(*trampoline_ptr + (long)trampoline_ptr) += phys; - for ( trampoline_ptr = __trampoline_seg_start; - trampoline_ptr < __trampoline_seg_stop; + for ( trampoline_ptr = SYMBOL_HIDE(__trampoline_seg_start); + trampoline_ptr < SYMBOL_HIDE(__trampoline_seg_stop); ++trampoline_ptr ) *(u16 *)(*trampoline_ptr + (long)trampoline_ptr) = phys >> 4; } diff --git a/xen/arch/x86/percpu.c b/xen/arch/x86/percpu.c index 8be4ebd..8a08daa 100644 --- a/xen/arch/x86/percpu.c +++ b/xen/arch/x86/percpu.c @@ -13,7 +13,8 @@ unsigned long __per_cpu_offset[NR_CPUS]; * context of PV guests. */ #define INVALID_PERCPU_AREA (0x8000000000000000L - (long)__per_cpu_start) -#define PERCPU_ORDER get_order_from_bytes(__per_cpu_data_end - __per_cpu_start) +#define PERCPU_ORDER get_order_from_bytes(SYMBOL_HIDE(__per_cpu_data_end) - \ + SYMBOL_HIDE(__per_cpu_start)) void __init percpu_init_areas(void) { @@ -33,8 +34,9 @@ static int init_percpu_area(unsigned int cpu) if ( (p = alloc_xenheap_pages(PERCPU_ORDER, 0)) == NULL ) return -ENOMEM; - memset(p, 0, __per_cpu_data_end - __per_cpu_start); - __per_cpu_offset[cpu] = p - __per_cpu_start; + memset(p, 0, SYMBOL_HIDE(__per_cpu_data_end) - + SYMBOL_HIDE(__per_cpu_start)); + __per_cpu_offset[cpu] = p - SYMBOL_HIDE(__per_cpu_start); return 0; } @@ -49,7 +51,7 @@ static void _free_percpu_area(struct rcu_head *head) { struct free_info *info = container_of(head, struct free_info, rcu); unsigned int cpu = info->cpu; - char *p = __per_cpu_start + __per_cpu_offset[cpu]; + char *p = SYMBOL_HIDE(__per_cpu_start) + __per_cpu_offset[cpu]; free_xenheap_pages(p, PERCPU_ORDER); __per_cpu_offset[cpu] = INVALID_PERCPU_AREA; diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 06eb483..379d84e 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -972,7 +972,8 @@ void __init noreturn __start_xen(unsigned long mbi_p) * respective reserve_e820_ram() invocation below. */ mod[mbi->mods_count].mod_start = virt_to_mfn(_stext); - mod[mbi->mods_count].mod_end = __2M_rwdata_end - _stext; + mod[mbi->mods_count].mod_end = SYMBOL_HIDE(__2M_rwdata_end) - + SYMBOL_HIDE(_stext); } modules_headroom = bzimage_headroom(bootstrap_map(mod), mod->mod_end); @@ -1067,7 +1068,8 @@ void __init noreturn __start_xen(unsigned long mbi_p) * data until after we have switched to the relocated pagetables! */ barrier(); - move_memory(e + XEN_IMG_OFFSET, XEN_IMG_OFFSET, _end - _start, 1); + move_memory(e + XEN_IMG_OFFSET, XEN_IMG_OFFSET, + SYMBOL_HIDE(_end) - SYMBOL_HIDE(_start), 1); /* Walk initial pagetables, relocating page directory entries. */ pl4e = __va(__pa(idle_pg_table)); @@ -1382,7 +1384,8 @@ void __init noreturn __start_xen(unsigned long mbi_p) } #endif - xen_virt_end = ((unsigned long)_end + (1UL << L2_PAGETABLE_SHIFT) - 1) & + xen_virt_end = ((unsigned long)SYMBOL_HIDE(_end) + + (1UL << L2_PAGETABLE_SHIFT) - 1) & ~((1UL << L2_PAGETABLE_SHIFT) - 1); destroy_xen_mappings(xen_virt_end, XEN_VIRT_START + BOOTSTRAP_MAP_BASE); diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c index 7d1226d..5048d86 100644 --- a/xen/arch/x86/smpboot.c +++ b/xen/arch/x86/smpboot.c @@ -810,8 +810,9 @@ static int setup_cpu_root_pgt(unsigned int cpu) { const char *ptr; - for ( rc = 0, ptr = _stextentry; - !rc && ptr < _etextentry; ptr += PAGE_SIZE ) + for ( rc = 0, ptr = SYMBOL_HIDE(_stextentry); + !rc && ptr < SYMBOL_HIDE(_etextentry); + ptr += PAGE_SIZE ) rc = clone_mapping(ptr, rpt); if ( rc ) diff --git a/xen/drivers/vpci/vpci.c b/xen/drivers/vpci/vpci.c index 82607bd..424b41d 100644 --- a/xen/drivers/vpci/vpci.c +++ b/xen/drivers/vpci/vpci.c @@ -33,7 +33,8 @@ struct vpci_register { #ifdef __XEN__ extern vpci_register_init_t *const __start_vpci_array[]; extern vpci_register_init_t *const __end_vpci_array[]; -#define NUM_VPCI_INIT (__end_vpci_array - __start_vpci_array) +#define NUM_VPCI_INIT (SYMBOL_HIDE(__end_vpci_array) - \ + SYMBOL_HIDE(__start_vpci_array)) void vpci_remove_device(struct pci_dev *pdev) { -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |