Index: runtime/vm/native_arguments.h |
diff --git a/runtime/vm/native_arguments.h b/runtime/vm/native_arguments.h |
index 88bc41135611556d53ee378e831bf7753b4f14ac..7035a50b53cfc1c87b2203d711f328c16343390b 100644 |
--- a/runtime/vm/native_arguments.h |
+++ b/runtime/vm/native_arguments.h |
@@ -25,7 +25,10 @@ class Thread; |
#if defined(TESTING) || defined(DEBUG) |
-#if defined(USING_SIMULATOR) |
+#if defined(TARGET_ARCH_DBC) |
+// C-stack is always aligned on DBC because we don't have any native code. |
+#define CHECK_STACK_ALIGNMENT |
+#elif defined(USING_SIMULATOR) |
#define CHECK_STACK_ALIGNMENT { \ |
uword current_sp = Simulator::Current()->get_register(SPREG); \ |
ASSERT(Utils::IsAligned(current_sp, OS::ActivationFrameAlignment())); \ |
@@ -92,7 +95,13 @@ class NativeArguments { |
RawObject* ArgAt(int index) const { |
ASSERT((index >= 0) && (index < ArgCount())); |
- RawObject** arg_ptr = &((*argv_)[-index]); |
+#if defined(TARGET_ARCH_DBC) |
+ // On DBC stack is growing upwards, in reverse direction from all other |
+ // architectures. |
+ RawObject** arg_ptr = &(argv_[index]); |
+#else |
+ RawObject** arg_ptr = &(argv_[-index]); |
+#endif |
// Tell MemorySanitizer the RawObject* was initialized (by generated code). |
MSAN_UNPOISON(arg_ptr, kWordSize); |
return *arg_ptr; |
@@ -204,6 +213,16 @@ class NativeArguments { |
friend class BootstrapNatives; |
friend class Simulator; |
+#if defined(TARGET_ARCH_DBC) |
+ // Allow simulator to create NativeArguments on the stack. |
+ NativeArguments(Thread* thread, |
+ int argc_tag, |
+ RawObject** argv, |
+ RawObject** retval) |
+ : thread_(thread), argc_tag_(argc_tag), argv_(argv), retval_(retval) { |
+ } |
+#endif |
+ |
// Since this function is passed a RawObject directly, we need to be |
// exceedingly careful when we use it. If there are any other side |
// effects in the statement that may cause GC, it could lead to |
@@ -235,7 +254,7 @@ class NativeArguments { |
Thread* thread_; // Current thread pointer. |
intptr_t argc_tag_; // Encodes argument count and invoked native call type. |
- RawObject*(*argv_)[]; // Pointer to an array of arguments to runtime call. |
+ RawObject** argv_; // Pointer to an array of arguments to runtime call. |
RawObject** retval_; // Pointer to the return value area. |
}; |