diff options
author | Elliott Hughes <enh@google.com> | 2013-10-18 19:39:09 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2013-10-18 19:39:09 -0700 |
commit | 53bfdae4ffdbd43d0c019d1a35af1f8477a272c9 (patch) | |
tree | f6b7395802ff60e74d4da96d0f66418dba31e22a /tests/sched_test.cpp | |
parent | a5bab412e0bcb4f9e449d594330819c321cf18ad (diff) | |
download | android_bionic-53bfdae4ffdbd43d0c019d1a35af1f8477a272c9.tar.gz android_bionic-53bfdae4ffdbd43d0c019d1a35af1f8477a272c9.tar.bz2 android_bionic-53bfdae4ffdbd43d0c019d1a35af1f8477a272c9.zip |
Fix the x86_64 clone implementation.
Change-Id: Ia75f46dcb4d3222049e9a6a6fabc2b17223b47f7
Diffstat (limited to 'tests/sched_test.cpp')
-rw-r--r-- | tests/sched_test.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/sched_test.cpp b/tests/sched_test.cpp new file mode 100644 index 000000000..ec48a4b37 --- /dev/null +++ b/tests/sched_test.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2013 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 <gtest/gtest.h> + +#include <errno.h> +#include <sched.h> +#include <sys/types.h> +#include <sys/wait.h> + +static int child_fn(void* i_ptr) { + *reinterpret_cast<int*>(i_ptr) = 42; + return 123; +} + +TEST(sched, clone) { + void* child_stack[1024]; + + int i = 0; + pid_t tid = clone(child_fn, &child_stack[1024], /*CLONE_FILES | CLONE_FS | */CLONE_VM/* | CLONE_SIGHAND | CLONE_THREAD | CLONE_SYSVSEM*/, &i); + + int status; + ASSERT_EQ(tid, TEMP_FAILURE_RETRY(waitpid(tid, &status, __WCLONE))); + + ASSERT_EQ(42, i); + + ASSERT_TRUE(WIFEXITED(status)); + ASSERT_EQ(123, WEXITSTATUS(status)); +} |