1b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines/* 2b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * Copyright 2011, The Android Open Source Project 3b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * 4b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 5b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * you may not use this file except in compliance with the License. 6b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * You may obtain a copy of the License at 7b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * 8b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * http://www.apache.org/licenses/LICENSE-2.0 9b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * 10b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * Unless required by applicable law or agreed to in writing, software 11b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 12b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * See the License for the specific language governing permissions and 14b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * limitations under the License. 15b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines */ 16b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 17b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#ifndef ELF_TYPES_H 18b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#define ELF_TYPES_H 19b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 20b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#include "utils/traits.h" 21b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 22b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#include <stdint.h> 23b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#include <llvm/Support/raw_ostream.h> 24b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 25b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 26b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines// ELF structure forward declarations 27b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFHeader; 28b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFObject; 29b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFProgramHeader; 30b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFReloc; 31b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFRelocRel; // For TypeTraits 32b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFRelocRela; // For TypeTraits 33b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFSection; 34b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFSectionBits; 35b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFSectionHeader; 36b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFSectionHeaderTable; 37b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFSectionNoBits; 38b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFSectionProgBits; 39b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFSectionRelTable; 40b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFSectionStrTab; 41b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFSectionSymTab; 42b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> class ELFSymbol; 43b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 44b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines// Note: Following TypeTraits specialization MUST be compliant to the 45b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines// System V Application Binary Interface, Chap 4, Data Representation. 46b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 47b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(ELFHeader<32> , 52, 4) 48b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(ELFHeader<64> , 64, 8) 49b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 50b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(ELFProgramHeader<32> , 32, 4) 51b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(ELFProgramHeader<64> , 56, 8) 52b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 53b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(ELFSectionHeader<32> , 40, 4) 54b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(ELFSectionHeader<64> , 64, 8) 55b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 56b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(ELFSymbol<32> , 16, 4) 57b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(ELFSymbol<64> , 24, 8) 58b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 59b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(ELFRelocRel<32> , 8, 4) 60b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(ELFRelocRel<64> , 16, 8) 61b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 62b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(ELFRelocRela<32> , 12, 4) 63b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(ELFRelocRela<64> , 24, 8) 64b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 65b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 66b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines// ELF primitive type wrappers 67b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinesnamespace detail { 68b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#define ELF_TYPE_WRAPPER(TYPE, IMPL) \ 69b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines struct TYPE { \ 70b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines IMPL value; \ 71b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines \ 72b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines TYPE() : value(0) { } \ 73b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines TYPE(IMPL val) : value(val) { } \ 74b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines \ 75b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines TYPE &operator=(TYPE const &with) { value = with.value; return *this; } \ 76b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines TYPE &operator=(IMPL val) { value = val; return *this; } \ 77b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines \ 78b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines operator IMPL() const { return value; } \ 79b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines }; 80b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 81b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF_TYPE_WRAPPER(ELFHalf , uint16_t) 82b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF_TYPE_WRAPPER(ELFWord , uint32_t) 83b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF_TYPE_WRAPPER(ELFSword , int32_t) 84b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF_TYPE_WRAPPER(ELFXword , uint64_t) 85b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF_TYPE_WRAPPER(ELFSxword , int64_t) 86b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF_TYPE_WRAPPER(ELF32Address , uint32_t) 87b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF_TYPE_WRAPPER(ELF32Offset , uint32_t) 88b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF_TYPE_WRAPPER(ELF64Address , uint64_t) 89b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF_TYPE_WRAPPER(ELF64Offset , uint64_t) 90b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 91b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#undef ELF_TYPE_WRAPPER 92b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 93b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines extern llvm::raw_ostream &operator<<(llvm::raw_ostream &, 94b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF32Address const &); 95b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines extern llvm::raw_ostream &operator<<(llvm::raw_ostream &, 96b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF32Offset const &); 97b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines extern llvm::raw_ostream &operator<<(llvm::raw_ostream &, 98b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF64Address const &); 99b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines extern llvm::raw_ostream &operator<<(llvm::raw_ostream &, 100b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF64Offset const &); 101b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines} 102b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 103b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines// Note: Following TypeTraits specialization MUST be compliant to the 104b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines// System V Application Binary Interface, Chap 4, Data Representation. 105b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 106b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(detail::ELFHalf , 2, 2) 107b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(detail::ELFWord , 4, 4) 108b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(detail::ELFSword , 4, 4) 109b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(detail::ELFXword , 8, 8) 110b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(detail::ELFSxword , 8, 8) 111b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(detail::ELF32Address , 4, 4) 112b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(detail::ELF32Offset , 4, 4) 113b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(detail::ELF64Address , 8, 8) 114b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesTYPE_TRAITS_SPECIALIZE(detail::ELF64Offset , 8, 8) 115b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 116b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <unsigned Bitwidth> 117b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinesstruct ELFPrimitiveTypes; 118b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 119b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <> 120b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinesstruct ELFPrimitiveTypes<32> { 121b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELF32Address address; 122b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELF32Offset offset; 123b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 124b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef unsigned char byte; 125b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFHalf half; 126b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFWord word; 127b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFSword sword; 128b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 129b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFWord relinfo; 130b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFSword addend; 131b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFWord symsize; 132b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 133b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines // Note: Don't use these types. They are not in the specification of 134b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines // ELF 32. However, we need these typedefs to define the type introduce 135b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines // macro. 136b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef void xword; 137b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef void sxword; 138b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines}; 139b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 140b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestemplate <> 141b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinesstruct ELFPrimitiveTypes<64> { 142b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELF64Address address; 143b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELF64Offset offset; 144b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 145b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef unsigned char byte; 146b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFHalf half; 147b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFWord word; 148b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFSword sword; 149b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFXword xword; 150b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFSxword sxword; 151b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 152b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFXword relinfo; 153b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFSxword addend; 154b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef detail::ELFXword symsize; 155b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines}; 156b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 157b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 158b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines// Macros to introduce these ELF types to a specific scope 159b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 160b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#define ELF_STRUCT_TYPE_INTRO_TO_SCOPE(BITWIDTH) \ 161b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFHeader<BITWIDTH> ELFHeaderTy; \ 162b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFObject<BITWIDTH> ELFObjectTy; \ 163b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFProgramHeader<BITWIDTH> ELFProgramHeaderTy; \ 164b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFReloc<BITWIDTH> ELFRelocTy; \ 165b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFRelocRel<BITWIDTH> ELFRelocRelTy; \ 166b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFRelocRela<BITWIDTH> ELFRelocRelaTy; \ 167b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFSection<BITWIDTH> ELFSectionTy; \ 168b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFSectionBits<BITWIDTH> ELFSectionBitsTy; \ 169b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFSectionHeader<BITWIDTH> ELFSectionHeaderTy; \ 170b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFSectionHeaderTable<BITWIDTH> ELFSectionHeaderTableTy; \ 171b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFSectionNoBits<BITWIDTH> ELFSectionNoBitsTy; \ 172b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFSectionProgBits<BITWIDTH> ELFSectionProgBitsTy; \ 173b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFSectionRelTable<BITWIDTH> ELFSectionRelTableTy; \ 174b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFSectionStrTab<BITWIDTH> ELFSectionStrTabTy; \ 175b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFSectionSymTab<BITWIDTH> ELFSectionSymTabTy; \ 176b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFSymbol<BITWIDTH> ELFSymbolTy; 177b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 178b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 179b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#define ELF_TYPE_INTRO_TO_TEMPLATE_SCOPE(BITWIDTH) \ 180b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines /* ELF structures */ \ 181b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF_STRUCT_TYPE_INTRO_TO_SCOPE(BITWIDTH) \ 182b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines \ 183b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines /* ELF primitives */ \ 184b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef typename ELFPrimitiveTypes<BITWIDTH>::address addr_t; \ 185b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef typename ELFPrimitiveTypes<BITWIDTH>::offset offset_t; \ 186b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef typename ELFPrimitiveTypes<BITWIDTH>::byte byte_t; \ 187b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef typename ELFPrimitiveTypes<BITWIDTH>::half half_t; \ 188b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef typename ELFPrimitiveTypes<BITWIDTH>::word word_t; \ 189b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef typename ELFPrimitiveTypes<BITWIDTH>::sword sword_t; \ 190b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef typename ELFPrimitiveTypes<BITWIDTH>::xword xword_t; \ 191b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef typename ELFPrimitiveTypes<BITWIDTH>::sxword sxword_t; \ 192b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef typename ELFPrimitiveTypes<BITWIDTH>::relinfo relinfo_t; \ 193b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef typename ELFPrimitiveTypes<BITWIDTH>::addend addend_t; \ 194b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef typename ELFPrimitiveTypes<BITWIDTH>::symsize symsize_t; 195b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 196b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 197b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#define ELF_TYPE_INTRO_TO_SCOPE(BITWIDTH) \ 198b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines /* ELF structures */ \ 199b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines ELF_STRUCT_TYPE_INTRO_TO_SCOPE(BITWIDTH) \ 200b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines \ 201b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines /* ELF primitives */ \ 202b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFPrimitiveTypes<BITWIDTH>::address addr_t; \ 203b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFPrimitiveTypes<BITWIDTH>::offset offset_t; \ 204b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFPrimitiveTypes<BITWIDTH>::byte byte_t; \ 205b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFPrimitiveTypes<BITWIDTH>::half half_t; \ 206b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFPrimitiveTypes<BITWIDTH>::word word_t; \ 207b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFPrimitiveTypes<BITWIDTH>::sword sword_t; \ 208b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFPrimitiveTypes<BITWIDTH>::xword xword_t; \ 209b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFPrimitiveTypes<BITWIDTH>::sxword sxword_t; \ 210b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFPrimitiveTypes<BITWIDTH>::relinfo relinfo_t; \ 211b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFPrimitiveTypes<BITWIDTH>::addend addend_t; \ 212b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines typedef ELFPrimitiveTypes<BITWIDTH>::symsize symsize_t; 213b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 214b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines 215b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#endif // ELF_TYPES_H 216