common: clean up setjmp.h
Separate setjmp.h into an architecture independent part and an architecture specific part. This simplifies moving from using struct jmp_buf_data directly to using type jmp_buf in our code which is the C compliant way. Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
This commit is contained in:
@@ -11,9 +11,9 @@
|
|||||||
#include <bootm.h>
|
#include <bootm.h>
|
||||||
#include <cpu_func.h>
|
#include <cpu_func.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
|
#include <setjmp.h>
|
||||||
#include <asm/armv7.h>
|
#include <asm/armv7.h>
|
||||||
#include <asm/secure.h>
|
#include <asm/secure.h>
|
||||||
#include <asm/setjmp.h>
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* entry_non_secure() - entry point when switching to non-secure mode
|
* entry_non_secure() - entry point when switching to non-secure mode
|
||||||
|
@@ -11,8 +11,8 @@
|
|||||||
#include <bootm.h>
|
#include <bootm.h>
|
||||||
#include <cpu_func.h>
|
#include <cpu_func.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
|
#include <setjmp.h>
|
||||||
#include <asm/cache.h>
|
#include <asm/cache.h>
|
||||||
#include <asm/setjmp.h>
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* entry_non_secure() - entry point when switching to non-secure mode
|
* entry_non_secure() - entry point when switching to non-secure mode
|
||||||
|
@@ -4,15 +4,11 @@
|
|||||||
* (C) Copyright 2016 Alexander Graf <agraf@suse.de>
|
* (C) Copyright 2016 Alexander Graf <agraf@suse.de>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SETJMP_H_
|
#ifndef _ASM_SETJMP_H_
|
||||||
#define _SETJMP_H_ 1
|
#define _ASM_SETJMP_H_ 1
|
||||||
|
|
||||||
#include <asm-generic/int-ll64.h>
|
#include <asm-generic/int-ll64.h>
|
||||||
|
|
||||||
/*
|
|
||||||
* This really should be opaque, but the EFI implementation wrongly
|
|
||||||
* assumes that a 'struct jmp_buf_data' is defined.
|
|
||||||
*/
|
|
||||||
struct jmp_buf_data {
|
struct jmp_buf_data {
|
||||||
#if defined(__aarch64__)
|
#if defined(__aarch64__)
|
||||||
u64 regs[13];
|
u64 regs[13];
|
||||||
@@ -21,9 +17,4 @@ struct jmp_buf_data {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct jmp_buf_data jmp_buf[1];
|
#endif /* _ASM_SETJMP_H_ */
|
||||||
|
|
||||||
int setjmp(jmp_buf jmp);
|
|
||||||
void longjmp(jmp_buf jmp, int ret);
|
|
||||||
|
|
||||||
#endif /* _SETJMP_H_ */
|
|
||||||
|
@@ -4,11 +4,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <hang.h>
|
#include <hang.h>
|
||||||
|
#include <setjmp.h>
|
||||||
#include <asm/arch-rockchip/bootrom.h>
|
#include <asm/arch-rockchip/bootrom.h>
|
||||||
#include <asm/arch-rockchip/boot_mode.h>
|
#include <asm/arch-rockchip/boot_mode.h>
|
||||||
#include <asm/cache.h>
|
#include <asm/cache.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/setjmp.h>
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -3,13 +3,9 @@
|
|||||||
* (C) Copyright 2018 Alexander Graf <agraf@suse.de>
|
* (C) Copyright 2018 Alexander Graf <agraf@suse.de>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SETJMP_H_
|
#ifndef _ASM_SETJMP_H_
|
||||||
#define _SETJMP_H_ 1
|
#define _ASM_SETJMP_H_ 1
|
||||||
|
|
||||||
/*
|
|
||||||
* This really should be opaque, but the EFI implementation wrongly
|
|
||||||
* assumes that a 'struct jmp_buf_data' is defined.
|
|
||||||
*/
|
|
||||||
struct jmp_buf_data {
|
struct jmp_buf_data {
|
||||||
/* x2, x8, x9, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, sp */
|
/* x2, x8, x9, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, sp */
|
||||||
unsigned long s_regs[12]; /* s0 - s11 */
|
unsigned long s_regs[12]; /* s0 - s11 */
|
||||||
@@ -17,9 +13,4 @@ struct jmp_buf_data {
|
|||||||
unsigned long sp;
|
unsigned long sp;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct jmp_buf_data jmp_buf[1];
|
#endif /* _ASM_SETJMP_H_ */
|
||||||
|
|
||||||
int setjmp(jmp_buf jmp);
|
|
||||||
void longjmp(jmp_buf jmp, int ret);
|
|
||||||
|
|
||||||
#endif /* _SETJMP_H_ */
|
|
||||||
|
@@ -10,10 +10,10 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
#include <os.h>
|
#include <os.h>
|
||||||
|
#include <setjmp.h>
|
||||||
#include <asm/global_data.h>
|
#include <asm/global_data.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/malloc.h>
|
#include <asm/malloc.h>
|
||||||
#include <asm/setjmp.h>
|
|
||||||
#include <asm/state.h>
|
#include <asm/state.h>
|
||||||
#include <dm/ofnode.h>
|
#include <dm/ofnode.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
@@ -4,8 +4,8 @@
|
|||||||
* Written by Simon Glass <sjg@chromium.org>
|
* Written by Simon Glass <sjg@chromium.org>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _SETJMP_H_
|
#ifndef _ASM_SETJMP_H_
|
||||||
#define _SETJMP_H_
|
#define _ASM_SETJMP_H_
|
||||||
|
|
||||||
struct jmp_buf_data {
|
struct jmp_buf_data {
|
||||||
/*
|
/*
|
||||||
@@ -22,14 +22,4 @@ struct jmp_buf_data {
|
|||||||
unsigned long data[128];
|
unsigned long data[128];
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct jmp_buf_data jmp_buf[1];
|
#endif /* _ASM_SETJMP_H_ */
|
||||||
|
|
||||||
/*
|
|
||||||
* We have to directly link with the system versions of
|
|
||||||
* setjmp/longjmp, because setjmp must not return as otherwise
|
|
||||||
* the stack may become invalid.
|
|
||||||
*/
|
|
||||||
int setjmp(jmp_buf jmp);
|
|
||||||
__noreturn void longjmp(jmp_buf jmp, int ret);
|
|
||||||
|
|
||||||
#endif /* _SETJMP_H_ */
|
|
||||||
|
@@ -5,8 +5,8 @@
|
|||||||
* From Linux arch/um/sys-i386/setjmp.S
|
* From Linux arch/um/sys-i386/setjmp.S
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __setjmp_h
|
#ifndef _ASM_SETJMP_H_
|
||||||
#define __setjmp_h
|
#define _ASM_SETJMP_H_ 1
|
||||||
|
|
||||||
#ifdef CONFIG_X86_64
|
#ifdef CONFIG_X86_64
|
||||||
|
|
||||||
@@ -34,9 +34,4 @@ struct jmp_buf_data {
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct jmp_buf_data jmp_buf[1];
|
#endif /* _ASM_SETJMP_H_ */
|
||||||
|
|
||||||
int setjmp(jmp_buf env);
|
|
||||||
void longjmp(jmp_buf env, int val);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
|
||||||
#include <asm/setjmp.h>
|
#include <setjmp.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct resume_data - data for resume after interrupt
|
* struct resume_data - data for resume after interrupt
|
||||||
|
40
include/setjmp.h
Normal file
40
include/setjmp.h
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
|
||||||
|
#ifndef _SETJMP_H_
|
||||||
|
#define _SETJMP_H_ 1
|
||||||
|
|
||||||
|
#ifdef CONFIG_HAVE_SETJMP
|
||||||
|
#include <asm/setjmp.h>
|
||||||
|
#else
|
||||||
|
struct jmp_buf_data {
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* typedef jmp_buf - information needed to restore a calling environment
|
||||||
|
*/
|
||||||
|
typedef struct jmp_buf_data jmp_buf[1];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* setjmp() - prepare for a long jump
|
||||||
|
*
|
||||||
|
* Registers, the stack pointer, and the return address are saved in the
|
||||||
|
* jump bufffer. The function returns zero afterwards. When longjmp() is
|
||||||
|
* executed the function returns a second time with a non-zero value.
|
||||||
|
*
|
||||||
|
* @env: jump buffer used to store register values
|
||||||
|
* Return: 0 after setting up jump buffer, non-zero after longjmp()
|
||||||
|
*/
|
||||||
|
int setjmp(jmp_buf env);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* longjmp() - long jump
|
||||||
|
*
|
||||||
|
* Jump back to the address and the register state saved by setjmp().
|
||||||
|
*
|
||||||
|
* @env: jump buffer
|
||||||
|
* @val: value to be returned by setjmp(), 0 is replaced by 1
|
||||||
|
*/
|
||||||
|
void longjmp(jmp_buf env, int val);
|
||||||
|
|
||||||
|
#endif /* _SETJMP_H_ */
|
@@ -21,7 +21,7 @@
|
|||||||
#include <usb.h>
|
#include <usb.h>
|
||||||
#include <watchdog.h>
|
#include <watchdog.h>
|
||||||
#include <asm/global_data.h>
|
#include <asm/global_data.h>
|
||||||
#include <asm/setjmp.h>
|
#include <setjmp.h>
|
||||||
#include <linux/libfdt_env.h>
|
#include <linux/libfdt_env.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
@@ -5,10 +5,10 @@
|
|||||||
* Copyright (c) 2021, Heinrich Schuchardt <xypron.glpk@gmx.de>
|
* Copyright (c) 2021, Heinrich Schuchardt <xypron.glpk@gmx.de>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <setjmp.h>
|
||||||
#include <test/lib.h>
|
#include <test/lib.h>
|
||||||
#include <test/test.h>
|
#include <test/test.h>
|
||||||
#include <test/ut.h>
|
#include <test/ut.h>
|
||||||
#include <asm/setjmp.h>
|
|
||||||
|
|
||||||
struct test_jmp_buf {
|
struct test_jmp_buf {
|
||||||
jmp_buf env;
|
jmp_buf env;
|
||||||
|
Reference in New Issue
Block a user