From d52c541b6293eeebf8ecdc8cf9b31cda3022394b Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Tue, 13 Oct 2020 23:45:25 +0300 Subject: [PATCH] linux-user: add loading ELFs for e2kg --- linux-user/e2k/cpu_loop.c | 55 +++++ linux-user/e2k/sockbits.h | 1 + linux-user/e2k/syscall_nr.h | 405 +++++++++++++++++++++++++++++++ linux-user/e2k/target_cpu.h | 30 +++ linux-user/e2k/target_elf.h | 7 + linux-user/e2k/target_fcntl.h | 4 + linux-user/e2k/target_prctl.h | 1 + linux-user/e2k/target_resource.h | 1 + linux-user/e2k/target_signal.h | 15 ++ linux-user/e2k/target_syscall.h | 66 +++++ linux-user/e2k/termbits.h | 6 + linux-user/elfload.c | 23 ++ 12 files changed, 614 insertions(+) create mode 100644 linux-user/e2k/cpu_loop.c create mode 100644 linux-user/e2k/sockbits.h create mode 100644 linux-user/e2k/syscall_nr.h create mode 100644 linux-user/e2k/target_cpu.h create mode 100644 linux-user/e2k/target_elf.h create mode 100644 linux-user/e2k/target_fcntl.h create mode 100644 linux-user/e2k/target_prctl.h create mode 100644 linux-user/e2k/target_resource.h create mode 100644 linux-user/e2k/target_signal.h create mode 100644 linux-user/e2k/target_syscall.h create mode 100644 linux-user/e2k/termbits.h diff --git a/linux-user/e2k/cpu_loop.c b/linux-user/e2k/cpu_loop.c new file mode 100644 index 0000000000..6a3ebd1aaa --- /dev/null +++ b/linux-user/e2k/cpu_loop.c @@ -0,0 +1,55 @@ +/* + * qemu user cpu loop + * + * Copyright (c) 2003-2008 Fabrice Bellard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#include "qemu/osdep.h" +#include "qemu/help-texts.h" +#include "qemu.h" +#include "user-internals.h" +#include "signal-common.h" +#include "user-mmap.h" +#include "cpu_loop-common.h" + +void cpu_loop(CPUE2KState *env) +{ + CPUState *cs = env_cpu(env); + int trapnr, n, sig; + target_siginfo_t info; + target_ulong addr; + abi_long ret; + + while (1) { + cpu_exec_start(cs); + trapnr = cpu_exec(cs); + cpu_exec_end(cs); + process_queued_cpu_work(cs); + + switch (trapnr) { + default: + fprintf(stderr, "Unhandled trap: 0x%x\n", trapnr); + cpu_dump_state(cs, stderr, 0); + exit(EXIT_FAILURE); + } + process_pending_signals (env); + } +} + +void target_cpu_copy_regs(CPUE2KState *env, struct target_pt_regs *regs) +{ + // TODO +} diff --git a/linux-user/e2k/sockbits.h b/linux-user/e2k/sockbits.h new file mode 100644 index 0000000000..52feed05f0 --- /dev/null +++ b/linux-user/e2k/sockbits.h @@ -0,0 +1 @@ +#include "../generic/sockbits.h" diff --git a/linux-user/e2k/syscall_nr.h b/linux-user/e2k/syscall_nr.h new file mode 100644 index 0000000000..d85cd7f58d --- /dev/null +++ b/linux-user/e2k/syscall_nr.h @@ -0,0 +1,405 @@ +/* + * This file contains the system call numbers. + */ +#ifndef E2K_SYSCALL_NR_H +#define E2K_SYSCALL_NR_H + +#define TARGET_NR_restart_syscall 0 +#define TARGET_NR_exit 1 +#define TARGET_NR_fork 2 +#define TARGET_NR_read 3 +#define TARGET_NR_write 4 +#define TARGET_NR_open 5 +#define TARGET_NR_close 6 +#define TARGET_NR_waitpid 7 +#define TARGET_NR_creat 8 +#define TARGET_NR_link 9 +#define TARGET_NR_unlink 10 +#define TARGET_NR_execve 11 +#define TARGET_NR_chdir 12 +#define TARGET_NR_time 13 +#define TARGET_NR_mknod 14 +#define TARGET_NR_chmod 15 +#define TARGET_NR_lchown 16 +#define TARGET_NR_break 17 +#define TARGET_NR_oldstat 18 +#define TARGET_NR_lseek 19 +#define TARGET_NR_getpid 20 +#define TARGET_NR_mount 21 +#define TARGET_NR_umount 22 +#define TARGET_NR_setuid 23 +#define TARGET_NR_getuid 24 +#define TARGET_NR_stime 25 +#define TARGET_NR_ptrace 26 +#define TARGET_NR_alarm 27 +#define TARGET_NR_oldfstat 28 +#define TARGET_NR_pause 29 +#define TARGET_NR_utime 30 +#define TARGET_NR_stty 31 +#define TARGET_NR_gtty 32 +#define TARGET_NR_access 33 +#define TARGET_NR_nice 34 +#define TARGET_NR_ftime 35 +#define TARGET_NR_sync 36 +#define TARGET_NR_kill 37 +#define TARGET_NR_rename 38 +#define TARGET_NR_mkdir 39 +#define TARGET_NR_rmdir 40 +#define TARGET_NR_dup 41 +#define TARGET_NR_pipe 42 +#define TARGET_NR_times 43 +#define TARGET_NR_prof 44 +#define TARGET_NR_brk 45 +#define TARGET_NR_setgid 46 +#define TARGET_NR_getgid 47 +#define TARGET_NR_signal 48 +#define TARGET_NR_geteuid 49 +#define TARGET_NR_getegid 50 +#define TARGET_NR_acct 51 +#define TARGET_NR_umount2 52 +#define TARGET_NR_lock 53 +#define TARGET_NR_ioctl 54 +#define TARGET_NR_fcntl 55 +#define TARGET_NR_mpx 56 +#define TARGET_NR_setpgid 57 +#define TARGET_NR_ulimit 58 +#define TARGET_NR_oldolduname 59 +#define TARGET_NR_umask 60 +#define TARGET_NR_chroot 61 +#define TARGET_NR_ustat 62 +#define TARGET_NR_dup2 63 +#define TARGET_NR_getppid 64 +#define TARGET_NR_getpgrp 65 +#define TARGET_NR_setsid 66 +#define TARGET_NR_sigaction 67 +#define TARGET_NR_sgetmask 68 +#define TARGET_NR_ssetmask 69 +#define TARGET_NR_setreuid 70 +#define TARGET_NR_setregid 71 +#define TARGET_NR_sigsuspend 72 +#define TARGET_NR_sigpending 73 +#define TARGET_NR_sethostname 74 +#define TARGET_NR_setrlimit 75 +#define TARGET_NR_getrlimit 76 /* Back compatible 2Gig limited rlimit */ +#define TARGET_NR_getrusage 77 +#define TARGET_NR_gettimeofday 78 +#define TARGET_NR_settimeofday 79 +#define TARGET_NR_getgroups 80 +#define TARGET_NR_setgroups 81 +#define TARGET_NR_select 82 +#define TARGET_NR_symlink 83 +#define TARGET_NR_oldlstat 84 +#define TARGET_NR_readlink 85 +#define TARGET_NR_uselib 86 +#define TARGET_NR_swapon 87 +#define TARGET_NR_reboot 88 +#define TARGET_NR_readdir 89 +#define TARGET_NR_mmap 90 +#define TARGET_NR_munmap 91 +#define TARGET_NR_truncate 92 +#define TARGET_NR_ftruncate 93 +#define TARGET_NR_fchmod 94 +#define TARGET_NR_fchown 95 +#define TARGET_NR_getpriority 96 +#define TARGET_NR_setpriority 97 +#define TARGET_NR_profil 98 +#define TARGET_NR_statfs 99 +#define TARGET_NR_fstatfs 100 +#define TARGET_NR_ioperm 101 +#define TARGET_NR_socketcall 102 +#define TARGET_NR_syslog 103 +#define TARGET_NR_setitimer 104 +#define TARGET_NR_getitimer 105 +#define TARGET_NR_stat 106 +#define TARGET_NR_lstat 107 +#define TARGET_NR_fstat 108 +#define TARGET_NR_olduname 109 +#define TARGET_NR_iopl 110 +#define TARGET_NR_vhangup 111 +#define TARGET_NR_idle 112 +#define TARGET_NR_vm86old 113 +#define TARGET_NR_wait4 114 +#define TARGET_NR_swapoff 115 +#define TARGET_NR_sysinfo 116 +#define TARGET_NR_ipc 117 +#define TARGET_NR_fsync 118 +#define TARGET_NR_sigreturn 119 +#define TARGET_NR_clone 120 +#define TARGET_NR_setdomainname 121 +#define TARGET_NR_uname 122 +#define TARGET_NR_modify_ldt 123 +#define TARGET_NR_adjtimex 124 +#define TARGET_NR_mprotect 125 +#define TARGET_NR_sigprocmask 126 +#define TARGET_NR_create_module 127 +#define TARGET_NR_init_module 128 +#define TARGET_NR_delete_module 129 +#define TARGET_NR_get_kernel_syms 130 +#define TARGET_NR_quotactl 131 +#define TARGET_NR_getpgid 132 +#define TARGET_NR_fchdir 133 +#define TARGET_NR_bdflush 134 +#define TARGET_NR_sysfs 135 +#define TARGET_NR_personality 136 +#define TARGET_NR_afs_syscall 137 /* Syscall for Andrew File System */ +#define TARGET_NR_setfsuid 138 +#define TARGET_NR_setfsgid 139 +#define TARGET_NR__llseek 140 +#define TARGET_NR_getdents 141 +#define TARGET_NR__newselect 142 +#define TARGET_NR_flock 143 +#define TARGET_NR_msync 144 +#define TARGET_NR_readv 145 +#define TARGET_NR_writev 146 +#define TARGET_NR_getsid 147 +#define TARGET_NR_fdatasync 148 +#define TARGET_NR__sysctl 149 +#define TARGET_NR_mlock 150 +#define TARGET_NR_munlock 151 +#define TARGET_NR_mlockall 152 +#define TARGET_NR_munlockall 153 +#define TARGET_NR_sched_setparam 154 +#define TARGET_NR_sched_getparam 155 +#define TARGET_NR_sched_setscheduler 156 +#define TARGET_NR_sched_getscheduler 157 +#define TARGET_NR_sched_yield 158 +#define TARGET_NR_sched_get_priority_max 159 +#define TARGET_NR_sched_get_priority_min 160 +#define TARGET_NR_sched_rr_get_interval 161 +#define TARGET_NR_nanosleep 162 +#define TARGET_NR_mremap 163 +#define TARGET_NR_setresuid 164 +#define TARGET_NR_getresuid 165 +#define TARGET_NR_vm86 166 +#define TARGET_NR_query_module 167 +#define TARGET_NR_poll 168 +#define TARGET_NR_nfsservctl 169 +#define TARGET_NR_setresgid 170 +#define TARGET_NR_getresgid 171 +#define TARGET_NR_prctl 172 +#define TARGET_NR_rt_sigreturn 173 +#define TARGET_NR_rt_sigaction 174 +#define TARGET_NR_rt_sigprocmask 175 +#define TARGET_NR_rt_sigpending 176 +#define TARGET_NR_rt_sigtimedwait 177 +#define TARGET_NR_rt_sigqueueinfo 178 +#define TARGET_NR_rt_sigsuspend 179 +#define TARGET_NR_pread 180 +#define TARGET_NR_pwrite 181 +#define TARGET_NR_chown 182 +#define TARGET_NR_getcwd 183 +#define TARGET_NR_capget 184 +#define TARGET_NR_capset 185 +#define TARGET_NR_sigaltstack 186 +#define TARGET_NR_sendfile 187 +#define TARGET_NR_getpmsg 188 /* some people actually want streams */ +#define TARGET_NR_putpmsg 189 /* some people actually want streams */ +#define TARGET_NR_vfork 190 +#define TARGET_NR_ugetrlimit 191 /* SuS compliant getrlimit */ +#define TARGET_NR_mmap2 192 +#define TARGET_NR_truncate64 193 +#define TARGET_NR_ftruncate64 194 +#define TARGET_NR_stat64 195 +#define TARGET_NR_lstat64 196 +#define TARGET_NR_fstat64 197 +#define TARGET_NR_lchown32 198 +#define TARGET_NR_getuid32 199 +#define TARGET_NR_getgid32 200 +#define TARGET_NR_geteuid32 201 +#define TARGET_NR_getegid32 202 +#define TARGET_NR_setreuid32 203 +#define TARGET_NR_setregid32 204 +#define TARGET_NR_getgroups32 205 +#define TARGET_NR_setgroups32 206 +#define TARGET_NR_fchown32 207 +#define TARGET_NR_setresuid32 208 +#define TARGET_NR_getresuid32 209 +#define TARGET_NR_setresgid32 210 +#define TARGET_NR_getresgid32 211 +#define TARGET_NR_chown32 212 +#define TARGET_NR_setuid32 213 +#define TARGET_NR_setgid32 214 +#define TARGET_NR_setfsuid32 215 +#define TARGET_NR_setfsgid32 216 +#define TARGET_NR_pivot_root 217 +#define TARGET_NR_mincore 218 +#define TARGET_NR_madvise 219 +#define TARGET_NR_madvise1 219 /* delete when C lib stub is removed */ +#define TARGET_NR_getdents64 220 +#define TARGET_NR_fcntl64 221 +#define TARGET_NR_core 222 /* for analys kernel core */ +#define TARGET_NR_macctl 223 /* MCST trust linux */ +#define TARGET_NR_newfstatat 224 +#define TARGET_NR_emergency 225 +#define TARGET_NR_e2k_sigsetjmp 226 /* setjmp e2k specific */ +#define TARGET_NR_e2k_longjmp 227 /* longjmp e2k specific */ +#define TARGET_NR_e2k_syswork 228 /* e2k_syswork */ +#define TARGET_NR_clone2 229 +#define TARGET_NR_e2k_longjmp2 230 /* Second Edition */ +#define TARGET_NR_soft_debug 231 +#define TARGET_NR_setxattr 232 +#define TARGET_NR_lsetxattr 233 +#define TARGET_NR_fsetxattr 234 +#define TARGET_NR_getxattr 235 +#define TARGET_NR_lgetxattr 236 +#define TARGET_NR_fgetxattr 237 +#define TARGET_NR_listxattr 238 +#define TARGET_NR_llistxattr 239 +#define TARGET_NR_flistxattr 240 +#define TARGET_NR_removexattr 241 +#define TARGET_NR_lremovexattr 242 +#define TARGET_NR_fremovexattr 243 +#define TARGET_NR_gettid 244 +#define TARGET_NR_readahead 245 +#define TARGET_NR_tkill 246 +#define TARGET_NR_sendfile64 247 +#define TARGET_NR_futex 248 +#define TARGET_NR_sched_setaffinity 249 +#define TARGET_NR_sched_getaffinity 250 +#define TARGET_NR_pipe2 251 +#define TARGET_NR_set_backtrace 252 +#define TARGET_NR_get_backtrace 253 +#define TARGET_NR_access_hw_stacks 254 +#define TARGET_NR_el_posix 255 +/* + * reserved for update of kernel source codes + */ +#define TARGET_NR_reserved6 256 +#define TARGET_NR_reserved7 257 +#define TARGET_NR_reserved8 258 + +#define TARGET_NR_set_tid_address 259 +#define TARGET_NR_el_binary 260 +#define TARGET_NR_timer_create 261 +#define TARGET_NR_timer_settime 262 +#define TARGET_NR_timer_gettime 263 +#define TARGET_NR_timer_getoverrun 264 +#define TARGET_NR_timer_delete 265 +#define TARGET_NR_clock_settime 266 +#define TARGET_NR_clock_gettime 267 +#define TARGET_NR_clock_getres 268 +#define TARGET_NR_clock_nanosleep 269 +/* + * reserved for update of kernel source codes + */ +#define TARGET_NR_reserved9 270 +#define TARGET_NR_reserved10 271 +#define TARGET_NR_reserved11 272 +#define TARGET_NR_reserved12 273 +#define TARGET_NR_reserved13 274 +#define TARGET_NR_reserved14 275 +#define TARGET_NR_reserved15 276 +#define TARGET_NR_reserved16 277 +#define TARGET_NR_reserved17 278 +#define TARGET_NR_reserved18 279 +#define TARGET_NR_reserved19 280 +#define TARGET_NR_reserved20 281 +#define TARGET_NR_reserved21 282 +#define TARGET_NR_reserved22 283 +#define TARGET_NR_reserved23 284 +#define TARGET_NR_reserved24 285 +#define TARGET_NR_reserved25 286 + +#define TARGET_NR_sched_setattr 287 +#define TARGET_NR_sched_getattr 288 + +#define TARGET_NR_ioprio_set 289 +#define TARGET_NR_ioprio_get 290 +#define TARGET_NR_inotify_init 291 +#define TARGET_NR_inotify_add_watch 292 +#define TARGET_NR_inotify_rm_watch 293 + +#define TARGET_NR_io_setup 294 +#define TARGET_NR_io_destroy 295 +#define TARGET_NR_io_getevents 296 +#define TARGET_NR_io_submit 297 +#define TARGET_NR_io_cancel 298 +#define TARGET_NR_fadvise64 299 + +#define TARGET_NR_exit_group 300 +#define TARGET_NR_lookup_dcookie 301 +#define TARGET_NR_epoll_create 302 +#define TARGET_NR_epoll_ctl 303 +#define TARGET_NR_epoll_wait 304 +#define TARGET_NR_remap_file_pages 305 +#define TARGET_NR_statfs64 306 +#define TARGET_NR_fstatfs64 307 +#define TARGET_NR_tgkill 308 +#define TARGET_NR_utimes 309 +#define TARGET_NR_fadvise64_64 310 +#define TARGET_NR_vserver 311 +#define TARGET_NR_mbind 312 +#define TARGET_NR_get_mempolicy 313 +#define TARGET_NR_set_mempolicy 314 +#define TARGET_NR_mq_open 315 +#define TARGET_NR_mq_unlink (TARGET_NR_mq_open+1) +#define TARGET_NR_mq_timedsend (TARGET_NR_mq_open+2) +#define TARGET_NR_mq_timedreceive (TARGET_NR_mq_open+3) +#define TARGET_NR_mq_notify (TARGET_NR_mq_open+4) +#define TARGET_NR_mq_getsetattr (TARGET_NR_mq_open+5) +#define TARGET_NR_kexec_load 321 +#define TARGET_NR_waitid 322 +#define TARGET_NR_add_key 323 +#define TARGET_NR_request_key 324 +#define TARGET_NR_keyctl 325 +#define TARGET_NR_mcst_rt 326 +#define TARGET_NR_getcpu 327 +#define TARGET_NR_move_pages 328 +#define TARGET_NR_splice 329 +#define TARGET_NR_vmsplice 330 +#define TARGET_NR_tee 331 +#define TARGET_NR_migrate_pages 332 +#define TARGET_NR_utimensat 333 +#define TARGET_NR_rt_tgsigqueueinfo 334 +#define TARGET_NR_openat 335 +#define TARGET_NR_mkdirat 336 +#define TARGET_NR_mknodat 337 +#define TARGET_NR_fchownat 338 +#define TARGET_NR_unlinkat 339 +#define TARGET_NR_renameat 340 +#define TARGET_NR_linkat 341 +#define TARGET_NR_symlinkat 342 +#define TARGET_NR_readlinkat 343 +#define TARGET_NR_fchmodat 344 +#define TARGET_NR_faccessat 345 +#define TARGET_NR_epoll_pwait 346 +#define TARGET_NR_signalfd4 347 +#define TARGET_NR_eventfd2 348 +#define TARGET_NR_recvmmsg 349 +#define TARGET_NR_cnt_point 350 +#define TARGET_NR_timerfd_create 351 +#define TARGET_NR_timerfd_settime 352 +#define TARGET_NR_timerfd_gettime 353 +#define TARGET_NR_preadv 354 +#define TARGET_NR_pwritev 355 +#define TARGET_NR_fallocate 356 +#define TARGET_NR_sync_file_range 357 +#define TARGET_NR_dup3 358 +#define TARGET_NR_inotify_init1 359 +#define TARGET_NR_epoll_create1 360 +#define TARGET_NR_fstatat64 361 +#define TARGET_NR_futimesat 362 +#define TARGET_NR_perf_event_open 363 +#define TARGET_NR_unshare 364 +#define TARGET_NR_get_robust_list 365 +#define TARGET_NR_set_robust_list 366 +#define TARGET_NR_pselect6 367 +#define TARGET_NR_ppoll 368 +#define TARGET_NR_setcontext 369 +#define TARGET_NR_makecontext 370 +#define TARGET_NR_swapcontext 371 +#define TARGET_NR_freecontext 372 +#define TARGET_NR_fanotify_init 373 +#define TARGET_NR_fanotify_mark 374 +#define TARGET_NR_prlimit64 375 +#define TARGET_NR_clock_adjtime 376 +#define TARGET_NR_syncfs 377 +#define TARGET_NR_sendmmsg 378 +#define TARGET_NR_setns 379 +#define TARGET_NR_process_vm_readv 380 +#define TARGET_NR_process_vm_writev 381 +#define TARGET_NR_kcmp 382 +#define TARGET_NR_finit_module 383 +#define TARGET_NR_syscalls 384 + +#endif /* E2K_SYSCALL_NR_H */ diff --git a/linux-user/e2k/target_cpu.h b/linux-user/e2k/target_cpu.h new file mode 100644 index 0000000000..dc48cc5925 --- /dev/null +++ b/linux-user/e2k/target_cpu.h @@ -0,0 +1,30 @@ +#ifndef E2K_TARGET_CPU_H +#define E2K_TARGET_CPU_H + +static inline void cpu_clone_regs_child(CPUE2KState *env, target_ulong newsp, + unsigned flags) +{ + // TODO +} + +static inline void cpu_clone_regs_parent(CPUE2KState *env, unsigned flags) +{ + // TODO +} + +static inline void cpu_set_tls(CPUE2KState *env, target_ulong newtls) +{ + // TODO +} + +static inline target_ulong cpu_get_tls(CPUE2KState *env) +{ + // TODO +} + +static inline abi_ulong get_sp_from_cpustate(CPUE2KState *state) +{ + // TODO +} + +#endif /* E2K_TARGET_CPU_H */ diff --git a/linux-user/e2k/target_elf.h b/linux-user/e2k/target_elf.h new file mode 100644 index 0000000000..ca3bb4a651 --- /dev/null +++ b/linux-user/e2k/target_elf.h @@ -0,0 +1,7 @@ +#ifndef E2K_TARGET_ELF_H +#define E2K_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "any"; +} +#endif /* E2K_TARGET_ELF_H */ diff --git a/linux-user/e2k/target_fcntl.h b/linux-user/e2k/target_fcntl.h new file mode 100644 index 0000000000..2a9d0ad2e7 --- /dev/null +++ b/linux-user/e2k/target_fcntl.h @@ -0,0 +1,4 @@ +#ifndef E2K_TARGET_FCNTL_H +#define E2K_TARGET_FCNTL_H +#include "../generic/fcntl.h" +#endif diff --git a/linux-user/e2k/target_prctl.h b/linux-user/e2k/target_prctl.h new file mode 100644 index 0000000000..8f414f586f --- /dev/null +++ b/linux-user/e2k/target_prctl.h @@ -0,0 +1 @@ +/* TODO */ diff --git a/linux-user/e2k/target_resource.h b/linux-user/e2k/target_resource.h new file mode 100644 index 0000000000..227259594c --- /dev/null +++ b/linux-user/e2k/target_resource.h @@ -0,0 +1 @@ +#include "../generic/target_resource.h" diff --git a/linux-user/e2k/target_signal.h b/linux-user/e2k/target_signal.h new file mode 100644 index 0000000000..76234bfef6 --- /dev/null +++ b/linux-user/e2k/target_signal.h @@ -0,0 +1,15 @@ +#ifndef TARGET_SIGNAL_H +#define TARGET_SIGNAL_H + +/* + * sigaltstack controls + */ +#define SS_ONSTACK 1 +#define SS_DISABLE 2 + +#define MINSIGSTKSZ 4096 +#define SIGSTKSZ 8192 + +#include "generic/signal.h" + +#endif /* TARGET_SIGNAL_H */ diff --git a/linux-user/e2k/target_syscall.h b/linux-user/e2k/target_syscall.h new file mode 100644 index 0000000000..9d65cefa12 --- /dev/null +++ b/linux-user/e2k/target_syscall.h @@ -0,0 +1,66 @@ +#ifndef E2K_TARGET_SYSCALL_H +#define E2K_TARGET_SYSCALL_H + +#define UNAME_MACHINE "e2k" +#define UNAME_MINUMIM_RELEASE "2.6.32" + +#define E2K_MAXNR 128 /* The total number of */ + /* quad-NRs */ +#define E2K_MAXGR 16 /* The total number of global */ + /* quad-NRs */ +#define E2K_MAXSR (E2K_MAXNR - E2K_MAXGR) /* The total number of stack */ + /* quad-NRs */ +#define E2K_MAXNR_d (E2K_MAXNR * 2) /* The total number of */ + /* double-NRs */ +#define E2K_MAXGR_d (E2K_MAXGR * 2) /* The total number of global */ + /* double-NRs */ +#define E2K_MAXSR_d (E2K_MAXSR * 2) /* The total number of stack */ + /* double-NRs */ + +typedef uint64_t e2k_greg_t; // double word + +struct target_pt_regs { + + /* special registers */ + uint64_t wd; // Current window descriptor (WD) + + uint32_t sbr; // User Stack Base Register (USBR/SBR) + // SBR - contains the base (top) virtual address of the current User Stack area. + + // uint64_t tr; // current type register + + uint32_t psr; // Processor State Register (PSR) + uint32_t upsr; // User processor status register (UPSR) + uint64_t ip; // instruction pointer + uint64_t nip; // next instruction pointer + + uint64_t ctpr1; // Control Transfer Preparation Register (CTPR) + uint64_t ctpr2; + uint64_t ctpr3; + + uint32_t pfpfr; // Packed Floating Point Flag Register (PFPFR) + uint32_t fpcr; // Floating point control register (FPCR) + uint32_t fpsr; // Floating point state register (FPSR) + + // borrowed from Embox OS + uint64_t lsr; // Loop status register (LSR) + uint64_t ilcr; // Loop counter register (ILCR) + + uint64_t dr0; + + uint64_t cr0_hi; + uint64_t cr1_lo; + uint64_t cr1_hi; + uint64_t pcsp_hi; + uint64_t pcsp_lo; + uint64_t psp_lo; + uint64_t psp_hi; + uint64_t usd_lo; // User data + uint64_t usd_hi; + + uint64_t gbase[32]; + uint16_t gext[32]; +}; + + +#endif /* E2K_TARGET_SYSCALL_H */ diff --git a/linux-user/e2k/termbits.h b/linux-user/e2k/termbits.h new file mode 100644 index 0000000000..67ae5a5620 --- /dev/null +++ b/linux-user/e2k/termbits.h @@ -0,0 +1,6 @@ +#ifndef _E2K_TERMBITS_H_ +#define _E2K_TERMBITS_H_ + +#include "../generic/termbits.h" + +#endif /* _E2K_TERMBITS_H_ */ diff --git a/linux-user/elfload.c b/linux-user/elfload.c index f7eae357f4..e11a7a360f 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -1603,6 +1603,29 @@ static inline void init_thread(struct target_pt_regs *regs, #endif /* TARGET_HEXAGON */ +#ifdef TARGET_E2K + +#define elf_check_arch(x) ((x) == EM_MCST_ELBRUS || (x) == EM_E2K_OLD) +#define ELF_START_MMAP 0x80000000 +#define ELF_CLASS ELFCLASS64 +#define ELF_ARCH EM_MCST_ELBRUS +#define ELF_EXEC_PAGESIZE 4096 +#define ELF_NREG 256 +typedef target_elf_greg_t target_elf_gregset_t[ELF_NREG]; +#define USE_ELF_CORE_DUMP + +static inline void init_thread(struct target_pt_regs *regs, struct image_info *infop) +{ + // TODO +} + +static void elf_core_copy_regs(target_elf_gregset_t *regs, const CPUE2KState *env) +{ + // TODO +} + +#endif /* TARGET_E2K */ + #ifndef ELF_PLATFORM #define ELF_PLATFORM (NULL) #endif