LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File 1142-Always-use-sys_memcpy-cmp-etc-instead-of-plain-memcp.patch of Package erlang (Project home:Ledest:erlang:20)

From 4d4629605ab7d3c3a5268502dadcf639151d6c42 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20H=C3=B6gberg?= <john@erlang.org>
Date: Mon, 5 Mar 2018 12:55:13 +0100
Subject: [PATCH 2/2] Always use sys_memcpy/cmp/etc instead of plain
 memcpy/cmp/etc

---
 erts/emulator/beam/atom.c                  |  2 +-
 erts/emulator/beam/beam_debug.c            |  6 +--
 erts/emulator/beam/beam_emu.c              |  4 +-
 erts/emulator/beam/beam_load.c             | 18 ++++----
 erts/emulator/beam/bif.c                   |  6 +--
 erts/emulator/beam/break.c                 |  2 +-
 erts/emulator/beam/erl_afit_alloc.c        |  2 +-
 erts/emulator/beam/erl_alloc.c             | 66 +++++++++++++++---------------
 erts/emulator/beam/erl_alloc.h             |  2 +-
 erts/emulator/beam/erl_alloc_util.c        | 14 +++----
 erts/emulator/beam/erl_ao_firstfit_alloc.c |  2 +-
 erts/emulator/beam/erl_bestfit_alloc.c     |  2 +-
 erts/emulator/beam/erl_bif_binary.c        | 20 ++++-----
 erts/emulator/beam/erl_bif_chksum.c        |  6 +--
 erts/emulator/beam/erl_bif_ddll.c          | 12 +++---
 erts/emulator/beam/erl_bif_info.c          | 38 ++++++++---------
 erts/emulator/beam/erl_bif_port.c          |  8 ++--
 erts/emulator/beam/erl_bif_re.c            | 18 ++++----
 erts/emulator/beam/erl_bif_unique.h        |  4 +-
 erts/emulator/beam/erl_db.c                |  2 +-
 erts/emulator/beam/erl_db_util.c           | 14 +++----
 erts/emulator/beam/erl_drv_thread.c        |  8 ++--
 erts/emulator/beam/erl_goodfit_alloc.c     |  2 +-
 erts/emulator/beam/erl_init.c              | 38 ++++++++---------
 erts/emulator/beam/erl_instrument.c        |  2 +-
 erts/emulator/beam/erl_lock_check.c        | 12 +++---
 erts/emulator/beam/erl_msacc.c             |  4 +-
 erts/emulator/beam/erl_mtrace.c            | 22 +++++-----
 erts/emulator/beam/erl_nif.c               |  6 +--
 erts/emulator/beam/erl_trace.c             |  4 +-
 erts/emulator/beam/erl_unicode.c           | 12 +++---
 erts/emulator/beam/erl_utils.h             |  2 +-
 erts/emulator/beam/erl_vm.h                |  2 +-
 erts/emulator/beam/external.c              |  2 +-
 erts/emulator/beam/global.h                |  4 +-
 erts/emulator/beam/io.c                    |  8 ++--
 erts/emulator/beam/lttng-wrapper.h         |  4 +-
 erts/emulator/beam/packet_parser.c         |  8 ++--
 38 files changed, 194 insertions(+), 194 deletions(-)

diff --git a/erts/emulator/beam/atom.c b/erts/emulator/beam/atom.c
index bbe1cb3e11..e5b7616a0d 100644
--- a/erts/emulator/beam/atom.c
+++ b/erts/emulator/beam/atom.c
@@ -452,7 +452,7 @@ init_atom_table(void)
     /* Ordinary atoms */
     for (i = 0; erl_atom_names[i] != 0; i++) {
 	int ix;
-	a.len = strlen(erl_atom_names[i]);
+	a.len = sys_strlen(erl_atom_names[i]);
 	a.latin1_chars = a.len;
 	a.name = (byte*)erl_atom_names[i];
 	a.slot.index = i;
diff --git a/erts/emulator/beam/beam_debug.c b/erts/emulator/beam/beam_debug.c
index 8f02d509a9..5eb68b817e 100644
--- a/erts/emulator/beam/beam_debug.c
+++ b/erts/emulator/beam/beam_debug.c
@@ -228,11 +228,11 @@ erts_debug_instructions_0(BIF_ALIST_0)
     Eterm res = NIL;
 
     for (i = 0; i < num_instructions; i++) {
-	needed += 2*strlen(opc[i].name);
+	needed += 2*sys_strlen(opc[i].name);
     }
     hp = HAlloc(BIF_P, needed);
     for (i = num_instructions-1; i >= 0; i--) {
-	Eterm s = erts_bld_string_n(&hp, 0, opc[i].name, strlen(opc[i].name));
+	Eterm s = erts_bld_string_n(&hp, 0, opc[i].name, sys_strlen(opc[i].name));
 	res = erts_bld_cons(&hp, 0, s, res);
     }
     return res;
@@ -431,7 +431,7 @@ print_op(fmtfn_t to, void *to_arg, int op, int size, BeamInstr* addr)
 	 * the packing program backwards and in reverse.
 	 */
 
-	prog = start_prog + strlen(start_prog);
+	prog = start_prog + sys_strlen(start_prog);
 	while (start_prog < prog) {
 	    prog--;
 	    switch (*prog) {
diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c
index ef9abcde08..fbd0e38735 100644
--- a/erts/emulator/beam/beam_emu.c
+++ b/erts/emulator/beam/beam_emu.c
@@ -749,7 +749,7 @@ void process_main(Eterm * x_reg_array, FloatDef* f_reg_array)
             dtrace_proc_str(c_p, process_buf);
 
             if (ERTS_PROC_IS_EXITING(c_p)) {
-                strcpy(fun_buf, "<exiting>");
+                sys_strcpy(fun_buf, "<exiting>");
             } else {
                 ErtsCodeMFA *cmfa = find_function_from_pc(c_p->i);
                 if (cmfa) {
@@ -1229,7 +1229,7 @@ void erts_dirty_process_main(ErtsSchedulerData *esdp)
             dtrace_proc_str(c_p, process_buf);
 
             if (ERTS_PROC_IS_EXITING(c_p)) {
-                strcpy(fun_buf, "<exiting>");
+                sys_strcpy(fun_buf, "<exiting>");
             } else {
                 ErtsCodeMFA *cmfa = find_function_from_pc(c_p->i);
                 if (cmfa) {
diff --git a/erts/emulator/beam/beam_load.c b/erts/emulator/beam/beam_load.c
index e242fe9140..50498cb6cf 100644
--- a/erts/emulator/beam/beam_load.c
+++ b/erts/emulator/beam/beam_load.c
@@ -459,7 +459,7 @@ typedef struct LoaderState {
 
 #ifdef DEBUG
 # define GARBAGE 0xCC
-# define DEBUG_INIT_GENOP(Dst) memset(Dst, GARBAGE, sizeof(GenOp))
+# define DEBUG_INIT_GENOP(Dst) sys_memset(Dst, GARBAGE, sizeof(GenOp))
 #else
 # define DEBUG_INIT_GENOP(Dst)
 #endif
@@ -1422,7 +1422,7 @@ load_atom_table(LoaderState* stp, ErtsAtomEncoding enc)
 	Atom* ap;
 
 	ap = atom_tab(atom_val(stp->atom[1]));
-	memcpy(sbuf, ap->name, ap->len);
+	sys_memcpy(sbuf, ap->name, ap->len);
 	sbuf[ap->len] = '\0';
 	LoadError1(stp, "BEAM file exists but it defines a module named %s", sbuf);
     }
@@ -2089,7 +2089,7 @@ load_code(LoaderState* stp)
 			    erts_alloc(ERTS_ALC_T_LOADER_TMP,
 				       (arity+last_op->a[arg].val)
 				       *sizeof(GenOpArg));
-			memcpy(last_op->a, last_op->def_args,
+			sys_memcpy(last_op->a, last_op->def_args,
 			       arity*sizeof(GenOpArg));
 			arity += last_op->a[arg].val;
 			break;
@@ -4915,7 +4915,7 @@ freeze_code(LoaderState* stp)
 	line_items[i] = codev + stp->ci - 1;
 
 	line_tab->fname_ptr = (Eterm*) &line_items[i + 1];
-	memcpy(line_tab->fname_ptr, stp->fname, stp->num_fnames*sizeof(Eterm));
+	sys_memcpy(line_tab->fname_ptr, stp->fname, stp->num_fnames*sizeof(Eterm));
 
 	line_tab->loc_size = stp->loc_size;
 	if (stp->loc_size == 2) {
@@ -5498,8 +5498,8 @@ transform_engine(LoaderState* st)
 	case TOP_store_rest_args:
 	    {
 		GENOP_ARITY(instr, instr->arity+num_rest_args);
-		memcpy(instr->a, instr->def_args, ap*sizeof(GenOpArg));
-		memcpy(instr->a+ap, rest_args, num_rest_args*sizeof(GenOpArg));
+		sys_memcpy(instr->a, instr->def_args, ap*sizeof(GenOpArg));
+		sys_memcpy(instr->a+ap, rest_args, num_rest_args*sizeof(GenOpArg));
 		ap += num_rest_args;
 	    }
 	    break;
@@ -6447,7 +6447,7 @@ stub_copy_info(LoaderState* stp,
     Sint decoded_size;
     Uint size = stp->chunks[chunk].size;
     if (size != 0) {
-	memcpy(info, stp->chunks[chunk].start, size);
+	sys_memcpy(info, stp->chunks[chunk].start, size);
 	*ptr_word = info;
 	decoded_size = erts_decode_ext_size(info, size);
 	if (decoded_size < 0) {
@@ -7017,8 +7017,8 @@ void dbg_set_traced_mfa(const char* m, const char* f, Uint a)
 {
     unsigned i = dbg_trace_ix++;
     ASSERT(i < MFA_MAX);
-    dbg_trace_m[i] = am_atom_put(m, strlen(m));
-    dbg_trace_f[i] = am_atom_put(f, strlen(f));
+    dbg_trace_m[i] = am_atom_put(m, sys_strlen(m));
+    dbg_trace_f[i] = am_atom_put(f, sys_strlen(f));
     dbg_trace_a[i] = a;
 }
 
diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c
index d68ccc3028..f6f1bb07e0 100644
--- a/erts/emulator/beam/bif.c
+++ b/erts/emulator/beam/bif.c
@@ -3535,7 +3535,7 @@ BIF_RETTYPE binary_to_float_1(BIF_ALIST_1)
     if (bit_offs)
       erts_copy_bits(bytes, bit_offs, 1, buf, 0, 1, size*8);
     else
-      memcpy(buf, bytes, size);
+      sys_memcpy(buf, bytes, size);
     
     buf[size] = '\0';
     
@@ -4273,10 +4273,10 @@ BIF_RETTYPE list_to_port_1(BIF_ALIST_1)
     buf[i] = '\0';		/* null terminal */
 
     cp = &buf[0];
-    if (strncmp("#Port<", cp, 6) != 0)
+    if (sys_strncmp("#Port<", cp, 6) != 0)
         goto bad;
 
-    cp += 6; /* strlen("#Port<") */
+    cp += 6; /* sys_strlen("#Port<") */
 
     if (sscanf(cp, "%u.%u>", &n, &p) < 2)
         goto bad;
diff --git a/erts/emulator/beam/break.c b/erts/emulator/beam/break.c
index b9b70cd8ef..fe0ec1925b 100644
--- a/erts/emulator/beam/break.c
+++ b/erts/emulator/beam/break.c
@@ -509,7 +509,7 @@ do_break(void)
     /* check if we're in console mode and, if so,
        halt immediately if break is called */
     mode = erts_read_env("ERL_CONSOLE_MODE");
-    if (mode && strcmp(mode, "window") != 0)
+    if (mode && sys_strcmp(mode, "window") != 0)
 	erts_exit(0, "");
     erts_free_read_env(mode);
 #endif /* __WIN32__ */
diff --git a/erts/emulator/beam/erl_afit_alloc.c b/erts/emulator/beam/erl_afit_alloc.c
index 4ebe37ee1d..23efe3bba4 100644
--- a/erts/emulator/beam/erl_afit_alloc.c
+++ b/erts/emulator/beam/erl_afit_alloc.c
@@ -181,7 +181,7 @@ static struct {
 
 static void ERTS_INLINE atom_init(Eterm *atom, char *name)
 {
-    *atom = am_atom_put(name, strlen(name));
+    *atom = am_atom_put(name, sys_strlen(name));
 }
 #define AM_INIT(AM) atom_init(&am.AM, #AM)
 
diff --git a/erts/emulator/beam/erl_alloc.c b/erts/emulator/beam/erl_alloc.c
index 239dda6bcf..fa49096d2c 100644
--- a/erts/emulator/beam/erl_alloc.c
+++ b/erts/emulator/beam/erl_alloc.c
@@ -1219,9 +1219,9 @@ get_bool_value(char *param_end, char** argv, int* ip)
 {
     char *param = argv[*ip]+1;
     char *value = get_value(param_end, argv, ip);
-    if (strcmp(value, "true") == 0)
+    if (sys_strcmp(value, "true") == 0)
 	return 1;
-    else if (strcmp(value, "false") == 0)
+    else if (sys_strcmp(value, "false") == 0)
 	return 0;
     else
 	bad_value(param, param_end, value);
@@ -1369,46 +1369,46 @@ handle_au_arg(struct au_init *auip,
 	}
 	else if(has_prefix("as", sub_param)) {
 	    char *alg = get_value(sub_param + 2, argv, ip);
-	    if (strcmp("bf", alg) == 0) {
+	    if (sys_strcmp("bf", alg) == 0) {
 		auip->atype = BESTFIT;
 		auip->init.bf.ao = 0;
 	    }
-	    else if (strcmp("aobf", alg) == 0) {
+	    else if (sys_strcmp("aobf", alg) == 0) {
 		auip->atype = BESTFIT;
 		auip->init.bf.ao = 1;
 	    }
-	    else if (strcmp("gf", alg) == 0) {
+	    else if (sys_strcmp("gf", alg) == 0) {
 		auip->atype = GOODFIT;
 	    }
-	    else if (strcmp("af", alg) == 0) {
+	    else if (sys_strcmp("af", alg) == 0) {
 		auip->atype = AFIT;
 	    }
-	    else if (strcmp("aoff", alg) == 0) {
+	    else if (sys_strcmp("aoff", alg) == 0) {
 		auip->atype = FIRSTFIT;
 		auip->init.aoff.crr_order = FF_AOFF;
 		auip->init.aoff.blk_order = FF_AOFF;
 	    }
-	    else if (strcmp("aoffcbf", alg) == 0) {
+	    else if (sys_strcmp("aoffcbf", alg) == 0) {
 		auip->atype = FIRSTFIT;
 		auip->init.aoff.crr_order = FF_AOFF;
 		auip->init.aoff.blk_order = FF_BF;
 	    }
-	    else if (strcmp("aoffcaobf", alg) == 0) {
+	    else if (sys_strcmp("aoffcaobf", alg) == 0) {
 		auip->atype = FIRSTFIT;
 		auip->init.aoff.crr_order = FF_AOFF;
 		auip->init.aoff.blk_order = FF_AOBF;
 	    }
-            else if (strcmp("ageffcaoff", alg) == 0) {
+            else if (sys_strcmp("ageffcaoff", alg) == 0) {
                 auip->atype = FIRSTFIT;
 		auip->init.aoff.crr_order = FF_AGEFF;
 		auip->init.aoff.blk_order = FF_AOFF;
             }
-            else if (strcmp("ageffcbf", alg) == 0) {
+            else if (sys_strcmp("ageffcbf", alg) == 0) {
                 auip->atype = FIRSTFIT;
 		auip->init.aoff.crr_order = FF_AGEFF;
 		auip->init.aoff.blk_order = FF_BF;
             }
-            else if (strcmp("ageffcaobf", alg) == 0) {
+            else if (sys_strcmp("ageffcaobf", alg) == 0) {
                 auip->atype = FIRSTFIT;
 		auip->init.aoff.crr_order = FF_AGEFF;
 		auip->init.aoff.blk_order = FF_AOBF;
@@ -1688,7 +1688,7 @@ handle_args(int *argc, char **argv, erts_alc_hndl_args_init_t *init)
 		    }
 		    else if (has_prefix("e", param+2)) {
 			arg = get_value(param+3, argv, &i);
-			if (strcmp("true", arg) != 0)
+			if (sys_strcmp("true", arg) != 0)
 			    bad_value(param, param+3, arg);
 		    }
 		    else
@@ -1700,20 +1700,20 @@ handle_args(int *argc, char **argv, erts_alc_hndl_args_init_t *init)
 		    case 'a': {
 			int a;
 			arg = get_value(argv[i]+4, argv, &i);
-			if (strcmp("min", arg) == 0) {
+			if (sys_strcmp("min", arg) == 0) {
 			    for (a = 0; a < aui_sz; a++)
 				aui[a]->enable = 0;
 			}
-			else if (strcmp("max", arg) == 0) {
+			else if (sys_strcmp("max", arg) == 0) {
 			    for (a = 0; a < aui_sz; a++)
 				aui[a]->enable = 1;
 			}
-			else if (strcmp("config", arg) == 0) {
+			else if (sys_strcmp("config", arg) == 0) {
 			    init->erts_alloc_config = 1;
 			}
-			else if (strcmp("r9c", arg) == 0
-				 || strcmp("r10b", arg) == 0
-				 || strcmp("r11b", arg) == 0) {
+			else if (sys_strcmp("r9c", arg) == 0
+				 || sys_strcmp("r10b", arg) == 0
+				 || sys_strcmp("r11b", arg) == 0) {
 			    set_default_sl_alloc_opts(&init->sl_alloc);
 			    set_default_std_alloc_opts(&init->std_alloc);
 			    set_default_ll_alloc_opts(&init->ll_alloc);
@@ -1725,7 +1725,7 @@ handle_args(int *argc, char **argv, erts_alc_hndl_args_init_t *init)
 			    set_default_driver_alloc_opts(&init->fix_alloc);
 
 			    init->driver_alloc.enable = 0;
-			    if (strcmp("r9c", arg) == 0) {
+			    if (sys_strcmp("r9c", arg) == 0) {
 				init->sl_alloc.enable = 0;
 				init->std_alloc.enable = 0;
 				init->binary_alloc.enable = 0;
@@ -1752,18 +1752,18 @@ handle_args(int *argc, char **argv, erts_alc_hndl_args_init_t *init)
 		    switch (argv[i][3]) {
 		    case 's':
 			arg = get_value(argv[i]+4, argv, &i);
-			if (strcmp("true", arg) == 0)
+			if (sys_strcmp("true", arg) == 0)
 			    init->instr.stat = 1;
-			else if (strcmp("false", arg) == 0)
+			else if (sys_strcmp("false", arg) == 0)
 			    init->instr.stat = 0;
 			else
 			    bad_value(param, param+3, arg);
 			break;
 		    case 'm':
 			arg = get_value(argv[i]+4, argv, &i);
-			if (strcmp("true", arg) == 0)
+			if (sys_strcmp("true", arg) == 0)
 			    init->instr.map = 1;
-			else if (strcmp("false", arg) == 0)
+			else if (sys_strcmp("false", arg) == 0)
 			    init->instr.map = 0;
 			else
 			    bad_value(param, param+3, arg);
@@ -1778,9 +1778,9 @@ handle_args(int *argc, char **argv, erts_alc_hndl_args_init_t *init)
 		case 'l':
 		    if (has_prefix("pm", param+2)) {
 			arg = get_value(argv[i]+5, argv, &i);
-			if (strcmp("all", arg) == 0)
+			if (sys_strcmp("all", arg) == 0)
 			    lock_all_physical_memory = 1;
-			else if (strcmp("no", arg) == 0)
+			else if (sys_strcmp("no", arg) == 0)
 			    lock_all_physical_memory = 0;
 			else
 			    bad_value(param, param+4, arg);
@@ -1830,8 +1830,8 @@ handle_args(int *argc, char **argv, erts_alc_hndl_args_init_t *init)
 			/* || init->instr.stat
 			   || init->instr.map */) {
 			while (i < *argc) {
-			    if(strcmp(argv[i], "-sname") == 0
-			       || strcmp(argv[i], "-name") == 0) {
+			    if(sys_strcmp(argv[i], "-sname") == 0
+			       || sys_strcmp(argv[i], "-name") == 0) {
 				if (i + 1 <*argc) {
 				    init->instr.nodename = argv[i+1];
 				    break;
@@ -2692,7 +2692,7 @@ erts_allocated_areas(fmtfn_t *print_to_p, void *print_to_arg, void *proc)
 		Eterm atom;
 		if (hpp)
 		    atom = am_atom_put(values[i].name,
-				       (int) strlen(values[i].name));
+				       (int) sys_strlen(values[i].name));
 		else
 		    atom = am_true;
 
@@ -2883,7 +2883,7 @@ erts_allocator_options(void *proc)
     for (a = ERTS_ALC_A_MIN; a <= ERTS_ALC_A_MAX; a++) {
 	Eterm tmp = NIL;
 	atoms[length] = am_atom_put((char *) ERTS_ALC_A2AD(a),
-				    strlen(ERTS_ALC_A2AD(a)));
+				    sys_strlen(ERTS_ALC_A2AD(a)));
 	if (erts_allctrs_info[a].enabled) {
 	    if (erts_allctrs_info[a].alloc_util) {
 		Allctr_t *allctr;
@@ -2977,7 +2977,7 @@ erts_allocator_options(void *proc)
     for (a = ERTS_ALC_A_MIN; a <= ERTS_ALC_A_MAX; a++) {
 	if (erts_allctrs_info[a].enabled) {
 	    terms[length++] = am_atom_put((char *) ERTS_ALC_A2AD(a),
-					  strlen(ERTS_ALC_A2AD(a)));
+					  sys_strlen(ERTS_ALC_A2AD(a)));
 	}
     }
 
@@ -3961,7 +3961,7 @@ set_memory_fence(void *ptr, Uint sz, ErtsAlcType_t n)
 
     *(ui_ptr++) = sz;
     *(ui_ptr++) = pattern;
-    memcpy((void *) (((char *) ui_ptr)+sz), (void *) &pattern, sizeof(UWord));
+    sys_memcpy((void *) (((char *) ui_ptr)+sz), (void *) &pattern, sizeof(UWord));
 
 #ifdef HARD_DEBUG
     *mblkpp = hdbg_alloc((void *) ui_ptr, sz, n);
@@ -4001,7 +4001,7 @@ check_memory_fence(void *ptr, Uint *size, ErtsAlcType_t n, int func)
 		     (UWord) ptr);
     }
 
-    memcpy((void *) &post_pattern, (void *) (((char *)ptr)+sz), sizeof(UWord));
+    sys_memcpy((void *) &post_pattern, (void *) (((char *)ptr)+sz), sizeof(UWord));
 
     if (post_pattern != MK_PATTERN(n)
 	|| pre_pattern != post_pattern) {
diff --git a/erts/emulator/beam/erl_alloc.h b/erts/emulator/beam/erl_alloc.h
index 174bf7a80a..578a3717d9 100644
--- a/erts/emulator/beam/erl_alloc.h
+++ b/erts/emulator/beam/erl_alloc.h
@@ -434,7 +434,7 @@ NAME##_free(TYPE *p)							\
 
 #ifdef DEBUG
 #define ERTS_PRE_ALLOC_SIZE(SZ) ((SZ) < 1000 ? (SZ)/10 + 10 : 100)
-#define ERTS_PRE_ALLOC_CLOBBER(P, T) memset((void *) (P), 0xfd, sizeof(T))
+#define ERTS_PRE_ALLOC_CLOBBER(P, T) sys_memset((void *) (P), 0xfd, sizeof(T))
 #else
 #define ERTS_PRE_ALLOC_SIZE(SZ) ((SZ) > 1 ? (SZ) : 1)
 #define ERTS_PRE_ALLOC_CLOBBER(P, T)
diff --git a/erts/emulator/beam/erl_alloc_util.c b/erts/emulator/beam/erl_alloc_util.c
index fa97ead908..d178c2c2c2 100644
--- a/erts/emulator/beam/erl_alloc_util.c
+++ b/erts/emulator/beam/erl_alloc_util.c
@@ -4315,7 +4315,7 @@ static Eterm fix_type_atoms[ERTS_ALC_NO_FIXED_SIZES];
 
 static ERTS_INLINE void atom_init(Eterm *atom, char *name)
 {
-    *atom = am_atom_put(name, strlen(name));
+    *atom = am_atom_put(name, sys_strlen(name));
 }
 #define AM_INIT(AM) atom_init(&am.AM, #AM)
 
@@ -4416,7 +4416,7 @@ init_atoms(Allctr_t *allctr)
 	for (ix = 0; ix < ERTS_ALC_NO_FIXED_SIZES; ix++) {
 	    ErtsAlcType_t n = ERTS_ALC_N_MIN_A_FIXED_SIZE + ix;
 	    char *name = (char *) ERTS_ALC_N2TD(n);
-	    size_t len = strlen(name);
+	    size_t len = sys_strlen(name);
 	    fix_type_atoms[ix] = am_atom_put(name, len);
 	}
     }
@@ -4854,20 +4854,20 @@ make_name_atoms(Allctr_t *allctr)
     char realloc[] = "realloc";
     char free[] = "free";
     char buf[MAX_ATOM_CHARACTERS];
-    size_t prefix_len = strlen(allctr->name_prefix);
+    size_t prefix_len = sys_strlen(allctr->name_prefix);
 
     if (prefix_len > MAX_ATOM_CHARACTERS + sizeof(realloc) - 1)
 	erts_exit(ERTS_ERROR_EXIT,"Too long allocator name: %salloc\n",allctr->name_prefix);
 
-    memcpy((void *) buf, (void *) allctr->name_prefix, prefix_len);
+    sys_memcpy((void *) buf, (void *) allctr->name_prefix, prefix_len);
 
-    memcpy((void *) &buf[prefix_len], (void *) alloc, sizeof(alloc) - 1);
+    sys_memcpy((void *) &buf[prefix_len], (void *) alloc, sizeof(alloc) - 1);
     allctr->name.alloc = am_atom_put(buf, prefix_len + sizeof(alloc) - 1);
 
-    memcpy((void *) &buf[prefix_len], (void *) realloc, sizeof(realloc) - 1);
+    sys_memcpy((void *) &buf[prefix_len], (void *) realloc, sizeof(realloc) - 1);
     allctr->name.realloc = am_atom_put(buf, prefix_len + sizeof(realloc) - 1);
 
-    memcpy((void *) &buf[prefix_len], (void *) free, sizeof(free) - 1);
+    sys_memcpy((void *) &buf[prefix_len], (void *) free, sizeof(free) - 1);
     allctr->name.free = am_atom_put(buf, prefix_len + sizeof(free) - 1);
 
 }
diff --git a/erts/emulator/beam/erl_ao_firstfit_alloc.c b/erts/emulator/beam/erl_ao_firstfit_alloc.c
index f8a6101b95..0c5545401a 100644
--- a/erts/emulator/beam/erl_ao_firstfit_alloc.c
+++ b/erts/emulator/beam/erl_ao_firstfit_alloc.c
@@ -1054,7 +1054,7 @@ static struct {
 
 static void ERTS_INLINE atom_init(Eterm *atom, const char *name)
 {
-    *atom = am_atom_put(name, strlen(name));
+    *atom = am_atom_put(name, sys_strlen(name));
 }
 #define AM_INIT(AM) atom_init(&am.AM, #AM)
 
diff --git a/erts/emulator/beam/erl_bestfit_alloc.c b/erts/emulator/beam/erl_bestfit_alloc.c
index 6173c408e1..85fc4c3a85 100644
--- a/erts/emulator/beam/erl_bestfit_alloc.c
+++ b/erts/emulator/beam/erl_bestfit_alloc.c
@@ -875,7 +875,7 @@ static struct {
 
 static void ERTS_INLINE atom_init(Eterm *atom, char *name)
 {
-    *atom = am_atom_put(name, strlen(name));
+    *atom = am_atom_put(name, sys_strlen(name));
 }
 #define AM_INIT(AM) atom_init(&am.AM, #AM)
 
diff --git a/erts/emulator/beam/erl_bif_binary.c b/erts/emulator/beam/erl_bif_binary.c
index 33bc189182..469f6a1ea8 100644
--- a/erts/emulator/beam/erl_bif_binary.c
+++ b/erts/emulator/beam/erl_bif_binary.c
@@ -365,7 +365,7 @@ static ACTrie *create_acdata(MyAllocator *my, Uint len,
     acn->d = 0;
     acn->final = 0;
     acn->h = NULL;
-    memset(acn->g, 0, sizeof(ACNode *) * ALPHABET_SIZE);
+    sys_memset(acn->g, 0, sizeof(ACNode *) * ALPHABET_SIZE);
 #ifdef HARDDEBUG
     act->idc = 0;
     acn->id = 0;
@@ -388,7 +388,7 @@ static BMData *create_bmdata(MyAllocator *my, byte *x, Uint len,
     init_my_allocator(my, datasize, data);
     bmd = my_alloc(my, sizeof(BMData));
     bmd->x = my_alloc(my,len);
-    memcpy(bmd->x,x,len);
+    sys_memcpy(bmd->x,x,len);
     bmd->len = len;
     bmd->goodshift = my_alloc(my,sizeof(Uint) * len);
     *the_bin = mb;
@@ -433,7 +433,7 @@ static void ac_add_one_pattern(MyAllocator *my, ACTrie *act, byte *x, Uint len)
 	    nn->d = i+1;
 	    nn->h = act->root;
 	    nn->final = 0;
-	    memset(nn->g, 0, sizeof(ACNode *) * ALPHABET_SIZE);
+	    sys_memset(nn->g, 0, sizeof(ACNode *) * ALPHABET_SIZE);
 	    acn->g[x[i]] = nn;
 	    ++i;
 	    acn = nn;
@@ -2264,7 +2264,7 @@ static BIF_RETTYPE do_longest_common(Process *p, Eterm list, int direction)
 	    if (cd[i].type == CL_TYPE_HEAP_NOALLOC) {
 		unsigned char *tmp = cd[i].buff;
 		cd[i].buff = erts_alloc(ERTS_ALC_T_BINARY_BUFFER, cd[i].bufflen);
-		memcpy(cd[i].buff,tmp,cd[i].bufflen);
+		sys_memcpy(cd[i].buff,tmp,cd[i].bufflen);
 		cd[i].type = CL_TYPE_HEAP;
 	    }
 	}
@@ -2556,7 +2556,7 @@ static BIF_RETTYPE do_binary_copy(Process *p, Eterm bin, Eterm en)
 						    0);
 	    if (!(cbs->temp_alloc)) { /* alignment not needed, need to copy */
 		byte *tmp = erts_alloc(ERTS_ALC_T_BINARY_BUFFER,size);
-		memcpy(tmp,cbs->source,size);
+		sys_memcpy(tmp,cbs->source,size);
 		cbs->source = tmp;
 		cbs->source_type = BC_TYPE_HEAP;
 	    } else {
@@ -2569,7 +2569,7 @@ static BIF_RETTYPE do_binary_copy(Process *p, Eterm bin, Eterm en)
 	pos = 0;
 	i = 0;
 	while (pos < reds) {
-	    memcpy(t+pos,cbs->source, size);
+	    sys_memcpy(t+pos,cbs->source, size);
 	    pos += size;
 	    ++i;
 	}
@@ -2594,7 +2594,7 @@ static BIF_RETTYPE do_binary_copy(Process *p, Eterm bin, Eterm en)
 	}
 	pos = 0;
 	while (pos < target_size) {
-	    memcpy(t+pos,source, size);
+	    sys_memcpy(t+pos,source, size);
 	    pos += size;
 	}
 	erts_free_aligned_binary_bytes(temp_alloc);
@@ -2624,7 +2624,7 @@ BIF_RETTYPE binary_copy_trap(BIF_ALIST_2)
     if ((n-1) * size >= reds) {
 	Uint i = 0;
 	while ((pos - opos) < reds) {
-	    memcpy(t+pos,cbs->source, size);
+	    sys_memcpy(t+pos,cbs->source, size);
 	    pos += size;
 	    ++i;
 	}
@@ -2637,7 +2637,7 @@ BIF_RETTYPE binary_copy_trap(BIF_ALIST_2)
 	ProcBin* pb;
 	Uint target_size = cbs->result->orig_size;
 	while (pos < target_size) {
-	    memcpy(t+pos,cbs->source, size);
+	    sys_memcpy(t+pos,cbs->source, size);
 	    pos += size;
 	}
 	save =  cbs->result;
@@ -3029,7 +3029,7 @@ static void dump_bm_data(BMData *bm)
 static void dump_ac_node(ACNode *node, int indent, int ch) {
     int i;
     char *spaces = erts_alloc(ERTS_ALC_T_TMP, 10 * indent + 1);
-    memset(spaces,' ',10*indent);
+    sys_memset(spaces,' ',10*indent);
     spaces[10*indent] = '\0';
     erts_printf("%s-> %c\n",spaces,ch);
     erts_printf("%sId: %u\n",spaces,(unsigned) node->id);
diff --git a/erts/emulator/beam/erl_bif_chksum.c b/erts/emulator/beam/erl_bif_chksum.c
index 9417803e14..9095bcd380 100644
--- a/erts/emulator/beam/erl_bif_chksum.c
+++ b/erts/emulator/beam/erl_bif_chksum.c
@@ -516,7 +516,7 @@ md5_2(BIF_ALIST_2)
     /* No need to check context, this function cannot be called with unaligned
        or badly sized context as it's always trapped to. */
     bytes = binary_bytes(BIF_ARG_1);
-    memcpy(&context,bytes,sizeof(MD5_CTX));
+    sys_memcpy(&context,bytes,sizeof(MD5_CTX));
     rest = do_chksum(&md5_wrap,BIF_P,BIF_ARG_2,100,(void *) &context,&res,
 		     &err);
     if (err != 0) {
@@ -564,7 +564,7 @@ md5_update_2(BIF_ALIST_2)
 	erts_free_aligned_binary_bytes(temp_alloc);
 	BIF_ERROR(BIF_P, BADARG);
     }
-    memcpy(&context,bytes,sizeof(MD5_CTX));
+    sys_memcpy(&context,bytes,sizeof(MD5_CTX));
     erts_free_aligned_binary_bytes(temp_alloc);
     rest = do_chksum(&md5_wrap,BIF_P,BIF_ARG_2,100,(void *) &context,&res,
 		     &err);
@@ -599,7 +599,7 @@ md5_final_1(BIF_ALIST_1)
 	goto error;
     }
     bin = erts_new_heap_binary(BIF_P, (byte *)NULL, 16, &result);
-    memcpy(&ctx_copy, context, sizeof(MD5_CTX));
+    sys_memcpy(&ctx_copy, context, sizeof(MD5_CTX));
     erts_free_aligned_binary_bytes(temp_alloc);
     MD5Final(result, &ctx_copy);
     BIF_RET(bin);
diff --git a/erts/emulator/beam/erl_bif_ddll.c b/erts/emulator/beam/erl_bif_ddll.c
index f673ef3194..579e9b12f4 100644
--- a/erts/emulator/beam/erl_bif_ddll.c
+++ b/erts/emulator/beam/erl_bif_ddll.c
@@ -1412,7 +1412,7 @@ static Eterm copy_ref(Eterm ref, Eterm *hp)
     ErtsORefThing *ptr;
     ASSERT(is_internal_ordinary_ref(ref));
     ptr = ordinary_ref_thing_ptr(ref);
-    memcpy(hp, ptr, sizeof(ErtsORefThing));
+    sys_memcpy(hp, ptr, sizeof(ErtsORefThing));
     return (make_internal_ref(hp));
 }
 
@@ -1454,9 +1454,9 @@ static void set_driver_reloading(DE_Handle *dh, Process *proc, char *path, char
     dh->procs = p;
     dh->status = ERL_DE_RELOAD;
     dh->reload_full_path = erts_alloc(ERTS_ALC_T_DDLL_HANDLE, sys_strlen(path) + 1);
-    strcpy(dh->reload_full_path,path);
+    sys_strcpy(dh->reload_full_path,path);
     dh->reload_driver_name = erts_alloc(ERTS_ALC_T_DDLL_HANDLE, sys_strlen(name) + 1);
-    strcpy(dh->reload_driver_name,name);
+    sys_strcpy(dh->reload_driver_name,name);
     dh->reload_flags = flags;
 }
 
@@ -1501,7 +1501,7 @@ static int do_load_driver_entry(DE_Handle *dh, char *path, char *name)
 	goto error;
     }
 
-    if (strcmp(name, dp->driver_name) != 0) {
+    if (sys_strcmp(name, dp->driver_name) != 0) {
 	res = ERL_DE_LOAD_ERROR_BAD_NAME;
 	goto error;
     }
@@ -1799,7 +1799,7 @@ static char *pick_list_or_atom(Eterm name_term)
 	    goto error;
 	}
 	name = erts_alloc(ERTS_ALC_T_DDLL_TMP_BUF, ap->len + 1);
-	memcpy(name,ap->name,ap->len);
+	sys_memcpy(name,ap->name,ap->len);
 	name[ap->len] = '\0';
     } else {
 	if (erts_iolist_size(name_term, &name_len)) {
@@ -1870,7 +1870,7 @@ static erts_driver_t *lookup_driver(char *name)
 {
     erts_driver_t *drv;
     assert_drv_list_locked();
-    for (drv = driver_list; drv != NULL && strcmp(drv->name, name); drv = drv->next)
+    for (drv = driver_list; drv != NULL && sys_strcmp(drv->name, name); drv = drv->next)
 	;
     return drv;
 }
diff --git a/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c
index 903f54e2fb..6475f04c56 100644
--- a/erts/emulator/beam/erl_bif_info.c
+++ b/erts/emulator/beam/erl_bif_info.c
@@ -2378,12 +2378,12 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
 	BIF_RET(os_version_tuple);
     }
     else if (BIF_ARG_1 == am_version) {
-	int n = strlen(ERLANG_VERSION);
+	int n = sys_strlen(ERLANG_VERSION);
 	hp = HAlloc(BIF_P, ((sizeof ERLANG_VERSION)-1) * 2);
 	BIF_RET(buf_to_intlist(&hp, ERLANG_VERSION, n, NIL));
     }
     else if (BIF_ARG_1 == am_machine) {
-	int n = strlen(EMULATOR);
+	int n = sys_strlen(EMULATOR);
 	hp = HAlloc(BIF_P, n*2);
 	BIF_RET(buf_to_intlist(&hp, EMULATOR, n, NIL));
     }
@@ -2409,7 +2409,7 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
 	    res = erts_bld_cons(hpp, hszp,
 				erts_bld_tuple(hpp, hszp, 2,
 					       erts_atom_put((byte *)opc[i].name,
-							     strlen(opc[i].name),
+							     sys_strlen(opc[i].name),
 							     ERTS_ATOM_ENC_LATIN1,
 							     1),
 					       erts_bld_uint(hpp, hszp,
@@ -2805,21 +2805,21 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
 	Uint  sz;
 	Eterm res = NIL, tup, text;
 	Eterm *hp = HAlloc(BIF_P, 3*(2 + 3) + /* three 2-tuples and three cons */
-		2*(strlen(erts_build_flags_CONFIG_H) +
-		   strlen(erts_build_flags_CFLAGS) +
-		   strlen(erts_build_flags_LDFLAGS)));
+		2*(sys_strlen(erts_build_flags_CONFIG_H) +
+		   sys_strlen(erts_build_flags_CFLAGS) +
+		   sys_strlen(erts_build_flags_LDFLAGS)));
 
-	sz   = strlen(erts_build_flags_CONFIG_H);
+	sz   = sys_strlen(erts_build_flags_CONFIG_H);
 	text = buf_to_intlist(&hp, erts_build_flags_CONFIG_H, sz, NIL);
 	tup  = TUPLE2(hp, am_config_h, text); hp += 3;
 	res  = CONS(hp, tup, res); hp += 2;
 
-	sz   = strlen(erts_build_flags_CFLAGS);
+	sz   = sys_strlen(erts_build_flags_CFLAGS);
 	text = buf_to_intlist(&hp, erts_build_flags_CFLAGS, sz, NIL);
 	tup  = TUPLE2(hp, am_cflags, text); hp += 3;
 	res  = CONS(hp, tup, res); hp += 2;
 
-	sz   = strlen(erts_build_flags_LDFLAGS);
+	sz   = sys_strlen(erts_build_flags_LDFLAGS);
 	text = buf_to_intlist(&hp, erts_build_flags_LDFLAGS, sz, NIL);
 	tup  = TUPLE2(hp, am_ldflags, text); hp += 3;
 	res  = CONS(hp, tup, res); hp += 2;
@@ -3883,7 +3883,7 @@ BIF_RETTYPE erts_debug_get_internal_state_1(BIF_ALIST_1)
 		while (ix >= atom_table_size()) {
 		    char tmp[20];
 		    erts_snprintf(tmp, sizeof(tmp), "am%x", atom_table_size());
-		    erts_atom_put((byte *) tmp, strlen(tmp), ERTS_ATOM_ENC_LATIN1, 1);
+		    erts_atom_put((byte *) tmp, sys_strlen(tmp), ERTS_ATOM_ENC_LATIN1, 1);
 		}
 		return make_atom(ix);
 	    }
@@ -4449,7 +4449,7 @@ static Eterm lcnt_build_lock_stats_term(Eterm **hpp, Uint *szp, erts_lcnt_lock_s
 
     file = stats->file ? stats->file : "undefined";
 
-    af    = erts_atom_put((byte *)file, strlen(file), ERTS_ATOM_ENC_LATIN1, 1);
+    af    = erts_atom_put((byte *)file, sys_strlen(file), ERTS_ATOM_ENC_LATIN1, 1);
     uil   = erts_bld_uint( hpp, szp, stats->line);
     tloc  = erts_bld_tuple(hpp, szp, 2, af, uil);
 
@@ -4495,7 +4495,7 @@ static Eterm lcnt_pretty_print_lock_id(erts_lcnt_lock_info_t *info) {
     } else if(info->flags & ERTS_LOCK_FLAGS_CATEGORY_ALLOCATOR) {
         if(is_small(id) && !sys_strcmp(info->name, "alcu_allocator")) {
             const char *name = (const char*)ERTS_ALC_A2AD(signed_val(id));
-            id = erts_atom_put((byte*)name, strlen(name), ERTS_ATOM_ENC_LATIN1, 1);
+            id = erts_atom_put((byte*)name, sys_strlen(name), ERTS_ATOM_ENC_LATIN1, 1);
         }
     }
 
@@ -4515,8 +4515,8 @@ static Eterm lcnt_build_lock_term(Eterm **hpp, Uint *szp, lcnt_sample_t *sample,
     
     lock_desc = erts_lock_flags_get_type_name(info->flags);
 
-    type  = erts_atom_put((byte*)lock_desc, strlen(lock_desc), ERTS_ATOM_ENC_LATIN1, 1);
-    name  = erts_atom_put((byte*)info->name, strlen(info->name), ERTS_ATOM_ENC_LATIN1, 1);
+    type  = erts_atom_put((byte*)lock_desc, sys_strlen(lock_desc), ERTS_ATOM_ENC_LATIN1, 1);
+    name  = erts_atom_put((byte*)info->name, sys_strlen(info->name), ERTS_ATOM_ENC_LATIN1, 1);
 
     /* Only attempt to resolve ids when actually emitting the term. This ought
      * to be safe since all immediates are the same size. */
@@ -4552,11 +4552,11 @@ static Eterm lcnt_build_result_term(Eterm **hpp, Uint *szp, erts_lcnt_time_t *du
     dtns = bld_unstable_uint64(hpp, szp, duration->ns);
     tdt  = erts_bld_tuple(hpp, szp, 2, dts, dtns);
 
-    adur = erts_atom_put((byte *)str_duration, strlen(str_duration), ERTS_ATOM_ENC_LATIN1, 1);
+    adur = erts_atom_put((byte *)str_duration, sys_strlen(str_duration), ERTS_ATOM_ENC_LATIN1, 1);
     tdur = erts_bld_tuple(hpp, szp, 2, adur, tdt);
    
     /* lock tuple */
-    aloc = erts_atom_put((byte *)str_locks, strlen(str_locks), ERTS_ATOM_ENC_LATIN1, 1);
+    aloc = erts_atom_put((byte *)str_locks, sys_strlen(str_locks), ERTS_ATOM_ENC_LATIN1, 1);
 
     for(i = 0; i < current_locks->size; i++) {
         lloc = lcnt_build_lock_term(hpp, szp, &current_locks->elements[i], lloc);
@@ -4610,7 +4610,7 @@ static Eterm lcnt_build_category_list(Eterm **hpp, Uint *szp, erts_lock_flags_t
     for(i = 0; lcnt_category_map[i].name != NULL; i++) {
         if(mask & lcnt_category_map[i].flag) {
             Eterm category = erts_atom_put((byte*)lcnt_category_map[i].name,
-                                           strlen(lcnt_category_map[i].name),
+                                           sys_strlen(lcnt_category_map[i].name),
                                            ERTS_ATOM_ENC_UTF8, 0);
 
             res = erts_bld_cons(hpp, szp, category, res);
@@ -4740,14 +4740,14 @@ BIF_RETTYPE erts_debug_lcnt_control_2(BIF_ALIST_2)
 
 static void os_info_init(void)
 {
-    Eterm type = erts_atom_put((byte *) os_type, strlen(os_type), ERTS_ATOM_ENC_LATIN1, 1);
+    Eterm type = erts_atom_put((byte *) os_type, sys_strlen(os_type), ERTS_ATOM_ENC_LATIN1, 1);
     Eterm flav;
     int major, minor, build;
     char* buf = erts_alloc(ERTS_ALC_T_TMP, 1024); /* More than enough */
     Eterm* hp;
 
     os_flavor(buf, 1024);
-    flav = erts_atom_put((byte *) buf, strlen(buf), ERTS_ATOM_ENC_LATIN1, 1);
+    flav = erts_atom_put((byte *) buf, sys_strlen(buf), ERTS_ATOM_ENC_LATIN1, 1);
     erts_free(ERTS_ALC_T_TMP, (void *) buf);
     hp = erts_alloc(ERTS_ALC_T_LITERAL, (3+4)*sizeof(Eterm));
     os_type_tuple = TUPLE2(hp, type, flav);
diff --git a/erts/emulator/beam/erl_bif_port.c b/erts/emulator/beam/erl_bif_port.c
index b184adedee..1feb892b93 100644
--- a/erts/emulator/beam/erl_bif_port.c
+++ b/erts/emulator/beam/erl_bif_port.c
@@ -71,7 +71,7 @@ BIF_RETTYPE erts_internal_open_port_2(BIF_ALIST_2)
                 BIF_ERROR(BIF_P, EXC_INTERNAL_ERROR);
 	} else if (err_type == -2) {
 	    str = erl_errno_id(err_num);
-            res = erts_atom_put((byte *) str, strlen(str), ERTS_ATOM_ENC_LATIN1, 1);
+            res = erts_atom_put((byte *) str, sys_strlen(str), ERTS_ATOM_ENC_LATIN1, 1);
 	} else {
 	    res = am_einval;
 	}
@@ -1145,7 +1145,7 @@ http_bld_string(struct packet_callback_args* pca, Uint **hpp, Uint *szp,
 		ErlHeapBin* bin = (ErlHeapBin*) *hpp;
 		bin->thing_word = header_heap_bin(len);
 		bin->size = len;
-		memcpy(bin->data, str, len);
+		sys_memcpy(bin->data, str, len);
 		*hpp += size;
 	    }
 	}
@@ -1323,9 +1323,9 @@ int ssl_tls_erl(void* arg, unsigned type, unsigned major, unsigned minor,
     Eterm bin = new_binary(pca->p, NULL, plen+len);
     byte* bin_ptr = binary_bytes(bin);
 
-    memcpy(bin_ptr+plen, buf, len);
+    sys_memcpy(bin_ptr+plen, buf, len);
     if (plen) {
-        memcpy(bin_ptr, prefix, plen);
+        sys_memcpy(bin_ptr, prefix, plen);
     }
 
     /* {ssl_tls,NIL,ContentType,{Major,Minor},Bin} */
diff --git a/erts/emulator/beam/erl_bif_re.c b/erts/emulator/beam/erl_bif_re.c
index bc819505e7..4d769c2d46 100644
--- a/erts/emulator/beam/erl_bif_re.c
+++ b/erts/emulator/beam/erl_bif_re.c
@@ -514,7 +514,7 @@ re_version_0(BIF_ALIST_0)
     Eterm ret;
     size_t version_size = 0;
     byte *version = (byte *) erts_pcre_version();
-    version_size = strlen((const char *) version);
+    version_size = sys_strlen((const char *) version);
     ret = new_binary(BIF_P, version, version_size);
     BIF_RET(ret);
 }
@@ -998,7 +998,7 @@ build_capture(Eterm capture_spec[CAPSPEC_SIZE], const pcre *code)
 	    has_dupnames = ((options & PCRE_DUPNAMES) != 0);
 
 	    for(i=0;i<top;++i) {
-		if (last == NULL || !has_dupnames || strcmp((char *) last+2,(char *) nametable+2)) {
+		if (last == NULL || !has_dupnames || sys_strcmp((char *) last+2,(char *) nametable+2)) {
 		    ASSERT(ri->num_spec >= 0);
 		    ++(ri->num_spec);
 		    if(ri->num_spec > sallocated) {
@@ -1048,7 +1048,7 @@ build_capture(Eterm capture_spec[CAPSPEC_SIZE], const pcre *code)
 						    (tmpbsiz = ap->len + 1));
 			    }
 			}
-			memcpy(tmpb,ap->name,ap->len);
+			sys_memcpy(tmpb,ap->name,ap->len);
 			tmpb[ap->len] = '\0';
 		    } else {
 			ErlDrvSizeT slen;
@@ -1210,7 +1210,7 @@ re_run(Process *p, Eterm arg1, Eterm arg2, Eterm arg3)
 	    erts_pcre_fullinfo(result, NULL, PCRE_INFO_CAPTURECOUNT, &capture_count);
 	    ovsize = 3*(capture_count+1);
 	    restart.code = erts_alloc(ERTS_ALC_T_RE_SUBJECT, code_size);
-	    memcpy(restart.code, result, code_size);
+	    sys_memcpy(restart.code, result, code_size);
 	    erts_pcre_free(result);
 	    erts_free(ERTS_ALC_T_RE_TMP_BUF, expr);
 	    /*unicode = (pflags & PARSE_FLAG_UNICODE) ? 1 : 0;*/
@@ -1252,7 +1252,7 @@ re_run(Process *p, Eterm arg1, Eterm arg2, Eterm arg3)
 	    BIF_ERROR(p, BADARG);
 	}
 	restart.code = erts_alloc(ERTS_ALC_T_RE_SUBJECT, code_size);
-	memcpy(restart.code, code_tmp, code_size);
+	sys_memcpy(restart.code, code_tmp, code_size);
 	erts_free_aligned_binary_bytes(temp_alloc);
 
     }
@@ -1364,7 +1364,7 @@ handle_iolist:
 	RestartContext *restartp = ERTS_MAGIC_BIN_DATA(mbp);
 	Eterm magic_ref;
 	Eterm *hp;
-	memcpy(restartp,&restart,sizeof(RestartContext));
+	sys_memcpy(restartp,&restart,sizeof(RestartContext));
 	BUMP_ALL_REDS(p);
 	hp = HAlloc(p, ERTS_MAGIC_REF_THING_SIZE);
 	magic_ref = erts_mk_magic_ref(&hp, &MSO(p), mbp);
@@ -1517,7 +1517,7 @@ re_inspect_2(BIF_ALIST_2)
     last = NULL;
     name = nametable;
     for(i=0;i<top;++i) {
-	if (last == NULL || !has_dupnames || strcmp((char *) last+2,
+	if (last == NULL || !has_dupnames || sys_strcmp((char *) last+2,
 						    (char *) name+2)) {
 	    ++num_names;
 	}
@@ -1531,9 +1531,9 @@ re_inspect_2(BIF_ALIST_2)
     name = nametable;
     j = 0;
     for(i=0;i<top;++i) {
-	if (last == NULL || !has_dupnames || strcmp((char *) last+2,
+	if (last == NULL || !has_dupnames || sys_strcmp((char *) last+2,
 						    (char *) name+2)) {
-	    tmp_vec[j++] = new_binary(BIF_P, (byte *) name+2, strlen((char *) name+2));
+	    tmp_vec[j++] = new_binary(BIF_P, (byte *) name+2, sys_strlen((char *) name+2));
 	}
 	last = name;
 	name += entrysize;
diff --git a/erts/emulator/beam/erl_bif_unique.h b/erts/emulator/beam/erl_bif_unique.h
index 9aa631fde9..6af9d4ac8c 100644
--- a/erts/emulator/beam/erl_bif_unique.h
+++ b/erts/emulator/beam/erl_bif_unique.h
@@ -307,7 +307,7 @@ erts_iref_storage_clean(ErtsIRefStorage *iref)
     if (iref->is_magic && erts_refc_dectest(&iref->u.mb->intern.refc, 0) == 0)
 	erts_ref_bin_free(iref->u.mb);
 #ifdef DEBUG
-    memset((void *) iref, 0xf, sizeof(ErtsIRefStorage));
+    sys_memset((void *) iref, 0xf, sizeof(ErtsIRefStorage));
 #endif
 }
 
@@ -342,7 +342,7 @@ erts_iref_storage_make_ref(ErtsIRefStorage *iref,
 
 #ifdef DEBUG
     if (clean_storage)
-	memset((void *) iref, 0xf, sizeof(ErtsIRefStorage));
+	sys_memset((void *) iref, 0xf, sizeof(ErtsIRefStorage));
 #endif
 
     return make_internal_ref(hp);
diff --git a/erts/emulator/beam/erl_db.c b/erts/emulator/beam/erl_db.c
index 1ab1c4a363..a76d769283 100644
--- a/erts/emulator/beam/erl_db.c
+++ b/erts/emulator/beam/erl_db.c
@@ -4261,7 +4261,7 @@ erts_ets_colliding_names(Process* p, Eterm name, Uint cnt)
             while (index >= atom_table_size()) {
                 char tmp[20];
                 erts_snprintf(tmp, sizeof(tmp), "am%x", atom_table_size());
-                erts_atom_put((byte *) tmp, strlen(tmp), ERTS_ATOM_ENC_LATIN1, 1);
+                erts_atom_put((byte *) tmp, sys_strlen(tmp), ERTS_ATOM_ENC_LATIN1, 1);
             }
             list = CONS(hp, make_atom(index), list);
             hp += 2;
diff --git a/erts/emulator/beam/erl_db_util.c b/erts/emulator/beam/erl_db_util.c
index e017b9552b..956662aefa 100644
--- a/erts/emulator/beam/erl_db_util.c
+++ b/erts/emulator/beam/erl_db_util.c
@@ -91,7 +91,7 @@ do {									\
 	(On).siz *= 2;							\
 	(On).data							\
 	    = (((On).def == (On).data)					\
-	       ? memcpy(erts_alloc(ERTS_ALC_T_DB_MC_STK,		\
+	       ? sys_memcpy(erts_alloc(ERTS_ALC_T_DB_MC_STK,		\
 				   (On).siz*sizeof(*((On).data))),	\
 			(On).def,					\
 			DMC_DEFAULT_SIZE*sizeof(*((On).data)))		\
@@ -1518,7 +1518,7 @@ restart:
 	 context.current_match < num_progs; 
 	 ++context.current_match) { /* This loop is long, 
 				       too long */
-	memset(heap.vars, 0, heap.size * sizeof(*heap.vars));
+	sys_memset(heap.vars, 0, heap.size * sizeof(*heap.vars));
 	t = context.matchexpr[context.current_match];
 	context.stack_used = 0;
 	structure_checked = 0;
@@ -2140,7 +2140,7 @@ restart:
 	case matchEqFloat:
 	    if (!is_float(*ep))
 		FAIL();
-	    if (memcmp(float_val(*ep) + 1, pc, sizeof(double)))
+	    if (sys_memcmp(float_val(*ep) + 1, pc, sizeof(double)))
 		FAIL();
 	    pc += TermWords(2);
 	    ++ep;
@@ -2742,8 +2742,8 @@ Eterm db_format_dmc_err_info(Process *p, DMCErrInfo *ei)
 	if (vnum >= 0)
 	    erts_snprintf(buff,sizeof(buff)+20,tmp->error_string, vnum);
 	else
-	    strcpy(buff,tmp->error_string);
-	sl = strlen(buff);
+	    sys_strcpy(buff,tmp->error_string);
+	sl = sys_strlen(buff);
 	shp = HAlloc(p, sl * 2 + 5);
 	sev = (tmp->severity == dmcWarning) ? 
 	    am_atom_put("warning",7) :
@@ -5044,7 +5044,7 @@ static int match_compact(ErlHeapFragment *expr, DMCErrInfo *err_info)
 	    ASSERT(j < x);
 	    erts_snprintf(buff+1, sizeof(buff) - 1, "%u", (unsigned) j);
 	    /* Yes, writing directly into terms, they ARE off heap */
-	    *p = erts_atom_put((byte *) buff, strlen(buff),
+	    *p = erts_atom_put((byte *) buff, sys_strlen(buff),
 			       ERTS_ATOM_ENC_LATIN1, 1);
 	}
 	++p;
@@ -5505,7 +5505,7 @@ void db_match_dis(Binary *bp)
 	    ++t;
 	    {
 		double num;
-		memcpy(&num,t,sizeof(double));
+		sys_memcpy(&num,t,sizeof(double));
 		t += TermWords(2);
 		erts_printf("EqFloat\t%f\n", num);
 	    }
diff --git a/erts/emulator/beam/erl_drv_thread.c b/erts/emulator/beam/erl_drv_thread.c
index 71d4534ef9..4cf42fce57 100644
--- a/erts/emulator/beam/erl_drv_thread.c
+++ b/erts/emulator/beam/erl_drv_thread.c
@@ -439,7 +439,7 @@ erl_drv_tsd_key_create(char *name, ErlDrvTSDKey *key)
 	name_copy = no_name;
     else {
 	name_copy = erts_alloc_fnf(ERTS_ALC_T_DRV_TSD,
-				   sizeof(char)*(strlen(name) + 1));
+				   sizeof(char)*(sys_strlen(name) + 1));
 	if (!name_copy) {
 	    *key = -1;
 	    return ENOMEM;
@@ -750,7 +750,7 @@ erl_drv_steal_main_thread(char *name,
 			   + (name ? sys_strlen(name) + 1 : 0)));
     if (!dtid)
 	return ENOMEM;
-    memset(dtid,0,sizeof(ErlDrvTid_));
+    sys_memset(dtid,0,sizeof(ErlDrvTid_));
     dtid->tid = (void * ) -1;
     dtid->drv_thr = 1;
     dtid->func = func;
@@ -763,8 +763,8 @@ erl_drv_steal_main_thread(char *name,
     *tid = NULL;
     /* Ignore options and name... */
     
-    memcpy(buff,&func,sizeof(void* (*)(void*)));
-    memcpy(buff + sizeof(void* (*)(void*)),&arg,sizeof(void *));
+    sys_memcpy(buff,&func,sizeof(void* (*)(void*)));
+    sys_memcpy(buff + sizeof(void* (*)(void*)),&arg,sizeof(void *));
     write(erts_darwin_main_thread_pipe[1],buff,buff_sz);
     return 0;
 }
diff --git a/erts/emulator/beam/erl_goodfit_alloc.c b/erts/emulator/beam/erl_goodfit_alloc.c
index a38f6c7daf..e3ba67f0af 100644
--- a/erts/emulator/beam/erl_goodfit_alloc.c
+++ b/erts/emulator/beam/erl_goodfit_alloc.c
@@ -508,7 +508,7 @@ static struct {
 
 static void ERTS_INLINE atom_init(Eterm *atom, char *name)
 {
-    *atom = am_atom_put(name, strlen(name));
+    *atom = am_atom_put(name, sys_strlen(name));
 }
 #define AM_INIT(AM) atom_init(&am.AM, #AM)
 
diff --git a/erts/emulator/beam/erl_init.c b/erts/emulator/beam/erl_init.c
index 4846ccd2d3..c1760a2e65 100644
--- a/erts/emulator/beam/erl_init.c
+++ b/erts/emulator/beam/erl_init.c
@@ -238,7 +238,7 @@ progname(char *fullname)
 {
     int i;
     
-    i = strlen(fullname);
+    i = sys_strlen(fullname);
     while (i >= 0) {
 	if ((fullname[i] != '/') && (fullname[i] != '\\')) 
 	    i--;
@@ -810,7 +810,7 @@ early_init(int *argc, char **argv) /*
     if (argc && argv) {
 	int i = 1;
 	while (i < *argc) {
-	    if (strcmp(argv[i], "--") == 0) { /* end of emulator options */
+	    if (sys_strcmp(argv[i], "--") == 0) { /* end of emulator options */
 		i++;
 		break;
 	    }
@@ -892,7 +892,7 @@ early_init(int *argc, char **argv) /*
 		    else if (argv[i][2] == 'D') {
 			char *arg;
 			char *type = argv[i]+3;
-			if (strncmp(type, "Pcpu", 4) == 0) {
+			if (sys_strncmp(type, "Pcpu", 4) == 0) {
 			    int ptot, ponln;
 			    arg = get_arg(argv[i]+7, argv[i+1], &i);
 			    switch (sscanf(arg, "%d:%d", &ptot, &ponln)) {
@@ -929,7 +929,7 @@ early_init(int *argc, char **argv) /*
 			    VERBOSE(DEBUG_SYSTEM,
 				    ("using %d:%d dirty CPU scheduler percentages\n",
 				     dirty_cpu_scheds_pctg, dirty_cpu_scheds_onln_pctg));
-			} else if (strncmp(type, "cpu", 3) == 0) {
+			} else if (sys_strncmp(type, "cpu", 3) == 0) {
 			    int tot, onln;
 			    arg = get_arg(argv[i]+6, argv[i+1], &i);
 			    switch (sscanf(arg, "%d:%d", &tot, &onln)) {
@@ -980,7 +980,7 @@ early_init(int *argc, char **argv) /*
 			    }
 			    VERBOSE(DEBUG_SYSTEM,
 				    ("using %d:%d dirty CPU scheduler(s)\n", tot, onln));
-			} else if (strncmp(type, "io", 2) == 0) {
+			} else if (sys_strncmp(type, "io", 2) == 0) {
 			    arg = get_arg(argv[i]+5, argv[i+1], &i);
 			    dirty_io_scheds = atoi(arg);
 			    if (dirty_io_scheds < 0 ||
@@ -1242,7 +1242,7 @@ erl_start(int argc, char **argv)
 	if (argv[i][0] != '-') {
 	    erts_usage();
 	}
-	if (strcmp(argv[i], "--") == 0) { /* end of emulator options */
+	if (sys_strcmp(argv[i], "--") == 0) { /* end of emulator options */
 	    i++;
 	    break;
 	}
@@ -1270,12 +1270,12 @@ erl_start(int argc, char **argv)
                     ("using display items %d\n",display_items));
 	    break;
 	case 'p':
-	    if (!strncmp(argv[i],"-pc",3)) {
+	    if (!sys_strncmp(argv[i],"-pc",3)) {
 		int printable_chars = ERL_PRINTABLE_CHARACTERS_LATIN1;
 		arg = get_arg(argv[i]+3, argv[i+1], &i);
-		if (!strcmp(arg,"unicode")) {
+		if (!sys_strcmp(arg,"unicode")) {
 		    printable_chars = ERL_PRINTABLE_CHARACTERS_UNICODE;
-		} else if (strcmp(arg,"latin1")) {
+		} else if (sys_strcmp(arg,"latin1")) {
 		    erts_fprintf(stderr, "bad range of printable "
 				 "characters: %s\n", arg);
 		    erts_usage();
@@ -1287,7 +1287,7 @@ erl_start(int argc, char **argv)
 		erts_usage();
 	    }
 	case 'f':
-	    if (!strncmp(argv[i],"-fn",3)) {
+	    if (!sys_strncmp(argv[i],"-fn",3)) {
 		int warning_type =  ERL_FILENAME_WARNING_WARNING;
 		arg = get_arg(argv[i]+3, argv[i+1], &i);
 		switch (*arg) {
@@ -1470,9 +1470,9 @@ erl_start(int argc, char **argv)
 		}
             } else if (has_prefix("maxk", sub_param)) {
 		arg = get_arg(sub_param+4, argv[i+1], &i);
-		if (strcmp(arg,"true") == 0) {
+		if (sys_strcmp(arg,"true") == 0) {
                     H_MAX_FLAGS |= MAX_HEAP_SIZE_KILL;
-                } else if (strcmp(arg,"false") == 0) {
+                } else if (sys_strcmp(arg,"false") == 0) {
                     H_MAX_FLAGS &= ~MAX_HEAP_SIZE_KILL;
                 } else {
 		    erts_fprintf(stderr, "bad max heap kill %s\n", arg);
@@ -1481,9 +1481,9 @@ erl_start(int argc, char **argv)
 		VERBOSE(DEBUG_SYSTEM, ("using max heap kill %d\n", H_MAX_FLAGS));
             } else if (has_prefix("maxel", sub_param)) {
 		arg = get_arg(sub_param+5, argv[i+1], &i);
-		if (strcmp(arg,"true") == 0) {
+		if (sys_strcmp(arg,"true") == 0) {
                     H_MAX_FLAGS |= MAX_HEAP_SIZE_LOG;
-                } else if (strcmp(arg,"false") == 0) {
+                } else if (sys_strcmp(arg,"false") == 0) {
                     H_MAX_FLAGS &= ~MAX_HEAP_SIZE_LOG;
                 } else {
 		    erts_fprintf(stderr, "bad max heap error logger %s\n", arg);
@@ -1601,7 +1601,7 @@ erl_start(int argc, char **argv)
 
 	case 'P': /* set maximum number of processes */
 	    arg = get_arg(argv[i]+2, argv[i+1], &i);
-	    if (strcmp(arg, "legacy") == 0)
+	    if (sys_strcmp(arg, "legacy") == 0)
 		legacy_proc_tab = 1;
 	    else {
 		errno = 0;
@@ -1617,7 +1617,7 @@ erl_start(int argc, char **argv)
 
 	case 'Q': /* set maximum number of ports */
 	    arg = get_arg(argv[i]+2, argv[i+1], &i);
-	    if (strcmp(arg, "legacy") == 0)
+	    if (sys_strcmp(arg, "legacy") == 0)
 		legacy_port_tab = 1;
 	    else {
 		errno = 0;
@@ -1635,11 +1635,11 @@ erl_start(int argc, char **argv)
 	case 'S' : /* Was handled in early_init() just read past it */
 	    if (argv[i][2] == 'D') {
 		char* type = argv[i]+3;
-		if (strcmp(type, "Pcpu") == 0)
+		if (sys_strcmp(type, "Pcpu") == 0)
 		    (void) get_arg(argv[i]+7, argv[i+1], &i);
-		if (strcmp(type, "cpu") == 0)
+		if (sys_strcmp(type, "cpu") == 0)
 		    (void) get_arg(argv[i]+6, argv[i+1], &i);
-		else if (strcmp(type, "io") == 0)
+		else if (sys_strcmp(type, "io") == 0)
 		    (void) get_arg(argv[i]+5, argv[i+1], &i);
 	    } else if (argv[i][2] == 'P')
 		(void) get_arg(argv[i]+3, argv[i+1], &i);
diff --git a/erts/emulator/beam/erl_instrument.c b/erts/emulator/beam/erl_instrument.c
index 634509f880..2f70e7996e 100644
--- a/erts/emulator/beam/erl_instrument.c
+++ b/erts/emulator/beam/erl_instrument.c
@@ -103,7 +103,7 @@ static struct {
 
 static void ERTS_INLINE atom_init(Eterm *atom, const char *name)
 {
-    *atom = am_atom_put((char *) name, strlen(name));
+    *atom = am_atom_put((char *) name, sys_strlen(name));
 }
 #define AM_INIT(AM) atom_init(&am.AM, #AM)
 
diff --git a/erts/emulator/beam/erl_lock_check.c b/erts/emulator/beam/erl_lock_check.c
index 64950fc252..773b138d92 100644
--- a/erts/emulator/beam/erl_lock_check.c
+++ b/erts/emulator/beam/erl_lock_check.c
@@ -259,7 +259,7 @@ static ERTS_INLINE void lc_free(void *p)
 {
     erts_lc_free_block_t *fb = (erts_lc_free_block_t *) p;
 #ifdef DEBUG
-    memset((void *) p, 0xdf, sizeof(erts_lc_free_block_t));
+    sys_memset((void *) p, 0xdf, sizeof(erts_lc_free_block_t));
 #endif
     lc_lock();
     fb->next = free_blocks;
@@ -289,12 +289,12 @@ static void *lc_core_alloc(void)
     }
     for (i = 1; i < ERTS_LC_FB_CHUNK_SIZE - 1; i++) {
 #ifdef DEBUG
-	memset((void *) &fbs[i], 0xdf, sizeof(erts_lc_free_block_t));
+	sys_memset((void *) &fbs[i], 0xdf, sizeof(erts_lc_free_block_t));
 #endif
 	fbs[i].next = &fbs[i+1];
     }
 #ifdef DEBUG
-    memset((void *) &fbs[ERTS_LC_FB_CHUNK_SIZE-1],
+    sys_memset((void *) &fbs[ERTS_LC_FB_CHUNK_SIZE-1],
 	   0xdf, sizeof(erts_lc_free_block_t));
 #endif
     lc_lock();
@@ -695,7 +695,7 @@ erts_lc_get_lock_order_id(char *name)
 	erts_fprintf(stderr, "Missing lock name\n");
     else {
 	for (i = 0; i < ERTS_LOCK_ORDER_SIZE; i++)
-	    if (strcmp(erts_lock_order[i].name, name) == 0)
+	    if (sys_strcmp(erts_lock_order[i].name, name) == 0)
 		return i;
 	erts_fprintf(stderr,
 		     "Lock name '%s' missing in lock order "
@@ -1322,12 +1322,12 @@ erts_lc_init(void)
     static erts_lc_free_block_t fbs[ERTS_LC_FB_CHUNK_SIZE];
     for (i = 0; i < ERTS_LC_FB_CHUNK_SIZE - 1; i++) {
 #ifdef DEBUG
-	memset((void *) &fbs[i], 0xdf, sizeof(erts_lc_free_block_t));
+	sys_memset((void *) &fbs[i], 0xdf, sizeof(erts_lc_free_block_t));
 #endif
 	fbs[i].next = &fbs[i+1];
     }
 #ifdef DEBUG
-    memset((void *) &fbs[ERTS_LC_FB_CHUNK_SIZE-1],
+    sys_memset((void *) &fbs[ERTS_LC_FB_CHUNK_SIZE-1],
 	   0xdf, sizeof(erts_lc_free_block_t));
 #endif
     fbs[ERTS_LC_FB_CHUNK_SIZE-1].next = NULL;
diff --git a/erts/emulator/beam/erl_msacc.c b/erts/emulator/beam/erl_msacc.c
index d659842b7e..d13d6080e1 100644
--- a/erts/emulator/beam/erl_msacc.c
+++ b/erts/emulator/beam/erl_msacc.c
@@ -81,7 +81,7 @@ void erts_msacc_init(void) {
                                         sizeof(Eterm)*ERTS_MSACC_STATE_COUNT);
     for (i = 0; i < ERTS_MSACC_STATE_COUNT; i++) {
         erts_msacc_state_atoms[i] = am_atom_put(erts_msacc_states[i],
-                                                strlen(erts_msacc_states[i]));
+                                                sys_strlen(erts_msacc_states[i]));
     }
 }
 
@@ -191,7 +191,7 @@ Eterm erts_msacc_gather_stats(ErtsMsAcc *msacc, ErtsHeapFactory *factory) {
     map->keys = key;
     hp[0] = state_map;
     hp[1] = msacc->id;
-    hp[2] = am_atom_put(msacc->type,strlen(msacc->type));
+    hp[2] = am_atom_put(msacc->type,sys_strlen(msacc->type));
 
     return make_flatmap(map);
 }
diff --git a/erts/emulator/beam/erl_mtrace.c b/erts/emulator/beam/erl_mtrace.c
index f2a660f085..2807b443a1 100644
--- a/erts/emulator/beam/erl_mtrace.c
+++ b/erts/emulator/beam/erl_mtrace.c
@@ -314,7 +314,7 @@ disable_trace(int error, char *reason, int eno)
 	erts_fprintf(stderr, "%s: %s\n", mt_dis, reason);
     else {
 	eno_str = erl_errno_id(eno);
-	if (strcmp(eno_str, "unknown") == 0)
+	if (sys_strcmp(eno_str, "unknown") == 0)
 	    erts_fprintf(stderr, "%s: %s: %d\n", mt_dis, reason, eno);
 	else
 	    erts_fprintf(stderr, "%s: %s: %s\n", mt_dis, reason, eno_str);
@@ -401,9 +401,9 @@ write_trace_header(char *nodename, char *pid, char *hostname)
     PUT_UI32(tracep, ERTS_MT_MAJOR_VSN);
     PUT_UI32(tracep, ERTS_MT_MINOR_VSN);
 
-    n_len = strlen(nodename);
-    h_len = strlen(hostname);
-    p_len = strlen(pid);
+    n_len = sys_strlen(nodename);
+    h_len = sys_strlen(hostname);
+    p_len = sys_strlen(pid);
     hdr_prolog_len = (2*UI32_SZ
 		      + 3*UI16_SZ
 		      + 3*UI32_SZ
@@ -436,15 +436,15 @@ write_trace_header(char *nodename, char *pid, char *hostname)
     PUT_UI32(tracep, start_time.usec);
 
     PUT_UI8(tracep, (byte) n_len);
-    memcpy((void *) tracep, (void *) nodename, n_len);
+    sys_memcpy((void *) tracep, (void *) nodename, n_len);
     tracep += n_len;
 
     PUT_UI8(tracep, (byte) h_len);
-    memcpy((void *) tracep, (void *) hostname, h_len);
+    sys_memcpy((void *) tracep, (void *) hostname, h_len);
     tracep += h_len;
 
     PUT_UI8(tracep, (byte) p_len);
-    memcpy((void *) tracep, (void *) pid, p_len);
+    sys_memcpy((void *) tracep, (void *) pid, p_len);
     tracep += p_len;
 
     ASSERT(startp + hdr_prolog_len == tracep);
@@ -472,7 +472,7 @@ write_trace_header(char *nodename, char *pid, char *hostname)
 
 	str = ERTS_ALC_A2AD(i);
 	ASSERT(str);
-	str_len = strlen(str);
+	str_len = sys_strlen(str);
 	if (str_len >= (1 << 8)) {
 	    disable_trace(1, "Excessively large allocator string", 0);
 	    return 0;
@@ -493,7 +493,7 @@ write_trace_header(char *nodename, char *pid, char *hostname)
 	PUT_UI16(tracep, aflags);
 	PUT_UI16(tracep, (Uint16) i);
 	PUT_UI8( tracep, (byte) str_len);
-	memcpy((void *) tracep, (void *) str, str_len);
+	sys_memcpy((void *) tracep, (void *) str, str_len);
 	tracep += str_len;
 	if (erts_allctrs_info[i].alloc_util) {
 	    PUT_UI8(tracep, 2);
@@ -519,7 +519,7 @@ write_trace_header(char *nodename, char *pid, char *hostname)
 	str = ERTS_ALC_N2TD(i);
 	ASSERT(str);
 
-	str_len = strlen(str);
+	str_len = sys_strlen(str);
 	if (str_len >= (1 << 8)) {
 	    disable_trace(1, "Excessively large type string", 0);
 	    return 0;
@@ -543,7 +543,7 @@ write_trace_header(char *nodename, char *pid, char *hostname)
 	PUT_UI16(tracep, nflags);
 	PUT_UI16(tracep, (Uint16) i);
 	PUT_UI8(tracep, (byte) str_len);
-	memcpy((void *) tracep, (void *) str, str_len);
+	sys_memcpy((void *) tracep, (void *) str, str_len);
 	tracep += str_len;
 	PUT_UI16(tracep, no);
 	ASSERT(startp + entry_sz == tracep);
diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c
index d2000aa71e..c60cc7fecf 100644
--- a/erts/emulator/beam/erl_nif.c
+++ b/erts/emulator/beam/erl_nif.c
@@ -529,7 +529,7 @@ setup_nif_env(struct enif_msg_environment_t* msg_env,
     msg_env->env.tmp_obj_list = NULL;
     msg_env->env.proc = &msg_env->phony_proc;
     msg_env->env.exception_thrown = 0;
-    memset(&msg_env->phony_proc, 0, sizeof(Process));
+    sys_memset(&msg_env->phony_proc, 0, sizeof(Process));
     HEAP_START(&msg_env->phony_proc) = phony_heap;
     HEAP_TOP(&msg_env->phony_proc) = phony_heap;
     HEAP_LIMIT(&msg_env->phony_proc) = phony_heap;
@@ -4369,7 +4369,7 @@ static void get_string_maybe(ErlNifEnv *env, const ERL_NIF_TERM term,
         str_bin.size > bufsiz) {
         *ptr = NULL;
     } else {
-        memcpy(buf, (char *) str_bin.data, str_bin.size);
+        sys_memcpy(buf, (char *) str_bin.data, str_bin.size);
         buf[str_bin.size] = '\0';
         *ptr = buf;
     }
@@ -4386,7 +4386,7 @@ ERL_NIF_TERM erl_nif_user_trace_s1(ErlNifEnv* env, int argc,
 	    message_bin.size > MESSAGE_BUFSIZ) {
 	    return am_badarg;
 	}
-	memcpy(messagebuf, (char *) message_bin.data, message_bin.size);
+	sys_memcpy(messagebuf, (char *) message_bin.data, message_bin.size);
         messagebuf[message_bin.size] = '\0';
 	DTRACE1(user_trace_s1, messagebuf);
 	return am_true;
diff --git a/erts/emulator/beam/erl_trace.c b/erts/emulator/beam/erl_trace.c
index d2495479ab..018894f685 100644
--- a/erts/emulator/beam/erl_trace.c
+++ b/erts/emulator/beam/erl_trace.c
@@ -2533,7 +2533,7 @@ load_tracer_nif(const ErtsTracer tracer)
 
     for(i = 0; i < num_of_funcs; i++) {
         for (j = 0; j < NIF_TRACER_TYPES; j++) {
-            if (strcmp(tracers[j].name, funcs[i].name) == 0 && tracers[j].arity == funcs[i].arity) {
+            if (sys_strcmp(tracers[j].name, funcs[i].name) == 0 && tracers[j].arity == funcs[i].arity) {
                 tracers[j].cb = &(funcs[i]);
                 break;
             }
@@ -3019,7 +3019,7 @@ static void *tracer_alloc_fun(void* tmpl)
     ErtsTracerNif *obj = erts_alloc(ERTS_ALC_T_TRACER_NIF,
                                     sizeof(ErtsTracerNif) +
                                     sizeof(ErtsThrPrgrLaterOp));
-    memcpy(obj, tmpl, sizeof(*obj));
+    sys_memcpy(obj, tmpl, sizeof(*obj));
     return obj;
 }
 
diff --git a/erts/emulator/beam/erl_unicode.c b/erts/emulator/beam/erl_unicode.c
index 604f0be127..8673e029e6 100644
--- a/erts/emulator/beam/erl_unicode.c
+++ b/erts/emulator/beam/erl_unicode.c
@@ -144,7 +144,7 @@ static Eterm make_magic_bin_for_restart(Process *p, RestartContext *rc)
 					   cleanup_restart_context_bin);
     RestartContext *restartp = ERTS_MAGIC_BIN_DATA(mbp);
     Eterm *hp;
-    memcpy(restartp,rc,sizeof(RestartContext));
+    sys_memcpy(restartp,rc,sizeof(RestartContext));
     hp = HAlloc(p, ERTS_MAGIC_REF_THING_SIZE);
     return erts_mk_magic_ref(&hp, &MSO(p), mbp);
 }
@@ -254,12 +254,12 @@ static Uint copy_utf8_bin(byte *target, byte *source, Uint size,
 	ASSERT(need > 0);
 	ASSERT(from_source > 0);
 	if (size < from_source) {
-	    memcpy(leftover + (*num_leftovers), source, size);
+	    sys_memcpy(leftover + (*num_leftovers), source, size);
 	    *num_leftovers += size;
 	    return 0;
 	}
 	/* leftover has room for four bytes (see bif) */
-	memcpy(leftover + (*num_leftovers),source,from_source);
+	sys_memcpy(leftover + (*num_leftovers),source,from_source);
 	c = copy_utf8_bin(target, leftover, need, NULL, NULL, &tmp_err_pos, characters);
 	if (tmp_err_pos != 0) {
 	    *err_pos = source;
@@ -291,7 +291,7 @@ static Uint copy_utf8_bin(byte *target, byte *source, Uint size,
 	    size -= 2; copied += 2;
 	} else if (((*source) & ((byte) 0xF0)) == 0xE0) {
 	    if (leftover && size < 3) {
-		memcpy(leftover, source, (int) size);
+		sys_memcpy(leftover, source, (int) size);
 		*num_leftovers = (int) size;
 		break;
 	    }
@@ -313,7 +313,7 @@ static Uint copy_utf8_bin(byte *target, byte *source, Uint size,
 	    size -= 3; copied += 3;
 	} else if (((*source) & ((byte) 0xF8)) == 0xF0) {
 	    if (leftover && size < 4) {
-		memcpy(leftover, source, (int) size);
+		sys_memcpy(leftover, source, (int) size);
 		*num_leftovers = (int) size;
 		break;
 	    }
@@ -2108,7 +2108,7 @@ char *erts_convert_filename_to_encoding(Eterm name, char *statbuf, size_t statbu
 	    } else {
 		name_buf = statbuf;
 	    }
-	    memcpy(name_buf,bytes,size);
+	    sys_memcpy(name_buf,bytes,size);
 	    name_buf[size]=0;
 	} else {
             name_buf = erts_convert_filename_to_wchar(bytes, size,
diff --git a/erts/emulator/beam/erl_utils.h b/erts/emulator/beam/erl_utils.h
index 44d8c85867..e4087e0ac8 100644
--- a/erts/emulator/beam/erl_utils.h
+++ b/erts/emulator/beam/erl_utils.h
@@ -91,7 +91,7 @@ Eterm erts_bld_tuple(Uint **hpp, Uint *szp, Uint arity, ...);
 #define erts_bld_tuple5(H,S,E1,E2,E3,E4,E5) erts_bld_tuple(H,S,5,E1,E2,E3,E4,E5)
 Eterm erts_bld_tuplev(Uint **hpp, Uint *szp, Uint arity, Eterm terms[]);
 Eterm erts_bld_string_n(Uint **hpp, Uint *szp, const char *str, Sint len);
-#define erts_bld_string(hpp,szp,str) erts_bld_string_n(hpp,szp,str,strlen(str))
+#define erts_bld_string(hpp,szp,str) erts_bld_string_n(hpp,szp,str,sys_strlen(str))
 Eterm erts_bld_list(Uint **hpp, Uint *szp, Sint length, Eterm terms[]);
 Eterm erts_bld_2tup_list(Uint **hpp, Uint *szp,
 			 Sint length, Eterm terms1[], Uint terms2[]);
diff --git a/erts/emulator/beam/erl_vm.h b/erts/emulator/beam/erl_vm.h
index 76980b5871..f8391fb665 100644
--- a/erts/emulator/beam/erl_vm.h
+++ b/erts/emulator/beam/erl_vm.h
@@ -69,7 +69,7 @@
 #  ifdef CHECK_FOR_HOLES
 #    define INIT_HEAP_MEM(p,sz) erts_set_hole_marker(HEAP_TOP(p), (sz))
 #  else
-#    define INIT_HEAP_MEM(p,sz) memset(HEAP_TOP(p),0x01,(sz)*sizeof(Eterm*))
+#    define INIT_HEAP_MEM(p,sz) sys_memset(HEAP_TOP(p),0x01,(sz)*sizeof(Eterm*))
 #  endif
 #else
 #  define INIT_HEAP_MEM(p,sz) ((void)0)
diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c
index b12a021e41..a5d752a3d0 100644
--- a/erts/emulator/beam/external.c
+++ b/erts/emulator/beam/external.c
@@ -1953,7 +1953,7 @@ static Eterm erts_term_to_binary_int(Process* p, Eterm Term, int level, Uint fla
 	    context_b = erts_create_magic_binary(sizeof(TTBContext),    \
                                                  ttb_context_destructor);   \
 	    context =  ERTS_MAGIC_BIN_DATA(context_b);			\
-	    memcpy(context,&c_buff,sizeof(TTBContext));			\
+	    sys_memcpy(context,&c_buff,sizeof(TTBContext));			\
 	}								\
     } while (0)
 
diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h
index d757651933..0f23027752 100644
--- a/erts/emulator/beam/global.h
+++ b/erts/emulator/beam/global.h
@@ -368,7 +368,7 @@ do {\
 	UWord _wsz = ESTACK_COUNT(s);\
 	(dst)->start = erts_alloc((s).alloc_type,\
 				  DEF_ESTACK_SIZE * sizeof(Eterm));\
-	memcpy((dst)->start, (s).start,_wsz*sizeof(Eterm));\
+	sys_memcpy((dst)->start, (s).start,_wsz*sizeof(Eterm));\
 	(dst)->sp = (dst)->start + _wsz;\
 	(dst)->end = (dst)->start + DEF_ESTACK_SIZE;\
         (dst)->edefault = NULL;\
@@ -536,7 +536,7 @@ do {\
 	UWord _wsz = WSTACK_COUNT(s);\
 	(dst)->wstart = erts_alloc(s.alloc_type,\
 				  DEF_WSTACK_SIZE * sizeof(UWord));\
-	memcpy((dst)->wstart, s.wstart,_wsz*sizeof(UWord));\
+	sys_memcpy((dst)->wstart, s.wstart,_wsz*sizeof(UWord));\
 	(dst)->wsp = (dst)->wstart + _wsz;\
 	(dst)->wend = (dst)->wstart + DEF_WSTACK_SIZE;\
         (dst)->wdefault = NULL;\
diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c
index 4bb2c0cb01..1ae914c5bf 100644
--- a/erts/emulator/beam/io.c
+++ b/erts/emulator/beam/io.c
@@ -584,7 +584,7 @@ erts_open_driver(erts_driver_t* driver,	/* Pointer to driver. */
 	     */
 	    
 	    for (d = driver_list; d; d = d->next) {
-		if (strcmp(d->name, name) == 0 && 
+		if (sys_strcmp(d->name, name) == 0 && 
 		    erts_ddll_driver_ok(d->handle)) {
 		    driver = d;
 		    break;
@@ -634,7 +634,7 @@ erts_open_driver(erts_driver_t* driver,	/* Pointer to driver. */
 	trace_port_open(port,
 			pid,
 			erts_atom_put((byte *) port->name,
-				      strlen(port->name),
+				      sys_strlen(port->name),
 				      ERTS_ATOM_ENC_LATIN1,
 				      1));
     }
@@ -2925,7 +2925,7 @@ erl_drv_init_ack(ErlDrvPort ix, ErlDrvData res) {
             break;
         case -2: {
             char *str = erl_errno_id(errno);
-            resp = erts_atom_put((byte *) str, strlen(str),
+            resp = erts_atom_put((byte *) str, sys_strlen(str),
                                  ERTS_ATOM_ENC_LATIN1, 1);
             break;
         }
@@ -7320,7 +7320,7 @@ int driver_failure_atom(ErlDrvPort ix, char* string)
 {
     return driver_failure_term(ix,
 			       erts_atom_put((byte *) string,
-					     strlen(string),
+					     sys_strlen(string),
 					     ERTS_ATOM_ENC_LATIN1,
 					     1),
 			       0);
diff --git a/erts/emulator/beam/lttng-wrapper.h b/erts/emulator/beam/lttng-wrapper.h
index 0bc75c1552..e7f2971bf7 100644
--- a/erts/emulator/beam/lttng-wrapper.h
+++ b/erts/emulator/beam/lttng-wrapper.h
@@ -61,13 +61,13 @@
 #define lttng_proc_to_mfa_str(p, Name)                              \
     do {                                                            \
         if (ERTS_PROC_IS_EXITING((p))) {                            \
-            strcpy(Name, "<exiting>");                              \
+            sys_strcpy(Name, "<exiting>");                              \
         } else {                                                    \
             BeamInstr *_fptr = find_function_from_pc((p)->i);       \
             if (_fptr) {                                            \
                 lttng_mfa_to_str(_fptr[0],_fptr[1],_fptr[2], Name); \
             } else {                                                \
-                strcpy(Name, "<unknown>");                          \
+                sys_strcpy(Name, "<unknown>");                          \
             }                                                       \
         }                                                           \
     } while(0)
diff --git a/erts/emulator/beam/packet_parser.c b/erts/emulator/beam/packet_parser.c
index f14910bc72..de1d481105 100644
--- a/erts/emulator/beam/packet_parser.c
+++ b/erts/emulator/beam/packet_parser.c
@@ -200,7 +200,7 @@ static int http_init(void)
     for (i = 0; i < HTTP_HDR_HASH_SIZE; i++)
         http_hdr_hash[i] = NULL;
     for (i = 0; http_hdr_strings[i] != NULL; i++) {
-        ASSERT(strlen(http_hdr_strings[i]) <= HTTP_MAX_NAME_LEN);
+        ASSERT(sys_strlen(http_hdr_strings[i]) <= HTTP_MAX_NAME_LEN);
         http_hdr_table[i].index = i;
         http_hash_insert(http_hdr_strings[i], 
                          &http_hdr_table[i], 
@@ -516,7 +516,7 @@ static http_atom_t* http_hash_lookup(const char* name, int len,
 
     while (ap != NULL) {
         if ((ap->h == h) && (ap->len == len) && 
-            (strncmp(ap->name, name, len) == 0))
+            (sys_strncmp(ap->name, name, len) == 0))
             return ap;
         ap = ap->next;
     }
@@ -656,7 +656,7 @@ int packet_parse_http(const char* buf, int len, int* statep,
     if (*statep == 0) {
         /* start-line = Request-Line | Status-Line */
 
-        if (n >= 5 && (strncmp(buf, "HTTP/", 5) == 0)) {
+        if (n >= 5 && (sys_strncmp(buf, "HTTP/", 5) == 0)) {
             int major  = 0;
             int minor  = 0;
             int status = 0;
@@ -750,7 +750,7 @@ int packet_parse_http(const char* buf, int len, int* statep,
             }
             if (n < 8)
                 return -1;
-            if (strncmp(ptr, "HTTP/", 5) != 0)
+            if (sys_strncmp(ptr, "HTTP/", 5) != 0)
                 return -1;
             ptr += 5;
             n   -= 5;
-- 
2.16.2