4ce6243dc6
Linux manages to have three separate orderings of the arguments to the clone() syscall on different architectures. In the kernel these are selected via CONFIG_CLONE_BACKWARDS and CONFIG_CLONE_BACKWARDS2. Clean up our implementation of this to use similar #define names rather than a TARGET_* ifdef ladder. This includes behaviour changes fixing bugs on cris, x86-64, m68k, openrisc and unicore32. cris had explicit but wrong handling; the others were just incorrectly using QEMU's default, which happened to be the equivalent of CONFIG_CLONE_BACKWARDS. (unicore32 appears to be broken in the mainline kernel in that it tries to use arg3 for both parent_tidptr and newtls simultaneously -- we don't attempt to emulate this bug...) Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
44 lines
1.1 KiB
C
44 lines
1.1 KiB
C
#ifndef CRIS_SYSCALL_H
|
|
#define CRIS_SYSCALL_H 1
|
|
|
|
|
|
#define UNAME_MACHINE "cris"
|
|
|
|
/* pt_regs not only specifices the format in the user-struct during
|
|
* ptrace but is also the frame format used in the kernel prologue/epilogues
|
|
* themselves
|
|
*/
|
|
|
|
struct target_pt_regs {
|
|
unsigned long orig_r10;
|
|
/* pushed by movem r13, [sp] in SAVE_ALL. */
|
|
unsigned long r0;
|
|
unsigned long r1;
|
|
unsigned long r2;
|
|
unsigned long r3;
|
|
unsigned long r4;
|
|
unsigned long r5;
|
|
unsigned long r6;
|
|
unsigned long r7;
|
|
unsigned long r8;
|
|
unsigned long r9;
|
|
unsigned long r10;
|
|
unsigned long r11;
|
|
unsigned long r12;
|
|
unsigned long r13;
|
|
unsigned long acr;
|
|
unsigned long srs;
|
|
unsigned long mof;
|
|
unsigned long spc;
|
|
unsigned long ccs;
|
|
unsigned long srp;
|
|
unsigned long erp; /* This is actually the debugged process' PC */
|
|
/* For debugging purposes; saved only when needed. */
|
|
unsigned long exs;
|
|
unsigned long eda;
|
|
};
|
|
|
|
#define TARGET_CLONE_BACKWARDS2
|
|
|
|
#endif
|