summaryrefslogtreecommitdiff
path: root/patches/remove-vanilla-alloc.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/remove-vanilla-alloc.patch')
-rw-r--r--patches/remove-vanilla-alloc.patch237
1 files changed, 237 insertions, 0 deletions
diff --git a/patches/remove-vanilla-alloc.patch b/patches/remove-vanilla-alloc.patch
new file mode 100644
index 0000000..b7aafc8
--- /dev/null
+++ b/patches/remove-vanilla-alloc.patch
@@ -0,0 +1,237 @@
+# HG changeset patch
+# User Nicholas Nethercote <nnethercote@mozilla.com>
+# Date 1383798497 -39600
+# Thu Nov 07 15:28:17 2013 +1100
+# Node ID fcfdc49d52489b12a4e724ce52b2009ff32d8bc0
+# Parent 8aa6d9c79371db8e92214025cbfa5f116a607c07
+Bug 634417 - Remove inappropriate uses of vanilla malloc/calloc/realloc/free/strdup from SpiderMonkey.
+
+diff --git a/js/public/Utility.h b/js/public/Utility.h
+--- a/js/public/Utility.h
++++ b/js/public/Utility.h
+@@ -110,6 +110,8 @@ PrintBacktrace()
+ fprintf(stderr, "#%d %s\n", OOM_traceIdx, OOM_traceSymbols[OOM_traceIdx]);
+ }
+
++ // This must be free(), not js_free(), because backtrace_symbols()
++ // allocates with malloc().
+ free(OOM_traceSymbols);
+ }
+
+diff --git a/js/src/TraceLogging.cpp b/js/src/TraceLogging.cpp
+--- a/js/src/TraceLogging.cpp
++++ b/js/src/TraceLogging.cpp
+@@ -104,7 +104,7 @@ TraceLogging::~TraceLogging()
+
+ if (entries != NULL) {
+ flush();
+- free(entries);
++ js_free(entries);
+ entries = NULL;
+ }
+ }
+@@ -112,7 +112,7 @@ TraceLogging::~TraceLogging()
+ void
+ TraceLogging::grow()
+ {
+- Entry* nentries = (Entry*) realloc(entries, numEntries*2*sizeof(Entry));
++ Entry* nentries = (Entry*) js_realloc(entries, numEntries*2*sizeof(Entry));
+
+ // Allocating a bigger array failed.
+ // Keep using the current storage, but remove all entries by flushing them.
+@@ -132,7 +132,7 @@ TraceLogging::log(Type type, const char*
+
+ // Create array containing the entries if not existing.
+ if (entries == NULL) {
+- entries = (Entry*) malloc(numEntries*sizeof(Entry));
++ entries = (Entry*) js_malloc(numEntries*sizeof(Entry));
+ if (entries == NULL)
+ return;
+ }
+@@ -214,7 +214,7 @@ TraceLogging::flush()
+ }
+
+ if (entries[i].file() != NULL) {
+- free(entries[i].file());
++ js_free(entries[i].file());
+ entries[i].file_ = NULL;
+ }
+ }
+diff --git a/js/src/assembler/assembler/AssemblerBuffer.h b/js/src/assembler/assembler/AssemblerBuffer.h
+--- a/js/src/assembler/assembler/AssemblerBuffer.h
++++ b/js/src/assembler/assembler/AssemblerBuffer.h
+@@ -73,7 +73,7 @@ namespace JSC {
+ ~AssemblerBuffer()
+ {
+ if (m_buffer != m_inlineBuffer)
+- free(m_buffer);
++ js_free(m_buffer);
+ }
+
+ void ensureSpace(int space)
+@@ -225,7 +225,7 @@ namespace JSC {
+ }
+
+ if (m_buffer == m_inlineBuffer) {
+- newBuffer = static_cast<char*>(malloc(newCapacity));
++ newBuffer = static_cast<char*>(js_malloc(newCapacity));
+ if (!newBuffer) {
+ m_size = 0;
+ m_oom = true;
+@@ -233,7 +233,7 @@ namespace JSC {
+ }
+ memcpy(newBuffer, m_buffer, m_size);
+ } else {
+- newBuffer = static_cast<char*>(realloc(m_buffer, newCapacity));
++ newBuffer = static_cast<char*>(js_realloc(m_buffer, newCapacity));
+ if (!newBuffer) {
+ m_size = 0;
+ m_oom = true;
+diff --git a/js/src/assembler/assembler/AssemblerBufferWithConstantPool.h b/js/src/assembler/assembler/AssemblerBufferWithConstantPool.h
+--- a/js/src/assembler/assembler/AssemblerBufferWithConstantPool.h
++++ b/js/src/assembler/assembler/AssemblerBufferWithConstantPool.h
+@@ -106,14 +106,14 @@ public:
+ , m_lastConstDelta(0)
+ , m_flushCount(0)
+ {
+- m_pool = static_cast<uint32_t*>(malloc(maxPoolSize));
+- m_mask = static_cast<char*>(malloc(maxPoolSize / sizeof(uint32_t)));
++ m_pool = static_cast<uint32_t*>(js_malloc(maxPoolSize));
++ m_mask = static_cast<char*>(js_malloc(maxPoolSize / sizeof(uint32_t)));
+ }
+
+ ~AssemblerBufferWithConstantPool()
+ {
+- free(m_mask);
+- free(m_pool);
++ js_free(m_mask);
++ js_free(m_pool);
+ }
+
+ void ensureSpace(int space)
+diff --git a/js/src/builtin/Profilers.cpp b/js/src/builtin/Profilers.cpp
+--- a/js/src/builtin/Profilers.cpp
++++ b/js/src/builtin/Profilers.cpp
+@@ -498,10 +498,15 @@ JSBool js_StartPerf()
+ flags = "--call-graph";
+ }
+
+- // Split |flags| on spaces. (Don't bother to free it -- we're going to
++ char *flags2 = (char *)js_malloc(strlen(flags) + 1);
++ if (!flags2)
++ return false;
++ strcpy(flags2, flags);
++
++ // Split |flags2| on spaces. (Don't bother to free it -- we're going to
+ // exec anyway.)
+ char *toksave;
+- char *tok = strtok_r(strdup(flags), " ", &toksave);
++ char *tok = strtok_r(flags2, " ", &toksave);
+ while (tok) {
+ args.append(tok);
+ tok = strtok_r(NULL, " ", &toksave);
+diff --git a/js/src/jit/AsmJS.cpp b/js/src/jit/AsmJS.cpp
+--- a/js/src/jit/AsmJS.cpp
++++ b/js/src/jit/AsmJS.cpp
+@@ -1172,7 +1172,7 @@ class MOZ_STACK_CLASS ModuleCompiler
+ JS_ASSERT(str);
+ JS_ASSERT(pn);
+ errorNode_ = pn;
+- errorString_ = strdup(str);
++ errorString_ = js_strdup(cx_, str);
+ return false;
+ }
+
+diff --git a/js/src/jit/MIR.cpp b/js/src/jit/MIR.cpp
+--- a/js/src/jit/MIR.cpp
++++ b/js/src/jit/MIR.cpp
+@@ -642,7 +642,7 @@ MPhi::reserveLength(size_t length)
+ {
+ // Initializes a new MPhi to have an Operand vector of at least the given
+ // capacity. This permits use of addInput() instead of addInputSlow(), the
+- // latter of which may call realloc().
++ // latter of which may call realloc_().
+ JS_ASSERT(numOperands() == 0);
+ #if DEBUG
+ capacity_ = length;
+@@ -788,7 +788,7 @@ MPhi::addInputSlow(MDefinition *ins, boo
+ uint32_t index = inputs_.length();
+ bool performingRealloc = !inputs_.canAppendWithoutRealloc(1);
+
+- // Remove all MUses from all use lists, in case realloc() moves.
++ // Remove all MUses from all use lists, in case realloc_() moves.
+ if (performingRealloc) {
+ for (uint32_t i = 0; i < index; i++) {
+ MUse *use = &inputs_[i];
+diff --git a/js/src/jit/MIR.h b/js/src/jit/MIR.h
+--- a/js/src/jit/MIR.h
++++ b/js/src/jit/MIR.h
+@@ -3677,7 +3677,7 @@ class MPhi : public MDefinition, public
+ // Use only if capacity has been reserved by reserveLength
+ void addInput(MDefinition *ins);
+
+- // Appends a new input to the input vector. May call realloc().
++ // Appends a new input to the input vector. May call realloc_().
+ // Prefer reserveLength() and addInput() instead, where possible.
+ bool addInputSlow(MDefinition *ins, bool *ptypeChange = NULL);
+
+diff --git a/js/src/jsprf.cpp b/js/src/jsprf.cpp
+--- a/js/src/jsprf.cpp
++++ b/js/src/jsprf.cpp
+@@ -368,7 +368,7 @@ cvt_ws(SprintfState *ss, const jschar *w
+ int result;
+ /*
+ * Supply NULL as the JSContext; errors are not reported,
+- * and malloc() is used to allocate the buffer buffer.
++ * and js_malloc() is used to allocate the buffer buffer.
+ */
+ if (ws) {
+ size_t wslen = js_strlen(ws);
+@@ -443,7 +443,7 @@ static struct NumArgState* BuildArgArray
+
+
+ if( number > NAS_DEFAULT_NUM ){
+- nas = (struct NumArgState*)malloc( number * sizeof( struct NumArgState ) );
++ nas = (struct NumArgState*)js_malloc( number * sizeof( struct NumArgState ) );
+ if( !nas ){
+ *rv = -1;
+ return NULL;
+@@ -1038,7 +1038,7 @@ JS_PUBLIC_API(uint32_t) JS_vsxprintf(JSS
+ }
+
+ /*
+-** Stuff routine that automatically grows the malloc'd output buffer
++** Stuff routine that automatically grows the js_malloc'd output buffer
+ ** before it overflows.
+ */
+ static int GrowStuff(SprintfState *ss, const char *sp, uint32_t len)
+@@ -1075,7 +1075,7 @@ static int GrowStuff(SprintfState *ss, c
+ }
+
+ /*
+-** sprintf into a malloc'd buffer
++** sprintf into a js_malloc'd buffer
+ */
+ JS_PUBLIC_API(char *) JS_smprintf(const char *fmt, ...)
+ {
+diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
+--- a/js/src/shell/js.cpp
++++ b/js/src/shell/js.cpp
+@@ -284,7 +284,7 @@ GetLine(FILE *file, const char * prompt)
+ }
+ if (len + 1 == size) {
+ size = size * 2;
+- char *tmp = (char *) realloc(buffer, size);
++ char *tmp = (char *) js_realloc(buffer, size);
+ if (!tmp) {
+ free(buffer);
+ return NULL;
+@@ -329,7 +329,7 @@ NewContextData()
+ return NULL;
+
+ JSShellContextData *data = (JSShellContextData *)
+- calloc(sizeof(JSShellContextData), 1);
++ js_calloc(sizeof(JSShellContextData), 1);
+ if (!data)
+ return NULL;
+ data->startTime = PRMJ_Now();