aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2015-03-13 18:00:33 +0100
committerBjörn-Egil Dahlberg <[email protected]>2015-03-19 14:57:55 +0100
commit12fc63bcaf68b4a9e89ce91e1235aafb8bcdaee5 (patch)
tree363b5869c15006c4e4cddd314a17978cc4cc4ea7
parentb91daf163f146c9f787957ad593b20caea1b647b (diff)
downloadotp-12fc63bcaf68b4a9e89ce91e1235aafb8bcdaee5.tar.gz
otp-12fc63bcaf68b4a9e89ce91e1235aafb8bcdaee5.tar.bz2
otp-12fc63bcaf68b4a9e89ce91e1235aafb8bcdaee5.zip
erts: Fix map bug in dec_term for 32-bit debug VM
Adding ERTS_SWORD_MAX to a pointer does not work as a way to disable a bound check. Remove the hp_end from ErtsHeapFactory as it isn't really used anyway.
-rw-r--r--erts/emulator/beam/erl_message.c1
-rw-r--r--erts/emulator/beam/erl_message.h2
-rw-r--r--erts/emulator/beam/external.c1
-rw-r--r--erts/emulator/beam/io.c1
4 files changed, 0 insertions, 5 deletions
diff --git a/erts/emulator/beam/erl_message.c b/erts/emulator/beam/erl_message.c
index e4cbd8477d..43a03c793e 100644
--- a/erts/emulator/beam/erl_message.c
+++ b/erts/emulator/beam/erl_message.c
@@ -1154,7 +1154,6 @@ Eterm* erts_produce_heap(ErtsHeapFactory* factory, Uint need, Uint xtra)
} else {
res = factory->hp;
factory->hp += need;
- ASSERT(factory->hp <= factory->hp_end);
}
return res;
}
diff --git a/erts/emulator/beam/erl_message.h b/erts/emulator/beam/erl_message.h
index ece75a5ee4..6b8c3cebc7 100644
--- a/erts/emulator/beam/erl_message.h
+++ b/erts/emulator/beam/erl_message.h
@@ -71,8 +71,6 @@ struct erl_heap_fragment {
typedef struct {
Process* p;
Eterm* hp;
- Eterm* hp_end;
- /* more to come... */
} ErtsHeapFactory;
Eterm* erts_produce_heap(ErtsHeapFactory*, Uint need, Uint xtra);
diff --git a/erts/emulator/beam/external.c b/erts/emulator/beam/external.c
index 65b4ae5412..9a5ef56c47 100644
--- a/erts/emulator/beam/external.c
+++ b/erts/emulator/beam/external.c
@@ -3905,7 +3905,6 @@ dec_term_atom_common:
factory.p = NULL;
factory.hp = hp;
/* We assume heap will suffice (see hashmap_over_estimated_heap_size) */
- factory.hp_end = hp + (ERTS_SWORD_MAX / sizeof(Eterm));
do {
*hamt->objp = erts_hashmap_from_array(&factory,
diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c
index b64854aac9..62254ca34d 100644
--- a/erts/emulator/beam/io.c
+++ b/erts/emulator/beam/io.c
@@ -5609,7 +5609,6 @@ driver_deliver_term(Eterm to, ErlDrvTermData* data, int len)
factory.p = NULL;
factory.hp = hp;
/* We assume heap will suffice (see hashmap_over_estimated_heap_size) */
- factory.hp_end = hp + (ERTS_SWORD_MAX / sizeof(Eterm));
mess = erts_hashmap_from_array(&factory, leafs, size, 1);