#include <errno.h>
#include <sys/ptrace.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <asm/ldt.h>
#include "sysdep/tls.h"
#include "uml-config.h"

/* TLS support - we basically rely on the host's one.*/

/* In TT mode, this should be called only by the tracing thread, and makes sense
 * only for PTRACE_SET_THREAD_AREA. In SKAS mode, it's used normally.
 *
 */

#ifndef PTRACE_GET_THREAD_AREA
#define PTRACE_GET_THREAD_AREA 25
#endif

#ifndef PTRACE_SET_THREAD_AREA
#define PTRACE_SET_THREAD_AREA 26
#endif

int os_set_thread_area(user_desc_t *info, int pid)
{
	int ret;

	ret = ptrace(PTRACE_SET_THREAD_AREA, pid, info->entry_number,
		     (unsigned long) info);
	if (ret < 0)
		ret = -errno;
	return ret;
}

#ifdef UML_CONFIG_MODE_SKAS

int os_get_thread_area(user_desc_t *info, int pid)
{
	int ret;

	ret = ptrace(PTRACE_GET_THREAD_AREA, pid, info->entry_number,
		     (unsigned long) info);
	if (ret < 0)
		ret = -errno;
	return ret;
}

#endif

#ifdef UML_CONFIG_MODE_TT
#include "linux/unistd.h"

int do_set_thread_area_tt(user_desc_t *info)
{
	int ret;

	ret = syscall(__NR_set_thread_area,info);
	if (ret < 0) {
		ret = -errno;
	}
	return ret;
}

int do_get_thread_area_tt(user_desc_t *info)
{
	int ret;

	ret = syscall(__NR_get_thread_area,info);
	if (ret < 0) {
		ret = -errno;
	}
	return ret;
}

#endif /* UML_CONFIG_MODE_TT */
