UEFI :: Paging problems

Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Post Reply
SanderR
Member
Member
Posts: 70
Joined: Tue Aug 30, 2016 1:31 pm
Libera.chat IRC: SDR

UEFI :: Paging problems

Post by SanderR »

Hello everyone!

I have a question regarding paging.
The code bellow works on Virtual Box and QEMU , on real hardware in 32 bit mode, and on 2 real hardware supporting UEFI.
On me 3d piece of hardware, which boots via UEFI, the system tripple faults.
What have I done wrong?

C code paging driver
C header paging driver

I have the feeling it has something to do with line 107:

Code: Select all

for(upointer_t valve = 0 ; valve < (0xFFFFF000/PAGE_GAP_SIZE) ; valve++){
        map_memory(pagemaplevel4,(void*)(valve*PAGE_GAP_SIZE),(void*)(valve*PAGE_GAP_SIZE));
}
The thing is, if I replace the value of 0xFFFFF000 with the value I got from my memory driver, the system still does not like it.
The code for the memory driver is this: C code memory driver

Could someone please tell me what I did wrong?
Octocontrabass
Member
Member
Posts: 5534
Joined: Mon Mar 25, 2013 7:01 pm

Re: UEFI :: Paging problems

Post by Octocontrabass »

SanderR wrote:What have I done wrong?
You allocate memory for the PML4, but it doesn't look like you allocate memory for the other tables.

You also don't check the ExitBootServices() return value.

Maybe other things too, I didn't look for very long.
SanderR wrote:I have the feeling it has something to do with line 107:
Why do you think so? What debugging have you done so far?
SanderR
Member
Member
Posts: 70
Joined: Tue Aug 30, 2016 1:31 pm
Libera.chat IRC: SDR

Re: UEFI :: Paging problems

Post by SanderR »

Thank you for your answer.
I implemented the things you mentioned.
Right now, I can see the text "All pages are filled now load it to the cr3 register!"
Then it takes like 15 seconds and the PC resets.
It never reaches "When we hit this point, we are safe! (new method)"
When I take the maximum physical address value mentioned by EFI, and do it +1 page, then it does give me a pagefault.
Why it doesnt trigger a pagefault for me current issue?
Octocontrabass
Member
Member
Posts: 5534
Joined: Mon Mar 25, 2013 7:01 pm

Re: UEFI :: Paging problems

Post by Octocontrabass »

SanderR wrote:I implemented the things you mentioned.
You still aren't checking all of the return values.
SanderR wrote:Why it doesnt trigger a pagefault for me current issue?
It probably does, but there's still something wrong with your page tables, so your page fault handler causes another page fault.

Have you checked the contents of the page tables? A serial port you could use to send them all to another PC would be really helpful...
Post Reply