25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: file_elf.c,v 1.5 2007/06/15 17:02:39 debug Exp $ |
* $Id: file_elf.c,v 1.7 2007/07/20 09:03:33 debug Exp $ |
29 |
* |
* |
30 |
* ELF file support. |
* COMMENT: ELF file support |
31 |
*/ |
*/ |
32 |
|
|
33 |
/* Note: Included from file.c. */ |
/* Note: Included from file.c. */ |
36 |
#include "exec_elf.h" |
#include "exec_elf.h" |
37 |
|
|
38 |
/* ELF machine types as strings: (same as exec_elf.h) */ |
/* ELF machine types as strings: (same as exec_elf.h) */ |
39 |
#define N_ELF_MACHINE_TYPES 84 |
#define N_ELF_MACHINE_TYPES 89 |
40 |
static char *elf_machine_type[N_ELF_MACHINE_TYPES] = { |
static char *elf_machine_type[N_ELF_MACHINE_TYPES] = { |
41 |
"NONE", "M32", "SPARC", "386", /* 0..3 */ |
"NONE", "M32", "SPARC", "386", /* 0..3 */ |
42 |
"68K", "88K", "486", "860", /* 4..7 */ |
"68K", "88K", "486", "860", /* 4..7 */ |
43 |
"MIPS", "S370", "MIPS_RS3_LE", "RS6000", /* 8..11 */ |
"MIPS", "S370", "MIPS_RS3_LE", "RS6000", /* 8..11 */ |
44 |
"unknown12", "unknown13", "unknown14", "PARISC", /* 12..15 */ |
"unknown12", "unknown13", "unknown14", "PARISC", /* 12..15 */ |
45 |
"NCUBE", "VPP500", "SPARC32PLUS", "960", /* 16..19 */ |
"NCUBE", "VPP500", "SPARC32PLUS", "960", /* 16..19 */ |
46 |
"PPC", "PPC64", "unknown22", "unknown23", /* 20..23 */ |
"PPC", "PPC64", "unknown22", "unknown23", /* 20..23 */ |
47 |
"unknown24", "unknown25", "unknown26", "unknown27", /* 24..27 */ |
"unknown24", "unknown25", "unknown26", "unknown27", /* 24..27 */ |
48 |
"unknown28", "unknown29", "unknown30", "unknown31", /* 28..31 */ |
"unknown28", "unknown29", "unknown30", "unknown31", /* 28..31 */ |
49 |
"unknown32", "unknown33", "unknown34", "unknown35", /* 32..35 */ |
"unknown32", "unknown33", "unknown34", "unknown35", /* 32..35 */ |
50 |
"V800", "FR20", "RH32", "RCE", /* 36..39 */ |
"V800", "FR20", "RH32", "RCE", /* 36..39 */ |
51 |
"ARM", "ALPHA", "SH", "SPARCV9", /* 40..43 */ |
"ARM", "ALPHA", "SH", "SPARCV9", /* 40..43 */ |
52 |
"TRICORE", "ARC", "H8_300", "H8_300H", /* 44..47 */ |
"TRICORE", "ARC", "H8_300", "H8_300H", /* 44..47 */ |
53 |
"H8S", "H8_500", "IA_64", "MIPS_X", /* 48..51 */ |
"H8S", "H8_500", "IA_64", "MIPS_X", /* 48..51 */ |
54 |
"COLDFIRE", "68HC12", "unknown54", "unknown55", /* 52..55 */ |
"COLDFIRE", "68HC12", "unknown54", "unknown55", /* 52..55 */ |
55 |
"unknown56", "unknown57", "unknown58", "unknown59", /* 56..59 */ |
"unknown56", "unknown57", "unknown58", "unknown59", /* 56..59 */ |
56 |
"unknown60", "unknown61", "AMD64", "unknown63", /* 60..63 */ |
"unknown60", "unknown61", "AMD64", "unknown63", /* 60..63 */ |
57 |
"unknown64", "unknown65", "unknown66", "unknown67", /* 64..67 */ |
"unknown64", "unknown65", "unknown66", "unknown67", /* 64..67 */ |
58 |
"unknown68", "unknown69", "unknown70", "unknown71", /* 68..71 */ |
"unknown68", "unknown69", "unknown70", "unknown71", /* 68..71 */ |
59 |
"unknown72", "unknown73", "unknown74", "unknown75", /* 72..75 */ |
"unknown72", "unknown73", "unknown74", "unknown75", /* 72..75 */ |
60 |
"unknown76", "unknown77", "unknown78", "unknown79", /* 76..79 */ |
"unknown76", "unknown77", "unknown78", "unknown79", /* 76..79 */ |
61 |
"unknown80", "unknown81", "unknown82", "AVR" /* 80..83 */ |
"unknown80", "unknown81", "unknown82", "AVR", /* 80..83 */ |
62 |
|
"unknown84", "unknown85", "unknown86", "unknown87", /* 84..87 */ |
63 |
|
"M32R" /* 88 */ |
64 |
}; |
}; |
65 |
|
|
66 |
|
|
246 |
case EM_IA_64: |
case EM_IA_64: |
247 |
ok = 1; |
ok = 1; |
248 |
} |
} |
249 |
break; */ |
break; |
250 |
/* case ARCH_M68K: |
case ARCH_M68K: |
251 |
switch (emachine) { |
switch (emachine) { |
252 |
case EM_68K: |
case EM_68K: |
253 |
ok = 1; |
ok = 1; |
254 |
} |
} |
255 |
break; */ |
break; */ |
256 |
|
case ARCH_M32R: |
257 |
|
switch (emachine) { |
258 |
|
case EM_M32R: |
259 |
|
ok = 1; |
260 |
|
} |
261 |
|
break; |
262 |
case ARCH_MIPS: |
case ARCH_MIPS: |
263 |
switch (emachine) { |
switch (emachine) { |
264 |
case EM_MIPS: |
case EM_MIPS: |
319 |
debug("ELF%i %s, %s 0x", elf64? 64 : 32, |
debug("ELF%i %s, %s 0x", elf64? 64 : 32, |
320 |
encoding == ELFDATA2LSB? "LSB (LE)" : "MSB (BE)", s); |
encoding == ELFDATA2LSB? "LSB (LE)" : "MSB (BE)", s); |
321 |
|
|
322 |
|
// XXX force load address to 0 |
323 |
|
eentry -= 0xc0000000; |
324 |
|
|
325 |
if (elf64) |
if (elf64) |
326 |
debug("%016"PRIx64"\n", (uint64_t) eentry); |
debug("%016"PRIx64"\n", (uint64_t) eentry); |
327 |
else |
else |