Subversion Repositories Kolibri OS

Rev

Rev 6317 | Rev 6332 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6317 Rev 6319
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: 6317 $
8
$Revision: 6319 $
Line 9... Line 9...
9
 
9
 
Line 48... Line 48...
48
        xor     eax, eax
48
        xor     eax, eax
49
        cld
49
        cld
50
        rep stosd
50
        rep stosd
51
}
51
}
Line 52... Line -...
52
 
-
 
53
 
52
 
54
_strlen:
53
_strlen:
55
        mov     ecx, 0xFFFFFFFF
54
        mov     ecx, 0xFFFFFFFF
56
        xor     eax, eax
55
        xor     eax, eax
57
        repne scasb
56
        repne scasb
58
        mov     eax, 0xFFFFFFFE
57
        mov     eax, 0xFFFFFFFE
59
        sub     eax, ecx
58
        sub     eax, ecx
Line 60... Line -...
60
        retn
-
 
61
 
59
        retn
62
 
60
 
63
fs_execute_from_sysdir:
61
fs_execute_from_sysdir:
64
        xor     ebx, ebx
62
        xor     ebx, ebx
Line 92... Line 90...
92
         filename_size rd 1 ;0x20
90
         filename_size rd 1 ;0x20
93
         cmdline_size  rd 1 ;0x24
91
         cmdline_size  rd 1 ;0x24
Line 94... Line 92...
94
 
92
 
Line 95... Line -...
95
       endl
-
 
96
 
93
       endl
97
xchg bx, bx
94
 
98
        mov     eax, [ebp]
95
        mov     eax, [ebp]
99
        mov     [flags], edx
96
        mov     [flags], edx
Line 100... Line -...
100
        mov     [cmdline], ebx
-
 
101
        mov     [filename], eax
-
 
102
 
-
 
103
        call    lock_application_table
-
 
104
 
-
 
105
        call    alloc_thread_slot
-
 
106
        mov     esi, -0x20 ; too many processes
-
 
107
        test    eax, eax
-
 
108
        jz      .err_0
-
 
109
 
-
 
110
        mov     [slot], eax
-
 
111
        shl     eax, 8
-
 
112
        add     eax, SLOT_BASE
97
        mov     [cmdline], ebx
113
        mov     [slot_base], eax
98
        mov     [filename], eax
114
 
99
 
115
        mov     eax, [filename]
100
        mov     eax, [filename]
116
        stdcall load_file, eax
101
        stdcall load_file, eax
Line 117... Line 102...
117
        mov     esi, -ERROR_FILE_NOT_FOUND
102
        mov     esi, -ERROR_FILE_NOT_FOUND
118
        test    eax, eax
103
        test    eax, eax
Line 119... Line 104...
119
        jz      .err_0
104
        jz      .err_file
120
 
105
 
121
        mov     [file_base], eax
106
        mov     [file_base], eax
122
        mov     [file_size], ebx
107
        mov     [file_size], ebx
123
 
108
 
Line -... Line 109...
-
 
109
        lea     ebx, [hdr_cmdline]
-
 
110
        call    test_app_header
-
 
111
        mov     esi, -0x1F
-
 
112
        test    eax, eax
-
 
113
        jz      .err_hdr
-
 
114
 
-
 
115
        call    lock_application_table
-
 
116
 
-
 
117
        call    alloc_thread_slot
-
 
118
        mov     esi, -0x20 ; too many processes
-
 
119
        test    eax, eax
-
 
120
        jz      .err_0
124
        lea     ebx, [hdr_cmdline]
121
 
125
        call    test_app_header
-
 
126
        mov     esi, -0x1F
122
        mov     [slot], eax
127
        test    eax, eax
123
        shl     eax, 8
128
        jz      .err_hdr
124
        lea     edi, [SLOT_BASE+eax]
129
 
125
        mov     [slot_base], edi
Line 130... Line 126...
130
;clean extended information about process
126
 
131
        mov     edi, [slot_base]
-
 
132
        mov     ecx, 265/4
127
;clean extended information about process
Line 133... Line 128...
133
        xor     eax, eax
128
        mov     ecx, 256/4
134
        cld
129
        xor     eax, eax
135
        rep stosd
130
        cld
136
 
131
        rep stosd
137
; write application name
132
 
138
        lea     eax, [filename]
133
; write application name
139
        stdcall strrchr, eax, '/'  ; now eax points to name without path
134
        stdcall strrchr, [filename], '/'  ; now eax points to name without path
140
 
135
 
141
        lea     esi, [eax+1]
136
        lea     esi, [eax+1]
Line 214... Line 209...
214
 
209
 
215
        mov     eax, [process_number]       ;set result
210
        mov     eax, [process_number]       ;set result
216
        call    unlock_application_table
211
        call    unlock_application_table
Line 217... Line -...
217
        ret
-
 
218
 
-
 
219
.err_hdr:
212
        ret
220
        stdcall kernel_free, [file_base]
213
 
-
 
214
.err_0:
-
 
215
        call    unlock_application_table
-
 
216
 
-
 
217
.err_hdr:
221
.err_0:
218
        stdcall kernel_free, [file_base]
222
        call    unlock_application_table
219
.err_file:
223
        mov     eax, esi
220
        mov     eax, esi
Line 224... Line 221...
224
        ret
221
        ret
Line 316... Line 313...
316
        sub     edx, thr_slot_map
313
        sub     edx, thr_slot_map
317
        lea     eax, [eax+edx*8]
314
        lea     eax, [eax+edx*8]
318
        popfd
315
        popfd
319
        ret
316
        ret
Line 320... Line -...
320
 
-
 
321
 
317
 
322
align 4
318
align 4
323
proc create_process stdcall, app_size:dword
319
proc create_process stdcall, app_size:dword
324
       locals
320
       locals
325
         process     dd ?
321
         process     dd ?
Line 379... Line 375...
379
 
375
 
380
        mov     eax, [edi-8192+PROC.pdt_0_phys]
376
        mov     eax, [edi-8192+PROC.pdt_0_phys]
381
        or      eax, PG_SWR
377
        or      eax, PG_SWR
Line 382... Line -...
382
        mov     [edi-4096+(page_tabs shr 20)], eax
-
 
383
 
-
 
384
xchg bx, bx
378
        mov     [edi-4096+(page_tabs shr 20)], eax
385
 
379
 
Line 386... Line 380...
386
        lea     edx, [edi-4096]
380
        lea     edx, [edi-4096]
387
        mov     esi, [app_tabs]
381
        mov     esi, [app_tabs]
Line 401... Line 395...
401
 
395
 
402
        add     edx, 4
396
        add     edx, 4
403
        dec     esi
397
        dec     esi
Line -... Line 398...
-
 
398
        jnz     .alloc_page_dir
404
        jnz     .alloc_page_dir
399
 
Line 405... Line 400...
405
 
400
        stdcall map_page, [tmp_task_ptab], 0, PG_UNMAP
406
        mov     eax, [process]
401
        mov     eax, [process]
407
 
402
 
408
        pop     edi
403
        pop     edi
409
        pop     esi
-
 
410
        pop     ebx
404
        pop     esi
411
        ret
405
        pop     ebx
412
 
406
        ret
-
 
407
.fail:
413
.fail:
408
        mov     ecx, [process]
414
        cmp     [process], 0
409
        jcxz    @F
415
        je      @f
410
 
416
;;        stdcall destroy_app_space, [dir_addr], 0
411
        call destroy_process
417
@@:
412
@@:
418
        xor     eax, eax
413
        xor     eax, eax
419
        pop     edi
414
        pop     edi
420
        pop     esi
415
        pop     esi
Line 421... Line 416...
421
        pop     ebx
416
        pop     ebx
422
        ret
-
 
423
endp
-
 
424
 
-
 
425
align 4
-
 
426
set_cr3:
-
 
427
        pushfd
-
 
428
        cli
-
 
429
        mov     ebx, [current_slot]
-
 
430
        mov     [current_process], eax
-
 
431
        mov     [ebx+APPDATA.process], eax
-
 
432
        mov     eax, [eax+PROC.pdt_0_phys]
-
 
433
        mov     cr3, eax
-
 
434
        popfd
417
        ret
Line 435... Line 418...
435
        ret
418
endp
Line 436... Line 419...
436
 
419
 
Line 691... Line 674...
691
        cmp     ecx, 0x8000
674
        cmp     ecx, 0x8000
692
        jna     @F
675
        jna     @F
693
        mov     ecx, 0x8000
676
        mov     ecx, 0x8000
694
@@:
677
@@:
695
        mov     ebx, [offset]
678
        mov     ebx, [offset]
696
      ;     add ebx, new_app_base
-
 
697
        push    ecx
679
        push    ecx
698
        stdcall map_memEx, [proc_mem_map], \
680
        stdcall map_memEx, [proc_mem_map], \
699
                [slot], ebx, ecx, PG_SWR
681
                [slot], ebx, ecx, PG_SWR
700
        pop     ecx
682
        pop     ecx
Line 859... Line 841...
859
endp
841
endp
Line 860... Line 842...
860
 
842
 
861
align 4
843
align 4
Line 862... Line -...
862
common_app_entry:
-
 
863
 
844
common_app_entry:
864
xchg bx, bx
845
 
865
        mov     ebp, [current_slot]
846
        mov     ebp, [current_slot]
866
        mov     ebp, [ebp+APPDATA.exec_params]
847
        mov     ebp, [ebp+APPDATA.exec_params]
Line 883... Line 864...
883
.copy_filename:
864
.copy_filename:
884
        rep movsb
865
        rep movsb
885
        stosb
866
        stosb
Line 886... Line 867...
886
 
867
 
887
.copy_cmdline:
868
.copy_cmdline:
888
        mov     edi, [ebx+APP_HDR.cmdline]
869
        mov     edi, [ebp+APP_HDR.cmdline]
889
        mov     ecx, [ebx+APP_HDR.cmdline_size]
870
        mov     ecx, [ebp+APP_HDR.cmdline_size]
890
        test    edi, edi
871
        test    edi, edi
Line 891... Line 872...
891
        jz      .check_tls_header
872
        jz      .check_tls_header
892
 
873
 
Line 915... Line 896...
915
        stdcall kernel_free, ebp
896
        stdcall kernel_free, ebp
916
.exit:
897
.exit:
917
        popad
898
        popad
918
        iretd
899
        iretd
Line 919... Line -...
919
 
-
 
920
align 4
-
 
921
tls_app_entry:
-
 
922
 
-
 
923
        call    init_heap
-
 
924
        stdcall user_alloc, 4096
-
 
925
 
-
 
926
        mov     edx, [current_slot]
-
 
927
        mov     [edx+APPDATA.tls_base], eax
-
 
928
        mov     [tls_data_l+2], ax
-
 
929
        shr     eax, 16
-
 
930
        mov     [tls_data_l+4], al
-
 
931
        mov     [tls_data_l+7], ah
-
 
932
        mov     dx, app_tls
-
 
933
        mov     fs, dx
-
 
934
        popad
-
 
935
        iretd
-
 
936
 
-
 
937
 
900
 
938
EFL_IF      equ 0x0200
901
EFL_IF      equ 0x0200
939
EFL_IOPL1   equ 0x1000
902
EFL_IOPL1   equ 0x1000
940
EFL_IOPL2   equ 0x2000
903
EFL_IOPL2   equ 0x2000
Line 1007... Line 970...
1007
        mov     ebx, [slot]
970
        mov     ebx, [slot]
1008
        mov     eax, ebx
971
        mov     eax, ebx
1009
        shl     ebx, 5
972
        shl     ebx, 5
1010
        lea     ecx, [draw_data+ebx];ecx - pointer to draw data
973
        lea     ecx, [draw_data+ebx];ecx - pointer to draw data
Line 1011... Line -...
1011
 
-
 
1012
;        mov     edx, common_app_entry
-
 
1013
;        cmp     [ebx*8+SLOT_BASE+APPDATA.tls_base], -1
-
 
1014
;        jne     @F
-
 
1015
;        mov     edx, tls_app_entry
-
 
1016
;@@:
974
 
1017
; set window state to 'normal' (non-minimized/maximized/rolled-up) state
975
; set window state to 'normal' (non-minimized/maximized/rolled-up) state
1018
        mov     [ebx+window_data+WDATA.fl_wstate], WSTATE_NORMAL
976
        mov     [ebx+window_data+WDATA.fl_wstate], WSTATE_NORMAL
1019
        mov     [ebx+window_data+WDATA.fl_redraw], 1
977
        mov     [ebx+window_data+WDATA.fl_redraw], 1
1020
        add     ebx, CURRENT_TASK     ;ebx - pointer to information about process
978
        add     ebx, CURRENT_TASK     ;ebx - pointer to information about process