diff options
Diffstat (limited to 'arch/powerpc/include/asm/sections.h')
| -rw-r--r-- | arch/powerpc/include/asm/sections.h | 30 | 
1 files changed, 29 insertions, 1 deletions
diff --git a/arch/powerpc/include/asm/sections.h b/arch/powerpc/include/asm/sections.h index 6fbce725c71..a5e930aca80 100644 --- a/arch/powerpc/include/asm/sections.h +++ b/arch/powerpc/include/asm/sections.h @@ -8,7 +8,11 @@  #ifdef __powerpc64__ -extern char _end[]; +extern char __start_interrupts[]; +extern char __end_interrupts[]; + +extern char __prom_init_toc_start[]; +extern char __prom_init_toc_end[];  static inline int in_kernel_text(unsigned long addr)  { @@ -18,12 +22,35 @@ static inline int in_kernel_text(unsigned long addr)  	return 0;  } +static inline int overlaps_interrupt_vector_text(unsigned long start, +							unsigned long end) +{ +	unsigned long real_start, real_end; +	real_start = __start_interrupts - _stext; +	real_end = __end_interrupts - _stext; + +	return start < (unsigned long)__va(real_end) && +		(unsigned long)__va(real_start) < end; +} +  static inline int overlaps_kernel_text(unsigned long start, unsigned long end)  {  	return start < (unsigned long)__init_end &&  		(unsigned long)_stext < end;  } +static inline int overlaps_kvm_tmp(unsigned long start, unsigned long end) +{ +#ifdef CONFIG_KVM_GUEST +	extern char kvm_tmp[]; +	return start < (unsigned long)kvm_tmp && +		(unsigned long)&kvm_tmp[1024 * 1024] < end; +#else +	return 0; +#endif +} + +#if !defined(_CALL_ELF) || _CALL_ELF != 2  #undef dereference_function_descriptor  static inline void *dereference_function_descriptor(void *ptr)  { @@ -34,6 +61,7 @@ static inline void *dereference_function_descriptor(void *ptr)  		ptr = p;  	return ptr;  } +#endif  #endif  | 
