Revert "Binder: support storing interface stability"

This reverts commit 5981dcbe4a6701c1776e9ece08aa83fe01655da1.

Reason for revert: breaking hawk (seems to be because 32-bit
    Parcel changed size 60 -> 64). Will revert and reland w/o
    changing the size.

Bug: 137348710

Change-Id: I24f5c443118703c5ef3dbb479288332e7bc5a08c
diff --git a/libs/binder/Android.bp b/libs/binder/Android.bp
index c6ce576..b230943 100644
--- a/libs/binder/Android.bp
+++ b/libs/binder/Android.bp
@@ -70,7 +70,6 @@
         "ProcessInfoService.cpp",
         "ProcessState.cpp",
         "Static.cpp",
-        "Stability.cpp",
         "Status.cpp",
         "TextOutput.cpp",
         "IpPrefix.cpp",
diff --git a/libs/binder/Binder.cpp b/libs/binder/Binder.cpp
index 268c85e..bdf0f8e 100644
--- a/libs/binder/Binder.cpp
+++ b/libs/binder/Binder.cpp
@@ -124,7 +124,6 @@
     uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
 {
     data.setDataPosition(0);
-    data.setTransactingBinder(this);
 
     status_t err = NO_ERROR;
     switch (code) {
@@ -136,10 +135,8 @@
             break;
     }
 
-    // In case this is being transacted on in the same process.
     if (reply != nullptr) {
         reply->setDataPosition(0);
-        reply->setTransactingBinder(this);
     }
 
     return err;
diff --git a/libs/binder/BpBinder.cpp b/libs/binder/BpBinder.cpp
index 57440d5..5ceb218 100644
--- a/libs/binder/BpBinder.cpp
+++ b/libs/binder/BpBinder.cpp
@@ -216,11 +216,6 @@
         status_t status = IPCThreadState::self()->transact(
             mHandle, code, data, reply, flags);
         if (status == DEAD_OBJECT) mAlive = 0;
-
-        if (reply != nullptr) {
-            reply->setTransactingBinder(this);
-        }
-
         return status;
     }
 
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp
index 0b9849a..5537430 100644
--- a/libs/binder/Parcel.cpp
+++ b/libs/binder/Parcel.cpp
@@ -164,34 +164,14 @@
     ALOGE("Invalid object type 0x%08x", obj.hdr.type);
 }
 
-status_t Parcel::finishFlattenBinder(
-    const sp<IBinder>& binder, const flat_binder_object& flat)
+inline static status_t finish_flatten_binder(
+    const sp<IBinder>& /*binder*/, const flat_binder_object& flat, Parcel* out)
 {
-    status_t status = writeObject(flat, false);
-    if (status != OK) return status;
-
-    return writeInt32(internal::Stability::get(binder.get()));
+    return out->writeObject(flat, false);
 }
 
-status_t Parcel::finishUnflattenBinder(
-    const sp<IBinder>& binder, sp<IBinder>* out) const
-{
-    int32_t stability;
-    status_t status = readInt32(&stability);
-    if (status != OK) return status;
-
-    if (!internal::Stability::check(stability, mRequiredStability)) {
-        return BAD_TYPE;
-    }
-
-    status = internal::Stability::set(binder.get(), stability);
-    if (status != OK) return status;
-
-    *out = binder;
-    return OK;
-}
-
-status_t Parcel::flattenBinder(const sp<IBinder>& binder)
+static status_t flatten_binder(const sp<ProcessState>& /*proc*/,
+    const sp<IBinder>& binder, Parcel* out)
 {
     flat_binder_object obj;
 
@@ -229,24 +209,30 @@
         obj.cookie = 0;
     }
 
-    return finishFlattenBinder(binder, obj);
+    return finish_flatten_binder(binder, obj, out);
 }
 
-status_t Parcel::unflattenBinder(sp<IBinder>* out) const
+inline static status_t finish_unflatten_binder(
+    BpBinder* /*proxy*/, const flat_binder_object& /*flat*/,
+    const Parcel& /*in*/)
 {
-    const flat_binder_object* flat = readObject(false);
+    return NO_ERROR;
+}
+
+static status_t unflatten_binder(const sp<ProcessState>& proc,
+    const Parcel& in, sp<IBinder>* out)
+{
+    const flat_binder_object* flat = in.readObject(false);
 
     if (flat) {
         switch (flat->hdr.type) {
-            case BINDER_TYPE_BINDER: {
-                sp<IBinder> binder = reinterpret_cast<IBinder*>(flat->cookie);
-                return finishUnflattenBinder(binder, out);
-            }
-            case BINDER_TYPE_HANDLE: {
-                sp<IBinder> binder =
-                    ProcessState::self()->getStrongProxyForHandle(flat->handle);
-                return finishUnflattenBinder(binder, out);
-            }
+            case BINDER_TYPE_BINDER:
+                *out = reinterpret_cast<IBinder*>(flat->cookie);
+                return finish_unflatten_binder(nullptr, *flat, in);
+            case BINDER_TYPE_HANDLE:
+                *out = proc->getStrongProxyForHandle(flat->handle);
+                return finish_unflatten_binder(
+                    static_cast<BpBinder*>(out->get()), *flat, in);
         }
     }
     return BAD_TYPE;
@@ -351,10 +337,6 @@
     return NO_ERROR;
 }
 
-void Parcel::setTransactingBinder(const sp<IBinder>& binder) const {
-    mRequiredStability = internal::Stability::get(binder.get());
-}
-
 status_t Parcel::setData(const uint8_t* buffer, size_t len)
 {
     if (len > INT32_MAX) {
@@ -1050,7 +1032,7 @@
 
 status_t Parcel::writeStrongBinder(const sp<IBinder>& val)
 {
-    return flattenBinder(val);
+    return flatten_binder(ProcessState::self(), val, this);
 }
 
 status_t Parcel::writeStrongBinderVector(const std::vector<sp<IBinder>>& val)
@@ -1996,7 +1978,7 @@
 
 status_t Parcel::readNullableStrongBinder(sp<IBinder>* val) const
 {
-    return unflattenBinder(val);
+    return unflatten_binder(ProcessState::self(), *this, val);
 }
 
 sp<IBinder> Parcel::readStrongBinder() const
@@ -2700,10 +2682,9 @@
     mObjectsCapacity = 0;
     mNextObjectHint = 0;
     mObjectsSorted = false;
-    mAllowFds = true;
     mHasFds = false;
     mFdsKnown = true;
-    mRequiredStability = internal::Stability::UNDECLARED;
+    mAllowFds = true;
     mOwner = nullptr;
     mOpenAshmemSize = 0;
     mWorkSourceRequestHeaderPosition = 0;
diff --git a/libs/binder/Stability.cpp b/libs/binder/Stability.cpp
deleted file mode 100644
index d6d312a..0000000
--- a/libs/binder/Stability.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <binder/Stability.h>
-
-namespace android {
-namespace internal {
-
-void Stability::markCompilationUnit(IBinder* binder) {
-#ifdef __ANDROID_VNDK__
-constexpr Stability::Level kLocalStability = Stability::Level::VENDOR;
-#else
-constexpr Stability::Level kLocalStability = Stability::Level::SYSTEM;
-#endif
-
-    status_t result = set(binder, kLocalStability);
-    LOG_ALWAYS_FATAL_IF(result != OK, "Should only mark known object.");
-}
-
-void Stability::markVintf(IBinder* binder) {
-    status_t result = set(binder, Level::VINTF);
-    LOG_ALWAYS_FATAL_IF(result != OK, "Should only mark known object.");
-}
-
-status_t Stability::set(IBinder* binder, int32_t stability) {
-    Level currentStability = get(binder);
-
-    // null binder is always written w/ 'UNDECLARED' stability
-    if (binder == nullptr) {
-        if (stability == UNDECLARED) {
-            return OK;
-        } else {
-            ALOGE("Null binder written with stability %s.", stabilityString(stability).c_str());
-            return BAD_TYPE;
-        }
-    }
-
-    if (!isDeclaredStability(stability)) {
-        // There are UNDECLARED sets because some binder interfaces don't set their stability, and
-        // then UNDECLARED stability is sent on the other side.
-        if (stability != UNDECLARED) {
-            ALOGE("Can only set known stability, not %d.", stability);
-            return BAD_TYPE;
-        }
-    }
-
-    if (currentStability != Level::UNDECLARED && currentStability != stability) {
-        ALOGE("Interface being set with %s but it is already marked as %s.",
-            stabilityString(stability).c_str(), stabilityString(stability).c_str());
-        return BAD_TYPE;
-    }
-
-    if (currentStability == stability) return OK;
-
-    binder->attachObject(
-        reinterpret_cast<void*>(&Stability::get),
-        reinterpret_cast<void*>(stability),
-        nullptr /*cleanupCookie*/,
-        nullptr /*cleanup function*/);
-
-    return OK;
-}
-
-Stability::Level Stability::get(IBinder* binder) {
-    if (binder == nullptr) return UNDECLARED;
-
-    return static_cast<Level>(reinterpret_cast<intptr_t>(
-        binder->findObject(reinterpret_cast<void*>(&Stability::get))));
-}
-
-bool Stability::check(int32_t provided, Level required) {
-    bool stable = (provided & required) == required;
-
-    if (!isDeclaredStability(provided) && provided != UNDECLARED) {
-        ALOGE("Unknown stability when checking interface stability %d.", provided);
-
-        stable = false;
-    }
-
-    if (!stable) {
-        ALOGE("Interface with %s cannot accept interface with %s.",
-            stabilityString(required).c_str(),
-            stabilityString(provided).c_str());
-    }
-
-    return stable;
-}
-
-bool Stability::isDeclaredStability(int32_t stability) {
-    return stability == VENDOR || stability == SYSTEM || stability == VINTF;
-}
-
-std::string Stability::stabilityString(int32_t stability) {
-    switch (stability) {
-        case Level::UNDECLARED: return "undeclared stability";
-        case Level::VENDOR: return "vendor stability";
-        case Level::SYSTEM: return "system stability";
-        case Level::VINTF: return "vintf stability";
-    }
-    return "unknown stability " + std::to_string(stability);
-}
-
-}  // namespace internal
-}  // namespace stability
\ No newline at end of file
diff --git a/libs/binder/TEST_MAPPING b/libs/binder/TEST_MAPPING
index 136bdb0..01e57d3 100644
--- a/libs/binder/TEST_MAPPING
+++ b/libs/binder/TEST_MAPPING
@@ -11,9 +11,6 @@
     },
     {
       "name": "binderLibTest"
-    },
-    {
-      "name": "binderStabilityTest"
     }
   ]
 }
diff --git a/libs/binder/include/binder/Parcel.h b/libs/binder/include/binder/Parcel.h
index 4e5f1aa..f5eee87 100644
--- a/libs/binder/include/binder/Parcel.h
+++ b/libs/binder/include/binder/Parcel.h
@@ -33,7 +33,6 @@
 
 #include <binder/IInterface.h>
 #include <binder/Parcelable.h>
-#include <binder/Stability.h>
 
 // ---------------------------------------------------------------------------
 namespace android {
@@ -68,9 +67,7 @@
     status_t            setDataSize(size_t size);
     void                setDataPosition(size_t pos) const;
     status_t            setDataCapacity(size_t size);
-
-    void                setTransactingBinder(const sp<IBinder>& binder) const;
-
+    
     status_t            setData(const uint8_t* buffer, size_t len);
 
     status_t            appendFrom(const Parcel *parcel,
@@ -422,13 +419,7 @@
     void                scanForFds() const;
     status_t            validateReadData(size_t len) const;
     void                updateWorkSourceRequestHeaderPosition() const;
-
-    status_t            finishFlattenBinder(const sp<IBinder>& binder,
-                                            const flat_binder_object& flat);
-    status_t            finishUnflattenBinder(const sp<IBinder>& binder, sp<IBinder>* out) const;
-    status_t            flattenBinder(const sp<IBinder>& binder);
-    status_t            unflattenBinder(sp<IBinder>* out) const;
-
+                        
     template<class T>
     status_t            readAligned(T *pArg) const;
 
@@ -475,15 +466,13 @@
     size_t              mObjectsCapacity;
     mutable size_t      mNextObjectHint;
     mutable bool        mObjectsSorted;
-    bool                mAllowFds;
 
     mutable bool        mRequestHeaderPresent;
     mutable size_t      mWorkSourceRequestHeaderPosition;
 
     mutable bool        mFdsKnown;
     mutable bool        mHasFds;
-
-    mutable internal::Stability::Level mRequiredStability;
+    bool                mAllowFds;
 
     release_func        mOwner;
     void*               mOwnerCookie;
diff --git a/libs/binder/include/binder/Stability.h b/libs/binder/include/binder/Stability.h
deleted file mode 100644
index 77f0667..0000000
--- a/libs/binder/include/binder/Stability.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#pragma once
-
-#include <binder/IBinder.h>
-#include <string>
-
-namespace android {
-namespace internal {
-
-// WARNING: These APIs are only ever expected to be called by auto-generated code.
-//     Instead of calling them, you should set the stability of a .aidl interface
-class Stability final {
-public:
-    // WARNING: This is only ever expected to be called by auto-generated code. You likely want to
-    // change or modify the stability class of the interface you are using.
-    // This must be called as soon as the binder in question is constructed. No thread safety
-    // is provided.
-    // E.g. stability is according to libbinder compilation unit
-    static void markCompilationUnit(IBinder* binder);
-    // WARNING: This is only ever expected to be called by auto-generated code. You likely want to
-    // change or modify the stability class of the interface you are using.
-    // This must be called as soon as the binder in question is constructed. No thread safety
-    // is provided.
-    // E.g. stability is according to libbinder_ndk or Java SDK AND the interface
-    //     expressed here is guaranteed to be stable for multiple years (Stable AIDL)
-    static void markVintf(IBinder* binder);
-
-private:
-    // Parcel needs to store stability level since this is more efficient than storing and looking
-    // up the efficiency level of a binder object. So, we expose the underlying type.
-    friend ::android::Parcel;
-
-    enum Level : int32_t {
-        UNDECLARED = 0,
-
-        VENDOR = 0b000011,
-        SYSTEM = 0b001100,
-        VINTF = 0b111111,
-    };
-
-    // applies stability to binder if stability level is known
-    __attribute__((warn_unused_result))
-    static status_t set(IBinder* binder, int32_t stability);
-
-    static Level get(IBinder* binder);
-
-    static bool check(int32_t provided, Level required);
-
-    static bool isDeclaredStability(int32_t stability);
-    static std::string stabilityString(int32_t stability);
-
-    Stability();
-};
-
-}  // namespace internal
-}  // namespace android
diff --git a/libs/binder/tests/Android.bp b/libs/binder/tests/Android.bp
index 05db81e..44a691d 100644
--- a/libs/binder/tests/Android.bp
+++ b/libs/binder/tests/Android.bp
@@ -137,18 +137,3 @@
     ],
     test_suites: ["device-tests"],
 }
-
-cc_test {
-    name: "binderStabilityTest",
-    defaults: ["binder_test_defaults"],
-    srcs: [
-        "binderStabilityTest.cpp",
-        "IBinderStabilityTest.aidl",
-    ],
-
-    shared_libs: [
-        "libbinder",
-        "libutils",
-    ],
-    test_suites: ["device-tests"],
-}
diff --git a/libs/binder/tests/IBinderStabilityTest.aidl b/libs/binder/tests/IBinderStabilityTest.aidl
deleted file mode 100644
index 7540ec9..0000000
--- a/libs/binder/tests/IBinderStabilityTest.aidl
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// DO NOT EVER IN A MILLION YEARS WRITE AN INTERFACE LIKE THIS!
-// THIS IS ONLY FOR TESTING!
-interface IBinderStabilityTest {
-    // DO NOT EVER IN A MILLION YEARS WRITE AN INTERFACE LIKE THIS!
-    // THIS IS ONLY FOR TESTING!
-    void sendBinder(IBinder binder);
-
-    // DO NOT EVER IN A MILLION YEARS WRITE AN INTERFACE LIKE THIS!
-    // THIS IS ONLY FOR TESTING!
-    IBinder returnNoStabilityBinder();
-
-    // DO NOT EVER IN A MILLION YEARS WRITE AN INTERFACE LIKE THIS!
-    // THIS IS ONLY FOR TESTING!
-    IBinder returnLocalStabilityBinder();
-
-    // DO NOT EVER IN A MILLION YEARS WRITE AN INTERFACE LIKE THIS!
-    // THIS IS ONLY FOR TESTING!
-    IBinder returnVintfStabilityBinder();
-}
-// DO NOT EVER IN A MILLION YEARS WRITE AN INTERFACE LIKE THIS!
-// THIS IS ONLY FOR TESTING!
-// Construct and return a binder with a specific stability
diff --git a/libs/binder/tests/binderStabilityTest.cpp b/libs/binder/tests/binderStabilityTest.cpp
deleted file mode 100644
index 2b27a81..0000000
--- a/libs/binder/tests/binderStabilityTest.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (C) 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <android/os/IServiceManager.h>
-#include <binder/Binder.h>
-#include <binder/IBinder.h>
-#include <binder/IPCThreadState.h>
-#include <binder/IServiceManager.h>
-#include <binder/Parcel.h>
-#include <binder/Stability.h>
-#include <gtest/gtest.h>
-
-#include <sys/prctl.h>
-
-#include "BnBinderStabilityTest.h"
-#include "BpBinderStabilityTest.h"
-
-using namespace android;
-using android::binder::Status;
-using android::os::IServiceManager;
-
-const String16 kNoStabilityServer = String16("binder_stability_test_service_low");
-const String16 kCompilationUnitServer = String16("binder_stability_test_service_compl");
-const String16 kVintfServer = String16("binder_stability_test_service_vintf");
-
-sp<IBinder> getCompilationUnitStability() {
-    sp<IBinder> binder = new BBinder();
-    // NO! NO! NO! NO! DO NOT EVERY DO SOMETHING LIKE THIS?
-    // WHAT ARE YOU CRAZY? IT'S VERY DANGEROUS
-    internal::Stability::markCompilationUnit(binder.get()); // <- BAD, NO! DO NOT COPY
-    return binder;
-}
-
-sp<IBinder> getVintfStability() {
-    sp<IBinder> binder = new BBinder();
-    // NO! NO! NO! NO! DO NOT EVERY DO SOMETHING LIKE THIS?
-    // WHAT ARE YOU CRAZY? IT'S VERY DANGEROUS
-    internal::Stability::markVintf(binder.get()); // <- BAD, NO! DO NOT COPY
-    return binder;
-}
-
-// NO! NO! NO! Do not even think of doing something like this!
-// This is for testing! If a class like this was actually used in production,
-// it would ruin everything!
-class BadStabilityTester : public BnBinderStabilityTest {
-public:
-    Status sendBinder(const sp<IBinder>& /*binder*/) override {
-        return Status::ok();
-    }
-    Status returnNoStabilityBinder(sp<IBinder>* _aidl_return) override {
-        *_aidl_return = new BBinder();
-        return Status::ok();
-    }
-    Status returnLocalStabilityBinder(sp<IBinder>* _aidl_return) override {
-        *_aidl_return = getCompilationUnitStability();
-        return Status::ok();
-    }
-    Status returnVintfStabilityBinder(sp<IBinder>* _aidl_return) override {
-        *_aidl_return = getVintfStability();
-        return Status::ok();
-    }
-
-    static sp<IBinderStabilityTest> getNoStabilityServer() {
-        sp<IBinder> remote = new BadStabilityTester;
-        return new BpBinderStabilityTest(remote);
-    }
-    static sp<IBinderStabilityTest> getCompilationUnitStabilityServer() {
-        sp<IBinder> remote = new BadStabilityTester;
-        internal::Stability::markCompilationUnit(remote.get());
-        return new BpBinderStabilityTest(remote);
-    }
-    static sp<IBinderStabilityTest> getVintfStabilityServer() {
-        sp<IBinder> remote = new BadStabilityTester;
-        internal::Stability::markVintf(remote.get()); // <- BAD, NO! DO NOT COPY
-        return new BpBinderStabilityTest(remote);
-    }
-};
-
-void checkNoStabilityServer(const sp<IBinderStabilityTest>& unkemptServer) {
-    EXPECT_TRUE(unkemptServer->sendBinder(new BBinder()).isOk());
-    EXPECT_TRUE(unkemptServer->sendBinder(getCompilationUnitStability()).isOk());
-    EXPECT_TRUE(unkemptServer->sendBinder(getVintfStability()).isOk());
-
-    sp<IBinder> out;
-    EXPECT_TRUE(unkemptServer->returnNoStabilityBinder(&out).isOk());
-    EXPECT_NE(nullptr, out.get());
-
-    EXPECT_TRUE(unkemptServer->returnLocalStabilityBinder(&out).isOk());
-    EXPECT_NE(nullptr, out.get());
-
-    EXPECT_TRUE(unkemptServer->returnVintfStabilityBinder(&out).isOk());
-    EXPECT_NE(nullptr, out.get());
-}
-
-void checkLowStabilityServer(const sp<IBinderStabilityTest>& complServer) {
-    EXPECT_FALSE(complServer->sendBinder(new BBinder()).isOk());
-    EXPECT_TRUE(complServer->sendBinder(getCompilationUnitStability()).isOk());
-    EXPECT_TRUE(complServer->sendBinder(getVintfStability()).isOk());
-
-    sp<IBinder> out;
-    EXPECT_FALSE(complServer->returnNoStabilityBinder(&out).isOk());
-    EXPECT_EQ(nullptr, out.get());
-
-    EXPECT_TRUE(complServer->returnLocalStabilityBinder(&out).isOk());
-    EXPECT_NE(nullptr, out.get());
-
-    EXPECT_TRUE(complServer->returnVintfStabilityBinder(&out).isOk());
-    EXPECT_NE(nullptr, out.get());
-}
-
-void checkHighStabilityServer(const sp<IBinderStabilityTest>& highStability) {
-    EXPECT_FALSE(highStability->sendBinder(new BBinder()).isOk());
-    EXPECT_FALSE(highStability->sendBinder(getCompilationUnitStability()).isOk());
-    EXPECT_TRUE(highStability->sendBinder(getVintfStability()).isOk());
-
-    sp<IBinder> out;
-    EXPECT_FALSE(highStability->returnNoStabilityBinder(&out).isOk());
-    EXPECT_EQ(nullptr, out.get());
-
-    EXPECT_FALSE(highStability->returnLocalStabilityBinder(&out).isOk());
-    EXPECT_EQ(nullptr, out.get());
-
-    EXPECT_TRUE(highStability->returnVintfStabilityBinder(&out).isOk());
-    EXPECT_NE(nullptr, out.get());
-}
-
-TEST(BinderStability, LocalNoStabilityServer) {
-    // in practice, a low stability server is probably one that hasn't been rebuilt
-    // or was written by hand.
-    auto server = BadStabilityTester::getNoStabilityServer();
-    ASSERT_NE(nullptr, IInterface::asBinder(server)->localBinder());
-    checkNoStabilityServer(server);
-}
-
-TEST(BinderStability, LocalLowStabilityServer) {
-    auto server = BadStabilityTester::getCompilationUnitStabilityServer();
-    ASSERT_NE(nullptr, IInterface::asBinder(server)->localBinder());
-    checkLowStabilityServer(server);
-}
-
-TEST(BinderStability, LocalHighStabilityServer) {
-    auto server = BadStabilityTester::getVintfStabilityServer();
-    ASSERT_NE(nullptr, IInterface::asBinder(server)->localBinder());
-    checkHighStabilityServer(server);
-}
-
-TEST(BinderStability, RemoteNoStabilityServer) {
-    sp<IBinder> remoteBinder = android::defaultServiceManager()->getService(kNoStabilityServer);
-    auto remoteServer = interface_cast<IBinderStabilityTest>(remoteBinder);
-
-    ASSERT_NE(nullptr, remoteServer.get());
-    ASSERT_NE(nullptr, IInterface::asBinder(remoteServer)->remoteBinder());
-
-    checkNoStabilityServer(remoteServer);
-}
-
-TEST(BinderStability, RemoteLowStabilityServer) {
-    sp<IBinder> remoteBinder = android::defaultServiceManager()->getService(kCompilationUnitServer);
-    auto remoteServer = interface_cast<IBinderStabilityTest>(remoteBinder);
-
-    ASSERT_NE(nullptr, remoteServer.get());
-    ASSERT_NE(nullptr, IInterface::asBinder(remoteServer)->remoteBinder());
-
-    checkLowStabilityServer(remoteServer);
-}
-
-TEST(BinderStability, RemoteVintfServer) {
-    sp<IBinder> remoteBinder = android::defaultServiceManager()->getService(kVintfServer);
-    auto remoteServer = interface_cast<IBinderStabilityTest>(remoteBinder);
-
-    ASSERT_NE(nullptr, remoteServer.get());
-    ASSERT_NE(nullptr, IInterface::asBinder(remoteServer)->remoteBinder());
-
-    checkHighStabilityServer(remoteServer);
-}
-
-class MarksStabilityInConstructor : public BBinder {
-public:
-    static bool gDestructed;
-
-    MarksStabilityInConstructor() {
-        internal::Stability::markCompilationUnit(this);
-    }
-    ~MarksStabilityInConstructor() {
-        gDestructed = true;
-    }
-};
-bool MarksStabilityInConstructor::gDestructed = false;
-
-TEST(BinderStability, MarkingObjectNoDestructTest) {
-    ASSERT_FALSE(MarksStabilityInConstructor::gDestructed);
-
-    // best practice is to put this directly in an sp, but for this test, we
-    // want to explicitly check what happens before that happens
-    MarksStabilityInConstructor* binder = new MarksStabilityInConstructor();
-    ASSERT_FALSE(MarksStabilityInConstructor::gDestructed);
-
-    sp<MarksStabilityInConstructor> binderSp = binder;
-    ASSERT_FALSE(MarksStabilityInConstructor::gDestructed);
-
-    binderSp = nullptr;
-    ASSERT_TRUE(MarksStabilityInConstructor::gDestructed);
-}
-
-int main(int argc, char** argv) {
-    ::testing::InitGoogleTest(&argc, argv);
-
-    if (fork() == 0) {
-        // child process
-        prctl(PR_SET_PDEATHSIG, SIGHUP);
-
-        sp<IBinder> noStability = new BadStabilityTester;
-        android::defaultServiceManager()->addService(kNoStabilityServer, noStability);
-
-        sp<IBinder> compil = new BadStabilityTester;
-        internal::Stability::markCompilationUnit(compil.get());
-        android::defaultServiceManager()->addService(kCompilationUnitServer, compil);
-
-        sp<IBinder> vintf = new BadStabilityTester;
-        internal::Stability::markVintf(vintf.get());
-        android::defaultServiceManager()->addService(kVintfServer, vintf);
-
-        IPCThreadState::self()->joinThreadPool(true);
-        exit(1);  // should not reach
-    }
-
-    // This is not racey. Just giving these services some time to register before we call
-    // getService which sleeps for much longer...
-    usleep(10000);
-
-    return RUN_ALL_TESTS();
-}