aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <azakai@mozilla.com>2011-02-06 11:32:38 -0800
committerAlon Zakai <azakai@mozilla.com>2011-02-06 11:32:38 -0800
commitfd1b1d81d1a1542ec148ed39adc466b7f736a2b5 (patch)
treef7bdf2e37aa03f3f37007da7d4e537cebd827f65 /src
parentd2ba2dcfc11846ec1f9a36c93055a7500a93f669 (diff)
strengthen SAFE_HEAP checks for copied values
Diffstat (limited to 'src')
-rw-r--r--src/jsifier.js2
-rw-r--r--src/library.js1
-rw-r--r--src/preamble.js8
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