File 3741-erts-Add-erts_debug-copy_shared-2.patch of Package erlang

From 69383a0555e83fb31f1086bda132622f4469ee5a Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Wed, 13 Oct 2021 16:17:45 +0200
Subject: [PATCH 1/2] erts: Add erts_debug:copy_shared/2

with CopyLiterals boolean argument.
---
 erts/emulator/beam/beam_debug.c |  9 ++++++++-
 erts/emulator/beam/bif.tab      |  2 +-
 lib/kernel/src/erts_debug.erl   | 12 ++++++++++--
 3 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/erts/emulator/beam/beam_debug.c b/erts/emulator/beam/beam_debug.c
index a50ec46659..f8bc2af783 100644
--- a/erts/emulator/beam/beam_debug.c
+++ b/erts/emulator/beam/beam_debug.c
@@ -96,7 +96,7 @@ erts_debug_size_shared_1(BIF_ALIST_1)
 }
 
 BIF_RETTYPE
-erts_debug_copy_shared_1(BIF_ALIST_1)
+erts_debug_copy_shared_2(BIF_ALIST_2)
 {
     Process* p = BIF_P;
     Eterm term = BIF_ARG_1;
@@ -106,6 +106,13 @@ erts_debug_copy_shared_1(BIF_ALIST_1)
     erts_shcopy_t info;
     INITIALIZE_SHCOPY(info);
 
+    switch (BIF_ARG_2) {
+    case am_true: info.copy_literals = 1; break;
+    case am_false: info.copy_literals = 0; break;
+    default:
+        BIF_ERROR(p, BADARG);
+    }
+
     size = copy_shared_calculate(term, &info);
     if (size > 0) {
       hp = HAlloc(p, size);
diff --git a/erts/emulator/beam/bif.tab b/erts/emulator/beam/bif.tab
index 9ba49376dd..b460842049 100644
--- a/erts/emulator/beam/bif.tab
+++ b/erts/emulator/beam/bif.tab
@@ -665,7 +665,7 @@ bif erts_internal:purge_module/2
 bif binary:split/2
 bif binary:split/3
 bif erts_debug:size_shared/1
-bif erts_debug:copy_shared/1
+bif erts_debug:copy_shared/2
 bif erlang:has_prepared_code_on_load/1
 
 bif maps:take/2
diff --git a/lib/kernel/src/erts_debug.erl b/lib/kernel/src/erts_debug.erl
index b14dcadd4d..06d91d5faf 100644
--- a/lib/kernel/src/erts_debug.erl
+++ b/lib/kernel/src/erts_debug.erl
@@ -35,7 +35,8 @@
          flat_size/1, get_internal_state/1, instructions/0,
          interpreter_size/0,
          map_info/1, same/2, set_internal_state/2,
-         size_shared/1, copy_shared/1, dirty_cpu/2, dirty_io/2, dirty/3,
+         size_shared/1, copy_shared/1, copy_shared/2,
+         dirty_cpu/2, dirty_io/2, dirty/3,
          lcnt_control/1, lcnt_control/2, lcnt_collect/0, lcnt_clear/0,
          lc_graph/0, lc_graph_to_dot/2, lc_graph_merge/2,
          alloc_blocks_size/1]).
@@ -96,7 +97,14 @@ size_shared(_) ->
 -spec copy_shared(Term) -> term() when
       Term :: term().
 
-copy_shared(_) ->
+copy_shared(Term) ->
+    copy_shared(Term, false).
+
+-spec copy_shared(Term, CopyLiterals) -> term() when
+      Term :: term(),
+      CopyLiterals :: true | false.
+
+copy_shared(_, _) ->
     erlang:nif_error(undef).
 
 -spec get_internal_state(W) -> term() when
-- 
2.31.1

openSUSE Build Service is sponsored by