On 27 March 2015 at 10:49, Chen Gang <xili_gchen_5...@hotmail.com> wrote: > They are for target features within qemu which independent from outside. > > Signed-off-by: Chen Gang <gang.chen.5...@gmail.com> > --- > linux-user/tilegx/target_cpu.h | 35 +++++++++++++++++++++++++++ > linux-user/tilegx/target_signal.h | 28 ++++++++++++++++++++++ > linux-user/tilegx/target_structs.h | 48 > ++++++++++++++++++++++++++++++++++++++ > 3 files changed, 111 insertions(+) > create mode 100644 linux-user/tilegx/target_cpu.h > create mode 100644 linux-user/tilegx/target_signal.h > create mode 100644 linux-user/tilegx/target_structs.h > > diff --git a/linux-user/tilegx/target_cpu.h b/linux-user/tilegx/target_cpu.h > new file mode 100644 > index 0000000..c96e81d > --- /dev/null > +++ b/linux-user/tilegx/target_cpu.h > @@ -0,0 +1,35 @@ > +/* > + * TILE-Gx specific CPU ABI and functions for linux-user > + * > + * Copyright (c) 2015 Chen Gang > + * > + * 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 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 TARGET_CPU_H > +#define TARGET_CPU_H > + > +static inline void cpu_clone_regs(CPUTLGState *env, target_ulong newsp) > +{ > + if (newsp) { > + env->regs[TILEGX_R_SP] = newsp; > + } > + env->regs[TILEGX_R_RE] = 0;
This is slightly confusing, because the kernel code we're matching here doesn't call this register RE, it just uses 0: childregs->regs[0] = 0; /* return value is zero */ > +} > + > +static inline void cpu_set_tls(CPUTLGState *env, target_ulong newtls) > +{ > + env->regs[TILEGX_R_TP] = newtls; > +} > + > +#endif > diff --git a/linux-user/tilegx/target_signal.h > b/linux-user/tilegx/target_signal.h > new file mode 100644 > index 0000000..fbab216 > --- /dev/null > +++ b/linux-user/tilegx/target_signal.h > @@ -0,0 +1,28 @@ > +#ifndef TARGET_SIGNAL_H > +#define TARGET_SIGNAL_H > + > +#include "cpu.h" > + > +/* this struct defines a stack used during syscall handling */ > + > +typedef struct target_sigaltstack { > + abi_ulong ss_sp; > + abi_ulong ss_size; > + abi_long ss_flags; > +} target_stack_t; Where does this come from? It doesn't match the kernel's generic-headers struct layout. > + > +/* > + * sigaltstack controls > + */ > +#define TARGET_SS_ONSTACK 1 > +#define TARGET_SS_DISABLE 2 > + > +#define TARGET_MINSIGSTKSZ 2048 > +#define TARGET_SIGSTKSZ 8192 > + > +static inline abi_ulong get_sp_from_cpustate(CPUTLGState *state) > +{ > + return state->regs[TILEGX_R_SP]; > +} > + > +#endif /* TARGET_SIGNAL_H */ > diff --git a/linux-user/tilegx/target_structs.h > b/linux-user/tilegx/target_structs.h > new file mode 100644 > index 0000000..13a1505 > --- /dev/null > +++ b/linux-user/tilegx/target_structs.h > @@ -0,0 +1,48 @@ > +/* > + * TILE-Gx specific structures for linux-user > + * > + * Copyright (c) 2015 Chen Gang > + * > + * 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 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 > + * Lesser 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 TARGET_STRUCTS_H > +#define TARGET_STRUCTS_H > + > +struct target_ipc_perm { > + abi_int __key; /* Key. */ > + abi_uint uid; /* Owner's user ID. */ > + abi_uint gid; /* Owner's group ID. */ > + abi_uint cuid; /* Creator's user ID. */ > + abi_uint cgid; /* Creator's group ID. */ > + abi_uint mode; /* Read/write permission. */ > + abi_ushort __seq; /* Sequence number. */ > + abi_ushort __pad2; > + abi_ulong __unused1; > + abi_ulong __unused2; > +}; Again, doesn't seem to match kernel? > + > +struct target_shmid_ds { > + struct target_ipc_perm shm_perm; /* operation permission struct */ > + abi_long shm_segsz; /* size of segment in bytes */ > + abi_ulong shm_atime; /* time of last shmat() */ > + abi_ulong shm_dtime; /* time of last shmdt() */ > + abi_ulong shm_ctime; /* time of last change by shmctl() */ > + abi_int shm_cpid; /* pid of creator */ > + abi_int shm_lpid; /* pid of last shmop */ > + abi_ulong shm_nattch; /* number of current attaches */ > + abi_ulong __unused4; > + abi_ulong __unused5; > +}; > + > +#endif thanks -- PMM