Pull request linux-user 20220525

s390x fixes
 CPUArchState cleanup
 elfload cleanup
 fix for uclibc-ng and by musl
 -----BEGIN PGP SIGNATURE-----
 
 iQJGBAABCAAwFiEEzS913cjjpNwuT1Fz8ww4vT8vvjwFAmKOB6ISHGxhdXJlbnRA
 dml2aWVyLmV1AAoJEPMMOL0/L748UooP/38pbx20Zz1ZJcT5jkfJNOScg2mlHmeJ
 2pr+8HRXyGXjkFsqNLKPSDB5/bEa9reCBIuVFR3kLxFdERE8G8PQqAH7tp8Sd3LT
 HFEGQ3nK6DGRNRnLQqpzSyG6ZpktpJrHmXpdh3HxGM2r/gPnWV/XKM87YvG+kOKe
 XU75Yx9F8VMYUjbDoAYuUOPOPvvrnTpLnFOedss6WXOJJFJvE7jzPMx4mwiYlXIj
 IrjHAd+rK3yUXziqM4gqZjrNvRw7+UhaNv1gDJGHFw+aSRrrDSl5OiNHZstAcRUD
 Kx4TVMCm2m8vYxtX2QKBz6DSonOVe0/w6aRKiqZmDfxPfxPvtjtfnREZGqyb211T
 3uMbtWI/kkqL9Fw1nNVJyzdKCqf0YSDzmfWdgqhYq568IX1DUZgIMgDMPfBo3N5N
 euH4UVaFwy+s/pq5lW2EIZm6TAKllpseMyDPUrva8Wis9hAEV4CTMq6Z8XlnzxSd
 Jwwizxt0pItpmiPPGr4eGSM9uY1aFKgqiMFyCZATTrmHe4AQrssEV2cH5Wg6veaY
 cE7VaA5grwUlToYSQaRNRjqTqW64uDxhz8wTfsAe9hRT2dNFJdHibtBrOeepl35R
 5cWQzHas3pTUx9D/gzUtkstoWIKlDSppxpIHcFKxcEKOLreUFEwYVLJuA9+IgLVl
 /vcZHcEAjz/k
 =B9Rm
 -----END PGP SIGNATURE-----

Merge tag 'linux-user-for-7.1-pull-request' of https://gitlab.com/laurent_vivier/qemu into staging

Pull request linux-user 20220525

s390x fixes
CPUArchState cleanup
elfload cleanup
fix for uclibc-ng and by musl

# -----BEGIN PGP SIGNATURE-----
#
# iQJGBAABCAAwFiEEzS913cjjpNwuT1Fz8ww4vT8vvjwFAmKOB6ISHGxhdXJlbnRA
# dml2aWVyLmV1AAoJEPMMOL0/L748UooP/38pbx20Zz1ZJcT5jkfJNOScg2mlHmeJ
# 2pr+8HRXyGXjkFsqNLKPSDB5/bEa9reCBIuVFR3kLxFdERE8G8PQqAH7tp8Sd3LT
# HFEGQ3nK6DGRNRnLQqpzSyG6ZpktpJrHmXpdh3HxGM2r/gPnWV/XKM87YvG+kOKe
# XU75Yx9F8VMYUjbDoAYuUOPOPvvrnTpLnFOedss6WXOJJFJvE7jzPMx4mwiYlXIj
# IrjHAd+rK3yUXziqM4gqZjrNvRw7+UhaNv1gDJGHFw+aSRrrDSl5OiNHZstAcRUD
# Kx4TVMCm2m8vYxtX2QKBz6DSonOVe0/w6aRKiqZmDfxPfxPvtjtfnREZGqyb211T
# 3uMbtWI/kkqL9Fw1nNVJyzdKCqf0YSDzmfWdgqhYq568IX1DUZgIMgDMPfBo3N5N
# euH4UVaFwy+s/pq5lW2EIZm6TAKllpseMyDPUrva8Wis9hAEV4CTMq6Z8XlnzxSd
# Jwwizxt0pItpmiPPGr4eGSM9uY1aFKgqiMFyCZATTrmHe4AQrssEV2cH5Wg6veaY
# cE7VaA5grwUlToYSQaRNRjqTqW64uDxhz8wTfsAe9hRT2dNFJdHibtBrOeepl35R
# 5cWQzHas3pTUx9D/gzUtkstoWIKlDSppxpIHcFKxcEKOLreUFEwYVLJuA9+IgLVl
# /vcZHcEAjz/k
# =B9Rm
# -----END PGP SIGNATURE-----
# gpg: Signature made Wed 25 May 2022 03:40:34 AM PDT
# gpg:                using RSA key CD2F75DDC8E3A4DC2E4F5173F30C38BD3F2FBE3C
# gpg:                issuer "laurent@vivier.eu"
# gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>" [undefined]
# gpg:                 aka "Laurent Vivier <laurent@vivier.eu>" [undefined]
# gpg:                 aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>" [undefined]
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F  5173 F30C 38BD 3F2F BE3C

* tag 'linux-user-for-7.1-pull-request' of https://gitlab.com/laurent_vivier/qemu:
  linux-user/host/s390: Treat EX and EXRL as writes
  tests/tcg/s390x: Test unwinding from signal handlers
  linux-user/s390x: Fix unwinding from signal handlers
  linux-user: Remove pointless CPU{ARCH}State casts
  linux-user: Have do_syscall() use CPUArchState* instead of void*
  linux-user/elfload: Remove pointless non-const CPUArchState cast
  linux-user/syscall.c: fix build without RLIMIT_RTTIME
  linux-user: Clean up arg_start/arg_end confusion

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2022-05-25 09:32:38 -07:00
commit 6882d65161
14 changed files with 252 additions and 186 deletions

View File

@ -1516,8 +1516,8 @@ static inline void init_thread(struct target_pt_regs *regs,
regs->iaoq[0] = infop->entry;
regs->iaoq[1] = infop->entry + 4;
regs->gr[23] = 0;
regs->gr[24] = infop->arg_start;
regs->gr[25] = (infop->arg_end - infop->arg_start) / sizeof(abi_ulong);
regs->gr[24] = infop->argv;
regs->gr[25] = infop->argc;
/* The top-of-stack contains a linkage buffer. */
regs->gr[30] = infop->start_stack + 64;
regs->gr[31] = infop->entry;
@ -2120,8 +2120,10 @@ static abi_ulong create_elf_tables(abi_ulong p, int argc, int envc,
u_envp = u_argv + (argc + 1) * n;
u_auxv = u_envp + (envc + 1) * n;
info->saved_auxv = u_auxv;
info->arg_start = u_argv;
info->arg_end = u_argv + argc * n;
info->argc = argc;
info->envc = envc;
info->argv = u_argv;
info->envp = u_envp;
/* This is correct because Linux defines
* elf_addr_t as Elf32_Off / Elf64_Off
@ -3971,7 +3973,7 @@ static int fill_note_info(struct elf_note_info *info,
if (cpu == thread_cpu) {
continue;
}
fill_thread_info(info, (CPUArchState *)cpu->env_ptr);
fill_thread_info(info, cpu->env_ptr);
}
cpu_list_unlock();

View File

@ -50,6 +50,7 @@ static inline bool host_signal_write(siginfo_t *info, host_sigcontext *uc)
case 0x50: /* ST */
case 0x42: /* STC */
case 0x40: /* STH */
case 0x44: /* EX */
case 0xba: /* CS */
case 0xbb: /* CDS */
return true;
@ -61,6 +62,12 @@ static inline bool host_signal_write(siginfo_t *info, host_sigcontext *uc)
return true;
}
break;
case 0xc6: /* RIL-b format insns */
switch (pinsn[0] & 0xf) {
case 0x0: /* EXRL */
return true;
}
break;
case 0xc8: /* SSF format insns */
switch (pinsn[0] & 0xf) {
case 0x2: /* CSST */

View File

@ -92,6 +92,11 @@ abi_ulong loader_build_argptr(int envc, int argc, abi_ulong sp,
envp = sp;
sp -= (argc + 1) * n;
argv = sp;
ts->info->envp = envp;
ts->info->envc = envc;
ts->info->argv = argv;
ts->info->argc = argc;
if (push_ptr) {
/* FIXME - handle put_user() failures */
sp -= n;
@ -99,19 +104,22 @@ abi_ulong loader_build_argptr(int envc, int argc, abi_ulong sp,
sp -= n;
put_user_ual(argv, sp);
}
sp -= n;
/* FIXME - handle put_user() failures */
put_user_ual(argc, sp);
ts->info->arg_start = stringp;
ts->info->arg_strings = stringp;
while (argc-- > 0) {
/* FIXME - handle put_user() failures */
put_user_ual(stringp, argv);
argv += n;
stringp += target_strlen(stringp) + 1;
}
ts->info->arg_end = stringp;
/* FIXME - handle put_user() failures */
put_user_ual(0, argv);
ts->info->env_strings = stringp;
while (envc-- > 0) {
/* FIXME - handle put_user() failures */
put_user_ual(stringp, envp);

View File

@ -878,9 +878,9 @@ int main(int argc, char **argv, char **envp)
fprintf(f, "entry 0x" TARGET_ABI_FMT_lx "\n",
info->entry);
fprintf(f, "argv_start 0x" TARGET_ABI_FMT_lx "\n",
info->arg_start);
info->argv);
fprintf(f, "env_start 0x" TARGET_ABI_FMT_lx "\n",
info->arg_end + (abi_ulong)sizeof(abi_ulong));
info->envp);
fprintf(f, "auxv_start 0x" TARGET_ABI_FMT_lx "\n",
info->saved_auxv);
qemu_log_unlock(f);

View File

@ -40,15 +40,19 @@ struct image_info {
abi_ulong data_offset;
abi_ulong saved_auxv;
abi_ulong auxv_len;
abi_ulong arg_start;
abi_ulong arg_end;
abi_ulong arg_strings;
abi_ulong env_strings;
abi_ulong argc;
abi_ulong argv;
abi_ulong envc;
abi_ulong envp;
abi_ulong file_string;
uint32_t elf_flags;
int personality;
abi_ulong alignment;
/* Generic semihosting knows about these pointers. */
abi_ulong arg_strings; /* strings for argv */
abi_ulong env_strings; /* strings for envp; ends arg_strings */
/* The fields below are used in FDPIC mode. */
abi_ulong loadmap_addr;
uint16_t nsegs;

View File

@ -84,6 +84,11 @@ struct target_ucontext {
typedef struct {
uint8_t callee_used_stack[__SIGNAL_FRAMESIZE];
/*
* This field is no longer initialized by the kernel, but it's still a part
* of the ABI.
*/
uint16_t svc_insn;
struct target_siginfo info;
struct target_ucontext uc;
} rt_sigframe;

View File

@ -22,10 +22,10 @@ struct syscallname {
int nr;
const char *name;
const char *format;
void (*call)(void *, const struct syscallname *,
void (*call)(CPUArchState *, const struct syscallname *,
abi_long, abi_long, abi_long,
abi_long, abi_long, abi_long);
void (*result)(void *, const struct syscallname *, abi_long,
void (*result)(CPUArchState *, const struct syscallname *, abi_long,
abi_long, abi_long, abi_long,
abi_long, abi_long, abi_long);
};
@ -593,7 +593,7 @@ print_fdset(int n, abi_ulong target_fds_addr)
/* select */
#ifdef TARGET_NR__newselect
static void
print_newselect(void *cpu_env, const struct syscallname *name,
print_newselect(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg1, abi_long arg2, abi_long arg3,
abi_long arg4, abi_long arg5, abi_long arg6)
{
@ -611,7 +611,7 @@ print_newselect(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_semctl
static void
print_semctl(void *cpu_env, const struct syscallname *name,
print_semctl(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg1, abi_long arg2, abi_long arg3,
abi_long arg4, abi_long arg5, abi_long arg6)
{
@ -623,7 +623,7 @@ print_semctl(void *cpu_env, const struct syscallname *name,
#endif
static void
print_execve(void *cpu_env, const struct syscallname *name,
print_execve(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg1, abi_long arg2, abi_long arg3,
abi_long arg4, abi_long arg5, abi_long arg6)
{
@ -656,7 +656,7 @@ print_execve(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_ipc
static void
print_ipc(void *cpu_env, const struct syscallname *name,
print_ipc(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg1, abi_long arg2, abi_long arg3,
abi_long arg4, abi_long arg5, abi_long arg6)
{
@ -700,7 +700,7 @@ print_syscall_err(abi_long ret)
}
static void
print_syscall_ret_addr(void *cpu_env, const struct syscallname *name,
print_syscall_ret_addr(CPUArchState *cpu_env, const struct syscallname *name,
abi_long ret, abi_long arg0, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5)
@ -721,7 +721,7 @@ print_syscall_ret_raw(struct syscallname *name, abi_long ret)
#ifdef TARGET_NR__newselect
static void
print_syscall_ret_newselect(void *cpu_env, const struct syscallname *name,
print_syscall_ret_newselect(CPUArchState *cpu_env, const struct syscallname *name,
abi_long ret, abi_long arg0, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5)
@ -751,7 +751,7 @@ print_syscall_ret_newselect(void *cpu_env, const struct syscallname *name,
#define TARGET_TIME_ERROR 5 /* clock not synchronized */
#ifdef TARGET_NR_adjtimex
static void
print_syscall_ret_adjtimex(void *cpu_env, const struct syscallname *name,
print_syscall_ret_adjtimex(CPUArchState *cpu_env, const struct syscallname *name,
abi_long ret, abi_long arg0, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5)
@ -786,7 +786,7 @@ print_syscall_ret_adjtimex(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_clock_gettime) || defined(TARGET_NR_clock_getres)
static void
print_syscall_ret_clock_gettime(void *cpu_env, const struct syscallname *name,
print_syscall_ret_clock_gettime(CPUArchState *cpu_env, const struct syscallname *name,
abi_long ret, abi_long arg0, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5)
@ -805,7 +805,7 @@ print_syscall_ret_clock_gettime(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_gettimeofday
static void
print_syscall_ret_gettimeofday(void *cpu_env, const struct syscallname *name,
print_syscall_ret_gettimeofday(CPUArchState *cpu_env, const struct syscallname *name,
abi_long ret, abi_long arg0, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5)
@ -824,7 +824,7 @@ print_syscall_ret_gettimeofday(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_getitimer
static void
print_syscall_ret_getitimer(void *cpu_env, const struct syscallname *name,
print_syscall_ret_getitimer(CPUArchState *cpu_env, const struct syscallname *name,
abi_long ret, abi_long arg0, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5)
@ -843,7 +843,7 @@ print_syscall_ret_getitimer(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_getitimer
static void
print_syscall_ret_setitimer(void *cpu_env, const struct syscallname *name,
print_syscall_ret_setitimer(CPUArchState *cpu_env, const struct syscallname *name,
abi_long ret, abi_long arg0, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5)
@ -862,7 +862,7 @@ print_syscall_ret_setitimer(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_listxattr) || defined(TARGET_NR_llistxattr) \
|| defined(TARGGET_NR_flistxattr)
static void
print_syscall_ret_listxattr(void *cpu_env, const struct syscallname *name,
print_syscall_ret_listxattr(CPUArchState *cpu_env, const struct syscallname *name,
abi_long ret, abi_long arg0, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5)
@ -894,7 +894,7 @@ print_syscall_ret_listxattr(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_ioctl
static void
print_syscall_ret_ioctl(void *cpu_env, const struct syscallname *name,
print_syscall_ret_ioctl(CPUArchState *cpu_env, const struct syscallname *name,
abi_long ret, abi_long arg0, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5)
@ -1760,7 +1760,7 @@ print_termios(void *arg)
#ifdef TARGET_NR_accept
static void
print_accept(void *cpu_env, const struct syscallname *name,
print_accept(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1774,7 +1774,7 @@ print_accept(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_access
static void
print_access(void *cpu_env, const struct syscallname *name,
print_access(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1787,7 +1787,7 @@ print_access(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_acct
static void
print_acct(void *cpu_env, const struct syscallname *name,
print_acct(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1799,7 +1799,7 @@ print_acct(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_brk
static void
print_brk(void *cpu_env, const struct syscallname *name,
print_brk(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1811,7 +1811,7 @@ print_brk(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_chdir
static void
print_chdir(void *cpu_env, const struct syscallname *name,
print_chdir(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1823,7 +1823,7 @@ print_chdir(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_chroot
static void
print_chroot(void *cpu_env, const struct syscallname *name,
print_chroot(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1835,7 +1835,7 @@ print_chroot(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_chmod
static void
print_chmod(void *cpu_env, const struct syscallname *name,
print_chmod(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1848,7 +1848,7 @@ print_chmod(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_chown) || defined(TARGET_NR_lchown)
static void
print_chown(void *cpu_env, const struct syscallname *name,
print_chown(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1863,7 +1863,7 @@ print_chown(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_clock_adjtime
static void
print_clock_adjtime(void *cpu_env, const struct syscallname *name,
print_clock_adjtime(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1887,7 +1887,7 @@ static void do_print_clone(unsigned int flags, abi_ulong newsp,
}
static void
print_clone(void *cpu_env, const struct syscallname *name,
print_clone(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg1, abi_long arg2, abi_long arg3,
abi_long arg4, abi_long arg5, abi_long arg6)
{
@ -1907,7 +1907,7 @@ print_clone(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_creat
static void
print_creat(void *cpu_env, const struct syscallname *name,
print_creat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1920,7 +1920,7 @@ print_creat(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_execv
static void
print_execv(void *cpu_env, const struct syscallname *name,
print_execv(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1933,7 +1933,7 @@ print_execv(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_faccessat
static void
print_faccessat(void *cpu_env, const struct syscallname *name,
print_faccessat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1948,7 +1948,7 @@ print_faccessat(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_fallocate
static void
print_fallocate(void *cpu_env, const struct syscallname *name,
print_fallocate(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1968,7 +1968,7 @@ print_fallocate(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_fchmodat
static void
print_fchmodat(void *cpu_env, const struct syscallname *name,
print_fchmodat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1983,7 +1983,7 @@ print_fchmodat(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_fchownat
static void
print_fchownat(void *cpu_env, const struct syscallname *name,
print_fchownat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -1999,7 +1999,7 @@ print_fchownat(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_fcntl) || defined(TARGET_NR_fcntl64)
static void
print_fcntl(void *cpu_env, const struct syscallname *name,
print_fcntl(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2135,7 +2135,7 @@ print_fcntl(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_fgetxattr
static void
print_fgetxattr(void *cpu_env, const struct syscallname *name,
print_fgetxattr(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2150,7 +2150,7 @@ print_fgetxattr(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_flistxattr
static void
print_flistxattr(void *cpu_env, const struct syscallname *name,
print_flistxattr(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2164,7 +2164,7 @@ print_flistxattr(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_getxattr) || defined(TARGET_NR_lgetxattr)
static void
print_getxattr(void *cpu_env, const struct syscallname *name,
print_getxattr(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2180,7 +2180,7 @@ print_getxattr(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_listxattr) || defined(TARGET_NR_llistxattr)
static void
print_listxattr(void *cpu_env, const struct syscallname *name,
print_listxattr(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2195,7 +2195,7 @@ print_listxattr(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_fremovexattr)
static void
print_fremovexattr(void *cpu_env, const struct syscallname *name,
print_fremovexattr(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2208,7 +2208,7 @@ print_fremovexattr(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_removexattr) || defined(TARGET_NR_lremovexattr)
static void
print_removexattr(void *cpu_env, const struct syscallname *name,
print_removexattr(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2222,7 +2222,7 @@ print_removexattr(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_futimesat
static void
print_futimesat(void *cpu_env, const struct syscallname *name,
print_futimesat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2237,7 +2237,7 @@ print_futimesat(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_gettimeofday
static void
print_gettimeofday(void *cpu_env, const struct syscallname *name,
print_gettimeofday(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2250,7 +2250,7 @@ print_gettimeofday(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_settimeofday
static void
print_settimeofday(void *cpu_env, const struct syscallname *name,
print_settimeofday(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2263,7 +2263,7 @@ print_settimeofday(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_clock_gettime) || defined(TARGET_NR_clock_getres)
static void
print_clock_gettime(void *cpu_env, const struct syscallname *name,
print_clock_gettime(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2277,7 +2277,7 @@ print_clock_gettime(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_clock_settime
static void
print_clock_settime(void *cpu_env, const struct syscallname *name,
print_clock_settime(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2290,7 +2290,7 @@ print_clock_settime(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_getitimer
static void
print_getitimer(void *cpu_env, const struct syscallname *name,
print_getitimer(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2303,7 +2303,7 @@ print_getitimer(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_setitimer
static void
print_setitimer(void *cpu_env, const struct syscallname *name,
print_setitimer(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2317,7 +2317,7 @@ print_setitimer(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_link
static void
print_link(void *cpu_env, const struct syscallname *name,
print_link(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2330,7 +2330,7 @@ print_link(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_linkat
static void
print_linkat(void *cpu_env, const struct syscallname *name,
print_linkat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2346,7 +2346,7 @@ print_linkat(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR__llseek) || defined(TARGET_NR_llseek)
static void
print__llseek(void *cpu_env, const struct syscallname *name,
print__llseek(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2369,7 +2369,7 @@ print__llseek(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_lseek
static void
print_lseek(void *cpu_env, const struct syscallname *name,
print_lseek(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2400,7 +2400,7 @@ print_lseek(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_truncate
static void
print_truncate(void *cpu_env, const struct syscallname *name,
print_truncate(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2413,7 +2413,7 @@ print_truncate(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_truncate64
static void
print_truncate64(void *cpu_env, const struct syscallname *name,
print_truncate64(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2430,7 +2430,7 @@ print_truncate64(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_ftruncate64
static void
print_ftruncate64(void *cpu_env, const struct syscallname *name,
print_ftruncate64(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2447,7 +2447,7 @@ print_ftruncate64(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_mlockall
static void
print_mlockall(void *cpu_env, const struct syscallname *name,
print_mlockall(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2459,7 +2459,7 @@ print_mlockall(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_socket)
static void
print_socket(void *cpu_env, const struct syscallname *name,
print_socket(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2920,7 +2920,7 @@ static struct {
};
static void
print_socketcall(void *cpu_env, const struct syscallname *name,
print_socketcall(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2941,7 +2941,7 @@ print_socketcall(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_bind)
static void
print_bind(void *cpu_env, const struct syscallname *name,
print_bind(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2955,7 +2955,7 @@ print_bind(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_stat) || defined(TARGET_NR_stat64) || \
defined(TARGET_NR_lstat) || defined(TARGET_NR_lstat64)
static void
print_stat(void *cpu_env, const struct syscallname *name,
print_stat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2971,7 +2971,7 @@ print_stat(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_fstat) || defined(TARGET_NR_fstat64)
static void
print_fstat(void *cpu_env, const struct syscallname *name,
print_fstat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2985,7 +2985,7 @@ print_fstat(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_mkdir
static void
print_mkdir(void *cpu_env, const struct syscallname *name,
print_mkdir(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -2998,7 +2998,7 @@ print_mkdir(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_mkdirat
static void
print_mkdirat(void *cpu_env, const struct syscallname *name,
print_mkdirat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3012,7 +3012,7 @@ print_mkdirat(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_rmdir
static void
print_rmdir(void *cpu_env, const struct syscallname *name,
print_rmdir(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3024,7 +3024,7 @@ print_rmdir(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_rt_sigaction
static void
print_rt_sigaction(void *cpu_env, const struct syscallname *name,
print_rt_sigaction(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3038,7 +3038,7 @@ print_rt_sigaction(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_rt_sigprocmask
static void
print_rt_sigprocmask(void *cpu_env, const struct syscallname *name,
print_rt_sigprocmask(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3058,7 +3058,7 @@ print_rt_sigprocmask(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_rt_sigqueueinfo
static void
print_rt_sigqueueinfo(void *cpu_env, const struct syscallname *name,
print_rt_sigqueueinfo(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3083,7 +3083,7 @@ print_rt_sigqueueinfo(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_rt_tgsigqueueinfo
static void
print_rt_tgsigqueueinfo(void *cpu_env, const struct syscallname *name,
print_rt_tgsigqueueinfo(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3167,7 +3167,7 @@ print_syslog_action(abi_ulong arg, int last)
}
static void
print_syslog(void *cpu_env, const struct syscallname *name,
print_syslog(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3181,7 +3181,7 @@ print_syslog(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_mknod
static void
print_mknod(void *cpu_env, const struct syscallname *name,
print_mknod(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3200,7 +3200,7 @@ print_mknod(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_mknodat
static void
print_mknodat(void *cpu_env, const struct syscallname *name,
print_mknodat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3220,7 +3220,7 @@ print_mknodat(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_mq_open
static void
print_mq_open(void *cpu_env, const struct syscallname *name,
print_mq_open(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3239,7 +3239,7 @@ print_mq_open(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_open
static void
print_open(void *cpu_env, const struct syscallname *name,
print_open(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3256,7 +3256,7 @@ print_open(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_openat
static void
print_openat(void *cpu_env, const struct syscallname *name,
print_openat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3274,7 +3274,7 @@ print_openat(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_mq_unlink
static void
print_mq_unlink(void *cpu_env, const struct syscallname *name,
print_mq_unlink(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3286,7 +3286,7 @@ print_mq_unlink(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_fstatat64) || defined(TARGET_NR_newfstatat)
static void
print_fstatat64(void *cpu_env, const struct syscallname *name,
print_fstatat64(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3302,7 +3302,7 @@ print_fstatat64(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_readlink
static void
print_readlink(void *cpu_env, const struct syscallname *name,
print_readlink(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3316,7 +3316,7 @@ print_readlink(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_readlinkat
static void
print_readlinkat(void *cpu_env, const struct syscallname *name,
print_readlinkat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3331,7 +3331,7 @@ print_readlinkat(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_rename
static void
print_rename(void *cpu_env, const struct syscallname *name,
print_rename(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3344,7 +3344,7 @@ print_rename(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_renameat
static void
print_renameat(void *cpu_env, const struct syscallname *name,
print_renameat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3359,7 +3359,7 @@ print_renameat(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_statfs
static void
print_statfs(void *cpu_env, const struct syscallname *name,
print_statfs(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3372,7 +3372,7 @@ print_statfs(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_statfs64
static void
print_statfs64(void *cpu_env, const struct syscallname *name,
print_statfs64(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3385,7 +3385,7 @@ print_statfs64(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_symlink
static void
print_symlink(void *cpu_env, const struct syscallname *name,
print_symlink(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3398,7 +3398,7 @@ print_symlink(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_symlinkat
static void
print_symlinkat(void *cpu_env, const struct syscallname *name,
print_symlinkat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3412,7 +3412,7 @@ print_symlinkat(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_mount
static void
print_mount(void *cpu_env, const struct syscallname *name,
print_mount(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3428,7 +3428,7 @@ print_mount(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_umount
static void
print_umount(void *cpu_env, const struct syscallname *name,
print_umount(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3440,7 +3440,7 @@ print_umount(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_umount2
static void
print_umount2(void *cpu_env, const struct syscallname *name,
print_umount2(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3453,7 +3453,7 @@ print_umount2(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_unlink
static void
print_unlink(void *cpu_env, const struct syscallname *name,
print_unlink(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3465,7 +3465,7 @@ print_unlink(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_unlinkat
static void
print_unlinkat(void *cpu_env, const struct syscallname *name,
print_unlinkat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3479,7 +3479,7 @@ print_unlinkat(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_unshare
static void
print_unshare(void *cpu_env, const struct syscallname *name,
print_unshare(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3491,7 +3491,7 @@ print_unshare(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_utime
static void
print_utime(void *cpu_env, const struct syscallname *name,
print_utime(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3504,7 +3504,7 @@ print_utime(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_utimes
static void
print_utimes(void *cpu_env, const struct syscallname *name,
print_utimes(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3517,7 +3517,7 @@ print_utimes(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_utimensat
static void
print_utimensat(void *cpu_env, const struct syscallname *name,
print_utimensat(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3532,7 +3532,7 @@ print_utimensat(void *cpu_env, const struct syscallname *name,
#if defined(TARGET_NR_mmap) || defined(TARGET_NR_mmap2)
static void
print_mmap(void *cpu_env, const struct syscallname *name,
print_mmap(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3550,7 +3550,7 @@ print_mmap(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_mprotect
static void
print_mprotect(void *cpu_env, const struct syscallname *name,
print_mprotect(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3564,7 +3564,7 @@ print_mprotect(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_munmap
static void
print_munmap(void *cpu_env, const struct syscallname *name,
print_munmap(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3617,7 +3617,7 @@ if( cmd == val ) { \
}
static void
print_futex(void *cpu_env, const struct syscallname *name,
print_futex(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3634,7 +3634,7 @@ print_futex(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_kill
static void
print_kill(void *cpu_env, const struct syscallname *name,
print_kill(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3647,7 +3647,7 @@ print_kill(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_tkill
static void
print_tkill(void *cpu_env, const struct syscallname *name,
print_tkill(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3660,7 +3660,7 @@ print_tkill(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_tgkill
static void
print_tgkill(void *cpu_env, const struct syscallname *name,
print_tgkill(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3674,7 +3674,7 @@ print_tgkill(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_statx
static void
print_statx(void *cpu_env, const struct syscallname *name,
print_statx(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3690,7 +3690,7 @@ print_statx(void *cpu_env, const struct syscallname *name,
#ifdef TARGET_NR_ioctl
static void
print_ioctl(void *cpu_env, const struct syscallname *name,
print_ioctl(CPUArchState *cpu_env, const struct syscallname *name,
abi_long arg0, abi_long arg1, abi_long arg2,
abi_long arg3, abi_long arg4, abi_long arg5)
{
@ -3775,7 +3775,7 @@ static int nsyscalls = ARRAY_SIZE(scnames);
* The public interface to this module.
*/
void
print_syscall(void *cpu_env, int num,
print_syscall(CPUArchState *cpu_env, int num,
abi_long arg1, abi_long arg2, abi_long arg3,
abi_long arg4, abi_long arg5, abi_long arg6)
{
@ -3804,7 +3804,7 @@ print_syscall(void *cpu_env, int num,
void
print_syscall_ret(void *cpu_env, int num, abi_long ret,
print_syscall_ret(CPUArchState *cpu_env, int num, abi_long ret,
abi_long arg1, abi_long arg2, abi_long arg3,
abi_long arg4, abi_long arg5, abi_long arg6)
{

View File

@ -18,10 +18,10 @@
#ifndef LINUX_USER_STRACE_H
#define LINUX_USER_STRACE_H
void print_syscall(void *cpu_env, int num,
void print_syscall(CPUArchState *cpu_env, int num,
abi_long arg1, abi_long arg2, abi_long arg3,
abi_long arg4, abi_long arg5, abi_long arg6);
void print_syscall_ret(void *cpu_env, int num, abi_long ret,
void print_syscall_ret(CPUArchState *cpu_env, int num, abi_long ret,
abi_long arg1, abi_long arg2, abi_long arg3,
abi_long arg4, abi_long arg5, abi_long arg6);
/**

View File

@ -1053,8 +1053,10 @@ static inline int target_to_host_resource(int code)
return RLIMIT_RSS;
case TARGET_RLIMIT_RTPRIO:
return RLIMIT_RTPRIO;
#ifdef RLIMIT_RTTIME
case TARGET_RLIMIT_RTTIME:
return RLIMIT_RTTIME;
#endif
case TARGET_RLIMIT_SIGPENDING:
return RLIMIT_SIGPENDING;
case TARGET_RLIMIT_STACK:
@ -1596,7 +1598,7 @@ static abi_long do_pipe2(int host_pipe[], int flags)
#endif
}
static abi_long do_pipe(void *cpu_env, abi_ulong pipedes,
static abi_long do_pipe(CPUArchState *cpu_env, abi_ulong pipedes,
int flags, int is_pipe2)
{
int host_pipe[2];
@ -1610,16 +1612,16 @@ static abi_long do_pipe(void *cpu_env, abi_ulong pipedes,
pipe syscall, but didn't replicate this into the pipe2 syscall. */
if (!is_pipe2) {
#if defined(TARGET_ALPHA)
((CPUAlphaState *)cpu_env)->ir[IR_A4] = host_pipe[1];
cpu_env->ir[IR_A4] = host_pipe[1];
return host_pipe[0];
#elif defined(TARGET_MIPS)
((CPUMIPSState*)cpu_env)->active_tc.gpr[3] = host_pipe[1];
cpu_env->active_tc.gpr[3] = host_pipe[1];
return host_pipe[0];
#elif defined(TARGET_SH4)
((CPUSH4State*)cpu_env)->gregs[1] = host_pipe[1];
cpu_env->gregs[1] = host_pipe[1];
return host_pipe[0];
#elif defined(TARGET_SPARC)
((CPUSPARCState*)cpu_env)->regwptr[1] = host_pipe[1];
cpu_env->regwptr[1] = host_pipe[1];
return host_pipe[0];
#endif
}
@ -7250,7 +7252,7 @@ void syscall_init(void)
}
#ifdef TARGET_NR_truncate64
static inline abi_long target_truncate64(void *cpu_env, const char *arg1,
static inline abi_long target_truncate64(CPUArchState *cpu_env, const char *arg1,
abi_long arg2,
abi_long arg3,
abi_long arg4)
@ -7264,7 +7266,7 @@ static inline abi_long target_truncate64(void *cpu_env, const char *arg1,
#endif
#ifdef TARGET_NR_ftruncate64
static inline abi_long target_ftruncate64(void *cpu_env, abi_long arg1,
static inline abi_long target_ftruncate64(CPUArchState *cpu_env, abi_long arg1,
abi_long arg2,
abi_long arg3,
abi_long arg4)
@ -7559,12 +7561,12 @@ static inline int target_to_host_mlockall_arg(int arg)
#if (defined(TARGET_NR_stat64) || defined(TARGET_NR_lstat64) || \
defined(TARGET_NR_fstat64) || defined(TARGET_NR_fstatat64) || \
defined(TARGET_NR_newfstatat))
static inline abi_long host_to_target_stat64(void *cpu_env,
static inline abi_long host_to_target_stat64(CPUArchState *cpu_env,
abi_ulong target_addr,
struct stat *host_st)
{
#if defined(TARGET_ARM) && defined(TARGET_ABI32)
if (((CPUARMState *)cpu_env)->eabi) {
if (cpu_env->eabi) {
struct target_eabi_stat64 *target_st;
if (!lock_user_struct(VERIFY_WRITE, target_st, target_addr, 0))
@ -7961,9 +7963,9 @@ int host_to_target_waitstatus(int status)
return status;
}
static int open_self_cmdline(void *cpu_env, int fd)
static int open_self_cmdline(CPUArchState *cpu_env, int fd)
{
CPUState *cpu = env_cpu((CPUArchState *)cpu_env);
CPUState *cpu = env_cpu(cpu_env);
struct linux_binprm *bprm = ((TaskState *)cpu->opaque)->bprm;
int i;
@ -7978,9 +7980,9 @@ static int open_self_cmdline(void *cpu_env, int fd)
return 0;
}
static int open_self_maps(void *cpu_env, int fd)
static int open_self_maps(CPUArchState *cpu_env, int fd)
{
CPUState *cpu = env_cpu((CPUArchState *)cpu_env);
CPUState *cpu = env_cpu(cpu_env);
TaskState *ts = cpu->opaque;
GSList *map_info = read_self_maps();
GSList *s;
@ -8040,9 +8042,9 @@ static int open_self_maps(void *cpu_env, int fd)
return 0;
}
static int open_self_stat(void *cpu_env, int fd)
static int open_self_stat(CPUArchState *cpu_env, int fd)
{
CPUState *cpu = env_cpu((CPUArchState *)cpu_env);
CPUState *cpu = env_cpu(cpu_env);
TaskState *ts = cpu->opaque;
g_autoptr(GString) buf = g_string_new(NULL);
int i;
@ -8078,9 +8080,9 @@ static int open_self_stat(void *cpu_env, int fd)
return 0;
}
static int open_self_auxv(void *cpu_env, int fd)
static int open_self_auxv(CPUArchState *cpu_env, int fd)
{
CPUState *cpu = env_cpu((CPUArchState *)cpu_env);
CPUState *cpu = env_cpu(cpu_env);
TaskState *ts = cpu->opaque;
abi_ulong auxv = ts->info->saved_auxv;
abi_ulong len = ts->info->auxv_len;
@ -8141,7 +8143,7 @@ static int is_proc(const char *filename, const char *entry)
#endif
#if HOST_BIG_ENDIAN != TARGET_BIG_ENDIAN
static int open_net_route(void *cpu_env, int fd)
static int open_net_route(CPUArchState *cpu_env, int fd)
{
FILE *fp;
char *line = NULL;
@ -8186,7 +8188,7 @@ static int open_net_route(void *cpu_env, int fd)
#endif
#if defined(TARGET_SPARC)
static int open_cpuinfo(void *cpu_env, int fd)
static int open_cpuinfo(CPUArchState *cpu_env, int fd)
{
dprintf(fd, "type\t\t: sun4u\n");
return 0;
@ -8194,7 +8196,7 @@ static int open_cpuinfo(void *cpu_env, int fd)
#endif
#if defined(TARGET_HPPA)
static int open_cpuinfo(void *cpu_env, int fd)
static int open_cpuinfo(CPUArchState *cpu_env, int fd)
{
dprintf(fd, "cpu family\t: PA-RISC 1.1e\n");
dprintf(fd, "cpu\t\t: PA7300LC (PCX-L2)\n");
@ -8206,18 +8208,18 @@ static int open_cpuinfo(void *cpu_env, int fd)
#endif
#if defined(TARGET_M68K)
static int open_hardware(void *cpu_env, int fd)
static int open_hardware(CPUArchState *cpu_env, int fd)
{
dprintf(fd, "Model:\t\tqemu-m68k\n");
return 0;
}
#endif
static int do_openat(void *cpu_env, int dirfd, const char *pathname, int flags, mode_t mode)
static int do_openat(CPUArchState *cpu_env, int dirfd, const char *pathname, int flags, mode_t mode)
{
struct fake_open {
const char *filename;
int (*fill)(void *cpu_env, int fd);
int (*fill)(CPUArchState *cpu_env, int fd);
int (*cmp)(const char *s1, const char *s2);
};
const struct fake_open *fake_open;
@ -8529,7 +8531,7 @@ _syscall2(int, pivot_root, const char *, new_root, const char *, put_old)
* of syscall results, can be performed.
* All errnos that do_syscall() returns must be -TARGET_<errcode>.
*/
static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5, abi_long arg6, abi_long arg7,
abi_long arg8)
@ -8890,7 +8892,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
#if defined(TARGET_NR_getxpid) && defined(TARGET_ALPHA)
/* Alpha specific */
case TARGET_NR_getxpid:
((CPUAlphaState *)cpu_env)->ir[IR_A4] = getppid();
cpu_env->ir[IR_A4] = getppid();
return get_errno(getpid());
#endif
#ifdef TARGET_NR_getpid
@ -9413,7 +9415,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
if (!is_error(ret)) {
host_to_target_old_sigset(&mask, &oldset);
ret = mask;
((CPUAlphaState *)cpu_env)->ir[IR_V0] = 0; /* force no error */
cpu_env->ir[IR_V0] = 0; /* force no error */
}
#else
sigset_t set, oldset, *set_ptr;
@ -10033,7 +10035,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
}
#ifdef TARGET_ALPHA
/* Return value is the unbiased priority. Signal no error. */
((CPUAlphaState *)cpu_env)->ir[IR_V0] = 0;
cpu_env->ir[IR_V0] = 0;
#else
/* Return value is a biased priority to avoid negative numbers. */
ret = 20 - ret;
@ -11413,7 +11415,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
{
uid_t euid;
euid=geteuid();
((CPUAlphaState *)cpu_env)->ir[IR_A4]=euid;
cpu_env->ir[IR_A4]=euid;
}
return get_errno(getuid());
#endif
@ -11423,7 +11425,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
{
uid_t egid;
egid=getegid();
((CPUAlphaState *)cpu_env)->ir[IR_A4]=egid;
cpu_env->ir[IR_A4]=egid;
}
return get_errno(getgid());
#endif
@ -11435,7 +11437,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
case TARGET_GSI_IEEE_FP_CONTROL:
{
uint64_t fpcr = cpu_alpha_load_fpcr(cpu_env);
uint64_t swcr = ((CPUAlphaState *)cpu_env)->swcr;
uint64_t swcr = cpu_env->swcr;
swcr &= ~SWCR_STATUS_MASK;
swcr |= (fpcr >> 35) & SWCR_STATUS_MASK;
@ -11477,8 +11479,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
* could be queried. Therefore, we store the status
* bits only in FPCR.
*/
((CPUAlphaState *)cpu_env)->swcr
= swcr & (SWCR_TRAP_ENABLE_MASK | SWCR_MAP_MASK);
cpu_env->swcr = swcr & (SWCR_TRAP_ENABLE_MASK | SWCR_MAP_MASK);
fpcr = cpu_alpha_load_fpcr(cpu_env);
fpcr &= ((uint64_t)FPCR_DYN_MASK << 32);
@ -11502,7 +11503,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
fex = alpha_ieee_fpcr_to_swcr(fpcr);
fex = exc & ~fex;
fex >>= SWCR_STATUS_TO_EXCSUM_SHIFT;
fex &= ((CPUArchState *)cpu_env)->swcr;
fex &= (cpu_env)->swcr;
/* Update the hardware fpcr. */
fpcr |= alpha_ieee_swcr_to_fpcr(exc);
@ -11534,9 +11535,8 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
info.si_signo = SIGFPE;
info.si_errno = 0;
info.si_code = si_code;
info._sifields._sigfault._addr
= ((CPUArchState *)cpu_env)->pc;
queue_signal((CPUArchState *)cpu_env, info.si_signo,
info._sifields._sigfault._addr = (cpu_env)->pc;
queue_signal(cpu_env, info.si_signo,
QEMU_SI_FAULT, &info);
}
ret = 0;
@ -11822,7 +11822,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
to_flock64_fn *copyto = copy_to_user_flock64;
#ifdef TARGET_ARM
if (!((CPUARMState *)cpu_env)->eabi) {
if (!cpu_env->eabi) {
copyfrom = copy_from_user_oabi_flock64;
copyto = copy_to_user_oabi_flock64;
}
@ -12050,13 +12050,13 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
#ifdef TARGET_NR_set_thread_area
case TARGET_NR_set_thread_area:
#if defined(TARGET_MIPS)
((CPUMIPSState *) cpu_env)->active_tc.CP0_UserLocal = arg1;
cpu_env->active_tc.CP0_UserLocal = arg1;
return 0;
#elif defined(TARGET_CRIS)
if (arg1 & 0xff)
ret = -TARGET_EINVAL;
else {
((CPUCRISState *) cpu_env)->pregs[PR_PID] = arg1;
cpu_env->pregs[PR_PID] = arg1;
ret = 0;
}
return ret;
@ -12783,8 +12783,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
info.si_errno = 0;
info.si_code = TARGET_SEGV_MAPERR;
info._sifields._sigfault._addr = arg6;
queue_signal((CPUArchState *)cpu_env, info.si_signo,
QEMU_SI_FAULT, &info);
queue_signal(cpu_env, info.si_signo, QEMU_SI_FAULT, &info);
ret = 0xdeadbeef;
}
@ -13153,7 +13152,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
return ret;
}
abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
abi_long do_syscall(CPUArchState *cpu_env, int num, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5, abi_long arg6, abi_long arg7,
abi_long arg8)

View File

@ -28,7 +28,7 @@
* NB: the default emulated CPU ("any") might not match any existing CPU, e.g.
* on ARM it has all features turned on, so there is no perfect arch string to
* return here */
const char *cpu_to_uname_machine(void *cpu_env)
const char *cpu_to_uname_machine(CPUArchState *cpu_env)
{
#if defined(TARGET_ARM) && !defined(TARGET_AARCH64)
@ -54,7 +54,7 @@ const char *cpu_to_uname_machine(void *cpu_env)
return "armv5te" utsname_suffix;
#elif defined(TARGET_I386) && !defined(TARGET_X86_64)
/* see arch/x86/kernel/cpu/bugs.c: check_bugs(), 386, 486, 586, 686 */
CPUState *cpu = env_cpu((CPUX86State *)cpu_env);
CPUState *cpu = env_cpu(cpu_env);
int family = object_property_get_int(OBJECT(cpu), "family", NULL);
if (family == 4) {
return "i486";

View File

@ -4,7 +4,7 @@
#include <sys/utsname.h>
#include <linux/utsname.h>
const char *cpu_to_uname_machine(void *cpu_env);
const char *cpu_to_uname_machine(CPUArchState *cpu_env);
int sys_uname(struct new_utsname *buf);
#endif /* UNAME_H */

View File

@ -59,7 +59,7 @@ int info_is_fdpic(struct image_info *info);
void target_set_brk(abi_ulong new_brk);
void syscall_init(void);
abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
abi_long do_syscall(CPUArchState *cpu_env, int num, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5, abi_long arg6, abi_long arg7,
abi_long arg8);
@ -132,22 +132,22 @@ void print_termios(void *arg);
/* ARM EABI and MIPS expect 64bit types aligned even on pairs or registers */
#ifdef TARGET_ARM
static inline int regpairs_aligned(void *cpu_env, int num)
static inline int regpairs_aligned(CPUArchState *cpu_env, int num)
{
return ((((CPUARMState *)cpu_env)->eabi) == 1) ;
return cpu_env->eabi == 1;
}
#elif defined(TARGET_MIPS) && defined(TARGET_ABI_MIPSO32)
static inline int regpairs_aligned(void *cpu_env, int num) { return 1; }
static inline int regpairs_aligned(CPUArchState *cpu_env, int num) { return 1; }
#elif defined(TARGET_PPC) && !defined(TARGET_PPC64)
/*
* SysV AVI for PPC32 expects 64bit parameters to be passed on odd/even pairs
* of registers which translates to the same as ARM/MIPS, because we start with
* r3 as arg1
*/
static inline int regpairs_aligned(void *cpu_env, int num) { return 1; }
static inline int regpairs_aligned(CPUArchState *cpu_env, int num) { return 1; }
#elif defined(TARGET_SH4)
/* SH4 doesn't align register pairs, except for p{read,write}64 */
static inline int regpairs_aligned(void *cpu_env, int num)
static inline int regpairs_aligned(CPUArchState *cpu_env, int num)
{
switch (num) {
case TARGET_NR_pread64:
@ -159,11 +159,11 @@ static inline int regpairs_aligned(void *cpu_env, int num)
}
}
#elif defined(TARGET_XTENSA)
static inline int regpairs_aligned(void *cpu_env, int num) { return 1; }
static inline int regpairs_aligned(CPUArchState *cpu_env, int num) { return 1; }
#elif defined(TARGET_HEXAGON)
static inline int regpairs_aligned(void *cpu_env, int num) { return 1; }
static inline int regpairs_aligned(CPUArchState *cpu_env, int num) { return 1; }
#else
static inline int regpairs_aligned(void *cpu_env, int num) { return 0; }
static inline int regpairs_aligned(CPUArchState *cpu_env, int num) { return 0; }
#endif
/**

View File

@ -1106,7 +1106,7 @@ target_ulong do_common_semihosting(CPUState *cs)
#else
unsigned int i;
output_size = ts->info->arg_end - ts->info->arg_start;
output_size = ts->info->env_strings - ts->info->arg_strings;
if (!output_size) {
/*
* We special-case the "empty command line" case (argc==0).
@ -1146,7 +1146,7 @@ target_ulong do_common_semihosting(CPUState *cs)
goto out;
}
if (copy_from_user(output_buffer, ts->info->arg_start,
if (copy_from_user(output_buffer, ts->info->arg_strings,
output_size)) {
errno = EFAULT;
status = set_swi_errno(cs, -1);

View File

@ -1,4 +1,5 @@
#include <assert.h>
#include <execinfo.h>
#include <signal.h>
#include <string.h>
#include <sys/mman.h>
@ -11,22 +12,28 @@
* inline asm is used instead.
*/
#define DEFINE_ASM_FUNCTION(name, body) \
asm(".globl " #name "\n" \
#name ":\n" \
".cfi_startproc\n" \
body "\n" \
"br %r14\n" \
".cfi_endproc");
void illegal_op(void);
void after_illegal_op(void);
asm(".globl\tillegal_op\n"
"illegal_op:\t.byte\t0x00,0x00\n"
"\t.globl\tafter_illegal_op\n"
"after_illegal_op:\tbr\t%r14");
extern const char after_illegal_op;
DEFINE_ASM_FUNCTION(illegal_op,
".byte 0x00,0x00\n"
".globl after_illegal_op\n"
"after_illegal_op:")
void stg(void *dst, unsigned long src);
asm(".globl\tstg\n"
"stg:\tstg\t%r3,0(%r2)\n"
"\tbr\t%r14");
DEFINE_ASM_FUNCTION(stg, "stg %r3,0(%r2)")
void mvc_8(void *dst, void *src);
asm(".globl\tmvc_8\n"
"mvc_8:\tmvc\t0(8,%r2),0(%r3)\n"
"\tbr\t%r14");
DEFINE_ASM_FUNCTION(mvc_8, "mvc 0(8,%r2),0(%r3)")
extern const char return_from_main_1;
static void safe_puts(const char *s)
{
@ -49,8 +56,9 @@ static struct {
static void handle_signal(int sig, siginfo_t *info, void *ucontext)
{
int err, i, n_frames;
void *frames[16];
void *page;
int err;
if (sig != expected.sig) {
safe_puts("[ FAILED ] wrong signal");
@ -86,6 +94,17 @@ static void handle_signal(int sig, siginfo_t *info, void *ucontext)
default:
break;
}
n_frames = backtrace(frames, sizeof(frames) / sizeof(frames[0]));
for (i = 0; i < n_frames; i++) {
if (frames[i] == &return_from_main_1) {
break;
}
}
if (i == n_frames) {
safe_puts("[ FAILED ] backtrace() is broken");
_exit(1);
}
}
static void check_sigsegv(void *func, enum exception exception,
@ -122,7 +141,7 @@ static void check_sigsegv(void *func, enum exception exception,
assert(err == 0);
}
int main(void)
int main_1(void)
{
struct sigaction act;
int err;
@ -138,7 +157,7 @@ int main(void)
safe_puts("[ RUN ] Operation exception");
expected.sig = SIGILL;
expected.addr = illegal_op;
expected.psw_addr = (unsigned long)after_illegal_op;
expected.psw_addr = (unsigned long)&after_illegal_op;
expected.exception = exception_operation;
illegal_op();
safe_puts("[ OK ]");
@ -163,3 +182,25 @@ int main(void)
_exit(0);
}
/*
* Define main() in assembly in order to test that unwinding from signal
* handlers until main() works. This way we can define a specific point that
* the unwinder should reach. This is also better than defining main() in C
* and using inline assembly to call main_1(), since it's not easy to get all
* the clobbers right.
*/
DEFINE_ASM_FUNCTION(main,
"stmg %r14,%r15,112(%r15)\n"
".cfi_offset 14,-48\n"
".cfi_offset 15,-40\n"
"lay %r15,-160(%r15)\n"
".cfi_def_cfa_offset 320\n"
"brasl %r14,main_1\n"
".globl return_from_main_1\n"
"return_from_main_1:\n"
"lmg %r14,%r15,272(%r15)\n"
".cfi_restore 15\n"
".cfi_restore 14\n"
".cfi_def_cfa_offset 160");