mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
65fddcfca8
The replacement of <asm/pgrable.h> with <linux/pgtable.h> made the include of the latter in the middle of asm includes. Fix this up with the aid of the below script and manual adjustments here and there. import sys import re if len(sys.argv) is not 3: print "USAGE: %s <file> <header>" % (sys.argv[0]) sys.exit(1) hdr_to_move="#include <linux/%s>" % sys.argv[2] moved = False in_hdrs = False with open(sys.argv[1], "r") as f: lines = f.readlines() for _line in lines: line = _line.rstrip(' ') if line == hdr_to_move: continue if line.startswith("#include <linux/"): in_hdrs = True elif not moved and in_hdrs: moved = True print hdr_to_move print line Signed-off-by: Mike Rapoport <rppt@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Cain <bcain@codeaurora.org> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Chris Zankel <chris@zankel.net> Cc: "David S. Miller" <davem@davemloft.net> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Greentime Hu <green.hu@gmail.com> Cc: Greg Ungerer <gerg@linux-m68k.org> Cc: Guan Xuetao <gxt@pku.edu.cn> Cc: Guo Ren <guoren@kernel.org> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Helge Deller <deller@gmx.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: Ley Foon Tan <ley.foon.tan@intel.com> Cc: Mark Salter <msalter@redhat.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: Matt Turner <mattst88@gmail.com> Cc: Max Filippov <jcmvbkbc@gmail.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Michal Simek <monstr@monstr.eu> Cc: Nick Hu <nickhu@andestech.com> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Richard Weinberger <richard@nod.at> Cc: Rich Felker <dalias@libc.org> Cc: Russell King <linux@armlinux.org.uk> Cc: Stafford Horne <shorne@gmail.com> Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Tony Luck <tony.luck@intel.com> Cc: Vincent Chen <deanbo422@gmail.com> Cc: Vineet Gupta <vgupta@synopsys.com> Cc: Will Deacon <will@kernel.org> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Link: http://lkml.kernel.org/r/20200514170327.31389-4-rppt@kernel.org Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
123 lines
2.9 KiB
C
123 lines
2.9 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Copyright (C) 2007-2009 Michal Simek <monstr@monstr.eu>
|
|
* Copyright (C) 2007-2009 PetaLogix
|
|
*/
|
|
|
|
#include <linux/export.h>
|
|
#include <linux/moduleloader.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/elf.h>
|
|
#include <linux/vmalloc.h>
|
|
#include <linux/fs.h>
|
|
#include <linux/string.h>
|
|
#include <linux/pgtable.h>
|
|
|
|
#include <asm/cacheflush.h>
|
|
|
|
int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab,
|
|
unsigned int symindex, unsigned int relsec, struct module *module)
|
|
{
|
|
|
|
unsigned int i;
|
|
Elf32_Rela *rela = (void *)sechdrs[relsec].sh_addr;
|
|
Elf32_Sym *sym;
|
|
unsigned long int *location;
|
|
unsigned long int value;
|
|
#if __GNUC__ < 4
|
|
unsigned long int old_value;
|
|
#endif
|
|
|
|
pr_debug("Applying add relocation section %u to %u\n",
|
|
relsec, sechdrs[relsec].sh_info);
|
|
|
|
for (i = 0; i < sechdrs[relsec].sh_size / sizeof(*rela); i++) {
|
|
|
|
location = (void *)sechdrs[sechdrs[relsec].sh_info].sh_addr +
|
|
rela[i].r_offset;
|
|
sym = (Elf32_Sym *)sechdrs[symindex].sh_addr +
|
|
ELF32_R_SYM(rela[i].r_info);
|
|
value = sym->st_value + rela[i].r_addend;
|
|
|
|
switch (ELF32_R_TYPE(rela[i].r_info)) {
|
|
|
|
/*
|
|
* Be careful! mb-gcc / mb-ld splits the relocs between the
|
|
* text and the reloc table. In general this means we must
|
|
* read the current contents of (*location), add any offset
|
|
* then store the result back in
|
|
*/
|
|
|
|
case R_MICROBLAZE_32:
|
|
#if __GNUC__ < 4
|
|
old_value = *location;
|
|
*location = value + old_value;
|
|
|
|
pr_debug("R_MICROBLAZE_32 (%08lx->%08lx)\n",
|
|
old_value, value);
|
|
#else
|
|
*location = value;
|
|
#endif
|
|
break;
|
|
|
|
case R_MICROBLAZE_64:
|
|
#if __GNUC__ < 4
|
|
/* Split relocs only required/used pre gcc4.1.1 */
|
|
old_value = ((location[0] & 0x0000FFFF) << 16) |
|
|
(location[1] & 0x0000FFFF);
|
|
value += old_value;
|
|
#endif
|
|
location[0] = (location[0] & 0xFFFF0000) |
|
|
(value >> 16);
|
|
location[1] = (location[1] & 0xFFFF0000) |
|
|
(value & 0xFFFF);
|
|
#if __GNUC__ < 4
|
|
pr_debug("R_MICROBLAZE_64 (%08lx->%08lx)\n",
|
|
old_value, value);
|
|
#endif
|
|
break;
|
|
|
|
case R_MICROBLAZE_64_PCREL:
|
|
#if __GNUC__ < 4
|
|
old_value = (location[0] & 0xFFFF) << 16 |
|
|
(location[1] & 0xFFFF);
|
|
value -= old_value;
|
|
#endif
|
|
value -= (unsigned long int)(location) + 4;
|
|
location[0] = (location[0] & 0xFFFF0000) |
|
|
(value >> 16);
|
|
location[1] = (location[1] & 0xFFFF0000) |
|
|
(value & 0xFFFF);
|
|
pr_debug("R_MICROBLAZE_64_PCREL (%08lx)\n",
|
|
value);
|
|
break;
|
|
|
|
case R_MICROBLAZE_32_PCREL_LO:
|
|
pr_debug("R_MICROBLAZE_32_PCREL_LO\n");
|
|
break;
|
|
|
|
case R_MICROBLAZE_64_NONE:
|
|
pr_debug("R_MICROBLAZE_64_NONE\n");
|
|
break;
|
|
|
|
case R_MICROBLAZE_NONE:
|
|
pr_debug("R_MICROBLAZE_NONE\n");
|
|
break;
|
|
|
|
default:
|
|
pr_err("module %s: Unknown relocation: %u\n",
|
|
module->name,
|
|
ELF32_R_TYPE(rela[i].r_info));
|
|
return -ENOEXEC;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int module_finalize(const Elf32_Ehdr *hdr, const Elf_Shdr *sechdrs,
|
|
struct module *module)
|
|
{
|
|
flush_dcache();
|
|
return 0;
|
|
}
|