Upstream fixes, minor cleanups
This commit is contained in:
parent
d283f95505
commit
ba7d7d749a
111
0001-efibind-Fix-usage-of-efi-headers-from-C-code.patch
Normal file
111
0001-efibind-Fix-usage-of-efi-headers-from-C-code.patch
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
From 6685cd000223f6b7d667e2854cd3d622d078d147 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander von Gluck IV <kallisti5@unixzen.com>
|
||||||
|
Date: Wed, 27 Nov 2019 17:03:42 -0600
|
||||||
|
Subject: [PATCH 1/2] efibind: Fix usage of efi headers from C++ code
|
||||||
|
|
||||||
|
* __STDC_VERSION__ is undefined when headers are called from C++
|
||||||
|
code resulting in not using stdint.h and efibind.h
|
||||||
|
"making a guess" on what they are. extern "C" will not define
|
||||||
|
__STDC_VERSION__.
|
||||||
|
* Always leverage stdint.h on C++.
|
||||||
|
* Honestly, gnu-efi should always use stdint.h, or find a better
|
||||||
|
way to detect it. (or platforms without it need to catch up to 2007)
|
||||||
|
---
|
||||||
|
inc/aa64/efibind.h | 2 +-
|
||||||
|
inc/arm/efibind.h | 2 +-
|
||||||
|
inc/ia32/efibind.h | 2 +-
|
||||||
|
inc/ia64/efibind.h | 2 +-
|
||||||
|
inc/mips64el/efibind.h | 2 +-
|
||||||
|
inc/x64/efibind.h | 4 ++--
|
||||||
|
6 files changed, 7 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/inc/aa64/efibind.h b/inc/aa64/efibind.h
|
||||||
|
index 3c8cf96..c2c546b 100644
|
||||||
|
--- a/inc/aa64/efibind.h
|
||||||
|
+++ b/inc/aa64/efibind.h
|
||||||
|
@@ -16,7 +16,7 @@
|
||||||
|
*/
|
||||||
|
#ifndef GNU_EFI_AA64_EFI_BIND_H
|
||||||
|
#define GNU_EFI_AA64_EFI_BIND_H
|
||||||
|
-#if !defined(_MSC_VER) && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ))
|
||||||
|
+#if !defined(_MSC_VER) && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )) && !defined(__cplusplus)
|
||||||
|
|
||||||
|
// ANSI C 1999/2000 stdint.h integer width declarations
|
||||||
|
|
||||||
|
diff --git a/inc/arm/efibind.h b/inc/arm/efibind.h
|
||||||
|
index 7a22b9c..012d3d2 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(_MSC_VER) && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ))
|
||||||
|
+#if !defined(_MSC_VER) && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )) && !defined(__cplusplus)
|
||||||
|
|
||||||
|
// ANSI C 1999/2000 stdint.h integer width declarations
|
||||||
|
|
||||||
|
diff --git a/inc/ia32/efibind.h b/inc/ia32/efibind.h
|
||||||
|
index dd01385..27459e4 100644
|
||||||
|
--- a/inc/ia32/efibind.h
|
||||||
|
+++ b/inc/ia32/efibind.h
|
||||||
|
@@ -25,7 +25,7 @@ Revision History
|
||||||
|
// Basic int types of various widths
|
||||||
|
//
|
||||||
|
|
||||||
|
-#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )
|
||||||
|
+#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ) && !defined(__cplusplus)
|
||||||
|
|
||||||
|
// No ANSI C 1999/2000 stdint.h integer width declarations
|
||||||
|
|
||||||
|
diff --git a/inc/ia64/efibind.h b/inc/ia64/efibind.h
|
||||||
|
index b9b2e62..3ace8d5 100644
|
||||||
|
--- a/inc/ia64/efibind.h
|
||||||
|
+++ b/inc/ia64/efibind.h
|
||||||
|
@@ -24,7 +24,7 @@ Revision History
|
||||||
|
// Basic int types of various widths
|
||||||
|
//
|
||||||
|
|
||||||
|
-#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )
|
||||||
|
+#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ) && !defined(__cplusplus)
|
||||||
|
|
||||||
|
// No ANSI C 1999/2000 stdint.h integer width declarations
|
||||||
|
|
||||||
|
diff --git a/inc/mips64el/efibind.h b/inc/mips64el/efibind.h
|
||||||
|
index 32241e5..1f08cd3 100644
|
||||||
|
--- a/inc/mips64el/efibind.h
|
||||||
|
+++ b/inc/mips64el/efibind.h
|
||||||
|
@@ -17,7 +17,7 @@
|
||||||
|
* either version 2 of the License, or (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )
|
||||||
|
+#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ) && !defined(__cplusplus)
|
||||||
|
|
||||||
|
// ANSI C 1999/2000 stdint.h integer width declarations
|
||||||
|
|
||||||
|
diff --git a/inc/x64/efibind.h b/inc/x64/efibind.h
|
||||||
|
index ae40595..31e9e11 100644
|
||||||
|
--- a/inc/x64/efibind.h
|
||||||
|
+++ b/inc/x64/efibind.h
|
||||||
|
@@ -34,7 +34,7 @@ Revision History
|
||||||
|
// Basic int types of various widths
|
||||||
|
//
|
||||||
|
|
||||||
|
-#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )
|
||||||
|
+#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ) && !defined(__cplusplus)
|
||||||
|
|
||||||
|
// No ANSI C 1999/2000 stdint.h integer width declarations
|
||||||
|
|
||||||
|
@@ -86,7 +86,7 @@ Revision History
|
||||||
|
#endif
|
||||||
|
typedef uint64_t uintptr_t;
|
||||||
|
typedef int64_t intptr_t;
|
||||||
|
-#elif defined(__GNUC__)
|
||||||
|
+#else
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
--
|
||||||
|
2.24.1
|
||||||
|
|
@ -1,37 +1,61 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From f08f27f5939559997c3177692348fdb7fcde7c89 Mon Sep 17 00:00:00 2001
|
||||||
From: Peter Jones <pjones@redhat.com>
|
From: Peter Jones <pjones@redhat.com>
|
||||||
Date: Fri, 23 Aug 2019 16:23:21 -0400
|
Date: Fri, 23 Aug 2019 16:23:21 -0400
|
||||||
Subject: [PATCH] Make ELF constructors and destructors work.
|
Subject: [PATCH 01/18] Make ELF constructors and destructors work.
|
||||||
|
|
||||||
|
This makes setup and teardown functions defined with
|
||||||
|
__attribute__((__constructor__) and __attribute__((__destructor__)) work
|
||||||
|
in normal circumstances in EFI binaries.
|
||||||
|
|
||||||
|
A couple of notes:
|
||||||
|
- it implements both the old-style .ctors/.dtors methods and the newer
|
||||||
|
style .init_array/.fini_array ELF constructor and destructor arrays,
|
||||||
|
processed in the order:
|
||||||
|
.init_array[]
|
||||||
|
.ctors[]
|
||||||
|
efi_main()
|
||||||
|
.dtors[]
|
||||||
|
.fini_array[]
|
||||||
|
- Destructors will only be called if efi_main() exits using "return";
|
||||||
|
any call to Exit() will still longjmp() past them.
|
||||||
|
- InitializeLib() has already been called before constructors run, so
|
||||||
|
they don't need to call it (and neither does anything else.) For
|
||||||
|
compatibility, it has been altered so calling it more than once is
|
||||||
|
safe.
|
||||||
|
- No attempt is made to handle any constructor or destructor with a
|
||||||
|
prototype other than "void func(void);", but note that InitializeLib
|
||||||
|
has been called, so LibImageHandle, ST, BS, and RT are set.
|
||||||
|
- The ia64 and mips64el arches have not been tested.
|
||||||
|
|
||||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||||
---
|
---
|
||||||
apps/Makefile | 5 +-
|
apps/Makefile | 5 ++-
|
||||||
apps/ctors_fns.c | 26 ++++++++++
|
apps/ctors_fns.c | 26 ++++++++++++
|
||||||
apps/ctors_test.c | 20 ++++++++
|
apps/ctors_test.c | 20 +++++++++
|
||||||
gnuefi/crt0-efi-aa64.S | 2 +
|
gnuefi/crt0-efi-aa64.S | 2 +-
|
||||||
gnuefi/crt0-efi-arm.S | 2 +
|
gnuefi/crt0-efi-arm.S | 2 +-
|
||||||
gnuefi/crt0-efi-ia32.S | 2 +
|
gnuefi/crt0-efi-ia32.S | 8 ++--
|
||||||
gnuefi/crt0-efi-ia64.S | 6 +++
|
gnuefi/crt0-efi-ia64.S | 2 +-
|
||||||
gnuefi/crt0-efi-mips64el.S | 12 ++++-
|
gnuefi/crt0-efi-mips64el.S | 4 +-
|
||||||
gnuefi/crt0-efi-x64.S | 2 +
|
gnuefi/crt0-efi-x64.S | 2 +-
|
||||||
gnuefi/elf_aa64_efi.lds | 15 ++++++
|
gnuefi/elf_aa64_efi.lds | 15 +++++++
|
||||||
gnuefi/elf_arm_efi.lds | 14 ++++++
|
gnuefi/elf_arm_efi.lds | 14 ++++++
|
||||||
gnuefi/elf_ia32_efi.lds | 15 ++++++
|
gnuefi/elf_ia32_efi.lds | 15 +++++++
|
||||||
gnuefi/elf_ia32_fbsd_efi.lds | 15 ++++++
|
gnuefi/elf_ia32_fbsd_efi.lds | 15 +++++++
|
||||||
gnuefi/elf_ia64_efi.lds | 15 ++++++
|
gnuefi/elf_ia64_efi.lds | 15 +++++++
|
||||||
gnuefi/elf_mips64el_efi.lds | 14 ++++++
|
gnuefi/elf_mips64el_efi.lds | 14 ++++++
|
||||||
gnuefi/elf_x64_efi.lds | 16 +++++++
|
gnuefi/elf_x64_efi.lds | 16 +++++++
|
||||||
gnuefi/elf_x64_fbsd_efi.lds | 15 ++++++
|
gnuefi/elf_x64_fbsd_efi.lds | 15 +++++++
|
||||||
lib/Makefile | 2 +-
|
lib/Makefile | 4 +-
|
||||||
lib/ctors.c | 45 +++++++++++++++++
|
lib/entry.c | 58 +++++++++++++++++++++++++
|
||||||
lib/init.c | 112 ++++++++++++++++++++++++++-----------------
|
lib/init.c | 82 ++++++++++++++++++------------------
|
||||||
20 files changed, 307 insertions(+), 48 deletions(-)
|
20 files changed, 281 insertions(+), 53 deletions(-)
|
||||||
create mode 100644 apps/ctors_fns.c
|
create mode 100644 apps/ctors_fns.c
|
||||||
create mode 100644 apps/ctors_test.c
|
create mode 100644 apps/ctors_test.c
|
||||||
create mode 100644 lib/ctors.c
|
create mode 100644 lib/entry.c
|
||||||
|
|
||||||
diff --git a/apps/Makefile b/apps/Makefile
|
diff --git a/apps/Makefile b/apps/Makefile
|
||||||
index cba84f4a3c1..a2476d37bed 100644
|
index a95620c..2808837 100644
|
||||||
--- a/apps/Makefile
|
--- a/apps/Makefile
|
||||||
+++ b/apps/Makefile
|
+++ b/apps/Makefile
|
||||||
@@ -62,7 +62,8 @@ TARGET_APPS = t.efi t2.efi t3.efi t4.efi t5.efi t6.efi \
|
@@ -62,7 +62,8 @@ TARGET_APPS = t.efi t2.efi t3.efi t4.efi t5.efi t6.efi \
|
||||||
@ -55,7 +79,7 @@ index cba84f4a3c1..a2476d37bed 100644
|
|||||||
|
|
||||||
diff --git a/apps/ctors_fns.c b/apps/ctors_fns.c
|
diff --git a/apps/ctors_fns.c b/apps/ctors_fns.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 00000000000..89c84f43c6b
|
index 0000000..6241904
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/apps/ctors_fns.c
|
+++ b/apps/ctors_fns.c
|
||||||
@@ -0,0 +1,26 @@
|
@@ -0,0 +1,26 @@
|
||||||
@ -73,21 +97,21 @@ index 00000000000..89c84f43c6b
|
|||||||
+static void __attribute__((__constructor__)) ctor(void)
|
+static void __attribute__((__constructor__)) ctor(void)
|
||||||
+{
|
+{
|
||||||
+ Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
|
+ Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
|
||||||
+ constructed_value = 1;
|
+ constructed_value = 1;
|
||||||
+ Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
|
+ Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static void __attribute__((__destructor__)) dtor(void)
|
+static void __attribute__((__destructor__)) dtor(void)
|
||||||
+{
|
+{
|
||||||
+ Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
|
+ Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
|
||||||
+ constructed_value = 0;
|
+ constructed_value = 0;
|
||||||
+ Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
|
+ Print(L"%a:%d:%a() constructed_value:%d\n", __FILE__, __LINE__, __func__, constructed_value);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+// vim:fenc=utf-8:tw=75:noet
|
+// vim:fenc=utf-8:tw=75:noet
|
||||||
diff --git a/apps/ctors_test.c b/apps/ctors_test.c
|
diff --git a/apps/ctors_test.c b/apps/ctors_test.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 00000000000..7e48da8ef35
|
index 0000000..7e48da8
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/apps/ctors_test.c
|
+++ b/apps/ctors_test.c
|
||||||
@@ -0,0 +1,20 @@
|
@@ -0,0 +1,20 @@
|
||||||
@ -112,108 +136,96 @@ index 00000000000..7e48da8ef35
|
|||||||
+
|
+
|
||||||
+// vim:fenc=utf-8:tw=75:noet
|
+// vim:fenc=utf-8:tw=75:noet
|
||||||
diff --git a/gnuefi/crt0-efi-aa64.S b/gnuefi/crt0-efi-aa64.S
|
diff --git a/gnuefi/crt0-efi-aa64.S b/gnuefi/crt0-efi-aa64.S
|
||||||
index d6e610b8c79..1d85d78785e 100644
|
index d6e610b..a930258 100644
|
||||||
--- a/gnuefi/crt0-efi-aa64.S
|
--- a/gnuefi/crt0-efi-aa64.S
|
||||||
+++ b/gnuefi/crt0-efi-aa64.S
|
+++ b/gnuefi/crt0-efi-aa64.S
|
||||||
@@ -124,7 +124,9 @@ _start:
|
@@ -124,7 +124,7 @@ _start:
|
||||||
cbnz x0, 0f
|
cbnz x0, 0f
|
||||||
|
|
||||||
ldp x0, x1, [sp, #16]
|
ldp x0, x1, [sp, #16]
|
||||||
+ bl _ctors
|
- bl efi_main
|
||||||
bl efi_main
|
+ bl _entry
|
||||||
+ bl _dtors
|
|
||||||
|
|
||||||
0: ldp x29, x30, [sp], #32
|
0: ldp x29, x30, [sp], #32
|
||||||
ret
|
ret
|
||||||
diff --git a/gnuefi/crt0-efi-arm.S b/gnuefi/crt0-efi-arm.S
|
diff --git a/gnuefi/crt0-efi-arm.S b/gnuefi/crt0-efi-arm.S
|
||||||
index c5bb6d482da..135fdcae8c4 100644
|
index c5bb6d4..04e75e9 100644
|
||||||
--- a/gnuefi/crt0-efi-arm.S
|
--- a/gnuefi/crt0-efi-arm.S
|
||||||
+++ b/gnuefi/crt0-efi-arm.S
|
+++ b/gnuefi/crt0-efi-arm.S
|
||||||
@@ -136,7 +136,9 @@ _start:
|
@@ -136,7 +136,7 @@ _start:
|
||||||
bne 0f
|
bne 0f
|
||||||
|
|
||||||
ldmfd sp, {r0-r1}
|
ldmfd sp, {r0-r1}
|
||||||
+ bl _ctors
|
- bl efi_main
|
||||||
bl efi_main
|
+ bl _entry
|
||||||
+ bl _dtors
|
|
||||||
|
|
||||||
0: add sp, sp, #12
|
0: add sp, sp, #12
|
||||||
ldr pc, [sp], #4
|
ldr pc, [sp], #4
|
||||||
diff --git a/gnuefi/crt0-efi-ia32.S b/gnuefi/crt0-efi-ia32.S
|
diff --git a/gnuefi/crt0-efi-ia32.S b/gnuefi/crt0-efi-ia32.S
|
||||||
index f9d5191ecb5..93eeda4b703 100644
|
index f9d5191..8e8e372 100644
|
||||||
--- a/gnuefi/crt0-efi-ia32.S
|
--- a/gnuefi/crt0-efi-ia32.S
|
||||||
+++ b/gnuefi/crt0-efi-ia32.S
|
+++ b/gnuefi/crt0-efi-ia32.S
|
||||||
@@ -59,7 +59,9 @@ _start:
|
@@ -56,13 +56,13 @@ _start:
|
||||||
testl %eax,%eax
|
call _relocate
|
||||||
jne .exit
|
popl %ebx
|
||||||
|
popl %ebx
|
||||||
|
- testl %eax,%eax
|
||||||
|
- jne .exit
|
||||||
|
+ testl %eax,%eax
|
||||||
|
+ jne .exit
|
||||||
|
|
||||||
+ call _ctors
|
- call efi_main # call app with "image" and "systab" argument
|
||||||
call efi_main # call app with "image" and "systab" argument
|
+ call _entry # call app with "image" and "systab" argument
|
||||||
+ call _dtors
|
|
||||||
|
|
||||||
.exit: leave
|
.exit: leave
|
||||||
ret
|
- ret
|
||||||
|
+ ret
|
||||||
|
|
||||||
|
// hand-craft a dummy .reloc section so EFI knows it's a relocatable executable:
|
||||||
|
|
||||||
diff --git a/gnuefi/crt0-efi-ia64.S b/gnuefi/crt0-efi-ia64.S
|
diff --git a/gnuefi/crt0-efi-ia64.S b/gnuefi/crt0-efi-ia64.S
|
||||||
index 40c3c837a1c..14b5683cac7 100644
|
index 40c3c83..dacb4c4 100644
|
||||||
--- a/gnuefi/crt0-efi-ia64.S
|
--- a/gnuefi/crt0-efi-ia64.S
|
||||||
+++ b/gnuefi/crt0-efi-ia64.S
|
+++ b/gnuefi/crt0-efi-ia64.S
|
||||||
@@ -56,7 +56,13 @@ _start:
|
@@ -56,7 +56,7 @@ _start:
|
||||||
|
|
||||||
mov out0=in0 // image handle
|
mov out0=in0 // image handle
|
||||||
mov out1=in1 // systab
|
mov out1=in1 // systab
|
||||||
+ ;;
|
- br.call.sptk.few rp=efi_main
|
||||||
+ br.call.sptk.few rp=_ctors
|
+ br.call.sptk.few rp=_entry
|
||||||
+ ;;
|
|
||||||
br.call.sptk.few rp=efi_main
|
|
||||||
+ ;;
|
|
||||||
+ br.call.sptk.few rp=_dtors
|
|
||||||
+ ;;
|
|
||||||
.Lret2:
|
.Lret2:
|
||||||
.exit:
|
.exit:
|
||||||
mov ar.pfs=loc0
|
mov ar.pfs=loc0
|
||||||
diff --git a/gnuefi/crt0-efi-mips64el.S b/gnuefi/crt0-efi-mips64el.S
|
diff --git a/gnuefi/crt0-efi-mips64el.S b/gnuefi/crt0-efi-mips64el.S
|
||||||
index 6a62aca98b4..ee871cd33ce 100644
|
index 6a62aca..5ad2503 100644
|
||||||
--- a/gnuefi/crt0-efi-mips64el.S
|
--- a/gnuefi/crt0-efi-mips64el.S
|
||||||
+++ b/gnuefi/crt0-efi-mips64el.S
|
+++ b/gnuefi/crt0-efi-mips64el.S
|
||||||
@@ -172,11 +172,19 @@ _pc:
|
@@ -172,8 +172,8 @@ _pc:
|
||||||
|
|
||||||
// a0: ImageHandle
|
// a0: ImageHandle
|
||||||
ld $a0, 16($sp)
|
ld $a0, 16($sp)
|
||||||
- // call efi_main
|
- // call efi_main
|
||||||
- dla $t9, efi_main
|
- dla $t9, efi_main
|
||||||
+ // call _ctors
|
+ // call _start
|
||||||
+ dla $t9, _ctors
|
+ dla $t9, _entry
|
||||||
jalr $t9
|
jalr $t9
|
||||||
// a1: SystemTable
|
// a1: SystemTable
|
||||||
ld $a1, 24($sp)
|
ld $a1, 24($sp)
|
||||||
+ // call efi_main
|
|
||||||
+ dla $t9, efi_main
|
|
||||||
+ jalr $t9
|
|
||||||
+ nop
|
|
||||||
+ // call _dtors
|
|
||||||
+ dla $t9, _dtors
|
|
||||||
+ jalr $t9
|
|
||||||
+ nop
|
|
||||||
|
|
||||||
1:
|
|
||||||
ld $gp, 8($sp)
|
|
||||||
diff --git a/gnuefi/crt0-efi-x64.S b/gnuefi/crt0-efi-x64.S
|
diff --git a/gnuefi/crt0-efi-x64.S b/gnuefi/crt0-efi-x64.S
|
||||||
index 6533af7461f..5501876bbb3 100644
|
index 6533af7..3fe361b 100644
|
||||||
--- a/gnuefi/crt0-efi-x64.S
|
--- a/gnuefi/crt0-efi-x64.S
|
||||||
+++ b/gnuefi/crt0-efi-x64.S
|
+++ b/gnuefi/crt0-efi-x64.S
|
||||||
@@ -56,8 +56,10 @@ _start:
|
@@ -56,7 +56,7 @@ _start:
|
||||||
popq %rdi
|
popq %rdi
|
||||||
popq %rsi
|
popq %rsi
|
||||||
|
|
||||||
+ call _ctors
|
- call efi_main
|
||||||
call efi_main
|
+ call _entry
|
||||||
addq $8, %rsp
|
addq $8, %rsp
|
||||||
+ call _dtors
|
|
||||||
|
|
||||||
.exit:
|
.exit:
|
||||||
ret
|
|
||||||
diff --git a/gnuefi/elf_aa64_efi.lds b/gnuefi/elf_aa64_efi.lds
|
diff --git a/gnuefi/elf_aa64_efi.lds b/gnuefi/elf_aa64_efi.lds
|
||||||
index 836d98255d8..7220636e40c 100644
|
index 836d982..7220636 100644
|
||||||
--- a/gnuefi/elf_aa64_efi.lds
|
--- a/gnuefi/elf_aa64_efi.lds
|
||||||
+++ b/gnuefi/elf_aa64_efi.lds
|
+++ b/gnuefi/elf_aa64_efi.lds
|
||||||
@@ -26,6 +26,20 @@ SECTIONS
|
@@ -26,6 +26,20 @@ SECTIONS
|
||||||
@ -246,7 +258,7 @@ index 836d98255d8..7220636e40c 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/gnuefi/elf_arm_efi.lds b/gnuefi/elf_arm_efi.lds
|
diff --git a/gnuefi/elf_arm_efi.lds b/gnuefi/elf_arm_efi.lds
|
||||||
index 665bbdbf065..f891921e58f 100644
|
index 665bbdb..f891921 100644
|
||||||
--- a/gnuefi/elf_arm_efi.lds
|
--- a/gnuefi/elf_arm_efi.lds
|
||||||
+++ b/gnuefi/elf_arm_efi.lds
|
+++ b/gnuefi/elf_arm_efi.lds
|
||||||
@@ -26,6 +26,20 @@ SECTIONS
|
@@ -26,6 +26,20 @@ SECTIONS
|
||||||
@ -271,7 +283,7 @@ index 665bbdbf065..f891921e58f 100644
|
|||||||
it all into .data: */
|
it all into .data: */
|
||||||
. = ALIGN(16);
|
. = ALIGN(16);
|
||||||
diff --git a/gnuefi/elf_ia32_efi.lds b/gnuefi/elf_ia32_efi.lds
|
diff --git a/gnuefi/elf_ia32_efi.lds b/gnuefi/elf_ia32_efi.lds
|
||||||
index f27fe5fc6e6..739c370c9eb 100644
|
index f27fe5f..739c370 100644
|
||||||
--- a/gnuefi/elf_ia32_efi.lds
|
--- a/gnuefi/elf_ia32_efi.lds
|
||||||
+++ b/gnuefi/elf_ia32_efi.lds
|
+++ b/gnuefi/elf_ia32_efi.lds
|
||||||
@@ -40,6 +40,21 @@ SECTIONS
|
@@ -40,6 +40,21 @@ SECTIONS
|
||||||
@ -297,7 +309,7 @@ index f27fe5fc6e6..739c370c9eb 100644
|
|||||||
it all into .data: */
|
it all into .data: */
|
||||||
*(.sbss)
|
*(.sbss)
|
||||||
diff --git a/gnuefi/elf_ia32_fbsd_efi.lds b/gnuefi/elf_ia32_fbsd_efi.lds
|
diff --git a/gnuefi/elf_ia32_fbsd_efi.lds b/gnuefi/elf_ia32_fbsd_efi.lds
|
||||||
index cd309e24f7f..33c38a0b2d0 100644
|
index cd309e2..33c38a0 100644
|
||||||
--- a/gnuefi/elf_ia32_fbsd_efi.lds
|
--- a/gnuefi/elf_ia32_fbsd_efi.lds
|
||||||
+++ b/gnuefi/elf_ia32_fbsd_efi.lds
|
+++ b/gnuefi/elf_ia32_fbsd_efi.lds
|
||||||
@@ -40,6 +40,21 @@ SECTIONS
|
@@ -40,6 +40,21 @@ SECTIONS
|
||||||
@ -323,7 +335,7 @@ index cd309e24f7f..33c38a0b2d0 100644
|
|||||||
it all into .data: */
|
it all into .data: */
|
||||||
*(.sbss)
|
*(.sbss)
|
||||||
diff --git a/gnuefi/elf_ia64_efi.lds b/gnuefi/elf_ia64_efi.lds
|
diff --git a/gnuefi/elf_ia64_efi.lds b/gnuefi/elf_ia64_efi.lds
|
||||||
index 190792a0c94..5afd6443722 100644
|
index 190792a..5afd644 100644
|
||||||
--- a/gnuefi/elf_ia64_efi.lds
|
--- a/gnuefi/elf_ia64_efi.lds
|
||||||
+++ b/gnuefi/elf_ia64_efi.lds
|
+++ b/gnuefi/elf_ia64_efi.lds
|
||||||
@@ -39,6 +39,21 @@ SECTIONS
|
@@ -39,6 +39,21 @@ SECTIONS
|
||||||
@ -349,7 +361,7 @@ index 190792a0c94..5afd6443722 100644
|
|||||||
it all into .data: */
|
it all into .data: */
|
||||||
*(.dynbss)
|
*(.dynbss)
|
||||||
diff --git a/gnuefi/elf_mips64el_efi.lds b/gnuefi/elf_mips64el_efi.lds
|
diff --git a/gnuefi/elf_mips64el_efi.lds b/gnuefi/elf_mips64el_efi.lds
|
||||||
index 4d1a077d8f8..cc0eee3bdcd 100644
|
index 4d1a077..cc0eee3 100644
|
||||||
--- a/gnuefi/elf_mips64el_efi.lds
|
--- a/gnuefi/elf_mips64el_efi.lds
|
||||||
+++ b/gnuefi/elf_mips64el_efi.lds
|
+++ b/gnuefi/elf_mips64el_efi.lds
|
||||||
@@ -27,6 +27,20 @@ SECTIONS
|
@@ -27,6 +27,20 @@ SECTIONS
|
||||||
@ -374,7 +386,7 @@ index 4d1a077d8f8..cc0eee3bdcd 100644
|
|||||||
it all into .data: */
|
it all into .data: */
|
||||||
. = ALIGN(16);
|
. = ALIGN(16);
|
||||||
diff --git a/gnuefi/elf_x64_efi.lds b/gnuefi/elf_x64_efi.lds
|
diff --git a/gnuefi/elf_x64_efi.lds b/gnuefi/elf_x64_efi.lds
|
||||||
index c7a105898c8..356e63bb8a7 100644
|
index c7a1058..356e63b 100644
|
||||||
--- a/gnuefi/elf_x64_efi.lds
|
--- a/gnuefi/elf_x64_efi.lds
|
||||||
+++ b/gnuefi/elf_x64_efi.lds
|
+++ b/gnuefi/elf_x64_efi.lds
|
||||||
@@ -30,6 +30,7 @@ SECTIONS
|
@@ -30,6 +30,7 @@ SECTIONS
|
||||||
@ -408,7 +420,7 @@ index c7a105898c8..356e63bb8a7 100644
|
|||||||
it all into .data: */
|
it all into .data: */
|
||||||
*(.sbss)
|
*(.sbss)
|
||||||
diff --git a/gnuefi/elf_x64_fbsd_efi.lds b/gnuefi/elf_x64_fbsd_efi.lds
|
diff --git a/gnuefi/elf_x64_fbsd_efi.lds b/gnuefi/elf_x64_fbsd_efi.lds
|
||||||
index 705719bf68b..e371e5b784f 100644
|
index 705719b..e371e5b 100644
|
||||||
--- a/gnuefi/elf_x64_fbsd_efi.lds
|
--- a/gnuefi/elf_x64_fbsd_efi.lds
|
||||||
+++ b/gnuefi/elf_x64_fbsd_efi.lds
|
+++ b/gnuefi/elf_x64_fbsd_efi.lds
|
||||||
@@ -36,6 +36,21 @@ SECTIONS
|
@@ -36,6 +36,21 @@ SECTIONS
|
||||||
@ -434,24 +446,26 @@ index 705719bf68b..e371e5b784f 100644
|
|||||||
it all into .data: */
|
it all into .data: */
|
||||||
*(.sbss)
|
*(.sbss)
|
||||||
diff --git a/lib/Makefile b/lib/Makefile
|
diff --git a/lib/Makefile b/lib/Makefile
|
||||||
index 8bf94000e33..6d7896b0496 100644
|
index 8bf9400..1c2ff1d 100644
|
||||||
--- a/lib/Makefile
|
--- a/lib/Makefile
|
||||||
+++ b/lib/Makefile
|
+++ b/lib/Makefile
|
||||||
@@ -43,7 +43,7 @@ include $(SRCDIR)/../Make.defaults
|
@@ -43,8 +43,8 @@ include $(SRCDIR)/../Make.defaults
|
||||||
TOPDIR = $(SRCDIR)/..
|
TOPDIR = $(SRCDIR)/..
|
||||||
|
|
||||||
CDIR = $(TOPDIR)/..
|
CDIR = $(TOPDIR)/..
|
||||||
-FILES = boxdraw smbios console crc data debug dpath \
|
-FILES = boxdraw smbios console crc data debug dpath \
|
||||||
+FILES = boxdraw smbios console crc ctors data debug dpath \
|
- error event exit guid hand hw init lock \
|
||||||
error event exit guid hand hw init lock \
|
+FILES = boxdraw smbios console crc data debug dpath \
|
||||||
|
+ entry error event exit guid hand hw init lock \
|
||||||
misc print sread str cmdline \
|
misc print sread str cmdline \
|
||||||
runtime/rtlock runtime/efirtlib runtime/rtstr runtime/vm runtime/rtdata \
|
runtime/rtlock runtime/efirtlib runtime/rtstr runtime/vm runtime/rtdata \
|
||||||
diff --git a/lib/ctors.c b/lib/ctors.c
|
$(ARCH)/initplat $(ARCH)/math $(ARCH)/setjmp
|
||||||
|
diff --git a/lib/entry.c b/lib/entry.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 00000000000..dc979e7b442
|
index 0000000..79d0002
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/lib/ctors.c
|
+++ b/lib/entry.c
|
||||||
@@ -0,0 +1,45 @@
|
@@ -0,0 +1,58 @@
|
||||||
+/*
|
+/*
|
||||||
+ * ctors.c
|
+ * ctors.c
|
||||||
+ * Copyright 2019 Peter Jones <pjones@redhat.com>
|
+ * Copyright 2019 Peter Jones <pjones@redhat.com>
|
||||||
@ -468,10 +482,8 @@ index 00000000000..dc979e7b442
|
|||||||
+
|
+
|
||||||
+typedef void (*funcp)(void);
|
+typedef void (*funcp)(void);
|
||||||
+
|
+
|
||||||
+void _ctors(EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
|
+static void ctors(void)
|
||||||
+{
|
+{
|
||||||
+ InitializeLib(image, systab);
|
|
||||||
+
|
|
||||||
+ for (funcp *location = (void *)&_init_array; location < (funcp *)&_init_array_end; location++) {
|
+ for (funcp *location = (void *)&_init_array; location < (funcp *)&_init_array_end; location++) {
|
||||||
+ funcp func = *location;
|
+ funcp func = *location;
|
||||||
+ func();
|
+ func();
|
||||||
@ -481,9 +493,10 @@ index 00000000000..dc979e7b442
|
|||||||
+ funcp func = *location;
|
+ funcp func = *location;
|
||||||
+ func();
|
+ func();
|
||||||
+ }
|
+ }
|
||||||
|
+
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+void _dtors(EFI_HANDLE image EFI_UNUSED, EFI_SYSTEM_TABLE *systab EFI_UNUSED)
|
+static void dtors(void)
|
||||||
+{
|
+{
|
||||||
+ for (funcp *location = (void *)&__DTOR_LIST__; location < (funcp *)&__DTOR_END__; location++) {
|
+ for (funcp *location = (void *)&__DTOR_LIST__; location < (funcp *)&__DTOR_END__; location++) {
|
||||||
+ funcp func = *location;
|
+ funcp func = *location;
|
||||||
@ -496,26 +509,26 @@ index 00000000000..dc979e7b442
|
|||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
|
+extern EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *systab);
|
||||||
|
+
|
||||||
|
+EFI_STATUS _entry(EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
|
||||||
|
+{
|
||||||
|
+ EFI_STATUS status;
|
||||||
|
+ InitializeLib(image, systab);
|
||||||
|
+
|
||||||
|
+ ctors();
|
||||||
|
+ status = efi_main(image, systab);
|
||||||
|
+ dtors();
|
||||||
|
+
|
||||||
|
+ return status;
|
||||||
|
+}
|
||||||
|
+
|
||||||
+// vim:fenc=utf-8:tw=75:noet
|
+// vim:fenc=utf-8:tw=75:noet
|
||||||
diff --git a/lib/init.c b/lib/init.c
|
diff --git a/lib/init.c b/lib/init.c
|
||||||
index 4f238c0a2cc..257366812ce 100644
|
index 4f238c0..c3df3ee 100644
|
||||||
--- a/lib/init.c
|
--- a/lib/init.c
|
||||||
+++ b/lib/init.c
|
+++ b/lib/init.c
|
||||||
@@ -21,6 +21,13 @@ EFIDebugVariable (
|
@@ -46,57 +46,59 @@ Returns:
|
||||||
VOID
|
|
||||||
);
|
|
||||||
|
|
||||||
+#if defined(__x86_64__) || defined(__i386__) || defined(__i686__)
|
|
||||||
+static inline void pause(void)
|
|
||||||
+{
|
|
||||||
+ __asm__ __volatile__("pause");
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
VOID
|
|
||||||
InitializeLib (
|
|
||||||
IN EFI_HANDLE ImageHandle,
|
|
||||||
@@ -46,53 +53,56 @@ Returns:
|
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
CHAR8 *LangCode;
|
CHAR8 *LangCode;
|
||||||
|
|
||||||
@ -523,21 +536,42 @@ index 4f238c0a2cc..257366812ce 100644
|
|||||||
- LibInitialized = TRUE;
|
- LibInitialized = TRUE;
|
||||||
- LibFwInstance = FALSE;
|
- LibFwInstance = FALSE;
|
||||||
- LibImageHandle = ImageHandle;
|
- LibImageHandle = ImageHandle;
|
||||||
-
|
+ if (LibInitialized)
|
||||||
-
|
+ return;
|
||||||
|
|
||||||
|
+ LibInitialized = TRUE;
|
||||||
|
+ LibFwInstance = FALSE;
|
||||||
|
+ LibImageHandle = ImageHandle;
|
||||||
|
|
||||||
- //
|
- //
|
||||||
- // Set up global pointer to the system table, boot services table,
|
- // Set up global pointer to the system table, boot services table,
|
||||||
- // and runtime services table
|
- // and runtime services table
|
||||||
- //
|
- //
|
||||||
-
|
+ //
|
||||||
|
+ // Set up global pointer to the system table, boot services table,
|
||||||
|
+ // and runtime services table
|
||||||
|
+ //
|
||||||
|
|
||||||
- ST = SystemTable;
|
- ST = SystemTable;
|
||||||
- BS = SystemTable->BootServices;
|
- BS = SystemTable->BootServices;
|
||||||
- RT = SystemTable->RuntimeServices;
|
- RT = SystemTable->RuntimeServices;
|
||||||
-// ASSERT (CheckCrc(0, &ST->Hdr));
|
-// ASSERT (CheckCrc(0, &ST->Hdr));
|
||||||
-// ASSERT (CheckCrc(0, &BS->Hdr));
|
-// ASSERT (CheckCrc(0, &BS->Hdr));
|
||||||
-// ASSERT (CheckCrc(0, &RT->Hdr));
|
-// ASSERT (CheckCrc(0, &RT->Hdr));
|
||||||
-
|
+ ST = SystemTable;
|
||||||
-
|
+ BS = SystemTable->BootServices;
|
||||||
|
+ RT = SystemTable->RuntimeServices;
|
||||||
|
+ // ASSERT (CheckCrc(0, &ST->Hdr));
|
||||||
|
+ // ASSERT (CheckCrc(0, &BS->Hdr));
|
||||||
|
+ // ASSERT (CheckCrc(0, &RT->Hdr));
|
||||||
|
|
||||||
|
+ ST = SystemTable;
|
||||||
|
+ BS = SystemTable->BootServices;
|
||||||
|
+ RT = SystemTable->RuntimeServices;
|
||||||
|
+ // ASSERT (CheckCrc(0, &ST->Hdr));
|
||||||
|
+ // ASSERT (CheckCrc(0, &BS->Hdr));
|
||||||
|
+ // ASSERT (CheckCrc(0, &RT->Hdr));
|
||||||
|
|
||||||
- //
|
- //
|
||||||
- // Initialize pool allocation type
|
- // Initialize pool allocation type
|
||||||
- //
|
- //
|
||||||
@ -555,85 +589,45 @@ index 4f238c0a2cc..257366812ce 100644
|
|||||||
- PoolAllocationType = LoadedImage->ImageDataType;
|
- PoolAllocationType = LoadedImage->ImageDataType;
|
||||||
- }
|
- }
|
||||||
- EFIDebugVariable ();
|
- EFIDebugVariable ();
|
||||||
+ register volatile UINTN x = 0;
|
- }
|
||||||
+ extern char _text, _data;
|
|
||||||
+
|
|
||||||
+ if (LibInitialized)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ LibInitialized = TRUE;
|
|
||||||
+ LibFwInstance = FALSE;
|
|
||||||
+ LibImageHandle = ImageHandle;
|
|
||||||
+
|
|
||||||
+ //
|
|
||||||
+ // Set up global pointer to the system table, boot services table,
|
|
||||||
+ // and runtime services table
|
|
||||||
+ //
|
|
||||||
+
|
|
||||||
+ ST = SystemTable;
|
|
||||||
+ BS = SystemTable->BootServices;
|
|
||||||
+ RT = SystemTable->RuntimeServices;
|
|
||||||
+ // ASSERT (CheckCrc(0, &ST->Hdr));
|
|
||||||
+ // ASSERT (CheckCrc(0, &BS->Hdr));
|
|
||||||
+ // ASSERT (CheckCrc(0, &RT->Hdr));
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ //
|
|
||||||
+ // Initialize pool allocation type
|
|
||||||
+ //
|
|
||||||
+
|
|
||||||
+ if (ImageHandle) {
|
|
||||||
+ Status = uefi_call_wrapper(
|
|
||||||
+ BS->HandleProtocol,
|
|
||||||
+ 3,
|
|
||||||
+ ImageHandle,
|
|
||||||
+ &LoadedImageProtocol,
|
|
||||||
+ (VOID*)&LoadedImage
|
|
||||||
+ );
|
|
||||||
+
|
|
||||||
+ if (!EFI_ERROR(Status)) {
|
|
||||||
+ PoolAllocationType = LoadedImage->ImageDataType;
|
|
||||||
}
|
|
||||||
-
|
-
|
||||||
- //
|
- //
|
||||||
- // Initialize Guid table
|
- // Initialize Guid table
|
||||||
- //
|
- //
|
||||||
-
|
-
|
||||||
- InitializeGuid();
|
- InitializeGuid();
|
||||||
-
|
+ //
|
||||||
|
+ // Initialize pool allocation type
|
||||||
|
+ //
|
||||||
|
|
||||||
- InitializeLibPlatform(ImageHandle,SystemTable);
|
- InitializeLibPlatform(ImageHandle,SystemTable);
|
||||||
+ EFIDebugVariable ();
|
+ if (ImageHandle) {
|
||||||
|
+ Status = uefi_call_wrapper(
|
||||||
|
+ BS->HandleProtocol,
|
||||||
|
+ 3,
|
||||||
|
+ ImageHandle,
|
||||||
|
+ &LoadedImageProtocol,
|
||||||
|
+ (VOID*)&LoadedImage
|
||||||
|
+ );
|
||||||
|
+
|
||||||
|
+ if (!EFI_ERROR(Status)) {
|
||||||
|
+ PoolAllocationType = LoadedImage->ImageDataType;
|
||||||
|
+ }
|
||||||
|
+ EFIDebugVariable ();
|
||||||
}
|
}
|
||||||
|
|
||||||
+ //
|
//
|
||||||
|
- //
|
||||||
+ // Initialize Guid table
|
+ // Initialize Guid table
|
||||||
+ //
|
//
|
||||||
+
|
|
||||||
+ InitializeGuid();
|
+ InitializeGuid();
|
||||||
+
|
+
|
||||||
+ InitializeLibPlatform(ImageHandle,SystemTable);
|
+ InitializeLibPlatform(ImageHandle,SystemTable);
|
||||||
+
|
+
|
||||||
//
|
if (ImageHandle && UnicodeInterface == &LibStubUnicodeInterface) {
|
||||||
//
|
LangCode = LibGetVariable (VarLanguage, &EfiGlobalVariable);
|
||||||
//
|
InitializeUnicodeSupport (LangCode);
|
||||||
@@ -104,6 +114,20 @@ Returns:
|
--
|
||||||
FreePool (LangCode);
|
2.24.1
|
||||||
}
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ Print(L"add-symbol-file x86_64/apps/ctors_test.so 0x%08x -s .data 0x%08x\n",
|
|
||||||
+ &_text, &_data);
|
|
||||||
+ Print(L"Pausing for debugger attachment.\n");
|
|
||||||
+
|
|
||||||
+ x = 1;
|
|
||||||
+ while (x++) {
|
|
||||||
+ /* Make this so it can't /totally/ DoS us. */
|
|
||||||
+#if defined(__x86_64__) || defined(__i386__) || defined(__i686__)
|
|
||||||
+ if (x > 4294967294ULL)
|
|
||||||
+ break;
|
|
||||||
+#endif
|
|
||||||
+ pause();
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
|
@ -14,3 +14,4 @@ Patch0013: 0013-Use-EFI-canonical-names-everywhere-the-compiler-does.patch
|
|||||||
Patch0014: 0014-Fix-a-minor-coverity-complaint-in-some-apps.patch
|
Patch0014: 0014-Fix-a-minor-coverity-complaint-in-some-apps.patch
|
||||||
Patch0015: 0015-Get-rid-of-some-unused-junk-that-has-the-BSD-4-claus.patch
|
Patch0015: 0015-Get-rid-of-some-unused-junk-that-has-the-BSD-4-claus.patch
|
||||||
Patch0016: 0016-Make-ELF-constructors-and-destructors-work.patch
|
Patch0016: 0016-Make-ELF-constructors-and-destructors-work.patch
|
||||||
|
Patch0017: 0001-efibind-Fix-usage-of-efi-headers-from-C-code.patch
|
||||||
|
32
gnu-efi.spec
32
gnu-efi.spec
@ -1,15 +1,22 @@
|
|||||||
Summary: Development Libraries and headers for EFI
|
|
||||||
Name: gnu-efi
|
Name: gnu-efi
|
||||||
|
Epoch: 1
|
||||||
Version: 3.0.9
|
Version: 3.0.9
|
||||||
%global tarball_version 3.0.9
|
%global tarball_version 3.0.9
|
||||||
Release: 3%{?dist}%{?buildid}
|
Release: 4%{?dist}%{?buildid}
|
||||||
Epoch: 1
|
Summary: Development Libraries and headers for EFI
|
||||||
License: BSD
|
License: BSD
|
||||||
URL: ftp://ftp.hpl.hp.com/pub/linux-ia64
|
URL: https://sourceforge.net/projects/gnu-efi/
|
||||||
|
|
||||||
|
Source0: https://sourceforge.net/projects/gnu-efi/files/gnu-efi-%{tarball_version}.tar.bz2
|
||||||
|
Source1: gnu-efi.patches
|
||||||
|
%include %{SOURCE1}
|
||||||
|
|
||||||
ExclusiveArch: %{efi}
|
ExclusiveArch: %{efi}
|
||||||
BuildRequires: gcc
|
BuildRequires: binutils
|
||||||
BuildRequires: efi-srpm-macros >= 3-2
|
BuildRequires: efi-srpm-macros >= 3-2
|
||||||
BuildRequires: git
|
BuildRequires: gcc
|
||||||
|
BuildRequires: git-core
|
||||||
|
BuildRequires: glibc-headers
|
||||||
%ifarch x86_64
|
%ifarch x86_64
|
||||||
# So... in some build environments, glibc32 provides some headers. In
|
# So... in some build environments, glibc32 provides some headers. In
|
||||||
# others, glibc-devel.i686 does. They have no non-file provides in common.
|
# others, glibc-devel.i686 does. They have no non-file provides in common.
|
||||||
@ -17,14 +24,10 @@ BuildRequires: git
|
|||||||
#BuildRequires: glibc-devel(x86-32)
|
#BuildRequires: glibc-devel(x86-32)
|
||||||
BuildRequires: /usr/include/gnu/stubs-32.h
|
BuildRequires: /usr/include/gnu/stubs-32.h
|
||||||
%endif
|
%endif
|
||||||
Source0: http://superb-dca2.dl.sourceforge.net/project/gnu-efi/gnu-efi-%{tarball_version}.tar.bz2
|
|
||||||
Source1: gnu-efi.patches
|
|
||||||
|
|
||||||
# dammit, rpmlint, shut up.
|
# dammit, rpmlint, shut up.
|
||||||
%define lib %{nil}lib%{nil}
|
%define lib %{nil}lib%{nil}
|
||||||
|
|
||||||
%include %{SOURCE1}
|
|
||||||
|
|
||||||
%define debug_package %{nil}
|
%define debug_package %{nil}
|
||||||
|
|
||||||
# brp-strip-static-archive will senselessly /add/ timestamps and uid/gid
|
# brp-strip-static-archive will senselessly /add/ timestamps and uid/gid
|
||||||
@ -81,8 +84,6 @@ make apps
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%install
|
%install
|
||||||
rm -rf %{buildroot}
|
|
||||||
|
|
||||||
mkdir -p %{buildroot}/%{_libdir}/gnuefi
|
mkdir -p %{buildroot}/%{_libdir}/gnuefi
|
||||||
mkdir -p %{buildroot}/%{efi_esp_dir}/%{efi_arch}
|
mkdir -p %{buildroot}/%{efi_esp_dir}/%{efi_arch}
|
||||||
make PREFIX=%{_prefix} LIBDIR=%{_libdir} INSTALLROOT=%{buildroot} install
|
make PREFIX=%{_prefix} LIBDIR=%{_libdir} INSTALLROOT=%{buildroot} install
|
||||||
@ -102,7 +103,7 @@ mv %{efi_arch}/apps/{route80h.efi,modelist.efi} %{buildroot}%{efi_esp_dir}/%{efi
|
|||||||
%{_prefix}/%{lib}*/*
|
%{_prefix}/%{lib}*/*
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
%doc README.* ChangeLog
|
%doc README.*
|
||||||
%{_includedir}/efi
|
%{_includedir}/efi
|
||||||
|
|
||||||
%files utils
|
%files utils
|
||||||
@ -114,6 +115,11 @@ mv %{efi_arch}/apps/{route80h.efi,modelist.efi} %{buildroot}%{efi_esp_dir}/%{efi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Dec 26 2019 Peter Robinson <pbrobinson@fedoraproject.org> 3.0.9-4
|
||||||
|
- Upstream patch for efibind.h
|
||||||
|
- Latest ELF constructors/destructors patch
|
||||||
|
- Minor spec cleanups
|
||||||
|
|
||||||
* Mon Aug 26 2019 Peter Jones <pjones@redhat.com> - 3.0.9-3
|
* Mon Aug 26 2019 Peter Jones <pjones@redhat.com> - 3.0.9-3
|
||||||
- Fix some minor rpmlint complaints
|
- Fix some minor rpmlint complaints
|
||||||
- Pull recent patches from upstream
|
- Pull recent patches from upstream
|
||||||
|
Loading…
Reference in New Issue
Block a user