remove _PG_X
This commit is contained in:
parent
67a83b0b0b
commit
72f089ded6
3
SPEC.md
3
SPEC.md
|
@ -75,6 +75,9 @@
|
|||
* `_Protect`描述一个被保护的地址空间,包含:
|
||||
* `_Area area`: 可以使用的地址空间
|
||||
* `ptr`: 体系结构相关的指针,供AM内部使用
|
||||
* Permissions:
|
||||
* read: `_PG_R`
|
||||
* write: `_PG_W`
|
||||
|
||||
### PTE API
|
||||
|
||||
|
|
1
am/am.h
1
am/am.h
|
@ -79,7 +79,6 @@ int _istatus(int enable);
|
|||
|
||||
#define _PG_R 1
|
||||
#define _PG_W 2
|
||||
#define _PG_X 4
|
||||
void _pte_init(void*(*palloc)(), void (*pfree)(void*));
|
||||
void _protect(_Protect *p);
|
||||
void _release(_Protect *p);
|
||||
|
|
|
@ -95,7 +95,7 @@ void *_query(_Protect *p, void *va, int *mode) {
|
|||
return NULL;
|
||||
}
|
||||
if (mode) {
|
||||
*mode = ((*pte & PTE_W) ? _PG_W : 0) | _PG_R | _PG_X;
|
||||
*mode = ((*pte & PTE_W) ? _PG_W : 0) | _PG_R;
|
||||
}
|
||||
return (void*)PTE_ADDR(*pte);
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ void *_query(_Protect *p, void *va, int *mode) {
|
|||
void _unmap(_Protect *p, void *va) {
|
||||
}
|
||||
|
||||
_RegSet *_umake(_Protect *p, _Area ustack, _Area kstack, void *entry, char *const argv[], char *const envp[]) {
|
||||
_RegSet *_umake(_Protect *p, _Area ustack, _Area kstack, void *entry, int argc, char **argv, char **enpv) {
|
||||
_RegSet *regs = (_RegSet*)kstack.start;
|
||||
regs->cs = USEL(SEG_UCODE);
|
||||
regs->ds = regs->es = regs->ss = USEL(SEG_UDATA);
|
||||
|
@ -115,7 +115,10 @@ _RegSet *_umake(_Protect *p, _Area ustack, _Area kstack, void *entry, char *cons
|
|||
|
||||
uint32_t esp = regs->esp3;
|
||||
regs->esp3 = esp;
|
||||
// TODO: implement umake
|
||||
// TODO:
|
||||
// push (argc, argv, envp) to ustack
|
||||
// prepare kstack
|
||||
// make every register correct
|
||||
|
||||
return regs;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue