diff options
-rw-r--r-- | src/jsifier.js | 2 | ||||
-rw-r--r-- | src/library.js | 1 | ||||
-rw-r--r-- | src/preamble.js | 8 | ||||
-rw-r--r-- | tests/runner.py | 1 |
4 files changed, 10 insertions, 2 deletions
diff --git a/src/jsifier.js b/src/jsifier.js index 806ea577..07a68adf 100644 --- a/src/jsifier.js +++ b/src/jsifier.js @@ -155,7 +155,7 @@ function JSify(data, functionsOnly, givenTypes, givenFunctions, givenGlobalVaria // Null is special-cased: We copy over all heaps return 'IHEAP[' + dest + '+' + destPos + '] = IHEAP[' + src + '+' + srcPos + ']; ' + 'FHEAP[' + dest + '+' + destPos + '] = FHEAP[' + src + '+' + srcPos + ']; ' + - (SAFE_HEAP ? 'SAFE_HEAP_ACCESS(' + dest + ' + ' + destPos + ', null, true)' : ''); + (SAFE_HEAP ? 'SAFE_HEAP_COPY_HISTORY(' + dest + ' + ' + destPos + ', ' + src + ' + ' + srcPos + ')' : ''); } function makeEmptyStruct(type) { diff --git a/src/library.js b/src/library.js index 4b315a9e..cc8fe45f 100644 --- a/src/library.js +++ b/src/library.js @@ -547,7 +547,6 @@ var Library = { // TODO: optimize for the typed arrays case // || 0, since memcpy sometimes copies uninitialized areas XXX: Investigate why initializing alloc'ed memory does not fix that too {{{ makeCopyValue('dest', 'i', 'src', 'i', 'null', ' || 0') }}}; - // XXX Try copying the safe-heap type info, instead of using null } }, llvm_memcpy_i32: 'memcpy', diff --git a/src/preamble.js b/src/preamble.js index 38c18f35..30c34d4f 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -17,6 +17,14 @@ function SAFE_HEAP_CLEAR(dest) { } var SAFE_HEAP_ERRORS = 0; var ACCEPTABLE_SAFE_HEAP_ERRORS = 0; + +function SAFE_HEAP_COPY_HISTORY(dest, src) { + HEAP_HISTORY[dest] = HEAP_HISTORY[src]; +#if SAFE_HEAP_LOG + print('copy history: ' + dest + ' [' + HEAP_HISTORY[dest] + '] from ' + src); +#endif +} + function SAFE_HEAP_ACCESS(dest, type, store) { #if SAFE_HEAP_LOG //if (dest === A_NUMBER) print ([dest, type, store] + ' ' + new Error().stack); // Something like this may be useful, in debugging diff --git a/tests/runner.py b/tests/runner.py index d3a16065..23614cf0 100644 --- a/tests/runner.py +++ b/tests/runner.py @@ -1510,6 +1510,7 @@ if 'benchmark' not in sys.argv: def test_lua(self): # Overflows in luaS_newlstr hash loop + global SAFE_HEAP; SAFE_HEAP = 0 # Has various warnings, with copied HEAP_HISTORY values (fixed if we copy 'null' as the type) global CORRECT_OVERFLOWS; CORRECT_OVERFLOWS = 1 self.do_ll_test(path_from_root('tests', 'lua', 'lua.ll'), |