* [PATCH] efi_loader: Clean up usage of structure jmp_buf_data
@ 2025-02-15 15:54 Yao Zi
2025-02-15 16:58 ` Heinrich Schuchardt
0 siblings, 1 reply; 6+ messages in thread
From: Yao Zi @ 2025-02-15 15:54 UTC (permalink / raw)
To: Heinrich Schuchardt, Ilias Apalodimas, Tom Rini; +Cc: u-boot, Yao Zi
Structure jmp_buf_data provides the underlying format of jmp_buf, which
we actually don't care about. Clean up existing code to use the standard
jmp_buf type. This introduces no functional change.
Signed-off-by: Yao Zi <ziyao@disroot.org>
---
include/efi_loader.h | 4 ++--
lib/efi_loader/efi_boottime.c | 8 ++++----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/include/efi_loader.h b/include/efi_loader.h
index dcae6a731a0..4afe8b9c859 100644
--- a/include/efi_loader.h
+++ b/include/efi_loader.h
@@ -15,13 +15,13 @@
#include <efi_api.h>
#include <image.h>
#include <pe.h>
+#include <asm/setjmp.h>
#include <linux/list.h>
#include <linux/sizes.h>
#include <linux/oid_registry.h>
struct blk_desc;
struct bootflow;
-struct jmp_buf_data;
#if CONFIG_IS_ENABLED(EFI_LOADER)
@@ -485,7 +485,7 @@ struct efi_loaded_image_obj {
efi_status_t *exit_status;
efi_uintn_t *exit_data_size;
u16 **exit_data;
- struct jmp_buf_data *exit_jmp;
+ jmp_buf *exit_jmp;
EFIAPI efi_status_t (*entry)(efi_handle_t image_handle,
struct efi_system_table *st);
u16 image_type;
diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
index 5164cb15986..80c56b1ee46 100644
--- a/lib/efi_loader/efi_boottime.c
+++ b/lib/efi_loader/efi_boottime.c
@@ -3199,7 +3199,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
void *info;
efi_handle_t parent_image = current_image;
efi_status_t exit_status;
- struct jmp_buf_data exit_jmp;
+ jmp_buf exit_jmp;
EFI_ENTRY("%p, %p, %p", image_handle, exit_data_size, exit_data);
@@ -3238,7 +3238,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
}
/* call the image! */
- if (setjmp(&exit_jmp)) {
+ if (setjmp(exit_jmp)) {
/*
* We called the entry point of the child image with EFI_CALL
* in the lines below. The child image called the Exit() boot
@@ -3444,7 +3444,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
struct efi_loaded_image *loaded_image_protocol;
struct efi_loaded_image_obj *image_obj =
(struct efi_loaded_image_obj *)image_handle;
- struct jmp_buf_data *exit_jmp;
+ jmp_buf *exit_jmp;
EFI_ENTRY("%p, %ld, %zu, %p", image_handle, exit_status,
exit_data_size, exit_data);
@@ -3511,7 +3511,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
*/
efi_restore_gd();
- longjmp(exit_jmp, 1);
+ longjmp(*exit_jmp, 1);
panic("EFI application exited");
out:
--
2.48.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH] efi_loader: Clean up usage of structure jmp_buf_data
2025-02-15 15:54 [PATCH] efi_loader: Clean up usage of structure jmp_buf_data Yao Zi
@ 2025-02-15 16:58 ` Heinrich Schuchardt
2025-02-16 14:26 ` Yao Zi
0 siblings, 1 reply; 6+ messages in thread
From: Heinrich Schuchardt @ 2025-02-15 16:58 UTC (permalink / raw)
To: Yao Zi; +Cc: u-boot, Ilias Apalodimas, Tom Rini
On 15.02.25 16:54, Yao Zi wrote:
> Structure jmp_buf_data provides the underlying format of jmp_buf, which
> we actually don't care about. Clean up existing code to use the standard
> jmp_buf type. This introduces no functional change.
>
> Signed-off-by: Yao Zi <ziyao@disroot.org>
> ---
> include/efi_loader.h | 4 ++--
> lib/efi_loader/efi_boottime.c | 8 ++++----
> 2 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/include/efi_loader.h b/include/efi_loader.h
> index dcae6a731a0..4afe8b9c859 100644
> --- a/include/efi_loader.h
> +++ b/include/efi_loader.h
> @@ -15,13 +15,13 @@
> #include <efi_api.h>
> #include <image.h>
> #include <pe.h>
> +#include <asm/setjmp.h>
Thanks for this suggestion.
lib/efi_loader/efi_boottime.c already has this include.
We don't need to include it globally.
The rest looks fine.
Best regards
Heinrich
> #include <linux/list.h>
> #include <linux/sizes.h>
> #include <linux/oid_registry.h>
>
> struct blk_desc;
> struct bootflow;
> -struct jmp_buf_data;
>
> #if CONFIG_IS_ENABLED(EFI_LOADER)
>
> @@ -485,7 +485,7 @@ struct efi_loaded_image_obj {
> efi_status_t *exit_status;
> efi_uintn_t *exit_data_size;
> u16 **exit_data;
> - struct jmp_buf_data *exit_jmp;
> + jmp_buf *exit_jmp;
> EFIAPI efi_status_t (*entry)(efi_handle_t image_handle,
> struct efi_system_table *st);
> u16 image_type;
> diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
> index 5164cb15986..80c56b1ee46 100644
> --- a/lib/efi_loader/efi_boottime.c
> +++ b/lib/efi_loader/efi_boottime.c
> @@ -3199,7 +3199,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
> void *info;
> efi_handle_t parent_image = current_image;
> efi_status_t exit_status;
> - struct jmp_buf_data exit_jmp;
> + jmp_buf exit_jmp;
>
> EFI_ENTRY("%p, %p, %p", image_handle, exit_data_size, exit_data);
>
> @@ -3238,7 +3238,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
> }
>
> /* call the image! */
> - if (setjmp(&exit_jmp)) {
> + if (setjmp(exit_jmp)) {
> /*
> * We called the entry point of the child image with EFI_CALL
> * in the lines below. The child image called the Exit() boot
> @@ -3444,7 +3444,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
> struct efi_loaded_image *loaded_image_protocol;
> struct efi_loaded_image_obj *image_obj =
> (struct efi_loaded_image_obj *)image_handle;
> - struct jmp_buf_data *exit_jmp;
> + jmp_buf *exit_jmp;
>
> EFI_ENTRY("%p, %ld, %zu, %p", image_handle, exit_status,
> exit_data_size, exit_data);
> @@ -3511,7 +3511,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
> */
> efi_restore_gd();
>
> - longjmp(exit_jmp, 1);
> + longjmp(*exit_jmp, 1);
>
> panic("EFI application exited");
> out:
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH] efi_loader: Clean up usage of structure jmp_buf_data
2025-02-15 16:58 ` Heinrich Schuchardt
@ 2025-02-16 14:26 ` Yao Zi
2025-02-16 16:50 ` Heinrich Schuchardt
0 siblings, 1 reply; 6+ messages in thread
From: Yao Zi @ 2025-02-16 14:26 UTC (permalink / raw)
To: Heinrich Schuchardt; +Cc: u-boot, Ilias Apalodimas, Tom Rini
On Sat, Feb 15, 2025 at 05:58:18PM +0100, Heinrich Schuchardt wrote:
> On 15.02.25 16:54, Yao Zi wrote:
> > Structure jmp_buf_data provides the underlying format of jmp_buf, which
> > we actually don't care about. Clean up existing code to use the standard
> > jmp_buf type. This introduces no functional change.
> >
> > Signed-off-by: Yao Zi <ziyao@disroot.org>
> > ---
> > include/efi_loader.h | 4 ++--
> > lib/efi_loader/efi_boottime.c | 8 ++++----
> > 2 files changed, 6 insertions(+), 6 deletions(-)
> >
> > diff --git a/include/efi_loader.h b/include/efi_loader.h
> > index dcae6a731a0..4afe8b9c859 100644
> > --- a/include/efi_loader.h
> > +++ b/include/efi_loader.h
> > @@ -15,13 +15,13 @@
> > #include <efi_api.h>
> > #include <image.h>
> > #include <pe.h>
> > +#include <asm/setjmp.h>
>
> Thanks for this suggestion.
>
> lib/efi_loader/efi_boottime.c already has this include.
> We don't need to include it globally.
We need to include it, or in files that doesn't include asm/setjmp.h
directly, type jmp_buf is unknown, failing the compilation.
> The rest looks fine.
>
> Best regards
>
> Heinrich
Thanks,
Yao Zi
>
> > #include <linux/list.h>
> > #include <linux/sizes.h>
> > #include <linux/oid_registry.h>
> >
> > struct blk_desc;
> > struct bootflow;
> > -struct jmp_buf_data;
> >
> > #if CONFIG_IS_ENABLED(EFI_LOADER)
> >
> > @@ -485,7 +485,7 @@ struct efi_loaded_image_obj {
> > efi_status_t *exit_status;
> > efi_uintn_t *exit_data_size;
> > u16 **exit_data;
> > - struct jmp_buf_data *exit_jmp;
> > + jmp_buf *exit_jmp;
> > EFIAPI efi_status_t (*entry)(efi_handle_t image_handle,
> > struct efi_system_table *st);
> > u16 image_type;
> > diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
> > index 5164cb15986..80c56b1ee46 100644
> > --- a/lib/efi_loader/efi_boottime.c
> > +++ b/lib/efi_loader/efi_boottime.c
> > @@ -3199,7 +3199,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
> > void *info;
> > efi_handle_t parent_image = current_image;
> > efi_status_t exit_status;
> > - struct jmp_buf_data exit_jmp;
> > + jmp_buf exit_jmp;
> >
> > EFI_ENTRY("%p, %p, %p", image_handle, exit_data_size, exit_data);
> >
> > @@ -3238,7 +3238,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
> > }
> >
> > /* call the image! */
> > - if (setjmp(&exit_jmp)) {
> > + if (setjmp(exit_jmp)) {
> > /*
> > * We called the entry point of the child image with EFI_CALL
> > * in the lines below. The child image called the Exit() boot
> > @@ -3444,7 +3444,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
> > struct efi_loaded_image *loaded_image_protocol;
> > struct efi_loaded_image_obj *image_obj =
> > (struct efi_loaded_image_obj *)image_handle;
> > - struct jmp_buf_data *exit_jmp;
> > + jmp_buf *exit_jmp;
> >
> > EFI_ENTRY("%p, %ld, %zu, %p", image_handle, exit_status,
> > exit_data_size, exit_data);
> > @@ -3511,7 +3511,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
> > */
> > efi_restore_gd();
> >
> > - longjmp(exit_jmp, 1);
> > + longjmp(*exit_jmp, 1);
> >
> > panic("EFI application exited");
> > out:
>
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH] efi_loader: Clean up usage of structure jmp_buf_data
2025-02-16 14:26 ` Yao Zi
@ 2025-02-16 16:50 ` Heinrich Schuchardt
2025-02-16 17:36 ` Yao Zi
0 siblings, 1 reply; 6+ messages in thread
From: Heinrich Schuchardt @ 2025-02-16 16:50 UTC (permalink / raw)
To: Yao Zi; +Cc: u-boot, Ilias Apalodimas, Tom Rini
Am 16. Februar 2025 15:26:31 MEZ schrieb Yao Zi <ziyao@disroot.org>:
>On Sat, Feb 15, 2025 at 05:58:18PM +0100, Heinrich Schuchardt wrote:
>> On 15.02.25 16:54, Yao Zi wrote:
>> > Structure jmp_buf_data provides the underlying format of jmp_buf, which
>> > we actually don't care about. Clean up existing code to use the standard
>> > jmp_buf type. This introduces no functional change.
>> >
>> > Signed-off-by: Yao Zi <ziyao@disroot.org>
>> > ---
>> > include/efi_loader.h | 4 ++--
>> > lib/efi_loader/efi_boottime.c | 8 ++++----
>> > 2 files changed, 6 insertions(+), 6 deletions(-)
>> >
>> > diff --git a/include/efi_loader.h b/include/efi_loader.h
>> > index dcae6a731a0..4afe8b9c859 100644
>> > --- a/include/efi_loader.h
>> > +++ b/include/efi_loader.h
>> > @@ -15,13 +15,13 @@
>> > #include <efi_api.h>
>> > #include <image.h>
>> > #include <pe.h>
>> > +#include <asm/setjmp.h>
>>
>> Thanks for this suggestion.
>>
>> lib/efi_loader/efi_boottime.c already has this include.
>> We don't need to include it globally.
>
>We need to include it, or in files that doesn't include asm/setjmp.h
>directly, type jmp_buf is unknown, failing the compilation.
There is no such file.
>
>> The rest looks fine.
>>
>> Best regards
>>
>> Heinrich
>
>Thanks,
>Yao Zi
>
>>
>> > #include <linux/list.h>
>> > #include <linux/sizes.h>
>> > #include <linux/oid_registry.h>
>> >
>> > struct blk_desc;
>> > struct bootflow;
>> > -struct jmp_buf_data;
>> >
>> > #if CONFIG_IS_ENABLED(EFI_LOADER)
>> >
>> > @@ -485,7 +485,7 @@ struct efi_loaded_image_obj {
>> > efi_status_t *exit_status;
>> > efi_uintn_t *exit_data_size;
>> > u16 **exit_data;
>> > - struct jmp_buf_data *exit_jmp;
>> > + jmp_buf *exit_jmp;
>> > EFIAPI efi_status_t (*entry)(efi_handle_t image_handle,
>> > struct efi_system_table *st);
>> > u16 image_type;
>> > diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
>> > index 5164cb15986..80c56b1ee46 100644
>> > --- a/lib/efi_loader/efi_boottime.c
>> > +++ b/lib/efi_loader/efi_boottime.c
>> > @@ -3199,7 +3199,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
>> > void *info;
>> > efi_handle_t parent_image = current_image;
>> > efi_status_t exit_status;
>> > - struct jmp_buf_data exit_jmp;
>> > + jmp_buf exit_jmp;
>> >
>> > EFI_ENTRY("%p, %p, %p", image_handle, exit_data_size, exit_data);
>> >
>> > @@ -3238,7 +3238,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
>> > }
>> >
>> > /* call the image! */
>> > - if (setjmp(&exit_jmp)) {
>> > + if (setjmp(exit_jmp)) {
>> > /*
>> > * We called the entry point of the child image with EFI_CALL
>> > * in the lines below. The child image called the Exit() boot
>> > @@ -3444,7 +3444,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
>> > struct efi_loaded_image *loaded_image_protocol;
>> > struct efi_loaded_image_obj *image_obj =
>> > (struct efi_loaded_image_obj *)image_handle;
>> > - struct jmp_buf_data *exit_jmp;
>> > + jmp_buf *exit_jmp;
>> >
>> > EFI_ENTRY("%p, %ld, %zu, %p", image_handle, exit_status,
>> > exit_data_size, exit_data);
>> > @@ -3511,7 +3511,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
>> > */
>> > efi_restore_gd();
>> >
>> > - longjmp(exit_jmp, 1);
>> > + longjmp(*exit_jmp, 1);
>> >
>> > panic("EFI application exited");
>> > out:
>>
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH] efi_loader: Clean up usage of structure jmp_buf_data
2025-02-16 16:50 ` Heinrich Schuchardt
@ 2025-02-16 17:36 ` Yao Zi
2025-02-28 15:50 ` Heinrich Schuchardt
0 siblings, 1 reply; 6+ messages in thread
From: Yao Zi @ 2025-02-16 17:36 UTC (permalink / raw)
To: Heinrich Schuchardt; +Cc: u-boot, Ilias Apalodimas, Tom Rini
On Sun, Feb 16, 2025 at 05:50:53PM +0100, Heinrich Schuchardt wrote:
> Am 16. Februar 2025 15:26:31 MEZ schrieb Yao Zi <ziyao@disroot.org>:
> >On Sat, Feb 15, 2025 at 05:58:18PM +0100, Heinrich Schuchardt wrote:
> >> On 15.02.25 16:54, Yao Zi wrote:
> >> > Structure jmp_buf_data provides the underlying format of jmp_buf, which
> >> > we actually don't care about. Clean up existing code to use the standard
> >> > jmp_buf type. This introduces no functional change.
> >> >
> >> > Signed-off-by: Yao Zi <ziyao@disroot.org>
> >> > ---
> >> > include/efi_loader.h | 4 ++--
> >> > lib/efi_loader/efi_boottime.c | 8 ++++----
> >> > 2 files changed, 6 insertions(+), 6 deletions(-)
> >> >
> >> > diff --git a/include/efi_loader.h b/include/efi_loader.h
> >> > index dcae6a731a0..4afe8b9c859 100644
> >> > --- a/include/efi_loader.h
> >> > +++ b/include/efi_loader.h
> >> > @@ -15,13 +15,13 @@
> >> > #include <efi_api.h>
> >> > #include <image.h>
> >> > #include <pe.h>
> >> > +#include <asm/setjmp.h>
> >>
> >> Thanks for this suggestion.
> >>
> >> lib/efi_loader/efi_boottime.c already has this include.
> >> We don't need to include it globally.
> >
> >We need to include it, or in files that doesn't include asm/setjmp.h
> >directly, type jmp_buf is unknown, failing the compilation.
>
After removing the include, I get bunches of compilation errors like
In file included from lib/efi_loader/efi_file.c:11:
include/efi_loader.h:487:9: error: unknown type name 'jmp_buf'
487 | jmp_buf *exit_jmp;
| ^~~~~~~
In file included from lib/efi_loader/efi_load_options.c:13:
include/efi_loader.h:487:9: error: unknown type name 'jmp_buf'
487 | jmp_buf *exit_jmp;
| ^~~~~~~
> There is no such file.
So I don't think it's true. By "files that doesn't include asm/setjmp.h
directly", I mean those which include efi_loader.h but don't include
asm/setjmp.h.
> >
> >> The rest looks fine.
> >>
> >> Best regards
> >>
> >> Heinrich
> >
> >Thanks,
> >Yao Zi
> >
> >>
> >> > #include <linux/list.h>
> >> > #include <linux/sizes.h>
> >> > #include <linux/oid_registry.h>
> >> >
> >> > struct blk_desc;
> >> > struct bootflow;
> >> > -struct jmp_buf_data;
> >> >
> >> > #if CONFIG_IS_ENABLED(EFI_LOADER)
> >> >
> >> > @@ -485,7 +485,7 @@ struct efi_loaded_image_obj {
> >> > efi_status_t *exit_status;
> >> > efi_uintn_t *exit_data_size;
> >> > u16 **exit_data;
> >> > - struct jmp_buf_data *exit_jmp;
> >> > + jmp_buf *exit_jmp;
> >> > EFIAPI efi_status_t (*entry)(efi_handle_t image_handle,
> >> > struct efi_system_table *st);
> >> > u16 image_type;
> >> > diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
> >> > index 5164cb15986..80c56b1ee46 100644
> >> > --- a/lib/efi_loader/efi_boottime.c
> >> > +++ b/lib/efi_loader/efi_boottime.c
> >> > @@ -3199,7 +3199,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
> >> > void *info;
> >> > efi_handle_t parent_image = current_image;
> >> > efi_status_t exit_status;
> >> > - struct jmp_buf_data exit_jmp;
> >> > + jmp_buf exit_jmp;
> >> >
> >> > EFI_ENTRY("%p, %p, %p", image_handle, exit_data_size, exit_data);
> >> >
> >> > @@ -3238,7 +3238,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
> >> > }
> >> >
> >> > /* call the image! */
> >> > - if (setjmp(&exit_jmp)) {
> >> > + if (setjmp(exit_jmp)) {
> >> > /*
> >> > * We called the entry point of the child image with EFI_CALL
> >> > * in the lines below. The child image called the Exit() boot
> >> > @@ -3444,7 +3444,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
> >> > struct efi_loaded_image *loaded_image_protocol;
> >> > struct efi_loaded_image_obj *image_obj =
> >> > (struct efi_loaded_image_obj *)image_handle;
> >> > - struct jmp_buf_data *exit_jmp;
> >> > + jmp_buf *exit_jmp;
> >> >
> >> > EFI_ENTRY("%p, %ld, %zu, %p", image_handle, exit_status,
> >> > exit_data_size, exit_data);
> >> > @@ -3511,7 +3511,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
> >> > */
> >> > efi_restore_gd();
> >> >
> >> > - longjmp(exit_jmp, 1);
> >> > + longjmp(*exit_jmp, 1);
> >> >
> >> > panic("EFI application exited");
> >> > out:
> >>
>
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH] efi_loader: Clean up usage of structure jmp_buf_data
2025-02-16 17:36 ` Yao Zi
@ 2025-02-28 15:50 ` Heinrich Schuchardt
0 siblings, 0 replies; 6+ messages in thread
From: Heinrich Schuchardt @ 2025-02-28 15:50 UTC (permalink / raw)
To: Yao Zi; +Cc: u-boot, Ilias Apalodimas, Tom Rini
On 16.02.25 18:36, Yao Zi wrote:
> On Sun, Feb 16, 2025 at 05:50:53PM +0100, Heinrich Schuchardt wrote:
>> Am 16. Februar 2025 15:26:31 MEZ schrieb Yao Zi <ziyao@disroot.org>:
>>> On Sat, Feb 15, 2025 at 05:58:18PM +0100, Heinrich Schuchardt wrote:
>>>> On 15.02.25 16:54, Yao Zi wrote:
>>>>> Structure jmp_buf_data provides the underlying format of jmp_buf, which
>>>>> we actually don't care about. Clean up existing code to use the standard
>>>>> jmp_buf type. This introduces no functional change.
>>>>>
>>>>> Signed-off-by: Yao Zi <ziyao@disroot.org>
>>>>> ---
>>>>> include/efi_loader.h | 4 ++--
>>>>> lib/efi_loader/efi_boottime.c | 8 ++++----
>>>>> 2 files changed, 6 insertions(+), 6 deletions(-)
>>>>>
>>>>> diff --git a/include/efi_loader.h b/include/efi_loader.h
>>>>> index dcae6a731a0..4afe8b9c859 100644
>>>>> --- a/include/efi_loader.h
>>>>> +++ b/include/efi_loader.h
>>>>> @@ -15,13 +15,13 @@
>>>>> #include <efi_api.h>
>>>>> #include <image.h>
>>>>> #include <pe.h>
>>>>> +#include <asm/setjmp.h>
>>>>
>>>> Thanks for this suggestion.
>>>>
>>>> lib/efi_loader/efi_boottime.c already has this include.
>>>> We don't need to include it globally.
>>>
>>> We need to include it, or in files that doesn't include asm/setjmp.h
>>> directly, type jmp_buf is unknown, failing the compilation.
>>
>
> After removing the include, I get bunches of compilation errors like
>
> In file included from lib/efi_loader/efi_file.c:11:
> include/efi_loader.h:487:9: error: unknown type name 'jmp_buf'
> 487 | jmp_buf *exit_jmp;
> | ^~~~~~~
> In file included from lib/efi_loader/efi_load_options.c:13:
> include/efi_loader.h:487:9: error: unknown type name 'jmp_buf'
> 487 | jmp_buf *exit_jmp;
> | ^~~~~~~
>
>> There is no such file.
>
> So I don't think it's true. By "files that doesn't include asm/setjmp.h
> directly", I mean those which include efi_loader.h but don't include
> asm/setjmp.h.
Building with your patch fails on architectures that don't implement
setjmp because asm/setjmp.h does not exist on these.
Best regards
Heinrich
>
>>>
>>>> The rest looks fine.
>>>>
>>>> Best regards
>>>>
>>>> Heinrich
>>>
>>> Thanks,
>>> Yao Zi
>>>
>>>>
>>>>> #include <linux/list.h>
>>>>> #include <linux/sizes.h>
>>>>> #include <linux/oid_registry.h>
>>>>>
>>>>> struct blk_desc;
>>>>> struct bootflow;
>>>>> -struct jmp_buf_data;
>>>>>
>>>>> #if CONFIG_IS_ENABLED(EFI_LOADER)
>>>>>
>>>>> @@ -485,7 +485,7 @@ struct efi_loaded_image_obj {
>>>>> efi_status_t *exit_status;
>>>>> efi_uintn_t *exit_data_size;
>>>>> u16 **exit_data;
>>>>> - struct jmp_buf_data *exit_jmp;
>>>>> + jmp_buf *exit_jmp;
>>>>> EFIAPI efi_status_t (*entry)(efi_handle_t image_handle,
>>>>> struct efi_system_table *st);
>>>>> u16 image_type;
>>>>> diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
>>>>> index 5164cb15986..80c56b1ee46 100644
>>>>> --- a/lib/efi_loader/efi_boottime.c
>>>>> +++ b/lib/efi_loader/efi_boottime.c
>>>>> @@ -3199,7 +3199,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
>>>>> void *info;
>>>>> efi_handle_t parent_image = current_image;
>>>>> efi_status_t exit_status;
>>>>> - struct jmp_buf_data exit_jmp;
>>>>> + jmp_buf exit_jmp;
>>>>>
>>>>> EFI_ENTRY("%p, %p, %p", image_handle, exit_data_size, exit_data);
>>>>>
>>>>> @@ -3238,7 +3238,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
>>>>> }
>>>>>
>>>>> /* call the image! */
>>>>> - if (setjmp(&exit_jmp)) {
>>>>> + if (setjmp(exit_jmp)) {
>>>>> /*
>>>>> * We called the entry point of the child image with EFI_CALL
>>>>> * in the lines below. The child image called the Exit() boot
>>>>> @@ -3444,7 +3444,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
>>>>> struct efi_loaded_image *loaded_image_protocol;
>>>>> struct efi_loaded_image_obj *image_obj =
>>>>> (struct efi_loaded_image_obj *)image_handle;
>>>>> - struct jmp_buf_data *exit_jmp;
>>>>> + jmp_buf *exit_jmp;
>>>>>
>>>>> EFI_ENTRY("%p, %ld, %zu, %p", image_handle, exit_status,
>>>>> exit_data_size, exit_data);
>>>>> @@ -3511,7 +3511,7 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
>>>>> */
>>>>> efi_restore_gd();
>>>>>
>>>>> - longjmp(exit_jmp, 1);
>>>>> + longjmp(*exit_jmp, 1);
>>>>>
>>>>> panic("EFI application exited");
>>>>> out:
>>>>
>>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-02-28 15:50 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-15 15:54 [PATCH] efi_loader: Clean up usage of structure jmp_buf_data Yao Zi
2025-02-15 16:58 ` Heinrich Schuchardt
2025-02-16 14:26 ` Yao Zi
2025-02-16 16:50 ` Heinrich Schuchardt
2025-02-16 17:36 ` Yao Zi
2025-02-28 15:50 ` Heinrich Schuchardt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox