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 |