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

Unified Diff: runtime/vm/object.h

Issue 2473553002: Fix unaligned access to TypedData from native code. (Closed)
Patch Set: . Created 4 years, 1 month 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
« no previous file with comments | « no previous file | tests/language/language.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object.h
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 8138adba3c072b30673499a82b309e0e05b0caf1..2f36667a4c58d2d062046be19e14b9ac222e8e38 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -7930,6 +7930,7 @@ class TypedData : public Instance {
virtual bool CanonicalizeEquals(const Instance& other) const;
virtual uword ComputeCanonicalTableHash() const;
+#if defined(HOST_ARCH_IA32) || defined(HOST_ARCH_X64)
#define TYPED_GETTER_SETTER(name, type) \
type Get##name(intptr_t byte_offset) const { \
NoSafepointScope no_safepoint; \
@@ -7939,6 +7940,20 @@ class TypedData : public Instance {
NoSafepointScope no_safepoint; \
*reinterpret_cast<type*>(DataAddr(byte_offset)) = value; \
}
+#else // defined(HOST_ARCH_IA32) || defined(HOST_ARCH_X64)
+#define TYPED_GETTER_SETTER(name, type) \
+ type Get##name(intptr_t byte_offset) const { \
+ NoSafepointScope no_safepoint; \
+ type result; \
+ memmove(&result, DataAddr(byte_offset), sizeof(type)); \
+ return result; \
+ } \
+ void Set##name(intptr_t byte_offset, type value) const { \
+ NoSafepointScope no_safepoint; \
+ memmove(DataAddr(byte_offset), &value, sizeof(type)); \
+ }
+#endif // defined(HOST_ARCH_IA32) || defined(HOST_ARCH_X64)
+
TYPED_GETTER_SETTER(Int8, int8_t)
TYPED_GETTER_SETTER(Uint8, uint8_t)
TYPED_GETTER_SETTER(Int16, int16_t)
« no previous file with comments | « no previous file | tests/language/language.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698