1/* 2 * Copyright 2002-2016 Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef SYMBOLPATCHER_ELF_H 6#define SYMBOLPATCHER_ELF_H 7 8 9#include <elf.h> 10 11/* Relocation types. */ 12#define R_X86_64_NONE 0 /* No relocation. */ 13#define R_X86_64_GLOB_DAT 6 /* Create GOT entry. */ 14#define R_X86_64_JUMP_SLOT 7 /* Create PLT entry. */ 15 16#define R_386_NONE 0 17#define R_386_GLOB_DAT 6 /* set GOT entry to data address */ 18#define R_386_JMP_SLOT 7 /* set GOT entry to code address */ 19 20#ifdef B_HAIKU_64_BIT 21typedef Elf64_Ehdr Elf_Ehdr; 22typedef Elf64_Shdr Elf_Shdr; 23typedef Elf64_Sym Elf_Sym; 24typedef Elf64_Rel Elf_Rel; 25typedef Elf64_Addr Elf_Addr; 26typedef Elf64_Word Elf_Word; 27#define ELFCLASS ELFCLASS64 28#define ELF_ST_BIND ELF64_ST_BIND 29#define ELF_ST_TYPE ELF64_ST_TYPE 30#define ELF_R_SYM ELF64_R_SYM 31#define ELF_R_TYPE ELF64_R_TYPE 32#define R_NONE R_X86_64_NONE 33#define R_GLOB_DAT R_X86_64_GLOB_DAT 34#define R_JUMP_SLOT R_X86_64_JUMP_SLOT 35#else 36typedef Elf32_Ehdr Elf_Ehdr; 37typedef Elf32_Shdr Elf_Shdr; 38typedef Elf32_Sym Elf_Sym; 39typedef Elf32_Rel Elf_Rel; 40typedef Elf32_Addr Elf_Addr; 41typedef Elf32_Word Elf_Word; 42#define ELFCLASS ELFCLASS32 43#define ELF_ST_BIND ELF32_ST_BIND 44#define ELF_ST_TYPE ELF32_ST_TYPE 45#define ELF_R_SYM ELF32_R_SYM 46#define ELF_R_TYPE ELF32_R_TYPE 47#define R_NONE R_386_NONE 48#define R_GLOB_DAT R_386_GLOB_DAT 49#define R_JUMP_SLOT R_386_JMP_SLOT 50#endif 51 52 53#endif /* SYMBOLPATCHER_ELF_H */ 54