Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1301)

Unified Diff: src/x64/macro-assembler-x64.h

Issue 6347067: Fix potential overwriting of debug jumps of following code. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge/build-x64
Patch Set: Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/x64/macro-assembler-x64.h
diff --git a/src/x64/macro-assembler-x64.h b/src/x64/macro-assembler-x64.h
index 35369118751d8ff4faca4577305cd0f101e9a296..195ee364e1d4d47e3b060af618b2319f96fa076d 100644
--- a/src/x64/macro-assembler-x64.h
+++ b/src/x64/macro-assembler-x64.h
@@ -74,7 +74,7 @@ class MacroAssembler: public Assembler {
void LoadRoot(Register destination, Heap::RootListIndex index);
void CompareRoot(Register with, Heap::RootListIndex index);
- void CompareRoot(Operand with, Heap::RootListIndex index);
+ void CompareRoot(const Operand& with, Heap::RootListIndex index);
void PushRoot(Heap::RootListIndex index);
void StoreRoot(Register source, Heap::RootListIndex index);
@@ -596,6 +596,12 @@ class MacroAssembler: public Assembler {
void Call(ExternalReference ext);
void Call(Handle<Code> code_object, RelocInfo::Mode rmode);
+ // Emit call to the code we are currently generating.
+ void CallSelf() {
+ Handle<Code> self(reinterpret_cast<Code**>(CodeObject().location()));
+ Call(self, RelocInfo::CODE_TARGET);
+ }
+
// Non-x64 instructions.
// Push/pop all general purpose registers.
// Does not push rsp/rbp nor any of the assembler's special purpose registers
@@ -1772,6 +1778,23 @@ void MacroAssembler::InvokePrologue(const ParameterCount& expected,
}
+// Ensures that code is padded to at least a given size.
+class Padding BASE_EMBEDDED {
+ public:
+ Padding(Assembler* masm, int min_size)
+ : masm_(masm), min_end_offset_(masm->pc_offset() + min_size) { }
+ ~Padding() {
+ int offset = masm_->pc_offset();
+ if (offset < min_end_offset_) {
+ masm_->Pad(min_end_offset_ - offset);
+ }
+ }
+ private:
+ Assembler* masm_;
+ int min_end_offset_;
+};
+
+
} } // namespace v8::internal
#endif // V8_X64_MACRO_ASSEMBLER_X64_H_

Powered by Google App Engine
This is Rietveld 408576698