Skip to content

Commit

Permalink
linux-user: Correct definition of stack_t
Browse files Browse the repository at this point in the history
Some platforms used the wrong definition of stack_t where the flags and
size fields were swapped or where the flags field had type ulong instead
of int.

Due to the presence of padding space in the structure and the prevalence
of little-endian machines this problem went unnoticed for a long time.

The type definitions have been cross-checked with the ones defined in
the Linux kernel v5.9, plus some older versions for a few architecture
that have been removed and Xilinx's kernel fork for NiosII [1].

The bsd-user headers remain unchanged as I don't know if they are wrong
or not.

[1] https://github.com/Xilinx/linux-xlnx/blob/master/arch/nios2/include/uapi/asm/signal.h

Signed-off-by: Giuseppe Musacchio <thatlemon@gmail.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-Id: <e9d47692-ee92-009f-6007-0abc3f502b97@gmail.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
  • Loading branch information
LemonBoy authored and vivier committed Nov 11, 2020
1 parent c6f28ed commit ce43748
Show file tree
Hide file tree
Showing 15 changed files with 39 additions and 40 deletions.
3 changes: 1 addition & 2 deletions linux-user/alpha/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@

typedef struct target_sigaltstack {
abi_ulong ss_sp;
int32_t ss_flags;
int32_t dummy;
abi_int ss_flags;
abi_ulong ss_size;
} target_stack_t;

Expand Down
6 changes: 3 additions & 3 deletions linux-user/arm/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
/* this struct defines a stack used during syscall handling */

typedef struct target_sigaltstack {
abi_ulong ss_sp;
abi_long ss_flags;
abi_ulong ss_size;
abi_ulong ss_sp;
abi_int ss_flags;
abi_ulong ss_size;
} target_stack_t;


Expand Down
6 changes: 3 additions & 3 deletions linux-user/cris/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
/* 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;
abi_ulong ss_sp;
abi_int ss_flags;
abi_ulong ss_size;
} target_stack_t;


Expand Down
2 changes: 1 addition & 1 deletion linux-user/hppa/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@

typedef struct target_sigaltstack {
abi_ulong ss_sp;
int32_t ss_flags;
abi_int ss_flags;
abi_ulong ss_size;
} target_stack_t;

Expand Down
6 changes: 3 additions & 3 deletions linux-user/i386/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
/* this struct defines a stack used during syscall handling */

typedef struct target_sigaltstack {
abi_ulong ss_sp;
abi_long ss_flags;
abi_ulong ss_size;
abi_ulong ss_sp;
abi_int ss_flags;
abi_ulong ss_size;
} target_stack_t;


Expand Down
6 changes: 3 additions & 3 deletions linux-user/m68k/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
/* this struct defines a stack used during syscall handling */

typedef struct target_sigaltstack {
abi_ulong ss_sp;
abi_long ss_flags;
abi_ulong ss_size;
abi_ulong ss_sp;
abi_int ss_flags;
abi_ulong ss_size;
} target_stack_t;


Expand Down
6 changes: 3 additions & 3 deletions linux-user/microblaze/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
/* 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;
abi_ulong ss_sp;
abi_int ss_flags;
abi_ulong ss_size;
} target_stack_t;


Expand Down
6 changes: 3 additions & 3 deletions linux-user/mips/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@
/* this struct defines a stack used during syscall handling */

typedef struct target_sigaltstack {
abi_long ss_sp;
abi_ulong ss_size;
abi_long ss_flags;
abi_ulong ss_sp;
abi_ulong ss_size;
abi_int ss_flags;
} target_stack_t;


Expand Down
7 changes: 3 additions & 4 deletions linux-user/mips64/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,11 @@
/* this struct defines a stack used during syscall handling */

typedef struct target_sigaltstack {
abi_long ss_sp;
abi_ulong ss_size;
abi_int ss_flags;
abi_ulong ss_sp;
abi_ulong ss_size;
abi_int ss_flags;
} target_stack_t;


/*
* sigaltstack controls
*/
Expand Down
5 changes: 3 additions & 2 deletions linux-user/nios2/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
/* this struct defines a stack used during syscall handling */

typedef struct target_sigaltstack {
abi_long ss_sp;
abi_ulong ss_sp;
abi_int ss_flags;
abi_ulong ss_size;
abi_long ss_flags;
} target_stack_t;


/* sigaltstack controls */
#define TARGET_SS_ONSTACK 1
#define TARGET_SS_DISABLE 2
Expand Down
6 changes: 3 additions & 3 deletions linux-user/ppc/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
/* this struct defines a stack used during syscall handling */

typedef struct target_sigaltstack {
abi_ulong ss_sp;
int ss_flags;
abi_ulong ss_size;
abi_ulong ss_sp;
abi_int ss_flags;
abi_ulong ss_size;
} target_stack_t;


Expand Down
2 changes: 1 addition & 1 deletion linux-user/s390x/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

typedef struct target_sigaltstack {
abi_ulong ss_sp;
int ss_flags;
abi_int ss_flags;
abi_ulong ss_size;
} target_stack_t;

Expand Down
6 changes: 3 additions & 3 deletions linux-user/sh4/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
/* this struct defines a stack used during syscall handling */

typedef struct target_sigaltstack {
abi_ulong ss_sp;
abi_long ss_flags;
abi_ulong ss_size;
abi_ulong ss_sp;
abi_int ss_flags;
abi_ulong ss_size;
} target_stack_t;


Expand Down
6 changes: 3 additions & 3 deletions linux-user/sparc/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@
/* this struct defines a stack used during syscall handling */

typedef struct target_sigaltstack {
abi_ulong ss_sp;
abi_long ss_flags;
abi_ulong ss_size;
abi_ulong ss_sp;
abi_int ss_flags;
abi_ulong ss_size;
} target_stack_t;


Expand Down
6 changes: 3 additions & 3 deletions linux-user/x86_64/target_signal.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
/* this struct defines a stack used during syscall handling */

typedef struct target_sigaltstack {
abi_ulong ss_sp;
abi_long ss_flags;
abi_ulong ss_size;
abi_ulong ss_sp;
abi_int ss_flags;
abi_ulong ss_size;
} target_stack_t;


Expand Down

0 comments on commit ce43748

Please sign in to comment.