no need for manual heap initialization (68.11)

git-svn-id: svn://kolibrios.org@6893 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
pathoswithin 2017-05-13 06:41:42 +00:00
parent 5ac8ef4526
commit a4a06a81a0
3 changed files with 13 additions and 42 deletions

View File

@ -595,19 +595,13 @@ endp
align 4 align 4
proc user_alloc stdcall, alloc_size:dword proc user_alloc stdcall, alloc_size:dword
push ebx esi edi
push ebx call init_heap
push esi
push edi
mov ebx, [current_process]
lea ecx, [ebx+PROC.heap_lock] lea ecx, [ebx+PROC.heap_lock]
call mutex_lock call mutex_lock
mov ecx, [alloc_size] mov ecx, [alloc_size]
add ecx, (4095+PAGE_SIZE) add ecx, (4095+PAGE_SIZE)
and ecx, not 4095 and ecx, not 4095
mov esi, dword [ebx+PROC.heap_base] ; heap_base mov esi, dword [ebx+PROC.heap_base] ; heap_base
mov edi, dword [ebx+PROC.heap_top] ; heap_top mov edi, dword [ebx+PROC.heap_top] ; heap_top
.scan: .scan:

View File

@ -2577,8 +2577,6 @@ dword-значение цвета 0x00RRGGBB
* 3 = RAW * 3 = RAW
* 4 и выше зарезервировано * 4 и выше зарезервировано
* +8: более детально смотрите файл clipboard_container_rus.txt * +8: более детально смотрите файл clipboard_container_rus.txt
* Функция должна использоваться совместно с 68.11. Приложение должно
предварительно проинициализировать локальную кучу вызовом 68.11.
---------------------- Константы для регистров: ---------------------- ---------------------- Константы для регистров: ----------------------
eax - SF_CLIPBOARD (54) eax - SF_CLIPBOARD (54)
@ -2991,10 +2989,8 @@ IPC применяется для посылок сообщений от одн
* eax = 1 - недостаточно памяти * eax = 1 - недостаточно памяти
Замечания: Замечания:
* Есть другой способ выделения/освобождения динамической памяти - * Есть другой способ выделения/освобождения динамической памяти -
подфункции 11, 12, 13 функции 68. подфункции 12, 13 и 20 функции 68, но после их использования будет
* Функция не может использоваться совместно с 68.11, 68.12, 68.13. создана куча процесса и вызов функции 64 будет игнорироваться.
Вызов функции будет игнорироваться, если приложение создаст
локальную кучу вызовом 68.11.
---------------------- Константы для регистров: ---------------------- ---------------------- Константы для регистров: ----------------------
eax - SF_MEMORY_RESIZE (64) eax - SF_MEMORY_RESIZE (64)
@ -3296,7 +3292,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
eax - SF_SYS_MISC (68) eax - SF_SYS_MISC (68)
ebx - SSF_WRITE_MSR (4) ebx - SSF_WRITE_MSR (4)
====================================================================== ======================================================================
===== Функция 68, подфункция 11 - инициализировать кучу процесса. ==== = Функция 68, подфункция 11 - вручную инициализировать кучу процесса =
====================================================================== ======================================================================
Параметры: Параметры:
* eax = 68 - номер функции * eax = 68 - номер функции
@ -3306,10 +3302,9 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* иначе размер созданной кучи * иначе размер созданной кучи
Замечания: Замечания:
* Вызов функции инициализирует кучу, из которой впоследствии можно * Вызов функции инициализирует кучу, из которой впоследствии можно
выделять и освобождать блоки памяти подфункциями 12 и 13. выделять и освобождать блоки памяти подфункциями 12, 13 и 20.
* Если куча уже создана, функция вернёт размер существующей кучи.
Размер кучи равен размеру всей свободной памяти приложения. Размер кучи равен размеру всей свободной памяти приложения.
* При повторном вызове функции тем же процессом функция вернёт
размер существующей кучи.
* После создания кучи вызовы функции 64 игнорируются. * После создания кучи вызовы функции 64 игнорируются.
---------------------- Константы для регистров: ---------------------- ---------------------- Константы для регистров: ----------------------
@ -3325,8 +3320,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
Возвращаемое значение: Возвращаемое значение:
* eax = указатель на выделенный блок * eax = указатель на выделенный блок
Замечания: Замечания:
* Предварительно следует инициализировать кучу процесса вызовом
подфункции 11.
* Функция выделяет целое число страниц (4 Кб) так, что фактический * Функция выделяет целое число страниц (4 Кб) так, что фактический
размер выделенного блока больше или равен запрошенному. размер выделенного блока больше или равен запрошенному.
@ -3454,8 +3447,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
Возвращаемое значение: Возвращаемое значение:
* eax = указатель на перераспределённый блок, 0 при ошибке * eax = указатель на перераспределённый блок, 0 при ошибке
Замечания: Замечания:
* Предварительно следует инициализировать кучу процесса вызовом
подфункции 11.
* Функция выделяет целое число страниц (4 Кб) так, что фактический * Функция выделяет целое число страниц (4 Кб) так, что фактический
размер выделенного блока больше или равен запрошенному. размер выделенного блока больше или равен запрошенному.
* Если edx=0, то вызов функции эквивалентен выделению памяти * Если edx=0, то вызов функции эквивалентен выделению памяти
@ -3519,8 +3510,6 @@ Architecture Software Developer's Manual, Volume 3, Appendix B);
* E_NOMEM = 30 * E_NOMEM = 30
* E_PARAM = 33 * E_PARAM = 33
Замечания: Замечания:
* Предварительно следует инициализировать кучу процесса вызовом
подфункции 11.
* Если создаётся новая область, то флаги доступа устанавливают * Если создаётся новая область, то флаги доступа устанавливают
максимальные права доступа для остальных процессов. Попытка максимальные права доступа для остальных процессов. Попытка
открытия другим потоком с неразрешёнными правами провалится открытия другим потоком с неразрешёнными правами провалится

View File

@ -2548,9 +2548,6 @@ Returned value:
* eax = if successful - pointer to a memory with data * eax = if successful - pointer to a memory with data
* eax = 1 - error * eax = 1 - error
* eax = -1 - main list area not found * eax = -1 - main list area not found
Remarks:
* The function must be used in conjunction with 68.11. The
application must pre-initialize the local heap by calling 68.11.
---------------------- Constants for registers: ---------------------- ---------------------- Constants for registers: ----------------------
eax - SF_CLIPBOARD (54) eax - SF_CLIPBOARD (54)
@ -2958,10 +2955,8 @@ Returned value:
* eax = 1 - not enough memory * eax = 1 - not enough memory
Remarks: Remarks:
* There is another way to dynamically allocate/free memory - * There is another way to dynamically allocate/free memory -
subfunctions 11, 12, 13 of function 68. subfunctions 12, 13 and 20 of function 68, but after creation
* The function cannot be used together with 68.11, 68.12, 68.13. of the process heap 64 function call will be ignored.
The function call will be ignored after creation of process heap
with function 68.11.
---------------------- Constants for registers: ---------------------- ---------------------- Constants for registers: ----------------------
eax - SF_MEMORY_RESIZE (64) eax - SF_MEMORY_RESIZE (64)
@ -3263,7 +3258,7 @@ Remarks:
eax - SF_SYS_MISC (68) eax - SF_SYS_MISC (68)
ebx - SSF_WRITE_MSR (4) ebx - SSF_WRITE_MSR (4)
====================================================================== ======================================================================
======= Function 68, subfunction 11 - initialize process heap. ======= === Function 68, subfunction 11 - manually initialize process heap ===
====================================================================== ======================================================================
Parameters: Parameters:
* eax = 68 - function number * eax = 68 - function number
@ -3272,11 +3267,10 @@ Returned value:
* eax = 0 - failed * eax = 0 - failed
* otherwise size of created heap * otherwise size of created heap
Remarks: Remarks:
* The function call initializes heap, from which one can in future * The function call initializes heap for subfunctions 12, 13 and 20.
allocate and free memory blocks with subfunctions 12 and 13. * If the process heap is already created, this function will return
the size of the existing heap.
Heap size is equal to total amount of free application memory. Heap size is equal to total amount of free application memory.
* The second function call from the same process results in
returning the size of the existing heap.
* After creation of the heap calls to function 64 will be ignored. * After creation of the heap calls to function 64 will be ignored.
---------------------- Constants for registers: ---------------------- ---------------------- Constants for registers: ----------------------
@ -3292,8 +3286,6 @@ Parameters:
Returned value: Returned value:
* eax = pointer to the allocated block * eax = pointer to the allocated block
Remarks: Remarks:
* Before this call one must initialize process heap by call to
subfunction 11.
* The function allocates an integer number of pages (4 Kb) in such * The function allocates an integer number of pages (4 Kb) in such
way that the real size of allocated block is more than or equal to way that the real size of allocated block is more than or equal to
requested size. requested size.
@ -3421,8 +3413,6 @@ Parameters:
Returned value: Returned value:
* eax = pointer to the reallocated block, 0 = error * eax = pointer to the reallocated block, 0 = error
Remarks: Remarks:
* Before this call one must initialize process heap by call to
subfunction 11.
* The function allocates an integer number of pages (4 Kb) in such * The function allocates an integer number of pages (4 Kb) in such
way that the real size of allocated block is more than or equal to way that the real size of allocated block is more than or equal to
requested size. requested size.
@ -3485,8 +3475,6 @@ Error codes:
* E_NOMEM = 30 * E_NOMEM = 30
* E_PARAM = 33 * E_PARAM = 33
Remarks: Remarks:
* Before this call one must initialize process heap by call to
subfunction 11.
* If a new area is created, access flags set maximal rights * If a new area is created, access flags set maximal rights
for other processes. An attempt from other process to open for other processes. An attempt from other process to open
with denied rights will fail with error code E_ACCESS. with denied rights will fail with error code E_ACCESS.