brintos

brintos / linux-shallow public Read only

0
0
Text · 2.6 KiB · 4e2e4f4 Raw
90 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef __GENELF_H__3#define __GENELF_H__4 5#include <linux/math.h>6 7/* genelf.c */8int jit_write_elf(int fd, uint64_t code_addr, const char *sym,9		  const void *code, int csize, void *debug, int nr_debug_entries,10		  void *unwinding, uint64_t unwinding_header_size, uint64_t unwinding_size);11#ifdef HAVE_DWARF_SUPPORT12/* genelf_debug.c */13int jit_add_debug_info(Elf *e, uint64_t code_addr, void *debug, int nr_debug_entries);14#endif15 16#if   defined(__arm__)17#define GEN_ELF_ARCH	EM_ARM18#define GEN_ELF_CLASS	ELFCLASS3219#elif defined(__aarch64__)20#define GEN_ELF_ARCH	EM_AARCH6421#define GEN_ELF_CLASS	ELFCLASS6422#elif defined(__x86_64__)23#define GEN_ELF_ARCH	EM_X86_6424#define GEN_ELF_CLASS	ELFCLASS6425#elif defined(__i386__)26#define GEN_ELF_ARCH	EM_38627#define GEN_ELF_CLASS	ELFCLASS3228#elif defined(__powerpc64__)29#define GEN_ELF_ARCH	EM_PPC6430#define GEN_ELF_CLASS	ELFCLASS6431#elif defined(__powerpc__)32#define GEN_ELF_ARCH	EM_PPC33#define GEN_ELF_CLASS	ELFCLASS3234#elif defined(__sparc__) && defined(__arch64__)35#define GEN_ELF_ARCH	EM_SPARCV936#define GEN_ELF_CLASS	ELFCLASS6437#elif defined(__sparc__)38#define GEN_ELF_ARCH	EM_SPARC39#define GEN_ELF_CLASS	ELFCLASS3240#elif defined(__s390x__)41#define GEN_ELF_ARCH	EM_S39042#define GEN_ELF_CLASS	ELFCLASS6443#elif defined(__riscv) && __riscv_xlen == 6444#define GEN_ELF_ARCH	EM_RISCV45#define GEN_ELF_CLASS	ELFCLASS6446#elif defined(__riscv) && __riscv_xlen == 3247#define GEN_ELF_ARCH	EM_RISCV48#define GEN_ELF_CLASS	ELFCLASS3249#elif defined(__loongarch__)50#define GEN_ELF_ARCH	EM_LOONGARCH51#define GEN_ELF_CLASS	ELFCLASS6452#else53#error "unsupported architecture"54#endif55 56#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__57#define GEN_ELF_ENDIAN	ELFDATA2MSB58#else59#define GEN_ELF_ENDIAN	ELFDATA2LSB60#endif61 62#if GEN_ELF_CLASS == ELFCLASS6463#define elf_newehdr	elf64_newehdr64#define elf_newphdr	elf64_newphdr65#define elf_getshdr	elf64_getshdr66#define Elf_Ehdr	Elf64_Ehdr67#define Elf_Phdr	Elf64_Phdr68#define Elf_Shdr	Elf64_Shdr69#define Elf_Sym		Elf64_Sym70#define ELF_ST_TYPE(a)	ELF64_ST_TYPE(a)71#define ELF_ST_BIND(a)	ELF64_ST_BIND(a)72#define ELF_ST_VIS(a)	ELF64_ST_VISIBILITY(a)73#else74#define elf_newehdr	elf32_newehdr75#define elf_newphdr	elf32_newphdr76#define elf_getshdr	elf32_getshdr77#define Elf_Ehdr	Elf32_Ehdr78#define Elf_Phdr	Elf32_Phdr79#define Elf_Shdr	Elf32_Shdr80#define Elf_Sym		Elf32_Sym81#define ELF_ST_TYPE(a)	ELF32_ST_TYPE(a)82#define ELF_ST_BIND(a)	ELF32_ST_BIND(a)83#define ELF_ST_VIS(a)	ELF32_ST_VISIBILITY(a)84#endif85 86/* The .text section is directly after the ELF header */87#define GEN_ELF_TEXT_OFFSET round_up(sizeof(Elf_Ehdr) + sizeof(Elf_Phdr), 16)88 89#endif90