Force abc to align memory to 8 bytes
authorRobert Ou <rqou@robertou.com>
Sat, 19 May 2018 05:45:43 +0000 (22:45 -0700)
committerRobert Ou <rqou@robertou.com>
Sat, 19 May 2018 05:53:52 +0000 (22:53 -0700)
Apparently abc has a memory pool implementation that by default returns
memory that is unaligned. There is a workaround in the abc makefile that
uses uname to look for "arm" specifically and then sets the alignment.
However, ARM is not the only platform that requires proper alignment
(e.g. emscripten does too). For now, pessimistically force the alignment
for 8 bytes all the time (somehow 4 wasn't enough for fixing emscripten
despite being approximately a 32-bit platform).

Makefile

index 1a17bb857211f756f715708a9d334a604c2cf5a1..ef838624ac3a671703409f93422f29860ab7081f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -164,7 +164,7 @@ else ifeq ($(CONFIG),emcc)
 CXX = emcc
 LD = emcc
 CXXFLAGS := -std=c++11 $(filter-out -fPIC -ggdb,$(CXXFLAGS))
-ABCMKARGS += ARCHFLAGS="-DABC_USE_STDINT_H"
+ABCMKARGS += ARCHFLAGS="-DABC_USE_STDINT_H -DABC_MEMALIGN=8"
 EMCCFLAGS := -Os -Wno-warn-absolute-paths
 EMCCFLAGS += --memory-init-file 0 --embed-file share -s NO_EXIT_RUNTIME=1
 EMCCFLAGS += -s EXPORTED_FUNCTIONS="['_main','_run','_prompt','_errmsg']"