Use default system allocator on 32bit systems, if JERRY_SYSTEM_ALLOCATOR is defined. (#1541)
JerryScript-DCO-1.0-Signed-off-by: László Langó llango.u-szeged@partner.samsung.com
This commit is contained in:
+24
-13
@@ -17,19 +17,24 @@ set(JERRY_CORE_NAME jerry-core)
|
|||||||
project (${JERRY_CORE_NAME} C)
|
project (${JERRY_CORE_NAME} C)
|
||||||
|
|
||||||
# Optional features
|
# Optional features
|
||||||
set(FEATURE_CPOINTER_32_BIT OFF CACHE BOOL "Enable 32 bit compressed pointers?")
|
set(FEATURE_CPOINTER_32_BIT OFF CACHE BOOL "Enable 32 bit compressed pointers?")
|
||||||
set(FEATURE_ERROR_MESSAGES OFF CACHE BOOL "Enable error messages?")
|
set(FEATURE_ERROR_MESSAGES OFF CACHE BOOL "Enable error messages?")
|
||||||
set(FEATURE_JS_PARSER ON CACHE BOOL "Enable js-parser?")
|
set(FEATURE_JS_PARSER ON CACHE BOOL "Enable js-parser?")
|
||||||
set(FEATURE_MEM_STATS OFF CACHE BOOL "Enable memory statistics?")
|
set(FEATURE_MEM_STATS OFF CACHE BOOL "Enable memory statistics?")
|
||||||
set(FEATURE_MEM_STRESS_TEST OFF CACHE BOOL "Enable mem-stress test?")
|
set(FEATURE_MEM_STRESS_TEST OFF CACHE BOOL "Enable mem-stress test?")
|
||||||
set(FEATURE_PARSER_DUMP OFF CACHE BOOL "Enable parser byte-code dumps?")
|
set(FEATURE_PARSER_DUMP OFF CACHE BOOL "Enable parser byte-code dumps?")
|
||||||
set(FEATURE_PROFILE "es5.1" CACHE STRING "Use default or other profile?")
|
set(FEATURE_PROFILE "es5.1" CACHE STRING "Use default or other profile?")
|
||||||
set(FEATURE_REGEXP_DUMP OFF CACHE BOOL "Enable regexp byte-code dumps?")
|
set(FEATURE_REGEXP_DUMP OFF CACHE BOOL "Enable regexp byte-code dumps?")
|
||||||
set(FEATURE_SNAPSHOT_EXEC OFF CACHE BOOL "Enable executing snapshot files?")
|
set(FEATURE_SNAPSHOT_EXEC OFF CACHE BOOL "Enable executing snapshot files?")
|
||||||
set(FEATURE_SNAPSHOT_SAVE OFF CACHE BOOL "Enable saving snapshot files?")
|
set(FEATURE_SNAPSHOT_SAVE OFF CACHE BOOL "Enable saving snapshot files?")
|
||||||
set(FEATURE_VALGRIND OFF CACHE BOOL "Enable Valgrind support?")
|
set(FEATURE_SYSTEM_ALLOCATOR OFF CACHE BOOL "Enable system allocator?")
|
||||||
set(FEATURE_VALGRIND_FREYA OFF CACHE BOOL "Enable Valgrind-Freya support?")
|
set(FEATURE_VALGRIND OFF CACHE BOOL "Enable Valgrind support?")
|
||||||
set(MEM_HEAP_SIZE_KB "512" CACHE STRING "Size of memory heap, in kilobytes")
|
set(FEATURE_VALGRIND_FREYA OFF CACHE BOOL "Enable Valgrind-Freya support?")
|
||||||
|
set(MEM_HEAP_SIZE_KB "512" CACHE STRING "Size of memory heap, in kilobytes")
|
||||||
|
|
||||||
|
if(FEATURE_SYSTEM_ALLOCATOR)
|
||||||
|
set(FEATURE_CPOINTER_32_BIT ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Status messages
|
# Status messages
|
||||||
message(STATUS "FEATURE_CPOINTER_32_BIT " ${FEATURE_CPOINTER_32_BIT})
|
message(STATUS "FEATURE_CPOINTER_32_BIT " ${FEATURE_CPOINTER_32_BIT})
|
||||||
@@ -42,6 +47,7 @@ message(STATUS "FEATURE_PROFILE " ${FEATURE_PROFILE})
|
|||||||
message(STATUS "FEATURE_REGEXP_DUMP " ${FEATURE_REGEXP_DUMP})
|
message(STATUS "FEATURE_REGEXP_DUMP " ${FEATURE_REGEXP_DUMP})
|
||||||
message(STATUS "FEATURE_SNAPSHOT_EXEC " ${FEATURE_SNAPSHOT_EXEC})
|
message(STATUS "FEATURE_SNAPSHOT_EXEC " ${FEATURE_SNAPSHOT_EXEC})
|
||||||
message(STATUS "FEATURE_SNAPSHOT_SAVE " ${FEATURE_SNAPSHOT_SAVE})
|
message(STATUS "FEATURE_SNAPSHOT_SAVE " ${FEATURE_SNAPSHOT_SAVE})
|
||||||
|
message(STATUS "FEATURE_SYSTEM_ALLOCATOR " ${FEATURE_SYSTEM_ALLOCATOR})
|
||||||
message(STATUS "FEATURE_VALGRIND " ${FEATURE_VALGRIND})
|
message(STATUS "FEATURE_VALGRIND " ${FEATURE_VALGRIND})
|
||||||
message(STATUS "FEATURE_VALGRIND_FREYA " ${FEATURE_VALGRIND_FREYA})
|
message(STATUS "FEATURE_VALGRIND_FREYA " ${FEATURE_VALGRIND_FREYA})
|
||||||
message(STATUS "MEM_HEAP_SIZE_KB " ${MEM_HEAP_SIZE_KB})
|
message(STATUS "MEM_HEAP_SIZE_KB " ${MEM_HEAP_SIZE_KB})
|
||||||
@@ -194,6 +200,11 @@ if(FEATURE_SNAPSHOT_SAVE)
|
|||||||
set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_ENABLE_SNAPSHOT_SAVE)
|
set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_ENABLE_SNAPSHOT_SAVE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Enable system allocator
|
||||||
|
if(FEATURE_SYSTEM_ALLOCATOR)
|
||||||
|
set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_SYSTEM_ALLOCATOR)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Valgrind
|
# Valgrind
|
||||||
if(FEATURE_VALGRIND)
|
if(FEATURE_VALGRIND)
|
||||||
set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_VALGRIND)
|
set(DEFINES_JERRY ${DEFINES_JERRY} JERRY_VALGRIND)
|
||||||
|
|||||||
@@ -33,10 +33,12 @@ jerry_context_t jerry_global_context;
|
|||||||
#define JERRY_GLOBAL_HEAP_SECTION __attribute__ ((section (JERRY_HEAP_SECTION_ATTR)))
|
#define JERRY_GLOBAL_HEAP_SECTION __attribute__ ((section (JERRY_HEAP_SECTION_ATTR)))
|
||||||
#endif /* !JERRY_HEAP_SECTION_ATTR */
|
#endif /* !JERRY_HEAP_SECTION_ATTR */
|
||||||
|
|
||||||
|
#ifndef JERRY_SYSTEM_ALLOCATOR
|
||||||
/**
|
/**
|
||||||
* Global heap.
|
* Global heap.
|
||||||
*/
|
*/
|
||||||
jmem_heap_t jerry_global_heap __attribute__ ((aligned (JMEM_ALIGNMENT))) JERRY_GLOBAL_HEAP_SECTION;
|
jmem_heap_t jerry_global_heap __attribute__ ((aligned (JMEM_ALIGNMENT))) JERRY_GLOBAL_HEAP_SECTION;
|
||||||
|
#endif /* !JERRY_SYSTEM_ALLOCATOR */
|
||||||
|
|
||||||
#ifndef CONFIG_ECMA_LCACHE_DISABLE
|
#ifndef CONFIG_ECMA_LCACHE_DISABLE
|
||||||
|
|
||||||
|
|||||||
@@ -135,10 +135,12 @@ typedef struct
|
|||||||
*/
|
*/
|
||||||
extern jerry_context_t jerry_global_context;
|
extern jerry_context_t jerry_global_context;
|
||||||
|
|
||||||
|
#ifndef JERRY_SYSTEM_ALLOCATOR
|
||||||
/**
|
/**
|
||||||
* Global heap.
|
* Global heap.
|
||||||
*/
|
*/
|
||||||
extern jmem_heap_t jerry_global_heap;
|
extern jmem_heap_t jerry_global_heap;
|
||||||
|
#endif /* !JERRY_SYSTEM_ALLOCATOR */
|
||||||
|
|
||||||
#ifndef CONFIG_ECMA_LCACHE_DISABLE
|
#ifndef CONFIG_ECMA_LCACHE_DISABLE
|
||||||
|
|
||||||
@@ -154,10 +156,12 @@ extern jerry_hash_table_t jerry_global_hash_table;
|
|||||||
*/
|
*/
|
||||||
#define JERRY_CONTEXT(field) (jerry_global_context.field)
|
#define JERRY_CONTEXT(field) (jerry_global_context.field)
|
||||||
|
|
||||||
|
#ifndef JERRY_SYSTEM_ALLOCATOR
|
||||||
/**
|
/**
|
||||||
* Provides a reference to the area field of the heap.
|
* Provides a reference to the area field of the heap.
|
||||||
*/
|
*/
|
||||||
#define JERRY_HEAP_CONTEXT(field) (jerry_global_heap.field)
|
#define JERRY_HEAP_CONTEXT(field) (jerry_global_heap.field)
|
||||||
|
#endif /* !JERRY_SYSTEM_ALLOCATOR */
|
||||||
|
|
||||||
#ifndef CONFIG_ECMA_LCACHE_DISABLE
|
#ifndef CONFIG_ECMA_LCACHE_DISABLE
|
||||||
|
|
||||||
|
|||||||
@@ -108,6 +108,12 @@ JERRY_STATIC_ASSERT (sizeof (jmem_heap_t) <= JMEM_HEAP_SIZE,
|
|||||||
size_of_mem_heap_must_be_less_than_or_equal_to_MEM_HEAP_SIZE);
|
size_of_mem_heap_must_be_less_than_or_equal_to_MEM_HEAP_SIZE);
|
||||||
|
|
||||||
#ifdef JMEM_STATS
|
#ifdef JMEM_STATS
|
||||||
|
|
||||||
|
#ifdef JERRY_SYSTEM_ALLOCATOR
|
||||||
|
/* TODO: Implement mem-stat support for system allocator */
|
||||||
|
#error Memory statistics (JMEM_STATS) are not supported
|
||||||
|
#endif
|
||||||
|
|
||||||
static void jmem_heap_stat_init (void);
|
static void jmem_heap_stat_init (void);
|
||||||
static void jmem_heap_stat_alloc (size_t num);
|
static void jmem_heap_stat_alloc (size_t num);
|
||||||
static void jmem_heap_stat_free (size_t num);
|
static void jmem_heap_stat_free (size_t num);
|
||||||
@@ -144,6 +150,7 @@ jmem_heap_init (void)
|
|||||||
maximum_heap_size_for_16_bit_compressed_pointers_is_512K);
|
maximum_heap_size_for_16_bit_compressed_pointers_is_512K);
|
||||||
#endif /* !JERRY_CPOINTER_32_BIT */
|
#endif /* !JERRY_CPOINTER_32_BIT */
|
||||||
|
|
||||||
|
#ifndef JERRY_SYSTEM_ALLOCATOR
|
||||||
JERRY_ASSERT ((uintptr_t) JERRY_HEAP_CONTEXT (area) % JMEM_ALIGNMENT == 0);
|
JERRY_ASSERT ((uintptr_t) JERRY_HEAP_CONTEXT (area) % JMEM_ALIGNMENT == 0);
|
||||||
|
|
||||||
JERRY_CONTEXT (jmem_heap_limit) = CONFIG_MEM_HEAP_DESIRED_LIMIT;
|
JERRY_CONTEXT (jmem_heap_limit) = CONFIG_MEM_HEAP_DESIRED_LIMIT;
|
||||||
@@ -160,16 +167,20 @@ jmem_heap_init (void)
|
|||||||
|
|
||||||
VALGRIND_NOACCESS_SPACE (JERRY_HEAP_CONTEXT (area), JMEM_HEAP_AREA_SIZE);
|
VALGRIND_NOACCESS_SPACE (JERRY_HEAP_CONTEXT (area), JMEM_HEAP_AREA_SIZE);
|
||||||
|
|
||||||
|
#endif /* !JERRY_SYSTEM_ALLOCATOR */
|
||||||
JMEM_HEAP_STAT_INIT ();
|
JMEM_HEAP_STAT_INIT ();
|
||||||
} /* jmem_heap_init */
|
} /* jmem_heap_init */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finalize heap
|
* Finalize heap
|
||||||
*/
|
*/
|
||||||
void jmem_heap_finalize (void)
|
void
|
||||||
|
jmem_heap_finalize (void)
|
||||||
{
|
{
|
||||||
JERRY_ASSERT (JERRY_CONTEXT (jmem_heap_allocated_size) == 0);
|
JERRY_ASSERT (JERRY_CONTEXT (jmem_heap_allocated_size) == 0);
|
||||||
|
#ifndef JERRY_SYSTEM_ALLOCATOR
|
||||||
VALGRIND_NOACCESS_SPACE (&JERRY_HEAP_CONTEXT (first), sizeof (jmem_heap_t));
|
VALGRIND_NOACCESS_SPACE (&JERRY_HEAP_CONTEXT (first), sizeof (jmem_heap_t));
|
||||||
|
#endif /* !JERRY_SYSTEM_ALLOCATOR */
|
||||||
} /* jmem_heap_finalize */
|
} /* jmem_heap_finalize */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -181,9 +192,10 @@ void jmem_heap_finalize (void)
|
|||||||
* @return pointer to allocated memory block - if allocation is successful,
|
* @return pointer to allocated memory block - if allocation is successful,
|
||||||
* NULL - if there is not enough memory.
|
* NULL - if there is not enough memory.
|
||||||
*/
|
*/
|
||||||
static __attr_hot___
|
static __attr_hot___ void *
|
||||||
void *jmem_heap_alloc_block_internal (const size_t size)
|
jmem_heap_alloc_block_internal (const size_t size)
|
||||||
{
|
{
|
||||||
|
#ifndef JERRY_SYSTEM_ALLOCATOR
|
||||||
/* Align size. */
|
/* Align size. */
|
||||||
const size_t required_size = ((size + JMEM_ALIGNMENT - 1) / JMEM_ALIGNMENT) * JMEM_ALIGNMENT;
|
const size_t required_size = ((size + JMEM_ALIGNMENT - 1) / JMEM_ALIGNMENT) * JMEM_ALIGNMENT;
|
||||||
jmem_heap_free_t *data_space_p = NULL;
|
jmem_heap_free_t *data_space_p = NULL;
|
||||||
@@ -306,7 +318,10 @@ void *jmem_heap_alloc_block_internal (const size_t size)
|
|||||||
JMEM_HEAP_STAT_ALLOC (size);
|
JMEM_HEAP_STAT_ALLOC (size);
|
||||||
|
|
||||||
return (void *) data_space_p;
|
return (void *) data_space_p;
|
||||||
} /* jmem_heap_finalize */
|
#else /* JERRY_SYSTEM_ALLOCATOR */
|
||||||
|
return malloc (size);
|
||||||
|
#endif /* !JERRY_SYSTEM_ALLOCATOR */
|
||||||
|
} /* jmem_heap_alloc_block_internal */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allocation of memory block, running 'try to give memory back' callbacks, if there is not enough memory.
|
* Allocation of memory block, running 'try to give memory back' callbacks, if there is not enough memory.
|
||||||
@@ -412,6 +427,7 @@ void __attr_hot___
|
|||||||
jmem_heap_free_block (void *ptr, /**< pointer to beginning of data space of the block */
|
jmem_heap_free_block (void *ptr, /**< pointer to beginning of data space of the block */
|
||||||
const size_t size) /**< size of allocated region */
|
const size_t size) /**< size of allocated region */
|
||||||
{
|
{
|
||||||
|
#ifndef JERRY_SYSTEM_ALLOCATOR
|
||||||
VALGRIND_FREYA_CHECK_MEMPOOL_REQUEST;
|
VALGRIND_FREYA_CHECK_MEMPOOL_REQUEST;
|
||||||
|
|
||||||
/* checking that ptr points to the heap */
|
/* checking that ptr points to the heap */
|
||||||
@@ -515,6 +531,10 @@ jmem_heap_free_block (void *ptr, /**< pointer to beginning of data space of the
|
|||||||
VALGRIND_NOACCESS_SPACE (&JERRY_HEAP_CONTEXT (first), sizeof (jmem_heap_free_t));
|
VALGRIND_NOACCESS_SPACE (&JERRY_HEAP_CONTEXT (first), sizeof (jmem_heap_free_t));
|
||||||
JERRY_ASSERT (JERRY_CONTEXT (jmem_heap_limit) >= JERRY_CONTEXT (jmem_heap_allocated_size));
|
JERRY_ASSERT (JERRY_CONTEXT (jmem_heap_limit) >= JERRY_CONTEXT (jmem_heap_allocated_size));
|
||||||
JMEM_HEAP_STAT_FREE (size);
|
JMEM_HEAP_STAT_FREE (size);
|
||||||
|
#else /* JERRY_SYSTEM_ALLOCATOR */
|
||||||
|
JERRY_UNUSED (size);
|
||||||
|
free (ptr);
|
||||||
|
#endif /* !JERRY_SYSTEM_ALLOCATOR */
|
||||||
} /* jmem_heap_free_block */
|
} /* jmem_heap_free_block */
|
||||||
|
|
||||||
#ifndef JERRY_NDEBUG
|
#ifndef JERRY_NDEBUG
|
||||||
@@ -530,8 +550,13 @@ jmem_heap_free_block (void *ptr, /**< pointer to beginning of data space of the
|
|||||||
bool
|
bool
|
||||||
jmem_is_heap_pointer (const void *pointer) /**< pointer */
|
jmem_is_heap_pointer (const void *pointer) /**< pointer */
|
||||||
{
|
{
|
||||||
|
#ifndef JERRY_SYSTEM_ALLOCATOR
|
||||||
return ((uint8_t *) pointer >= JERRY_HEAP_CONTEXT (area)
|
return ((uint8_t *) pointer >= JERRY_HEAP_CONTEXT (area)
|
||||||
&& (uint8_t *) pointer <= (JERRY_HEAP_CONTEXT (area) + JMEM_HEAP_AREA_SIZE));
|
&& (uint8_t *) pointer <= (JERRY_HEAP_CONTEXT (area) + JMEM_HEAP_AREA_SIZE));
|
||||||
|
#else /* JERRY_SYSTEM_ALLOCATOR */
|
||||||
|
JERRY_UNUSED (pointer);
|
||||||
|
return true;
|
||||||
|
#endif /* !JERRY_SYSTEM_ALLOCATOR */
|
||||||
} /* jmem_is_heap_pointer */
|
} /* jmem_is_heap_pointer */
|
||||||
#endif /* !JERRY_NDEBUG */
|
#endif /* !JERRY_NDEBUG */
|
||||||
|
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ def get_arguments():
|
|||||||
parser.add_argument('--profile', metavar='FILE', action='store', default=DEFAULT_PROFILE, help='specify profile file (default: %(default)s)')
|
parser.add_argument('--profile', metavar='FILE', action='store', default=DEFAULT_PROFILE, help='specify profile file (default: %(default)s)')
|
||||||
parser.add_argument('--snapshot-exec', metavar='X', choices=['ON', 'OFF'], default='OFF', type=str.upper, help='enable executing snapshot files (%(choices)s; default: %(default)s)')
|
parser.add_argument('--snapshot-exec', metavar='X', choices=['ON', 'OFF'], default='OFF', type=str.upper, help='enable executing snapshot files (%(choices)s; default: %(default)s)')
|
||||||
parser.add_argument('--snapshot-save', metavar='X', choices=['ON', 'OFF'], default='OFF', type=str.upper, help='enable saving snapshot files (%(choices)s; default: %(default)s)')
|
parser.add_argument('--snapshot-save', metavar='X', choices=['ON', 'OFF'], default='OFF', type=str.upper, help='enable saving snapshot files (%(choices)s; default: %(default)s)')
|
||||||
|
parser.add_argument('--system-allocator', metavar='X', choices=['ON', 'OFF'], default='OFF', type=str.upper, help='enable system allocator (%(choices)s; default: %(default)s)')
|
||||||
parser.add_argument('--static-link', metavar='X', choices=['ON', 'OFF'], default='ON', type=str.upper, help='enable static linking of binaries (%(choices)s; default: %(default)s)')
|
parser.add_argument('--static-link', metavar='X', choices=['ON', 'OFF'], default='ON', type=str.upper, help='enable static linking of binaries (%(choices)s; default: %(default)s)')
|
||||||
parser.add_argument('--strip', metavar='X', choices=['ON', 'OFF'], default='ON', type=str.upper, help='strip release binaries (%(choices)s; default: %(default)s)')
|
parser.add_argument('--strip', metavar='X', choices=['ON', 'OFF'], default='ON', type=str.upper, help='strip release binaries (%(choices)s; default: %(default)s)')
|
||||||
parser.add_argument('--toolchain', metavar='FILE', action='store', default=default_toolchain(), help='add toolchain file (default: %(default)s)')
|
parser.add_argument('--toolchain', metavar='FILE', action='store', default=default_toolchain(), help='add toolchain file (default: %(default)s)')
|
||||||
@@ -118,6 +119,7 @@ def generate_build_options(arguments):
|
|||||||
|
|
||||||
build_options.append('-DFEATURE_SNAPSHOT_EXEC=%s' % arguments.snapshot_exec)
|
build_options.append('-DFEATURE_SNAPSHOT_EXEC=%s' % arguments.snapshot_exec)
|
||||||
build_options.append('-DFEATURE_SNAPSHOT_SAVE=%s' % arguments.snapshot_save)
|
build_options.append('-DFEATURE_SNAPSHOT_SAVE=%s' % arguments.snapshot_save)
|
||||||
|
build_options.append('-DFEATURE_SYSTEM_ALLOCATOR=%s' % arguments.system_allocator)
|
||||||
build_options.append('-DENABLE_STATIC_LINK=%s' % arguments.static_link)
|
build_options.append('-DENABLE_STATIC_LINK=%s' % arguments.static_link)
|
||||||
build_options.append('-DENABLE_STRIP=%s' % arguments.strip)
|
build_options.append('-DENABLE_STRIP=%s' % arguments.strip)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user