Use SYMBOL 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
CC: jbeul...@suse.com
CC: andrew.coop...@citrix.com
---
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 | 8
xen/arch/x86/setup.c| 8 +---
xen/arch/x86/smpboot.c | 5 +++--
xen/drivers/vpci/vpci.c | 2 +-
6 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/xen/arch/x86/alternative.c b/xen/arch/x86/alternative.c
index b8c819a..92c54eb 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(__alt_instructions),
+ SYMBOL(__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..8dcd981 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(__trampoline_rel_start);
+ trampoline_ptr < SYMBOL(__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(__trampoline_seg_start);
+ trampoline_ptr < SYMBOL(__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..920bb78 100644
--- a/xen/arch/x86/percpu.c
+++ b/xen/arch/x86/percpu.c
@@ -13,7 +13,7 @@ unsigned long __per_cpu_offset[NR_CPUS];
* context of PV guests.
*/
#define INVALID_PERCPU_AREA (0x8000L - (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(__per_cpu_data_end) -
SYMBOL(__per_cpu_start))
void __init percpu_init_areas(void)
{
@@ -33,8 +33,8 @@ 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(__per_cpu_data_end) - SYMBOL(__per_cpu_start));
+__per_cpu_offset[cpu] = p - SYMBOL(__per_cpu_start);
return 0;
}
@@ -49,7 +49,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(__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..5c35826 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -972,7 +972,7 @@ 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(__2M_rwdata_end) -
SYMBOL(_stext);
}
modules_headroom = bzimage_headroom(bootstrap_map(mod), mod->mod_end);
@@ -1067,7 +1067,8 @@ void __init noreturn __start_xen(unsigned long mbi_p)
* data until after we have switched to the relocated pagetables!
*/
barrier();
-move_memory(e +