#ifndef _UAPI_S390_TYPES_H
#define _UAPI_S390_TYPES_H

#include <stdbool.h>
#include <signal.h>
#include "images/core.pb-c.h"

#include "page.h"
#include "bitops.h"
#include "asm/int.h"

#include <compel/plugins/std/asm/syscall-types.h>

typedef UserS390RegsEntry UserRegsEntry;

#define CORE_ENTRY__MARCH CORE_ENTRY__MARCH__S390

#define core_is_compat(core) false

#define CORE_THREAD_ARCH_INFO(core) core->ti_s390

#define TI_IP(core) ((core)->ti_s390->gpregs->psw_addr)

static inline u64 encode_pointer(void *p)
{
	return (u64)p;
}
static inline void *decode_pointer(u64 v)
{
	return (void *)v;
}

/*
 * See also:
 *   * arch/s390/include/uapi/asm/auxvec.h
 *   * include/linux/auxvec.h
 */
#define AT_VECTOR_SIZE_BASE 20
#define AT_VECTOR_SIZE_ARCH 1
#define AT_VECTOR_SIZE	    (2 * (AT_VECTOR_SIZE_ARCH + AT_VECTOR_SIZE_BASE + 1))

typedef uint64_t auxv_t;
typedef uint64_t tls_t;

#endif /* _UAPI_S390_TYPES_H */
