1 #ifndef POWERUP_PPCLIB_OBJECT_H 2 #define POWERUP_PPCLIB_OBJECT_H 3 4 /************************************************** 5 * 6 * 7 * PPCLoadElfObjectTags() 8 * 9 * 10 **************************************************/ 11 12 #define PPCELFLOADOBJECTTAG_DUMMY (TAG_USER + 0x23300) 13 14 /* pointer to a filename of the elf file */ 15 #define PPCELFLOADTAG_ELFNAME (PPCELFLOADOBJECTTAG_DUMMY + 0x0) 16 17 /* pointer to the elf stream resident in memory. 18 * PPCELFLOADTAG_ELFNAME and PPCELFLOADTAG_ELFADDRESS 19 * are mutually exclusive 20 */ 21 #define PPCELFLOADTAG_ELFADDRESS (PPCELFLOADOBJECTTAG_DUMMY + 0x1) 22 23 /* length of the elf stream. This tag is optional 24 */ 25 #define PPCELFLOADTAG_ELFLENGTH (PPCELFLOADOBJECTTAG_DUMMY + 0x2) 26 27 /* Stream IO Hook 28 * so you can implement your own loader system 29 * BOOL CallHookPkt(hook,Handle,&Msg); 30 * 31 */ 32 #define PPCELFLOADTAG_HOOK (PPCELFLOADOBJECTTAG_DUMMY + 0x3) 33 34 /* Load an ElfObject as a SharedLib Module 35 * BOOL 36 */ 37 #define PPCELFLOADTAG_LIBRARY (PPCELFLOADOBJECTTAG_DUMMY + 0x4) 38 39 /* File Ptr 40 * BPTR 41 */ 42 #define PPCELFLOADTAG_FILE (PPCELFLOADOBJECTTAG_DUMMY + 0x5) 43 44 /* pointer to THE name of the elf lib */ 45 #define PPCELFLOADTAG_ELFLIBNAME (PPCELFLOADOBJECTTAG_DUMMY + 0x6) 46 47 /* Ask for at least version x of a SharedLib Module 48 * ULONG 49 */ 50 #define PPCELFLOADTAG_LIBVERSION (PPCELFLOADOBJECTTAG_DUMMY + 0x7) 51 52 /* Ask for at least revision x of a SharedLib Module 53 * ULONG 54 */ 55 #define PPCELFLOADTAG_LIBREVISION (PPCELFLOADOBJECTTAG_DUMMY + 0x8) 56 57 /* Ask for the specific version of a SharedLib Module 58 * BOOL 59 */ 60 #define PPCELFLOADTAG_LIBEXACTVERSION (PPCELFLOADOBJECTTAG_DUMMY + 0x9) 61 #define PPCELFLOADTAG_LIBEXACTREVISION (PPCELFLOADOBJECTTAG_DUMMY + 0xa) 62 63 64 65 66 struct ElfStreamMsg 67 { 68 ULONG Type; 69 ULONG Arg1; /* Open->No Meaning,Close->No Meaning,Read->Address,Seek->Offset */ 70 ULONG Arg2; /* Open->No Meaning,Close->No Meaning,Read->Length,Seek->Type */ 71 }; 72 73 /* The Result must be a Handle */ 74 #define PPCELFLOADTYPE_OPEN 0 75 /* The Result must be a boolean */ 76 #define PPCELFLOADTYPE_CLOSE 1 77 /* The Result must be the read length or -1 */ 78 #define PPCELFLOADTYPE_READ 2 79 /* The Result must be the old offset or -1 */ 80 #define PPCELFLOADTYPE_SEEK 3 81 82 /************************************************** 83 * 84 * 85 * PPCGetElfInfos() Tags 86 * 87 * 88 **************************************************/ 89 90 #define PPCELFINFOTAG_DUMMY (TAG_USER + 0x23000) 91 92 /* Returns the name of an elfobject */ 93 #define PPCELFINFOTAG_NAME (PPCELFINFOTAG_DUMMY + 0x0) 94 95 /* Returns infos about a reloc instead of a symbol 96 * A special PPCSymbolStruct is passed by ti_Data 97 * which tells if you search for a symbol name 98 * or wanna find a symbol for a certain address. 99 * Result=TRUE if the search was successful and then 100 * the SymbolStruct contains other important infos 101 */ 102 #define PPCELFINFOTAG_RELOC (PPCELFINFOTAG_DUMMY + 0x1) 103 104 105 106 /* Set this Boolean if you want the infos global. 107 Then all Elfobjects are searched. 108 */ 109 #define PPCELFINFOTAG_GLOBAL (PPCELFINFOTAG_DUMMY + 0x2) 110 111 112 /* Define this Hook if you wanna get informations about every 113 Symbol in a specific ElfObject or in all. 114 (ElfObject==NULL || PPCELFINFOTAG_GLOBAL=TRUE) 115 That`s the way how the PPCGetObjectInfo() calls your hook. 116 MyInfo contains the passed infos, so you could show all 117 important symbols or relocs if possible. 118 119 CallHookPkt(ScanSymbolHook, 120 (APTR) ElfSubStructure, // Not really useful 121 (APTR) MyInfo); 122 123 */ 124 #define PPCELFINFOTAG_SCANSYMBOLHOOK (PPCELFINFOTAG_DUMMY + 0x3) 125 126 127 128 struct PPCObjectInfo 129 { 130 ULONG Address; 131 /* Name of the Object 132 * If this is set PPCGetElfInfo search for the Name 133 * Otherwise Address is used to search for an object 134 */ 135 char *Name; 136 /* Type of the object 137 */ 138 ULONG Type; 139 140 /* Subtype of the object 141 * Symbol: 142 * COMMON=BSS 143 * FUNCTION 144 * ... 145 * Section: 146 * 147 * Reloc: 148 * Relocation Type 149 */ 150 ULONG SubType; 151 /* Symbol: 152 * Local,Global,Weak 153 * Section: 154 * 155 */ 156 ULONG Binding; 157 /* Size of the object 158 */ 159 ULONG Size; 160 }; 161 162 #define PPCELFINFOTYPE_SECTION 0 163 164 /* A Symbol whose SubType defines the real 165 symbol Type and Binding contains the 166 state of the symbol. 167 */ 168 #define PPCELFINFOTYPE_SYMBOL 1 169 170 /* A common section(BSS) symbol whose SubType 171 defines the real symbol Type and Binding 172 contains the state of the symbol. 173 */ 174 #define PPCELFINFOTYPE_COMSYMBOL 2 175 176 /* A reloc entry is quite simular to a symbol. 177 It`s only useful to connect certain instruction 178 addresses with certain symbols where you can`t 179 calculate the symbol value in an easy way. 180 i.e 16 bit PPC addressmodes..ADDR16_HI,HA 181 */ 182 #define PPCELFINFOTYPE_RELOC 3 183 184 185 186 /*------------------------------------------------------------------------*/ 187 /* definition of the symbol types` */ 188 /*------------------------------------------------------------------------*/ 189 190 #define STT_NOTYPE 0 191 #define STT_OBJECT 1 192 #define STT_FUNC 2 193 #define STT_SECTION 3 194 #define STT_FILE 4 195 #define STT_LOPROC 13 196 #define STT_HIPROC 15 197 198 199 /*------------------------------------------------------------------------*/ 200 /* definition of the symbol bindings */ 201 /*------------------------------------------------------------------------*/ 202 203 #define STB_LOCAL 0 204 #define STB_GLOBAL 1 205 #define STB_WEAK 2 206 #define STB_LOPROC 13 207 #define STB_HIPROC 15 208 209 210 /*------------------------------------------------------------------------*/ 211 /* definition of the supported elf.rela types */ 212 /*------------------------------------------------------------------------*/ 213 214 #define R_PPC_NONE 0 215 #define R_PPC_ADDR32 1 216 #define R_PPC_ADDR24 2 217 #define R_PPC_ADDR16 3 218 #define R_PPC_ADDR16_L 4 219 #define R_PPC_ADDR16_HI 5 220 #define R_PPC_ADDR16_HA 6 221 #define R_PPC_ADDR14 7 222 #define R_PPC_ADDR14_BRTAKEN 8 223 #define R_PPC_ADDR14_BRNTAKEN 9 224 #define R_PPC_REL24 10 225 #define R_PPC_REL14 11 226 #define R_PPC_REL14_BRTAKEN 12 227 #define R_PPC_REL14_BRNTAKEN 13 228 #define R_PPC_GOT16 14 229 #define R_PPC_GOT16_LO 15 230 #define R_PPC_GOT16_HI 16 231 #define R_PPC_GOT16_HA 17 232 #define R_PPC_PLTREL24 18 233 #define R_PPC_COPY 19 234 #define R_PPC_GLOB_DAT 20 235 #define R_PPC_JMP_SLOT 21 236 #define R_PPC_RELATIVE 22 237 #define R_PPC_LOCAL24PC 23 238 #define R_PPC_UADDR32 24 239 #define R_PPC_UADDR16 25 240 #define R_PPC_REL32 26 241 #define R_PPC_PLT32 27 242 #define R_PPC_PLTREL32 28 243 #define R_PPC_PLT16_LO 29 244 #define R_PPC_PLT16_HI 30 245 #define R_PPC_PLT16_HA 31 246 #define R_PPC_SDAREL16 32 247 #define R_PPC_SECTOFF 33 248 #define R_PPC_SECTOFF_LO 34 249 #define R_PPC_SECTOFF_HI 35 250 #define R_PPC_SECTOFF_HA 34 251 252 253 254 #endif