summary refs log tree commit diff stats
path: root/linux-user/xtensa
diff options
context:
space:
mode:
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 */