1 /*---------------------------------------------------------------------------* 2 Project: TwlSDK - bin2obj 3 File: elf.h 4 5 Copyright 2005-2008 Nintendo. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Date:: 2008-09-18#$ 14 $Rev: 8573 $ 15 $Author: okubata_ryoma $ 16 *---------------------------------------------------------------------------*/ 17 #ifndef ELF_H__ 18 #define ELF_H__ 19 20 // 21 // ELF HEADER 22 // 23 #define EI_NIDENT 16 24 25 typedef struct 26 { 27 u8 e_ident[EI_NIDENT]; 28 u16 e_type; 29 u16 e_machine; 30 u32 e_version; 31 u32 e_entry; 32 u32 e_phoff; // Offset to ProgramHeader table 33 u32 e_shoff; // Offset to SectionHeader table 34 u32 e_flags; 35 u16 e_ehsize; // Size of ElfHeader 36 u16 e_phentsize; // ProgramHeader table size 37 u16 e_phnum; // Number of ProgramHeaders 38 u16 e_shentsize; // SectionHeader table size 39 u16 e_shnum; // Number of SectionHeaders 40 u16 e_shstrndx; // Index number for Section name table 41 } 42 ELF32_ElfHeader; 43 44 // e_ident 45 #define ELFMAG0 0x7f 46 #define ELFMAG1 'E' 47 #define ELFMAG2 'L' 48 #define ELFMAG3 'F' 49 #define ELFCLASS32 1 50 51 #define ELFDATA2UNDEF 0 52 #define ELFDATA2LSB 1 // Little-endian 53 #define ELFDATA2MSB 2 // Big-endian 54 55 // e_type 56 #define ET_REL 1 57 // e_machine 58 #define EM_PPC 20 // PowerPC 59 #define EM_ARM 40 // ARM 60 // e_version 61 #define EV_CURRENT 1 62 63 // 64 // SECTION HEADER 65 // 66 typedef struct 67 { 68 u32 sh_name; // Section name table starting index 69 u32 sh_type; // Section type SHT_* 70 u32 sh_flags; 71 u32 sh_addr; 72 u32 sh_offset; 73 u32 sh_size; 74 u32 sh_link; 75 u32 sh_info; 76 u32 sh_addralign; 77 u32 sh_entsize; 78 } 79 ELF32_SectionHeader; 80 81 // sh_type 82 #define SHT_NULL 0 83 #define SHT_PROGBITS 1 84 #define SHT_SYMTAB 2 85 #define SHT_STRTAB 3 86 87 #define SHF_NULL 0x0 88 #define SHF_WRITE 0x1 89 #define SHF_ALLOC 0x2 90 91 // 92 // SYMBOL TABLE 93 // 94 typedef struct 95 { 96 u32 st_name; // Symbol name starting index 97 u32 st_value; // Symbol value (lvalue) 98 u32 st_size; // Size of Symbol itself (object size, etc) 99 u8 st_info; // Concatenate STB_* and STT_* 100 u8 st_other; // Currently fixed at 0 101 u16 st_shndx; 102 } 103 ELF32_Symbol; 104 105 #define ELF32_ST_BIND(i) ((i)>>4) 106 #define ELF32_ST_TYPE(i) ((i)&0xf) 107 #define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf)) 108 109 #define STB_LOCAL 0 110 #define STB_GLOBAL 1 111 #define STB_WEAK 2 112 #define STB_WEAK_CW 14 // For CodeWarrior 113 114 #define STT_NOTYPE 0 115 #define STT_OBJECT 1 116 #define STT_FUNC 2 117 #define STT_SECTION 3 118 #define STT_FILE 4 119 120 // ARCHIVE Format 121 #define ARMAG_STRING "!<arch>\n" 122 #define ARMAG_SIZE (sizeof(ARMAG_STRING)-1) 123 #define ARFMAG_STRING "`\n" 124 #define ARFMAG_SIZE (sizeof(ARFMAG_STRING)-1) 125 126 #define AR_NAME_SIZE 16 127 #define AR_DATE_SIZE 12 128 #define AR_UID_SIZE 6 129 #define AR_GID_SIZE 6 130 #define AR_MODE_SIZE 8 131 #define AR_SIZE_SIZE 10 132 #define AR_FMAG_SIZE 2 133 134 typedef struct 135 { 136 char ar_name[AR_NAME_SIZE]; 137 char ar_date[AR_DATE_SIZE]; 138 char ar_uid[AR_UID_SIZE]; 139 char ar_gid[AR_GID_SIZE]; 140 char ar_mode[AR_MODE_SIZE]; 141 char ar_size[AR_SIZE_SIZE]; 142 char ar_fmag[AR_FMAG_SIZE]; 143 } 144 ARCHIVE_MemberHeader; 145 146 #endif //ELF_H__ 147