New upstream version 1.73.13
Tomasz Buchert
4 years ago
34 | 34 | xor edi,edi |
35 | 35 | mov eax,12 |
36 | 36 | syscall |
37 | mov r9,not 0FFFFFFFFh | |
38 | test rax,r9 | |
39 | jnz no_low_memory | |
40 | mov [additional_memory],eax | |
41 | 37 | mov ecx,[memory_setting] |
42 | 38 | shl ecx,10 |
43 | 39 | jnz allocate_memory |
44 | 40 | mov ecx,1000000h |
45 | 41 | allocate_memory: |
46 | mov edi,[additional_memory] | |
47 | add edi,ecx | |
42 | mov r9d,eax | |
43 | cmp rax,r9 | |
44 | jne high_brk | |
45 | mov [additional_memory],eax | |
46 | lea edi,[eax+ecx] | |
48 | 47 | mov eax,12 |
49 | 48 | syscall |
50 | mov r9,not 0FFFFFFFFh | |
51 | test rax,r9 | |
52 | jnz no_low_memory | |
49 | mov r9d,eax | |
50 | cmp rax,r9 | |
51 | jne no_low_memory | |
53 | 52 | mov [memory_end],eax |
54 | 53 | sub eax,[additional_memory] |
55 | 54 | shr eax,2 |
57 | 56 | mov [additional_memory_end],eax |
58 | 57 | mov [memory_start],eax |
59 | 58 | ret |
60 | ||
61 | no_low_memory: | |
59 | high_brk: | |
60 | xor r9d,r9d | |
61 | or r8,-1 | |
62 | mov r10d,62h ; MAP_PRIVATE + MAP_ANONYMOUS + MAP_32BIT | |
63 | mov edx,3 ; PROT_READ + PROT_WRITE | |
64 | mov esi,ecx | |
65 | xor edi,edi | |
66 | mov eax,9 ; sys_mmap | |
67 | syscall | |
68 | cmp eax,-1 | |
69 | je mmap_with_hint | |
70 | mov r9d,eax | |
71 | cmp rax,r9 | |
72 | jne mmap_unusable | |
73 | add r9d,esi | |
74 | jnc mmap_ok | |
75 | mmap_unusable: | |
76 | mov rdi,rax | |
77 | mov eax,11 ; sys_munmap | |
78 | syscall | |
79 | mmap_with_hint: | |
80 | mov r10d,22h ; MAP_PRIVATE + MAP_ANONYMOUS | |
81 | mov edx,3 ; PROT_READ + PROT_WRITE | |
82 | mov edi,480000h | |
83 | mov eax,9 ; sys_mmap | |
84 | syscall | |
85 | cmp eax,-1 | |
86 | je no_low_memory | |
87 | mov r9d,eax | |
88 | cmp rax,r9 | |
89 | jne no_low_memory | |
90 | add r9d,esi | |
91 | jnc mmap_ok | |
92 | no_low_memory: | |
93 | mov esi,lf | |
94 | call display_string | |
62 | 95 | push _no_low_memory |
63 | 96 | jmp fatal_error |
97 | mmap_ok: | |
98 | mov [additional_memory],eax | |
99 | lea edi,[eax+esi] | |
100 | mov [memory_end],edi | |
101 | shr esi,2 | |
102 | add eax,esi | |
103 | mov [additional_memory_end],eax | |
104 | mov [memory_start],eax | |
105 | ret | |
64 | 106 | |
65 | 107 | exit_program: |
66 | 108 | movzx edi,al |