forked from Minki/linux
Fix compile failure with non modular builds
Commit deac93df26
("lib: Correct printk
%pF to work on all architectures") broke the non modular builds by
moving an essential function into modules.c. Fix this by moving it
out again and into asm/sections.h as an inline. To do this, the
definition of struct ppc64_opd_entry has been lifted out of modules.c
and put in asm/elf.h where it belongs.
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
32dde0f975
commit
2d291e9027
@ -409,6 +409,13 @@ do { \
|
|||||||
/* Keep this the last entry. */
|
/* Keep this the last entry. */
|
||||||
#define R_PPC64_NUM 107
|
#define R_PPC64_NUM 107
|
||||||
|
|
||||||
|
/* There's actually a third entry here, but it's unused */
|
||||||
|
struct ppc64_opd_entry
|
||||||
|
{
|
||||||
|
unsigned long funcaddr;
|
||||||
|
unsigned long r2;
|
||||||
|
};
|
||||||
|
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
#ifdef CONFIG_SPU_BASE
|
#ifdef CONFIG_SPU_BASE
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
#define _ASM_POWERPC_SECTIONS_H
|
#define _ASM_POWERPC_SECTIONS_H
|
||||||
#ifdef __KERNEL__
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
|
#include <linux/elf.h>
|
||||||
|
#include <linux/uaccess.h>
|
||||||
#include <asm-generic/sections.h>
|
#include <asm-generic/sections.h>
|
||||||
|
|
||||||
#ifdef __powerpc64__
|
#ifdef __powerpc64__
|
||||||
@ -17,7 +19,15 @@ static inline int in_kernel_text(unsigned long addr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#undef dereference_function_descriptor
|
#undef dereference_function_descriptor
|
||||||
void *dereference_function_descriptor(void *);
|
static inline void *dereference_function_descriptor(void *ptr)
|
||||||
|
{
|
||||||
|
struct ppc64_opd_entry *desc = ptr;
|
||||||
|
void *p;
|
||||||
|
|
||||||
|
if (!probe_kernel_address(&desc->funcaddr, p))
|
||||||
|
ptr = p;
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -21,9 +21,7 @@
|
|||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/vmalloc.h>
|
#include <linux/vmalloc.h>
|
||||||
#include <linux/bug.h>
|
#include <linux/bug.h>
|
||||||
#include <linux/uaccess.h>
|
|
||||||
#include <asm/module.h>
|
#include <asm/module.h>
|
||||||
#include <asm/sections.h>
|
|
||||||
#include <asm/firmware.h>
|
#include <asm/firmware.h>
|
||||||
#include <asm/code-patching.h>
|
#include <asm/code-patching.h>
|
||||||
#include <linux/sort.h>
|
#include <linux/sort.h>
|
||||||
@ -43,13 +41,6 @@
|
|||||||
#define DEBUGP(fmt , ...)
|
#define DEBUGP(fmt , ...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* There's actually a third entry here, but it's unused */
|
|
||||||
struct ppc64_opd_entry
|
|
||||||
{
|
|
||||||
unsigned long funcaddr;
|
|
||||||
unsigned long r2;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Like PPC32, we need little trampolines to do > 24-bit jumps (into
|
/* Like PPC32, we need little trampolines to do > 24-bit jumps (into
|
||||||
the kernel itself). But on PPC64, these need to be used for every
|
the kernel itself). But on PPC64, these need to be used for every
|
||||||
jump, actually, to reset r2 (TOC+0x8000). */
|
jump, actually, to reset r2 (TOC+0x8000). */
|
||||||
@ -452,13 +443,3 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *dereference_function_descriptor(void *ptr)
|
|
||||||
{
|
|
||||||
struct ppc64_opd_entry *desc = ptr;
|
|
||||||
void *p;
|
|
||||||
|
|
||||||
if (!probe_kernel_address(&desc->funcaddr, p))
|
|
||||||
ptr = p;
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user