Import QEMU upstream snapshot d2e570c
Upstream: https://gitlab.com/qemu-project/qemu.git Upstream-Commit: d2e570cc0f97b936902a5b1b86b73c0f5998b475
This commit is contained in:
commit
cf256aa081
11315 files changed
+3598369
No files matched your search
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
* 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.h"
|
||||
#include "user-internals.h"
|
||||
#include "user/cpu_loop.h"
|
||||
#include "signal-common.h"
|
||||
|
||||
void cpu_loop(CPUMBState *env)
|
||||
{
|
||||
int trapnr, ret, si_code, sig;
|
||||
CPUState *cs = env_cpu(env);
|
||||
|
||||
while (1) {
|
||||
cpu_exec_start(cs);
|
||||
trapnr = cpu_exec(cs);
|
||||
cpu_exec_end(cs);
|
||||
qemu_process_cpu_events(cs);
|
||||
|
||||
switch (trapnr) {
|
||||
case EXCP_INTERRUPT:
|
||||
/* just indicate that signals should be handled asap */
|
||||
break;
|
||||
case EXCP_SYSCALL:
|
||||
/* Return address is 4 bytes after the call. */
|
||||
env->regs[14] += 4;
|
||||
env->pc = env->regs[14];
|
||||
ret = do_syscall(env,
|
||||
env->regs[12],
|
||||
env->regs[5],
|
||||
env->regs[6],
|
||||
env->regs[7],
|
||||
env->regs[8],
|
||||
env->regs[9],
|
||||
env->regs[10],
|
||||
0, 0);
|
||||
if (ret == -QEMU_ERESTARTSYS) {
|
||||
/* Wind back to before the syscall. */
|
||||
env->pc -= 4;
|
||||
} else if (ret != -QEMU_ESIGRETURN && ret != -QEMU_ESETPC) {
|
||||
env->regs[3] = ret;
|
||||
}
|
||||
/* All syscall exits result in guest r14 being equal to the
|
||||
* PC we return to, because the kernel syscall exit "rtbd" does
|
||||
* this. (This is true even for sigreturn(); note that r14 is
|
||||
* not a userspace-usable register, as the kernel may clobber it
|
||||
* at any point.)
|
||||
*/
|
||||
env->regs[14] = env->pc;
|
||||
break;
|
||||
|
||||
case EXCP_HW_EXCP:
|
||||
env->regs[17] = env->pc + 4;
|
||||
if (env->iflags & D_FLAG) {
|
||||
env->esr |= 1 << 12;
|
||||
env->pc -= 4;
|
||||
/* FIXME: if branch was immed, replay the imm as well. */
|
||||
}
|
||||
env->iflags &= ~(IMM_FLAG | D_FLAG);
|
||||
switch (env->esr & 31) {
|
||||
case ESR_EC_DIVZERO:
|
||||
sig = TARGET_SIGFPE;
|
||||
si_code = TARGET_FPE_INTDIV;
|
||||
break;
|
||||
case ESR_EC_FPU:
|
||||
/*
|
||||
* Note that the kernel passes along fsr as si_code
|
||||
* if there's no recognized bit set. Possibly this
|
||||
* implies that si_code is 0, but follow the structure.
|
||||
*/
|
||||
sig = TARGET_SIGFPE;
|
||||
si_code = env->fsr;
|
||||
if (si_code & FSR_IO) {
|
||||
si_code = TARGET_FPE_FLTINV;
|
||||
} else if (si_code & FSR_OF) {
|
||||
si_code = TARGET_FPE_FLTOVF;
|
||||
} else if (si_code & FSR_UF) {
|
||||
si_code = TARGET_FPE_FLTUND;
|
||||
} else if (si_code & FSR_DZ) {
|
||||
si_code = TARGET_FPE_FLTDIV;
|
||||
} else if (si_code & FSR_DO) {
|
||||
si_code = TARGET_FPE_FLTRES;
|
||||
}
|
||||
break;
|
||||
case ESR_EC_PRIVINSN:
|
||||
sig = SIGILL;
|
||||
si_code = ILL_PRVOPC;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Unhandled hw-exception: 0x%x\n",
|
||||
env->esr & ESR_EC_MASK);
|
||||
cpu_dump_state(cs, stderr, 0);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
force_sig_fault(sig, si_code, env->pc);
|
||||
break;
|
||||
|
||||
case EXCP_DEBUG:
|
||||
force_sig_fault(TARGET_SIGTRAP, TARGET_TRAP_BRKPT, env->pc);
|
||||
break;
|
||||
case EXCP_ATOMIC:
|
||||
cpu_exec_step_atomic(cs);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Unhandled trap: 0x%x\n", trapnr);
|
||||
cpu_dump_state(cs, stderr, 0);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
process_pending_signals (env);
|
||||
}
|
||||
}
|
||||
|
||||
void init_main_thread(CPUState *cs, struct image_info *info)
|
||||
{
|
||||
CPUArchState *env = cpu_env(cs);
|
||||
|
||||
env->pc = info->entry;
|
||||
env->regs[1] = info->start_stack;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu.h"
|
||||
#include "loader.h"
|
||||
#include "target_elf.h"
|
||||
|
||||
|
||||
const char *get_elf_cpu_model(uint32_t eflags)
|
||||
{
|
||||
return TARGET_BIG_ENDIAN ? "any,little-endian=off"
|
||||
: "any,little-endian=on";
|
||||
}
|
||||
|
||||
void elf_core_copy_regs(target_elf_gregset_t *r, const CPUMBState *env)
|
||||
{
|
||||
for (int i = 0; i < 32; i++) {
|
||||
r->pt.r[i] = tswapal(env->regs[i]);
|
||||
}
|
||||
|
||||
r->pt.pc = tswapal(env->pc);
|
||||
r->pt.msr = tswapal(mb_cpu_read_msr(env));
|
||||
r->pt.ear = tswapal(env->ear);
|
||||
r->pt.esr = tswapal(env->esr);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
syscall_nr_generators += {
|
||||
'microblaze': generator(sh,
|
||||
arguments: [ meson.current_source_dir() / 'syscallhdr.sh', '@INPUT@', '@OUTPUT@', '@EXTRA_ARGS@' ],
|
||||
output: '@BASENAME@_nr.h')
|
||||
}
|
||||
@@ -0,0 +1,175 @@
|
||||
/*
|
||||
* Emulation of Linux signals
|
||||
*
|
||||
* Copyright (c) 2003 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.h"
|
||||
#include "user-internals.h"
|
||||
#include "signal-common.h"
|
||||
#include "linux-user/trace.h"
|
||||
#include "target_ptrace.h"
|
||||
|
||||
struct target_sigcontext {
|
||||
struct target_pt_regs regs; /* needs to be first */
|
||||
uint32_t oldmask;
|
||||
};
|
||||
|
||||
struct target_stack_t {
|
||||
abi_ulong ss_sp;
|
||||
int ss_flags;
|
||||
unsigned int ss_size;
|
||||
};
|
||||
|
||||
struct target_ucontext {
|
||||
abi_ulong tuc_flags;
|
||||
abi_ulong tuc_link;
|
||||
target_stack_t tuc_stack;
|
||||
struct target_sigcontext tuc_mcontext;
|
||||
target_sigset_t tuc_sigmask;
|
||||
};
|
||||
|
||||
/* Signal frames. */
|
||||
struct target_rt_sigframe {
|
||||
target_siginfo_t info;
|
||||
struct target_ucontext uc;
|
||||
uint32_t tramp[2];
|
||||
};
|
||||
|
||||
static void setup_sigcontext(struct target_sigcontext *sc, CPUMBState *env)
|
||||
{
|
||||
for (int i = 0; i < 32; ++i) {
|
||||
__put_user(env->regs[i], &sc->regs.r[i]);
|
||||
}
|
||||
__put_user(env->pc, &sc->regs.pc);
|
||||
}
|
||||
|
||||
static void restore_sigcontext(struct target_sigcontext *sc, CPUMBState *env)
|
||||
{
|
||||
for (int i = 0; i < 32; ++i) {
|
||||
__get_user(env->regs[i], &sc->regs.r[i]);
|
||||
}
|
||||
__get_user(env->pc, &sc->regs.pc);
|
||||
}
|
||||
|
||||
static abi_ulong get_sigframe(struct target_sigaction *ka,
|
||||
CPUMBState *env, int frame_size)
|
||||
{
|
||||
abi_ulong sp = env->regs[1];
|
||||
|
||||
sp = target_sigsp(sp, ka);
|
||||
|
||||
return ((sp - frame_size) & -8UL);
|
||||
}
|
||||
|
||||
void setup_rt_frame(int sig, struct target_sigaction *ka,
|
||||
target_siginfo_t *info,
|
||||
target_sigset_t *set, CPUMBState *env)
|
||||
{
|
||||
struct target_rt_sigframe *frame;
|
||||
abi_ulong frame_addr;
|
||||
|
||||
frame_addr = get_sigframe(ka, env, sizeof *frame);
|
||||
trace_user_setup_rt_frame(env, frame_addr);
|
||||
|
||||
if (!lock_user_struct(VERIFY_WRITE, frame, frame_addr, 0)) {
|
||||
force_sigsegv(sig);
|
||||
return;
|
||||
}
|
||||
|
||||
frame->info = *info;
|
||||
|
||||
__put_user(0, &frame->uc.tuc_flags);
|
||||
__put_user(0, &frame->uc.tuc_link);
|
||||
|
||||
target_save_altstack(&frame->uc.tuc_stack, env);
|
||||
setup_sigcontext(&frame->uc.tuc_mcontext, env);
|
||||
|
||||
for (int i = 0; i < TARGET_NSIG_WORDS; i++) {
|
||||
__put_user(set->sig[i], &frame->uc.tuc_sigmask.sig[i]);
|
||||
}
|
||||
|
||||
/* Kernel does not use SA_RESTORER. */
|
||||
|
||||
/*
|
||||
* Return from sighandler will jump to the tramp.
|
||||
* Negative 8 offset because return is rtsd r15, 8
|
||||
*/
|
||||
env->regs[15] = default_rt_sigreturn - 8;
|
||||
|
||||
/* Set up registers for signal handler */
|
||||
env->regs[1] = frame_addr;
|
||||
|
||||
/* Signal handler args: */
|
||||
env->regs[5] = sig;
|
||||
env->regs[6] = frame_addr + offsetof(struct target_rt_sigframe, info);
|
||||
env->regs[7] = frame_addr + offsetof(struct target_rt_sigframe, uc);
|
||||
|
||||
/* Offset to handle microblaze rtid r14, 0 */
|
||||
env->pc = (unsigned long)ka->_sa_handler;
|
||||
|
||||
unlock_user_struct(frame, frame_addr, 1);
|
||||
}
|
||||
|
||||
|
||||
long do_sigreturn(CPUMBState *env)
|
||||
{
|
||||
return -TARGET_ENOSYS;
|
||||
}
|
||||
|
||||
long do_rt_sigreturn(CPUMBState *env)
|
||||
{
|
||||
struct target_rt_sigframe *frame = NULL;
|
||||
abi_ulong frame_addr = env->regs[1];
|
||||
sigset_t set;
|
||||
|
||||
trace_user_do_rt_sigreturn(env, frame_addr);
|
||||
|
||||
if (!lock_user_struct(VERIFY_READ, frame, frame_addr, 1)) {
|
||||
goto badframe;
|
||||
}
|
||||
|
||||
target_to_host_sigset(&set, &frame->uc.tuc_sigmask);
|
||||
set_sigmask(&set);
|
||||
|
||||
restore_sigcontext(&frame->uc.tuc_mcontext, env);
|
||||
|
||||
target_restore_altstack(&frame->uc.tuc_stack, env);
|
||||
|
||||
unlock_user_struct(frame, frame_addr, 0);
|
||||
return -QEMU_ESIGRETURN;
|
||||
|
||||
badframe:
|
||||
unlock_user_struct(frame, frame_addr, 0);
|
||||
force_sig(TARGET_SIGSEGV);
|
||||
return -QEMU_ESIGRETURN;
|
||||
}
|
||||
|
||||
void setup_sigtramp(abi_ulong sigtramp_page)
|
||||
{
|
||||
uint32_t *tramp = lock_user(VERIFY_WRITE, sigtramp_page, 8, 0);
|
||||
assert(tramp != NULL);
|
||||
|
||||
/*
|
||||
* addi r12, r0, __NR_rt_sigreturn
|
||||
* brki r14, 0x8
|
||||
*/
|
||||
__put_user(0x31800000U | TARGET_NR_rt_sigreturn, tramp);
|
||||
__put_user(0xb9cc0008U, tramp + 1);
|
||||
|
||||
default_rt_sigreturn = sigtramp_page;
|
||||
unlock_user(tramp, sigtramp_page, 8);
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
#include "../generic/sockbits.h"
|
||||
@@ -0,0 +1,470 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note
|
||||
#
|
||||
# system call numbers and entry vectors for microblaze
|
||||
#
|
||||
# The format is:
|
||||
# <number> <abi> <name> <entry point>
|
||||
#
|
||||
# The <abi> is always "common" for this file
|
||||
#
|
||||
0 common restart_syscall sys_restart_syscall
|
||||
1 common exit sys_exit
|
||||
2 common fork sys_fork
|
||||
3 common read sys_read
|
||||
4 common write sys_write
|
||||
5 common open sys_open
|
||||
6 common close sys_close
|
||||
7 common waitpid sys_waitpid
|
||||
8 common creat sys_creat
|
||||
9 common link sys_link
|
||||
10 common unlink sys_unlink
|
||||
11 common execve sys_execve
|
||||
12 common chdir sys_chdir
|
||||
13 common time sys_time32
|
||||
14 common mknod sys_mknod
|
||||
15 common chmod sys_chmod
|
||||
16 common lchown sys_lchown
|
||||
17 common break sys_ni_syscall
|
||||
18 common oldstat sys_ni_syscall
|
||||
19 common lseek sys_lseek
|
||||
20 common getpid sys_getpid
|
||||
21 common mount sys_mount
|
||||
22 common umount sys_oldumount
|
||||
23 common setuid sys_setuid
|
||||
24 common getuid sys_getuid
|
||||
25 common stime sys_stime32
|
||||
26 common ptrace sys_ptrace
|
||||
27 common alarm sys_alarm
|
||||
28 common oldfstat sys_ni_syscall
|
||||
29 common pause sys_pause
|
||||
30 common utime sys_utime32
|
||||
31 common stty sys_ni_syscall
|
||||
32 common gtty sys_ni_syscall
|
||||
33 common access sys_access
|
||||
34 common nice sys_nice
|
||||
35 common ftime sys_ni_syscall
|
||||
36 common sync sys_sync
|
||||
37 common kill sys_kill
|
||||
38 common rename sys_rename
|
||||
39 common mkdir sys_mkdir
|
||||
40 common rmdir sys_rmdir
|
||||
41 common dup sys_dup
|
||||
42 common pipe sys_pipe
|
||||
43 common times sys_times
|
||||
44 common prof sys_ni_syscall
|
||||
45 common brk sys_brk
|
||||
46 common setgid sys_setgid
|
||||
47 common getgid sys_getgid
|
||||
48 common signal sys_signal
|
||||
49 common geteuid sys_geteuid
|
||||
50 common getegid sys_getegid
|
||||
51 common acct sys_acct
|
||||
52 common umount2 sys_umount
|
||||
53 common lock sys_ni_syscall
|
||||
54 common ioctl sys_ioctl
|
||||
55 common fcntl sys_fcntl
|
||||
56 common mpx sys_ni_syscall
|
||||
57 common setpgid sys_setpgid
|
||||
58 common ulimit sys_ni_syscall
|
||||
59 common oldolduname sys_ni_syscall
|
||||
60 common umask sys_umask
|
||||
61 common chroot sys_chroot
|
||||
62 common ustat sys_ustat
|
||||
63 common dup2 sys_dup2
|
||||
64 common getppid sys_getppid
|
||||
65 common getpgrp sys_getpgrp
|
||||
66 common setsid sys_setsid
|
||||
67 common sigaction sys_ni_syscall
|
||||
68 common sgetmask sys_sgetmask
|
||||
69 common ssetmask sys_ssetmask
|
||||
70 common setreuid sys_setreuid
|
||||
71 common setregid sys_setregid
|
||||
72 common sigsuspend sys_ni_syscall
|
||||
73 common sigpending sys_sigpending
|
||||
74 common sethostname sys_sethostname
|
||||
75 common setrlimit sys_setrlimit
|
||||
76 common getrlimit sys_ni_syscall
|
||||
77 common getrusage sys_getrusage
|
||||
78 common gettimeofday sys_gettimeofday
|
||||
79 common settimeofday sys_settimeofday
|
||||
80 common getgroups sys_getgroups
|
||||
81 common setgroups sys_setgroups
|
||||
82 common select sys_ni_syscall
|
||||
83 common symlink sys_symlink
|
||||
84 common oldlstat sys_ni_syscall
|
||||
85 common readlink sys_readlink
|
||||
86 common uselib sys_uselib
|
||||
87 common swapon sys_swapon
|
||||
88 common reboot sys_reboot
|
||||
89 common readdir sys_ni_syscall
|
||||
90 common mmap sys_mmap
|
||||
91 common munmap sys_munmap
|
||||
92 common truncate sys_truncate
|
||||
93 common ftruncate sys_ftruncate
|
||||
94 common fchmod sys_fchmod
|
||||
95 common fchown sys_fchown
|
||||
96 common getpriority sys_getpriority
|
||||
97 common setpriority sys_setpriority
|
||||
98 common profil sys_ni_syscall
|
||||
99 common statfs sys_statfs
|
||||
100 common fstatfs sys_fstatfs
|
||||
101 common ioperm sys_ni_syscall
|
||||
102 common socketcall sys_socketcall
|
||||
103 common syslog sys_syslog
|
||||
104 common setitimer sys_setitimer
|
||||
105 common getitimer sys_getitimer
|
||||
106 common stat sys_newstat
|
||||
107 common lstat sys_newlstat
|
||||
108 common fstat sys_newfstat
|
||||
109 common olduname sys_ni_syscall
|
||||
110 common iopl sys_ni_syscall
|
||||
111 common vhangup sys_vhangup
|
||||
112 common idle sys_ni_syscall
|
||||
113 common vm86old sys_ni_syscall
|
||||
114 common wait4 sys_wait4
|
||||
115 common swapoff sys_swapoff
|
||||
116 common sysinfo sys_sysinfo
|
||||
117 common ipc sys_ni_syscall
|
||||
118 common fsync sys_fsync
|
||||
119 common sigreturn sys_ni_syscall
|
||||
120 common clone sys_clone
|
||||
121 common setdomainname sys_setdomainname
|
||||
122 common uname sys_newuname
|
||||
123 common modify_ldt sys_ni_syscall
|
||||
124 common adjtimex sys_adjtimex_time32
|
||||
125 common mprotect sys_mprotect
|
||||
126 common sigprocmask sys_sigprocmask
|
||||
127 common create_module sys_ni_syscall
|
||||
128 common init_module sys_init_module
|
||||
129 common delete_module sys_delete_module
|
||||
130 common get_kernel_syms sys_ni_syscall
|
||||
131 common quotactl sys_quotactl
|
||||
132 common getpgid sys_getpgid
|
||||
133 common fchdir sys_fchdir
|
||||
134 common bdflush sys_ni_syscall
|
||||
135 common sysfs sys_sysfs
|
||||
136 common personality sys_personality
|
||||
137 common afs_syscall sys_ni_syscall
|
||||
138 common setfsuid sys_setfsuid
|
||||
139 common setfsgid sys_setfsgid
|
||||
140 common _llseek sys_llseek
|
||||
141 common getdents sys_getdents
|
||||
142 common _newselect sys_select
|
||||
143 common flock sys_flock
|
||||
144 common msync sys_msync
|
||||
145 common readv sys_readv
|
||||
146 common writev sys_writev
|
||||
147 common getsid sys_getsid
|
||||
148 common fdatasync sys_fdatasync
|
||||
149 common _sysctl sys_ni_syscall
|
||||
150 common mlock sys_mlock
|
||||
151 common munlock sys_munlock
|
||||
152 common mlockall sys_mlockall
|
||||
153 common munlockall sys_munlockall
|
||||
154 common sched_setparam sys_sched_setparam
|
||||
155 common sched_getparam sys_sched_getparam
|
||||
156 common sched_setscheduler sys_sched_setscheduler
|
||||
157 common sched_getscheduler sys_sched_getscheduler
|
||||
158 common sched_yield sys_sched_yield
|
||||
159 common sched_get_priority_max sys_sched_get_priority_max
|
||||
160 common sched_get_priority_min sys_sched_get_priority_min
|
||||
161 common sched_rr_get_interval sys_sched_rr_get_interval_time32
|
||||
162 common nanosleep sys_nanosleep_time32
|
||||
163 common mremap sys_mremap
|
||||
164 common setresuid sys_setresuid
|
||||
165 common getresuid sys_getresuid
|
||||
166 common vm86 sys_ni_syscall
|
||||
167 common query_module sys_ni_syscall
|
||||
168 common poll sys_poll
|
||||
169 common nfsservctl sys_ni_syscall
|
||||
170 common setresgid sys_setresgid
|
||||
171 common getresgid sys_getresgid
|
||||
172 common prctl sys_prctl
|
||||
173 common rt_sigreturn sys_rt_sigreturn_wrapper
|
||||
174 common rt_sigaction sys_rt_sigaction
|
||||
175 common rt_sigprocmask sys_rt_sigprocmask
|
||||
176 common rt_sigpending sys_rt_sigpending
|
||||
177 common rt_sigtimedwait sys_rt_sigtimedwait_time32
|
||||
178 common rt_sigqueueinfo sys_rt_sigqueueinfo
|
||||
179 common rt_sigsuspend sys_rt_sigsuspend
|
||||
180 common pread64 sys_pread64
|
||||
181 common pwrite64 sys_pwrite64
|
||||
182 common chown sys_chown
|
||||
183 common getcwd sys_getcwd
|
||||
184 common capget sys_capget
|
||||
185 common capset sys_capset
|
||||
186 common sigaltstack sys_ni_syscall
|
||||
187 common sendfile sys_sendfile
|
||||
188 common getpmsg sys_ni_syscall
|
||||
189 common putpmsg sys_ni_syscall
|
||||
190 common vfork sys_vfork
|
||||
191 common ugetrlimit sys_getrlimit
|
||||
192 common mmap2 sys_mmap2
|
||||
193 common truncate64 sys_truncate64
|
||||
194 common ftruncate64 sys_ftruncate64
|
||||
195 common stat64 sys_stat64
|
||||
196 common lstat64 sys_lstat64
|
||||
197 common fstat64 sys_fstat64
|
||||
198 common lchown32 sys_lchown
|
||||
199 common getuid32 sys_getuid
|
||||
200 common getgid32 sys_getgid
|
||||
201 common geteuid32 sys_geteuid
|
||||
202 common getegid32 sys_getegid
|
||||
203 common setreuid32 sys_setreuid
|
||||
204 common setregid32 sys_setregid
|
||||
205 common getgroups32 sys_getgroups
|
||||
206 common setgroups32 sys_setgroups
|
||||
207 common fchown32 sys_fchown
|
||||
208 common setresuid32 sys_setresuid
|
||||
209 common getresuid32 sys_getresuid
|
||||
210 common setresgid32 sys_setresgid
|
||||
211 common getresgid32 sys_getresgid
|
||||
212 common chown32 sys_chown
|
||||
213 common setuid32 sys_setuid
|
||||
214 common setgid32 sys_setgid
|
||||
215 common setfsuid32 sys_setfsuid
|
||||
216 common setfsgid32 sys_setfsgid
|
||||
217 common pivot_root sys_pivot_root
|
||||
218 common mincore sys_mincore
|
||||
219 common madvise sys_madvise
|
||||
220 common getdents64 sys_getdents64
|
||||
221 common fcntl64 sys_fcntl64
|
||||
# 222 is reserved for TUX
|
||||
# 223 is unused
|
||||
224 common gettid sys_gettid
|
||||
225 common readahead sys_readahead
|
||||
226 common setxattr sys_setxattr
|
||||
227 common lsetxattr sys_lsetxattr
|
||||
228 common fsetxattr sys_fsetxattr
|
||||
229 common getxattr sys_getxattr
|
||||
230 common lgetxattr sys_lgetxattr
|
||||
231 common fgetxattr sys_fgetxattr
|
||||
232 common listxattr sys_listxattr
|
||||
233 common llistxattr sys_llistxattr
|
||||
234 common flistxattr sys_flistxattr
|
||||
235 common removexattr sys_removexattr
|
||||
236 common lremovexattr sys_lremovexattr
|
||||
237 common fremovexattr sys_fremovexattr
|
||||
238 common tkill sys_tkill
|
||||
239 common sendfile64 sys_sendfile64
|
||||
240 common futex sys_futex_time32
|
||||
241 common sched_setaffinity sys_sched_setaffinity
|
||||
242 common sched_getaffinity sys_sched_getaffinity
|
||||
243 common set_thread_area sys_ni_syscall
|
||||
244 common get_thread_area sys_ni_syscall
|
||||
245 common io_setup sys_io_setup
|
||||
246 common io_destroy sys_io_destroy
|
||||
247 common io_getevents sys_io_getevents_time32
|
||||
248 common io_submit sys_io_submit
|
||||
249 common io_cancel sys_io_cancel
|
||||
250 common fadvise64 sys_fadvise64
|
||||
# 251 is available for reuse (was briefly sys_set_zone_reclaim)
|
||||
252 common exit_group sys_exit_group
|
||||
253 common lookup_dcookie sys_ni_syscall
|
||||
254 common epoll_create sys_epoll_create
|
||||
255 common epoll_ctl sys_epoll_ctl
|
||||
256 common epoll_wait sys_epoll_wait
|
||||
257 common remap_file_pages sys_remap_file_pages
|
||||
258 common set_tid_address sys_set_tid_address
|
||||
259 common timer_create sys_timer_create
|
||||
260 common timer_settime sys_timer_settime32
|
||||
261 common timer_gettime sys_timer_gettime32
|
||||
262 common timer_getoverrun sys_timer_getoverrun
|
||||
263 common timer_delete sys_timer_delete
|
||||
264 common clock_settime sys_clock_settime32
|
||||
265 common clock_gettime sys_clock_gettime32
|
||||
266 common clock_getres sys_clock_getres_time32
|
||||
267 common clock_nanosleep sys_clock_nanosleep_time32
|
||||
268 common statfs64 sys_statfs64
|
||||
269 common fstatfs64 sys_fstatfs64
|
||||
270 common tgkill sys_tgkill
|
||||
271 common utimes sys_utimes_time32
|
||||
272 common fadvise64_64 sys_fadvise64_64
|
||||
273 common vserver sys_ni_syscall
|
||||
274 common mbind sys_mbind
|
||||
275 common get_mempolicy sys_get_mempolicy
|
||||
276 common set_mempolicy sys_set_mempolicy
|
||||
277 common mq_open sys_mq_open
|
||||
278 common mq_unlink sys_mq_unlink
|
||||
279 common mq_timedsend sys_mq_timedsend_time32
|
||||
280 common mq_timedreceive sys_mq_timedreceive_time32
|
||||
281 common mq_notify sys_mq_notify
|
||||
282 common mq_getsetattr sys_mq_getsetattr
|
||||
283 common kexec_load sys_kexec_load
|
||||
284 common waitid sys_waitid
|
||||
# 285 was setaltroot
|
||||
286 common add_key sys_add_key
|
||||
287 common request_key sys_request_key
|
||||
288 common keyctl sys_keyctl
|
||||
289 common ioprio_set sys_ioprio_set
|
||||
290 common ioprio_get sys_ioprio_get
|
||||
291 common inotify_init sys_inotify_init
|
||||
292 common inotify_add_watch sys_inotify_add_watch
|
||||
293 common inotify_rm_watch sys_inotify_rm_watch
|
||||
294 common migrate_pages sys_ni_syscall
|
||||
295 common openat sys_openat
|
||||
296 common mkdirat sys_mkdirat
|
||||
297 common mknodat sys_mknodat
|
||||
298 common fchownat sys_fchownat
|
||||
299 common futimesat sys_futimesat_time32
|
||||
300 common fstatat64 sys_fstatat64
|
||||
301 common unlinkat sys_unlinkat
|
||||
302 common renameat sys_renameat
|
||||
303 common linkat sys_linkat
|
||||
304 common symlinkat sys_symlinkat
|
||||
305 common readlinkat sys_readlinkat
|
||||
306 common fchmodat sys_fchmodat
|
||||
307 common faccessat sys_faccessat
|
||||
308 common pselect6 sys_pselect6_time32
|
||||
309 common ppoll sys_ppoll_time32
|
||||
310 common unshare sys_unshare
|
||||
311 common set_robust_list sys_set_robust_list
|
||||
312 common get_robust_list sys_get_robust_list
|
||||
313 common splice sys_splice
|
||||
314 common sync_file_range sys_sync_file_range
|
||||
315 common tee sys_tee
|
||||
316 common vmsplice sys_vmsplice
|
||||
317 common move_pages sys_move_pages
|
||||
318 common getcpu sys_getcpu
|
||||
319 common epoll_pwait sys_epoll_pwait
|
||||
320 common utimensat sys_utimensat_time32
|
||||
321 common signalfd sys_signalfd
|
||||
322 common timerfd_create sys_timerfd_create
|
||||
323 common eventfd sys_eventfd
|
||||
324 common fallocate sys_fallocate
|
||||
325 common semtimedop sys_semtimedop_time32
|
||||
326 common timerfd_settime sys_timerfd_settime32
|
||||
327 common timerfd_gettime sys_timerfd_gettime32
|
||||
328 common semctl sys_old_semctl
|
||||
329 common semget sys_semget
|
||||
330 common semop sys_semop
|
||||
331 common msgctl sys_old_msgctl
|
||||
332 common msgget sys_msgget
|
||||
333 common msgrcv sys_msgrcv
|
||||
334 common msgsnd sys_msgsnd
|
||||
335 common shmat sys_shmat
|
||||
336 common shmctl sys_old_shmctl
|
||||
337 common shmdt sys_shmdt
|
||||
338 common shmget sys_shmget
|
||||
339 common signalfd4 sys_signalfd4
|
||||
340 common eventfd2 sys_eventfd2
|
||||
341 common epoll_create1 sys_epoll_create1
|
||||
342 common dup3 sys_dup3
|
||||
343 common pipe2 sys_pipe2
|
||||
344 common inotify_init1 sys_inotify_init1
|
||||
345 common socket sys_socket
|
||||
346 common socketpair sys_socketpair
|
||||
347 common bind sys_bind
|
||||
348 common listen sys_listen
|
||||
349 common accept sys_accept
|
||||
350 common connect sys_connect
|
||||
351 common getsockname sys_getsockname
|
||||
352 common getpeername sys_getpeername
|
||||
353 common sendto sys_sendto
|
||||
354 common send sys_send
|
||||
355 common recvfrom sys_recvfrom
|
||||
356 common recv sys_recv
|
||||
357 common setsockopt sys_setsockopt
|
||||
358 common getsockopt sys_getsockopt
|
||||
359 common shutdown sys_shutdown
|
||||
360 common sendmsg sys_sendmsg
|
||||
361 common recvmsg sys_recvmsg
|
||||
362 common accept4 sys_accept4
|
||||
363 common preadv sys_preadv
|
||||
364 common pwritev sys_pwritev
|
||||
365 common rt_tgsigqueueinfo sys_rt_tgsigqueueinfo
|
||||
366 common perf_event_open sys_perf_event_open
|
||||
367 common recvmmsg sys_recvmmsg_time32
|
||||
368 common fanotify_init sys_fanotify_init
|
||||
369 common fanotify_mark sys_fanotify_mark
|
||||
370 common prlimit64 sys_prlimit64
|
||||
371 common name_to_handle_at sys_name_to_handle_at
|
||||
372 common open_by_handle_at sys_open_by_handle_at
|
||||
373 common clock_adjtime sys_clock_adjtime32
|
||||
374 common syncfs sys_syncfs
|
||||
375 common setns sys_setns
|
||||
376 common sendmmsg sys_sendmmsg
|
||||
377 common process_vm_readv sys_process_vm_readv
|
||||
378 common process_vm_writev sys_process_vm_writev
|
||||
379 common kcmp sys_kcmp
|
||||
380 common finit_module sys_finit_module
|
||||
381 common sched_setattr sys_sched_setattr
|
||||
382 common sched_getattr sys_sched_getattr
|
||||
383 common renameat2 sys_renameat2
|
||||
384 common seccomp sys_seccomp
|
||||
385 common getrandom sys_getrandom
|
||||
386 common memfd_create sys_memfd_create
|
||||
387 common bpf sys_bpf
|
||||
388 common execveat sys_execveat
|
||||
389 common userfaultfd sys_userfaultfd
|
||||
390 common membarrier sys_membarrier
|
||||
391 common mlock2 sys_mlock2
|
||||
392 common copy_file_range sys_copy_file_range
|
||||
393 common preadv2 sys_preadv2
|
||||
394 common pwritev2 sys_pwritev2
|
||||
395 common pkey_mprotect sys_pkey_mprotect
|
||||
396 common pkey_alloc sys_pkey_alloc
|
||||
397 common pkey_free sys_pkey_free
|
||||
398 common statx sys_statx
|
||||
399 common io_pgetevents sys_io_pgetevents_time32
|
||||
400 common rseq sys_rseq
|
||||
# 401 and 402 are unused
|
||||
403 common clock_gettime64 sys_clock_gettime
|
||||
404 common clock_settime64 sys_clock_settime
|
||||
405 common clock_adjtime64 sys_clock_adjtime
|
||||
406 common clock_getres_time64 sys_clock_getres
|
||||
407 common clock_nanosleep_time64 sys_clock_nanosleep
|
||||
408 common timer_gettime64 sys_timer_gettime
|
||||
409 common timer_settime64 sys_timer_settime
|
||||
410 common timerfd_gettime64 sys_timerfd_gettime
|
||||
411 common timerfd_settime64 sys_timerfd_settime
|
||||
412 common utimensat_time64 sys_utimensat
|
||||
413 common pselect6_time64 sys_pselect6
|
||||
414 common ppoll_time64 sys_ppoll
|
||||
416 common io_pgetevents_time64 sys_io_pgetevents
|
||||
417 common recvmmsg_time64 sys_recvmmsg
|
||||
418 common mq_timedsend_time64 sys_mq_timedsend
|
||||
419 common mq_timedreceive_time64 sys_mq_timedreceive
|
||||
420 common semtimedop_time64 sys_semtimedop
|
||||
421 common rt_sigtimedwait_time64 sys_rt_sigtimedwait
|
||||
422 common futex_time64 sys_futex
|
||||
423 common sched_rr_get_interval_time64 sys_sched_rr_get_interval
|
||||
424 common pidfd_send_signal sys_pidfd_send_signal
|
||||
425 common io_uring_setup sys_io_uring_setup
|
||||
426 common io_uring_enter sys_io_uring_enter
|
||||
427 common io_uring_register sys_io_uring_register
|
||||
428 common open_tree sys_open_tree
|
||||
429 common move_mount sys_move_mount
|
||||
430 common fsopen sys_fsopen
|
||||
431 common fsconfig sys_fsconfig
|
||||
432 common fsmount sys_fsmount
|
||||
433 common fspick sys_fspick
|
||||
434 common pidfd_open sys_pidfd_open
|
||||
435 common clone3 sys_clone3
|
||||
436 common close_range sys_close_range
|
||||
437 common openat2 sys_openat2
|
||||
438 common pidfd_getfd sys_pidfd_getfd
|
||||
439 common faccessat2 sys_faccessat2
|
||||
440 common process_madvise sys_process_madvise
|
||||
441 common epoll_pwait2 sys_epoll_pwait2
|
||||
442 common mount_setattr sys_mount_setattr
|
||||
443 common quotactl_fd sys_quotactl_fd
|
||||
444 common landlock_create_ruleset sys_landlock_create_ruleset
|
||||
445 common landlock_add_rule sys_landlock_add_rule
|
||||
446 common landlock_restrict_self sys_landlock_restrict_self
|
||||
# 447 reserved for memfd_secret
|
||||
448 common process_mrelease sys_process_mrelease
|
||||
449 common futex_waitv sys_futex_waitv
|
||||
450 common set_mempolicy_home_node sys_set_mempolicy_home_node
|
||||
451 common cachestat sys_cachestat
|
||||
452 common fchmodat2 sys_fchmodat2
|
||||
453 common map_shadow_stack sys_map_shadow_stack
|
||||
454 common futex_wake sys_futex_wake
|
||||
455 common futex_wait sys_futex_wait
|
||||
456 common futex_requeue sys_futex_requeue
|
||||
457 common statmount sys_statmount
|
||||
458 common listmount sys_listmount
|
||||
459 common lsm_get_self_attr sys_lsm_get_self_attr
|
||||
460 common lsm_set_self_attr sys_lsm_set_self_attr
|
||||
461 common lsm_list_modules sys_lsm_list_modules
|
||||
462 common mseal sys_mseal
|
||||
@@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
in="$1"
|
||||
out="$2"
|
||||
my_abis=`echo "($3)" | tr ',' '|'`
|
||||
prefix="$4"
|
||||
offset="$5"
|
||||
|
||||
fileguard=LINUX_USER_MICROBLAZE_`basename "$out" | sed \
|
||||
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
|
||||
-e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g'`
|
||||
grep -E "^[0-9A-Fa-fXx]+[[:space:]]+${my_abis}" "$in" | sort -n | (
|
||||
printf "#ifndef %s\n" "${fileguard}"
|
||||
printf "#define %s\n" "${fileguard}"
|
||||
printf "\n"
|
||||
|
||||
nxt=0
|
||||
while read nr abi name entry ; do
|
||||
if [ -z "$offset" ]; then
|
||||
printf "#define TARGET_NR_%s%s\t%s\n" \
|
||||
"${prefix}" "${name}" "${nr}"
|
||||
else
|
||||
printf "#define TARGET_NR_%s%s\t(%s + %s)\n" \
|
||||
"${prefix}" "${name}" "${offset}" "${nr}"
|
||||
fi
|
||||
nxt=$((nr+1))
|
||||
done
|
||||
|
||||
printf "\n"
|
||||
printf "#endif /* %s */" "${fileguard}"
|
||||
) > "$out"
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* MicroBlaze specific CPU ABI and functions for linux-user
|
||||
*
|
||||
* Copyright (c) 2009 Edgar E. Iglesias
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library 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 Lesser General Public
|
||||
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef MICROBLAZE_TARGET_CPU_H
|
||||
#define MICROBLAZE_TARGET_CPU_H
|
||||
|
||||
static inline void cpu_clone_regs_child(CPUMBState *env, target_ulong newsp,
|
||||
unsigned flags)
|
||||
{
|
||||
if (newsp) {
|
||||
env->regs[R_SP] = newsp;
|
||||
}
|
||||
env->regs[3] = 0;
|
||||
}
|
||||
|
||||
static inline void cpu_clone_regs_parent(CPUMBState *env, unsigned flags)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void cpu_set_tls(CPUMBState *env, target_ulong newtls)
|
||||
{
|
||||
env->regs[21] = newtls;
|
||||
}
|
||||
|
||||
static inline abi_ulong get_sp_from_cpustate(CPUMBState *state)
|
||||
{
|
||||
return state->regs[1];
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* 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 MICROBLAZE_TARGET_ELF_H
|
||||
#define MICROBLAZE_TARGET_ELF_H
|
||||
|
||||
#include "target_ptrace.h"
|
||||
|
||||
#define ELF_CLASS ELFCLASS32
|
||||
#define ELF_MACHINE EM_MICROBLAZE
|
||||
|
||||
#define elf_check_machine(x) ((x) == EM_MICROBLAZE || (x) == EM_MICROBLAZE_OLD)
|
||||
|
||||
#define HAVE_ELF_CORE_DUMP 1
|
||||
|
||||
/*
|
||||
* See linux kernel: arch/microblaze/include/asm/elf.h, where
|
||||
* elf_gregset_t is mapped to struct pt_regs via sizeof.
|
||||
*/
|
||||
typedef struct target_elf_gregset_t {
|
||||
struct target_pt_regs pt;
|
||||
} target_elf_gregset_t;
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,7 @@
|
||||
#ifndef MICROBLAZE_TARGET_ERRNO_DEFS_H
|
||||
#define MICROBLAZE_TARGET_ERRNO_DEFS_H
|
||||
|
||||
/* Target uses generic errno */
|
||||
#include "../generic/target_errno_defs.h"
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
* 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 MICROBLAZE_TARGET_FCNTL_H
|
||||
#define MICROBLAZE_TARGET_FCNTL_H
|
||||
#include "../generic/fcntl.h"
|
||||
#endif
|
||||
@@ -0,0 +1 @@
|
||||
#include "../generic/target_flat.h"
|
||||
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* arch/microblaze/include/asm/processor.h:
|
||||
* TASK_UNMAPPED_BASE (TASK_SIZE / 8 * 3)
|
||||
* TASK_SIZE CONFIG_KERNEL_START
|
||||
* CONFIG_KERNEL_START 0xc0000000 (default in Kconfig)
|
||||
*/
|
||||
#define TASK_UNMAPPED_BASE 0x48000000
|
||||
|
||||
/* arch/microblaze/include/uapi/asm/elf.h */
|
||||
#define ELF_ET_DYN_BASE 0x08000000
|
||||
|
||||
#include "../generic/target_mman.h"
|
||||
@@ -0,0 +1 @@
|
||||
/* No special prctl support required. */
|
||||
@@ -0,0 +1 @@
|
||||
/* No target-specific /proc support */
|
||||
@@ -0,0 +1,20 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#ifndef MICROBLAZE_TARGET_PTRACE_H
|
||||
#define MICROBLAZE_TARGET_PTRACE_H
|
||||
|
||||
/* We use microblaze_reg_t to keep things similar to the kernel sources. */
|
||||
typedef uint32_t microblaze_reg_t;
|
||||
|
||||
struct target_pt_regs {
|
||||
/* Note the kernel enumerates all 32 registers. */
|
||||
microblaze_reg_t r[32];
|
||||
microblaze_reg_t pc;
|
||||
microblaze_reg_t msr;
|
||||
microblaze_reg_t ear;
|
||||
microblaze_reg_t esr;
|
||||
microblaze_reg_t fsr;
|
||||
uint32_t kernel_mode;
|
||||
};
|
||||
|
||||
#endif /* MICROBLAZE_TARGET_PTRACE_H */
|
||||
@@ -0,0 +1 @@
|
||||
#include "../generic/target_resource.h"
|
||||
@@ -0,0 +1,10 @@
|
||||
#ifndef MICROBLAZE_TARGET_SIGNAL_H
|
||||
#define MICROBLAZE_TARGET_SIGNAL_H
|
||||
|
||||
#include "../generic/signal.h"
|
||||
|
||||
#define TARGET_SA_RESTORER 0x04000000
|
||||
|
||||
#define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
|
||||
|
||||
#endif /* MICROBLAZE_TARGET_SIGNAL_H */
|
||||
@@ -0,0 +1 @@
|
||||
#include "../generic/target_structs.h"
|
||||
@@ -0,0 +1,14 @@
|
||||
#ifndef MICROBLAZE_TARGET_SYSCALL_H
|
||||
#define MICROBLAZE_TARGET_SYSCALL_H
|
||||
|
||||
#define UNAME_MACHINE "microblaze"
|
||||
#define UNAME_MINIMUM_RELEASE "2.6.32"
|
||||
|
||||
#define TARGET_CLONE_BACKWARDS
|
||||
#define TARGET_MCL_CURRENT 1
|
||||
#define TARGET_MCL_FUTURE 2
|
||||
#define TARGET_MCL_ONFAULT 4
|
||||
|
||||
#define TARGET_WANT_NI_OLD_SELECT
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1 @@
|
||||
#include "../generic/termbits.h"
|
||||
Reference in new issue
Block a user