mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-24 03:07:29 +07:00
766c580356
This tool is based on the x86/boot/tools/relocs tool. It parses the relocations present in the vmlinux elf file, building a table of relocations that will be necessary to run the kernel from an address other than its link address. This table is inserted into the vmlinux elf, in the .data.relocs section. The table is subsequently used by the code in arch/mips/kernel/relocate.c (added later) to relocate the kernel. The tool, by default, also marks all relocation sections as 0 length. This is due to objcopy currently being unable to handle copying the relocations between 64 and 32 bit elf files as is done when building a 64 bit kernel. Signed-off-by: Matt Redfearn <matt.redfearn@imgtec.com> Cc: linux-mips@linux-mips.org Cc: kernel-hardening@lists.openwall.com Cc: linux-kernel@vger.kernel.org Patchwork: https://patchwork.linux-mips.org/patch/12981/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
46 lines
787 B
C
46 lines
787 B
C
#ifndef RELOCS_H
|
|
#define RELOCS_H
|
|
|
|
#include <stdio.h>
|
|
#include <stdarg.h>
|
|
#include <stdlib.h>
|
|
#include <stdint.h>
|
|
#include <inttypes.h>
|
|
#include <string.h>
|
|
#include <errno.h>
|
|
#include <unistd.h>
|
|
#include <elf.h>
|
|
#include <byteswap.h>
|
|
#define USE_BSD
|
|
#include <endian.h>
|
|
#include <regex.h>
|
|
|
|
void die(char *fmt, ...);
|
|
|
|
/*
|
|
* Introduced for MIPSr6
|
|
*/
|
|
#ifndef R_MIPS_PC21_S2
|
|
#define R_MIPS_PC21_S2 60
|
|
#endif
|
|
|
|
#ifndef R_MIPS_PC26_S2
|
|
#define R_MIPS_PC26_S2 61
|
|
#endif
|
|
|
|
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
|
|
|
enum symtype {
|
|
S_ABS,
|
|
S_REL,
|
|
S_SEG,
|
|
S_LIN,
|
|
S_NSYMTYPES
|
|
};
|
|
|
|
void process_32(FILE *fp, int as_text, int as_bin,
|
|
int show_reloc_info, int keep_relocs);
|
|
void process_64(FILE *fp, int as_text, int as_bin,
|
|
int show_reloc_info, int keep_relocs);
|
|
#endif /* RELOCS_H */
|