X-Git-Url: http://git.ozlabs.org/?p=yaboot.git;a=blobdiff_plain;f=second%2Fyaboot.c;h=5c8c8ea2310344d081b97473d2c19d64b65c48bd;hp=5df07608dacb297eda7352fa03c55013ec3d2f64;hb=8eded8e93dd9a523e40d48f1cc04195a92ea0703;hpb=1f0f86b8e9cb113674bec055c2d0f182a28a5bd2 diff --git a/second/yaboot.c b/second/yaboot.c index 5df0760..5c8c8ea 100644 --- a/second/yaboot.c +++ b/second/yaboot.c @@ -58,6 +58,8 @@ #define CONFIG_FILE_NAME "yaboot.conf" #define CONFIG_FILE_MAX 0x8000 /* 32k */ +#define MESSAGE_FILE_MAX 2048 + #ifdef USE_MD5_PASSWORDS #include "md5.h" #endif /* USE_MD5_PASSWORDS */ @@ -154,10 +156,6 @@ int fgcolor = 15; int bgcolor = 0; #endif /* CONFIG_COLOR_TEXT */ -#if DEBUG -static int test_bss; -static int test_data = 0; -#endif static int pause_after; static char *pause_message = "Type go to continue.\n"; static char given_bootargs[1024]; @@ -174,8 +172,6 @@ extern unsigned char linux_logo_blue[]; extern char* __bss_start; extern char* _end; -static struct first_info *quik_fip = NULL; - int yaboot_start (unsigned long r3, unsigned long r4, unsigned long r5) { @@ -187,15 +183,6 @@ yaboot_start (unsigned long r3, unsigned long r4, unsigned long r5) /* OF seems to do it, but I'm not very confident */ memset(&__bss_start, 0, &_end - &__bss_start); - /* Check for quik first stage bootloader (but I don't think we are - * compatible with it anyway, I'll look into backporting to older OF - * versions later - */ - if (r5 == 0xdeadbeef) { - r5 = r3; - quik_fip = (struct first_info *)r4; - } - /* Initialize OF interface */ prom_init ((prom_entry) r5); @@ -215,10 +202,6 @@ yaboot_start (unsigned long r3, unsigned long r4, unsigned long r5) /* A few useless DEBUG_F's */ DEBUG_F("reloc_offset : %ld (should be 0)\n", reloc_offset()); - DEBUG_F("test_bss : %d (should be 0)\n", test_bss); - DEBUG_F("test_data : %d (should be 0)\n", test_data); - DEBUG_F("&test_data : %p\n", &test_data); - DEBUG_F("&test_bss : %p\n", &test_bss); DEBUG_F("linked at : 0x%08x\n", TEXTADDR); /* ask the OF info if we're a chrp or pmac */ @@ -314,13 +297,13 @@ void print_message_file(char *filename) } else opened = 1; - msg = malloc(2001); + msg = malloc(MESSAGE_FILE_MAX + 1); if (!msg) goto done; else - memset(msg, 0, 2001); + memset(msg, 0, MESSAGE_FILE_MAX + 1); - if (file.fs->read(&file, 2000, msg) <= 0) + if (file.fs->read(&file, MESSAGE_FILE_MAX, msg) <= 0) goto done; else prom_printf("%s", msg); @@ -666,7 +649,6 @@ int get_params(struct boot_param_t* params) static int first = 1; static char imagepath[1024]; static char initrdpath[1024]; - static char sysmappath[1024]; static char manualinitrd[1024]; static int definitrd = 1, hasarg = 0; @@ -675,7 +657,6 @@ int get_params(struct boot_param_t* params) params->args = ""; params->kernel.part = -1; params->rd.part = -1; - params->sysmap.part = -1; defpart = boot.part; cmdinit(); @@ -1004,7 +985,7 @@ int get_params(struct boot_param_t* params) /* check if user seted to use a initrd file from boot console */ if (!definitrd && p != manualinitrd) { - if (manualinitrd[0] != "/" && (prom_get_devtype(defdevice_bak) != FILE_DEVICE_NET)) { + if (manualinitrd[0] != '/' && (prom_get_devtype(defdevice_bak) != FILE_DEVICE_NET)) { strcpy(initrdpath, "/"); strcat(initrdpath, manualinitrd); } else @@ -1020,17 +1001,6 @@ int get_params(struct boot_param_t* params) return 0; } } - p = cfg_get_strg(label, "sysmap"); - if (p && *p) { - DEBUG_F("Parsing sysmap path <%s>\n", p); - strncpy(sysmappath, p, 1024); - params->sysmap = boot; /* Copy all the original paramters */ - if (!parse_device_path(sysmappath, defdevice, defpart, - "/boot/System.map", ¶ms->sysmap)) { - prom_printf("%s: Unable to parse\n", imagepath); - return 0; - } - } } return 0; } @@ -1043,15 +1013,11 @@ int get_params(struct boot_param_t* params) void yaboot_text_ui(void) { -#define MAX_HEADERS 32 - struct boot_file_t file; int result; static struct boot_param_t params; void *initrd_base; unsigned long initrd_size; - void *sysmap_base; - unsigned long sysmap_size; kernel_entry_t kernel_entry; char* loc=NULL; loadinfo_t loadinfo; @@ -1063,8 +1029,6 @@ yaboot_text_ui(void) for (;;) { initrd_size = 0; initrd_base = 0; - sysmap_base = 0; - sysmap_size = 0; if (get_params(¶ms)) return; @@ -1127,55 +1091,6 @@ yaboot_text_ui(void) file.fs->close(&file); memset(&file, 0, sizeof(file)); - /* If sysmap, load it (only if booting a vmlinux). - */ - if (flat_vmlinux && params.sysmap.file) { - prom_printf("Loading System.map ...\n"); - if(strlen(boot.file) && !strcmp(boot.file,"\\\\") && params.sysmap.file[0] != '/' - && params.sysmap.file[0] != '\\') { - if (loc) free(loc); - loc=(char*)malloc(strlen(params.sysmap.file)+3); - if (!loc) { - prom_printf ("malloc error\n"); - goto next; - } - strcpy(loc,boot.file); - strcat(loc,params.sysmap.file); - free(params.sysmap.file); - params.sysmap.file=loc; - } - - result = open_file(¶ms.sysmap, &file); - if (result != FILE_ERR_OK) { - prom_printf("%s:%d,", params.sysmap.dev, params.sysmap.part); - prom_perror(result, params.sysmap.file); - } - else { - sysmap_base = prom_claim(loadinfo.base+loadinfo.memsize, 0x100000, 0); - if (sysmap_base == (void *)-1) { - prom_printf("Claim failed for sysmap memory\n"); - prom_pause(); - sysmap_base = 0; - } else { - sysmap_size = file.fs->read(&file, 0xfffff, sysmap_base); - if (sysmap_size == 0) - sysmap_base = 0; - else - ((char *)sysmap_base)[sysmap_size++] = 0; - } - file.fs->close(&file); - memset(&file, 0, sizeof(file)); - } - if (sysmap_base) { - prom_printf("System.map loaded at %p, size: %lu Kbytes\n", - sysmap_base, sysmap_size >> 10); - loadinfo.memsize += _ALIGN(0x100000, 0x1000); - } else { - prom_printf("System.map load failed !\n"); - prom_pause(); - } - } - /* If ramdisk, load it (only if booting a vmlinux). For now, we * can't tell the size it will be so we claim an arbitrary amount * of 4Mb. @@ -1294,11 +1209,6 @@ load_elf32(struct boot_file_t *file, loadinfo_t *loadinfo) loadinfo->entry = e->e_entry; - if (e->e_phnum > MAX_HEADERS) { - prom_printf ("Can only load kernels with one program header\n"); - goto bail; - } - ph = (Elf32_Phdr *)malloc(sizeof(Elf32_Phdr) * e->e_phnum); if (!ph) { prom_printf ("Malloc error\n"); @@ -1432,11 +1342,6 @@ load_elf64(struct boot_file_t *file, loadinfo_t *loadinfo) loadinfo->entry = e->e_entry; - if (e->e_phnum > MAX_HEADERS) { - prom_printf ("Can only load kernels with one program header\n"); - goto bail; - } - ph = (Elf64_Phdr *)malloc(sizeof(Elf64_Phdr) * e->e_phnum); if (!ph) { prom_printf ("Malloc error\n");