Procházet zdrojové kódy

Redefine jmp_buf to comply with C calling convention.

Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@infinera.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
Nigel Croxon před 6 roky
rodič
revize
5b74db0e15

+ 3 - 3
apps/setjmp.c

@@ -12,12 +12,12 @@ efi_main(
 	int rc;
 
 	InitializeLib(image_handle, systab);
-	rc = setjmp(&env);
+	rc = setjmp(env);
 	Print(L"setjmp() = %d\n", rc);
 
 	if (rc == 3) {
 		Print(L"3 worked\n");
-		longjmp(&env, 0);
+		longjmp(env, 0);
 		return 0;
 	}
 
@@ -26,6 +26,6 @@ efi_main(
 		return 0;
 	}
 
-	longjmp(&env, 3);
+	longjmp(env, 3);
 	return 0;
 }

+ 1 - 1
inc/aarch64/efisetjmp_arch.h

@@ -28,6 +28,6 @@ typedef struct {
 	UINT64	D13;
 	UINT64	D14;
 	UINT64	D15;
-} ALIGN(JMPBUF_ALIGN) jmp_buf;
+} ALIGN(JMPBUF_ALIGN) jmp_buf[1];
 
 #endif /* GNU_EFI_AARCH64_SETJMP_H */

+ 1 - 1
inc/arm/efisetjmp_arch.h

@@ -16,6 +16,6 @@ typedef struct {
 	UINT32 R12;
 	UINT32 R13;
 	UINT32 R14;
-} ALIGN(JMPBUF_ALIGN) jmp_buf;
+} ALIGN(JMPBUF_ALIGN) jmp_buf[1];
 
 #endif /* GNU_EFI_ARM_SETJMP_H */

+ 2 - 2
inc/efisetjmp.h

@@ -4,7 +4,7 @@
 #include "eficompiler.h"
 #include "efisetjmp_arch.h"
 
-extern UINTN setjmp(jmp_buf *env) __attribute__((returns_twice));
-extern VOID longjmp(jmp_buf *env, UINTN value) __attribute__((noreturn));
+extern UINTN setjmp(jmp_buf env) __attribute__((returns_twice));
+extern VOID longjmp(jmp_buf env, UINTN value) __attribute__((noreturn));
 
 #endif /* GNU_EFI_SETJMP_H */

+ 1 - 1
inc/ia32/efisetjmp_arch.h

@@ -10,6 +10,6 @@ typedef struct {
 	UINT32	Ebp;
 	UINT32	Esp;
 	UINT32	Eip;
-} ALIGN(JMPBUF_ALIGN) jmp_buf;
+} ALIGN(JMPBUF_ALIGN) jmp_buf[1];
 
 #endif /* GNU_EFI_IA32_SETJMP_H */

+ 1 - 1
inc/ia64/efisetjmp_arch.h

@@ -42,6 +42,6 @@ typedef struct {
 	UINT64	Predicates;
 	UINT64	LoopCount;
 	UINT64	FPSR;
-} ALIGN(JMPBUF_ALIGN) jmp_buf;
+} ALIGN(JMPBUF_ALIGN) jmp_buf[1];
 
 #endif /* GNU_EFI_IA64_SETJMP_H */

+ 1 - 1
inc/mips64el/efisetjmp_arch.h

@@ -29,6 +29,6 @@ typedef struct {
 	UINT64	F30;
 	UINT64	F31;
 #endif
-} ALIGN(JMPBUF_ALIGN) jmp_buf;
+} ALIGN(JMPBUF_ALIGN) jmp_buf[1];
 
 #endif /* GNU_EFI_MIPS64EL_SETJMP_H */

+ 1 - 1
inc/x86_64/efisetjmp_arch.h

@@ -17,6 +17,6 @@ typedef struct {
 	UINT64	Rip;
 	UINT64	MxCsr;
 	UINT8	XmmBuffer[160]; // XMM6 - XMM15
-} ALIGN(JMPBUF_ALIGN) jmp_buf;
+} ALIGN(JMPBUF_ALIGN) jmp_buf[1];
 
 #endif /* GNU_EFI_X86_64_SETJMP_H */