diff --git a/0001-PATCH-Disable-AVX-instruction-set-on-IA32-and-x86_64.patch b/0001-PATCH-Disable-AVX-instruction-set-on-IA32-and-x86_64.patch index 6511d83..bb0cdc7 100644 --- a/0001-PATCH-Disable-AVX-instruction-set-on-IA32-and-x86_64.patch +++ b/0001-PATCH-Disable-AVX-instruction-set-on-IA32-and-x86_64.patch @@ -1,7 +1,7 @@ From 99d94682de590719f9333fcf091910a9581b44c0 Mon Sep 17 00:00:00 2001 From: Nigel Croxon Date: Thu, 13 Jul 2017 08:43:16 -0400 -Subject: [PATCH 01/25] [PATCH] Disable AVX instruction set on IA32 and x86_64 +Subject: [PATCH 1/2] [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 diff --git a/0002-Use-ARFLAGS-when-invoking-ar.patch b/0002-Use-ARFLAGS-when-invoking-ar.patch deleted file mode 100644 index 86f565f..0000000 --- a/0002-Use-ARFLAGS-when-invoking-ar.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 08a46615c70f5af195443fcf5d0fd425fa329096 Mon Sep 17 00:00:00 2001 -From: Nigel Croxon -Date: Mon, 7 Aug 2017 13:32:54 -0400 -Subject: [PATCH 02/25] 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 -Signed-off-by: Nigel Croxon ---- - 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.15.0 - diff --git a/0026-Use-EFI-canonical-names-everywhere-the-compiler-does.patch b/0002-Use-EFI-canonical-names-everywhere-the-compiler-does.patch similarity index 99% rename from 0026-Use-EFI-canonical-names-everywhere-the-compiler-does.patch rename to 0002-Use-EFI-canonical-names-everywhere-the-compiler-does.patch index b1a8732..1764a7c 100644 --- a/0026-Use-EFI-canonical-names-everywhere-the-compiler-does.patch +++ b/0002-Use-EFI-canonical-names-everywhere-the-compiler-does.patch @@ -1,7 +1,7 @@ From a92a9ed2db67c415c7bad5a9b041aca4efc33cf2 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Tue, 1 May 2018 14:12:01 -0400 -Subject: [PATCH] Use EFI canonical names everywhere the compiler doesn't care. +Subject: [PATCH 2/2] Use EFI canonical names everywhere the compiler doesn't care. Always use x64/X64 and aa64/AA64 unless the toolchain cares about "x86_64" or whatnot. diff --git a/0003-Stripped-diff-for-makefile.patch b/0003-Stripped-diff-for-makefile.patch deleted file mode 100644 index 9b53f68..0000000 --- a/0003-Stripped-diff-for-makefile.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 15bcddc996694c904b3848c83031da5cd3a4719e Mon Sep 17 00:00:00 2001 -From: Nigel Croxon -Date: Mon, 6 Nov 2017 09:06:31 -0500 -Subject: [PATCH 03/25] Stripped diff for makefile - -This patch allows one to run make outside the source tree -with make -f . - -Signed-off-by: wolfra -Signed-off-by: Nigel Croxon ---- - 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.15.0 - diff --git a/0004-Make-sure-stdint.h-is-always-used-with-MSVC-on-ARM-A.patch b/0004-Make-sure-stdint.h-is-always-used-with-MSVC-on-ARM-A.patch deleted file mode 100644 index d9c242d..0000000 --- a/0004-Make-sure-stdint.h-is-always-used-with-MSVC-on-ARM-A.patch +++ /dev/null @@ -1,94 +0,0 @@ -From 39ce220cb6fde14bedf2ef61695f3d20726e41ef Mon Sep 17 00:00:00 2001 -From: Nigel Croxon -Date: Mon, 6 Nov 2017 09:26:05 -0500 -Subject: [PATCH 04/25] 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 -Signed-off-by: Nigel Croxon ---- - 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.15.0 - diff --git a/0005-Add-EFI_DRIVER_ENTRY_POINT-support-for-MSVC-ARM64.patch b/0005-Add-EFI_DRIVER_ENTRY_POINT-support-for-MSVC-ARM64.patch deleted file mode 100644 index ba6608e..0000000 --- a/0005-Add-EFI_DRIVER_ENTRY_POINT-support-for-MSVC-ARM64.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 787b53a66cbbec6b10d47264b9eea9b24bc4e34c Mon Sep 17 00:00:00 2001 -From: Nigel Croxon -Date: Mon, 6 Nov 2017 09:34:14 -0500 -Subject: [PATCH 05/25] Add EFI_DRIVER_ENTRY_POINT support for MSVC/ARM64 - -Similar to what we do for other MSVC architectures. - -Signed-off-by: Pete Batard -Signed-off-by: Nigel Croxon ---- - 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.15.0 - diff --git a/0006-Move-memcpy-memset-definition-to-global-init.c.patch b/0006-Move-memcpy-memset-definition-to-global-init.c.patch deleted file mode 100644 index 107ddc5..0000000 --- a/0006-Move-memcpy-memset-definition-to-global-init.c.patch +++ /dev/null @@ -1,215 +0,0 @@ -From b1d426ce67cbeaa1a8ec7d9b8d0d8071ae4563b4 Mon Sep 17 00:00:00 2001 -From: Nigel Croxon -Date: Mon, 6 Nov 2017 09:38:38 -0500 -Subject: [PATCH 06/25] 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 -Signed-off-by: Nigel Croxon ---- - 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.15.0 - diff --git a/0007-Bump-revision-from-VERSION-3.0.6-to-VERSION-3.0.7.patch b/0007-Bump-revision-from-VERSION-3.0.6-to-VERSION-3.0.7.patch deleted file mode 100644 index 485dc13..0000000 --- a/0007-Bump-revision-from-VERSION-3.0.6-to-VERSION-3.0.7.patch +++ /dev/null @@ -1,26 +0,0 @@ -From f99001cd7d4c27d1b365b70ac45b14f84ee46237 Mon Sep 17 00:00:00 2001 -From: Nigel Croxon -Date: Mon, 6 Nov 2017 09:44:21 -0500 -Subject: [PATCH 07/25] Bump revision from VERSION = 3.0.6 to VERSION = 3.0.7 - -Signed-off-by: Nigel Croxon ---- - 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.15.0 - diff --git a/0008-Currently-we-have-DivU64x32-on-ia32-but-it-tries-to-.patch b/0008-Currently-we-have-DivU64x32-on-ia32-but-it-tries-to-.patch deleted file mode 100644 index 0b7d2ef..0000000 --- a/0008-Currently-we-have-DivU64x32-on-ia32-but-it-tries-to-.patch +++ /dev/null @@ -1,38 +0,0 @@ -From d039cd620b8a270d9b231691c9b31d6824f18c08 Mon Sep 17 00:00:00 2001 -From: Nigel Croxon -Date: Wed, 10 Jan 2018 10:28:36 -0500 -Subject: [PATCH 08/25] Currently we have DivU64x32 on ia32, but it tries to - call __umoddi3 and __udivdi3 from libgcc, which we don't have. This fixes it - to use our implementation in that case. - -Signed-off-by: Peter Jones -Signed-off-by: Nigel Croxon ---- - 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 81f51bf45e4..fce7a8d4875 100644 ---- a/lib/ia32/math.c -+++ b/lib/ia32/math.c -@@ -140,7 +140,7 @@ DivU64x32 ( - // divide 64bit by 32bit and get a 64bit result - // N.B. only works for 31bit divisors!! - { --#if defined(__GNUC__) && !defined(__MINGW32__) -+#if 0 && defined(__GNUC__) && !defined(__MINGW32__) - if (Remainder) - *Remainder = Dividend % Divisor; - return Dividend / Divisor; -@@ -157,7 +157,7 @@ DivU64x32 ( - - Rem = 0; - for (bit=0; bit < 64; bit++) { --#ifdef __MINGW32__ -+#if defined(__GNUC__) || defined(__MINGW32__) - asm ( - "shll $1, %0\n\t" - "rcll $1, 4%0\n\t" --- -2.15.0 - diff --git a/0009-gnuefi-preserve-.gnu.hash-sections-unbreaks-elilo-on.patch b/0009-gnuefi-preserve-.gnu.hash-sections-unbreaks-elilo-on.patch deleted file mode 100644 index 2b0ad6e..0000000 --- a/0009-gnuefi-preserve-.gnu.hash-sections-unbreaks-elilo-on.patch +++ /dev/null @@ -1,148 +0,0 @@ -From 2cc0b085fb82e80d43cc08c8376dff9f9532a72d Mon Sep 17 00:00:00 2001 -From: Sergei Trofimovich -Date: Sat, 27 Jan 2018 20:29:05 +0000 -Subject: [PATCH 09/25] gnuefi: preserve .gnu.hash sections (unbreaks elilo on - IA-64) - -Gentoo has slightly modified linker defaults: --hash-style=gnu -This means all ELF files in system have '.gnu.hash' section -but no '.hash' section. - -gnuefi's ldscript did not account for it and as a result -one symbol 'ImageBase' did not resolve locally for elilo.so -and caused 'elilo' to fail to load by ia64 EFI: - Loading.: Gentoo (try new elilo) - ImageAddress: pointer is outside of image - ImageAddress: pointer is outside of image - -Those two relocations come from crt0-efi-ia64.S PE32 entry point -fdescr: - -``` - #define IMAGE_REL_BASED_DIR64<->10 - .section .reloc, "a" - data4 _start_plabel // Page RVA - data4 12 // Block Size (2*4+2*2) - data2 (IMAGE_REL_BASED_DIR64<<12) + 0 // reloc for plabel's entry point - data2 (IMAGE_REL_BASED_DIR64<<12) + 8 // reloc for plabel's global pointer -``` - -These refer ImageBase. - -The change adds '.gnu.hash' collection (follows existing '.hash' -collection). - -Tested on IA-64 by successfully booting elilo-3.16. - -Bug: https://bugs.gentoo.org/575300 -Signed-off-by: Sergei Trofimovich ---- - README.gnuefi | 8 +++++++- - gnuefi/elf_ia32_efi.lds | 4 +++- - gnuefi/elf_ia32_fbsd_efi.lds | 4 +++- - gnuefi/elf_ia64_efi.lds | 4 +++- - gnuefi/elf_x86_64_efi.lds | 4 +++- - gnuefi/elf_x86_64_fbsd_efi.lds | 4 +++- - 6 files changed, 22 insertions(+), 6 deletions(-) - -diff --git a/README.gnuefi b/README.gnuefi -index a7feec0ba28..512698c28b4 100644 ---- a/README.gnuefi -+++ b/README.gnuefi -@@ -231,11 +231,17 @@ and page sized.These eight sections are used to group together the much - greater number of sections that are typically present in ELF object files. - Specifically: - -- .hash -+ .hash (and/or .gnu.hash) - Collects the ELF .hash info (this section _must_ be the first - section in order to build a shared object file; the section is - not actually loaded or used at runtime). - -+ GNU binutils provides a mechanism to generate different hash info -+ via --hash-style= option. In this case output -+ shared object will contain .hash section, .gnu.hash section or -+ both. In order to generate correct output linker script preserves -+ both types of hash sections. -+ - .text - Collects all sections containing executable code. - -diff --git a/gnuefi/elf_ia32_efi.lds b/gnuefi/elf_ia32_efi.lds -index 6cc4ce1b8c7..f27fe5fc6e6 100644 ---- a/gnuefi/elf_ia32_efi.lds -+++ b/gnuefi/elf_ia32_efi.lds -@@ -5,7 +5,9 @@ SECTIONS - { - . = 0; - ImageBase = .; -- .hash : { *(.hash) } /* this MUST come first! */ -+ /* .hash and/or .gnu.hash MUST come first! */ -+ .hash : { *(.hash) } -+ .gnu.hash : { *(.gnu.hash) } - . = ALIGN(4096); - .text : - { -diff --git a/gnuefi/elf_ia32_fbsd_efi.lds b/gnuefi/elf_ia32_fbsd_efi.lds -index 77d6fade1a5..cd309e24f7f 100644 ---- a/gnuefi/elf_ia32_fbsd_efi.lds -+++ b/gnuefi/elf_ia32_fbsd_efi.lds -@@ -5,7 +5,9 @@ SECTIONS - { - . = 0; - ImageBase = .; -- .hash : { *(.hash) } /* this MUST come first! */ -+ /* .hash and/or .gnu.hash MUST come first! */ -+ .hash : { *(.hash) } -+ .gnu.hash : { *(.gnu.hash) } - . = ALIGN(4096); - .text : - { -diff --git a/gnuefi/elf_ia64_efi.lds b/gnuefi/elf_ia64_efi.lds -index baca9623b57..190792a0c94 100644 ---- a/gnuefi/elf_ia64_efi.lds -+++ b/gnuefi/elf_ia64_efi.lds -@@ -5,7 +5,9 @@ SECTIONS - { - . = 0; - ImageBase = .; -- .hash : { *(.hash) } /* this MUST come first! */ -+ /* .hash and/or .gnu.hash MUST come first! */ -+ .hash : { *(.hash) } -+ .gnu.hash : { *(.gnu.hash) } - . = ALIGN(4096); - .text : - { -diff --git a/gnuefi/elf_x86_64_efi.lds b/gnuefi/elf_x86_64_efi.lds -index 942d1f3eff7..7be59023510 100644 ---- a/gnuefi/elf_x86_64_efi.lds -+++ b/gnuefi/elf_x86_64_efi.lds -@@ -6,7 +6,9 @@ SECTIONS - { - . = 0; - ImageBase = .; -- .hash : { *(.hash) } /* this MUST come first! */ -+ /* .hash and/or .gnu.hash MUST come first! */ -+ .hash : { *(.hash) } -+ .gnu.hash : { *(.gnu.hash) } - . = ALIGN(4096); - .eh_frame : - { -diff --git a/gnuefi/elf_x86_64_fbsd_efi.lds b/gnuefi/elf_x86_64_fbsd_efi.lds -index 6fd2031c13b..fe1f3342cae 100644 ---- a/gnuefi/elf_x86_64_fbsd_efi.lds -+++ b/gnuefi/elf_x86_64_fbsd_efi.lds -@@ -6,7 +6,9 @@ SECTIONS - { - . = 0; - ImageBase = .; -- .hash : { *(.hash) } /* this MUST come first! */ -+ /* .hash and/or .gnu.hash MUST come first! */ -+ .hash : { *(.hash) } -+ .gnu.hash : { *(.gnu.hash) } - . = ALIGN(4096); - .eh_frame : - { --- -2.15.0 - diff --git a/0010-gnu-efi-fix-lib-ia64-setjmp.S-IA-64-build-failure.patch b/0010-gnu-efi-fix-lib-ia64-setjmp.S-IA-64-build-failure.patch deleted file mode 100644 index 16286a4..0000000 --- a/0010-gnu-efi-fix-lib-ia64-setjmp.S-IA-64-build-failure.patch +++ /dev/null @@ -1,161 +0,0 @@ -From 0e6995a96b0f5867c8d85fbd251cfbc295a3fc4d Mon Sep 17 00:00:00 2001 -From: Sergei Trofimovich -Date: Sun, 28 Jan 2018 16:44:21 +0000 -Subject: [PATCH 10/25] gnu-efi: fix lib/ia64/setjmp.S IA-64 build failure - -The build failed as: - lib/ia64/setjmp.S:171: Error: Unknown opcode `ldf.nt1 f26=[r10],8' - lib/ia64/setjmp.S:178: Error: Operand 1 of `ldf.fill.nt1' should be a floating-point register - -The change syncs longjmp definition with - edk2/EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/Library/BaseLib/Ipf/setjmp.s -pulling in: -- branch in the end of function -- registers used wrong instruction for float restore - -Signed-off-by: Sergei Trofimovich ---- - lib/ia64/setjmp.S | 61 +++++++++++++++++++++++++++---------------------------- - 1 file changed, 30 insertions(+), 31 deletions(-) - -diff --git a/lib/ia64/setjmp.S b/lib/ia64/setjmp.S -index c806fbc82b6..bbb29d8b8f5 100644 ---- a/lib/ia64/setjmp.S -+++ b/lib/ia64/setjmp.S -@@ -16,11 +16,11 @@ BASIS, - .globl setjmp - .type setjmp, @function - setjmp: -- alloc loc = ar.pfs, 1, 2, 1, 0 -+ alloc loc0 = ar.pfs, 1, 2, 1, 0 - ;; - mov r14 = ar.unat - mov r15 = ar.bsp -- add r10 = 0x10 * 20, in0 -+ add r10 = 0x10*20, in0 - ;; - stf.spill.nta [in0] = f2, 0x10 - st8.spill.nta [r10] = r4, 8 -@@ -98,29 +98,25 @@ setjmp: - - .globl longjmp - .type longjmp, @function -- .regstk -+ .regstk 2, 0, 0, 0 - longjmp: -- add r10 = 0x10 * 20 + 8*14, in0 -- movl r2 = ~(((1<<14) - 1) << 16) | 3) -+ add r10 = 0x10*20 + 8*14, in0 -+ movl r2 = ~((((1<<14) - 1) << 16) | 3) - ;; - ld8.nt1 r14 = [r10], -8*2 - mov r15 = ar.bspstore - ;; - ld8.nt1 r17 = [r10], -8 - mov r16 = ar.rsc -- cmp.leu p6 = r14, r15 -+ cmp.leu p6 = r14, r15 - ;; - ld8.nt1 r18 = [r10], -8 - ld8.nt1 r25 = [r10], -8 -- and r2 = r16, r2 -+ and r2 = r16, r2 - ;; -- ldf.fill.nt1 f2 = [in0], 0x10 -+ ldf.fill.nt1 f2 = [in0], 0x10 - ld8.nt1 r24 = [r10], -8 -- mov b5 = r25 -- ;; -- mov ar.rsc = r2 -- ld8.nt1 r23 = [r10], -8 -- mov b5 = r25 -+ mov b5 = r25 - ;; - mov ar.rsc = r2 - ld8.nt1 r23 = [r10], -8 -@@ -137,51 +133,51 @@ _skip_flushrs: - mov r31 = ar.rnat - loadrs - ;; -- ldf.fill.nt1 f4 = [in0], 0x10 -+ ldf.fill.nt1 f4 = [in0], 0x10 - ld8.nt1 r22 = [r10], -8 -- dep r2 = -1, r14, 3, 6 -+ dep r2 = -1, r14, 3, 6 - ;; -- ldf.fill.nt1 f5 = [in0], 0x10 -- ld8.nt1 f21 = [r10], -8 -- cmp p6 = r2, r15 -+ ldf.fill.nt1 f5 = [in0], 0x10 -+ ld8.nt1 r21 = [r10], -8 -+ cmp.ltu p6 = r2, r15 - ;; - ld8.nt1 r20 = [r10], -0x10 - (p6) ld8.nta r31 = [r2] -- mov b3 = r23 -+ mov b3 = r23 - ;; - ldf.fill.nt1 f16 = [in0], 0x10 -- ld8.fill.nt1 r7 = [r10], -8 -- mov b2 = r22 -+ ld8.fill.nt1 r7 = [r10], -8 -+ mov b2 = r22 - ;; - ldf.fill.nt1 f17 = [in0], 0x10 -- ld8.fill.nt1 r6 = [r10], -8 -- mov b1 = r21 -+ ld8.fill.nt1 r6 = [r10], -8 -+ mov b1 = r21 - ;; - ldf.fill.nt1 f18 = [in0], 0x10 -- ld8.fill.nt1 r5 = [r10], -8 -- mov b0 = r20 -+ ld8.fill.nt1 r5 = [r10], -8 -+ mov b0 = r20 - ;; - ldf.fill.nt1 f19 = [in0], 0x10 -- ld8.fill.nt1 r4 = [r10], 8*13 -+ ld8.fill.nt1 r4 = [r10], 8*13 - ;; - ldf.fill.nt1 f20 = [in0], 0x10 - ld8.nt1 r19 = [r10], 0x10 - ;; - ldf.fill.nt1 f21 = [in0], 0x10 -- ldf.nt1 f26 = [r10], 8 -+ ld8.nt1 r26 = [r10], 8 - mov ar.pfs = r19 - ;; - ldf.fill.nt1 f22 = [in0], 0x10 - ld8.nt1 r27 = [r10], 8 -- mov pr = r26, -1 -+ mov pr = r26, -1 - ;; -- ldf.fill.nt1 r23 = [in0], 0x10 -+ ldf.fill.nt1 f23 = [in0], 0x10 - ld8.nt1 r28 = [r10], -17*8 - 0x10 - mov ar.lc = r27 - ;; - ldf.fill.nt1 f24 = [in0], 0x10 - ldf.fill.nt1 f25 = [in0], 0x10 -- mov r8 = in1 -+ mov r8 = in1 - ;; - ldf.fill.nt1 f26 = [in0], 0x10 - ldf.fill.nt1 f31 = [r10], -0x10 -@@ -192,9 +188,12 @@ _skip_flushrs: - ldf.fill.nt1 f28 = [in0] - ldf.fill.nt1 f29 = [r10], 0x10*3 + 8*4 - ;; -- ld8.fill.nt1 sp = [r10] -+ ld8.fill.nt1 sp = [r10] - mov ar.unat = r18 - ;; - mov ar.bspstore = r14 - mov ar.rnat = r31 - ;; -+ invala -+ mov ar.rsc = r16 -+ br.ret.sptk b0 --- -2.15.0 - diff --git a/0011-Fix-some-types-gcc-doesn-t-like.patch b/0011-Fix-some-types-gcc-doesn-t-like.patch deleted file mode 100644 index aa66e4e..0000000 --- a/0011-Fix-some-types-gcc-doesn-t-like.patch +++ /dev/null @@ -1,73 +0,0 @@ -From a46a62b12b58139c31d4288384808365c4053bf2 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:21 -0400 -Subject: [PATCH 11/25] 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 -at other places, so the compiler doesn't care. - -Signed-off-by: Peter Jones -Signed-off-by: Nigel Croxon ---- - apps/AllocPages.c | 2 +- - apps/FreePages.c | 2 +- - apps/route80h.c | 2 +- - inc/efilink.h | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/apps/AllocPages.c b/apps/AllocPages.c -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) - INTN AllocType = -1; - INTN MemType = -1; - INTN NumPages = -1; -- UINTN Addr = 0; -+ EFI_PHYSICAL_ADDRESS Addr = 0; - - InitializeLib(image, systab); - -diff --git a/apps/FreePages.c b/apps/FreePages.c -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) - INTN err = 0; - - INTN PgCnt = -1; -- UINTN PhysAddr = 0; -+ EFI_PHYSICAL_ADDRESS PhysAddr = 0; - - InitializeLib(image, systab); - -diff --git a/apps/route80h.c b/apps/route80h.c -index 8df860c1232..e1f62f06824 100644 ---- a/apps/route80h.c -+++ b/apps/route80h.c -@@ -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); -- set_bit((uint32_t *)(uint64_t)(lpcif.rcba + GCS_OFFSET_ADDR), -+ set_bit((uint32_t *)(intptr_t)(lpcif.rcba + GCS_OFFSET_ADDR), - GCS_RPR_SHIFT, GCS_RPR_PCI); - - return EFI_SUCCESS; -diff --git a/inc/efilink.h b/inc/efilink.h -index b2ff4fa2f87..cc5aa2dc57b 100644 ---- a/inc/efilink.h -+++ b/inc/efilink.h -@@ -142,7 +142,7 @@ typedef struct _LIST_ENTRY { - // EFI_FIELD_OFFSET - returns the byte offset to a field within a structure - // - --#define EFI_FIELD_OFFSET(TYPE,Field) ((UINTN)(&(((TYPE *) 0)->Field))) -+#define EFI_FIELD_OFFSET(TYPE,Field) ((UINTN)(intptr_t)(&(((TYPE *) 0)->Field))) - - // - // CONTAINING_RECORD - returns a pointer to the structure --- -2.15.0 - diff --git a/0012-Fix-arm-build-paths-in-the-makefile.patch b/0012-Fix-arm-build-paths-in-the-makefile.patch deleted file mode 100644 index 746989a..0000000 --- a/0012-Fix-arm-build-paths-in-the-makefile.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 5fa13d4609ae6187f68928c6e0834cdf716442f9 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:22 -0400 -Subject: [PATCH 12/25] 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 -armv7hl-linux-gnueabi, so we need to munge the arch there to get our arm -path. - -Signed-off-by: Peter Jones -Signed-off-by: Nigel Croxon ---- - Make.defaults | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/Make.defaults b/Make.defaults -index 446e676dc14..6d300fb0f24 100755 ---- a/Make.defaults -+++ b/Make.defaults -@@ -62,12 +62,12 @@ OBJCOPY := $(prefix)$(CROSS_COMPILE)objcopy - - # Host/target identification - OS := $(shell uname -s) --HOSTARCH := $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed s,i[3456789]86,ia32,) -+HOSTARCH := $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed -e s,i[3456789]86,ia32, -e 's,armv7.*,arm,' ) - ARCH := $(HOSTARCH) - - # Get ARCH from the compiler if cross compiling - ifneq ($(CROSS_COMPILE),) -- override ARCH := $(shell $(CC) -dumpmachine | cut -f1 -d-| sed s,i[3456789]86,ia32,) -+ override ARCH := $(shell $(CC) -dumpmachine | cut -f1 -d-| sed -e s,i[3456789]86,ia32, -e 's,armv7.*,arm,' ) - endif - - # FreeBSD (and possibly others) reports amd64 instead of x86_64 --- -2.15.0 - diff --git a/0013-Work-around-Werror-maybe-uninitialized-not-being-ver.patch b/0013-Work-around-Werror-maybe-uninitialized-not-being-ver.patch deleted file mode 100644 index fb6057f..0000000 --- a/0013-Work-around-Werror-maybe-uninitialized-not-being-ver.patch +++ /dev/null @@ -1,32 +0,0 @@ -From e861bb3861cca6c6d7b4d42fa915e9e9fa3dc9fc Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:23 -0400 -Subject: [PATCH 13/25] Work around -Werror=maybe-uninitialized not being very - bright. - -The compiler doesn't believe the loop always executes at least once, -even though the data in the first array entry doesn't satisfy the exit -condition. So just initialize the thing to shut it up. - -Signed-off-by: Peter Jones -Signed-off-by: Nigel Croxon ---- - apps/route80h.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/apps/route80h.c b/apps/route80h.c -index e1f62f06824..5272dd3cd44 100644 ---- a/apps/route80h.c -+++ b/apps/route80h.c -@@ -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; -- EFI_STATUS rc; -+ EFI_STATUS rc = EFI_SUCCESS; - struct { - uint16_t vendor; - uint16_t device; --- -2.15.0 - diff --git a/0014-Fix-a-sign-error-in-the-debughook-example-app.patch b/0014-Fix-a-sign-error-in-the-debughook-example-app.patch deleted file mode 100644 index d78fad8..0000000 --- a/0014-Fix-a-sign-error-in-the-debughook-example-app.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 25cebcee2ae0b92829841321220ec9837479c118 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:24 -0400 -Subject: [PATCH 14/25] 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 -for the variable. - -Signed-off-by: Peter Jones -Signed-off-by: Nigel Croxon ---- - apps/debughook.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/apps/debughook.c b/apps/debughook.c -index 93cd0cf7eb0..78e4a767b1d 100644 ---- a/apps/debughook.c -+++ b/apps/debughook.c -@@ -50,7 +50,7 @@ DebugHook(void) - UINT8 *data = NULL; - UINTN dataSize = 0; - EFI_STATUS efi_status; -- register volatile UINTN x = 0; -+ register volatile unsigned long long x = 0; - extern char _text, _data; - - if (x) -@@ -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__) -- if (x > 4294967294) -+ if (x > 4294967294ULL) - break; - __asm__ __volatile__("pause"); - #elif defined(__aarch64__) --- -2.15.0 - diff --git a/0015-Fix-typedef-of-EFI_PXE_BASE_CODE.patch b/0015-Fix-typedef-of-EFI_PXE_BASE_CODE.patch deleted file mode 100644 index 3f42514..0000000 --- a/0015-Fix-typedef-of-EFI_PXE_BASE_CODE.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 28b487d1ae66c7311e13c07c802276ea26f026e9 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:25 -0400 -Subject: [PATCH 15/25] 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 -inadvertantly defined things thusly: - - INTERFACE_DECL(_EFI_PXE_BASE_CODE_PROTOCOL); - ... - typedef struct _EFI_PXE_BASE_CODE_PROTOCOL { - ... - } EFI_PXE_BASE_CODE_PROTOCOL; - ... - typedef struct _EFI_PXE_BASE_CODE_PROTOCOL _EFI_PXE_BASE_CODE; - typedef struct EFI_PXE_BASE_CODE_PROTOCOL EFI_PXE_BASE_CODE; - -Because EFI_BASE_CODE_PROTOCOL is declared with a typedef, and is -therefore in the type namespace rather than the struct namespace, this -results in EFI_PXE_BASE_CODE being a forward declaration of an -incomplete type. The net result is that code which dereferences any -field in the struct, even with the correct names, will not correctly -build. - -This patch changes both _EFI_PXE_BASE_CODE and EFI_PXE_BASE_CODE -typedefs to inherit from struct _EFI_PXE_BASE_CODE_PROTOCOL. - -Signed-off-by: Peter Jones -Signed-off-by: Nigel Croxon ---- - inc/efipxebc.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/inc/efipxebc.h b/inc/efipxebc.h -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 EFI_PXE_BASE_CODE_PROTOCOL EFI_PXE_BASE_CODE; -+typedef struct _EFI_PXE_BASE_CODE_PROTOCOL EFI_PXE_BASE_CODE; - - // - // Call Back Definitions --- -2.15.0 - diff --git a/0016-make-clang-not-complain-about-fno-merge-all-constant.patch b/0016-make-clang-not-complain-about-fno-merge-all-constant.patch deleted file mode 100644 index 30f8611..0000000 --- a/0016-make-clang-not-complain-about-fno-merge-all-constant.patch +++ /dev/null @@ -1,32 +0,0 @@ -From f0bf464a37d740a9539e8356a2e8611da63455df Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:26 -0400 -Subject: [PATCH 16/25] make clang not complain about -fno-merge-all-constants - -Make clang not complain about -fno-merge-all-constants - -Signed-off-by: Peter Jones -Signed-off-by: Nigel Croxon ---- - Make.defaults | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/Make.defaults b/Make.defaults -index 6d300fb0f24..a457190aa3a 100755 ---- a/Make.defaults -+++ b/Make.defaults -@@ -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-all-constants -ffreestanding -fno-stack-protector \ -- -fno-stack-check -+ -ffreestanding -fno-stack-protector -fno-stack-check \ -+ -fno-stack-check \ -+ $(if $(findstring gcc,$(CC)),-fno-merge-all-constants,) - endif - - ARFLAGS += -U --- -2.15.0 - diff --git a/0017-Fix-another-place-clang-complains-about.patch b/0017-Fix-another-place-clang-complains-about.patch deleted file mode 100644 index d66cb83..0000000 --- a/0017-Fix-another-place-clang-complains-about.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 5abc3858a25fa6774c6e2d89cc5d1d14a9c9f7cb Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:27 -0400 -Subject: [PATCH 17/25] Fix another place clang complains about - -Fix another place clang complains about. - -Signed-off-by: Peter Jones -Signed-off-by: Nigel Croxon ---- - lib/guid.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/lib/guid.c b/lib/guid.c -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, L"" } - }; - - // --- -2.15.0 - diff --git a/0018-gnu-efi-add-some-more-common-string-functions.patch b/0018-gnu-efi-add-some-more-common-string-functions.patch deleted file mode 100644 index 778e06d..0000000 --- a/0018-gnu-efi-add-some-more-common-string-functions.patch +++ /dev/null @@ -1,345 +0,0 @@ -From 9485c65f6d28b71ff697849c1c8d47fd077ccd07 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:28 -0400 -Subject: [PATCH 18/25] 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 -Signed-off-by: Nigel Croxon ---- - 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.15.0 - diff --git a/0019-Add-D-to-print-device-paths.patch b/0019-Add-D-to-print-device-paths.patch deleted file mode 100644 index 53bf24b..0000000 --- a/0019-Add-D-to-print-device-paths.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 28793041d7f26a6771837967c495f3ae7ba1134a Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:29 -0400 -Subject: [PATCH 19/25] Add %D to print device paths - -Add %D to print device paths. - -Signed-off-by: Peter Jones -Signed-off-by: Nigel Croxon ---- - 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.15.0 - diff --git a/0020-Make-ARCH-overrideable-on-the-command-line.patch b/0020-Make-ARCH-overrideable-on-the-command-line.patch deleted file mode 100644 index ce84e13..0000000 --- a/0020-Make-ARCH-overrideable-on-the-command-line.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 2c624c22fe873099d398e86b9f09cffcae9f0af8 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:30 -0400 -Subject: [PATCH 20/25] Make ARCH overrideable on the command line - -Make ARCH overrideable on the command line. - -Signed-off-by: Peter Jones -Signed-off-by: Nigel Croxon ---- - 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.15.0 - diff --git a/0021-apps-Add-bltgrid-and-lfbgrid-and-add-error-checks-to.patch b/0021-apps-Add-bltgrid-and-lfbgrid-and-add-error-checks-to.patch deleted file mode 100644 index 880fae6..0000000 --- a/0021-apps-Add-bltgrid-and-lfbgrid-and-add-error-checks-to.patch +++ /dev/null @@ -1,447 +0,0 @@ -From 5ec879ace760faacfa940a1933e0339e8f3811bd Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:31 -0400 -Subject: [PATCH 21/25] 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 -Signed-off-by: Nigel Croxon ---- - 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 -+#include -+ -+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 -+#include -+ -+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.15.0 - diff --git a/0022-Nerf-Werror-pragma-away.patch b/0022-Nerf-Werror-pragma-away.patch deleted file mode 100644 index 305cb2f..0000000 --- a/0022-Nerf-Werror-pragma-away.patch +++ /dev/null @@ -1,29 +0,0 @@ -From be57aadba6092027d21c04d4ededb2e83abe9016 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:32 -0400 -Subject: [PATCH 22/25] Nerf -Werror=pragma away - -Nerf -Werror=-pragma away - -Signed-off-by: Peter Jones -Signed-off-by: Nigel Croxon ---- - Make.defaults | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/Make.defaults b/Make.defaults -index 4aa57ac5f7c..ed4b60c2423 100755 ---- a/Make.defaults -+++ b/Make.defaults -@@ -87,6 +87,8 @@ OBJDIR := $(TOPDIR)/$(ARCH) - # Arch-specific compilation flags - CPPFLAGS += -DCONFIG_$(ARCH) - -+CFLAGS += -Wno-error=pragmas -+ - ifeq ($(ARCH),ia64) - CFLAGS += -mfixed-range=f32-f127 - endif --- -2.15.0 - diff --git a/0023-Call-ar-in-deterministic-mode.patch b/0023-Call-ar-in-deterministic-mode.patch deleted file mode 100644 index 1af9e80..0000000 --- a/0023-Call-ar-in-deterministic-mode.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 656e495d515b0fc1f01add164aa4bba9a49ceb31 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:34 -0400 -Subject: [PATCH 23/25] 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 -just in case that doesn't work, because RHEL's ar /silently ignores -D/. - -v2: use "ar rvD" not "ar rv -D". - -It's a wonder anybody ever gets these command line options right, if -"ar rv -D libfoo.a foo.o" doesn't use deterministic mode (or -complain), but "ar rvD libfoo.a foo.o" does. - -v3: Add a bunch of junk to try to set timestamps to 0 manually - -For some reason I'm still getting timestamps in the .a even though ar seems to -be invoked correctly. When I do "mock -r rhel-7-build --shell" and run make -manually, they're fine. Very strange. - -v4: go back to v2, the problem isn't in the make process. - -"ar rDv" works just fine, but /usr/lib/rpm/redhat/brp-strip-static-archive is -calling "%{__strip} -g $for_each.a", and it's rewriting our binary from -ts/uid/gid of 0/0/0 to $epoch/$UID/$GID. Awesomely /usr/bin/strip it seems to -have 3 modes of operation: --U: the default, which adds $epoch/$UID/$GID to your binary archive - instead of just removing stuff. Clearly the Principle of Least - Surprise is strong here. --p: preserve the timestamp from the original .a, but add UID and GID, - because this is 1980 and people use ar(1) for archiving stuff they - might want that out of. --D: Condescend at you in a command line error and explain that -D both - is and is not a valid option: - /usr/bin/strip: invalid option -- 'D' - Usage: /usr/bin/strip in-file(s) - Removes symbols and sections from files - The options are: - ... - -D --enable-deterministic-archives - Produce deterministic output when stripping archives - So I agree that it's invalid, but I think we may be pronouncing that - second vowel differently. They say in-VAL-id, I say IN-vuh-lid. - -Nobody should ever have to run "strace -ttt -v -f -o make.strace make all", -just to discover the problem isn't even in there. - -Related: rhbz#1310782 - -Signed-off-by: Peter Jones -Signed-off-by: Nigel Croxon ---- - Make.defaults | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Make.defaults b/Make.defaults -index ed4b60c2423..ba743f17893 100755 ---- a/Make.defaults -+++ b/Make.defaults -@@ -177,7 +177,7 @@ CFLAGS += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \ - $(if $(findstring gcc,$(CC)),-fno-merge-all-constants,) - endif - --ARFLAGS += -U -+ARFLAGS := rDv - ASFLAGS += $(ARCH3264) - LDFLAGS += -nostdlib --warn-common --no-undefined --fatal-warnings \ - --build-id=sha1 --- -2.15.0 - diff --git a/0024-Add-debug-helper-applications.patch b/0024-Add-debug-helper-applications.patch deleted file mode 100644 index c2b4aec..0000000 --- a/0024-Add-debug-helper-applications.patch +++ /dev/null @@ -1,119 +0,0 @@ -From b030bfce35fe4b9a4eec88442e2027e4d6ec60de Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 13 Mar 2018 15:20:35 -0400 -Subject: [PATCH 24/25] Add debug helper applications - -Add debug helper applications. - -Signed-off-by: Peter Jones -Signed-off-by: Nigel Croxon ---- - 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 -+#include -+ -+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 -+#include -+ -+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.15.0 - diff --git a/0025-Bump-revision-from-VERSION-3.0.7-to-VERSION-3.0.8.patch b/0025-Bump-revision-from-VERSION-3.0.7-to-VERSION-3.0.8.patch deleted file mode 100644 index 06023e6..0000000 --- a/0025-Bump-revision-from-VERSION-3.0.7-to-VERSION-3.0.8.patch +++ /dev/null @@ -1,26 +0,0 @@ -From fc5af9e47fb63fbadf6acd218abc60352ce41e31 Mon Sep 17 00:00:00 2001 -From: Nigel Croxon -Date: Wed, 14 Mar 2018 14:54:51 -0400 -Subject: [PATCH 25/25] Bump revision from VERSION = 3.0.7 to VERSION = 3.0.8 - -Signed-off-by: Nigel Croxon ---- - Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index a9f7e134e14..4e58e029e7f 100644 ---- a/Makefile -+++ b/Makefile -@@ -34,7 +34,7 @@ - # SUCH DAMAGE. - # - --VERSION = 3.0.7 -+VERSION = 3.0.8 - - MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) - SRCDIR = $(dir $(MKFILE_PATH)) --- -2.15.0 - diff --git a/gnu-efi.spec b/gnu-efi.spec index 21c27c0..7c2b207 100644 --- a/gnu-efi.spec +++ b/gnu-efi.spec @@ -1,8 +1,8 @@ Summary: Development Libraries and headers for EFI Name: gnu-efi -Version: 3.0.8 -%global tarball_version 3.0.6 -Release: 6%{?dist}%{?buildid} +Version: 3.0.9 +%global tarball_version 3.0.9 +Release: 1%{?dist}%{?buildid} Epoch: 1 License: BSD URL: ftp://ftp.hpl.hp.com/pub/linux-ia64 @@ -23,31 +23,7 @@ Source: http://superb-dca2.dl.sourceforge.net/project/gnu-efi/gnu-efi-%{tarball_ %define lib %{nil}lib%{nil} 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-Currently-we-have-DivU64x32-on-ia32-but-it-tries-to-.patch -Patch0009: 0009-gnuefi-preserve-.gnu.hash-sections-unbreaks-elilo-on.patch -Patch0010: 0010-gnu-efi-fix-lib-ia64-setjmp.S-IA-64-build-failure.patch -Patch0011: 0011-Fix-some-types-gcc-doesn-t-like.patch -Patch0012: 0012-Fix-arm-build-paths-in-the-makefile.patch -Patch0013: 0013-Work-around-Werror-maybe-uninitialized-not-being-ver.patch -Patch0014: 0014-Fix-a-sign-error-in-the-debughook-example-app.patch -Patch0015: 0015-Fix-typedef-of-EFI_PXE_BASE_CODE.patch -Patch0016: 0016-make-clang-not-complain-about-fno-merge-all-constant.patch -Patch0017: 0017-Fix-another-place-clang-complains-about.patch -Patch0018: 0018-gnu-efi-add-some-more-common-string-functions.patch -Patch0019: 0019-Add-D-to-print-device-paths.patch -Patch0020: 0020-Make-ARCH-overrideable-on-the-command-line.patch -Patch0021: 0021-apps-Add-bltgrid-and-lfbgrid-and-add-error-checks-to.patch -Patch0022: 0022-Nerf-Werror-pragma-away.patch -Patch0023: 0023-Call-ar-in-deterministic-mode.patch -Patch0024: 0024-Add-debug-helper-applications.patch -Patch0025: 0025-Bump-revision-from-VERSION-3.0.7-to-VERSION-3.0.8.patch -Patch0026: 0026-Use-EFI-canonical-names-everywhere-the-compiler-does.patch +Patch0002: 0002-Use-EFI-canonical-names-everywhere-the-compiler-does.patch %define debug_package %{nil} @@ -138,6 +114,9 @@ mv %{efi_arch}/apps/{route80h.efi,modelist.efi} %{buildroot}%{efi_esp_dir}/%{efi %endif %changelog +* Wed Mar 20 2019 Peter Jones - 3.0.9-1 +- Update to gnu-efi 3.0.9 + * Thu Jan 31 2019 Fedora Release Engineering - 1:3.0.8-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild diff --git a/sources b/sources index dd84958..5124fde 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (gnu-efi-3.0.6.tar.bz2) = f1b17766d8ae000c0177ea2126d87883f254ab01ac020e4bfaa9ad2d3d60a66d07b6237d9842e5989c4da3fd23152b5c592ef863fdc9806901f43c43582a2258 +SHA512 (gnu-efi-3.0.9.tar.bz2) = 1a775476fcbe354e57c9db258b1c6ad4346b84d1794178ab5d5195b3ffba250066ca4c42a553d5b2866fa1b4e03019d61df0197f269188c73297042990adf316