Update to 3.0.7 (from git) and add some pending patches we need.

Signed-off-by: Peter Jones <pjones@redhat.com>
This commit is contained in:
Peter Jones 2018-03-13 12:01:52 -04:00
parent 1c1dbe879d
commit f458757d86
28 changed files with 1552 additions and 275 deletions

View File

@ -1,33 +0,0 @@
From f3d3ef07eb69072b8bd2b0c5d4e6243ea38ecec9 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Thu, 2 Feb 2017 13:51:27 -0500
Subject: [PATCH 01/10] Mark our explicit fall through so -Wextra will work in
gcc 7
gcc 7 introduces detection of fall-through behavior in switch/case
statements, and will warn if -Wimplicit-fallthrough is present and there
is no comment stating that the fall-through is intentional. This is
also triggered by -Wextra, as it enables -Wimplicit-fallthrough=1.
This patch adds the comment in the one place we use fall-through.
Signed-off-by: Peter Jones <pjones@redhat.com>
---
lib/print.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/print.c b/lib/print.c
index b8a9d38..cb732f0 100644
--- a/lib/print.c
+++ b/lib/print.c
@@ -1131,6 +1131,7 @@ Returns:
case 'X':
Item.Width = Item.Long ? 16 : 8;
Item.Pad = '0';
+ /* falls through */
case 'x':
ValueToHex (
Item.Scratch,
--
2.9.3

View File

@ -0,0 +1,44 @@
From 99d94682de590719f9333fcf091910a9581b44c0 Mon Sep 17 00:00:00 2001
From: Nigel Croxon <ncroxon@redhat.com>
Date: Thu, 13 Jul 2017 08:43:16 -0400
Subject: [PATCH 01/22] [PATCH] Disable AVX instruction set on IA32 and x86_64
platforms
If gnu-efi is compiled with "-march=native" on a host that supports AVX, both
gcc and clang will use AVX instructions freely which is currently not supported
and will result in a non-functional gnu-efi build (e.g. black screen, hangs).
For now, disable AVX on IA32 and x86_64 by checking first if the compiler does
actually support the appropriate flag (-mno-avx) and use it if possible.
Credit for the compiler command line to check if a flag is supported goes to
Gentoo's awesome flag-o-matic eclass, where it is taken from. Thanks.
Signed-off-by: Matthias Dahl <matthias.dahl@binary-island.eu>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
Make.defaults | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/Make.defaults b/Make.defaults
index 16f1fd21848..446e676dc14 100755
--- a/Make.defaults
+++ b/Make.defaults
@@ -120,6 +120,14 @@ ifeq ($(ARCH),x86_64)
endif
endif
+ifneq (,$(filter $(ARCH),ia32 x86_64))
+ # Disable AVX, if the compiler supports that.
+ CC_CAN_DISABLE_AVX=$(shell $(CC) -Werror -c -o /dev/null -xc -mno-avx - </dev/null >/dev/null 2>&1 && echo 1)
+ ifeq ($(CC_CAN_DISABLE_AVX), 1)
+ CFLAGS += -mno-avx
+ endif
+endif
+
ifeq ($(ARCH),mips64el)
CFLAGS += -march=mips64r2
ARCH3264 = -mabi=64
--
2.14.3

View File

@ -1,76 +0,0 @@
From 6e32a714438f3938e1fb64cb380e7fa8b0c8789a Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Thu, 24 Aug 2017 16:54:18 -0400
Subject: [PATCH] arm64: efi: remove pointless dummy .reloc section
The kernel's EFI PE/COFF header contains a dummy .reloc section, and
an explanatory comment that claims that this is required for the EFI
application loader to accept the Image as a relocatable image (i.e.,
one that can be loaded at any offset and fixed up in place)
This was inherited from the x86 implementation, which has elaborate host
tooling to mangle the PE/COFF header post-link time, and which populates
the .reloc section with a single dummy base relocation. On ARM, no such
tooling exists, and the .reloc section remains empty, and is never even
exposed via the BaseRelocationTable directory entry, which is where the
PE/COFF loader looks for it.
The PE/COFF spec is unclear about relocatable images that do not require
any fixups, but the EDK2 implementation, which is the de facto reference
for PE/COFF in the UEFI space, clearly does not care, and explicitly
mentions (in a comment) that relocatable images with no base relocations
are perfectly fine, as long as they don't have the RELOCS_STRIPPED
attribute set (which is not the case for our PE/COFF image)
So simply remove the .reloc section altogether.
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Peter Jones <pjones@redhat.com>
---
gnuefi/crt0-efi-aarch64.S | 22 +---------------------
1 file changed, 1 insertion(+), 21 deletions(-)
diff --git a/gnuefi/crt0-efi-aarch64.S b/gnuefi/crt0-efi-aarch64.S
index 7a9e5c2..fef997b 100644
--- a/gnuefi/crt0-efi-aarch64.S
+++ b/gnuefi/crt0-efi-aarch64.S
@@ -31,7 +31,7 @@ pe_header:
.short 0
coff_header:
.short 0xaa64 // AArch64
- .short 2 // nr_sections
+ .short 1 // nr_sections
.long 0 // TimeDateStamp
.long 0 // PointerToSymbolTable
.long 1 // NumberOfSymbols
@@ -85,26 +85,6 @@ extra_header_fields:
// Section table
section_table:
-
- /*
- * The EFI application loader requires a relocation section
- * because EFI applications must be relocatable. This is a
- * dummy section as far as we are concerned.
- */
- .ascii ".reloc"
- .byte 0
- .byte 0 // end of 0 padding of section name
- .long 0
- .long 0
- .long 0 // SizeOfRawData
- .long 0 // PointerToRawData
- .long 0 // PointerToRelocations
- .long 0 // PointerToLineNumbers
- .short 0 // NumberOfRelocations
- .short 0 // NumberOfLineNumbers
- .long 0x42100040 // Characteristics (section flags)
-
-
.ascii ".text"
.byte 0
.byte 0
--
2.13.5

View File

@ -0,0 +1,30 @@
From 08a46615c70f5af195443fcf5d0fd425fa329096 Mon Sep 17 00:00:00 2001
From: Nigel Croxon <ncroxon@redhat.com>
Date: Mon, 7 Aug 2017 13:32:54 -0400
Subject: [PATCH 02/22] Use ARFLAGS when invoking ar.
The use of ARFLAGS makes these flags overridable.
The '-U' option is already added to ARFLAGS in Make.defaults.
Signed-off-by: Janosch Hildebrand <jnosh+git@jnosh.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
lib/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/Makefile b/lib/Makefile
index b8d1ce70d48..0e6410dac55 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -75,7 +75,7 @@ libsubdirs:
for sdir in $(SUBDIRS); do mkdir -p $$sdir; done
libefi.a: $(OBJS)
- $(AR) rv -U $@ $^
+ $(AR) $(ARFLAGS) $@ $^
clean:
rm -f libefi.a *~ $(OBJS) */*.o
--
2.14.3

View File

@ -0,0 +1,31 @@
From 15bcddc996694c904b3848c83031da5cd3a4719e Mon Sep 17 00:00:00 2001
From: Nigel Croxon <ncroxon@redhat.com>
Date: Mon, 6 Nov 2017 09:06:31 -0500
Subject: [PATCH 03/22] Stripped diff for makefile
This patch allows one to run make outside the source tree
with make -f <makefile>.
Signed-off-by: wolfra <wolfra@users.sf.net>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
Makefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 646de6f7044..37592bd6930 100644
--- a/Makefile
+++ b/Makefile
@@ -36,7 +36,8 @@
VERSION = 3.0.6
-SRCDIR = $(shell pwd)
+MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
+SRCDIR = $(dir $(MKFILE_PATH))
VPATH = $(SRCDIR)
--
2.14.3

View File

@ -0,0 +1,94 @@
From 39ce220cb6fde14bedf2ef61695f3d20726e41ef Mon Sep 17 00:00:00 2001
From: Nigel Croxon <ncroxon@redhat.com>
Date: Mon, 6 Nov 2017 09:26:05 -0500
Subject: [PATCH 04/22] Make sure stdint.h is always used with MSVC on
ARM/ARM64, since all the versions of Visual Studio that support ARM or ARM64
have that header. Without this, uint64_t would be defined to unsigned long,
which is 32-bits in the Microsoft world.
Also fix aarch64/initplat.c so that memset/memcpy only apply
to gcc. Otherwise MSVC throws an error for __SIZE_TYPE__.
Updating this patch to v2, since it turns out MSVC will also emit
memset and memcpy intrinsics that we can use an implementation for.
This is true for both ARM and ARM64.
To make this work, I'm defining __SIZE_TYPE__ to UINTN if not
already defined.
Signed-off-by: Pete Batard <pete@akeo.ie>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
lib/aarch64/initplat.c | 4 ++++
lib/arm/initplat.c | 6 +++++-
inc/aarch64/efibind.h | 2 +-
inc/arm/efibind.h | 2 +-
4 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/lib/aarch64/initplat.c b/lib/aarch64/initplat.c
index 4b118656d7c..25207f42c8f 100644
--- a/lib/aarch64/initplat.c
+++ b/lib/aarch64/initplat.c
@@ -25,6 +25,10 @@ InitializeLibPlatform (
{
}
+#ifndef __SIZE_TYPE__
+#define __SIZE_TYPE__ UINTN
+#endif
+
/*
* Calls to these functions may be emitted implicitly by GCC even when
* -ffreestanding is in effect.
diff --git a/lib/arm/initplat.c b/lib/arm/initplat.c
index 09f06a9c871..c77d26d9045 100644
--- a/lib/arm/initplat.c
+++ b/lib/arm/initplat.c
@@ -25,7 +25,10 @@ InitializeLibPlatform (
{
}
-#ifdef __GNUC__
+#ifndef __SIZE_TYPE__
+#define __SIZE_TYPE__ UINTN
+#endif
+
/*
* Calls to these functions may be emitted implicitly by GCC even when
* -ffreestanding is in effect.
@@ -51,6 +54,7 @@ void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n)
return dest;
}
+#ifdef __GNUC__
void __div0(void)
{
// TODO handle divide by zero fault
diff --git a/inc/aarch64/efibind.h b/inc/aarch64/efibind.h
index ef7148d5312..182a2109062 100644
--- a/inc/aarch64/efibind.h
+++ b/inc/aarch64/efibind.h
@@ -15,7 +15,7 @@
* either version 2 of the License, or (at your option) any later version.
*/
-#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )
+#if !defined(_MSC_VER) && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ))
// ANSI C 1999/2000 stdint.h integer width declarations
diff --git a/inc/arm/efibind.h b/inc/arm/efibind.h
index 06f6ea1aeb8..40a5a9cd428 100644
--- a/inc/arm/efibind.h
+++ b/inc/arm/efibind.h
@@ -15,7 +15,7 @@
* either version 2 of the License, or (at your option) any later version.
*/
-#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )
+#if !defined(_MSC_VER) && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ))
// ANSI C 1999/2000 stdint.h integer width declarations
--
2.14.3

View File

@ -0,0 +1,44 @@
From 787b53a66cbbec6b10d47264b9eea9b24bc4e34c Mon Sep 17 00:00:00 2001
From: Nigel Croxon <ncroxon@redhat.com>
Date: Mon, 6 Nov 2017 09:34:14 -0500
Subject: [PATCH 05/22] Add EFI_DRIVER_ENTRY_POINT support for MSVC/ARM64
Similar to what we do for other MSVC architectures.
Signed-off-by: Pete Batard <pete@akeo.ie>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
inc/aarch64/efibind.h | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/inc/aarch64/efibind.h b/inc/aarch64/efibind.h
index 182a2109062..bdaa5238e84 100644
--- a/inc/aarch64/efibind.h
+++ b/inc/aarch64/efibind.h
@@ -115,9 +115,13 @@ typedef uint64_t UINTN;
//
// When build similiar to FW, then link everything together as
-// one big module.
+// one big module. For the MSVC toolchain, we simply tell the
+// linker what our driver init function is using /ENTRY.
//
-
+#if defined(_MSC_EXTENSIONS)
+#define EFI_DRIVER_ENTRY_POINT(InitFunction) \
+ __pragma(comment(linker, "/ENTRY:" # InitFunction))
+#else
#define EFI_DRIVER_ENTRY_POINT(InitFunction) \
UINTN \
InitializeDriver ( \
@@ -134,6 +138,7 @@ typedef uint64_t UINTN;
EFI_SYSTEM_TABLE *systab \
) __attribute__((weak, \
alias ("InitializeDriver")));
+#endif
#define LOAD_INTERNAL_DRIVER(_if, type, name, entry) \
(_if)->LoadInternal(type, name, entry)
--
2.14.3

View File

@ -0,0 +1,215 @@
From b1d426ce67cbeaa1a8ec7d9b8d0d8071ae4563b4 Mon Sep 17 00:00:00 2001
From: Nigel Croxon <ncroxon@redhat.com>
Date: Mon, 6 Nov 2017 09:38:38 -0500
Subject: [PATCH 06/22] Move memcpy/memset definition to global init.c
Following up on previous patch, I think we should move
memcpy/memset definitions to the global init.c, since MSVC does
also inserts calls to memset/memcpy for the x86_32 platform,
even when disabling standard libraries and intrinsics.
All in all, it looks like, for all platforms, we should assume
that a compiler may still insert these calls regardless.
Signed-off-by: Pete Batard <pete@akeo.ie>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
lib/aarch64/initplat.c | 29 -----------------------------
lib/arm/initplat.c | 33 ++-------------------------------
lib/init.c | 47 ++++++++++++++++++++++++++++++++++++++---------
lib/mips64el/initplat.c | 25 -------------------------
4 files changed, 40 insertions(+), 94 deletions(-)
diff --git a/lib/aarch64/initplat.c b/lib/aarch64/initplat.c
index 25207f42c8f..6c5e1fa5217 100644
--- a/lib/aarch64/initplat.c
+++ b/lib/aarch64/initplat.c
@@ -24,32 +24,3 @@ InitializeLibPlatform (
)
{
}
-
-#ifndef __SIZE_TYPE__
-#define __SIZE_TYPE__ UINTN
-#endif
-
-/*
- * Calls to these functions may be emitted implicitly by GCC even when
- * -ffreestanding is in effect.
- */
-void *memset(void *s, int c, __SIZE_TYPE__ n)
-{
- unsigned char *p = s;
-
- while (n--)
- *p++ = c;
-
- return s;
-}
-
-void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n)
-{
- const unsigned char *q = src;
- unsigned char *p = dest;
-
- while (n--)
- *p++ = *q++;
-
- return dest;
-}
diff --git a/lib/arm/initplat.c b/lib/arm/initplat.c
index c77d26d9045..135a649210a 100644
--- a/lib/arm/initplat.c
+++ b/lib/arm/initplat.c
@@ -25,39 +25,10 @@ InitializeLibPlatform (
{
}
-#ifndef __SIZE_TYPE__
-#define __SIZE_TYPE__ UINTN
-#endif
-
-/*
- * Calls to these functions may be emitted implicitly by GCC even when
- * -ffreestanding is in effect.
- */
-void *memset(void *s, int c, __SIZE_TYPE__ n)
-{
- unsigned char *p = s;
-
- while (n--)
- *p++ = c;
-
- return s;
-}
-
-void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n)
-{
- unsigned char *p = dest;
- unsigned char const *q = src;
-
- while (n--)
- *p++ = *q++;
-
- return dest;
-}
-
#ifdef __GNUC__
void __div0(void)
{
- // TODO handle divide by zero fault
- while (1);
+ // TODO handle divide by zero fault
+ while (1);
}
#endif
diff --git a/lib/init.c b/lib/init.c
index 4225d314b7a..4f238c0a2cc 100644
--- a/lib/init.c
+++ b/lib/init.c
@@ -49,7 +49,7 @@ Returns:
if (!LibInitialized) {
LibInitialized = TRUE;
LibFwInstance = FALSE;
- LibImageHandle = ImageHandle;
+ LibImageHandle = ImageHandle;
//
@@ -71,17 +71,16 @@ Returns:
if (ImageHandle) {
Status = uefi_call_wrapper(
- BS->HandleProtocol,
- 3,
- ImageHandle,
- &LoadedImageProtocol,
- (VOID*)&LoadedImage
- );
+ BS->HandleProtocol,
+ 3,
+ ImageHandle,
+ &LoadedImageProtocol,
+ (VOID*)&LoadedImage
+ );
if (!EFI_ERROR(Status)) {
PoolAllocationType = LoadedImage->ImageDataType;
}
-
EFIDebugVariable ();
}
@@ -181,5 +180,35 @@ EFIDebugVariable (
Status = uefi_call_wrapper(RT->GetVariable, 5, L"EFIDebug", &EfiGlobalVariable, &Attributes, &DataSize, &NewEFIDebug);
if (!EFI_ERROR(Status)) {
EFIDebug = NewEFIDebug;
- }
+ }
+}
+
+/*
+ * Calls to memset/memcpy may be emitted implicitly by GCC or MSVC
+ * even when -ffreestanding or /NODEFAULTLIB are in effect.
+ */
+
+#ifndef __SIZE_TYPE__
+#define __SIZE_TYPE__ UINTN
+#endif
+
+void *memset(void *s, int c, __SIZE_TYPE__ n)
+{
+ unsigned char *p = s;
+
+ while (n--)
+ *p++ = c;
+
+ return s;
+}
+
+void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n)
+{
+ const unsigned char *q = src;
+ unsigned char *p = dest;
+
+ while (n--)
+ *p++ = *q++;
+
+ return dest;
}
diff --git a/lib/mips64el/initplat.c b/lib/mips64el/initplat.c
index 4b118656d7c..6c5e1fa5217 100644
--- a/lib/mips64el/initplat.c
+++ b/lib/mips64el/initplat.c
@@ -24,28 +24,3 @@ InitializeLibPlatform (
)
{
}
-
-/*
- * Calls to these functions may be emitted implicitly by GCC even when
- * -ffreestanding is in effect.
- */
-void *memset(void *s, int c, __SIZE_TYPE__ n)
-{
- unsigned char *p = s;
-
- while (n--)
- *p++ = c;
-
- return s;
-}
-
-void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n)
-{
- const unsigned char *q = src;
- unsigned char *p = dest;
-
- while (n--)
- *p++ = *q++;
-
- return dest;
-}
--
2.14.3

View File

@ -0,0 +1,26 @@
From f99001cd7d4c27d1b365b70ac45b14f84ee46237 Mon Sep 17 00:00:00 2001
From: Nigel Croxon <ncroxon@redhat.com>
Date: Mon, 6 Nov 2017 09:44:21 -0500
Subject: [PATCH 07/22] Bump revision from VERSION = 3.0.6 to VERSION = 3.0.7
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 37592bd6930..a9f7e134e14 100644
--- a/Makefile
+++ b/Makefile
@@ -34,7 +34,7 @@
# SUCH DAMAGE.
#
-VERSION = 3.0.6
+VERSION = 3.0.7
MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
SRCDIR = $(dir $(MKFILE_PATH))
--
2.14.3

View File

@ -1,7 +1,7 @@
From bbd65152010e04275825736f203a4bf929927a7f Mon Sep 17 00:00:00 2001
From 3fa80d0d7b103975b765fa936c24d05544985805 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Thu, 2 Feb 2017 14:00:59 -0500
Subject: [PATCH 02/10] Fix some types gcc doesn't like
Subject: [PATCH 08/22] Fix some types gcc doesn't like
Most of these come from building on i386 with -Wextra, but they're still
incorrect everywhere else; they just happen to have identical typedefs
@ -16,7 +16,7 @@ Signed-off-by: Peter Jones <pjones@redhat.com>
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/apps/AllocPages.c b/apps/AllocPages.c
index 77a082e..bb81849 100644
index 77a082ec0a3..bb81849c26e 100644
--- a/apps/AllocPages.c
+++ b/apps/AllocPages.c
@@ -116,7 +116,7 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
@ -29,7 +29,7 @@ index 77a082e..bb81849 100644
InitializeLib(image, systab);
diff --git a/apps/FreePages.c b/apps/FreePages.c
index bbf2f52..247c75d 100644
index bbf2f52b4cf..247c75dc2be 100644
--- a/apps/FreePages.c
+++ b/apps/FreePages.c
@@ -89,7 +89,7 @@ efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
@ -42,10 +42,10 @@ index bbf2f52..247c75d 100644
InitializeLib(image, systab);
diff --git a/apps/route80h.c b/apps/route80h.c
index b0b142f..723dd85 100644
index 8df860c1232..e1f62f06824 100644
--- a/apps/route80h.c
+++ b/apps/route80h.c
@@ -138,7 +138,7 @@ efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
@@ -129,7 +129,7 @@ efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
lpcif.rcba &= ~1UL;
Print(L"rcba: 0x%8x\n", lpcif.rcba, lpcif.rcba);
@ -55,7 +55,7 @@ index b0b142f..723dd85 100644
return EFI_SUCCESS;
diff --git a/inc/efilink.h b/inc/efilink.h
index b2ff4fa..cc5aa2d 100644
index b2ff4fa2f87..cc5aa2dc57b 100644
--- a/inc/efilink.h
+++ b/inc/efilink.h
@@ -142,7 +142,7 @@ typedef struct _LIST_ENTRY {
@ -68,5 +68,5 @@ index b2ff4fa..cc5aa2d 100644
//
// CONTAINING_RECORD - returns a pointer to the structure
--
2.9.3
2.14.3

View File

@ -1,7 +1,7 @@
From fa85eb1b6ac4ceff1672c7152b6f842c2f2ff728 Mon Sep 17 00:00:00 2001
From 6082de48568bb85b4878fe7934ede76821114d34 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Thu, 2 Feb 2017 14:31:25 -0500
Subject: [PATCH 03/10] Fix arm build paths in the makefile
Subject: [PATCH 09/22] Fix arm build paths in the makefile
Previous work was apparently done with arm-linux-gnueabi-gcc as a
cross-builder, but our armv7 builders have native gcc with the target as
@ -14,7 +14,7 @@ Signed-off-by: Peter Jones <pjones@redhat.com>
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Make.defaults b/Make.defaults
index 51bd7d8..e4d2ac1 100755
index 446e676dc14..6d300fb0f24 100755
--- a/Make.defaults
+++ b/Make.defaults
@@ -62,12 +62,12 @@ OBJCOPY := $(prefix)$(CROSS_COMPILE)objcopy
@ -33,5 +33,5 @@ index 51bd7d8..e4d2ac1 100755
# FreeBSD (and possibly others) reports amd64 instead of x86_64
--
2.9.3
2.14.3

View File

@ -1,33 +0,0 @@
From ba05cb606c6c3a4ec9f60c588abef52e355e5c1a Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Fri, 10 Feb 2017 16:14:55 -0500
Subject: [PATCH 09/10] route80h: remove some dead code
Signed-off-by: Peter Jones <pjones@redhat.com>
---
apps/route80h.c | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/apps/route80h.c b/apps/route80h.c
index bf550a1..5272dd3 100644
--- a/apps/route80h.c
+++ b/apps/route80h.c
@@ -40,15 +40,6 @@ static inline void set_bit(volatile uint32_t *flag, int bit, int value)
Print(L"new value is 0x%2x\n", val);
}
-static inline int configspace_matches_ids(void *config, uint32_t vendor_id,
- uint32_t device_id)
-{
- uint32_t *cfg = config;
- if (cfg[0] == vendor_id && cfg[1] == device_id)
- return 1;
- return 0;
-}
-
static int is_device(EFI_PCI_IO *pciio, uint16_t vendor_id, uint16_t device_id)
{
lpcif_t lpcif;
--
2.9.3

View File

@ -1,57 +0,0 @@
From a94906bd487c1a2e6d7827f31d7eb46bc09f3b43 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Fri, 10 Feb 2017 16:18:14 -0500
Subject: [PATCH 10/10] Make clang not complain about the debughook's
optimization settings
... still won't work, of course, because nobody at clang takes compiler
compatibility seriously while they keep implying that you can pretend
it's gcc.
Signed-off-by: Peter Jones <pjones@redhat.com>
---
Make.defaults | 3 ++-
apps/debughook.c | 5 +++--
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/Make.defaults b/Make.defaults
index cc52195..a7778a7 100755
--- a/Make.defaults
+++ b/Make.defaults
@@ -161,7 +161,8 @@ CFLAGS += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \
-fshort-wchar -fno-strict-aliasing \
-ffreestanding -fno-stack-protector \
-fno-stack-check \
- $(if $(findstring gcc,$(CC)),-fno-merge-constants,)
+ $(if $(findstring gcc,$(CC)),-fno-merge-constants,) \
+ $(if $(findstring clang,$(CC)),-Wno-unknown-pragmas,)
endif
ARFLAGS += -U
diff --git a/apps/debughook.c b/apps/debughook.c
index e1d1c50..fa36f62 100644
--- a/apps/debughook.c
+++ b/apps/debughook.c
@@ -37,8 +37,9 @@ GetVariable(CHAR16 *var, UINT8 **data, UINTN *len, EFI_GUID owner)
EFI_GUID DUMMY_GUID =
{0x55aad538, 0x8f82, 0x4e2a, {0xa4,0xf0,0xbe, 0x59, 0x13, 0xb6, 0x5f, 0x1e}};
+#pragma GCC push_options
+#pragma GCC optimize ("0")
static void
-__attribute__((__optimize__("0")))
DebugHook(void)
{
EFI_GUID guid = DUMMY_GUID;
@@ -81,7 +82,7 @@ DebugHook(void)
}
x = 1;
}
-
+#pragma GCC pop_options
EFI_STATUS
efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
--
2.9.3

View File

@ -1,7 +1,7 @@
From 6f5781e191cca6c20a75b82cc467c2256cbb5901 Mon Sep 17 00:00:00 2001
From d7e380f0ebf2292ddcd534c407483450b74a9f12 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Thu, 2 Feb 2017 15:23:55 -0500
Subject: [PATCH 04/10] Work around -Werror=maybe-uninitialized not being very
Subject: [PATCH 10/22] Work around -Werror=maybe-uninitialized not being very
bright.
The compiler doesn't believe the loop always executes at least once,
@ -14,10 +14,10 @@ Signed-off-by: Peter Jones <pjones@redhat.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/route80h.c b/apps/route80h.c
index 723dd85..bf550a1 100644
index e1f62f06824..5272dd3cd44 100644
--- a/apps/route80h.c
+++ b/apps/route80h.c
@@ -102,7 +102,7 @@ efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
@@ -93,7 +93,7 @@ efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
InitializeLib(image_handle, systab);
EFI_PCI_IO *pciio = NULL;
lpcif_t lpcif;
@ -27,5 +27,5 @@ index 723dd85..bf550a1 100644
uint16_t vendor;
uint16_t device;
--
2.9.3
2.14.3

View File

@ -1,7 +1,7 @@
From 397b06ff74f7fd8fc71f5991bdfbfa6ef6da98fd Mon Sep 17 00:00:00 2001
From 2e07ce1876051106659a5a0d742ee26437806da9 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Thu, 2 Feb 2017 15:25:48 -0500
Subject: [PATCH 05/10] Fix a sign error in the debughook example app
Subject: [PATCH 11/22] Fix a sign error in the debughook example app
On ISO C90 on i386 4294967294 is a signed integer, and so x can't be
greater (or equal) to that. Make it an unsigned and choose a better type
@ -13,10 +13,10 @@ Signed-off-by: Peter Jones <pjones@redhat.com>
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/apps/debughook.c b/apps/debughook.c
index fb6cdad..e1d1c50 100644
index 93cd0cf7eb0..78e4a767b1d 100644
--- a/apps/debughook.c
+++ b/apps/debughook.c
@@ -45,7 +45,7 @@ DebugHook(void)
@@ -50,7 +50,7 @@ DebugHook(void)
UINT8 *data = NULL;
UINTN dataSize = 0;
EFI_STATUS efi_status;
@ -25,7 +25,7 @@ index fb6cdad..e1d1c50 100644
extern char _text, _data;
if (x)
@@ -66,7 +66,7 @@ DebugHook(void)
@@ -71,7 +71,7 @@ DebugHook(void)
while (x++) {
/* Make this so it can't /totally/ DoS us. */
#if defined(__x86_64__) || defined(__i386__) || defined(__i686__)
@ -35,5 +35,5 @@ index fb6cdad..e1d1c50 100644
__asm__ __volatile__("pause");
#elif defined(__aarch64__)
--
2.9.3
2.14.3

View File

@ -1,7 +1,7 @@
From e4ca94374c7ece8ec0100075710af8638e42c203 Mon Sep 17 00:00:00 2001
From 44c9ce3c94d26ab4b8f778827bcaded30dc1fa22 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Wed, 8 Feb 2017 15:28:18 -0500
Subject: [PATCH 06/10] Fix typedef of EFI_PXE_BASE_CODE
Subject: [PATCH 12/22] Fix typedef of EFI_PXE_BASE_CODE
Commit 751cbce3 fixed up a bunch of types to better match the edk2
definitions and the names in the UEFI Spec, but while doing so
@ -32,18 +32,18 @@ Signed-off-by: Peter Jones <pjones@redhat.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/inc/efipxebc.h b/inc/efipxebc.h
index 580a6ef..3760c7c 100644
index 035a853a7ef..3760c7cbb78 100644
--- a/inc/efipxebc.h
+++ b/inc/efipxebc.h
@@ -419,7 +419,7 @@ typedef struct _EFI_PXE_BASE_CODE_PROTOCOL {
// Use 'EFI_PXE_BASE_CODE_PROTOCOL_GUID' instead.
typedef struct _EFI_PXE_BASE_CODE_PROTOCOL _EFI_PXE_BASE_CODE;
-typedef struct EFI_PXE_BASE_CODE_PROTOCOL EFI_PXE_BASE_CODE;
-typedef EFI_PXE_BASE_CODE_PROTOCOL EFI_PXE_BASE_CODE;
+typedef struct _EFI_PXE_BASE_CODE_PROTOCOL EFI_PXE_BASE_CODE;
//
// Call Back Definitions
--
2.9.3
2.14.3

View File

@ -1,28 +1,28 @@
From a01463c5035d2bacefc1ef7673b6ba2cc9815920 Mon Sep 17 00:00:00 2001
From 34365c8c021a32150935d0af3087195e3e99eef9 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Fri, 10 Feb 2017 15:16:42 -0500
Subject: [PATCH 07/10] make clang not complain about -fno-merge-constants
Subject: [PATCH 13/22] make clang not complain about -fno-merge-all-constants
---
Make.defaults | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/Make.defaults b/Make.defaults
index e4d2ac1..cc52195 100755
index 6d300fb0f24..a457190aa3a 100755
--- a/Make.defaults
+++ b/Make.defaults
@@ -159,8 +159,9 @@ CFLAGS += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \
@@ -170,8 +170,9 @@ CFLAGS += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \
else
CFLAGS += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \
-fshort-wchar -fno-strict-aliasing \
- -fno-merge-constants -ffreestanding -fno-stack-protector \
- -fno-merge-all-constants -ffreestanding -fno-stack-protector \
- -fno-stack-check
+ -ffreestanding -fno-stack-protector \
+ -ffreestanding -fno-stack-protector -fno-stack-check \
+ -fno-stack-check \
+ $(if $(findstring gcc,$(CC)),-fno-merge-constants,)
+ $(if $(findstring gcc,$(CC)),-fno-merge-all-constants,)
endif
ARFLAGS += -U
--
2.9.3
2.14.3

View File

@ -1,7 +1,7 @@
From 0281df3c77fc4d8c67c0d23c656b4debed862989 Mon Sep 17 00:00:00 2001
From cc5794a36021be063f069529d99f63ecd8e66a18 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Fri, 10 Feb 2017 16:14:12 -0500
Subject: [PATCH 08/10] Fix another place clang complains about
Subject: [PATCH 14/22] Fix another place clang complains about
Signed-off-by: Peter Jones <pjones@redhat.com>
---
@ -9,18 +9,18 @@ Signed-off-by: Peter Jones <pjones@redhat.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/guid.c b/lib/guid.c
index bd1f1a5..6498e90 100644
index 8daa505ed97..6498e9063cf 100644
--- a/lib/guid.c
+++ b/lib/guid.c
@@ -97,7 +97,7 @@ static struct {
{ &SMapId, L"ShellDevPathMap" },
{ &SAliasId, L"ShellAlias" },
- { NULL }
- { NULL, NULL }
+ { NULL, L"" }
};
//
--
2.9.3
2.14.3

View File

@ -0,0 +1,344 @@
From 4e69cb7426ae7bd9e8e27e4195d41e64b722da95 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Mon, 31 Jul 2017 15:01:02 -0400
Subject: [PATCH 15/22] gnu-efi: add some more common string functions.
This adds bounded string helper functions:
StrnLen()
StrnCpy()
StrnCat()
StpnCpy()
And the unbounded function StpCpy().
Signed-off-by: Peter Jones <pjones@redhat.com>
---
lib/runtime/rtstr.c | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++--
lib/str.c | 53 ++++++++++++++++++++++++++++++
inc/efilib.h | 33 +++++++++++++++++++
inc/efirtlib.h | 38 ++++++++++++++++++++++
4 files changed, 213 insertions(+), 3 deletions(-)
diff --git a/lib/runtime/rtstr.c b/lib/runtime/rtstr.c
index e283c09582e..80ff4891199 100644
--- a/lib/runtime/rtstr.c
+++ b/lib/runtime/rtstr.c
@@ -57,6 +57,61 @@ RtStrCpy (
*Dest = 0;
}
+#ifndef __GNUC__
+#pragma RUNTIME_CODE(RtStrnCpy)
+#endif
+VOID
+RUNTIMEFUNCTION
+RtStrnCpy (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src,
+ IN UINTN Len
+ )
+// copy strings
+{
+ UINTN Size = RtStrnLen(Src, Len);
+ if (Size != Len)
+ RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16));
+ RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
+}
+
+#ifndef __GNUC__
+#pragma RUNTIME_CODE(RtStrCpy)
+#endif
+CHAR16 *
+RUNTIMEFUNCTION
+RtStpCpy (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src
+ )
+// copy strings
+{
+ while (*Src) {
+ *(Dest++) = *(Src++);
+ }
+ *Dest = 0;
+ return Dest;
+}
+
+#ifndef __GNUC__
+#pragma RUNTIME_CODE(RtStrnCpy)
+#endif
+CHAR16 *
+RUNTIMEFUNCTION
+RtStpnCpy (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src,
+ IN UINTN Len
+ )
+// copy strings
+{
+ UINTN Size = RtStrnLen(Src, Len);
+ if (Size != Len)
+ RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16));
+ RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
+ return Dest + Size;
+}
+
#ifndef __GNUC__
#pragma RUNTIME_CODE(RtStrCat)
#endif
@@ -66,10 +121,24 @@ RtStrCat (
IN CHAR16 *Dest,
IN CONST CHAR16 *Src
)
-{
+{
RtStrCpy(Dest+StrLen(Dest), Src);
}
+#ifndef __GNUC__
+#pragma RUNTIME_CODE(RtStrCat)
+#endif
+VOID
+RUNTIMEFUNCTION
+RtStrnCat (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src,
+ IN UINTN Len
+ )
+{
+ RtStrnCpy(Dest+StrLen(Dest), Src, Len);
+}
+
#ifndef __GNUC__
#pragma RUNTIME_CODE(RtStrLen)
#endif
@@ -81,11 +150,28 @@ RtStrLen (
// string length
{
UINTN len;
-
+
for (len=0; *s1; s1+=1, len+=1) ;
return len;
}
+#ifndef __GNUC__
+#pragma RUNTIME_CODE(RtStrnLen)
+#endif
+UINTN
+RUNTIMEFUNCTION
+RtStrnLen (
+ IN CONST CHAR16 *s1,
+ IN UINTN Len
+ )
+// copy strings
+{
+ UINTN i;
+ for (i = 0; *s1 && i < Len; i++)
+ s1++;
+ return i;
+}
+
#ifndef __GNUC__
#pragma RUNTIME_CODE(RtStrSize)
#endif
@@ -97,7 +183,7 @@ RtStrSize (
// string size
{
UINTN len;
-
+
for (len=0; *s1; s1+=1, len+=1) ;
return (len + 1) * sizeof(CHAR16);
}
diff --git a/lib/str.c b/lib/str.c
index cf1495c1fc8..9a89f30ee55 100644
--- a/lib/str.c
+++ b/lib/str.c
@@ -113,6 +113,38 @@ StrCpy (
RtStrCpy (Dest, Src);
}
+VOID
+StrnCpy (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src,
+ IN UINTN Len
+ )
+// copy strings
+{
+ RtStrnCpy (Dest, Src, Len);
+}
+
+CHAR16 *
+StpCpy (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src
+ )
+// copy strings
+{
+ return RtStpCpy (Dest, Src);
+}
+
+CHAR16 *
+StpnCpy (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src,
+ IN UINTN Len
+ )
+// copy strings
+{
+ return RtStpnCpy (Dest, Src, Len);
+}
+
VOID
StrCat (
IN CHAR16 *Dest,
@@ -122,6 +154,27 @@ StrCat (
RtStrCat(Dest, Src);
}
+VOID
+StrnCat (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src,
+ IN UINTN Len
+ )
+{
+ RtStrnCat(Dest, Src, Len);
+}
+
+
+UINTN
+StrnLen (
+ IN CONST CHAR16 *s1,
+ IN UINTN Len
+ )
+// string length
+{
+ return RtStrnLen(s1, Len);
+}
+
UINTN
StrLen (
IN CONST CHAR16 *s1
diff --git a/inc/efilib.h b/inc/efilib.h
index 22da65bbc27..8a507aff7cd 100644
--- a/inc/efilib.h
+++ b/inc/efilib.h
@@ -313,17 +313,50 @@ StrCpy (
IN CONST CHAR16 *Src
);
+VOID
+StrnCpy (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src,
+ IN UINTN Len
+ );
+
+CHAR16 *
+StpCpy (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src
+ );
+
+CHAR16 *
+StpnCpy (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src,
+ IN UINTN Len
+ );
+
VOID
StrCat (
IN CHAR16 *Dest,
IN CONST CHAR16 *Src
);
+VOID
+StrnCat (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src,
+ IN UINTN Len
+ );
+
UINTN
StrLen (
IN CONST CHAR16 *s1
);
+UINTN
+StrnLen (
+ IN CONST CHAR16 *s1,
+ IN UINTN Len
+ );
+
UINTN
StrSize (
IN CONST CHAR16 *s1
diff --git a/inc/efirtlib.h b/inc/efirtlib.h
index c073ead97a7..49d0b4d3ae0 100644
--- a/inc/efirtlib.h
+++ b/inc/efirtlib.h
@@ -69,6 +69,29 @@ RtStrCpy (
IN CONST CHAR16 *Src
);
+VOID
+RUNTIMEFUNCTION
+RtStrnCpy (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src,
+ IN UINTN Len
+ );
+
+CHAR16 *
+RUNTIMEFUNCTION
+RtStpCpy (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src
+ );
+
+CHAR16 *
+RUNTIMEFUNCTION
+RtStpnCpy (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src,
+ IN UINTN Len
+ );
+
VOID
RUNTIMEFUNCTION
RtStrCat (
@@ -76,12 +99,27 @@ RtStrCat (
IN CONST CHAR16 *Src
);
+VOID
+RUNTIMEFUNCTION
+RtStrnCat (
+ IN CHAR16 *Dest,
+ IN CONST CHAR16 *Src,
+ IN UINTN Len
+ );
+
UINTN
RUNTIMEFUNCTION
RtStrLen (
IN CONST CHAR16 *s1
);
+UINTN
+RUNTIMEFUNCTION
+RtStrnLen (
+ IN CONST CHAR16 *s1,
+ IN UINTN Len
+ );
+
UINTN
RUNTIMEFUNCTION
RtStrSize (
--
2.14.3

View File

@ -0,0 +1,44 @@
From ea1bc0d8cdb3005cdf1718083eb49075b60c8b97 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Mon, 31 Jul 2017 15:03:26 -0400
Subject: [PATCH 16/22] Add %D to print device paths
Signed-off-by: Peter Jones <pjones@redhat.com>
---
lib/print.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/lib/print.c b/lib/print.c
index ed79c43825b..35e43c03db5 100644
--- a/lib/print.c
+++ b/lib/print.c
@@ -1005,6 +1005,7 @@ Routine Description:
t - EFI time structure
g - Pointer to GUID
r - EFI status code (result code)
+ D - pointer to Device Path with normal ending.
N - Set output attribute to normal
H - Set output attribute to highlight
@@ -1167,6 +1168,18 @@ Returns:
Item.Item.pw = Item.Scratch;
break;
+ case 'D':
+ {
+ EFI_DEVICE_PATH *dp = va_arg(ps->args, EFI_DEVICE_PATH *);
+ CHAR16 *dpstr = DevicePathToStr(dp);
+ StrnCpy(Item.Scratch, dpstr, PRINT_ITEM_BUFFER_LEN);
+ Item.Scratch[PRINT_ITEM_BUFFER_LEN-1] = L'\0';
+ FreePool(dpstr);
+
+ Item.Item.pw = Item.Scratch;
+ break;
+ }
+
case 'f':
FloatToString (
Item.Scratch,
--
2.14.3

View File

@ -0,0 +1,28 @@
From 290e12e22869d3041816f8938b97a4fa849cdc3c Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Fri, 22 Sep 2017 12:57:23 -0400
Subject: [PATCH 17/22] Make ARCH overrideable on the command line
Signed-off-by: Peter Jones <pjones@redhat.com>
---
Make.defaults | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Make.defaults b/Make.defaults
index a457190aa3a..4aa57ac5f7c 100755
--- a/Make.defaults
+++ b/Make.defaults
@@ -62,8 +62,8 @@ OBJCOPY := $(prefix)$(CROSS_COMPILE)objcopy
# Host/target identification
OS := $(shell uname -s)
-HOSTARCH := $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed -e s,i[3456789]86,ia32, -e 's,armv7.*,arm,' )
-ARCH := $(HOSTARCH)
+HOSTARCH ?= $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed -e s,i[3456789]86,ia32, -e 's,armv7.*,arm,' )
+ARCH ?= $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed -e s,i[3456789]86,ia32, -e 's,armv7.*,arm,' )
# Get ARCH from the compiler if cross compiling
ifneq ($(CROSS_COMPILE),)
--
2.14.3

View File

@ -0,0 +1,446 @@
From f0a9b5d76db9842206faaf7e3d19b13c7e969f6c Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Fri, 22 Sep 2017 15:26:05 -0400
Subject: [PATCH 18/22] apps: Add bltgrid and lfbgrid, and add error checks to
modelist
This adds bltgrid and lfbgrid, which draw checkerboards using GOP's
Blt() and linear framebuffer, respectively, and adds some error checks
to modelist.efi.
Signed-off-by: Peter Jones <pjones@redhat.com>
---
apps/bltgrid.c | 131 +++++++++++++++++++++++++++++++++++++++++++
apps/lfbgrid.c | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
apps/modelist.c | 56 +++++++++----------
apps/Makefile | 3 +-
4 files changed, 328 insertions(+), 32 deletions(-)
create mode 100644 apps/bltgrid.c
create mode 100644 apps/lfbgrid.c
diff --git a/apps/bltgrid.c b/apps/bltgrid.c
new file mode 100644
index 00000000000..2adde6a3211
--- /dev/null
+++ b/apps/bltgrid.c
@@ -0,0 +1,131 @@
+#include <efi.h>
+#include <efilib.h>
+
+extern EFI_GUID GraphicsOutputProtocol;
+
+static void
+fill_boxes(UINT32 *PixelBuffer, UINT32 Width, UINT32 Height)
+{
+ UINT32 y, x = 0;
+ /*
+ * This assums BGRR, but it doesn't really matter; we pick red and
+ * green so it'll just be blue/green if the pixel format is backwards.
+ */
+ EFI_GRAPHICS_OUTPUT_BLT_PIXEL Red = {0, 0, 0xff, 0},
+ Green = {0, 0xff, 0, 0},
+ *Color;
+
+ for (y = 0; y < Height; y++) {
+ Color = ((y / 32) % 2 == 0) ? &Red : &Green;
+ for (x = 0; x < Width; x++) {
+ if (x % 32 == 0 && x != 0)
+ Color = (Color == &Red) ? &Green : &Red;
+ PixelBuffer[y * Width + x] = *(UINT32 *)Color;
+ }
+ }
+}
+
+static void
+draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+{
+ int i, imax;
+ EFI_STATUS rc;
+ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info;
+ UINTN NumPixels;
+ UINT32 *PixelBuffer;
+ UINT32 BufferSize;
+
+ if (gop->Mode) {
+ imax = gop->Mode->MaxMode;
+ } else {
+ Print(L"gop->Mode is NULL\n");
+ return;
+ }
+
+ for (i = 0; i < imax; i++) {
+ UINTN SizeOfInfo;
+ rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i, &SizeOfInfo,
+ &info);
+ if (EFI_ERROR(rc) && rc == EFI_NOT_STARTED) {
+ Print(L"gop->QueryMode() returned %r\n", rc);
+ Print(L"Trying to start GOP with SetMode().\n");
+ rc = uefi_call_wrapper(gop->SetMode, 2, gop,
+ gop->Mode ? gop->Mode->Mode : 0);
+ rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i,
+ &SizeOfInfo, &info);
+ }
+
+ if (EFI_ERROR(rc)) {
+ Print(L"%d: Bad response from QueryMode: %r (%d)\n",
+ i, rc, rc);
+ continue;
+ }
+
+ if (CompareMem(info, gop->Mode->Info, sizeof (*info)))
+ continue;
+
+ NumPixels = info->VerticalResolution * info->HorizontalResolution;
+ BufferSize = NumPixels * sizeof(UINT32);
+
+ PixelBuffer = AllocatePool(BufferSize);
+ if (!PixelBuffer) {
+ Print(L"Allocation of 0x%08lx bytes failed.\n",
+ sizeof(UINT32) * NumPixels);
+ return;
+ }
+
+ fill_boxes(PixelBuffer,
+ info->HorizontalResolution, info->VerticalResolution);
+
+ uefi_call_wrapper(gop->Blt, 10, gop,
+ (EFI_GRAPHICS_OUTPUT_BLT_PIXEL *)PixelBuffer,
+ EfiBltBufferToVideo,
+ 0, 0, 0, 0,
+ info->HorizontalResolution,
+ info->VerticalResolution,
+ 0);
+ return;
+ }
+ Print(L"Never found the active video mode?\n");
+}
+
+static EFI_STATUS
+SetWatchdog(UINTN seconds)
+{
+ EFI_STATUS rc;
+ rc = uefi_call_wrapper(BS->SetWatchdogTimer, 4, seconds, 0x1ffff,
+ 0, NULL);
+ if (EFI_ERROR(rc)) {
+ CHAR16 Buffer[64];
+ StatusToString(Buffer, rc);
+ Print(L"Bad response from QueryMode: %s (%d)\n", Buffer, rc);
+ }
+ return rc;
+}
+
+EFI_STATUS
+efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
+{
+ EFI_STATUS rc;
+ EFI_GRAPHICS_OUTPUT_PROTOCOL *gop;
+
+ InitializeLib(image_handle, systab);
+
+ SetWatchdog(10);
+
+ rc = LibLocateProtocol(&GraphicsOutputProtocol, (void **)&gop);
+ if (EFI_ERROR(rc)) {
+ Print(L"Could not locate GOP: %r\n", rc);
+ return rc;
+ }
+
+ if (!gop) {
+ Print(L"LocateProtocol(GOP, &gop) returned %r but GOP is NULL\n", rc);
+ return EFI_UNSUPPORTED;
+ }
+
+ draw_boxes(gop);
+
+ SetWatchdog(0);
+ return EFI_SUCCESS;
+}
diff --git a/apps/lfbgrid.c b/apps/lfbgrid.c
new file mode 100644
index 00000000000..53a255afbb9
--- /dev/null
+++ b/apps/lfbgrid.c
@@ -0,0 +1,170 @@
+#include <efi.h>
+#include <efilib.h>
+
+extern EFI_GUID GraphicsOutputProtocol;
+
+#define be32_to_cpu(x) __builtin_bswap32(x)
+
+static void
+fill_boxes(UINT32 *PixelBuffer, UINT32 Width, UINT32 Height, UINT32 Pitch,
+ EFI_GRAPHICS_PIXEL_FORMAT Format, EFI_PIXEL_BITMASK Info )
+{
+ UINT32 Red, Green;
+ UINT32 y, x, color;
+
+ switch(Format) {
+ case PixelRedGreenBlueReserved8BitPerColor:
+ Red = be32_to_cpu(0xff000000);
+ Green = be32_to_cpu(0x00ff0000);
+ break;
+ case PixelBlueGreenRedReserved8BitPerColor:
+ Red = be32_to_cpu(0x0000ff00);
+ Green = be32_to_cpu(0x00ff0000);
+ break;
+ case PixelBitMask:
+ Red = Info.RedMask;
+ Green = Info.GreenMask;
+ break;
+ case PixelBltOnly:
+ return;
+ default:
+ Print(L"Invalid pixel format\n");
+ return;
+ }
+
+ for (y = 0; y < Height; y++) {
+ color = ((y / 32) % 2 == 0) ? Red : Green;
+ for (x = 0; x < Width; x++) {
+ if (x % 32 == 0 && x != 0)
+ color = (color == Red) ? Green : Red;
+ PixelBuffer[y * Pitch + x] = color;
+ }
+ }
+}
+
+static void
+draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
+{
+ int i, imax;
+ EFI_STATUS rc;
+ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info;
+ UINTN NumPixels;
+ UINT32 *PixelBuffer;
+ UINT32 CopySize, BufferSize;
+#if defined(__x86_64__) || defined(__aarch64__)
+ UINT64 FrameBufferAddr;
+#elif defined(__i386__) || defined(__arm__)
+ UINT32 FrameBufferAddr;
+#else
+#error YOUR ARCH HERE
+#endif
+
+ if (gop->Mode) {
+ imax = gop->Mode->MaxMode;
+ } else {
+ Print(L"gop->Mode is NULL\n");
+ return;
+ }
+
+ for (i = 0; i < imax; i++) {
+ UINTN SizeOfInfo;
+ rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i, &SizeOfInfo,
+ &info);
+ if (EFI_ERROR(rc) && rc == EFI_NOT_STARTED) {
+ Print(L"gop->QueryMode() returned %r\n", rc);
+ Print(L"Trying to start GOP with SetMode().\n");
+ rc = uefi_call_wrapper(gop->SetMode, 2, gop,
+ gop->Mode ? gop->Mode->Mode : 0);
+ rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i,
+ &SizeOfInfo, &info);
+ }
+
+ if (EFI_ERROR(rc)) {
+ Print(L"%d: Bad response from QueryMode: %r (%d)\n",
+ i, rc, rc);
+ continue;
+ }
+
+ if (CompareMem(info, gop->Mode->Info, sizeof (*info)))
+ continue;
+
+ NumPixels = info->VerticalResolution * info->PixelsPerScanLine;
+ BufferSize = NumPixels * sizeof(UINT32);
+ if (BufferSize == gop->Mode->FrameBufferSize) {
+ CopySize = BufferSize;
+ } else {
+ CopySize = BufferSize < gop->Mode->FrameBufferSize ?
+ BufferSize : gop->Mode->FrameBufferSize;
+ Print(L"height * pitch * pixelsize = %lu buf fb size is %lu; using %lu\n",
+ BufferSize, gop->Mode->FrameBufferSize, CopySize);
+ }
+
+ PixelBuffer = AllocatePool(BufferSize);
+ if (!PixelBuffer) {
+ Print(L"Allocation of 0x%08lx bytes failed.\n",
+ sizeof(UINT32) * NumPixels);
+ return;
+ }
+
+ fill_boxes(PixelBuffer, info->HorizontalResolution,
+ info->VerticalResolution, info->PixelsPerScanLine,
+ info->PixelFormat, info->PixelInformation);
+
+ if (info->PixelFormat == PixelBltOnly) {
+ Print(L"No linear framebuffer on this device.\n");
+ return;
+ }
+#if defined(__x86_64__) || defined(__aarch64__)
+ FrameBufferAddr = (UINT64)gop->Mode->FrameBufferBase;
+#elif defined(__i386__) || defined(__arm__)
+ FrameBufferAddr = (UINT32)(UINT64)gop->Mode->FrameBufferBase;
+#else
+#error YOUR ARCH HERE
+#endif
+
+ CopyMem((VOID *)FrameBufferAddr, PixelBuffer, CopySize);
+ return;
+ }
+ Print(L"Never found the active video mode?\n");
+}
+
+static EFI_STATUS
+SetWatchdog(UINTN seconds)
+{
+ EFI_STATUS rc;
+ rc = uefi_call_wrapper(BS->SetWatchdogTimer, 4, seconds, 0x1ffff,
+ 0, NULL);
+ if (EFI_ERROR(rc)) {
+ CHAR16 Buffer[64];
+ StatusToString(Buffer, rc);
+ Print(L"Bad response from QueryMode: %s (%d)\n", Buffer, rc);
+ }
+ return rc;
+}
+
+EFI_STATUS
+efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
+{
+ EFI_STATUS rc;
+ EFI_GRAPHICS_OUTPUT_PROTOCOL *gop;
+
+ InitializeLib(image_handle, systab);
+
+ SetWatchdog(10);
+
+ rc = LibLocateProtocol(&GraphicsOutputProtocol, (void **)&gop);
+ if (EFI_ERROR(rc)) {
+ Print(L"Could not locate GOP: %r\n", rc);
+ return rc;
+ }
+
+ if (!gop) {
+ Print(L"LocateProtocol(GOP, &gop) returned %r but GOP is NULL\n", rc);
+ return EFI_UNSUPPORTED;
+ }
+
+ draw_boxes(gop);
+
+ SetWatchdog(0);
+ return EFI_SUCCESS;
+}
diff --git a/apps/modelist.c b/apps/modelist.c
index 8d816d1d9da..26892e1d5f5 100644
--- a/apps/modelist.c
+++ b/apps/modelist.c
@@ -3,57 +3,44 @@
extern EFI_GUID GraphicsOutputProtocol;
-static int memcmp(const void *s1, const void *s2, UINTN n)
-{
- const unsigned char *c1 = s1, *c2 = s2;
- int d = 0;
-
- if (!s1 && !s2)
- return 0;
- if (s1 && !s2)
- return 1;
- if (!s1 && s2)
- return -1;
-
- while (n--) {
- d = (int)*c1++ - (int)*c2++;
- if (d)
- break;
- }
- return d;
-}
-
static void
print_modes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
{
int i, imax;
EFI_STATUS rc;
- imax = gop->Mode->MaxMode;
+ if (gop->Mode) {
+ imax = gop->Mode->MaxMode;
+ Print(L"GOP reports MaxMode %d\n", imax);
+ } else {
+ Print(L"gop->Mode is NULL\n");
+ imax = 1;
+ }
- Print(L"GOP reports MaxMode %d\n", imax);
for (i = 0; i < imax; i++) {
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info;
UINTN SizeOfInfo;
rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i, &SizeOfInfo,
&info);
if (EFI_ERROR(rc) && rc == EFI_NOT_STARTED) {
+ Print(L"gop->QueryMode() returned %r\n", rc);
+ Print(L"Trying to start GOP with SetMode().\n");
rc = uefi_call_wrapper(gop->SetMode, 2, gop,
- gop->Mode->Mode);
+ gop->Mode ? gop->Mode->Mode : 0);
rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i,
&SizeOfInfo, &info);
}
if (EFI_ERROR(rc)) {
- CHAR16 Buffer[64];
- StatusToString(Buffer, rc);
- Print(L"%d: Bad response from QueryMode: %s (%d)\n",
- i, Buffer, rc);
+ Print(L"%d: Bad response from QueryMode: %r (%d)\n",
+ i, rc, rc);
continue;
}
- Print(L"%c%d: %dx%d ", memcmp(info,gop->Mode->Info,sizeof(*info)) == 0 ? '*' : ' ', i,
- info->HorizontalResolution,
- info->VerticalResolution);
+ Print(L"%c%d: %dx%d ",
+ (gop->Mode &&
+ CompareMem(info,gop->Mode->Info,sizeof(*info)) == 0
+ ) ? '*' : ' ',
+ i, info->HorizontalResolution, info->VerticalResolution);
switch(info->PixelFormat) {
case PixelRedGreenBlueReserved8BitPerColor:
Print(L"RGBR");
@@ -104,8 +91,15 @@ efi_main (EFI_HANDLE image_handle, EFI_SYSTEM_TABLE *systab)
SetWatchdog(10);
rc = LibLocateProtocol(&GraphicsOutputProtocol, (void **)&gop);
- if (EFI_ERROR(rc))
+ if (EFI_ERROR(rc)) {
+ Print(L"Could not locate GOP: %r\n", rc);
return rc;
+ }
+
+ if (!gop) {
+ Print(L"LocateProtocol(GOP, &gop) returned %r but GOP is NULL\n", rc);
+ return EFI_UNSUPPORTED;
+ }
print_modes(gop);
diff --git a/apps/Makefile b/apps/Makefile
index 5fffd4254c8..4e26444c469 100644
--- a/apps/Makefile
+++ b/apps/Makefile
@@ -61,7 +61,8 @@ LOADLIBES += -T $(LDSCRIPT)
TARGET_APPS = t.efi t2.efi t3.efi t4.efi t5.efi t6.efi \
printenv.efi t7.efi t8.efi tcc.efi modelist.efi \
route80h.efi drv0_use.efi AllocPages.efi exit.efi \
- FreePages.efi setjmp.efi debughook.efi debughook.efi.debug
+ FreePages.efi setjmp.efi debughook.efi debughook.efi.debug \
+ bltgrid.efi lfbgrid.efi
TARGET_BSDRIVERS = drv0.efi
TARGET_RTDRIVERS =
--
2.14.3

View File

@ -1,14 +1,14 @@
From 6671a712db5c4dfecd4e7026057a99d9b1c4fe5e Mon Sep 17 00:00:00 2001
From caef829abc431a694d6e231705eb013366658865 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Tue, 7 Mar 2017 10:11:19 -0500
Subject: [PATCH] Nerf -Werror=pragma away
Subject: [PATCH 19/22] Nerf -Werror=pragma away
---
Make.defaults | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Make.defaults b/Make.defaults
index a7778a7..8882701 100755
index 4aa57ac5f7c..ed4b60c2423 100755
--- a/Make.defaults
+++ b/Make.defaults
@@ -87,6 +87,8 @@ OBJDIR := $(TOPDIR)/$(ARCH)
@ -21,5 +21,5 @@ index a7778a7..8882701 100755
CFLAGS += -mfixed-range=f32-f127
endif
--
2.9.3
2.14.3

View File

@ -1,14 +1,14 @@
From bbd1ee0379327a58e042d288e371f314b7df2d55 Mon Sep 17 00:00:00 2001
From 31fc2f9972aca147948a32ed6beba0d20e1e76e8 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Wed, 15 Mar 2017 17:33:39 -0400
Subject: [PATCH] Make ia32 use our own div asm on gnu C as well.
Subject: [PATCH 20/22] Make ia32 use our own div asm on gnu C as well.
---
lib/ia32/math.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/ia32/math.c b/lib/ia32/math.c
index 81f51bf..fce7a8d 100644
index 81f51bf45e4..fce7a8d4875 100644
--- a/lib/ia32/math.c
+++ b/lib/ia32/math.c
@@ -140,7 +140,7 @@ DivU64x32 (
@ -30,5 +30,5 @@ index 81f51bf..fce7a8d 100644
"shll $1, %0\n\t"
"rcll $1, 4%0\n\t"
--
2.12.0
2.14.3

View File

@ -1,7 +1,7 @@
From 0e95c51225b01f0ca79dafd607ae6a3e404db6be Mon Sep 17 00:00:00 2001
From 5cbaa179424c239263cf460db1cd5e19db856df2 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Tue, 28 Mar 2017 17:59:55 -0400
Subject: [PATCH 13/13] Call ar in deterministic mode.
Subject: [PATCH 21/22] Call ar in deterministic mode.
We need the x86_64 and i686 builds of .a's to be the same, and that
means we need to not have timestamps. Also force the timestamps on disk
@ -51,14 +51,14 @@ Related: rhbz#1310782
Signed-off-by: Peter Jones <pjones@redhat.com>
---
Make.defaults | 2 +-
1 files changed, 1 insertions(+), 1 deletion(-)
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Make.defaults b/Make.defaults
index aa15c73..8f36365 100755
index ed4b60c2423..ba743f17893 100755
--- a/Make.defaults
+++ b/Make.defaults
@@ -167,7 +167,7 @@ CFLAGS += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \
$(if $(findstring clang,$(CC)),-Wno-unknown-pragmas,)
@@ -177,7 +177,7 @@ CFLAGS += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \
$(if $(findstring gcc,$(CC)),-fno-merge-all-constants,)
endif
-ARFLAGS += -U
@ -67,5 +67,5 @@ index aa15c73..8f36365 100755
LDFLAGS += -nostdlib --warn-common --no-undefined --fatal-warnings \
--build-id=sha1
--
2.9.3
2.14.3

View File

@ -0,0 +1,115 @@
From 1d249b810b22c601c4b9e3a684443be841cd1b56 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Mon, 8 Jan 2018 16:50:34 -0500
Subject: [PATCH 22/22] Add debug helper applications
---
apps/setdbg.c | 37 +++++++++++++++++++++++++++++++++++++
apps/unsetdbg.c | 37 +++++++++++++++++++++++++++++++++++++
apps/Makefile | 2 +-
3 files changed, 75 insertions(+), 1 deletion(-)
create mode 100644 apps/setdbg.c
create mode 100644 apps/unsetdbg.c
diff --git a/apps/setdbg.c b/apps/setdbg.c
new file mode 100644
index 00000000000..897140ec342
--- /dev/null
+++ b/apps/setdbg.c
@@ -0,0 +1,37 @@
+#include <efi.h>
+#include <efilib.h>
+
+EFI_GUID GRUB_EFI_GRUB_VARIABLE_GUID = {0x91376aff,0xcba6,0x42be,{0x94,0x9d,0x06,0xfd,0xe8,0x11,0x28,0xe8}};
+EFI_GUID SHIM_GUID = {0x605dab50,0xe046,0x4300,{0xab,0xb6,0x3d,0xd8,0x10,0xdd,0x8b,0x23}};
+
+char grubenv[] = "# GRUB Environment Block\n\
+debug=tcp,http,net\n\
+####################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################";
+
+EFI_STATUS
+efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+{
+ EFI_STATUS status;
+ InitializeLib(image, systab);
+#if 0
+ UINT8 data = 1;
+
+ status = RT->SetVariable(L"SHIM_DEBUG", &SHIM_GUID,
+ EFI_VARIABLE_NON_VOLATILE |
+ EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ EFI_VARIABLE_RUNTIME_ACCESS,
+ sizeof(data), &data);
+ if (EFI_ERROR(status))
+ Print(L"SetVariable failed: %r\n", status);
+#endif
+
+ status = RT->SetVariable(L"GRUB_ENV", &SHIM_GUID,
+ EFI_VARIABLE_NON_VOLATILE |
+ EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ EFI_VARIABLE_RUNTIME_ACCESS,
+ sizeof(grubenv)-1, grubenv);
+ if (EFI_ERROR(status))
+ Print(L"SetVariable(GRUB_ENV) failed: %r\n", status);
+
+ return EFI_SUCCESS;
+}
diff --git a/apps/unsetdbg.c b/apps/unsetdbg.c
new file mode 100644
index 00000000000..731e09b1343
--- /dev/null
+++ b/apps/unsetdbg.c
@@ -0,0 +1,37 @@
+#include <efi.h>
+#include <efilib.h>
+
+EFI_GUID GRUB_EFI_GRUB_VARIABLE_GUID = {0x91376aff,0xcba6,0x42be,{0x94,0x9d,0x06,0xfd,0xe8,0x11,0x28,0xe8}};
+EFI_GUID SHIM_GUID = {0x605dab50,0xe046,0x4300,{0xab,0xb6,0x3d,0xd8,0x10,0xdd,0x8b,0x23}};
+
+char grubenv[] = "# GRUB Environment Block\n\
+debug=all\n\
+#############################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################";
+
+EFI_STATUS
+efi_main (EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
+{
+ EFI_STATUS status;
+ UINT8 data = 1;
+ InitializeLib(image, systab);
+
+ status = RT->SetVariable(L"SHIM_DEBUG", &SHIM_GUID,
+ EFI_VARIABLE_NON_VOLATILE |
+ EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ EFI_VARIABLE_RUNTIME_ACCESS,
+ 0, &data);
+ if (EFI_ERROR(status))
+ Print(L"SetVariable failed: %r\n", status);
+
+#if 0
+ status = RT->SetVariable(L"GRUB_ENV", &SHIM_GUID,
+ EFI_VARIABLE_NON_VOLATILE |
+ EFI_VARIABLE_BOOTSERVICE_ACCESS |
+ EFI_VARIABLE_RUNTIME_ACCESS,
+ sizeof(grubenv)-1, grubenv);
+ if (EFI_ERROR(status))
+ Print(L"SetVariable(GRUB_ENV) failed: %r\n", status);
+#endif
+
+ return EFI_SUCCESS;
+}
diff --git a/apps/Makefile b/apps/Makefile
index 4e26444c469..4e1b69a38c8 100644
--- a/apps/Makefile
+++ b/apps/Makefile
@@ -62,7 +62,7 @@ TARGET_APPS = t.efi t2.efi t3.efi t4.efi t5.efi t6.efi \
printenv.efi t7.efi t8.efi tcc.efi modelist.efi \
route80h.efi drv0_use.efi AllocPages.efi exit.efi \
FreePages.efi setjmp.efi debughook.efi debughook.efi.debug \
- bltgrid.efi lfbgrid.efi
+ bltgrid.efi lfbgrid.efi setdbg.efi unsetdbg.efi
TARGET_BSDRIVERS = drv0.efi
TARGET_RTDRIVERS =
--
2.14.3

View File

@ -1,7 +1,8 @@
Summary: Development Libraries and headers for EFI
Name: gnu-efi
Version: 3.0.5
Release: 12%{?dist}%{?buildid}
Version: 3.0.7
%global tarball_version 3.0.6
Release: 1%{?dist}%{?buildid}
Epoch: 1
Group: Development/System
License: BSD
@ -9,28 +10,39 @@ URL: ftp://ftp.hpl.hp.com/pub/linux-ia64
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
BuildRequires: git
%ifarch x86_64
BuildRequires: glibc32
# So... in some build environments, glibc32 provides some headers. In
# others, glibc-devel.i686 does. They have no non-file provides in common.
#BuildRequires: glibc32
#BuildRequires: glibc-devel(x86-32)
BuildRequires: /usr/include/gnu/stubs-32.h
%endif
Source: http://superb-dca2.dl.sourceforge.net/project/gnu-efi/gnu-efi-%{version}.tar.bz2
Source: http://superb-dca2.dl.sourceforge.net/project/gnu-efi/gnu-efi-%{tarball_version}.tar.bz2
# dammit, rpmlint, shut up.
%define lib %{nil}lib%{nil}
Patch0001: 0001-Mark-our-explicit-fall-through-so-Wextra-will-work-i.patch
Patch0002: 0002-Fix-some-types-gcc-doesn-t-like.patch
Patch0003: 0003-Fix-arm-build-paths-in-the-makefile.patch
Patch0004: 0004-Work-around-Werror-maybe-uninitialized-not-being-ver.patch
Patch0005: 0005-Fix-a-sign-error-in-the-debughook-example-app.patch
Patch0006: 0006-Fix-typedef-of-EFI_PXE_BASE_CODE.patch
Patch0007: 0007-make-clang-not-complain-about-fno-merge-constants.patch
Patch0008: 0008-Fix-another-place-clang-complains-about.patch
Patch0009: 0009-route80h-remove-some-dead-code.patch
Patch0010: 0010-Make-clang-not-complain-about-the-debughook-s-optimi.patch
Patch0011: 0011-Nerf-Werror-pragma-away.patch
Patch0012: 0012-Make-ia32-use-our-own-div-asm-on-gnu-C-as-well.patch
Patch0013: 0013-Call-ar-in-deterministic-mode.patch
Patch0014: 0001-arm64-efi-remove-pointless-dummy-.reloc-section.patch
Patch0001: 0001-PATCH-Disable-AVX-instruction-set-on-IA32-and-x86_64.patch
Patch0002: 0002-Use-ARFLAGS-when-invoking-ar.patch
Patch0003: 0003-Stripped-diff-for-makefile.patch
Patch0004: 0004-Make-sure-stdint.h-is-always-used-with-MSVC-on-ARM-A.patch
Patch0005: 0005-Add-EFI_DRIVER_ENTRY_POINT-support-for-MSVC-ARM64.patch
Patch0006: 0006-Move-memcpy-memset-definition-to-global-init.c.patch
Patch0007: 0007-Bump-revision-from-VERSION-3.0.6-to-VERSION-3.0.7.patch
Patch0008: 0008-Fix-some-types-gcc-doesn-t-like.patch
Patch0009: 0009-Fix-arm-build-paths-in-the-makefile.patch
Patch0010: 0010-Work-around-Werror-maybe-uninitialized-not-being-ver.patch
Patch0011: 0011-Fix-a-sign-error-in-the-debughook-example-app.patch
Patch0012: 0012-Fix-typedef-of-EFI_PXE_BASE_CODE.patch
Patch0013: 0013-make-clang-not-complain-about-fno-merge-all-constant.patch
Patch0014: 0014-Fix-another-place-clang-complains-about.patch
Patch0015: 0015-gnu-efi-add-some-more-common-string-functions.patch
Patch0016: 0016-Add-D-to-print-device-paths.patch
Patch0017: 0017-Make-ARCH-overrideable-on-the-command-line.patch
Patch0018: 0018-apps-Add-bltgrid-and-lfbgrid-and-add-error-checks-to.patch
Patch0019: 0019-Nerf-Werror-pragma-away.patch
Patch0020: 0020-Make-ia32-use-our-own-div-asm-on-gnu-C-as-well.patch
Patch0021: 0021-Call-ar-in-deterministic-mode.patch
Patch0022: 0022-Add-debug-helper-applications.patch
%define debug_package %{nil}
@ -86,7 +98,7 @@ Group: Applications/System
This package contains utilties for debugging and developing EFI systems.
%prep
%setup -q -n gnu-efi-%{version}
%setup -q -n gnu-efi-%{tarball_version}
git init
git config user.email "gnu-efi-owner@fedoraproject.org"
git config user.name "Fedora Ninjas"
@ -137,6 +149,9 @@ mv ia32/apps/{route80h.efi,modelist.efi} %{buildroot}/boot/efi/EFI/%{efidir}/ia3
%attr(0644,root,root) /boot/efi/EFI/%{efidir}/*/*.efi
%changelog
* Tue Mar 13 2018 Peter Jones <pjones@redhat.com> - 3.0.7-1
- Update to 3.0.7 (from git) and add some pending patches we need.
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.0.5-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild

View File

@ -1 +1 @@
SHA512 (gnu-efi-3.0.5.tar.bz2) = 848ea9b0a9b900a237d04c2fe95fbaaa08d786c8abe4cbfdca9b666a5cd955ad1097668561aa90899b654a606ff822509fb23b6aeafce69bc4407e5b4547fdcf
SHA512 (gnu-efi-3.0.6.tar.bz2) = f1b17766d8ae000c0177ea2126d87883f254ab01ac020e4bfaa9ad2d3d60a66d07b6237d9842e5989c4da3fd23152b5c592ef863fdc9806901f43c43582a2258