U-Boot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [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