The Pedigree Project 0.1
pthread-syscalls.h
1/*
2 * Copyright (c) 2008-2014, Pedigree Developers
3 *
4 * Please see the CONTRIB file in the root of the source tree for a full
5 * list of contributors.
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20#ifndef _PTHREAD_SYSCALLS_H
21#define _PTHREAD_SYSCALLS_H
22
23#include "pedigree/kernel/process/Semaphore.h"
24#include "pedigree/kernel/process/Thread.h"
25#include "pedigree/kernel/processor/Processor.h"
26#include "pedigree/kernel/processor/VirtualAddressSpace.h"
27#include "pedigree/kernel/processor/state.h"
28
29#include "PosixSubsystem.h"
30#include "logging.h"
31#include <sys/types.h>
32
33void pedigree_init_pthreads();
34void pedigree_copy_posix_thread(Thread*, PosixSubsystem*, Thread*, PosixSubsystem*);
35
37void* posix_pedigree_create_waiter();
38int posix_pedigree_thread_wait_for(void* waiter);
39int posix_pedigree_thread_trigger(void* waiter);
40void posix_pedigree_destroy_waiter(void* waiter);
41
42int posix_futex(int* uaddr, int futex_op, int val, uintptr_t argument4, int* uaddr2, int val3);
43int posix_futex_wake(Process* process, int* uaddr, int count, bool privateFutex = true);
44void posix_futex_clock_changed();
45
46void posix_robust_list_exit(Thread* thread);
47bool posix_clear_child_tid(Process* process, uintptr_t address);
48
49pid_t posix_gettid(bool linuxAbi = false);
50pid_t posix_set_tid_address(int* tidptr, bool linuxAbi = false);
51
52#endif