/*
 * Copyright (c) 2018 Dmitry V. Levin <ldv@strace.io>
 * Copyright (c) 2018-2022 The strace developers.
 * All rights reserved.
 *
 * SPDX-License-Identifier: LGPL-2.1-or-later
 */

#ifndef STRACE_ARCH_DEFS_H
# define STRACE_ARCH_DEFS_H

# include "arch_defs_.h"

/* Fallbacks for architecture-specific definitions.  */

# ifndef HAVE_ARCH_GETRVAL2
#  define HAVE_ARCH_GETRVAL2 0
# endif

# ifndef HAVE_ARCH_OLD_MMAP
#  define HAVE_ARCH_OLD_MMAP 0
# endif

# ifndef HAVE_ARCH_OLD_MMAP_PGOFF
#  define HAVE_ARCH_OLD_MMAP_PGOFF 0
# endif

# ifndef HAVE_ARCH_OLD_SELECT
#  define HAVE_ARCH_OLD_SELECT 0
# endif

# ifndef HAVE_ARCH_UID16_SYSCALLS
#  define HAVE_ARCH_UID16_SYSCALLS 0
# endif

# ifndef DEFAULT_PERSONALITY
#  define DEFAULT_PERSONALITY 0
# endif

# ifndef SUPPORTED_PERSONALITIES
#  define SUPPORTED_PERSONALITIES 1
# endif

# ifndef PERSONALITY_DESIGNATORS
#  if SUPPORTED_PERSONALITIES == 1
#   define PERSONALITY_DESIGNATORS { STRINGIFY_VAL(__WORDSIZE) }
#  elif SUPPORTED_PERSONALITIES == 2
#   define PERSONALITY_DESIGNATORS { "64", "32" }
#  endif
# endif

# ifndef PERSONALITY_NAMES
#  if SUPPORTED_PERSONALITIES == 1
#   define PERSONALITY_NAMES { STRINGIFY_VAL(__WORDSIZE) " bit" }
#  elif SUPPORTED_PERSONALITIES == 2
#   define PERSONALITY_NAMES { "64 bit", "32 bit" }
#  endif
# endif

# ifndef HAVE_ARCH_DEDICATED_ERR_REG
#  define HAVE_ARCH_DEDICATED_ERR_REG 0
# endif

# ifndef CAN_ARCH_BE_COMPAT_ON_64BIT_KERNEL
#  define CAN_ARCH_BE_COMPAT_ON_64BIT_KERNEL 0
# endif

# ifndef ARCH_NEEDS_SET_ERROR_FOR_SCNO_TAMPERING
#  define ARCH_NEEDS_SET_ERROR_FOR_SCNO_TAMPERING 0
# endif

# ifndef MIN_WORDSIZE
#  if SUPPORTED_PERSONALITIES > 1
#   define MIN_WORDSIZE 4
#  else
#   define MIN_WORDSIZE SIZEOF_LONG
#  endif
# endif

# ifndef HAVE_ARCH_TIME32_SYSCALLS
#  define HAVE_ARCH_TIME32_SYSCALLS (MIN_WORDSIZE == 4)
# endif

# ifndef HAVE_ARCH_OLD_TIME64_SYSCALLS
#  define HAVE_ARCH_OLD_TIME64_SYSCALLS (SIZEOF_LONG == 8)
# endif

# ifndef MIN_KLONGSIZE
#  if SUPPORTED_PERSONALITIES > 1
#   define MIN_KLONGSIZE 4
#  else
#   define MIN_KLONGSIZE SIZEOF_KERNEL_LONG_T
#  endif
# endif

# ifndef HAVE_ARCH_TIMESPEC32
#  define HAVE_ARCH_TIMESPEC32 (MIN_KLONGSIZE == 4)
# endif

#endif /* !STRACE_ARCH_DEFS_H */