Auto sync2gitlab import of gnu-efi-3.0.8-4.el8.src.rpm

This commit is contained in:
CentOS Sources 2022-06-13 11:32:48 +00:00
parent ae15467c9d
commit f955f3f60e
30 changed files with 3136 additions and 1 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/gnu-efi-3.0.6.tar.bz2

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/25] [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.15.0

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/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 <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.15.0

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/25] 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.15.0

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/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 <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.15.0

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/25] 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.15.0

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/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 <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.15.0

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/25] 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.15.0

View File

@ -0,0 +1,38 @@
From d039cd620b8a270d9b231691c9b31d6824f18c08 Mon Sep 17 00:00:00 2001
From: Nigel Croxon <ncroxon@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
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

View File

@ -0,0 +1,148 @@
From 2cc0b085fb82e80d43cc08c8376dff9f9532a72d Mon Sep 17 00:00:00 2001
From: Sergei Trofimovich <slyfox@gentoo.org>
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 <slyfox@gentoo.org>
---
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=<sysv|gnu|both> 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

View File

@ -0,0 +1,161 @@
From 0e6995a96b0f5867c8d85fbd251cfbc295a3fc4d Mon Sep 17 00:00:00 2001
From: Sergei Trofimovich <slyfox@gentoo.org>
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 <slyfox@gentoo.org>
---
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

View File

@ -0,0 +1,73 @@
From a46a62b12b58139c31d4288384808365c4053bf2 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
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

View File

@ -0,0 +1,38 @@
From 5fa13d4609ae6187f68928c6e0834cdf716442f9 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
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

View File

@ -0,0 +1,32 @@
From e861bb3861cca6c6d7b4d42fa915e9e9fa3dc9fc Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
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

View File

@ -0,0 +1,40 @@
From 25cebcee2ae0b92829841321220ec9837479c118 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
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

View File

@ -0,0 +1,50 @@
From 28b487d1ae66c7311e13c07c802276ea26f026e9 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
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

View File

@ -0,0 +1,32 @@
From f0bf464a37d740a9539e8356a2e8611da63455df Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
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

View File

@ -0,0 +1,29 @@
From 5abc3858a25fa6774c6e2d89cc5d1d14a9c9f7cb Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
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

View File

@ -0,0 +1,345 @@
From 9485c65f6d28b71ff697849c1c8d47fd077ccd07 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@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.15.0

View File

@ -0,0 +1,47 @@
From 28793041d7f26a6771837967c495f3ae7ba1134a Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@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.15.0

View File

@ -0,0 +1,31 @@
From 2c624c22fe873099d398e86b9f09cffcae9f0af8 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@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.15.0

View File

@ -0,0 +1,447 @@
From 5ec879ace760faacfa940a1933e0339e8f3811bd Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@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.15.0

View File

@ -0,0 +1,29 @@
From be57aadba6092027d21c04d4ededb2e83abe9016 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
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

View File

@ -0,0 +1,72 @@
From 656e495d515b0fc1f01add164aa4bba9a49ceb31 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <option(s)> 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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
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

View File

@ -0,0 +1,119 @@
From b030bfce35fe4b9a4eec88442e2027e4d6ec60de Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
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 <pjones@redhat.com>
Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
---
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.15.0

View File

@ -0,0 +1,26 @@
From fc5af9e47fb63fbadf6acd218abc60352ce41e31 Mon Sep 17 00:00:00 2001
From: Nigel Croxon <ncroxon@redhat.com>
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 <ncroxon@redhat.com>
---
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

View File

@ -0,0 +1,472 @@
From 1dac05a1674c42def54d77f17ca2ba73b31beaf8 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Thu, 19 Jul 2018 13:12:44 -0400
Subject: [PATCH] Get rid of some unused junk that has the BSD 4-clause
license.
We don't need any of this, and its license is not GPL compatible.
Signed-off-by: Peter Jones <pjones@redhat.com>
---
inc/protocol/efidbg.h | 210 ---------------------------------
inc/protocol/ia64/eficontext.h | 208 --------------------------------
inc/protocol/makefile.hdr | 4 +-
3 files changed, 1 insertion(+), 421 deletions(-)
delete mode 100644 inc/protocol/efidbg.h
delete mode 100644 inc/protocol/ia64/eficontext.h
diff --git a/inc/protocol/efidbg.h b/inc/protocol/efidbg.h
deleted file mode 100644
index 1f95a70bb42..00000000000
--- a/inc/protocol/efidbg.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-
-#ifndef _EFIDBG_H_
-#define _EFIDBG_H_
-
-#include "eficontext.h"
-#include "efiser.h"
-
-typedef struct _DEBUGPORT_16550_CONFIG_DATA {
- UINT32 PortAddress;
- UINT64 BaudRate;
- UINT32 ReceiveFifoDepth;
- UINT32 Timeout;
- UINT8 Parity;
- UINT8 DataBits;
- UINT8 StopBits;
- UINT32 ControlMask;
- BOOLEAN RtsCtsEnable; // RTS, CTS control
-} DEBUGPORT_16550_CONFIG_DATA;
-
-typedef struct _DEBUGPORT_16550_DEVICE_PATH {
- EFI_DEVICE_PATH Header;
- DEBUGPORT_16550_CONFIG_DATA ConfigData;
-} DEBUGPORT_16550_DEVICE_PATH;
-
-typedef union {
- EFI_DEVICE_PATH DevPath;
- DEBUGPORT_16550_DEVICE_PATH Uart;
- // add new types of debugport device paths to this union...
-} DEBUGPORT_DEV_PATH;
-
-
-//
-// Debug Support protocol {2755590C-6F3C-42FA-9EA4-A3BA543CDA25}
-//
-
-#define DEBUG_SUPPORT_PROTOCOL \
-{ 0x2755590C, 0x6F3C, 0x42fa, 0x9E, 0xA4, 0xA3, 0xBA, 0x54, 0x3C, 0xDA, 0x25 }
-
-
-typedef UINTN EXCEPTION_TYPE;
-
-typedef
-VOID
-(*EXCEPTION_HANDLER) (
- IN EXCEPTION_TYPE ExceptionType,
- IN SYSTEM_CONTEXT *SystemContext
- );
-
-typedef
-EFI_STATUS
-(EFIAPI *EFI_REGISTER_TIMER_TICK_CALLBACK) (
- IN struct _EFI_DEBUG_SUPPORT_INTERFACE *This,
- IN EXCEPTION_HANDLER TimerTickCallback
- );
-
-typedef
-EFI_STATUS
-(EFIAPI *EFI_REGISTER_EXCEPTION_HANDLER) (
- IN struct _EFI_DEBUG_SUPPORT_INTERFACE *This,
- IN EXCEPTION_HANDLER ExceptionHandler,
- IN EXCEPTION_TYPE ExceptionType
- );
-
-typedef
-EFI_STATUS
-(EFIAPI *EFI_IP_CALL_TRACE) (
- IN struct _EFI_DEBUG_SUPPORT_INTERFACE *This
- );
-
-
-#define EFI_DEBUG_SUPPORT_INTERFACE_REVISION 0x00010000
-
-typedef struct _EFI_DEBUG_SUPPORT_INTERFACE {
- UINT32 Revision;
- EFI_REGISTER_TIMER_TICK_CALLBACK RegisterTimerTickCallback;
- EFI_REGISTER_EXCEPTION_HANDLER RegisterExceptionHandler;
- EFI_IP_CALL_TRACE IpCallTrace;
-} EFI_DEBUG_SUPPORT_INTERFACE;
-
-
-//
-// Debugport io protocol {EBA4E8D2-3858-41EC-A281-2647BA9660D0}
-//
-
-#define DEBUGPORT_IO_PROTOCOL \
-{ 0XEBA4E8D2, 0X3858, 0X41EC, 0XA2, 0X81, 0X26, 0X47, 0XBA, 0X96, 0X60, 0XD0 }
-
-
-typedef
-EFI_STATUS
-(EFIAPI *EFI_DEBUGPORT_IO_RESET) (
- IN struct _EFI_DEBUGPORT_IO_INTERFACE *This
- );
-
-typedef
-EFI_STATUS
-(EFIAPI *EFI_DEBUGPORT_IO_READ) (
- IN struct _EFI_DEBUGPORT_IO_INTERFACE *This,
- IN OUT UINTN *BufferSize,
- OUT VOID *Buffer
- );
-
-typedef
-EFI_STATUS
-(EFIAPI *EFI_DEBUGPORT_IO_WRITE) (
- IN struct _EFI_DEBUGPORT_IO_INTERFACE *This,
- IN OUT UINTN *BufferSize,
- IN VOID *Buffer
- );
-
-#define EFI_DEBUGPORT_IO_INTERFACE_REVISION 0x00010000
-
-typedef struct _EFI_DEBUGPORT_IO_INTERFACE {
- UINT32 Revision;
- EFI_DEBUGPORT_IO_READ Read;
- EFI_DEBUGPORT_IO_WRITE Write;
- EFI_DEBUGPORT_IO_RESET Reset;
-} EFI_DEBUGPORT_IO_INTERFACE;
-
-
-//
-// Debugport UART16550 control protocol {628EA978-4C26-4605-BC02-A42A496917DD}
-//
-
-#define DEBUGPORT_UART16550_CONTROL_PROTOCOL \
-{ 0X628EA978, 0X4C26, 0X4605, 0XBC, 0X2, 0XA4, 0X2A, 0X49, 0X69, 0X17, 0XDD }
-
-// Note: The definitions for EFI_PARITY_TYPE, EFI_STOP_BITS_TYPE, and
-// SERIAL_IO_MODE are included from efiser.h
-
-typedef
-EFI_STATUS
-(EFIAPI *EFI_UART16550_SET_ATTRIBUTES) (
- IN struct _EFI_DEBUGPORT_UART16550_CONTROL_INTERFACE *This,
- IN UINT64 BaudRate,
- IN UINT32 ReceiveFifoDepth,
- IN UINT32 Timeout,
- IN EFI_PARITY_TYPE Parity,
- IN UINT8 DataBits,
- IN EFI_STOP_BITS_TYPE StopBits
- );
-
-typedef
-EFI_STATUS
-(EFIAPI *EFI_UART16550_SET_CONTROL_BITS) (
- IN struct _EFI_DEBUGPORT_UART16550_CONTROL_INTERFACE *This,
- IN UINT32 Control
- );
-
-typedef
-EFI_STATUS
-(EFIAPI *EFI_UART16550_GET_CONTROL_BITS) (
- IN struct _EFI_DEBUGPORT_UART16550_CONTROL_INTERFACE *This,
- OUT UINT32 *Control
- );
-
-#define EFI_DEBUGPORT_UART16550_CONTROL_INTERFACE_REVISION 0x00010000
-
-typedef struct _EFI_DEBUGPORT_UART16550_CONTROL_INTERFACE {
- UINT32 Revision;
- EFI_UART16550_SET_ATTRIBUTES SetAttributes;
- EFI_UART16550_SET_CONTROL_BITS SetControl;
- EFI_UART16550_GET_CONTROL_BITS GetControl;
- DEBUGPORT_16550_CONFIG_DATA *Mode;
-} EFI_DEBUGPORT_UART16550_CONTROL_INTERFACE;
-
-
-#define DEVICE_PATH_DEBUGPORT DEBUGPORT_IO_PROTOCOL
-
-#endif /* _EFIDBG_H_ */
diff --git a/inc/protocol/ia64/eficontext.h b/inc/protocol/ia64/eficontext.h
deleted file mode 100644
index 1a39a6db1e4..00000000000
--- a/inc/protocol/ia64/eficontext.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Copyright (c) 1999, 2000
- * Intel Corporation.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- *
- * This product includes software developed by Intel Corporation and
- * its contributors.
- *
- * 4. Neither the name of Intel Corporation or its contributors may be
- * used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION AND CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-
-#ifndef _EFICONTEXT_H_
-#define _EFICONTEXT_H_
-
-
-//
-// IA-64 processor exception types
-//
-#define EXCPT_ALT_DTLB 4
-#define EXCPT_DNESTED_TLB 5
-#define EXCPT_BREAKPOINT 11
-#define EXCPT_EXTERNAL_INTERRUPT 12
-#define EXCPT_GEN_EXCEPT 24
-#define EXCPT_NAT_CONSUMPTION 26
-#define EXCPT_DEBUG_EXCEPT 29
-#define EXCPT_UNALIGNED_ACCESS 30
-#define EXCPT_FP_FAULT 32
-#define EXCPT_FP_TRAP 33
-#define EXCPT_TAKEN_BRANCH 35
-#define EXCPT_SINGLE_STEP 36
-
-//
-// IA-64 processor context definition - must be 512 byte aligned!!!
-//
-typedef
-struct {
- UINT64 reserved; // necessary to preserve alignment for the correct bits in UNAT and to insure F2 is 16 byte aligned...
-
- UINT64 r1;
- UINT64 r2;
- UINT64 r3;
- UINT64 r4;
- UINT64 r5;
- UINT64 r6;
- UINT64 r7;
- UINT64 r8;
- UINT64 r9;
- UINT64 r10;
- UINT64 r11;
- UINT64 r12;
- UINT64 r13;
- UINT64 r14;
- UINT64 r15;
- UINT64 r16;
- UINT64 r17;
- UINT64 r18;
- UINT64 r19;
- UINT64 r20;
- UINT64 r21;
- UINT64 r22;
- UINT64 r23;
- UINT64 r24;
- UINT64 r25;
- UINT64 r26;
- UINT64 r27;
- UINT64 r28;
- UINT64 r29;
- UINT64 r30;
- UINT64 r31;
-
- UINT64 f2[2];
- UINT64 f3[2];
- UINT64 f4[2];
- UINT64 f5[2];
- UINT64 f6[2];
- UINT64 f7[2];
- UINT64 f8[2];
- UINT64 f9[2];
- UINT64 f10[2];
- UINT64 f11[2];
- UINT64 f12[2];
- UINT64 f13[2];
- UINT64 f14[2];
- UINT64 f15[2];
- UINT64 f16[2];
- UINT64 f17[2];
- UINT64 f18[2];
- UINT64 f19[2];
- UINT64 f20[2];
- UINT64 f21[2];
- UINT64 f22[2];
- UINT64 f23[2];
- UINT64 f24[2];
- UINT64 f25[2];
- UINT64 f26[2];
- UINT64 f27[2];
- UINT64 f28[2];
- UINT64 f29[2];
- UINT64 f30[2];
- UINT64 f31[2];
-
- UINT64 pr;
-
- UINT64 b0;
- UINT64 b1;
- UINT64 b2;
- UINT64 b3;
- UINT64 b4;
- UINT64 b5;
- UINT64 b6;
- UINT64 b7;
-
- // application registers
- UINT64 ar_rsc;
- UINT64 ar_bsp;
- UINT64 ar_bspstore;
- UINT64 ar_rnat;
-
- UINT64 ar_fcr;
-
- UINT64 ar_eflag;
- UINT64 ar_csd;
- UINT64 ar_ssd;
- UINT64 ar_cflg;
- UINT64 ar_fsr;
- UINT64 ar_fir;
- UINT64 ar_fdr;
-
- UINT64 ar_ccv;
-
- UINT64 ar_unat;
-
- UINT64 ar_fpsr;
-
- UINT64 ar_pfs;
- UINT64 ar_lc;
- UINT64 ar_ec;
-
- // control registers
- UINT64 cr_dcr;
- UINT64 cr_itm;
- UINT64 cr_iva;
- UINT64 cr_pta;
- UINT64 cr_ipsr;
- UINT64 cr_isr;
- UINT64 cr_iip;
- UINT64 cr_ifa;
- UINT64 cr_itir;
- UINT64 cr_iipa;
- UINT64 cr_ifs;
- UINT64 cr_iim;
- UINT64 cr_iha;
-
- // debug registers
- UINT64 dbr0;
- UINT64 dbr1;
- UINT64 dbr2;
- UINT64 dbr3;
- UINT64 dbr4;
- UINT64 dbr5;
- UINT64 dbr6;
- UINT64 dbr7;
-
- UINT64 ibr0;
- UINT64 ibr1;
- UINT64 ibr2;
- UINT64 ibr3;
- UINT64 ibr4;
- UINT64 ibr5;
- UINT64 ibr6;
- UINT64 ibr7;
-
- // virtual registers
- UINT64 int_nat; // nat bits for R1-R31
-
-} SYSTEM_CONTEXT;
-
-#endif /* _EFI_CONTEXT_H_ */
diff --git a/inc/protocol/makefile.hdr b/inc/protocol/makefile.hdr
index 118d6ba3a08..e66e67889c2 100644
--- a/inc/protocol/makefile.hdr
+++ b/inc/protocol/makefile.hdr
@@ -9,8 +9,7 @@
INC_DEPS = $(INC_DEPS) \
$(SDK_INSTALL_DIR)\include\efi\protocol\efivar.h \
$(SDK_INSTALL_DIR)\include\efi\protocol\legacyboot.h \
- $(SDK_INSTALL_DIR)\include\efi\protocol\vgaclass.h \
- $(SDK_INSTALL_DIR)\include\efi\protocol\efidbg.h \
+ $(SDK_INSTALL_DIR)\include\efi\protocol\vgaclass.h
!IF "$(PROCESSOR)" == "Ia32"
@@ -22,7 +21,6 @@ INC_DEPS = $(INC_DEPS) \
!IF "$(PROCESSOR)" == "Ia64"
INC_DEPS = $(INC_DEPS) \
- $(SDK_INSTALL_DIR)\include\efi\protocol\$(PROCESSOR)\eficontext.h \
!ENDIF
--
2.17.1

1
EMPTY
View File

@ -1 +0,0 @@

421
gnu-efi.spec Normal file
View File

@ -0,0 +1,421 @@
Summary: Development Libraries and headers for EFI
Name: gnu-efi
Version: 3.0.8
%global tarball_version 3.0.6
Release: 4%{?dist}%{?buildid}
Epoch: 1
Group: Development/System
License: BSD
URL: ftp://ftp.hpl.hp.com/pub/linux-ia64
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
BuildRequires: git
%ifarch x86_64
# 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-%{tarball_version}.tar.bz2
# dammit, rpmlint, shut up.
%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-Get-rid-of-some-unused-junk-that-has-the-BSD-4-claus.patch
%define debug_package %{nil}
# brp-strip-static-archive will senselessly /add/ timestamps and uid/gid
# data to our .a and make them not multilib clean if we don't have this.
# Note that if we don't have the shell quotes there, -p becomes $2 on its
# invocation, and so it completely ignores it.
#
# Also note that if we try to use -D as we should (so it doesn't add
# uid/gid), strip(1) from binutils-2.25.1-22.base.el7.x86_64 throws a
# syntax error.
#
# True story.
#
%global __strip "%{__strip} -p"
# Figure out the right file path to use
%global efidir %(eval echo $(grep ^ID= /etc/os-release | sed -e 's/^ID=//' -e 's/rhel/redhat/'))
%ifarch x86_64
%global efiarch x86_64
%endif
%ifarch aarch64
%global efiarch aarch64
%endif
%ifarch %{arm}
%global efiarch arm
%endif
%ifarch %{ix86}
%global efiarch ia32
%endif
%description
This package contains development headers and libraries for developing
applications that run under EFI (Extensible Firmware Interface).
%package devel
Summary: Development Libraries and headers for EFI
Group: Development/System
Obsoletes: gnu-efi < 1:3.0.2-1
Requires: gnu-efi
%description devel
This package contains development headers and libraries for developing
applications that run under EFI (Extensible Firmware Interface).
%package utils
Summary: Utilities for EFI systems
Group: Applications/System
%description utils
This package contains utilties for debugging and developing EFI systems.
%prep
%setup -q -n gnu-efi-%{tarball_version}
git init
git config user.email "gnu-efi-owner@fedoraproject.org"
git config user.name "Fedora Ninjas"
git config sendemail.to "gnu-efi-owner@fedoraproject.org"
git add .
git commit -a -q -m "%{version} baseline."
git am --ignore-whitespace %{patches} </dev/null
git config --unset user.email
git config --unset user.name
%build
# Package cannot build with %{?_smp_mflags}.
make
make apps
%ifarch x86_64
setarch linux32 -B make ARCH=ia32 PREFIX=%{_prefix} LIBDIR=%{_prefix}/%{lib}
setarch linux32 -B make ARCH=ia32 PREFIX=%{_prefix} LIBDIR=%{_prefix}/%{lib} apps
%endif
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/%{_libdir}/gnuefi
mkdir -p %{buildroot}/boot/efi/EFI/%{efidir}/%{efiarch}
make PREFIX=%{_prefix} LIBDIR=%{_libdir} INSTALLROOT=%{buildroot} install
mv %{buildroot}/%{_libdir}/*.lds %{buildroot}/%{_libdir}/*.o %{buildroot}/%{_libdir}/gnuefi
mv %{efiarch}/apps/{route80h.efi,modelist.efi} %{buildroot}/boot/efi/EFI/%{efidir}/%{efiarch}/
%ifarch x86_64
mkdir -p %{buildroot}/%{_prefix}/%{lib}/gnuefi
mkdir -p %{buildroot}/boot/efi/EFI/%{efidir}/ia32
setarch linux32 -B make PREFIX=%{_prefix} LIBDIR=%{_prefix}/%{lib} INSTALLROOT=%{buildroot} ARCH=ia32 install
mv %{buildroot}/%{_prefix}/%{lib}/*.{lds,o} %{buildroot}/%{_prefix}/%{lib}/gnuefi/
mv ia32/apps/{route80h.efi,modelist.efi} %{buildroot}/boot/efi/EFI/%{efidir}/ia32/
%endif
%files
%{_prefix}/%{lib}*/*
%files devel
%defattr(-,root,root,-)
%doc README.* ChangeLog
%{_includedir}/efi
%files utils
%dir %attr(0700,root,root) /boot/efi/EFI/%{efidir}/
%attr(0700,root,root) /boot/efi/EFI/%{efidir}/*/*.efi
%changelog
* Tue Jul 02 2019 Javier Martinez Canillas <javierm@redhat.com> - 3.0.8-4
- Add a gating.yaml file so the package can be properly gated.
Related: rhbz#1681788
* Mon Jul 01 2019 Javier Martinez Canillas <javierm@redhat.com> - 3.0.8-3
- Change mode attribute for files in /boot/efi to prevent conflicts.
Resolves: rhbz#1724562
* Thu Jul 19 2018 Peter Jones <pjones@redhat.com> - 3.0.8-2
- Get rid of some stuff we don't want.
* Tue Mar 20 2018 Peter Jones <pjones@redhat.com> - 3.0.8-1
- Update to 3.0.8 (from git).
* 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
* Thu Aug 24 2017 Peter Jones <pjones@redhat.com> - 3.0.5-11
- Don't make .reloc sections on Aarch64 binaries.
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.0.5-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.0.5-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Tue Jun 13 2017 Peter Jones <pjones@redhat.com> - 3.0.5-8
- Update this to try to get determanistic builds.
* Mon Mar 20 2017 Peter Jones <pjones@redhat.com> - 3.0.5-7
- Also build the ia32 bits in a separate 32-bit package for other consumers.
* Mon Mar 13 2017 Peter Jones <pjones@redhat.com> - 3.0.5-6
- Include ia32 bits in the x86_64 packages instead of making a separate
32-bit package
* Tue Feb 28 2017 Peter Jones <pjones@redhat.com> - 3.0.5-5
- Fix some bugs from the 3.0.5 release...
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.0.5-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Thu Feb 02 2017 Peter Jones <pjones@redhat.com> - 3.0.5-3
- Update to 3.0.5
* Tue Feb 23 2016 Peter Jones <pjones@redhat.com> - 3.0.3-3
- Include patches from upstream that are after 3.0.3 This should fix the arm
and aarch64 builds.
* Tue Feb 23 2016 Peter Jones <pjones@redhat.com> - 3.0.3-2
- We still need build-id patches in some places.
* Mon Feb 22 2016 Peter Jones <pjones@redhat.com> - 3.0.3-1
- Rebase to 3.0.3
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1:3.0.2-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Fri Jan 29 2016 Dan Horák <dan[at]danny.cz> - 1:3.0.2-3
- use safer method to evaluate %%efidir
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1:3.0.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Wed May 13 2015 Peter Jones <pjones@redhat.com> - 3.0.2-1
- Update to 3.0.2
- Fix base package requirement on subpackages
- Add setjmp, because this is my life.
* Tue Mar 10 2015 Peter Jones <pjones@redhat.com> - 3.0.1-1
- Update to 3.0.1
- New versioning scheme!
* Thu Nov 20 2014 Peter Jones <pjones@redhat.com> - 3.0w-2
- Use patches upstream is going to take for the build fixes
- Add some new protocol definitons.
* Fri Aug 22 2014 Kyle McMartin <kyle@fedoraproject.org> - 3.0w-0.1
- New upstream version 3.0w
- Add pjones' build fixes patch from that other distro.
- Enable AArch64
* Sat Aug 16 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0u-0.4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0u-0.3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Tue Sep 24 2013 Peter Jones <pjones@redhat.com> - 3.0u-0.1
- Update to 3.0u
- Split out subpackages so -devel can be multilib
- Fix path in apps subpackage to vary by distro.
* Sat Aug 03 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0t-0.2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Fri Jun 07 2013 Peter Jones <pjones@redhat.com> - 3.0t-0.1
- Update to 3.0t
- Don't allow use of mmx or sse registers.
* Thu May 16 2013 Peter Jones <pjones@redhat.com> - 3.0s-2
- Update to 3.0s
Related: rhbz#963359
* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0q-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Fri Jul 27 2012 Matthew Garrett <mjg@redhat.com> - 3.0q-1
- Update to current upstream
- License change - GPLv2+ to BSD
* Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0e-18
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
* Wed Apr 25 2012 Peter Jones <pjones@redhat.com> - 3.0e-17
- Align .reloc section as well to make secureboot work (mfleming)
* Fri Jan 13 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0e-16
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
* Thu Aug 11 2011 Peter Jones <pjones@redhat.com> - 3.0e-15
- Correctly pad the stack when doing uefi calls
Related: rhbz#677468
- Add ability to write UEFI callbacks and drivers
- Add test harness for ABI Calling Conventions
* Thu Jun 16 2011 Peter Jones <pjones@redhat.com> - 3.0e-14
- Handle uninitialized GOP driver gracefully.
* Wed Feb 09 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0e-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Fri Sep 10 2010 Peter Jones <pjones@redhat.com> - 3.0e-12
- Add "modelist.efi" test utility in apps/
* Mon Jul 26 2010 Peter Jones <pjones@redhat.com> - 3.0e-11
- Add PciIo headers.
* Fri Jul 23 2010 Peter Jones <pjones@redhat.com> - 3.0e-10
- Add UEFI 2.x boot services.
* Tue Aug 11 2009 Peter Jones <pjones@redhat.com> - 3.0e-9
- Change ExclusiveArch to reflect arch changes in repos.
* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0e-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
* Fri Apr 03 2009 Peter Jones <pjones@redhat.com> - 3.0e-7
- Use nickc's workaround for #492183
* Tue Mar 31 2009 Peter Jones <pjones@redhat.com> - 3.0e-6.1
- Make a test package for nickc.
* Thu Mar 12 2009 Chris Lumens <clumens@redhat.com> 3.0e-6
- Add IA64 back into the list of build arches (#489544).
* Mon Mar 02 2009 Peter Jones <pjones@redhat.com> - 3.0e-5
- Switch to i586 from i386.
* Tue Feb 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0e-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
* Fri Feb 13 2009 Peter Jones <pjones@redhat.com> - 3.0e-3
- Pad sections out in the provided linker scripts to make sure they all of
some content.
* Fri Oct 03 2008 Peter Jones <pjones@redhat.com> - 3.0e-2
- Fix install paths on x86_64.
* Thu Oct 02 2008 Peter Jones <pjones@redhat.com> - 3.0e-1
- Update to 3.0e
- Fix relocation bug in 3.0e
* Tue Jul 29 2008 Tom "spot" Callaway <tcallawa@redhat.com> - 3.0d-6
- fix license tag
* Mon Jul 28 2008 Peter Jones <pjones@redhat.com> - 3.0d-5
- Remove ia64 palproc code since its license isn't usable.
- Remove ia64 from ExclusiveArch since it can't build...
* Thu Mar 27 2008 Peter Jones <pjones@redhat.com> - 3.0d-4
- Fix uefi_call_wrapper(x, 10, ...) .
- Add efi_main wrappers and EFI_CALL() macro so drivers are possible.
* Mon Feb 18 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 3.0d-3
- Autorebuild for GCC 4.3
* Fri Jan 11 2008 Peter Jones <pjones@redhat.com> - 3.0d-2
- Get rid of a bogus #ifdef .
* Wed Dec 19 2007 Peter Jones <pjones@redhat.com> - 3.0d-1
- Update to 3.0d
* Tue Jun 12 2007 Chris Lumens <clumens@redhat.com> - 3.0c-2
- Fixes for package review (#225846).
* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 3.0c-1.1
- rebuild
* Thu Apr 27 2006 Chris Lumens <clumens@redhat.com> 3.0c-1
- Upgrade to gnu-efi-3.0c.
- Enable build on i386.
* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 3.0a-7.2
- rebuilt for new gcc4.1 snapshot and glibc changes
* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com>
- rebuilt
* Thu Mar 3 2005 Jeremy Katz <katzj@redhat.com> - 3.0a-7
- rebuild with gcc 4
* Tue Sep 21 2004 Jeremy Katz <katzj@redhat.com> - 3.0a-6
- add fix from Jesse Barnes for newer binutils (#129197)
* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
- rebuilt
* Wed Apr 21 2004 Jeremy Katz <katzj@redhat.com> - 3.0a-4
- actually add the patch
* Tue Apr 20 2004 Bill Nottingham <notting@redhat.com> 3.0a-3
- add patch to coalesce some relocations (#120080, <erikj@sgi.com>)
* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
- rebuilt
* Fri Oct 4 2002 Jeremy Katz <katzj@redhat.com>
- rebuild in new environment
* Sun Jul 8 2001 Bill Nottingham <notting@redhat.com>
- update to 3.0
* Tue Jun 5 2001 Bill Nottingham <notting@redhat.com>
- add fix for invocations from the boot manager menu (#42222)
* Tue May 22 2001 Bill Nottingham <notting@redhat.com>
- add bugfix for efibootmgr (<schwab@suse.de>)
* Mon May 21 2001 Bill Nottingham <notting@redhat.com>
- update to 2.5
- add in efibootmgr from Dell (<Matt_Domsch@dell.com>)
* Thu May 3 2001 Bill Nottingham <notting@redhat.com>
- fix booting of kernels with extra arguments (#37711)
* Wed Apr 25 2001 Bill Nottingham <notting@redhat.com>
- take out Stephane's initrd patch
* Fri Apr 20 2001 Bill Nottingham <notting@redhat.com>
- fix the verbosity patch to not break passing arguments to images
* Wed Apr 18 2001 Bill Nottingham <notting@redhat.com>
- update to 2.0, build elilo, obsolete eli
* Tue Dec 5 2000 Bill Nottingham <notting@redhat.com>
- update to 1.1
* Thu Oct 26 2000 Bill Nottingham <notting@redhat.com>
- add patch for new toolchain, update to 1.0
* Thu Aug 17 2000 Bill Nottingham <notting@redhat.com>
- update to 0.9

1
sources Normal file
View File

@ -0,0 +1 @@
SHA512 (gnu-efi-3.0.6.tar.bz2) = f1b17766d8ae000c0177ea2126d87883f254ab01ac020e4bfaa9ad2d3d60a66d07b6237d9842e5989c4da3fd23152b5c592ef863fdc9806901f43c43582a2258