187a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov// Copyright 2014 The Chromium Authors. All rights reserved. 287a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov// Use of this source code is governed by a BSD-style license that can be 387a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov// found in the LICENSE file. 487a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov 587a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov// Target-specific ELF type traits. 687a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov 787a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov#ifndef TOOLS_RELOCATION_PACKER_SRC_ELF_TRAITS_H_ 887a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov#define TOOLS_RELOCATION_PACKER_SRC_ELF_TRAITS_H_ 987a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov 1087a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov#include "elf.h" 1187a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov#include "libelf.h" 1287a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov 1383b44a9e733a20695c7171c6272c0a0f4958e969Lazar Trsic#if !defined(DT_MIPS_RLD_MAP_REL) 1483b44a9e733a20695c7171c6272c0a0f4958e969Lazar Trsic#define DT_MIPS_RLD_MAP_REL 0x70000035 1518c935ceabb54a32aff42f99c6d20680ac333157Dmitriy Ivanov#endif 1618c935ceabb54a32aff42f99c6d20680ac333157Dmitriy Ivanov 1787a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov// ELF is a traits structure used to provide convenient aliases for 18f8ff6b103bde3433d6f7dbf762fc7bf657d7de5fDmitriy Ivanov// 32/64 bit Elf types and functions, depending on the target file. 1987a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov 20f8ff6b103bde3433d6f7dbf762fc7bf657d7de5fDmitriy Ivanovstruct ELF32_traits { 2187a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf32_Addr Addr; 2287a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf32_Dyn Dyn; 2387a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf32_Ehdr Ehdr; 2487a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf32_Off Off; 2587a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf32_Phdr Phdr; 2687a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf32_Rel Rel; 2787a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf32_Rela Rela; 2887a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf32_Shdr Shdr; 2987a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf32_Sword Sword; 3087a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf32_Sxword Sxword; 3187a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf32_Sym Sym; 3287a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf32_Word Word; 3387a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf32_Xword Xword; 34f8ff6b103bde3433d6f7dbf762fc7bf657d7de5fDmitriy Ivanov typedef Elf32_Half Half; 3587a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov 3687a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov static inline Ehdr* getehdr(Elf* elf) { return elf32_getehdr(elf); } 3787a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov static inline Phdr* getphdr(Elf* elf) { return elf32_getphdr(elf); } 3887a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov static inline Shdr* getshdr(Elf_Scn* scn) { return elf32_getshdr(scn); } 39f8ff6b103bde3433d6f7dbf762fc7bf657d7de5fDmitriy Ivanov static inline Word elf_r_type(Word info) { return ELF32_R_TYPE(info); } 40f8ff6b103bde3433d6f7dbf762fc7bf657d7de5fDmitriy Ivanov static inline int elf_st_type(uint8_t info) { return ELF32_ST_TYPE(info); } 41f8ff6b103bde3433d6f7dbf762fc7bf657d7de5fDmitriy Ivanov static inline Word elf_r_sym(Word info) { return ELF32_R_SYM(info); } 4287a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov}; 4387a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov 44f8ff6b103bde3433d6f7dbf762fc7bf657d7de5fDmitriy Ivanovstruct ELF64_traits { 4587a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf64_Addr Addr; 4687a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf64_Dyn Dyn; 4787a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf64_Ehdr Ehdr; 4887a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf64_Off Off; 4987a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf64_Phdr Phdr; 5087a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf64_Rel Rel; 5187a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf64_Rela Rela; 5287a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf64_Shdr Shdr; 5387a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf64_Sword Sword; 5487a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf64_Sxword Sxword; 5587a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf64_Sym Sym; 5687a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf64_Word Word; 5787a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov typedef Elf64_Xword Xword; 58f8ff6b103bde3433d6f7dbf762fc7bf657d7de5fDmitriy Ivanov typedef Elf64_Half Half; 5987a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov 6087a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov static inline Ehdr* getehdr(Elf* elf) { return elf64_getehdr(elf); } 6187a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov static inline Phdr* getphdr(Elf* elf) { return elf64_getphdr(elf); } 6287a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov static inline Shdr* getshdr(Elf_Scn* scn) { return elf64_getshdr(scn); } 63f8ff6b103bde3433d6f7dbf762fc7bf657d7de5fDmitriy Ivanov static inline Xword elf_r_type(Xword info) { return ELF64_R_TYPE(info); } 64f8ff6b103bde3433d6f7dbf762fc7bf657d7de5fDmitriy Ivanov static inline int elf_st_type(uint8_t info) { return ELF64_ST_TYPE(info); } 65f8ff6b103bde3433d6f7dbf762fc7bf657d7de5fDmitriy Ivanov static inline Word elf_r_sym(Xword info) { return ELF64_R_SYM(info); } 6687a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov}; 6787a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov 6887a0617ebe7561bf28d3a19fbe192372598969b8Dmitriy Ivanov#endif // TOOLS_RELOCATION_PACKER_SRC_ELF_TRAITS_H_ 69