This allows mkboot make bootable lif's. mkboot compiled on amd64, tested with rp2470.
Index: mkboot.c =================================================================== RCS file: /cvs/src/sys/arch/hppa64/stand/mkboot/mkboot.c,v retrieving revision 1.2 diff -u -p -r1.2 mkboot.c --- mkboot.c 27 Oct 2009 23:59:34 -0000 1.2 +++ mkboot.c 28 Sep 2012 13:32:53 -0000 @@ -117,10 +117,10 @@ main(int argc, char **argv) bzero(buf, sizeof(buf)); /* clear possibly unused directory entries */ memset(lifd[1].dir_name, ' ', sizeof lifd[1].dir_name); - lifd[1].dir_type = -1; + lifd[1].dir_type = htobe16(-1); lifd[1].dir_addr = 0; lifd[1].dir_length = 0; - lifd[1].dir_flag = 0xFF; + lifd[1].dir_flag = htobe16(0xFF); lifd[1].dir_implement = 0; lifd[7] = lifd[6] = lifd[5] = lifd[4] = lifd[3] = lifd[2] = lifd[1]; @@ -131,7 +131,7 @@ main(int argc, char **argv) lifv->vol_oct = htobe16(LIF_VOL_OCT); lifv->vol_dirsize = htobe32(btolifs(LIF_DIRSIZE)); lifv->vol_version = htobe16(1); - lifv->vol_lastvol = lifv->vol_number = htobe16(1); + lifv->vol_lastvol = lifv->vol_number = htobe32(1); lifv->vol_length = LIF_FILESTART; bcddate(to_file, lifv->vol_toc); lifv->ipl_addr = htobe32(LIF_FILESTART); @@ -211,12 +211,12 @@ putfile(from_file, to) n = read(from, &elf_header, sizeof (elf_header)); if (n != sizeof (elf_header)) err(1, "%s: reading ELF header", from_file); - header_count = betoh32(elf_header.e_phnum); + header_count = betoh16(elf_header.e_phnum); memory_needed = header_count * sizeof (*elf_segments); elf_segments = malloc(memory_needed); if (elf_segments == NULL) err(1, "malloc"); - (void) lseek(from, betoh32(elf_header.e_phoff), SEEK_SET); + (void) lseek(from, betoh64(elf_header.e_phoff), SEEK_SET); n = read(from, elf_segments, memory_needed); if (n != memory_needed) err(1, "%s: reading ELF segments", from_file); @@ -233,9 +233,10 @@ putfile(from_file, to) } if (elf_load_image_segment == -1) errx(1, "%s: no suitable ELF program segment", from_file); - entry = betoh32(elf_header.e_entry) + - betoh32(elf_segments[elf_load_image_segment].p_offset) - - betoh32(elf_segments[elf_load_image_segment].p_vaddr); + entry = betoh64(elf_header.e_entry) + + betoh64(elf_segments[elf_load_image_segment].p_offset) - + betoh64(elf_segments[elf_load_image_segment].p_vaddr); + printf("entry = 0x%lx\n", entry); } else if (*(u_char *)&ex == 0x1f && ((u_char *)&ex)[1] == 0x8b) { entry = 0; } else -- open source wizard