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

Reply via email to