diff options
author | Alon Zakai <azakai@mozilla.com> | 2011-02-06 11:32:38 -0800 |
---|---|---|
committer | Alon Zakai <azakai@mozilla.com> | 2011-02-06 11:32:38 -0800 |
commit | fd1b1d81d1a1542ec148ed39adc466b7f736a2b5 (patch) | |
tree | f7bdf2e37aa03f3f37007da7d4e537cebd827f65 /src | |
parent | d2ba2dcfc11846ec1f9a36c93055a7500a93f669 (diff) |
strengthen SAFE_HEAP checks for copied values
Diffstat (limited to 'src')
-rw-r--r-- | src/jsifier.js | 2 | ||||
-rw-r--r-- | src/library.js | 1 | ||||
-rw-r--r-- | src/preamble.js | 8 |
3 files changed, 9 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 |