Fix bug in HasSameMethodDescriptorClass on return types

Also included:
- Make oatdump tolerant of missing code
- Include class status in oatdump output
- Additional oat_process support for testing

Change-Id: Id1b8d5662ca061f2dc22b2b087b5a5945e54b91c
diff --git a/src/class_linker.cc b/src/class_linker.cc
index 9c00d72..becd6d5 100644
--- a/src/class_linker.cc
+++ b/src/class_linker.cc
@@ -1444,7 +1444,9 @@
 bool ClassLinker::HasSameMethodDescriptorClasses(const Method* method,
                                                  const Class* klass1,
                                                  const Class* klass2) {
-  if (method->IsMiranda()) { return true; }
+  if (method->IsMiranda()) {
+      return true;
+  }
   const DexFile& dex_file = FindDexFile(method->GetDeclaringClass()->GetDexCache());
   const DexFile::ProtoId& proto_id = dex_file.GetProtoId(method->GetProtoIdx());
   DexFile::ParameterIterator *it;
@@ -1463,7 +1465,7 @@
   // Check the return type
   const char* descriptor = dex_file.GetReturnTypeDescriptor(proto_id);
   if (descriptor[0] == 'L' || descriptor[0] == '[') {
-    if (HasSameDescriptorClasses(descriptor, klass1, klass2)) {
+    if (!HasSameDescriptorClasses(descriptor, klass1, klass2)) {
       return false;
     }
   }