From: Mathieu Chartier Date: Fri, 6 Mar 2015 19:33:36 +0000 (-0800) Subject: Fix byte and char Get32 X-Git-Tag: android-x86-6.0-r1~752 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=2ff8da6a4d44bcf6a72dca1b5294a72297c5ce26;p=android-x86%2Fart.git Fix byte and char Get32 8 bit and 16 bit fields aren't necessarily 32 bit aligned due to field packing. This was causing SIGBUS for hprof dumping some apps. Bug: 19627999 Change-Id: Ifd68b281b2a23b9ed3c6f8780c99870643366c7e --- diff --git a/runtime/hprof/hprof.cc b/runtime/hprof/hprof.cc index d2e93bc14..7da22b123 100644 --- a/runtime/hprof/hprof.cc +++ b/runtime/hprof/hprof.cc @@ -1010,10 +1010,10 @@ void Hprof::DumpHeapClass(mirror::Class* klass, EndianOutput* output) { __ AddU1(t); switch (size) { case 1: - __ AddU1(static_cast(f->Get32(klass))); + __ AddU1(f->GetByte(klass)); break; case 2: - __ AddU2(static_cast(f->Get32(klass))); + __ AddU2(f->GetChar(klass)); break; case 4: __ AddU4(f->Get32(klass)); @@ -1101,9 +1101,9 @@ void Hprof::DumpHeapInstanceObject(mirror::Object* obj, mirror::Class* klass, size_t size; SignatureToBasicTypeAndSize(f->GetTypeDescriptor(), &size); if (size == 1) { - __ AddU1(f->Get32(obj)); + __ AddU1(f->GetByte(obj)); } else if (size == 2) { - __ AddU2(f->Get32(obj)); + __ AddU2(f->GetChar(obj)); } else if (size == 4) { __ AddU4(f->Get32(obj)); } else {