aboutsummaryrefslogtreecommitdiff
path: root/linux-user/xtensa
diff options
context:
space:
mode:
authorMax Filippov <jcmvbkbc@gmail.com>2017-01-25 10:54:11 -0800
committerMax Filippov <jcmvbkbc@gmail.com>2018-03-16 09:40:34 -0700
commitba7651fba54199e5dedbbd08157687291b9dbae3 (patch)
treef03b970e3cfdfde9040ff14c59dc0bf3acfb6fe3 /linux-user/xtensa
parentbf9c3a5a96dfabcdcb7964110866bb9bc06a43c1 (diff)
target/xtensa: add linux-user support
Import list of syscalls from the kernel source. Conditionalize code/data that is only used with softmmu. Implement exception handlers. Implement signal hander (only the core registers for now, no coprocessors or TIE). Cc: Riku Voipio <riku.voipio@iki.fi> Cc: Laurent Vivier <laurent@vivier.eu> Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Diffstat (limited to 'linux-user/xtensa')
-rw-r--r--linux-user/xtensa/syscall.h0
-rw-r--r--linux-user/xtensa/syscall_nr.h437
-rw-r--r--linux-user/xtensa/target_cpu.h22
-rw-r--r--linux-user/xtensa/target_elf.h16
-rw-r--r--linux-user/xtensa/target_signal.h28
-rw-r--r--linux-user/xtensa/target_structs.h28
-rw-r--r--linux-user/xtensa/target_syscall.h49
-rw-r--r--linux-user/xtensa/termbits.h328
8 files changed, 908 insertions, 0 deletions
diff --git a/linux-user/xtensa/syscall.h b/linux-user/xtensa/syscall.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/linux-user/xtensa/syscall.h
diff --git a/linux-user/xtensa/syscall_nr.h b/linux-user/xtensa/syscall_nr.h
new file mode 100644
index 0000000000..cd5ef45f84
--- /dev/null
+++ b/linux-user/xtensa/syscall_nr.h
@@ -0,0 +1,437 @@
+/*
+ * include/asm-xtensa/unistd.h
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2001 - 2009 Tensilica Inc.
+ */
+
+#ifndef _XTENSA_UNISTD_H
+#define _XTENSA_UNISTD_H
+
+#define TARGET_NR_spill 0
+#define TARGET_NR_xtensa 1
+#define TARGET_NR_available4 2
+#define TARGET_NR_available5 3
+#define TARGET_NR_available6 4
+#define TARGET_NR_available7 5
+#define TARGET_NR_available8 6
+#define TARGET_NR_available9 7
+
+/* File Operations */
+
+#define TARGET_NR_open 8
+#define TARGET_NR_close 9
+#define TARGET_NR_dup 10
+#define TARGET_NR_dup2 11
+#define TARGET_NR_read 12
+#define TARGET_NR_write 13
+#define TARGET_NR_select 14
+#define TARGET_NR_lseek 15
+#define TARGET_NR_poll 16
+#define TARGET_NR__llseek 17
+#define TARGET_NR_epoll_wait 18
+#define TARGET_NR_epoll_ctl 19
+#define TARGET_NR_epoll_create 20
+#define TARGET_NR_creat 21
+#define TARGET_NR_truncate 22
+#define TARGET_NR_ftruncate 23
+#define TARGET_NR_readv 24
+#define TARGET_NR_writev 25
+#define TARGET_NR_fsync 26
+#define TARGET_NR_fdatasync 27
+#define TARGET_NR_truncate64 28
+#define TARGET_NR_ftruncate64 29
+#define TARGET_NR_pread64 30
+#define TARGET_NR_pwrite64 31
+
+#define TARGET_NR_link 32
+#define TARGET_NR_rename 33
+#define TARGET_NR_symlink 34
+#define TARGET_NR_readlink 35
+#define TARGET_NR_mknod 36
+#define TARGET_NR_pipe 37
+#define TARGET_NR_unlink 38
+#define TARGET_NR_rmdir 39
+
+#define TARGET_NR_mkdir 40
+#define TARGET_NR_chdir 41
+#define TARGET_NR_fchdir 42
+#define TARGET_NR_getcwd 43
+
+#define TARGET_NR_chmod 44
+#define TARGET_NR_chown 45
+#define TARGET_NR_stat 46
+#define TARGET_NR_stat64 47
+
+#define TARGET_NR_lchown 48
+#define TARGET_NR_lstat 49
+#define TARGET_NR_lstat64 50
+#define TARGET_NR_available51 51
+
+#define TARGET_NR_fchmod 52
+#define TARGET_NR_fchown 53
+#define TARGET_NR_fstat 54
+#define TARGET_NR_fstat64 55
+
+#define TARGET_NR_flock 56
+#define TARGET_NR_access 57
+#define TARGET_NR_umask 58
+#define TARGET_NR_getdents 59
+#define TARGET_NR_getdents64 60
+#define TARGET_NR_fcntl64 61
+#define TARGET_NR_fallocate 62
+#define TARGET_NR_fadvise64_64 63
+#define TARGET_NR_utime 64 /* glibc 2.3.3 ?? */
+#define TARGET_NR_utimes 65
+#define TARGET_NR_ioctl 66
+#define TARGET_NR_fcntl 67
+
+#define TARGET_NR_setxattr 68
+#define TARGET_NR_getxattr 69
+#define TARGET_NR_listxattr 70
+#define TARGET_NR_removexattr 71
+#define TARGET_NR_lsetxattr 72
+#define TARGET_NR_lgetxattr 73
+#define TARGET_NR_llistxattr 74
+#define TARGET_NR_lremovexattr 75
+#define TARGET_NR_fsetxattr 76
+#define TARGET_NR_fgetxattr 77
+#define TARGET_NR_flistxattr 78
+#define TARGET_NR_fremovexattr 79
+
+/* File Map / Shared Memory Operations */
+
+#define TARGET_NR_mmap2 80
+#define TARGET_NR_munmap 81
+#define TARGET_NR_mprotect 82
+#define TARGET_NR_brk 83
+#define TARGET_NR_mlock 84
+#define TARGET_NR_munlock 85
+#define TARGET_NR_mlockall 86
+#define TARGET_NR_munlockall 87
+#define TARGET_NR_mremap 88
+#define TARGET_NR_msync 89
+#define TARGET_NR_mincore 90
+#define TARGET_NR_madvise 91
+#define TARGET_NR_shmget 92
+#define TARGET_NR_shmat 93
+#define TARGET_NR_shmctl 94
+#define TARGET_NR_shmdt 95
+
+/* Socket Operations */
+
+#define TARGET_NR_socket 96
+#define TARGET_NR_setsockopt 97
+#define TARGET_NR_getsockopt 98
+#define TARGET_NR_shutdown 99
+
+#define TARGET_NR_bind 100
+#define TARGET_NR_connect 101
+#define TARGET_NR_listen 102
+#define TARGET_NR_accept 103
+
+#define TARGET_NR_getsockname 104
+#define TARGET_NR_getpeername 105
+#define TARGET_NR_sendmsg 106
+#define TARGET_NR_recvmsg 107
+#define TARGET_NR_send 108
+#define TARGET_NR_recv 109
+#define TARGET_NR_sendto 110
+#define TARGET_NR_recvfrom 111
+
+#define TARGET_NR_socketpair 112
+#define TARGET_NR_sendfile 113
+#define TARGET_NR_sendfile64 114
+#define TARGET_NR_sendmmsg 115
+
+/* Process Operations */
+
+#define TARGET_NR_clone 116
+#define TARGET_NR_execve 117
+#define TARGET_NR_exit 118
+#define TARGET_NR_exit_group 119
+#define TARGET_NR_getpid 120
+#define TARGET_NR_wait4 121
+#define TARGET_NR_waitid 122
+#define TARGET_NR_kill 123
+#define TARGET_NR_tkill 124
+#define TARGET_NR_tgkill 125
+#define TARGET_NR_set_tid_address 126
+#define TARGET_NR_gettid 127
+#define TARGET_NR_setsid 128
+#define TARGET_NR_getsid 129
+#define TARGET_NR_prctl 130
+#define TARGET_NR_personality 131
+#define TARGET_NR_getpriority 132
+#define TARGET_NR_setpriority 133
+#define TARGET_NR_setitimer 134
+#define TARGET_NR_getitimer 135
+#define TARGET_NR_setuid 136
+#define TARGET_NR_getuid 137
+#define TARGET_NR_setgid 138
+#define TARGET_NR_getgid 139
+#define TARGET_NR_geteuid 140
+#define TARGET_NR_getegid 141
+#define TARGET_NR_setreuid 142
+#define TARGET_NR_setregid 143
+#define TARGET_NR_setresuid 144
+#define TARGET_NR_getresuid 145
+#define TARGET_NR_setresgid 146
+#define TARGET_NR_getresgid 147
+#define TARGET_NR_setpgid 148
+#define TARGET_NR_getpgid 149
+#define TARGET_NR_getppid 150
+#define TARGET_NR_getpgrp 151
+
+#define TARGET_NR_reserved152 152 /* set_thread_area */
+#define TARGET_NR_reserved153 153 /* get_thread_area */
+#define TARGET_NR_times 154
+#define TARGET_NR_acct 155
+#define TARGET_NR_sched_setaffinity 156
+#define TARGET_NR_sched_getaffinity 157
+#define TARGET_NR_capget 158
+#define TARGET_NR_capset 159
+#define TARGET_NR_ptrace 160
+#define TARGET_NR_semtimedop 161
+#define TARGET_NR_semget 162
+#define TARGET_NR_semop 163
+#define TARGET_NR_semctl 164
+#define TARGET_NR_available165 165
+#define TARGET_NR_msgget 166
+#define TARGET_NR_msgsnd 167
+#define TARGET_NR_msgrcv 168
+#define TARGET_NR_msgctl 169
+#define TARGET_NR_available170 170
+
+/* File System */
+
+#define TARGET_NR_umount2 171
+#define TARGET_NR_mount 172
+#define TARGET_NR_swapon 173
+#define TARGET_NR_chroot 174
+#define TARGET_NR_pivot_root 175
+#define TARGET_NR_umount 176
+#define TARGET_NR_swapoff 177
+#define TARGET_NR_sync 178
+#define TARGET_NR_syncfs 179
+#define TARGET_NR_setfsuid 180
+#define TARGET_NR_setfsgid 181
+#define TARGET_NR_sysfs 182
+#define TARGET_NR_ustat 183
+#define TARGET_NR_statfs 184
+#define TARGET_NR_fstatfs 185
+#define TARGET_NR_statfs64 186
+#define TARGET_NR_fstatfs64 187
+
+/* System */
+
+#define TARGET_NR_setrlimit 188
+#define TARGET_NR_getrlimit 189
+#define TARGET_NR_getrusage 190
+#define TARGET_NR_futex 191
+#define TARGET_NR_gettimeofday 192
+#define TARGET_NR_settimeofday 193
+#define TARGET_NR_adjtimex 194
+#define TARGET_NR_nanosleep 195
+#define TARGET_NR_getgroups 196
+#define TARGET_NR_setgroups 197
+#define TARGET_NR_sethostname 198
+#define TARGET_NR_setdomainname 199
+#define TARGET_NR_syslog 200
+#define TARGET_NR_vhangup 201
+#define TARGET_NR_uselib 202
+#define TARGET_NR_reboot 203
+#define TARGET_NR_quotactl 204
+#define TARGET_NR_nfsservctl 205
+#define TARGET_NR__sysctl 206
+#define TARGET_NR_bdflush 207
+#define TARGET_NR_uname 208
+#define TARGET_NR_sysinfo 209
+#define TARGET_NR_init_module 210
+#define TARGET_NR_delete_module 211
+
+#define TARGET_NR_sched_setparam 212
+#define TARGET_NR_sched_getparam 213
+#define TARGET_NR_sched_setscheduler 214
+#define TARGET_NR_sched_getscheduler 215
+#define TARGET_NR_sched_get_priority_max 216
+#define TARGET_NR_sched_get_priority_min 217
+#define TARGET_NR_sched_rr_get_interval 218
+#define TARGET_NR_sched_yield 219
+#define TARGET_NR_available222 222
+
+/* Signal Handling */
+
+#define TARGET_NR_restart_syscall 223
+#define TARGET_NR_sigaltstack 224
+#define TARGET_NR_rt_sigreturn 225
+#define TARGET_NR_rt_sigaction 226
+#define TARGET_NR_rt_sigprocmask 227
+#define TARGET_NR_rt_sigpending 228
+#define TARGET_NR_rt_sigtimedwait 229
+#define TARGET_NR_rt_sigqueueinfo 230
+#define TARGET_NR_rt_sigsuspend 231
+
+/* Message */
+
+#define TARGET_NR_mq_open 232
+#define TARGET_NR_mq_unlink 233
+#define TARGET_NR_mq_timedsend 234
+#define TARGET_NR_mq_timedreceive 235
+#define TARGET_NR_mq_notify 236
+#define TARGET_NR_mq_getsetattr 237
+#define TARGET_NR_available238 238
+
+/* IO */
+
+#define TARGET_NR_io_setup 239
+#define TARGET_NR_io_destroy 240
+#define TARGET_NR_io_submit 241
+#define TARGET_NR_io_getevents 242
+#define TARGET_NR_io_cancel 243
+#define TARGET_NR_clock_settime 244
+#define TARGET_NR_clock_gettime 245
+#define TARGET_NR_clock_getres 246
+#define TARGET_NR_clock_nanosleep 247
+
+/* Timer */
+
+#define TARGET_NR_timer_create 248
+#define TARGET_NR_timer_delete 249
+#define TARGET_NR_timer_settime 250
+#define TARGET_NR_timer_gettime 251
+#define TARGET_NR_timer_getoverrun 252
+
+/* System */
+
+#define TARGET_NR_reserved253 253
+#define TARGET_NR_lookup_dcookie 254
+#define TARGET_NR_available255 255
+#define TARGET_NR_add_key 256
+#define TARGET_NR_request_key 257
+#define TARGET_NR_keyctl 258
+#define TARGET_NR_available259 259
+
+
+#define TARGET_NR_readahead 260
+#define TARGET_NR_remap_file_pages 261
+#define TARGET_NR_migrate_pages 262
+#define TARGET_NR_mbind 263
+#define TARGET_NR_get_mempolicy 264
+#define TARGET_NR_set_mempolicy 265
+#define TARGET_NR_unshare 266
+#define TARGET_NR_move_pages 267
+#define TARGET_NR_splice 268
+#define TARGET_NR_tee 269
+#define TARGET_NR_vmsplice 270
+#define TARGET_NR_available271 271
+
+#define TARGET_NR_pselect6 272
+#define TARGET_NR_ppoll 273
+#define TARGET_NR_epoll_pwait 274
+#define TARGET_NR_epoll_create1 275
+
+#define TARGET_NR_inotify_init 276
+#define TARGET_NR_inotify_add_watch 277
+#define TARGET_NR_inotify_rm_watch 278
+#define TARGET_NR_inotify_init1 279
+
+#define TARGET_NR_getcpu 280
+#define TARGET_NR_kexec_load 281
+
+#define TARGET_NR_ioprio_set 282
+#define TARGET_NR_ioprio_get 283
+
+#define TARGET_NR_set_robust_list 284
+#define TARGET_NR_get_robust_list 285
+#define TARGET_NR_available286 286
+#define TARGET_NR_available287 287
+
+/* Relative File Operations */
+
+#define TARGET_NR_openat 288
+#define TARGET_NR_mkdirat 289
+#define TARGET_NR_mknodat 290
+#define TARGET_NR_unlinkat 291
+#define TARGET_NR_renameat 292
+#define TARGET_NR_linkat 293
+#define TARGET_NR_symlinkat 294
+#define TARGET_NR_readlinkat 295
+#define TARGET_NR_utimensat 296
+#define TARGET_NR_fchownat 297
+#define TARGET_NR_futimesat 298
+#define TARGET_NR_fstatat64 299
+#define TARGET_NR_fchmodat 300
+#define TARGET_NR_faccessat 301
+#define TARGET_NR_available302 302
+#define TARGET_NR_available303 303
+
+#define TARGET_NR_signalfd 304
+/* 305 was TARGET_NR_timerfd */
+#define TARGET_NR_eventfd 306
+#define TARGET_NR_recvmmsg 307
+
+#define TARGET_NR_setns 308
+#define TARGET_NR_signalfd4 309
+#define TARGET_NR_dup3 310
+#define TARGET_NR_pipe2 311
+
+#define TARGET_NR_timerfd_create 312
+#define TARGET_NR_timerfd_settime 313
+#define TARGET_NR_timerfd_gettime 314
+#define TARGET_NR_available315 315
+
+#define TARGET_NR_eventfd2 316
+#define TARGET_NR_preadv 317
+#define TARGET_NR_pwritev 318
+#define TARGET_NR_available319 319
+
+#define TARGET_NR_fanotify_init 320
+#define TARGET_NR_fanotify_mark 321
+#define TARGET_NR_process_vm_readv 322
+#define TARGET_NR_process_vm_writev 323
+
+#define TARGET_NR_name_to_handle_at 324
+#define TARGET_NR_open_by_handle_at 325
+#define TARGET_NR_sync_file_range2 326
+#define TARGET_NR_perf_event_open 327
+
+#define TARGET_NR_rt_tgsigqueueinfo 328
+#define TARGET_NR_clock_adjtime 329
+#define TARGET_NR_prlimit64 330
+#define TARGET_NR_kcmp 331
+
+#define TARGET_NR_finit_module 332
+
+#define TARGET_NR_accept4 333
+
+#define TARGET_NR_sched_setattr 334
+#define TARGET_NR_sched_getattr 335
+
+#define TARGET_NR_renameat2 336
+
+#define TARGET_NR_seccomp 337
+#define TARGET_NR_getrandom 338
+#define TARGET_NR_memfd_create 339
+#define TARGET_NR_bpf 340
+#define TARGET_NR_execveat 341
+
+#define TARGET_NR_userfaultfd 342
+#define TARGET_NR_membarrier 343
+#define TARGET_NR_mlock2 344
+#define TARGET_NR_copy_file_range 345
+#define TARGET_NR_preadv2 346
+#define TARGET_NR_pwritev2 347
+
+#define TARGET_NR_pkey_mprotect 348
+#define TARGET_NR_pkey_alloc 349
+#define TARGET_NR_pkey_free 350
+
+#define TARGET_NR_statx 351
+
+#define TARGET_NR_syscall_count 352
+
+#endif /* _XTENSA_UNISTD_H */
diff --git a/linux-user/xtensa/target_cpu.h b/linux-user/xtensa/target_cpu.h
new file mode 100644
index 0000000000..747d828614
--- /dev/null
+++ b/linux-user/xtensa/target_cpu.h
@@ -0,0 +1,22 @@
+/*
+ * Xtensa-specific CPU ABI and functions for linux-user
+ */
+#ifndef XTENSA_TARGET_CPU_H
+#define XTENSA_TARGET_CPU_H
+
+static inline void cpu_clone_regs(CPUXtensaState *env, target_ulong newsp)
+{
+ if (newsp) {
+ env->regs[1] = newsp;
+ env->sregs[WINDOW_BASE] = 0;
+ env->sregs[WINDOW_START] = 0x1;
+ }
+ env->regs[2] = 0;
+}
+
+static inline void cpu_set_tls(CPUXtensaState *env, target_ulong newtls)
+{
+ env->uregs[THREADPTR] = newtls;
+}
+
+#endif
diff --git a/linux-user/xtensa/target_elf.h b/linux-user/xtensa/target_elf.h
new file mode 100644
index 0000000000..a9a3fabd89
--- /dev/null
+++ b/linux-user/xtensa/target_elf.h
@@ -0,0 +1,16 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation, or (at your option) any
+ * later version. See the COPYING file in the top-level directory.
+ */
+
+#ifndef XTENSA_TARGET_ELF_H
+#define XTENSA_TARGET_ELF_H
+
+static inline const char *cpu_get_model(uint32_t eflags)
+{
+ return XTENSA_DEFAULT_CPU_MODEL;
+}
+
+#endif
diff --git a/linux-user/xtensa/target_signal.h b/linux-user/xtensa/target_signal.h
new file mode 100644
index 0000000000..c6962e70af
--- /dev/null
+++ b/linux-user/xtensa/target_signal.h
@@ -0,0 +1,28 @@
+#ifndef XTENSA_TARGET_SIGNAL_H
+#define XTENSA_TARGET_SIGNAL_H
+
+#include "cpu.h"
+
+/* this struct defines a stack used during syscall handling */
+
+typedef struct target_sigaltstack {
+ abi_ulong ss_sp;
+ abi_int ss_flags;
+ abi_ulong ss_size;
+} target_stack_t;
+
+/*
+ * sigaltstack controls
+ */
+#define TARGET_SS_ONSTACK 1
+#define TARGET_SS_DISABLE 2
+
+#define TARGET_MINSIGSTKSZ 2048
+#define TARGET_SIGSTKSZ 8192
+
+static inline abi_ulong get_sp_from_cpustate(CPUXtensaState *state)
+{
+ return state->regs[1];
+}
+
+#endif
diff --git a/linux-user/xtensa/target_structs.h b/linux-user/xtensa/target_structs.h
new file mode 100644
index 0000000000..020e20e242
--- /dev/null
+++ b/linux-user/xtensa/target_structs.h
@@ -0,0 +1,28 @@
+#ifndef XTENSA_TARGET_STRUCTS_T
+#define XTENSA_TARGET_STRUCTS_T
+
+struct target_ipc_perm {
+ abi_int __key; /* Key. */
+ abi_uint uid; /* Owner's user ID. */
+ abi_uint gid; /* Owner's group ID. */
+ abi_uint cuid; /* Creator's user ID. */
+ abi_uint cgid; /* Creator's group ID. */
+ abi_uint mode; /* Read/write permission. */
+ abi_ushort __seq; /* Sequence number. */
+};
+
+struct target_shmid_ds {
+ struct target_ipc_perm shm_perm; /* operation permission struct */
+ abi_int shm_segsz; /* size of segment in bytes */
+ abi_long shm_atime; /* time of last shmat() */
+ abi_long shm_dtime; /* time of last shmdt() */
+ abi_long shm_ctime; /* time of last change by shmctl() */
+ abi_ushort shm_cpid; /* pid of creator */
+ abi_ushort shm_lpid; /* pid of last shmop */
+ abi_ushort shm_nattch; /* number of current attaches */
+ abi_ushort shm_unused; /* compatibility */
+ abi_ulong __unused2;
+ abi_ulong __unused3;
+};
+
+#endif
diff --git a/linux-user/xtensa/target_syscall.h b/linux-user/xtensa/target_syscall.h
new file mode 100644
index 0000000000..3866dad849
--- /dev/null
+++ b/linux-user/xtensa/target_syscall.h
@@ -0,0 +1,49 @@
+#ifndef XTENSA_TARGET_SYSCALL_H
+#define XTENSA_TARGET_SYSCALL_H
+
+#define UNAME_MACHINE "xtensa"
+
+#define UNAME_MINIMUM_RELEASE "3.19"
+#define TARGET_CLONE_BACKWARDS
+
+#define MMAP_SHIFT TARGET_PAGE_BITS
+
+typedef uint32_t xtensa_reg_t;
+typedef struct {
+} xtregs_opt_t; /* TODO */
+
+struct target_pt_regs {
+ xtensa_reg_t pc; /* 4 */
+ xtensa_reg_t ps; /* 8 */
+ xtensa_reg_t depc; /* 12 */
+ xtensa_reg_t exccause; /* 16 */
+ xtensa_reg_t excvaddr; /* 20 */
+ xtensa_reg_t debugcause; /* 24 */
+ xtensa_reg_t wmask; /* 28 */
+ xtensa_reg_t lbeg; /* 32 */
+ xtensa_reg_t lend; /* 36 */
+ xtensa_reg_t lcount; /* 40 */
+ xtensa_reg_t sar; /* 44 */
+ xtensa_reg_t windowbase; /* 48 */
+ xtensa_reg_t windowstart; /* 52 */
+ xtensa_reg_t syscall; /* 56 */
+ xtensa_reg_t icountlevel; /* 60 */
+ xtensa_reg_t scompare1; /* 64 */
+ xtensa_reg_t threadptr; /* 68 */
+
+ /* Additional configurable registers that are used by the compiler. */
+ xtregs_opt_t xtregs_opt;
+
+ /* Make sure the areg field is 16 bytes aligned. */
+ int align[0] __attribute__ ((aligned(16)));
+
+ /* current register frame.
+ * Note: The ESF for kernel exceptions ends after 16 registers!
+ */
+ xtensa_reg_t areg[16];
+};
+
+#define TARGET_MLOCKALL_MCL_CURRENT 1
+#define TARGET_MLOCKALL_MCL_FUTURE 2
+
+#endif
diff --git a/linux-user/xtensa/termbits.h b/linux-user/xtensa/termbits.h
new file mode 100644
index 0000000000..eed8286de7
--- /dev/null
+++ b/linux-user/xtensa/termbits.h
@@ -0,0 +1,328 @@
+/*
+ * include/asm-xtensa/termbits.h
+ *
+ * Copied from SH.
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2001 - 2005 Tensilica Inc.
+ */
+
+#ifndef _XTENSA_TERMBITS_H
+#define _XTENSA_TERMBITS_H
+
+#include <linux/posix_types.h>
+
+typedef unsigned char cc_t;
+typedef unsigned int speed_t;
+typedef unsigned int tcflag_t;
+
+#define TARGET_NCCS 19
+struct target_termios {
+ tcflag_t c_iflag; /* input mode flags */
+ tcflag_t c_oflag; /* output mode flags */
+ tcflag_t c_cflag; /* control mode flags */
+ tcflag_t c_lflag; /* local mode flags */
+ cc_t c_line; /* line discipline */
+ cc_t c_cc[TARGET_NCCS]; /* control characters */
+};
+
+struct target_termios2 {
+ tcflag_t c_iflag; /* input mode flags */
+ tcflag_t c_oflag; /* output mode flags */
+ tcflag_t c_cflag; /* control mode flags */
+ tcflag_t c_lflag; /* local mode flags */
+ cc_t c_line; /* line discipline */
+ cc_t c_cc[TARGET_NCCS]; /* control characters */
+ speed_t c_ispeed; /* input speed */
+ speed_t c_ospeed; /* output speed */
+};
+
+struct target_ktermios {
+ tcflag_t c_iflag; /* input mode flags */
+ tcflag_t c_oflag; /* output mode flags */
+ tcflag_t c_cflag; /* control mode flags */
+ tcflag_t c_lflag; /* local mode flags */
+ cc_t c_line; /* line discipline */
+ cc_t c_cc[TARGET_NCCS]; /* control characters */
+ speed_t c_ispeed; /* input speed */
+ speed_t c_ospeed; /* output speed */
+};
+
+/* c_cc characters */
+
+#define TARGET_VINTR 0
+#define TARGET_VQUIT 1
+#define TARGET_VERASE 2
+#define TARGET_VKILL 3
+#define TARGET_VEOF 4
+#define TARGET_VTIME 5
+#define TARGET_VMIN 6
+#define TARGET_VSWTC 7
+#define TARGET_VSTART 8
+#define TARGET_VSTOP 9
+#define TARGET_VSUSP 10
+#define TARGET_VEOL 11
+#define TARGET_VREPRINT 12
+#define TARGET_VDISCARD 13
+#define TARGET_VWERASE 14
+#define TARGET_VLNEXT 15
+#define TARGET_VEOL2 16
+
+/* c_iflag bits */
+
+#define TARGET_IGNBRK 0000001
+#define TARGET_BRKINT 0000002
+#define TARGET_IGNPAR 0000004
+#define TARGET_PARMRK 0000010
+#define TARGET_INPCK 0000020
+#define TARGET_ISTRIP 0000040
+#define TARGET_INLCR 0000100
+#define TARGET_IGNCR 0000200
+#define TARGET_ICRNL 0000400
+#define TARGET_IUCLC 0001000
+#define TARGET_IXON 0002000
+#define TARGET_IXANY 0004000
+#define TARGET_IXOFF 0010000
+#define TARGET_IMAXBEL 0020000
+#define TARGET_IUTF8 0040000
+
+/* c_oflag bits */
+
+#define TARGET_OPOST 0000001
+#define TARGET_OLCUC 0000002
+#define TARGET_ONLCR 0000004
+#define TARGET_OCRNL 0000010
+#define TARGET_ONOCR 0000020
+#define TARGET_ONLRET 0000040
+#define TARGET_OFILL 0000100
+#define TARGET_OFDEL 0000200
+#define TARGET_NLDLY 0000400
+#define TARGET_NL0 0000000
+#define TARGET_NL1 0000400
+#define TARGET_CRDLY 0003000
+#define TARGET_CR0 0000000
+#define TARGET_CR1 0001000
+#define TARGET_CR2 0002000
+#define TARGET_CR3 0003000
+#define TARGET_TABDLY 0014000
+#define TARGET_TAB0 0000000
+#define TARGET_TAB1 0004000
+#define TARGET_TAB2 0010000
+#define TARGET_TAB3 0014000
+#define TARGET_XTABS 0014000
+#define TARGET_BSDLY 0020000
+#define TARGET_BS0 0000000
+#define TARGET_BS1 0020000
+#define TARGET_VTDLY 0040000
+#define TARGET_VT0 0000000
+#define TARGET_VT1 0040000
+#define TARGET_FFDLY 0100000
+#define TARGET_FF0 0000000
+#define TARGET_FF1 0100000
+
+/* c_cflag bit meaning */
+
+#define TARGET_CBAUD 0010017
+#define TARGET_B0 0000000 /* hang up */
+#define TARGET_B50 0000001
+#define TARGET_B75 0000002
+#define TARGET_B110 0000003
+#define TARGET_B134 0000004
+#define TARGET_B150 0000005
+#define TARGET_B200 0000006
+#define TARGET_B300 0000007
+#define TARGET_B600 0000010
+#define TARGET_B1200 0000011
+#define TARGET_B1800 0000012
+#define TARGET_B2400 0000013
+#define TARGET_B4800 0000014
+#define TARGET_B9600 0000015
+#define TARGET_B19200 0000016
+#define TARGET_B38400 0000017
+#define TARGET_EXTA B19200
+#define TARGET_EXTB B38400
+#define TARGET_CSIZE 0000060
+#define TARGET_CS5 0000000
+#define TARGET_CS6 0000020
+#define TARGET_CS7 0000040
+#define TARGET_CS8 0000060
+#define TARGET_CSTOPB 0000100
+#define TARGET_CREAD 0000200
+#define TARGET_PARENB 0000400
+#define TARGET_PARODD 0001000
+#define TARGET_HUPCL 0002000
+#define TARGET_CLOCAL 0004000
+#define TARGET_CBAUDEX 0010000
+#define TARGET_BOTHER 0010000
+#define TARGET_B57600 0010001
+#define TARGET_B115200 0010002
+#define TARGET_B230400 0010003
+#define TARGET_B460800 0010004
+#define TARGET_B500000 0010005
+#define TARGET_B576000 0010006
+#define TARGET_B921600 0010007
+#define TARGET_B1000000 0010010
+#define TARGET_B1152000 0010011
+#define TARGET_B1500000 0010012
+#define TARGET_B2000000 0010013
+#define TARGET_B2500000 0010014
+#define TARGET_B3000000 0010015
+#define TARGET_B3500000 0010016
+#define TARGET_B4000000 0010017
+#define TARGET_CIBAUD 002003600000 /* input baud rate */
+#define TARGET_CMSPAR 010000000000 /* mark or space (stick) parity */
+#define TARGET_CRTSCTS 020000000000 /* flow control */
+
+#define TARGET_IBSHIFT 16 /* Shift from CBAUD to CIBAUD */
+
+/* c_lflag bits */
+
+#define TARGET_ISIG 0000001
+#define TARGET_ICANON 0000002
+#define TARGET_XCASE 0000004
+#define TARGET_ECHO 0000010
+#define TARGET_ECHOE 0000020
+#define TARGET_ECHOK 0000040
+#define TARGET_ECHONL 0000100
+#define TARGET_NOFLSH 0000200
+#define TARGET_TOSTOP 0000400
+#define TARGET_ECHOCTL 0001000
+#define TARGET_ECHOPRT 0002000
+#define TARGET_ECHOKE 0004000
+#define TARGET_FLUSHO 0010000
+#define TARGET_PENDIN 0040000
+#define TARGET_IEXTEN 0100000
+
+/* tcflow() and TCXONC use these */
+
+#define TARGET_TCOOFF 0
+#define TARGET_TCOON 1
+#define TARGET_TCIOFF 2
+#define TARGET_TCION 3
+
+/* tcflush() and TCFLSH use these */
+
+#define TARGET_TCIFLUSH 0
+#define TARGET_TCOFLUSH 1
+#define TARGET_TCIOFLUSH 2
+
+/* tcsetattr uses these */
+
+#define TARGET_TCSANOW 0
+#define TARGET_TCSADRAIN 1
+#define TARGET_TCSAFLUSH 2
+
+/* from arch/xtensa/include/uapi/asm/ioctls.h */
+
+#define TARGET_FIOCLEX _IO('f', 1)
+#define TARGET_FIONCLEX _IO('f', 2)
+#define TARGET_FIOASYNC _IOW('f', 125, int)
+#define TARGET_FIONBIO _IOW('f', 126, int)
+#define TARGET_FIONREAD _IOR('f', 127, int)
+#define TARGET_TIOCINQ FIONREAD
+#define TARGET_FIOQSIZE _IOR('f', 128, loff_t)
+
+#define TARGET_TCGETS 0x5401
+#define TARGET_TCSETS 0x5402
+#define TARGET_TCSETSW 0x5403
+#define TARGET_TCSETSF 0x5404
+
+#define TARGET_TCGETA 0x80127417 /* _IOR('t', 23, struct termio) */
+#define TARGET_TCSETA 0x40127418 /* _IOW('t', 24, struct termio) */
+#define TARGET_TCSETAW 0x40127419 /* _IOW('t', 25, struct termio) */
+#define TARGET_TCSETAF 0x4012741C /* _IOW('t', 28, struct termio) */
+
+#define TARGET_TCSBRK _IO('t', 29)
+#define TARGET_TCXONC _IO('t', 30)
+#define TARGET_TCFLSH _IO('t', 31)
+
+#define TARGET_TIOCSWINSZ 0x40087467 /* _IOW('t', 103, struct winsize) */
+#define TARGET_TIOCGWINSZ 0x80087468 /* _IOR('t', 104, struct winsize) */
+#define TARGET_TIOCSTART _IO('t', 110) /* start output, like ^Q */
+#define TARGET_TIOCSTOP _IO('t', 111) /* stop output, like ^S */
+#define TARGET_TIOCOUTQ _IOR('t', 115, int) /* output queue size */
+
+#define TARGET_TIOCSPGRP _IOW('t', 118, int)
+#define TARGET_TIOCGPGRP _IOR('t', 119, int)
+
+#define TARGET_TIOCEXCL _IO('T', 12)
+#define TARGET_TIOCNXCL _IO('T', 13)
+#define TARGET_TIOCSCTTY _IO('T', 14)
+
+#define TARGET_TIOCSTI _IOW('T', 18, char)
+#define TARGET_TIOCMGET _IOR('T', 21, unsigned int)
+#define TARGET_TIOCMBIS _IOW('T', 22, unsigned int)
+#define TARGET_TIOCMBIC _IOW('T', 23, unsigned int)
+#define TARGET_TIOCMSET _IOW('T', 24, unsigned int)
+# define TARGET_TIOCM_LE 0x001
+# define TARGET_TIOCM_DTR 0x002
+# define TARGET_TIOCM_RTS 0x004
+# define TARGET_TIOCM_ST 0x008
+# define TARGET_TIOCM_SR 0x010
+# define TARGET_TIOCM_CTS 0x020
+# define TARGET_TIOCM_CAR 0x040
+# define TARGET_TIOCM_RNG 0x080
+# define TARGET_TIOCM_DSR 0x100
+# define TARGET_TIOCM_CD TIOCM_CAR
+# define TARGET_TIOCM_RI TIOCM_RNG
+
+#define TARGET_TIOCGSOFTCAR _IOR('T', 25, unsigned int)
+#define TARGET_TIOCSSOFTCAR _IOW('T', 26, unsigned int)
+#define TARGET_TIOCLINUX _IOW('T', 28, char)
+#define TARGET_TIOCCONS _IO('T', 29)
+#define TARGET_TIOCGSERIAL 0x803C541E /*_IOR('T', 30, struct serial_struct)*/
+#define TARGET_TIOCSSERIAL 0x403C541F /*_IOW('T', 31, struct serial_struct)*/
+#define TARGET_TIOCPKT _IOW('T', 32, int)
+# define TARGET_TIOCPKT_DATA 0
+# define TARGET_TIOCPKT_FLUSHREAD 1
+# define TARGET_TIOCPKT_FLUSHWRITE 2
+# define TARGET_TIOCPKT_STOP 4
+# define TARGET_TIOCPKT_START 8
+# define TARGET_TIOCPKT_NOSTOP 16
+# define TARGET_TIOCPKT_DOSTOP 32
+# define TARGET_TIOCPKT_IOCTL 64
+
+
+#define TARGET_TIOCNOTTY _IO('T', 34)
+#define TARGET_TIOCSETD _IOW('T', 35, int)
+#define TARGET_TIOCGETD _IOR('T', 36, int)
+#define TARGET_TCSBRKP _IOW('T', 37, int) /* Needed for POSIX tcsendbreak()*/
+#define TARGET_TIOCSBRK _IO('T', 39) /* BSD compatibility */
+#define TARGET_TIOCCBRK _IO('T', 40) /* BSD compatibility */
+#define TARGET_TIOCGSID _IOR('T', 41, pid_t) /* Return the session ID of FD*/
+#define TARGET_TCGETS2 _IOR('T', 42, struct termios2)
+#define TARGET_TCSETS2 _IOW('T', 43, struct termios2)
+#define TARGET_TCSETSW2 _IOW('T', 44, struct termios2)
+#define TARGET_TCSETSF2 _IOW('T', 45, struct termios2)
+#define TARGET_TIOCGRS485 _IOR('T', 46, struct serial_rs485)
+#define TARGET_TIOCSRS485 _IOWR('T', 47, struct serial_rs485)
+#define TARGET_TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
+#define TARGET_TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
+#define TARGET_TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */
+#define TARGET_TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */
+#define TARGET_TIOCVHANGUP _IO('T', 0x37)
+#define TARGET_TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */
+#define TARGET_TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */
+#define TARGET_TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */
+#define TARGET_TIOCGPTPEER _IO('T', 0x41) /* Safely open the slave */
+
+#define TARGET_TIOCSERCONFIG _IO('T', 83)
+#define TARGET_TIOCSERGWILD _IOR('T', 84, int)
+#define TARGET_TIOCSERSWILD _IOW('T', 85, int)
+#define TARGET_TIOCGLCKTRMIOS 0x5456
+#define TARGET_TIOCSLCKTRMIOS 0x5457
+#define TARGET_TIOCSERGSTRUCT 0x5458 /* For debugging only */
+#define TARGET_TIOCSERGETLSR _IOR('T', 89, unsigned int) /* Get line status reg. */
+/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
+# define TARGET_TIOCSER_TEMT 0x01 /* Transmitter physically empty */
+#define TARGET_TIOCSERGETMULTI 0x80a8545a /* Get multiport config */
+/* _IOR('T', 90, struct serial_multiport_struct) */
+#define TARGET_TIOCSERSETMULTI 0x40a8545b /* Set multiport config */
+/* _IOW('T', 91, struct serial_multiport_struct) */
+
+#define TARGET_TIOCMIWAIT _IO('T', 92) /* wait for a change on serial input line(s) */
+#define TARGET_TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
+#endif /* _XTENSA_TERMBITS_H */