Stop setting PG_U in bootstrap mappings.
These mappings are never visible to userspace as they get replaced when the amd64 pmap is bootstrapped, but there is no need to set PG_U in the first place. Reviewed by: alc, kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D24547
This commit is contained in:
parent
caf7929a16
commit
010f003956
@ -172,15 +172,15 @@ elf64_exec(struct preloaded_file *fp)
|
||||
for (i = 0; i < 512; i++) {
|
||||
/* Each slot of the L4 pages points to the same L3 page. */
|
||||
PT4[i] = (pml4_entry_t)PT3;
|
||||
PT4[i] |= PG_V | PG_RW | PG_U;
|
||||
PT4[i] |= PG_V | PG_RW;
|
||||
|
||||
/* Each slot of the L3 pages points to the same L2 page. */
|
||||
PT3[i] = (pdp_entry_t)PT2;
|
||||
PT3[i] |= PG_V | PG_RW | PG_U;
|
||||
PT3[i] |= PG_V | PG_RW;
|
||||
|
||||
/* The L2 page slots are mapped with 2MB pages for 1GB. */
|
||||
PT2[i] = i * (2 * 1024 * 1024);
|
||||
PT2[i] |= PG_V | PG_RW | PG_PS | PG_U;
|
||||
PT2[i] |= PG_V | PG_RW | PG_PS;
|
||||
}
|
||||
|
||||
printf("Start @ 0x%lx ...\n", ehdr->e_entry);
|
||||
|
@ -48,7 +48,6 @@ struct file_format amd64_elf_obj = { elf64_obj_loadfile, elf64_obj_exec };
|
||||
|
||||
#define PG_V 0x001
|
||||
#define PG_RW 0x002
|
||||
#define PG_U 0x004
|
||||
#define PG_PS 0x080
|
||||
|
||||
typedef uint64_t p4_entry_t;
|
||||
@ -96,15 +95,15 @@ elf64_exec(struct preloaded_file *fp)
|
||||
for (i = 0; i < 512; i++) {
|
||||
/* Each slot of the level 4 pages points to the same level 3 page */
|
||||
PT4[i] = (p4_entry_t)VTOP((uintptr_t)&PT3[0]);
|
||||
PT4[i] |= PG_V | PG_RW | PG_U;
|
||||
PT4[i] |= PG_V | PG_RW;
|
||||
|
||||
/* Each slot of the level 3 pages points to the same level 2 page */
|
||||
PT3[i] = (p3_entry_t)VTOP((uintptr_t)&PT2[0]);
|
||||
PT3[i] |= PG_V | PG_RW | PG_U;
|
||||
PT3[i] |= PG_V | PG_RW;
|
||||
|
||||
/* The level 2 page slots are mapped with 2MB pages for 1GB. */
|
||||
PT2[i] = i * (2 * 1024 * 1024);
|
||||
PT2[i] |= PG_V | PG_RW | PG_PS | PG_U;
|
||||
PT2[i] |= PG_V | PG_RW | PG_PS;
|
||||
}
|
||||
|
||||
entry_lo = ehdr->e_entry & 0xffffffff;
|
||||
|
@ -60,7 +60,6 @@ struct file_format amd64_elf_obj = { elf64_obj_loadfile, elf64_obj_exec };
|
||||
|
||||
#define PG_V 0x001
|
||||
#define PG_RW 0x002
|
||||
#define PG_U 0x004
|
||||
#define PG_PS 0x080
|
||||
|
||||
typedef uint64_t p4_entry_t;
|
||||
@ -127,15 +126,15 @@ elf64_exec(struct preloaded_file *fp)
|
||||
for (i = 0; i < 512; i++) {
|
||||
/* Each slot of the level 4 pages points to the same level 3 page */
|
||||
PT4[i] = (p4_entry_t) 0x3000;
|
||||
PT4[i] |= PG_V | PG_RW | PG_U;
|
||||
PT4[i] |= PG_V | PG_RW;
|
||||
|
||||
/* Each slot of the level 3 pages points to the same level 2 page */
|
||||
PT3[i] = (p3_entry_t) 0x4000;
|
||||
PT3[i] |= PG_V | PG_RW | PG_U;
|
||||
PT3[i] |= PG_V | PG_RW;
|
||||
|
||||
/* The level 2 page slots are mapped with 2MB pages for 1GB. */
|
||||
PT2[i] = i * (2 * 1024 * 1024);
|
||||
PT2[i] |= PG_V | PG_RW | PG_PS | PG_U;
|
||||
PT2[i] |= PG_V | PG_RW | PG_PS;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
|
Loading…
Reference in New Issue
Block a user