Enable architectures, such as s390, which store SFrame CFA offset values encoded, to e.g. make (better) use of unsigned 8-bit SFrame offsets.
Signed-off-by: Jens Remus <jre...@linux.ibm.com> --- include/asm-generic/unwind_user_sframe.h | 11 +++++++++++ kernel/unwind/sframe.c | 1 + 2 files changed, 12 insertions(+) diff --git a/include/asm-generic/unwind_user_sframe.h b/include/asm-generic/unwind_user_sframe.h index 8cef3e0857b6..cea0410a259a 100644 --- a/include/asm-generic/unwind_user_sframe.h +++ b/include/asm-generic/unwind_user_sframe.h @@ -5,6 +5,16 @@ #include <linux/unwind_user_types.h> #include <linux/types.h> +/** + * generic_sframe_cfa_offset_decode - Decode SFrame CFA offset. + * + * Returns the decoded SFrame CFA offset value. + */ +static inline s32 generic_sframe_cfa_offset_decode(s32 offset) +{ + return offset; +} + /** * generic_sframe_set_frame_reginfo - Populate info to unwind FP/RA register * from SFrame offset. @@ -48,6 +58,7 @@ static inline s32 generic_sframe_sp_val_off(void) return 0; } +#define sframe_cfa_offset_decode generic_sframe_cfa_offset_decode #define sframe_set_frame_reginfo generic_sframe_set_frame_reginfo #define sframe_sp_val_off generic_sframe_sp_val_off diff --git a/kernel/unwind/sframe.c b/kernel/unwind/sframe.c index 43ef3a8c4c26..e8658401a286 100644 --- a/kernel/unwind/sframe.c +++ b/kernel/unwind/sframe.c @@ -220,6 +220,7 @@ static __always_inline int __read_fre(struct sframe_section *sec, UNSAFE_GET_USER_INC(cfa_off, cur, offset_size, Efault); offset_count--; + cfa_off = sframe_cfa_offset_decode(cfa_off); ra_off = sec->ra_off; if (!ra_off && offset_count) { -- 2.48.1