Implement more of System.Net.Http
[mono.git] / mono / utils / mono-codeman.c
index af73766a743cb21012b424dfc794c17638b4b82b..4efcea0ae25500addaca763aaa9bb3721d495734 100644 (file)
@@ -13,6 +13,7 @@
 
 #include "mono-codeman.h"
 #include "mono-mmap.h"
+#include "mono-counters.h"
 #include "dlmalloc.h"
 #include <mono/metadata/class-internals.h>
 #include <mono/metadata/profiler-private.h>
 
 #if defined(__native_client_codegen__) && defined(__native_client__)
 #include <malloc.h>
-#include <sys/nacl_syscalls.h>
+#include <nacl/nacl_dyncode.h>
 #endif
 
+static uintptr_t code_memory_used = 0;
+
 /*
  * AMD64 processors maintain icache coherency only for pages which are 
  * marked executable. Also, windows DEP requires us to obtain executable memory from
@@ -284,6 +287,7 @@ free_chunklist (CodeChunk *chunk)
                } else if (dead->flags == CODE_FLAG_MALLOC) {
                        dlfree (dead->data);
                }
+               code_memory_used -= dead->size;
                free (dead);
        }
 }
@@ -451,6 +455,8 @@ new_codechunk (int dynamic, int size)
        chunk->bsize = bsize;
        mono_profiler_code_chunk_new((gpointer) chunk->data, chunk->size);
 
+       code_memory_used += chunk_size;
+       mono_runtime_resource_check_limit (MONO_RESOURCE_JIT_CODE, code_memory_used);
        /*printf ("code chunk at: %p\n", ptr);*/
        return chunk;
 }
@@ -496,7 +502,7 @@ mono_code_manager_reserve_align (MonoCodeManager *cman, int size, int alignment)
                        chunk->pos = ALIGN_INT (chunk->pos, alignment);
                        /* Align the chunk->data we add to chunk->pos */
                        /* or we can't guarantee proper alignment     */
-                       ptr = (void*)((((uintptr_t)chunk->data + align_mask) & ~align_mask) + chunk->pos);
+                       ptr = (void*)((((uintptr_t)chunk->data + align_mask) & ~(uintptr_t)align_mask) + chunk->pos);
                        chunk->pos = ((char*)ptr - chunk->data) + size;
                        return ptr;
                }
@@ -526,7 +532,7 @@ mono_code_manager_reserve_align (MonoCodeManager *cman, int size, int alignment)
        chunk->pos = ALIGN_INT (chunk->pos, alignment);
        /* Align the chunk->data we add to chunk->pos */
        /* or we can't guarantee proper alignment     */
-       ptr = (void*)((((uintptr_t)chunk->data + align_mask) & ~align_mask) + chunk->pos);
+       ptr = (void*)((((uintptr_t)chunk->data + align_mask) & ~(uintptr_t)align_mask) + chunk->pos);
        chunk->pos = ((char*)ptr - chunk->data) + size;
        return ptr;
 #else