Rev 394 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 394 | Rev 400 | ||
---|---|---|---|
Line 224... | Line 224... | ||
224 | stdcall set_app_params ,[slot],eax,ebx,ecx,[flags] |
224 | stdcall set_app_params ,[slot],eax,ebx,ecx,[flags] |
Line 225... | Line 225... | ||
225 | 225 | ||
226 | mov eax, [save_cr3] |
226 | mov eax, [save_cr3] |
Line 227... | Line -... | ||
227 | call set_cr3 |
- | |
228 | 227 | call set_cr3 |
|
229 | ; popfd |
228 | |
230 | xor ebx, ebx |
229 | xor ebx, ebx |
231 | mov [application_table_status],ebx ;unlock application_table_status mutex |
230 | mov [application_table_status],ebx ;unlock application_table_status mutex |
232 | mov eax,[process_number] ;set result |
231 | mov eax,[process_number] ;set result |
233 | ret |
232 | ret |
234 | .failed: |
233 | .failed: |
235 | mov eax, [save_cr3] |
234 | mov eax, [save_cr3] |
236 | call set_cr3 |
- | |
237 | .err: |
235 | call set_cr3 |
238 | ; popfd |
236 | .err: |
239 | .err_hdr: |
237 | .err_hdr: |
240 | stdcall kernel_free,[file_base] |
238 | stdcall kernel_free,[file_base] |
241 | .err_file: |
239 | .err_file: |
Line 332... | Line 330... | ||
332 | sub eax,CURRENT_TASK |
330 | sub eax,CURRENT_TASK |
333 | shr eax,5 ;calculate slot index |
331 | shr eax,5 ;calculate slot index |
334 | cmp eax,256 |
332 | cmp eax,256 |
335 | jge .failed ;it should be <256 |
333 | jge .failed ;it should be <256 |
336 | mov word [ebx+0xa],9 ;set process state to 9 (for slot after hight boundary) |
334 | mov word [ebx+0xa],9 ;set process state to 9 (for slot after hight boundary) |
337 | ; mov [new_process_place], eax |
- | |
338 | ret |
335 | ret |
339 | - | ||
340 | .failed: |
336 | .failed: |
341 | xor eax,eax |
337 | xor eax,eax |
342 | ret |
338 | ret |
343 | endp |
339 | endp |
Line 391... | Line 387... | ||
391 | jz .fail |
387 | jz .fail |
392 | mov [dir_addr], eax |
388 | mov [dir_addr], eax |
393 | stdcall map_page,[tmp_task_pdir],eax,dword PG_SW |
389 | stdcall map_page,[tmp_task_pdir],eax,dword PG_SW |
Line 394... | Line 390... | ||
394 | 390 | ||
395 | mov edi, [tmp_task_pdir] |
391 | mov edi, [tmp_task_pdir] |
396 | mov ecx, (LFB_BASE shr 20)/4 ;(page_tabs shr 20)/4 |
392 | mov ecx, (page_tabs shr 20)/4 |
397 | xor eax, eax |
393 | xor eax, eax |
Line -... | Line 394... | ||
- | 394 | rep stosd |
|
- | 395 | ||
- | 396 | mov eax, [dir_addr] |
|
- | 397 | or eax, PG_SW |
|
398 | rep stosd |
398 | stosd |
399 | 399 | ||
400 | mov esi, sys_pgdir+(LFB_BASE shr 20) ;(OS_BASE shr 20) |
400 | mov esi, sys_pgdir+(OS_BASE shr 20) |
401 | mov ecx, (OS_BASE shr 20)/4 |
401 | mov ecx, (OS_BASE shr 20)/4 |
Line 402... | Line -... | ||
402 | cld |
- | |
403 | rep movsd |
- | |
404 | - | ||
405 | mov edi, [tmp_task_pdir] |
- | |
406 | mov eax, [dir_addr] |
- | |
407 | or eax, PG_SW |
402 | cld |
408 | mov [edi+(page_tabs shr 20)], eax |
403 | rep movsd |
Line 409... | Line 404... | ||
409 | 404 | ||
410 | mov eax, [dir_addr] |
405 | mov eax, [dir_addr] |
Line 529... | Line 524... | ||
529 | call wait_mutex ;ebx |
524 | call wait_mutex ;ebx |
Line 530... | Line 525... | ||
530 | 525 | ||
531 | xor edx,edx |
526 | xor edx,edx |
532 | mov eax,0x2 |
527 | mov eax,0x2 |
533 | mov ebx, [pg_dir] |
- | |
534 | 528 | mov ebx, [pg_dir] |
|
535 | .loop: |
529 | .loop: |
536 | ;eax = current slot of process |
530 | ;eax = current slot of process |
537 | mov ecx,eax |
531 | mov ecx,eax |
538 | shl ecx,5 |
532 | shl ecx,5 |
Line 555... | Line 549... | ||
555 | 549 | ||
556 | mov eax, [pg_dir] |
550 | mov eax, [pg_dir] |
557 | and eax, not 0xFFF |
551 | and eax, not 0xFFF |
558 | stdcall map_page,[tmp_task_pdir],eax,dword PG_SW |
552 | stdcall map_page,[tmp_task_pdir],eax,dword PG_SW |
559 | mov esi, [tmp_task_pdir] |
553 | mov esi, [tmp_task_pdir] |
560 | mov edi, (LFB_BASE shr 20)/4 |
554 | mov edi, (page_tabs shr 20)/4 |
561 | .destroy: |
555 | .destroy: |
562 | mov eax, [esi] |
556 | mov eax, [esi] |
563 | test eax, 1 |
557 | test eax, 1 |
564 | jz .next |
558 | jz .next |