Changeset 567807b1 in mainline for arch/ia32/src


Ignore:
Timestamp:
2006-05-24T17:03:29Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8d6bc2d5
Parents:
82da5f5
Message:

Modify the hierarchy of page fault handlers to pass access mode that caused the fault.
Architectures are required to pass either PF_ACCESS_READ, PF_ACCESS_WRITE or PF_ACCESS_EXEC
to as_page_fault(), depending on the cause of the fault.

Location:
arch/ia32/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • arch/ia32/src/interrupt.c

    r82da5f5 r567807b1  
    5555void (* eoi_function)(void) = NULL;
    5656
    57 static void PRINT_INFO_ERRCODE(istate_t *istate)
     57void PRINT_INFO_ERRCODE(istate_t *istate)
    5858{
    5959        char *symbol = get_symtab_entry(istate->eip);
     
    140140}
    141141
    142 void page_fault(int n, istate_t *istate)
    143 {
    144         __address page;
    145 
    146         page = read_cr2();
    147         if (as_page_fault(page, istate) == AS_PF_FAULT) {
    148                 PRINT_INFO_ERRCODE(istate);
    149                 printf("page fault address: %#x\n", page);
    150                 panic("page fault\n");
    151         }
    152 }
    153 
    154142void syscall(int n, istate_t *istate)
    155143{
  • arch/ia32/src/mm/page.c

    r82da5f5 r567807b1  
    4444#include <interrupt.h>
    4545
    46 
    4746void page_arch_init(void)
    4847{
     
    8887        return virtaddr;
    8988}
     89
     90void page_fault(int n, istate_t *istate)
     91{
     92        __address page;
     93        pf_access_t access;
     94       
     95        page = read_cr2();
     96               
     97        if (istate->error_word & PFERR_CODE_RSVD)
     98                panic("Reserved bit set in page directory.\n");
     99
     100        if (istate->error_word & PFERR_CODE_RW)
     101                access = PF_ACCESS_WRITE;
     102        else
     103                access = PF_ACCESS_READ;
     104
     105        if (as_page_fault(page, access, istate) == AS_PF_FAULT) {
     106                PRINT_INFO_ERRCODE(istate);
     107                printf("page fault address: %#x\n", page);
     108                panic("page fault\n");
     109        }
     110}
Note: See TracChangeset for help on using the changeset viewer.