diff options
Diffstat (limited to 'erts/emulator/beam/erl_alloc.c')
-rw-r--r-- | erts/emulator/beam/erl_alloc.c | 56 |
1 files changed, 48 insertions, 8 deletions
diff --git a/erts/emulator/beam/erl_alloc.c b/erts/emulator/beam/erl_alloc.c index 40608aae86..cda8855150 100644 --- a/erts/emulator/beam/erl_alloc.c +++ b/erts/emulator/beam/erl_alloc.c @@ -66,7 +66,7 @@ #define ERTS_ALC_DEFAULT_MAX_THR_PREF ERTS_MAX_NO_OF_SCHEDULERS -#if defined(SMALL_MEMORY) || defined(PURIFY) || defined(VALGRIND) +#if defined(SMALL_MEMORY) || defined(PURIFY) || defined(VALGRIND) || defined(ADDRESS_SANITIZER) #define AU_ALLOC_DEFAULT_ENABLE(X) 0 #else #define AU_ALLOC_DEFAULT_ENABLE(X) (X) @@ -228,6 +228,7 @@ set_default_sl_alloc_opts(struct au_init *ip) ip->astrat = ERTS_ALC_S_GOODFIT; ip->init.util.name_prefix = "sl_"; ip->init.util.alloc_no = ERTS_ALC_A_SHORT_LIVED; + ip->init.util.cp = ERTS_ALC_COMMON_CPOOL_IX; #ifndef SMALL_MEMORY ip->init.util.mmbcs = 128*1024; /* Main carrier size */ #else @@ -247,6 +248,7 @@ set_default_std_alloc_opts(struct au_init *ip) ip->astrat = ERTS_ALC_S_BESTFIT; ip->init.util.name_prefix = "std_"; ip->init.util.alloc_no = ERTS_ALC_A_STANDARD; + ip->init.util.cp = ERTS_ALC_COMMON_CPOOL_IX; #ifndef SMALL_MEMORY ip->init.util.mmbcs = 128*1024; /* Main carrier size */ #else @@ -269,6 +271,7 @@ set_default_ll_alloc_opts(struct au_init *ip) ip->init.util.sbct = ~((UWord) 0); ip->init.util.name_prefix = "ll_"; ip->init.util.alloc_no = ERTS_ALC_A_LONG_LIVED; + ip->init.util.cp = ERTS_ALC_COMMON_CPOOL_IX; #ifndef SMALL_MEMORY ip->init.util.mmbcs = 2*1024*1024; /* Main carrier size */ #else @@ -286,7 +289,11 @@ static void set_default_literal_alloc_opts(struct au_init *ip) { SET_DEFAULT_ALLOC_OPTS(ip); +#ifdef ADDRESS_SANITIZER + ip->enable = 0; +#else ip->enable = 1; +#endif ip->thr_spec = 0; ip->disable_allowed = 0; ip->thr_spec_allowed = 0; @@ -392,6 +399,7 @@ set_default_eheap_alloc_opts(struct au_init *ip) ip->astrat = ERTS_ALC_S_GOODFIT; ip->init.util.name_prefix = "eheap_"; ip->init.util.alloc_no = ERTS_ALC_A_EHEAP; + ip->init.util.cp = ERTS_ALC_COMMON_CPOOL_IX; #ifndef SMALL_MEMORY ip->init.util.mmbcs = 512*1024; /* Main carrier size */ #else @@ -411,6 +419,7 @@ set_default_binary_alloc_opts(struct au_init *ip) ip->astrat = ERTS_ALC_S_BESTFIT; ip->init.util.name_prefix = "binary_"; ip->init.util.alloc_no = ERTS_ALC_A_BINARY; + ip->init.util.cp = ERTS_ALC_COMMON_CPOOL_IX; #ifndef SMALL_MEMORY ip->init.util.mmbcs = 128*1024; /* Main carrier size */ #else @@ -430,6 +439,7 @@ set_default_ets_alloc_opts(struct au_init *ip) ip->astrat = ERTS_ALC_S_BESTFIT; ip->init.util.name_prefix = "ets_"; ip->init.util.alloc_no = ERTS_ALC_A_ETS; + ip->init.util.cp = ERTS_ALC_COMMON_CPOOL_IX; #ifndef SMALL_MEMORY ip->init.util.mmbcs = 128*1024; /* Main carrier size */ #else @@ -448,6 +458,7 @@ set_default_driver_alloc_opts(struct au_init *ip) ip->astrat = ERTS_ALC_S_BESTFIT; ip->init.util.name_prefix = "driver_"; ip->init.util.alloc_no = ERTS_ALC_A_DRIVER; + ip->init.util.cp = ERTS_ALC_COMMON_CPOOL_IX; #ifndef SMALL_MEMORY ip->init.util.mmbcs = 128*1024; /* Main carrier size */ #else @@ -470,6 +481,7 @@ set_default_fix_alloc_opts(struct au_init *ip, ip->init.util.name_prefix = "fix_"; ip->init.util.fix_type_size = fix_type_sizes; ip->init.util.alloc_no = ERTS_ALC_A_FIXED_SIZE; + ip->init.util.cp = ERTS_ALC_COMMON_CPOOL_IX; #ifndef SMALL_MEMORY ip->init.util.mmbcs = 128*1024; /* Main carrier size */ #else @@ -490,6 +502,7 @@ set_default_test_alloc_opts(struct au_init *ip) ip->init.aoff.blk_order = FF_BF; ip->init.util.name_prefix = "test_"; ip->init.util.alloc_no = ERTS_ALC_A_TEST; + ip->init.util.cp = ERTS_ALC_A_TEST; ip->init.util.mmbcs = 0; /* Main carrier size */ ip->init.util.ts = ERTS_ALC_MTA_TEST; ip->init.util.acul = ERTS_ALC_DEFAULT_ACUL; @@ -638,7 +651,7 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop) fix_type_sizes[ERTS_ALC_FIX_TYPE_IX(ERTS_ALC_T_MONITOR)] = sizeof(ErtsMonitorDataHeap); fix_type_sizes[ERTS_ALC_FIX_TYPE_IX(ERTS_ALC_T_LINK)] - = sizeof(ErtsLinkData); + = sizeof(ErtsILink); fix_type_sizes[ERTS_ALC_FIX_TYPE_IX(ERTS_ALC_T_DRV_SEL_D_STATE)] = sizeof(ErtsDrvSelectDataState); fix_type_sizes[ERTS_ALC_FIX_TYPE_IX(ERTS_ALC_T_NIF_SEL_D_STATE)] @@ -653,8 +666,6 @@ erts_alloc_init(int *argc, char **argv, ErtsAllocInitOpts *eaiop) = erts_timer_type_size(ERTS_ALC_T_HL_PTIMER); fix_type_sizes[ERTS_ALC_FIX_TYPE_IX(ERTS_ALC_T_BIF_TIMER)] = erts_timer_type_size(ERTS_ALC_T_BIF_TIMER); - fix_type_sizes[ERTS_ALC_FIX_TYPE_IX(ERTS_ALC_T_NIF_EXP_TRACE)] - = sizeof(NifExportTrace); fix_type_sizes[ERTS_ALC_FIX_TYPE_IX(ERTS_ALC_T_MREF_NSCHED_ENT)] = sizeof(ErtsNSchedMagicRefTableEntry); fix_type_sizes[ERTS_ALC_FIX_TYPE_IX(ERTS_ALC_T_MINDIRECTION)] @@ -1424,6 +1435,39 @@ handle_au_arg(struct au_init *auip, else goto bad_switch; break; + case 'c': { + if (has_prefix("cp", sub_param)) { + char *param, *param_end, *value; + int cp; + if (!auip->carrier_migration_allowed && !u_switch) + goto bad_switch; + param = argv[*ip]+1; + param_end = sub_param + 2; + value = get_value(param_end, argv, ip); + if (value[0] == '\0' || value[1] != '\0') + bad_value(param, param_end, value); + switch (value[0]) { + case 'B': cp = ERTS_ALC_A_BINARY; break; + case 'D': cp = ERTS_ALC_A_STANDARD; break; + case 'E': cp = ERTS_ALC_A_ETS; break; + case 'F': cp = ERTS_ALC_A_FIXED_SIZE; break; + case 'H': cp = ERTS_ALC_A_EHEAP; break; + case 'L': cp = ERTS_ALC_A_LONG_LIVED; break; + case 'R': cp = ERTS_ALC_A_DRIVER; break; + case 'S': cp = ERTS_ALC_A_SHORT_LIVED; break; + case '@': cp = ERTS_ALC_COMMON_CPOOL_IX; break; + case ':': cp = auip->init.util.alloc_no; break; + default: cp = -1; + bad_value(param, param_end, value); + break; + } + if (auip->carrier_migration_allowed) + auip->init.util.cp = cp; + } + else + goto bad_switch; + break; + } case 'e': { int e = get_bool_value(sub_param + 1, argv, ip); if (!auip->disable_allowed && !e) { @@ -2392,10 +2436,6 @@ erts_memory(fmtfn_t *print_to_p, void *print_to_arg, void *proc, Eterm earg) &size.processes_used, fi, ERTS_ALC_T_BIF_TIMER); - add_fix_values(&size.processes, - &size.processes_used, - fi, - ERTS_ALC_T_NIF_EXP_TRACE); } if (want.atom || want.atom_used) { |