Skip to content

Commit

Permalink
[IA64] fix compile failure with non modular builds
Browse files Browse the repository at this point in the history
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 definitions of struct fdesc and struct
got_val have been lifted out of modules.c and put in asm/elf.h where
they belong.

Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
  • Loading branch information
James Bottomley authored and Tony Luck committed Sep 10, 2008
1 parent adee14b commit 4611a77
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 22 deletions.
15 changes: 15 additions & 0 deletions arch/ia64/include/asm/elf.h
Original file line number Diff line number Diff line change
Expand Up @@ -266,4 +266,19 @@ do { \
} \
} while (0)

/*
* format for entries in the Global Offset Table
*/
struct got_entry {
uint64_t val;
};

/*
* Layout of the Function Descriptor
*/
struct fdesc {
uint64_t ip;
uint64_t gp;
};

#endif /* _ASM_IA64_ELF_H */
13 changes: 12 additions & 1 deletion arch/ia64/include/asm/sections.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
* David Mosberger-Tang <davidm@hpl.hp.com>
*/

#include <linux/elf.h>
#include <linux/uaccess.h>
#include <asm-generic/sections.h>

extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[];
Expand All @@ -22,7 +24,16 @@ extern char __start_unwind[], __end_unwind[];
extern char __start_ivt_text[], __end_ivt_text[];

#undef dereference_function_descriptor
void *dereference_function_descriptor(void *);
static inline void *dereference_function_descriptor(void *ptr)
{
struct fdesc *desc = ptr;
void *p;

if (!probe_kernel_address(&desc->ip, p))
ptr = p;
return ptr;
}


#endif /* _ASM_IA64_SECTIONS_H */

21 changes: 0 additions & 21 deletions arch/ia64/kernel/module.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,9 @@
#include <linux/elf.h>
#include <linux/moduleloader.h>
#include <linux/string.h>
#include <linux/uaccess.h>
#include <linux/vmalloc.h>

#include <asm/patch.h>
#include <asm/sections.h>
#include <asm/unaligned.h>

#define ARCH_MODULE_DEBUG 0
Expand Down Expand Up @@ -137,15 +135,6 @@ static const char *reloc_name[256] = {

#undef N

struct got_entry {
uint64_t val;
};

struct fdesc {
uint64_t ip;
uint64_t gp;
};

/* Opaque struct for insns, to protect against derefs. */
struct insn;

Expand Down Expand Up @@ -943,13 +932,3 @@ module_arch_cleanup (struct module *mod)
if (mod->arch.core_unw_table)
unw_remove_unwind_table(mod->arch.core_unw_table);
}

void *dereference_function_descriptor(void *ptr)
{
struct fdesc *desc = ptr;
void *p;

if (!probe_kernel_address(&desc->ip, p))
ptr = p;
return ptr;
}

0 comments on commit 4611a77

Please sign in to comment.