mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-08-08 10:50:28 +00:00
[metal] A few minor fixes
* [metal] Fix bug: munmap() should clear PAGE_RSRV in page table * [metal] Minor fixes to libc/runtime/*.internal.h comments * [metal] Fix bug: ensure _rlinit_vesa's data is 16-bit addressable * [metal] Call invlpg() when altering any VA page table entries
This commit is contained in:
parent
40544765c0
commit
405349a648
4 changed files with 15 additions and 14 deletions
|
@ -26,8 +26,8 @@ noasan int sys_munmap_metal(void *addr, size_t size) {
|
|||
mm = (struct mman *)(BANE + 0x0500);
|
||||
for (i = 0; i < size; i += 4096) {
|
||||
e = __get_virtual(mm, __get_pml4t(), (uint64_t)addr + i, false);
|
||||
if (e) *e = ~PAGE_V;
|
||||
invlpg(e);
|
||||
if (e) *e = ~(PAGE_V | PAGE_RSRV);
|
||||
invlpg((uint64_t)addr + i);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@ struct mman {
|
|||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
|
||||
/* Values for mman::pc_video_type. TODO: implement graphics modes. */
|
||||
/* Values for mman::pc_video_type. */
|
||||
#define PC_VIDEO_TEXT 0
|
||||
#define PC_VIDEO_BGR565 1
|
||||
#define PC_VIDEO_BGR555 2
|
||||
|
|
|
@ -145,15 +145,15 @@
|
|||
│ (If this maps 2MB/1GB page and CR4.PGE) Global┐││││││││
|
||||
│ (If IsPage 2MB/1GB, see Intel V3A § 11.12) PAT │││││││││
|
||||
│ │ │││││││││
|
||||
│ ┌────────────────────────────────────┤ │││││││││
|
||||
│ Must Be 0┐│ Next Page Table Address (!IsPage) │ │││││││││
|
||||
│ │├────────────────────────────────────┤ │││││││││
|
||||
│ ││ Physical Address 4KB │ │││││││││
|
||||
│┌───┐┌─────┐│├───────────────────────────┐ │ign│││││││││
|
||||
││PKE││ ign │││ Physical Address 2MB │ │┌┴┐│││││││││
|
||||
││ ││ ││├──────────────────┐ │ ││ ││││││││││
|
||||
││ ││ │││ Phys. Addr. 1GB │ │ ││ ││││││││││
|
||||
││ ││ │││ │ │ ││ ││││││││││
|
||||
│ ┌─────────────────────────────────────┤ │││││││││
|
||||
│ Must Be 0┐│ Next Page Table Address (!IsPage) │ │││││││││
|
||||
│ │├─────────────────────────────────────┤ │││││││││
|
||||
│ ││ Physical Address 4KB │ │││││││││
|
||||
│┌──┐┌─────┐│├────────────────────────────┐ │ign│││││││││
|
||||
││PK││ ign │││ Physical Address 2MB │ │┌┴┐│││││││││
|
||||
││ ││ ││├───────────────────┐ │ ││ ││││││││││
|
||||
││ ││ │││ Phys. Addr. 1GB │ │ ││ ││││││││││
|
||||
││ ││ │││ │ │ ││ ││││││││││
|
||||
6666555555555544444444443333333333222222222211111111110000000000
|
||||
3210987654321098765432109876543210987654321098765432109876543210*/
|
||||
#define PAGE_V /* */ 0b000000000001
|
||||
|
@ -163,7 +163,7 @@
|
|||
#define PAGE_2MB /* */ 0b000110000000
|
||||
#define PAGE_1GB /* */ 0b000110000000
|
||||
#define PAGE_IGN1 /* */ 0b111000000000
|
||||
#define PAGE_RSRV /* blinkenlights reservation */ 0b001000000000
|
||||
#define PAGE_RSRV /* blinkenlights/libc reservation */ 0b001000000000
|
||||
#define PAGE_GROD /* blinkenlights MAP_GROWSDOWN */ 0b010000000000
|
||||
#define PAGE_TA 0x00007ffffffff000
|
||||
#define PAGE_PA2 0x00007fffffe00000
|
||||
|
|
|
@ -582,7 +582,6 @@ _rlinit_vesa:
|
|||
mov $'\n',%al
|
||||
jmp .putc
|
||||
.endfn .putnl
|
||||
.previous
|
||||
|
||||
str.inform:
|
||||
#define SHGLYPH "\x7f"
|
||||
|
@ -629,3 +628,5 @@ str.mode_list_start:
|
|||
.byte PC_VIDEO_RGBX8888,32, 8, 0, 8, 8, 8,16
|
||||
.byte PC_VIDEO_BGRX8888,32, 8,16, 8, 8, 8, 0
|
||||
.type_list_end:
|
||||
|
||||
.previous
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue