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