OSDN Git Service

art: Make calling convention immune to SIRT structure change
authorDmitry Petrochenko <dmitry.petrochenko@intel.com>
Mon, 31 Mar 2014 02:12:31 +0000 (09:12 +0700)
committerDmitry Petrochenko <dmitry.petrochenko@intel.com>
Tue, 1 Apr 2014 03:24:51 +0000 (10:24 +0700)
Introduce stack_indirect_reference_table::referencesOffset and
rely on it in calling convention to avoid issues if SIRT structure
change.

Change-Id: Icc0c5c5b1313173df2ee519ab8934183074fdfb6
Signed-off-by: Dmitry Petrochenko <dmitry.petrochenko@intel.com>
compiler/jni/quick/calling_convention.h
runtime/stack_indirect_reference_table.h

index fe3d1cd..4950905 100644 (file)
@@ -298,9 +298,8 @@ class JniCallingConvention : public CallingConvention {
   }
 
   FrameOffset SirtReferencesOffset() const {
-    // The StackIndirectReferenceTable::number_of_references_ type is uint32_t
-    return FrameOffset(SirtNumRefsOffset().Int32Value() +
-                       sizeof(uint32_t));
+    return FrameOffset(SirtOffset().Int32Value() +
+                       StackIndirectReferenceTable::ReferencesOffset());
   }
 
   virtual ~JniCallingConvention() {}
index e6dda85..daef3ff 100644 (file)
@@ -98,14 +98,19 @@ class StackIndirectReferenceTable {
             && (sirt_entry <= (&references_[number_of_references_ - 1])));
   }
 
+  // Offset of link within SIRT, used by generated code
+  static size_t LinkOffset() {
+    return OFFSETOF_MEMBER(StackIndirectReferenceTable, link_);
+  }
+
   // Offset of length within SIRT, used by generated code
   static uint32_t NumberOfReferencesOffset() {
     return OFFSETOF_MEMBER(StackIndirectReferenceTable, number_of_references_);
   }
 
   // Offset of link within SIRT, used by generated code
-  static size_t LinkOffset() {
-    return OFFSETOF_MEMBER(StackIndirectReferenceTable, link_);
+  static size_t ReferencesOffset() {
+    return OFFSETOF_MEMBER(StackIndirectReferenceTable, references_);
   }
 
  private: