aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/boot/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/boot/main.c')
-rw-r--r--arch/powerpc/boot/main.c66
1 files changed, 0 insertions, 66 deletions
diff --git a/arch/powerpc/boot/main.c b/arch/powerpc/boot/main.c
index 03c0ccaecf29..30390621203d 100644
--- a/arch/powerpc/boot/main.c
+++ b/arch/powerpc/boot/main.c
@@ -36,76 +36,10 @@ struct addr_range {
36 unsigned long size; 36 unsigned long size;
37}; 37};
38 38
39struct elf_info {
40 unsigned long loadsize;
41 unsigned long memsize;
42 unsigned long elfoffset;
43};
44
45typedef void (*kernel_entry_t)(unsigned long, unsigned long, void *); 39typedef void (*kernel_entry_t)(unsigned long, unsigned long, void *);
46 40
47#undef DEBUG 41#undef DEBUG
48 42
49static int parse_elf64(void *hdr, struct elf_info *info)
50{
51 Elf64_Ehdr *elf64 = hdr;
52 Elf64_Phdr *elf64ph;
53 unsigned int i;
54
55 if (!(elf64->e_ident[EI_MAG0] == ELFMAG0 &&
56 elf64->e_ident[EI_MAG1] == ELFMAG1 &&
57 elf64->e_ident[EI_MAG2] == ELFMAG2 &&
58 elf64->e_ident[EI_MAG3] == ELFMAG3 &&
59 elf64->e_ident[EI_CLASS] == ELFCLASS64 &&
60 elf64->e_ident[EI_DATA] == ELFDATA2MSB &&
61 elf64->e_type == ET_EXEC &&
62 elf64->e_machine == EM_PPC64))
63 return 0;
64
65 elf64ph = (Elf64_Phdr *)((unsigned long)elf64 +
66 (unsigned long)elf64->e_phoff);
67 for (i = 0; i < (unsigned int)elf64->e_phnum; i++, elf64ph++)
68 if (elf64ph->p_type == PT_LOAD)
69 break;
70 if (i >= (unsigned int)elf64->e_phnum)
71 return 0;
72
73 info->loadsize = (unsigned long)elf64ph->p_filesz;
74 info->memsize = (unsigned long)elf64ph->p_memsz;
75 info->elfoffset = (unsigned long)elf64ph->p_offset;
76
77 return 1;
78}
79
80static int parse_elf32(void *hdr, struct elf_info *info)
81{
82 Elf32_Ehdr *elf32 = hdr;
83 Elf32_Phdr *elf32ph;
84 unsigned int i;
85
86 if (!(elf32->e_ident[EI_MAG0] == ELFMAG0 &&
87 elf32->e_ident[EI_MAG1] == ELFMAG1 &&
88 elf32->e_ident[EI_MAG2] == ELFMAG2 &&
89 elf32->e_ident[EI_MAG3] == ELFMAG3 &&
90 elf32->e_ident[EI_CLASS] == ELFCLASS32 &&
91 elf32->e_ident[EI_DATA] == ELFDATA2MSB &&
92 elf32->e_type == ET_EXEC &&
93 elf32->e_machine == EM_PPC))
94 return 0;
95
96 elf32ph = (Elf32_Phdr *) ((unsigned long)elf32 + elf32->e_phoff);
97 for (i = 0; i < elf32->e_phnum; i++, elf32ph++)
98 if (elf32ph->p_type == PT_LOAD)
99 break;
100 if (i >= elf32->e_phnum)
101 return 0;
102
103 info->loadsize = elf32ph->p_filesz;
104 info->memsize = elf32ph->p_memsz;
105 info->elfoffset = elf32ph->p_offset;
106 return 1;
107}
108
109static struct addr_range prep_kernel(void) 43static struct addr_range prep_kernel(void)
110{ 44{
111 char elfheader[256]; 45 char elfheader[256];