Page MenuHomeFreeBSD

D7934.id20462.diff
No OneTemporary

D7934.id20462.diff

Index: head/sys/boot/efi/loader/arch/amd64/elf64_freebsd.c
===================================================================
--- head/sys/boot/efi/loader/arch/amd64/elf64_freebsd.c
+++ head/sys/boot/efi/loader/arch/amd64/elf64_freebsd.c
@@ -35,6 +35,8 @@
#include <string.h>
#include <machine/elf.h>
#include <stand.h>
+#include <vm/vm.h>
+#include <vm/pmap.h>
#include <efi.h>
#include <efilib.h>
@@ -57,8 +59,14 @@
static int elf64_exec(struct preloaded_file *amp);
static int elf64_obj_exec(struct preloaded_file *amp);
-static struct file_format amd64_elf = { elf64_loadfile, elf64_exec };
-static struct file_format amd64_elf_obj = { elf64_obj_loadfile, elf64_obj_exec };
+static struct file_format amd64_elf = {
+ .l_load = elf64_loadfile,
+ .l_exec = elf64_exec,
+};
+static struct file_format amd64_elf_obj = {
+ .l_load = elf64_obj_loadfile,
+ .l_exec = elf64_obj_exec,
+};
struct file_format *file_formats[] = {
&amd64_elf,
@@ -66,21 +74,12 @@
NULL
};
-#define PG_V 0x001
-#define PG_RW 0x002
-#define PG_U 0x004
-#define PG_PS 0x080
-
-typedef u_int64_t p4_entry_t;
-typedef u_int64_t p3_entry_t;
-typedef u_int64_t p2_entry_t;
-static p4_entry_t *PT4;
-static p3_entry_t *PT3;
-static p2_entry_t *PT2;
+static pml4_entry_t *PT4;
+static pdp_entry_t *PT3;
+static pd_entry_t *PT2;
static void (*trampoline)(uint64_t stack, void *copy_finish, uint64_t kernend,
- uint64_t modulep, p4_entry_t *pagetable,
- uint64_t entry);
+ uint64_t modulep, pml4_entry_t *pagetable, uint64_t entry);
extern uintptr_t amd64_tramp;
extern uint32_t amd64_tramp_size;
@@ -157,7 +156,7 @@
bcopy((void *)&amd64_tramp, (void *)trampcode, amd64_tramp_size);
trampoline = (void *)trampcode;
- PT4 = (p4_entry_t *)0x0000000040000000;
+ PT4 = (pml4_entry_t *)0x0000000040000000;
err = BS->AllocatePages(AllocateMaxAddress, EfiLoaderData, 3,
(EFI_PHYSICAL_ADDRESS *)&PT4);
bzero(PT4, 3 * EFI_PAGE_SIZE);
@@ -172,11 +171,11 @@
*/
for (i = 0; i < 512; i++) {
/* Each slot of the L4 pages points to the same L3 page. */
- PT4[i] = (p4_entry_t)PT3;
+ PT4[i] = (pml4_entry_t)PT3;
PT4[i] |= PG_V | PG_RW | PG_U;
/* Each slot of the L3 pages points to the same L2 page. */
- PT3[i] = (p3_entry_t)PT2;
+ PT3[i] = (pdp_entry_t)PT2;
PT3[i] |= PG_V | PG_RW | PG_U;
/* The L2 page slots are mapped with 2MB pages for 1GB. */
@@ -204,5 +203,6 @@
static int
elf64_obj_exec(struct preloaded_file *fp)
{
+
return (EFTYPE);
}

File Metadata

Mime Type
text/plain
Expires
Wed, Nov 12, 10:49 AM (11 h, 7 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
25206828
Default Alt Text
D7934.id20462.diff (2 KB)

Event Timeline