summaryrefslogtreecommitdiff
path: root/erts/emulator/beam/erl_alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'erts/emulator/beam/erl_alloc.c')
-rw-r--r--erts/emulator/beam/erl_alloc.c56
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) {