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