mirror of
https://github.com/hermitcore/libhermit.git
synced 2025-03-09 00:00:03 +01:00
reserve 2 page for the multiboot cmdline string
- required for long strings
This commit is contained in:
parent
12733c506d
commit
78922085ac
2 changed files with 8 additions and 6 deletions
|
@ -155,15 +155,15 @@ int __page_map(size_t viraddr, size_t phyaddr, size_t npages, size_t bits, uint8
|
|||
if (!(self[lvl][vpn] & PG_PRESENT)) {
|
||||
/* There's no table available which covers the region.
|
||||
* Therefore we need to create a new empty table. */
|
||||
size_t phyaddr = get_pages(1);
|
||||
if (BUILTIN_EXPECT(!phyaddr, 0))
|
||||
size_t paddr = get_pages(1);
|
||||
if (BUILTIN_EXPECT(!paddr, 0))
|
||||
goto out;
|
||||
|
||||
/* Reference the new table within its parent */
|
||||
#if 0
|
||||
self[lvl][vpn] = phyaddr | bits | PG_PRESENT | PG_USER | PG_RW | PG_ACCESSED;
|
||||
self[lvl][vpn] = paddr | bits | PG_PRESENT | PG_USER | PG_RW | PG_ACCESSED;
|
||||
#else
|
||||
self[lvl][vpn] = (phyaddr | bits | PG_PRESENT | PG_USER | PG_RW | PG_ACCESSED) & ~PG_XD;
|
||||
self[lvl][vpn] = (paddr | bits | PG_PRESENT | PG_USER | PG_RW | PG_ACCESSED) & ~PG_XD;
|
||||
#endif
|
||||
|
||||
/* Fill new table with zeros */
|
||||
|
@ -328,7 +328,8 @@ int page_init(void)
|
|||
|
||||
if (mb_info && ((mb_info->cmdline & PAGE_MASK) != ((size_t) mb_info & PAGE_MASK))) {
|
||||
LOG_INFO("Map multiboot cmdline 0x%x into the virtual address space\n", mb_info->cmdline);
|
||||
page_map((size_t) mb_info->cmdline & PAGE_MASK, mb_info->cmdline & PAGE_MASK, 1, PG_GLOBAL|PG_RW|PG_PRESENT);
|
||||
// reserve 2 pages for long cmdline strings
|
||||
page_map((size_t) mb_info->cmdline & PAGE_MASK, mb_info->cmdline & PAGE_MASK, 2, PG_GLOBAL|PG_RW|PG_PRESENT);
|
||||
}
|
||||
|
||||
/* Replace default pagefault handler */
|
||||
|
|
|
@ -38,7 +38,8 @@ int vma_arch_init(void)
|
|||
goto out;
|
||||
|
||||
if ((mb_info->cmdline & PAGE_MASK) != ((size_t) mb_info & PAGE_MASK)) {
|
||||
ret = vma_add((size_t)mb_info->cmdline & PAGE_MASK, ((size_t)mb_info->cmdline & PAGE_MASK) + PAGE_SIZE, VMA_READ|VMA_WRITE);
|
||||
// reserve 2 pages for long cmdline strings
|
||||
ret = vma_add((size_t)mb_info->cmdline & PAGE_MASK, ((size_t)mb_info->cmdline & PAGE_MASK) + 2*PAGE_SIZE, VMA_READ|VMA_WRITE);
|
||||
if (BUILTIN_EXPECT(ret, 0))
|
||||
goto out;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue