Rev 6332 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6332 | Rev 6339 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | $Revision: 6332 $ |
8 | $Revision: 6339 $ |
Line 9... | Line 9... | ||
9 | 9 | ||
Line 335... | Line 335... | ||
335 | 335 | ||
336 | xor eax, eax |
336 | xor eax, eax |
Line 337... | Line 337... | ||
337 | mov [process], eax |
337 | mov [process], eax |
338 | 338 | ||
339 | mov eax, [app_size] |
339 | mov eax, [app_size] |
340 | add eax, 0x3FFFFF |
340 | add eax, 0x1FFFFF |
Line 341... | Line 341... | ||
341 | shr eax, 22 |
341 | shr eax, 21 |
342 | mov [app_tabs], eax |
342 | mov [app_tabs], eax |
343 | 343 | ||
344 | stdcall kernel_alloc, 0x2000 |
344 | stdcall kernel_alloc, 0x3000 |
Line 345... | Line 345... | ||
345 | test eax, eax |
345 | test eax, eax |
Line 369... | Line 369... | ||
369 | jbe @B |
369 | jbe @B |
Line 370... | Line 370... | ||
370 | 370 | ||
371 | mov eax, edi |
371 | mov eax, edi |
372 | call get_pg_addr |
372 | call get_pg_addr |
- | 373 | mov [edi-4096+PROC.pdt_0_phys], eax |
|
- | 374 | lea eax, [edi+4096] |
|
- | 375 | call get_pg_addr |
|
Line 373... | Line 376... | ||
373 | mov [edi-4096+PROC.pdt_0_phys], eax |
376 | mov [edi-4096+PROC.pdt_1_phys], eax |
374 | 377 | ||
375 | mov ecx, (OS_BASE shr 20)/4 |
378 | mov ecx, 2048 |
Line 376... | Line -... | ||
376 | xor eax, eax |
- | |
377 | rep stosd |
- | |
378 | - | ||
379 | mov ecx, (OS_BASE shr 20)/4 |
- | |
380 | mov esi, sys_proc+PROC.pdt_0+(OS_BASE shr 20) |
- | |
381 | rep movsd |
- | |
382 | - | ||
383 | mov eax, [edi-8192+PROC.pdt_0_phys] |
- | |
384 | or eax, PG_SWR |
379 | xor eax, eax |
385 | mov [edi-4096+(page_tabs shr 20)], eax |
380 | rep stosd |
Line 386... | Line 381... | ||
386 | 381 | ||
387 | lea edx, [edi-4096] |
382 | lea edx, [edi-8192] |
388 | mov esi, [app_tabs] |
383 | mov esi, [app_tabs] |
389 | 384 | ||
390 | .alloc_page_dir: |
385 | .alloc_page_dir: |
391 | call alloc_page |
386 | call alloc_page |
- | 387 | test eax, eax |
|
Line 392... | Line 388... | ||
392 | test eax, eax |
388 | jz .fail |
393 | jz .fail |
389 | or eax, PG_UWR |
394 | or eax, PG_UWR |
390 | mov [edx], eax |
395 | mov [edx], eax |
391 | mov [edx+4], dword 0 |
396 | 392 | ||
Line 397... | Line 393... | ||
397 | mov edi, [tmp_task_ptab] |
393 | mov edi, [tmp_task_ptab] |
398 | stdcall map_page, edi, eax, PG_SWR |
394 | stdcall map_page, edi, eax, PG_SWR |
399 | mov ecx, 1024 |
395 | mov ecx, 1024 |
Line 400... | Line 396... | ||
400 | xor eax, eax |
396 | xor eax, eax |
401 | rep stosd |
397 | rep stosd |
Line 428... | Line 424... | ||
428 | proc destroy_page_table stdcall, pg_tab:dword |
424 | proc destroy_page_table stdcall, pg_tab:dword |
Line 429... | Line 425... | ||
429 | 425 | ||
Line 430... | Line 426... | ||
430 | push esi |
426 | push esi |
431 | 427 | ||
432 | mov esi, [pg_tab] |
428 | mov esi, [pg_tab] |
433 | mov ecx, 1024 |
429 | mov ecx, 512 |
434 | .free: |
430 | .free: |
435 | mov eax, [esi] |
431 | mov eax, [esi] |
436 | test eax, 1 |
432 | test eax, 1 |
437 | jz .next |
433 | jz .next |
438 | test eax, 2 |
434 | test eax, 2 |
439 | jz .next |
435 | jz .next |
440 | test eax, 1 shl 9 |
436 | test eax, 1 shl 9 |
441 | jnz .next ;skip shared pages |
437 | jnz .next ;skip shared pages |
442 | call free_page |
438 | call free_page |
443 | .next: |
439 | .next: |
444 | add esi, 4 |
440 | add esi, 8 |
445 | dec ecx |
441 | dec ecx |
446 | jnz .free |
442 | jnz .free |
447 | pop esi |
443 | pop esi |
Line 465... | Line 461... | ||
465 | mov esi, [esi+PROC.dlls_list_ptr] |
461 | mov esi, [esi+PROC.dlls_list_ptr] |
466 | call destroy_all_hdlls |
462 | call destroy_all_hdlls |
Line 467... | Line 463... | ||
467 | 463 | ||
468 | mov esi, [esp] |
464 | mov esi, [esp] |
469 | add esi, PROC.pdt_0 |
465 | add esi, PROC.pdt_0 |
470 | mov edi, (0x80000000 shr 20)/4 |
466 | mov edi, 1024 |
471 | .destroy: |
467 | .destroy: |
472 | mov eax, [esi] |
468 | mov eax, [esi] |
473 | test eax, 1 |
469 | test eax, 1 |
474 | jz .next |
470 | jz .next |
475 | and eax, not 0xFFF |
471 | and eax, not 0xFFF |
476 | stdcall map_page, [tmp_task_ptab], eax, PG_SWR |
472 | stdcall map_page, [tmp_task_ptab], eax, PG_SWR |
477 | stdcall destroy_page_table, [tmp_task_ptab] |
473 | stdcall destroy_page_table, [tmp_task_ptab] |
478 | mov eax, [esi] |
474 | mov eax, [esi] |
479 | call free_page |
475 | call free_page |
480 | .next: |
476 | .next: |
481 | add esi, 4 |
477 | add esi, 8 |
482 | dec edi |
478 | dec edi |
Line 483... | Line 479... | ||
483 | jnz .destroy |
479 | jnz .destroy |
484 | 480 | ||
Line 806... | Line 802... | ||
806 | add ecx, 4095 |
802 | add ecx, 4095 |
807 | shr edx, 12 ; total pages |
803 | shr edx, 12 ; total pages |
808 | shr ecx, 12 ; image pages |
804 | shr ecx, 12 ; image pages |
Line 809... | Line 805... | ||
809 | 805 | ||
810 | mov edi, page_tabs |
806 | mov edi, page_tabs |
811 | shr esi, 10 |
807 | shr esi, 9 |
Line 812... | Line 808... | ||
812 | add esi, edi |
808 | add esi, edi |
813 | 809 | ||
814 | .map_image: |
810 | .map_image: |
815 | lodsd |
811 | lodsd |
816 | and eax, -4096 |
812 | and eax, -4096 |
- | 813 | or eax, PG_UWR |
|
817 | or eax, PG_UWR |
814 | stosd |
818 | stosd |
815 | movsd |
Line 819... | Line 816... | ||
819 | dec edx |
816 | dec edx |
820 | loop .map_image |
817 | loop .map_image |
Line 826... | Line 823... | ||
826 | test eax, eax |
823 | test eax, eax |
827 | jz .fail |
824 | jz .fail |
Line 828... | Line 825... | ||
828 | 825 | ||
829 | or eax, PG_UWR |
826 | or eax, PG_UWR |
- | 827 | stosd |
|
- | 828 | xor eax, eax |
|
830 | stosd |
829 | stosd |
831 | dec edx |
830 | dec edx |
Line 832... | Line 831... | ||
832 | jnz .map_bss |
831 | jnz .map_bss |
833 | 832 | ||
Line 865... | Line 864... | ||
865 | jnz .copy_filename |
864 | jnz .copy_filename |
Line 866... | Line 865... | ||
866 | 865 | ||
867 | add esi, ecx |
866 | add esi, ecx |
Line -... | Line 867... | ||
- | 867 | jmp .check_cmdline |
|
- | 868 | ||
- | 869 | .copy_full_path: |
|
- | 870 | mov esi, [current_slot] |
|
- | 871 | mov esi, [esi+APPDATA.cur_dir] |
|
- | 872 | mov ebx, 1023 |
|
- | 873 | mov al, '/' |
|
- | 874 | stosb |
|
- | 875 | ||
- | 876 | .copy_path: |
|
- | 877 | dec ebx |
|
- | 878 | jz .finish_path |
|
- | 879 | lodsb |
|
- | 880 | stosb |
|
- | 881 | test al, al |
|
- | 882 | jnz .copy_path |
|
- | 883 | mov byte [edi-1], '/' |
|
- | 884 | ||
- | 885 | cmp ecx, ebx |
|
- | 886 | jbe @F |
|
- | 887 | mov ecx, ebx |
|
- | 888 | @@: |
|
- | 889 | lea esi, [ebp+sizeof.APP_HDR] |
|
- | 890 | xor eax, eax |
|
- | 891 | rep movsb |
|
- | 892 | stosb |
|
- | 893 | jmp .check_cmdline |
|
- | 894 | ||
- | 895 | .finish_path: |
|
- | 896 | xor eax, eax |
|
- | 897 | stosb |
|
868 | jmp .check_cmdline |
898 | jmp .check_cmdline |
- | 899 | ||
- | 900 | .copy_filename: |
|
- | 901 | cmp byte [esi], '/' |
|
869 | 902 | jne .copy_full_path |
|
870 | .copy_filename: |
903 | |
Line 871... | Line 904... | ||
871 | rep movsb |
904 | rep movsb |
872 | stosb |
905 | stosb |
Line 912... | Line 945... | ||
912 | mov [tls_data_l+7], ah |
945 | mov [tls_data_l+7], ah |
913 | mov dx, app_tls |
946 | mov dx, app_tls |
914 | mov fs, dx |
947 | mov fs, dx |
Line 915... | Line 948... | ||
915 | 948 | ||
916 | .cleanup: |
949 | .cleanup: |
917 | stdcall free_kernel_space, [ebp+APP_HDR.img_base] |
950 | ; stdcall free_kernel_space, [ebp+APP_HDR.img_base] |
918 | stdcall kernel_free, ebp |
951 | ; stdcall kernel_free, ebp |
919 | .exit: |
952 | .exit: |
920 | popad |
953 | popad |
Line 921... | Line 954... | ||
921 | iretd |
954 | iretd |