1fbcd54b1e67ffa27f2b2ce087ee300138828d730Jon Loeliger#ifndef _ASM_POWERPC_SECTIONS_H 2fbcd54b1e67ffa27f2b2ce087ee300138828d730Jon Loeliger#define _ASM_POWERPC_SECTIONS_H 388ced0314938814e1772b4d0d7ab20c52e4472b6Arnd Bergmann#ifdef __KERNEL__ 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 52d291e902791e1c8d72bc223b6f063bbb27a1280James Bottomley#include <linux/elf.h> 62d291e902791e1c8d72bc223b6f063bbb27a1280James Bottomley#include <linux/uaccess.h> 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm-generic/sections.h> 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 9fbcd54b1e67ffa27f2b2ce087ee300138828d730Jon Loeliger#ifdef __powerpc64__ 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 11d715e433b7ad19c02fc4becf0d5e9a59f97925deAnton Blanchardextern char __end_interrupts[]; 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline int in_kernel_text(unsigned long addr) 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (addr >= (unsigned long)_stext && addr < (unsigned long)__init_end) 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return 1; 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return 0; 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 21549e8152de8039506f69c677a4546e5427aa6ae7Paul Mackerrasstatic inline int overlaps_kernel_text(unsigned long start, unsigned long end) 22549e8152de8039506f69c677a4546e5427aa6ae7Paul Mackerras{ 23549e8152de8039506f69c677a4546e5427aa6ae7Paul Mackerras return start < (unsigned long)__init_end && 24549e8152de8039506f69c677a4546e5427aa6ae7Paul Mackerras (unsigned long)_stext < end; 25549e8152de8039506f69c677a4546e5427aa6ae7Paul Mackerras} 26549e8152de8039506f69c677a4546e5427aa6ae7Paul Mackerras 27deac93df26b20cf8438339b5935b5f5643bc30c9James Bottomley#undef dereference_function_descriptor 282d291e902791e1c8d72bc223b6f063bbb27a1280James Bottomleystatic inline void *dereference_function_descriptor(void *ptr) 292d291e902791e1c8d72bc223b6f063bbb27a1280James Bottomley{ 302d291e902791e1c8d72bc223b6f063bbb27a1280James Bottomley struct ppc64_opd_entry *desc = ptr; 312d291e902791e1c8d72bc223b6f063bbb27a1280James Bottomley void *p; 322d291e902791e1c8d72bc223b6f063bbb27a1280James Bottomley 332d291e902791e1c8d72bc223b6f063bbb27a1280James Bottomley if (!probe_kernel_address(&desc->funcaddr, p)) 342d291e902791e1c8d72bc223b6f063bbb27a1280James Bottomley ptr = p; 352d291e902791e1c8d72bc223b6f063bbb27a1280James Bottomley return ptr; 362d291e902791e1c8d72bc223b6f063bbb27a1280James Bottomley} 37deac93df26b20cf8438339b5935b5f5643bc30c9James Bottomley 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 39fbcd54b1e67ffa27f2b2ce087ee300138828d730Jon Loeliger 4088ced0314938814e1772b4d0d7ab20c52e4472b6Arnd Bergmann#endif /* __KERNEL__ */ 41fbcd54b1e67ffa27f2b2ce087ee300138828d730Jon Loeliger#endif /* _ASM_POWERPC_SECTIONS_H */ 42