Subversion Repositories Kolibri OS

Rev

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