linux-user: add loading ELFs for e2kg

This commit is contained in:
Alibek Omarov 2020-10-13 23:45:25 +03:00 committed by Denis Drakhnia
parent 142e846587
commit d52c541b62
12 changed files with 614 additions and 0 deletions

55
linux-user/e2k/cpu_loop.c Normal file
View File

@ -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 <http://www.gnu.org/licenses/>.
*/
#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
}

View File

@ -0,0 +1 @@
#include "../generic/sockbits.h"

405
linux-user/e2k/syscall_nr.h Normal file
View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -0,0 +1,4 @@
#ifndef E2K_TARGET_FCNTL_H
#define E2K_TARGET_FCNTL_H
#include "../generic/fcntl.h"
#endif

View File

@ -0,0 +1 @@
/* TODO */

View File

@ -0,0 +1 @@
#include "../generic/target_resource.h"

View File

@ -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 */

View File

@ -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 */

View File

@ -0,0 +1,6 @@
#ifndef _E2K_TERMBITS_H_
#define _E2K_TERMBITS_H_
#include "../generic/termbits.h"
#endif /* _E2K_TERMBITS_H_ */

View File

@ -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