/*
 * Copyright 2017, Data61
 * Commonwealth Scientific and Industrial Research Organisation (CSIRO)
 * ABN 41 687 119 230.
 *
 * This software may be distributed and modified according to the terms of
 * the BSD 2-Clause license. Note that NO WARRANTY is provided.
 * See "LICENSE_BSD2.txt" for details.
 *
 * @TAG(DATA61_BSD)
 */

#pragma once

#include <autoconf.h>
#include <sel4muslcsys/gen_config.h>
#include <stdarg.h>
#include <stdbool.h>
#include <bits/syscall.h>
#include <utils/attribute.h>

typedef long (*muslcsys_syscall_t)(va_list);

/* Installs a new handler for the given syscall. Any previous handler is returned
 * and can be used to provide layers of syscall handling */
muslcsys_syscall_t muslcsys_install_syscall(int syscall, muslcsys_syscall_t new_syscall);

/* Some syscalls happen in the C library prior the init constructors being called,
 * and hence prior to syscall handlers being able to be installed. For such cases
 * we simply record such occurances and provide functions here for retrieving the
 * arguments allow a process to do anything necessary once they get to `main`.
 * These functions return true/false if the syscall was called on boot, and take
 * pointers for returning the arguments. Pointers must be non NULL
 */
bool muslcsys_get_boot_set_tid_address(int **arg) NONNULL(1);
#if defined(__NR_set_thread_area) || defined(__ARM_NR_set_tls)
bool muslcsys_get_boot_set_thread_area(void **arg) NONNULL(1);
#endif
