File 6291-erts-Add-ErtsInBetween.patch of Package erlang

From 84ec961084952b8dd423d2b6cdc88e0f360935a8 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Fri, 4 Mar 2022 14:04:06 +0100
Subject: [PATCH 1/4] erts: Add ErtsInBetween

---
 erts/emulator/beam/erl_bif_trace.c | 3 +--
 erts/emulator/beam/erl_bits.c      | 7 +++----
 erts/emulator/beam/sys.h           | 3 +++
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/erts/emulator/beam/erl_bif_trace.c b/erts/emulator/beam/erl_bif_trace.c
index ce83101cde..9ea80d6dc0 100644
--- a/erts/emulator/beam/erl_bif_trace.c
+++ b/erts/emulator/beam/erl_bif_trace.c
@@ -1859,8 +1859,7 @@ new_seq_trace_token(Process* p, int ensure_new_heap)
         Uint mature_size = p->high_water - mature;
         Eterm* tpl = tuple_val(SEQ_TRACE_TOKEN(p));
         ASSERT(arityval(tpl[0]) == 5);
-        if (ErtsInArea(tpl, OLD_HEAP(p),
-                       (OLD_HEND(p) - OLD_HEAP(p))*sizeof(Eterm)) ||
+        if (ErtsInBetween(tpl, OLD_HEAP(p), OLD_HEND(p)) ||
             ErtsInArea(tpl, mature, mature_size*sizeof(Eterm))) {
             hp = HAlloc(p, 6);
             sys_memcpy(hp, tpl, 6*sizeof(Eterm));
diff --git a/erts/emulator/beam/erl_bits.c b/erts/emulator/beam/erl_bits.c
index e23d8d7697..108842a54f 100644
--- a/erts/emulator/beam/erl_bits.c
+++ b/erts/emulator/beam/erl_bits.c
@@ -1380,8 +1380,7 @@ static ERTS_INLINE
 void increase_proc_bin_sz(Process* p, ProcBin* pb, Uint new_size)
 {
     if (new_size > pb->size) {
-        if (ErtsInArea(pb, OLD_HEAP(p), ((OLD_HTOP(p) - OLD_HEAP(p))
-                                         * sizeof(Eterm)))) {
+        if (ErtsInBetween(pb, OLD_HEAP(p), OLD_HTOP(p))) {
             BIN_OLD_VHEAP(p) += (new_size / sizeof(Eterm) -
                                  pb->size / sizeof(Eterm));
         }
@@ -1734,8 +1733,8 @@ erts_bs_private_append_checked(Process* p, Eterm bin, Uint build_size_in_bits, U
             sys_memcpy(bptr->orig_bytes, binp->orig_bytes, binp->orig_size);
 
             /* If the subbinary is on the mature or old heap, we need to also move it */
-            if (ErtsInArea(sb, OLD_HEAP(p), ((char *)OLD_HTOP(p)) - ((char *)OLD_HEAP(p))) ||
-                ErtsInArea(sb, HEAP_START(p), ((char *)HIGH_WATER(p)) - ((char *)HEAP_START(p)))) {
+            if (ErtsInBetween(sb, OLD_HEAP(p), OLD_HTOP(p)) ||
+                ErtsInBetween(sb, HEAP_START(p), HIGH_WATER(p))) {
                 sz += ERL_SUB_BIN_SIZE;
             }
 
diff --git a/erts/emulator/beam/sys.h b/erts/emulator/beam/sys.h
index cdbd943367..ab867b3fe8 100644
--- a/erts/emulator/beam/sys.h
+++ b/erts/emulator/beam/sys.h
@@ -105,6 +105,9 @@
 #define ErtsInArea(ptr,start,nbytes) \
     ((UWord)((char*)(ptr) - (char*)(start)) < (nbytes))
 
+#define ErtsInBetween(ptr,start,end) \
+    ErtsInArea(ptr, start, (char*)(end) - (char*)(start))
+
 #define ErtsContainerStruct(ptr, type, member) \
     ((type *)((char *)(1 ? (ptr) : &((type *)0)->member) - offsetof(type, member)))
 
-- 
2.34.1

openSUSE Build Service is sponsored by