PERFORCE change 28356 for review
Peter Wemm
peter at FreeBSD.org
Sun Apr 6 14:00:57 PDT 2003
http://perforce.freebsd.org/chv.cgi?CH=28356
Change 28356 by peter at peter_overcee on 2003/04/06 13:59:50
argh. I hate this VTOP stuff.
fix some other silly bogons. actually set the entry points.
Affected files ...
.. //depot/projects/hammer/sys/boot/i386/libi386/elf64_freebsd.c#5 edit
Differences ...
==== //depot/projects/hammer/sys/boot/i386/libi386/elf64_freebsd.c#5 (text+ko) ====
@@ -65,7 +65,7 @@
{
struct file_metadata *md;
Elf_Ehdr *ehdr;
- vm_offset_t entry, bootinfop, modulep;
+ vm_offset_t bootinfop, modulep;
int boothowto, err, bootdev;
struct bootinfo *bi;
vm_offset_t ssym, esym;
@@ -77,7 +77,6 @@
if ((err = bi_load(fp->f_args, &boothowto, &bootdev, &bootinfop, &modulep)) != 0)
return(err);
- entry = ehdr->e_entry & 0xffffff;
ssym = esym = 0;
if ((md = file_findmetadata(fp, MODINFOMD_SSYM)) != NULL)
@@ -100,12 +99,12 @@
bzero(PT2, PAGE_SIZE);
/* single PML4 entry */
- PT4[0] = (p4_entry_t)(uintptr_t)&PT3[0];
+ PT4[0] = (p4_entry_t)VTOP((uintptr_t)&PT3[0]);
PT4[0] |= PG_V | PG_RW | PG_U;
/* four PDP entries, 1G each */
for (i = 0; i < 4; i++) {
- PT3[i] = (p3_entry_t)(uintptr_t)&PT2[i * 512];
+ PT3[i] = (p3_entry_t)VTOP((uintptr_t)&PT2[i * 512]);
PT3[i] |= PG_V | PG_RW | PG_U;
}
@@ -115,12 +114,14 @@
PT2[i] |= PG_V | PG_RW | PG_PS | PG_U;
}
+ entry_lo = ehdr->e_entry & 0xffffffff;
+ entry_hi = (ehdr->e_entry >> 32) & 0xffffffff;
printf("entry_hi: %#x \n", entry_hi);
printf("entry_lo: %#x \n", entry_lo);
- printf("Start @ %#llx ...\n", entry);
+ printf("Start @ %#llx ...\n", ehdr->e_entry);
dev_cleanup();
- __exec((void *)x86_64_tramp, boothowto, bootdev, 0, 0, 0, bootinfop, modulep, bi->bi_kernend);
+ __exec((void *)VTOP(x86_64_tramp), boothowto, bootdev, 0, 0, 0, bootinfop, modulep, bi->bi_kernend);
panic("exec returned");
}
More information about the p4-projects
mailing list