.file "vmm.c" .intel_syntax .text .globl _vmm_init .type _vmm_init, @function _vmm_init: push %ebp mov %ebp, %esp sub %esp, 24 mov DWORD PTR [%ebp-4], 0 .L2: mov %eax, DWORD PTR [%ebp-4] cmp %eax, DWORD PTR _mb_info_block+20 jb .L5 jmp .L3 .L5: mov %eax, DWORD PTR [%ebp-4] sal %eax, 4 mov %eax, DWORD PTR _mb_modules[%eax] add %eax, 1073741824 mov DWORD PTR [%esp+8], %eax mov %eax, DWORD PTR [%ebp-4] sal %eax, 4 mov %eax, DWORD PTR _mb_modules[%eax+4] dec %eax mov DWORD PTR [%esp+4], %eax mov %eax, DWORD PTR [%ebp-4] sal %eax, 4 mov %eax, DWORD PTR _mb_modules[%eax] mov DWORD PTR [%esp], %eax call _vmm_map_range lea %eax, [%ebp-4] inc DWORD PTR [%eax] jmp .L2 .L3: mov DWORD PTR [%ebp-4], 0 .L6: cmp DWORD PTR [%ebp-4], 3 jle .L9 jmp .L7 .L9: mov %ecx, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%ebp-4] mov %edx, %eax sal %edx, 4 mov %eax, OFFSET FLAT:_heapEntryHeadNodes add %eax, %edx mov DWORD PTR _heapEntryQueues[4+%ecx*8], %eax mov %eax, DWORD PTR [%ebp-4] mov %ecx, %eax sal %ecx, 4 mov %eax, DWORD PTR [%ebp-4] mov %edx, %eax sal %edx, 4 mov %eax, OFFSET FLAT:_heapEntryTailNodes add %eax, %edx mov DWORD PTR _heapEntryHeadNodes[%ecx+8], %eax mov %eax, DWORD PTR [%ebp-4] mov %ecx, %eax sal %ecx, 4 mov %eax, DWORD PTR [%ebp-4] mov %edx, %eax sal %edx, 4 mov %eax, OFFSET FLAT:_heapEntryHeadNodes add %eax, %edx mov DWORD PTR _heapEntryTailNodes[%ecx+12], %eax lea %eax, [%ebp-4] inc DWORD PTR [%eax] jmp .L6 .L7: mov DWORD PTR [%esp], OFFSET FLAT:_initialHEB call _vmm_heb_init mov DWORD PTR [%esp+8], OFFSET FLAT:_initialHEB mov DWORD PTR [%esp+4], OFFSET FLAT:_heapEntryHeadNodes mov DWORD PTR [%esp], 0 call _vmm_addToQueue call _vmm_stripUnusedEntry mov DWORD PTR [%ebp-8], %eax mov %eax, DWORD PTR [%ebp-8] mov DWORD PTR [%eax], -805306368 mov %eax, DWORD PTR [%ebp-8] mov DWORD PTR [%eax+4], 536870912 mov %eax, DWORD PTR [%ebp-8] mov DWORD PTR [%esp+8], %eax mov DWORD PTR [%esp+4], OFFSET FLAT:_heapEntryHeadNodes+48 mov DWORD PTR [%esp], 3 call _vmm_addToQueue leave ret .size _vmm_init, .-_vmm_init .globl _vmm_map .type _vmm_map, @function _vmm_map: push %ebp mov %ebp, %esp sub %esp, 24 lea %eax, [%ebp-4] mov DWORD PTR [%esp+4], %eax mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp], %eax call _vmm_map_addr leave ret .size _vmm_map, .-_vmm_map .globl _vmm_map_addr .type _vmm_map_addr, @function _vmm_map_addr: push %ebp mov %ebp, %esp sub %esp, 24 cmp DWORD PTR _mm_freepages, 9 ja .L12 mov DWORD PTR [%ebp-4], -1 jmp .L11 .L12: call _mm_palloc mov %edx, %eax mov %eax, DWORD PTR [%ebp+12] mov DWORD PTR [%eax], %edx mov %eax, DWORD PTR [%eax] mov DWORD PTR [%esp+4], %eax mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp], %eax call _vmm_map1 mov DWORD PTR [%ebp-4], %eax .L11: mov %eax, DWORD PTR [%ebp-4] leave ret .size _vmm_map_addr, .-_vmm_map_addr .globl _vmm_map1 .type _vmm_map1, @function _vmm_map1: push %ebp mov %ebp, %esp sub %esp, 40 and DWORD PTR [%ebp+8], -4096 lea %eax, [%ebp+12] and DWORD PTR [%eax], -4096 mov %eax, DWORD PTR [%ebp+8] shr %eax, 22 mov DWORD PTR [%ebp-4], %eax mov %eax, DWORD PTR [%ebp+8] and %eax, 4190208 shr %eax, 12 mov DWORD PTR [%ebp-8], %eax mov DWORD PTR [%ebp-12], -4096 mov %eax, DWORD PTR [%ebp-4] lea %edx, [0+%eax*4] mov %eax, DWORD PTR [%ebp-12] mov %eax, DWORD PTR [%eax+%edx] and %eax, 1 test %eax, %eax jne .L14 call _mm_palloc mov DWORD PTR [%ebp-16], %eax cmp DWORD PTR [%ebp-16], 0 jne .L15 mov DWORD PTR [%ebp-20], -1 jmp .L13 .L15: mov %eax, DWORD PTR [%ebp-4] lea %ecx, [0+%eax*4] mov %edx, DWORD PTR [%ebp-12] mov %eax, DWORD PTR [%ebp-16] or %eax, 3 mov DWORD PTR [%edx+%ecx], %eax mov %eax, DWORD PTR [%ebp-4] sal %eax, 2 sub %eax, 4096 mov DWORD PTR [%esp], %eax call _invlpg_ mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp], %eax call _invlpg_ mov DWORD PTR [%esp+8], 1024 mov DWORD PTR [%esp+4], 0 mov %eax, DWORD PTR [%ebp-4] sal %eax, 12 or %eax, -4194304 mov DWORD PTR [%esp], %eax call _memsetd .L14: mov %eax, DWORD PTR [%ebp-4] mov %edx, %eax sal %edx, 12 mov %eax, DWORD PTR [%ebp-8] sal %eax, 2 or %eax, %edx mov %edx, %eax or %edx, -4194304 mov %eax, DWORD PTR [%ebp+12] or %eax, 3 mov DWORD PTR [%edx], %eax mov %eax, DWORD PTR [%ebp-4] mov %edx, %eax sal %edx, 12 mov %eax, DWORD PTR [%ebp-8] sal %eax, 2 or %eax, %edx or %eax, -4194304 mov DWORD PTR [%esp], %eax call _invlpg_ mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp], %eax call _invlpg_ mov DWORD PTR [%ebp-20], 0 .L13: mov %eax, DWORD PTR [%ebp-20] leave ret .size _vmm_map1, .-_vmm_map1 .globl _vmm_mapn .type _vmm_mapn, @function _vmm_mapn: push %ebp mov %ebp, %esp sub %esp, 24 nop .L17: cmp DWORD PTR [%ebp+16], 0 jne .L19 jmp .L18 .L19: mov %eax, DWORD PTR [%ebp+12] mov DWORD PTR [%esp+4], %eax mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp], %eax call _vmm_map1 test %eax, %eax je .L20 mov DWORD PTR [%ebp-4], 1 jmp .L16 .L20: add DWORD PTR [%ebp+8], 4096 lea %eax, [%ebp+12] add DWORD PTR [%eax], 4096 lea %eax, [%ebp+16] dec DWORD PTR [%eax] jmp .L17 .L18: mov DWORD PTR [%ebp-4], 0 .L16: mov %eax, DWORD PTR [%ebp-4] leave ret .size _vmm_mapn, .-_vmm_mapn .globl _vmm_unmap1 .type _vmm_unmap1, @function _vmm_unmap1: push %ebp mov %ebp, %esp sub %esp, 8 mov %eax, DWORD PTR [%ebp+8] and %eax, -4194304 mov %edx, %eax shr %edx, 10 mov %eax, DWORD PTR [%ebp+8] and %eax, 4190208 shr %eax, 10 or %eax, %edx or %eax, -4194304 mov DWORD PTR [%eax], 0 mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp], %eax call _invlpg_ leave ret .size _vmm_unmap1, .-_vmm_unmap1 .globl _vmm_unmapn .type _vmm_unmapn, @function _vmm_unmapn: push %ebp mov %ebp, %esp sub %esp, 8 nop .L23: cmp DWORD PTR [%ebp+12], 0 jne .L25 jmp .L22 .L25: mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp], %eax call _vmm_unmap1 add DWORD PTR [%ebp+8], 4096 lea %eax, [%ebp+12] dec DWORD PTR [%eax] jmp .L23 .L22: leave ret .size _vmm_unmapn, .-_vmm_unmapn .globl _vmm_map_range .type _vmm_map_range, @function _vmm_map_range: push %ebp mov %ebp, %esp sub %esp, 24 mov %eax, DWORD PTR [%ebp+12] cmp %eax, DWORD PTR [%ebp+8] jae .L27 mov DWORD PTR [%ebp-4], -1 jmp .L26 .L27: nop .L28: mov %eax, DWORD PTR [%ebp+8] cmp %eax, DWORD PTR [%ebp+12] jb .L30 jmp .L29 .L30: mov %eax, DWORD PTR [%ebp+16] mov DWORD PTR [%esp+4], %eax mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp], %eax call _vmm_map1 test %eax, %eax je .L31 mov DWORD PTR [%ebp-4], -2 jmp .L26 .L31: add DWORD PTR [%ebp+8], 4096 lea %eax, [%ebp+16] add DWORD PTR [%eax], 4096 jmp .L28 .L29: mov DWORD PTR [%ebp-4], 0 .L26: mov %eax, DWORD PTR [%ebp-4] leave ret .size _vmm_map_range, .-_vmm_map_range .globl _kmalloc .type _kmalloc, @function _kmalloc: push %ebp mov %ebp, %esp sub %esp, 24 call _k_enter_critical mov %eax, DWORD PTR [%ebp+8] and %eax, 3 test %eax, %eax je .L33 mov %eax, DWORD PTR [%ebp+8] mov %edx, %eax and %edx, 3 mov %eax, DWORD PTR [%ebp+8] sub %eax, %edx add %eax, 4 mov DWORD PTR [%ebp+8], %eax .L33: mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp], %eax call _vmm_getFreeChunk mov DWORD PTR [%ebp-4], %eax cmp DWORD PTR [%ebp-4], 0 je .L34 call _k_leave_critical mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%ebp-8], %eax jmp .L32 .L34: mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp], %eax call _vmm_moreCore test %eax, %eax je .L35 call _k_leave_critical mov DWORD PTR [%ebp-8], 0 jmp .L32 .L35: mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp], %eax call _vmm_getFreeChunk mov DWORD PTR [%ebp-4], %eax call _k_leave_critical mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%ebp-8], %eax .L32: mov %eax, DWORD PTR [%ebp-8] leave ret .size _kmalloc, .-_kmalloc .globl _kfree .type _kfree, @function _kfree: push %ebp mov %ebp, %esp sub %esp, 24 call _k_enter_critical mov %eax, DWORD PTR _heapEntryQueues+20 mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-4], %eax .L37: mov %eax, DWORD PTR [%ebp-4] cmp DWORD PTR [%eax+8], 0 jne .L39 jmp .L38 .L39: mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax] cmp %eax, DWORD PTR [%ebp+8] jne .L40 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp+4], %eax mov DWORD PTR [%esp], 2 call _vmm_removeHeapEntry mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp+4], %eax mov DWORD PTR [%esp], 1 call _vmm_coalesceEntry test %eax, %eax je .L41 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp+8], %eax mov %eax, DWORD PTR _heapEntryQueues+12 mov DWORD PTR [%esp+4], %eax mov DWORD PTR [%esp], 1 call _vmm_addToQueue jmp .L38 .L41: mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp+8], %eax mov %eax, DWORD PTR _heapEntryQueues+4 mov DWORD PTR [%esp+4], %eax mov DWORD PTR [%esp], 0 call _vmm_addToQueue jmp .L38 .L40: mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-4], %eax jmp .L37 .L38: call _k_leave_critical mov %eax, 0 leave ret .size _kfree, .-_kfree .globl _vmm_palloc .type _vmm_palloc, @function _vmm_palloc: push %ebp mov %ebp, %esp sub %esp, 8 lea %eax, [%ebp-4] mov DWORD PTR [%esp], %eax call _vmm_palloc_addr leave ret .size _vmm_palloc, .-_vmm_palloc .globl _vmm_palloc_addr .type _vmm_palloc_addr, @function _vmm_palloc_addr: push %ebp mov %ebp, %esp sub %esp, 24 call _k_enter_critical mov %eax, DWORD PTR _heapEntryQueues+28 mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-4], %eax mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%ebp-8], %eax .L45: mov %eax, DWORD PTR [%ebp-4] cmp DWORD PTR [%eax+8], 0 jne .L47 jmp .L46 .L47: mov %eax, DWORD PTR [%ebp-4] cmp DWORD PTR [%eax+4], 4096 jne .L48 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp+4], %eax mov DWORD PTR [%esp], 3 call _vmm_removeHeapEntry mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp+8], %eax mov DWORD PTR [%esp+4], OFFSET FLAT:_heapEntryHeadNodes+32 mov DWORD PTR [%esp], 2 call _vmm_addToQueue mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp+4], %eax mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax] mov DWORD PTR [%esp], %eax call _vmm_map_addr test %eax, %eax je .L49 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%eax], 0 .L49: call _k_leave_critical mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax] mov DWORD PTR [%ebp-12], %eax jmp .L44 .L48: mov %eax, DWORD PTR [%ebp-4] mov %edx, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%eax+4] cmp %eax, DWORD PTR [%edx+4] jbe .L50 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%ebp-8], %eax .L50: mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-4], %eax jmp .L45 .L46: mov %eax, DWORD PTR [%ebp-8] cmp DWORD PTR [%eax+4], 65535 ja .L51 call _k_leave_critical mov DWORD PTR [%ebp-12], 0 jmp .L44 .L51: mov %edx, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%eax+4] sub %eax, 4096 mov DWORD PTR [%edx+4], %eax call _vmm_getUnusedEntry mov DWORD PTR [%ebp-4], %eax mov %ecx, DWORD PTR [%ebp-4] mov %edx, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%eax+4] add %eax, DWORD PTR [%edx] mov DWORD PTR [%ecx], %eax mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%eax+4], 4096 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp+8], %eax mov DWORD PTR [%esp+4], OFFSET FLAT:_heapEntryHeadNodes+32 mov DWORD PTR [%esp], 2 call _vmm_addToQueue mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp+4], %eax mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax] mov DWORD PTR [%esp], %eax call _vmm_map_addr test %eax, %eax je .L52 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%eax], 0 .L52: call _k_leave_critical mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax] mov DWORD PTR [%ebp-12], %eax .L44: mov %eax, DWORD PTR [%ebp-12] leave ret .size _vmm_palloc_addr, .-_vmm_palloc_addr .globl _vmm_pfree .type _vmm_pfree, @function _vmm_pfree: push %ebp mov %ebp, %esp sub %esp, 24 mov %eax, DWORD PTR [%ebp+8] and %eax, -4194304 mov %edx, %eax shr %edx, 10 mov %eax, DWORD PTR [%ebp+8] and %eax, 4190208 shr %eax, 10 or %eax, %edx or %eax, -4194304 mov %eax, DWORD PTR [%eax] mov DWORD PTR [%ebp-4], %eax mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp], %eax call _vmm_unmapp test %eax, %eax je .L54 mov DWORD PTR [%ebp-8], -1 jmp .L53 .L54: mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp], %eax call _mm_pfree mov DWORD PTR [%ebp-8], 0 .L53: mov %eax, DWORD PTR [%ebp-8] leave ret .size _vmm_pfree, .-_vmm_pfree .globl _vmm_unmapp .type _vmm_unmapp, @function _vmm_unmapp: push %ebp mov %ebp, %esp sub %esp, 24 cmp DWORD PTR [%ebp+8], 0 jne .L56 mov DWORD PTR [%ebp-8], -2 jmp .L55 .L56: call _k_enter_critical mov %eax, DWORD PTR _heapEntryQueues+20 mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-4], %eax .L57: mov %eax, DWORD PTR [%ebp-4] cmp DWORD PTR [%eax+8], 0 jne .L59 jmp .L58 .L59: mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax] cmp %eax, DWORD PTR [%ebp+8] jne .L60 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp+4], %eax mov DWORD PTR [%esp], 2 call _vmm_removeHeapEntry mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax] mov DWORD PTR [%esp], %eax call _vmm_unmap1 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp+8], %eax mov DWORD PTR [%esp+4], OFFSET FLAT:_heapEntryHeadNodes+48 mov DWORD PTR [%esp], 3 call _vmm_addToQueue call _k_leave_critical mov DWORD PTR [%ebp-8], 0 jmp .L55 .L60: mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-4], %eax jmp .L57 .L58: call _k_leave_critical mov DWORD PTR [%ebp-8], -1 .L55: mov %eax, DWORD PTR [%ebp-8] leave ret .size _vmm_unmapp, .-_vmm_unmapp .globl _kcalloc .type _kcalloc, @function _kcalloc: push %ebp mov %ebp, %esp sub %esp, 24 mov %eax, DWORD PTR [%ebp+8] imul %eax, DWORD PTR [%ebp+12] mov DWORD PTR [%esp], %eax call _kmalloc mov DWORD PTR [%ebp-4], %eax cmp DWORD PTR [%ebp-4], 0 jne .L62 mov DWORD PTR [%ebp-8], 0 jmp .L61 .L62: mov %eax, DWORD PTR [%ebp+8] imul %eax, DWORD PTR [%ebp+12] mov DWORD PTR [%esp+8], %eax mov DWORD PTR [%esp+4], 0 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp], %eax call _memset mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%ebp-8], %eax .L61: mov %eax, DWORD PTR [%ebp-8] leave ret .size _kcalloc, .-_kcalloc .globl _krealloc .type _krealloc, @function _krealloc: push %ebp mov %ebp, %esp sub %esp, 40 mov %eax, DWORD PTR [%ebp+12] mov DWORD PTR [%esp], %eax call _kmalloc mov DWORD PTR [%ebp-4], %eax cmp DWORD PTR [%ebp-4], 0 je .L64 mov %eax, DWORD PTR _heapEntryQueues+20 mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-8], %eax .L65: mov %eax, DWORD PTR [%ebp-8] cmp DWORD PTR [%eax+8], 0 jne .L67 jmp .L66 .L67: mov %eax, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%eax] cmp %eax, DWORD PTR [%ebp+8] jne .L68 mov %eax, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%eax+4] mov DWORD PTR [%ebp-20], %eax mov %eax, DWORD PTR [%ebp+12] mov DWORD PTR [%ebp-16], %eax mov %eax, DWORD PTR [%ebp-20] cmp DWORD PTR [%ebp-16], %eax jbe .L69 mov %eax, DWORD PTR [%ebp-20] mov DWORD PTR [%ebp-16], %eax .L69: mov %eax, DWORD PTR [%ebp-16] mov DWORD PTR [%esp+8], %eax mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp+4], %eax mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp], %eax call _memcpy mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%esp], %eax call _kfree mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%ebp-12], %eax jmp .L63 .L68: mov %eax, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-8], %eax jmp .L65 .L66: mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp], %eax call _kfree mov DWORD PTR [%ebp-12], 0 jmp .L63 .L64: mov DWORD PTR [%ebp-12], 0 .L63: mov %eax, DWORD PTR [%ebp-12] leave ret .size _krealloc, .-_krealloc .globl _vmm_getFreeChunk .type _vmm_getFreeChunk, @function _vmm_getFreeChunk: push %ebp mov %ebp, %esp sub %esp, 40 mov %eax, DWORD PTR _heapEntryQueues+12 mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-4], %eax mov DWORD PTR [%ebp-8], 0 .L72: mov %eax, DWORD PTR [%ebp-4] cmp DWORD PTR [%eax+8], 0 jne .L74 jmp .L73 .L74: mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax+4] cmp %eax, DWORD PTR [%ebp+8] jne .L75 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp+4], %eax mov DWORD PTR [%esp], 1 call _vmm_removeHeapEntry mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%esp+8], %eax mov %eax, DWORD PTR _heapEntryQueues+20 mov DWORD PTR [%esp+4], %eax mov DWORD PTR [%esp], 2 call _vmm_addToQueue mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax] mov DWORD PTR [%ebp-16], %eax jmp .L71 .L75: cmp DWORD PTR [%ebp-8], 0 je .L76 mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax+4] cmp %eax, DWORD PTR [%ebp+8] jbe .L78 mov %eax, DWORD PTR [%ebp-4] mov %edx, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%eax+4] cmp %eax, DWORD PTR [%edx+4] jae .L78 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%ebp-8], %eax jmp .L78 .L76: mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax+4] cmp %eax, DWORD PTR [%ebp+8] jbe .L78 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%ebp-8], %eax .L78: mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-4], %eax jmp .L72 .L73: cmp DWORD PTR [%ebp-8], 0 je .L80 call _vmm_getUnusedEntry mov DWORD PTR [%ebp-12], %eax mov %edx, DWORD PTR [%ebp-12] mov %eax, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%eax] mov DWORD PTR [%edx], %eax mov %edx, DWORD PTR [%ebp-12] mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%edx+4], %eax mov %ecx, DWORD PTR [%ebp-8] mov %edx, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%ebp+8] add %eax, DWORD PTR [%edx] mov DWORD PTR [%ecx], %eax mov %ecx, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%ebp-8] mov %edx, DWORD PTR [%ebp+8] mov %eax, DWORD PTR [%eax+4] sub %eax, %edx mov DWORD PTR [%ecx+4], %eax mov %eax, DWORD PTR [%ebp-12] mov DWORD PTR [%esp+8], %eax mov %eax, DWORD PTR _heapEntryQueues+20 mov DWORD PTR [%esp+4], %eax mov DWORD PTR [%esp], 2 call _vmm_addToQueue mov %eax, DWORD PTR [%ebp-12] mov %eax, DWORD PTR [%eax] mov DWORD PTR [%ebp-16], %eax jmp .L71 .L80: mov DWORD PTR [%ebp-16], 0 .L71: mov %eax, DWORD PTR [%ebp-16] leave ret .size _vmm_getFreeChunk, .-_vmm_getFreeChunk .globl _vmm_moreCore .type _vmm_moreCore, @function _vmm_moreCore: push %ebp mov %ebp, %esp sub %esp, 40 mov %eax, DWORD PTR [%ebp+8] shr %eax, 12 add %eax, 2 mov DWORD PTR [%ebp-4], %eax mov %eax, DWORD PTR [%ebp-4] sal %eax, 12 mov DWORD PTR [%ebp+8], %eax mov %eax, DWORD PTR _mm_freepages sub %eax, 5 cmp %eax, DWORD PTR [%ebp-4] jae .L82 mov DWORD PTR [%ebp-28], -1 jmp .L81 .L82: mov %eax, DWORD PTR _heapEntryQueues+28 mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-8], %eax mov %eax, DWORD PTR [%ebp-8] mov DWORD PTR [%ebp-12], %eax .L83: mov %eax, DWORD PTR [%ebp-8] cmp DWORD PTR [%eax+8], 0 jne .L85 jmp .L84 .L85: mov %eax, DWORD PTR [%ebp-8] mov %edx, DWORD PTR [%ebp-12] mov %eax, DWORD PTR [%eax+4] cmp %eax, DWORD PTR [%edx+4] jbe .L86 mov %eax, DWORD PTR [%ebp-8] mov DWORD PTR [%ebp-12], %eax .L86: mov %eax, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-8], %eax jmp .L83 .L84: mov %eax, DWORD PTR [%ebp-12] mov %eax, DWORD PTR [%eax+4] cmp %eax, DWORD PTR [%ebp+8] ja .L87 mov DWORD PTR [%ebp-28], -2 jmp .L81 .L87: mov %eax, DWORD PTR [%ebp-12] mov %eax, DWORD PTR [%eax] mov DWORD PTR [%ebp-20], %eax mov DWORD PTR [%ebp-16], 0 .L88: mov %eax, DWORD PTR [%ebp-16] cmp %eax, DWORD PTR [%ebp-4] jl .L91 jmp .L89 .L91: mov %eax, DWORD PTR [%ebp-20] mov DWORD PTR [%esp], %eax call _vmm_map lea %eax, [%ebp-20] add DWORD PTR [%eax], 4096 lea %eax, [%ebp-16] inc DWORD PTR [%eax] jmp .L88 .L89: call _vmm_getUnusedEntry mov DWORD PTR [%ebp-24], %eax mov %edx, DWORD PTR [%ebp-24] mov %eax, DWORD PTR [%ebp-12] mov %eax, DWORD PTR [%eax] mov DWORD PTR [%edx], %eax mov %edx, DWORD PTR [%ebp-24] mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%edx+4], %eax mov %ecx, DWORD PTR [%ebp-12] mov %edx, DWORD PTR [%ebp-12] mov %eax, DWORD PTR [%ebp+8] add %eax, DWORD PTR [%edx] mov DWORD PTR [%ecx], %eax mov %ecx, DWORD PTR [%ebp-12] mov %eax, DWORD PTR [%ebp-12] mov %edx, DWORD PTR [%ebp+8] mov %eax, DWORD PTR [%eax+4] sub %eax, %edx mov DWORD PTR [%ecx+4], %eax mov %eax, DWORD PTR [%ebp-24] mov DWORD PTR [%esp+4], %eax mov DWORD PTR [%esp], 1 call _vmm_coalesceEntry test %eax, %eax je .L92 mov %eax, DWORD PTR [%ebp-24] mov DWORD PTR [%esp+8], %eax mov %eax, DWORD PTR _heapEntryQueues+12 mov DWORD PTR [%esp+4], %eax mov DWORD PTR [%esp], 1 call _vmm_addToQueue jmp .L93 .L92: mov %eax, DWORD PTR [%ebp-24] mov DWORD PTR [%esp+8], %eax mov %eax, DWORD PTR _heapEntryQueues+4 mov DWORD PTR [%esp+4], %eax mov DWORD PTR [%esp], 0 call _vmm_addToQueue .L93: mov DWORD PTR [%ebp-28], 0 .L81: mov %eax, DWORD PTR [%ebp-28] leave ret .size _vmm_moreCore, .-_vmm_moreCore .globl _vmm_coalesceEntry .type _vmm_coalesceEntry, @function _vmm_coalesceEntry: push %ebp mov %ebp, %esp sub %esp, 8 mov %eax, DWORD PTR [%ebp+8] mov %eax, DWORD PTR _heapEntryQueues[4+%eax*8] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-4], %eax .L95: mov %eax, DWORD PTR [%ebp-4] cmp DWORD PTR [%eax+8], 0 jne .L97 jmp .L96 .L97: mov %edx, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax+4] mov %edx, DWORD PTR [%edx] add %edx, %eax mov %eax, DWORD PTR [%ebp+12] cmp %edx, DWORD PTR [%eax] jne .L98 mov %ecx, DWORD PTR [%ebp-4] mov %edx, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%ebp+12] mov %eax, DWORD PTR [%eax+4] add %eax, DWORD PTR [%edx+4] mov DWORD PTR [%ecx+4], %eax mov DWORD PTR [%ebp-8], 0 jmp .L94 .L98: mov %edx, DWORD PTR [%ebp+12] mov %eax, DWORD PTR [%ebp+12] mov %eax, DWORD PTR [%eax+4] mov %edx, DWORD PTR [%edx] add %edx, %eax mov %eax, DWORD PTR [%ebp-4] cmp %edx, DWORD PTR [%eax] jne .L99 mov %edx, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%ebp+12] mov %eax, DWORD PTR [%eax] mov DWORD PTR [%edx], %eax mov %ecx, DWORD PTR [%ebp-4] mov %edx, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%ebp+12] mov %eax, DWORD PTR [%eax+4] add %eax, DWORD PTR [%edx+4] mov DWORD PTR [%ecx+4], %eax mov DWORD PTR [%ebp-8], 0 jmp .L94 .L99: mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-4], %eax jmp .L95 .L96: mov DWORD PTR [%ebp-8], -1 .L94: mov %eax, DWORD PTR [%ebp-8] leave ret .size _vmm_coalesceEntry, .-_vmm_coalesceEntry .globl _vmm_removeHeapEntry .type _vmm_removeHeapEntry, @function _vmm_removeHeapEntry: push %ebp mov %ebp, %esp mov %eax, DWORD PTR [%ebp+12] mov %edx, DWORD PTR [%eax+12] mov %eax, DWORD PTR [%ebp+12] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%edx+8], %eax mov %eax, DWORD PTR [%ebp+12] mov %edx, DWORD PTR [%eax+8] mov %eax, DWORD PTR [%ebp+12] mov %eax, DWORD PTR [%eax+12] mov DWORD PTR [%edx+12], %eax mov %eax, DWORD PTR [%ebp+8] dec DWORD PTR _heapEntryQueues[0+%eax*8] mov %eax, DWORD PTR [%ebp+12] mov DWORD PTR [%eax+8], 0 mov %eax, DWORD PTR [%ebp+12] mov DWORD PTR [%eax+12], 0 pop %ebp ret .size _vmm_removeHeapEntry, .-_vmm_removeHeapEntry .globl _vmm_heb_init .type _vmm_heb_init, @function _vmm_heb_init: push %ebp mov %ebp, %esp sub %esp, 4 mov DWORD PTR [%ebp-4], 0 .L103: cmp DWORD PTR [%ebp-4], 254 jle .L106 jmp .L104 .L106: mov %ecx, DWORD PTR [%ebp+8] mov %eax, DWORD PTR [%ebp-4] mov %edx, %eax sal %edx, 4 mov %eax, DWORD PTR [%ebp-4] sal %eax, 4 add %eax, DWORD PTR [%ebp+8] add %eax, 16 mov DWORD PTR [%ecx+8+%edx], %eax mov %edx, DWORD PTR [%ebp+8] mov %eax, DWORD PTR [%ebp-4] sal %eax, 4 add %eax, %edx lea %edx, [%eax+16] mov %eax, DWORD PTR [%ebp-4] sal %eax, 4 add %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%edx+12], %eax lea %eax, [%ebp-4] inc DWORD PTR [%eax] jmp .L103 .L104: mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%eax+12], 0 mov %eax, DWORD PTR [%ebp+8] mov DWORD PTR [%eax+4088], 0 leave ret .size _vmm_heb_init, .-_vmm_heb_init .globl _vmm_addToQueue .type _vmm_addToQueue, @function _vmm_addToQueue: push %ebp mov %ebp, %esp push %esi push %ebx sub %esp, 16 mov %esi, DWORD PTR [%ebp+8] mov %ebx, DWORD PTR [%ebp+8] mov %eax, DWORD PTR [%ebp+16] mov DWORD PTR [%esp], %eax call _vmm_countHeapEntries add %eax, DWORD PTR _heapEntryQueues[0+%ebx*8] mov DWORD PTR _heapEntryQueues[0+%esi*8], %eax mov %eax, DWORD PTR [%ebp+16] mov DWORD PTR [%esp], %eax call _vmm_followChain mov DWORD PTR [%ebp-12], %eax mov %edx, DWORD PTR [%ebp-12] mov %eax, DWORD PTR [%ebp+12] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%edx+8], %eax mov %edx, DWORD PTR [%ebp+16] mov %eax, DWORD PTR [%ebp+12] mov DWORD PTR [%edx+12], %eax mov %eax, DWORD PTR [%ebp-12] mov %edx, DWORD PTR [%eax+8] mov %eax, DWORD PTR [%ebp-12] mov DWORD PTR [%edx+12], %eax mov %edx, DWORD PTR [%ebp+12] mov %eax, DWORD PTR [%ebp+16] mov DWORD PTR [%edx+8], %eax add %esp, 16 pop %ebx pop %esi pop %ebp ret .size _vmm_addToQueue, .-_vmm_addToQueue .globl _vmm_countHeapEntries .type _vmm_countHeapEntries, @function _vmm_countHeapEntries: push %ebp mov %ebp, %esp sub %esp, 4 mov DWORD PTR [%ebp-4], 0 .L109: cmp DWORD PTR [%ebp+8], 0 jne .L111 jmp .L110 .L111: lea %eax, [%ebp-4] inc DWORD PTR [%eax] mov %eax, DWORD PTR [%ebp+8] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp+8], %eax jmp .L109 .L110: mov %eax, DWORD PTR [%ebp-4] leave ret .size _vmm_countHeapEntries, .-_vmm_countHeapEntries .globl _vmm_followChain .type _vmm_followChain, @function _vmm_followChain: push %ebp mov %ebp, %esp nop .L113: mov %eax, DWORD PTR [%ebp+8] cmp DWORD PTR [%eax+8], 0 jne .L115 jmp .L114 .L115: mov %eax, DWORD PTR [%ebp+8] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp+8], %eax jmp .L113 .L114: mov %eax, DWORD PTR [%ebp+8] pop %ebp ret .size _vmm_followChain, .-_vmm_followChain .globl _vmm_getUnusedEntry .type _vmm_getUnusedEntry, @function _vmm_getUnusedEntry: push %ebp mov %ebp, %esp sub %esp, 40 cmp DWORD PTR _heapEntryQueues, 4 jg .L117 mov %eax, DWORD PTR _heapEntryQueues+28 mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-4], %eax mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%ebp-8], %eax .L118: cmp DWORD PTR [%ebp-4], 0 jne .L120 jmp .L119 .L120: mov %eax, DWORD PTR [%ebp-4] mov %edx, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%eax+4] cmp %eax, DWORD PTR [%edx+4] jbe .L121 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%ebp-8], %eax .L121: mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-4], %eax jmp .L118 .L119: mov %edx, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%eax+4] sub %eax, 4096 mov DWORD PTR [%edx+4], %eax mov %edx, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%ebp-8] mov %eax, DWORD PTR [%eax+4] add %eax, DWORD PTR [%edx] mov DWORD PTR [%ebp-12], %eax mov %eax, DWORD PTR [%ebp-12] mov DWORD PTR [%esp], %eax call _vmm_map mov %eax, DWORD PTR [%ebp-12] mov DWORD PTR [%esp], %eax call _vmm_heb_init call _vmm_stripUnusedEntry mov DWORD PTR [%ebp-16], %eax mov %edx, DWORD PTR [%ebp-16] mov %eax, DWORD PTR [%ebp-12] mov DWORD PTR [%edx], %eax mov %eax, DWORD PTR [%ebp-16] mov DWORD PTR [%eax+4], 4096 mov %eax, DWORD PTR [%ebp-16] mov DWORD PTR [%esp+8], %eax mov %eax, DWORD PTR _heapEntryTailNodes+44 mov DWORD PTR [%esp+4], %eax mov DWORD PTR [%esp], 2 call _vmm_addToQueue .L117: call _vmm_stripUnusedEntry leave ret .size _vmm_getUnusedEntry, .-_vmm_getUnusedEntry .globl _vmm_stripUnusedEntry .type _vmm_stripUnusedEntry, @function _vmm_stripUnusedEntry: push %ebp mov %ebp, %esp sub %esp, 4 mov %eax, DWORD PTR _heapEntryQueues+4 mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%ebp-4], %eax mov %edx, DWORD PTR _heapEntryQueues+4 mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax+8] mov DWORD PTR [%edx+8], %eax mov %eax, DWORD PTR [%ebp-4] mov %edx, DWORD PTR [%eax+8] mov %eax, DWORD PTR [%ebp-4] mov %eax, DWORD PTR [%eax+12] mov DWORD PTR [%edx+12], %eax dec DWORD PTR _heapEntryQueues mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%eax+8], 0 mov %eax, DWORD PTR [%ebp-4] mov DWORD PTR [%eax+12], 0 mov %eax, DWORD PTR [%ebp-4] leave ret .size _vmm_stripUnusedEntry, .-_vmm_stripUnusedEntry .comm _heapEntryQueues,32,32 .comm _heapEntryHeadNodes,64,32 .comm _heapEntryTailNodes,64,32 .comm _initialHEB,4096,32 .section .note.GNU-stack,"",@progbits .ident "GCC: (GNU) 3.3.5-20050130 (Gentoo 3.3.5.20050130-r1, ssp-3.3.5.20050130-1, pie-8.7.7.1)"