mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 16:29:59 +00:00
![Helge Deller](/assets/img/avatar_default.png)
On 32bit (and sometimes 64bit) and with big kernel modules like xfs or ipv6 the relocation types R_PARISC_PCREL17F and R_PARISC_PCREL22F may fail to reach their PLT stub if we only create one big stub array for all sections at the beginning of the core or init section. With this patch we now instead add individual PLT stub entries directly in front of the code sections where the stubs are actually called. This reduces the distance between the PCREL location and the stub entry so that the relocations can be fulfilled. While calculating the final layout of the kernel module in memory, the kernel module loader calls arch_mod_section_prepend() to request the to be reserved amount of memory in front of each individual section. Tested with 32- and 64bit kernels. Signed-off-by: Helge Deller <deller@gmx.de> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
34 lines
763 B
C
34 lines
763 B
C
#ifndef _ASM_PARISC_MODULE_H
|
|
#define _ASM_PARISC_MODULE_H
|
|
/*
|
|
* This file contains the parisc architecture specific module code.
|
|
*/
|
|
#ifdef CONFIG_64BIT
|
|
#define Elf_Shdr Elf64_Shdr
|
|
#define Elf_Sym Elf64_Sym
|
|
#define Elf_Ehdr Elf64_Ehdr
|
|
#define Elf_Addr Elf64_Addr
|
|
#define Elf_Rela Elf64_Rela
|
|
#else
|
|
#define Elf_Shdr Elf32_Shdr
|
|
#define Elf_Sym Elf32_Sym
|
|
#define Elf_Ehdr Elf32_Ehdr
|
|
#define Elf_Addr Elf32_Addr
|
|
#define Elf_Rela Elf32_Rela
|
|
#endif
|
|
|
|
struct unwind_table;
|
|
|
|
struct mod_arch_specific
|
|
{
|
|
unsigned long got_offset, got_count, got_max;
|
|
unsigned long fdesc_offset, fdesc_count, fdesc_max;
|
|
struct {
|
|
unsigned long stub_offset;
|
|
unsigned int stub_entries;
|
|
} *section;
|
|
int unwind_section;
|
|
struct unwind_table *unwind;
|
|
};
|
|
|
|
#endif /* _ASM_PARISC_MODULE_H */
|