1c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov/* 2c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * Copyright (C) 2013 The Android Open Source Project 3c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * 4c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * Licensed under the Apache License, Version 2.0 (the "License"); 5c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * you may not use this file except in compliance with the License. 6c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * You may obtain a copy of the License at 7c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * 8c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * http://www.apache.org/licenses/LICENSE-2.0 9c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * 10c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * Unless required by applicable law or agreed to in writing, software 11c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * distributed under the License is distributed on an "AS IS" BASIS, 12c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * See the License for the specific language governing permissions and 14c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * limitations under the License. 15c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov */ 16c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov 17c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov/* 18c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov * Contributed by: Intel Corporation 19c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov */ 20c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov 21c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov#include <gtest/gtest.h> 22c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov 23c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikovextern "C" { 24c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov void do_test(); 25c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov} 26c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov 27c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov// We have to say "DeathTest" here so gtest knows to run this test (which exits) 28c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov// in its own process. 29c45087bffa528c0809f0df2e0a3708eba7018b33Sergey MelnikovTEST(stack_unwinding_DeathTest, unwinding_through_signal_frame) { 30f04935c85e0b466f0d30d2cd4c0fa2fff62e7d6dChristopher Ferris// Only our x86 unwinding is good enough. Switch to libunwind? 31f04935c85e0b466f0d30d2cd4c0fa2fff62e7d6dChristopher Ferris#if defined(__BIONIC__) && defined(__i386__) 32c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov ::testing::FLAGS_gtest_death_test_style = "threadsafe"; 33c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov ASSERT_EXIT(do_test(), ::testing::ExitedWithCode(42), ""); 34f04935c85e0b466f0d30d2cd4c0fa2fff62e7d6dChristopher Ferris#else // __i386__ 35f04935c85e0b466f0d30d2cd4c0fa2fff62e7d6dChristopher Ferris GTEST_LOG_(INFO) << "This test does nothing.\n"; 36f04935c85e0b466f0d30d2cd4c0fa2fff62e7d6dChristopher Ferris#endif // __i386__ 37c45087bffa528c0809f0df2e0a3708eba7018b33Sergey Melnikov} 38