From: ulan@chromium.org Date: Thu, 20 Mar 2014 09:10:15 +0000 (+0000) Subject: A64: clean up pending reloc info if code generation was aborted. X-Git-Tag: upstream/4.7.83~10144 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f7dc76af6da23002aca4a202e31ec4246bca2b91;p=platform%2Fupstream%2Fv8.git A64: clean up pending reloc info if code generation was aborted. This fixes assertion failure in destructor of Assembler. BUG=352659 LOG=N R=jochen@chromium.org Review URL: https://codereview.chromium.org/206213002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20100 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/a64/assembler-a64.h b/src/a64/assembler-a64.h index c4a0260..3da4382 100644 --- a/src/a64/assembler-a64.h +++ b/src/a64/assembler-a64.h @@ -743,6 +743,10 @@ class Assembler : public AssemblerBase { virtual ~Assembler(); + virtual void AbortedCodeGeneration() { + num_pending_reloc_info_ = 0; + } + // System functions --------------------------------------------------------- // Start generating code from the beginning of the buffer, discarding any code // and data that has already been emitted into the buffer. diff --git a/src/assembler.h b/src/assembler.h index 5a00d44..4d46a25 100644 --- a/src/assembler.h +++ b/src/assembler.h @@ -82,6 +82,10 @@ class AssemblerBase: public Malloced { int pc_offset() const { return static_cast(pc_ - buffer_); } + // This function is called when code generation is aborted, so that + // the assembler could clean up internal data structures. + virtual void AbortedCodeGeneration() { } + static const int kMinimalBufferSize = 4*KB; protected: diff --git a/src/lithium.cc b/src/lithium.cc index 9ccdc7a..24b4d1b 100644 --- a/src/lithium.cc +++ b/src/lithium.cc @@ -446,6 +446,7 @@ Handle LChunk::Codegen() { CodeGenerator::PrintCode(code, info()); return code; } + assembler.AbortedCodeGeneration(); return Handle::null(); }