mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-21 10:12:04 +02:00
merge config/ and resources/
Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
+38
@@ -0,0 +1,38 @@
|
||||
From 7a00638cea41ad939a59fc0e5996959435fbdb7f Mon Sep 17 00:00:00 2001
|
||||
From: "D.d.P.F. Lombard" <lombard@lombards.xyz>
|
||||
Date: Sun, 7 Feb 2021 16:40:05 +0100
|
||||
Subject: [PATCH 3/6] Tweak cmos defaults for KCMA-D8 (for a little speed
|
||||
boost)
|
||||
|
||||
63xx CPUs have the option to use a reduced latency value inside the crossbar.
|
||||
Setting "experimental_memory_speed_boost=Enable" aparently only has an effect
|
||||
on 63xx CPUs and may, in certain cases, yield a slight memory bandwidth
|
||||
increase (according to Timothy Pearson), but maybe it also works for
|
||||
43xx CPUs.
|
||||
|
||||
Setting "l3_cache_partitioning=Enable" will increase performance in certain
|
||||
situations. See:
|
||||
https://developer.arm.com/documentation/100453/0401/functional-description/l3-cache/l3-cache-partitioning?lang=en
|
||||
---
|
||||
src/mainboard/asus/kcma-d8/cmos.default | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/mainboard/asus/kcma-d8/cmos.default b/src/mainboard/asus/kcma-d8/cmos.default
|
||||
index 306687157f..4e033d756f 100644
|
||||
--- a/src/mainboard/asus/kcma-d8/cmos.default
|
||||
+++ b/src/mainboard/asus/kcma-d8/cmos.default
|
||||
@@ -21,9 +21,9 @@ sata_ahci_mode=Enable
|
||||
sata_alpm=Disable
|
||||
maximum_p_state_limit=0xf
|
||||
probe_filter=Auto
|
||||
-l3_cache_partitioning=Disable
|
||||
+l3_cache_partitioning=Enable
|
||||
gart=Enable
|
||||
ehci_async_data_cache=Enable
|
||||
-experimental_memory_speed_boost=Disable
|
||||
+experimental_memory_speed_boost=Enable
|
||||
power_on_after_fail=On
|
||||
boot_option=Fallback
|
||||
--
|
||||
2.25.1
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
From f0aac7261e16adc8e61eca7a506ff2de5112be47 Mon Sep 17 00:00:00 2001
|
||||
From: Leah Rowe <leah@libreboot.org>
|
||||
Date: Fri, 7 May 2021 19:43:32 +0100
|
||||
Subject: [PATCH 6/6] asus/kgpe-d16: enable lc_cache_partitioning and
|
||||
experimental_memory_speed_boost
|
||||
|
||||
This really only benefits 63xx opterons which are less reliable in libreboot due
|
||||
to lack of CPU microcode updates, but we might aswell enable this anyway.
|
||||
---
|
||||
src/mainboard/asus/kgpe-d16/cmos.default | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/mainboard/asus/kgpe-d16/cmos.default b/src/mainboard/asus/kgpe-d16/cmos.default
|
||||
index 7c496a50d7..8a25620e1d 100644
|
||||
--- a/src/mainboard/asus/kgpe-d16/cmos.default
|
||||
+++ b/src/mainboard/asus/kgpe-d16/cmos.default
|
||||
@@ -21,10 +21,10 @@ sata_ahci_mode=Enable
|
||||
sata_alpm=Disable
|
||||
maximum_p_state_limit=0xf
|
||||
probe_filter=Auto
|
||||
-l3_cache_partitioning=Disable
|
||||
+l3_cache_partitioning=Enable
|
||||
ieee1394_controller=Enable
|
||||
gart=Enable
|
||||
ehci_async_data_cache=Enable
|
||||
-experimental_memory_speed_boost=Disable
|
||||
+experimental_memory_speed_boost=Enable
|
||||
power_on_after_fail=On
|
||||
boot_option=Fallback
|
||||
--
|
||||
2.25.1
|
||||
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
From d5dc3f23eb546cf328fdfe1e918afa028fb9cd8c Mon Sep 17 00:00:00 2001
|
||||
From: Leah Rowe <leah@libreboot.org>
|
||||
Date: Sun, 9 Jul 2023 04:13:52 +0100
|
||||
Subject: [PATCH 1/1] util/cbfstool Makefile: support distclean
|
||||
|
||||
it just does make-clean
|
||||
|
||||
this is so that this super-old coreboot revision
|
||||
interfaces well with lbmk, which runs distclean
|
||||
on cbfstool (which is supported, on modern cbfstool)
|
||||
|
||||
Signed-off-by: Leah Rowe <leah@libreboot.org>
|
||||
---
|
||||
util/cbfstool/Makefile | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/util/cbfstool/Makefile b/util/cbfstool/Makefile
|
||||
index d5321f6959..b8424d7d87 100644
|
||||
--- a/util/cbfstool/Makefile
|
||||
+++ b/util/cbfstool/Makefile
|
||||
@@ -26,7 +26,7 @@ ifittool: $(objutil)/cbfstool/ifittool
|
||||
|
||||
cbfs-compression-tool: $(objutil)/cbfstool/cbfs-compression-tool
|
||||
|
||||
-.PHONY: clean cbfstool ifittool fmaptool rmodtool ifwitool cbfs-compression-tool
|
||||
+.PHONY: distclean clean cbfstool ifittool fmaptool rmodtool ifwitool cbfs-compression-tool
|
||||
clean:
|
||||
$(RM) fmd_parser.c fmd_parser.h fmd_scanner.c fmd_scanner.h
|
||||
$(RM) $(objutil)/cbfstool/cbfstool $(cbfsobj)
|
||||
@@ -55,6 +55,8 @@ install: all
|
||||
$(INSTALL) ifittool $(DESTDIR)$(BINDIR)
|
||||
$(INSTALL) cbfs-compression-tool $(DESTDIR)$(BINDIR)
|
||||
|
||||
+distclean: clean
|
||||
+
|
||||
ifneq ($(V),1)
|
||||
.SILENT:
|
||||
endif
|
||||
--
|
||||
2.40.1
|
||||
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
From 4b4b2bdc2cedb3e219c6f90809e5684441b1dafa Mon Sep 17 00:00:00 2001
|
||||
From: Leah Rowe <leah@libreboot.org>
|
||||
Date: Sun, 9 Jul 2023 04:54:19 +0100
|
||||
Subject: [PATCH 1/1] crossgcc: patch binutils 2.32 for newer hostcc
|
||||
|
||||
tested on debian sid as of 9 July 2023
|
||||
|
||||
implicit string declaration
|
||||
|
||||
easy peasy
|
||||
|
||||
Signed-off-by: Leah Rowe <leah@libreboot.org>
|
||||
---
|
||||
util/crossgcc/patches/binutils-2.32_stringfix.patch | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
create mode 100644 util/crossgcc/patches/binutils-2.32_stringfix.patch
|
||||
|
||||
diff --git a/util/crossgcc/patches/binutils-2.32_stringfix.patch b/util/crossgcc/patches/binutils-2.32_stringfix.patch
|
||||
new file mode 100644
|
||||
index 0000000000..de27a2752a
|
||||
--- /dev/null
|
||||
+++ b/util/crossgcc/patches/binutils-2.32_stringfix.patch
|
||||
@@ -0,0 +1,11 @@
|
||||
+diff -u binutils-2.32/gold/errors.h binutils-2.32.patched/gold/errors.h
|
||||
+--- binutils-2.32/gold/errors.h
|
||||
++++ binutils-2.32.patched/gold/errors.h
|
||||
+@@ -24,6 +24,7 @@
|
||||
+ #define GOLD_ERRORS_H
|
||||
+
|
||||
+ #include <cstdarg>
|
||||
++#include <string>
|
||||
+
|
||||
+ #include "gold-threads.h"
|
||||
+
|
||||
--
|
||||
2.40.1
|
||||
|
||||
+108
@@ -0,0 +1,108 @@
|
||||
From 373dd351e374f391c9e2048e5f3e535267a04719 Mon Sep 17 00:00:00 2001
|
||||
From: Leah Rowe <leah@libreboot.org>
|
||||
Date: Sun, 9 Jul 2023 19:37:39 +0100
|
||||
Subject: [PATCH 1/1] fix crossgcc/acpica build on newer hostcc
|
||||
|
||||
Changes made to acpica/iasl:
|
||||
|
||||
remove superfluous YYSTYPE declaration
|
||||
|
||||
make LuxBuffer variables static, to avoid warnings
|
||||
treated as errors about multiple definitions
|
||||
|
||||
AcpiGbl_DbOpt_NoRegionSupport - remove this definition
|
||||
in source/tools/acpiexec/aemain.c because it's already
|
||||
re-defined by acpiexec. otherwise the linker complains
|
||||
about multiple definitions
|
||||
|
||||
Signed-off-by: Leah Rowe <leah@libreboot.org>
|
||||
---
|
||||
.../acpica-unix2-20190703_mitigategcc.patch | 76 +++++++++++++++++++
|
||||
1 file changed, 76 insertions(+)
|
||||
create mode 100644 util/crossgcc/patches/acpica-unix2-20190703_mitigategcc.patch
|
||||
|
||||
diff --git a/util/crossgcc/patches/acpica-unix2-20190703_mitigategcc.patch b/util/crossgcc/patches/acpica-unix2-20190703_mitigategcc.patch
|
||||
new file mode 100644
|
||||
index 0000000000..8de47245bd
|
||||
--- /dev/null
|
||||
+++ b/util/crossgcc/patches/acpica-unix2-20190703_mitigategcc.patch
|
||||
@@ -0,0 +1,76 @@
|
||||
+From 66b927d923183ff62c9a757fafdeca9d1ac3fa87 Mon Sep 17 00:00:00 2001
|
||||
+From: Leah Rowe <leah@libreboot.org>
|
||||
+Date: Sun, 9 Jul 2023 18:58:11 +0100
|
||||
+Subject: [PATCH 1/1] fix building on newer hostcc (debian sid tested)
|
||||
+
|
||||
+remove superfluous YYSTYPE declaration
|
||||
+
|
||||
+make LuxBuffer variables static, to avoid warnings
|
||||
+treated as errors about multiple definitions
|
||||
+
|
||||
+AcpiGbl_DbOpt_NoRegionSupport - remove this definition
|
||||
+in source/tools/acpiexec/aemain.c because it's already
|
||||
+re-defined by acpiexec. otherwise the linker complains
|
||||
+about multiple definitions
|
||||
+
|
||||
+Signed-off-by: Leah Rowe <leah@libreboot.org>
|
||||
+---
|
||||
+ source/compiler/aslcompiler.l | 1 -
|
||||
+ source/compiler/dtparser.l | 2 +-
|
||||
+ source/compiler/prparser.l | 2 +-
|
||||
+ source/tools/acpiexec/aemain.c | 1 -
|
||||
+ 4 files changed, 2 insertions(+), 4 deletions(-)
|
||||
+
|
||||
+diff --git a/source/compiler/aslcompiler.l b/source/compiler/aslcompiler.l
|
||||
+index 1949b32..a24f028 100644
|
||||
+--- a/source/compiler/aslcompiler.l
|
||||
++++ b/source/compiler/aslcompiler.l
|
||||
+@@ -48,7 +48,6 @@
|
||||
+
|
||||
+ #include <stdlib.h>
|
||||
+ #include <string.h>
|
||||
+-YYSTYPE AslCompilerlval;
|
||||
+
|
||||
+ /*
|
||||
+ * Generation: Use the following command line:
|
||||
+diff --git a/source/compiler/dtparser.l b/source/compiler/dtparser.l
|
||||
+index 6517e52..d35181c 100644
|
||||
+--- a/source/compiler/dtparser.l
|
||||
++++ b/source/compiler/dtparser.l
|
||||
+@@ -100,7 +100,7 @@ NewLine [\n]
|
||||
+ /*
|
||||
+ * Local support functions
|
||||
+ */
|
||||
+-YY_BUFFER_STATE LexBuffer;
|
||||
++static YY_BUFFER_STATE LexBuffer;
|
||||
+
|
||||
+ /******************************************************************************
|
||||
+ *
|
||||
+diff --git a/source/compiler/prparser.l b/source/compiler/prparser.l
|
||||
+index bcdef14..5a1b848 100644
|
||||
+--- a/source/compiler/prparser.l
|
||||
++++ b/source/compiler/prparser.l
|
||||
+@@ -116,7 +116,7 @@ Identifier [a-zA-Z][0-9a-zA-Z]*
|
||||
+ /*
|
||||
+ * Local support functions
|
||||
+ */
|
||||
+-YY_BUFFER_STATE LexBuffer;
|
||||
++static YY_BUFFER_STATE LexBuffer;
|
||||
+
|
||||
+
|
||||
+ /******************************************************************************
|
||||
+diff --git a/source/tools/acpiexec/aemain.c b/source/tools/acpiexec/aemain.c
|
||||
+index 58640dd..cd0add6 100644
|
||||
+--- a/source/tools/acpiexec/aemain.c
|
||||
++++ b/source/tools/acpiexec/aemain.c
|
||||
+@@ -84,7 +84,6 @@ BOOLEAN AcpiGbl_VerboseHandlers = FALSE;
|
||||
+ UINT8 AcpiGbl_RegionFillValue = 0;
|
||||
+ BOOLEAN AcpiGbl_IgnoreErrors = FALSE;
|
||||
+ BOOLEAN AcpiGbl_AbortLoopOnTimeout = FALSE;
|
||||
+-BOOLEAN AcpiGbl_DbOpt_NoRegionSupport = FALSE;
|
||||
+ UINT8 AcpiGbl_UseHwReducedFadt = FALSE;
|
||||
+ BOOLEAN AcpiGbl_DoInterfaceTests = FALSE;
|
||||
+ BOOLEAN AcpiGbl_LoadTestTables = FALSE;
|
||||
+--
|
||||
+2.40.1
|
||||
+
|
||||
--
|
||||
2.40.1
|
||||
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
From ba94a3f27a26d181291b5908bdd627be375eb606 Mon Sep 17 00:00:00 2001
|
||||
From: Leah Rowe <leah@libreboot.org>
|
||||
Date: Sun, 16 Jul 2023 00:44:22 +0100
|
||||
Subject: [PATCH 1/1] coreboot/fam15h: use new upstream for acpica
|
||||
|
||||
the original upstream died
|
||||
|
||||
i decided to host it myself, on libreboot rsync,
|
||||
for use by mirrors.
|
||||
|
||||
this is also useful for GNU Boot, when downloading
|
||||
acpica on coreboot 4.11_branch, for fam15h boards
|
||||
|
||||
this change is not necessary on other coreboot trees,
|
||||
which adhere to new coreboot policy (newer coreboot
|
||||
pulls acpica from github, which is fairly reliable)
|
||||
|
||||
Signed-off-by: Leah Rowe <leah@libreboot.org>
|
||||
---
|
||||
util/crossgcc/buildgcc | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/util/crossgcc/buildgcc b/util/crossgcc/buildgcc
|
||||
index b75b90a877..e3efa722f1 100755
|
||||
--- a/util/crossgcc/buildgcc
|
||||
+++ b/util/crossgcc/buildgcc
|
||||
@@ -73,7 +73,7 @@ MPC_ARCHIVE="https://ftpmirror.gnu.org/mpc/mpc-${MPC_VERSION}.tar.gz"
|
||||
GCC_ARCHIVE="https://ftpmirror.gnu.org/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.xz"
|
||||
BINUTILS_ARCHIVE="https://ftpmirror.gnu.org/binutils/binutils-${BINUTILS_VERSION}.tar.xz"
|
||||
GDB_ARCHIVE="https://ftpmirror.gnu.org/gdb/gdb-${GDB_VERSION}.tar.xz"
|
||||
-IASL_ARCHIVE="https://acpica.org/sites/acpica/files/acpica-unix2-${IASL_VERSION}.tar.gz"
|
||||
+IASL_ARCHIVE="https://mirror.math.princeton.edu/pub/libreboot/misc/acpica/acpica-unix2-${IASL_VERSION}.tar.gz"
|
||||
PYTHON_ARCHIVE="https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tar.xz"
|
||||
EXPAT_ARCHIVE="https://downloads.sourceforge.net/sourceforge/expat/expat-${EXPAT_VERSION}.tar.bz2"
|
||||
# CLANG toolchain archive locations
|
||||
--
|
||||
2.40.1
|
||||
|
||||
@@ -0,0 +1,232 @@
|
||||
From c5a03de594d6bb6ea5012a6549404e4631c903c8 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Oliva <oliva@adacore.com>
|
||||
Date: Wed, 9 Aug 2023 16:57:31 +0200
|
||||
Subject: [PATCH] crossgcc: Backport GNAT exception handler v1 patch
|
||||
|
||||
Signed-off-by: Adrien Bourmault <neox@gnu.org>
|
||||
---
|
||||
.../patches/gcc-8.3.0_gnat_eh_new.patch | 212 ++++++++++++++++++
|
||||
1 file changed, 212 insertions(+)
|
||||
create mode 100644 util/crossgcc/patches/gcc-8.3.0_gnat_eh_new.patch
|
||||
|
||||
diff --git a/util/crossgcc/patches/gcc-8.3.0_gnat_eh_new.patch b/util/crossgcc/patches/gcc-8.3.0_gnat_eh_new.patch
|
||||
new file mode 100644
|
||||
index 00000000..75e4f18d
|
||||
--- /dev/null
|
||||
+++ b/util/crossgcc/patches/gcc-8.3.0_gnat_eh_new.patch
|
||||
@@ -0,0 +1,212 @@
|
||||
+diff --git a/gcc/ada/libgnat/a-exexpr.adb b/gcc/ada/libgnat/a-exexpr.adb
|
||||
+index b1aa1c6e6ba..5e72fd6e3f2 100644
|
||||
+--- a/gcc/ada/libgnat/a-exexpr.adb
|
||||
++++ b/gcc/ada/libgnat/a-exexpr.adb
|
||||
+@@ -197,15 +197,75 @@ package body Exception_Propagation is
|
||||
+ -- whose machine occurrence is Mo. The message is empty, the backtrace
|
||||
+ -- is empty too and the exception identity is Foreign_Exception.
|
||||
+
|
||||
+- -- Hooks called when entering/leaving an exception handler for a given
|
||||
+- -- occurrence, aimed at handling the stack of active occurrences. The
|
||||
+- -- calls are generated by gigi in tree_transform/N_Exception_Handler.
|
||||
++ -- Hooks called when entering/leaving an exception handler for a
|
||||
++ -- given occurrence. The calls are generated by gigi in
|
||||
++ -- Exception_Handler_to_gnu_gcc.
|
||||
++
|
||||
++ -- Begin_Handler_v1, called when entering an exception handler,
|
||||
++ -- claims responsibility for the handler to release the
|
||||
++ -- GCC_Exception occurrence. End_Handler_v1, called when
|
||||
++ -- leaving the handler, releases the occurrence, unless the
|
||||
++ -- occurrence is propagating further up, or the handler is
|
||||
++ -- dynamically nested in the context of another handler that
|
||||
++ -- claimed responsibility for releasing that occurrence.
|
||||
++
|
||||
++ -- Responsibility is claimed by changing the Cleanup field to
|
||||
++ -- Claimed_Cleanup, which enables claimed exceptions to be
|
||||
++ -- recognized, and avoids accidental releases even by foreign
|
||||
++ -- handlers.
|
||||
++
|
||||
++ function Begin_Handler_v1
|
||||
++ (GCC_Exception : not null GCC_Exception_Access)
|
||||
++ return System.Address;
|
||||
++ pragma Export (C, Begin_Handler_v1, "__gnat_begin_handler_v1");
|
||||
++ -- Called when entering an exception handler. Claim
|
||||
++ -- responsibility for releasing GCC_Exception, by setting the
|
||||
++ -- cleanup/release function to Claimed_Cleanup, and return the
|
||||
++ -- address of the previous cleanup/release function.
|
||||
++
|
||||
++ procedure End_Handler_v1
|
||||
++ (GCC_Exception : not null GCC_Exception_Access;
|
||||
++ Saved_Cleanup : System.Address;
|
||||
++ Propagating_Exception : GCC_Exception_Access);
|
||||
++ pragma Export (C, End_Handler_v1, "__gnat_end_handler_v1");
|
||||
++ -- Called when leaving an exception handler. Restore the
|
||||
++ -- Saved_Cleanup in the GCC_Exception occurrence, and then release
|
||||
++ -- it, unless it remains claimed by an enclosing handler, or
|
||||
++ -- GCC_Exception and Propagating_Exception are the same
|
||||
++ -- occurrence. Propagating_Exception could be either an
|
||||
++ -- occurrence (re)raised within the handler of GCC_Exception, when
|
||||
++ -- we're executing as an exceptional cleanup, or null, if we're
|
||||
++ -- completing the handler of GCC_Exception normally.
|
||||
++
|
||||
++ procedure Claimed_Cleanup
|
||||
++ (Reason : Unwind_Reason_Code;
|
||||
++ GCC_Exception : not null GCC_Exception_Access);
|
||||
++ pragma Export (C, Claimed_Cleanup, "__gnat_claimed_cleanup");
|
||||
++ -- A do-nothing placeholder installed as GCC_Exception.Cleanup
|
||||
++ -- while handling GCC_Exception, to claim responsibility for
|
||||
++ -- releasing it, and to stop it from being accidentally released.
|
||||
++
|
||||
++ -- The following are version 0 implementations of the version 1
|
||||
++ -- hooks above. They remain in place for compatibility with the
|
||||
++ -- output of compilers that still use version 0, such as those
|
||||
++ -- used during bootstrap. They are interoperable with the v1
|
||||
++ -- hooks, except that the older versions may malfunction when
|
||||
++ -- handling foreign exceptions passed to Reraise_Occurrence.
|
||||
+
|
||||
+ procedure Begin_Handler (GCC_Exception : not null GCC_Exception_Access);
|
||||
+ pragma Export (C, Begin_Handler, "__gnat_begin_handler");
|
||||
++ -- Called when entering an exception handler translated by an old
|
||||
++ -- compiler. It does nothing.
|
||||
+
|
||||
+ procedure End_Handler (GCC_Exception : GCC_Exception_Access);
|
||||
+ pragma Export (C, End_Handler, "__gnat_end_handler");
|
||||
++ -- Called when leaving an exception handler translated by an old
|
||||
++ -- compiler. It releases GCC_Exception, unless it is null. It is
|
||||
++ -- only ever null when the handler has a 'raise;' translated by a
|
||||
++ -- v0-using compiler. The artificial handler variable passed to
|
||||
++ -- End_Handler was set to null to tell End_Handler to refrain from
|
||||
++ -- releasing the reraised exception. In v1 safer ways are used to
|
||||
++ -- accomplish that.
|
||||
+
|
||||
+ --------------------------------------------------------------------
|
||||
+ -- Accessors to Basic Components of a GNAT Exception Data Pointer --
|
||||
+@@ -352,6 +412,128 @@ package body Exception_Propagation is
|
||||
+ end if;
|
||||
+ end Setup_Current_Excep;
|
||||
+
|
||||
++ ----------------------
|
||||
++ -- Begin_Handler_v1 --
|
||||
++ ----------------------
|
||||
++
|
||||
++ function Begin_Handler_v1
|
||||
++ (GCC_Exception : not null GCC_Exception_Access)
|
||||
++ return System.Address is
|
||||
++ Saved_Cleanup : constant System.Address := GCC_Exception.Cleanup;
|
||||
++ begin
|
||||
++ -- Claim responsibility for releasing this exception, and stop
|
||||
++ -- others from releasing it.
|
||||
++ GCC_Exception.Cleanup := Claimed_Cleanup'Address;
|
||||
++ return Saved_Cleanup;
|
||||
++ end Begin_Handler_v1;
|
||||
++
|
||||
++ --------------------
|
||||
++ -- End_Handler_v1 --
|
||||
++ --------------------
|
||||
++
|
||||
++ procedure End_Handler_v1
|
||||
++ (GCC_Exception : not null GCC_Exception_Access;
|
||||
++ Saved_Cleanup : System.Address;
|
||||
++ Propagating_Exception : GCC_Exception_Access) is
|
||||
++ begin
|
||||
++ GCC_Exception.Cleanup := Saved_Cleanup;
|
||||
++ -- Restore the Saved_Cleanup, so that it is either used to
|
||||
++ -- release GCC_Exception below, or transferred to the next
|
||||
++ -- handler of the Propagating_Exception occurrence. The
|
||||
++ -- following test ensures that an occurrence is only released
|
||||
++ -- once, even after reraises.
|
||||
++ --
|
||||
++ -- The idea is that the GCC_Exception is not to be released
|
||||
++ -- unless it had an unclaimed Cleanup when the handler started
|
||||
++ -- (see Begin_Handler_v1 above), but if we propagate across its
|
||||
++ -- handler a reraise of the same exception, we transfer to the
|
||||
++ -- Propagating_Exception the responsibility for running the
|
||||
++ -- Saved_Cleanup when its handler completes.
|
||||
++ --
|
||||
++ -- This ownership transfer mechanism ensures safety, as in
|
||||
++ -- single release and no dangling pointers, because there is no
|
||||
++ -- way to hold on to the Machine_Occurrence of an
|
||||
++ -- Exception_Occurrence: the only situations in which another
|
||||
++ -- Exception_Occurrence gets the same Machine_Occurrence are
|
||||
++ -- through Reraise_Occurrence, and plain reraise, and so we
|
||||
++ -- have the following possibilities:
|
||||
++ --
|
||||
++ -- - Reraise_Occurrence is handled within the running handler,
|
||||
++ -- and so when completing the dynamically nested handler, we
|
||||
++ -- must NOT release the exception. A Claimed_Cleanup upon
|
||||
++ -- entry of the nested handler, installed when entering the
|
||||
++ -- enclosing handler, ensures the exception will not be
|
||||
++ -- released by the nested handler, but rather by the enclosing
|
||||
++ -- handler.
|
||||
++ --
|
||||
++ -- - Reraise_Occurrence/reraise escapes the running handler,
|
||||
++ -- and we run as an exceptional cleanup for GCC_Exception. The
|
||||
++ -- Saved_Cleanup was reinstalled, but since we're propagating
|
||||
++ -- the same machine occurrence, we do not release it. Instead,
|
||||
++ -- we transfer responsibility for releasing it to the eventual
|
||||
++ -- handler of the propagating exception.
|
||||
++ --
|
||||
++ -- - An unrelated exception propagates through the running
|
||||
++ -- handler. We restored GCC_Exception.Saved_Cleanup above.
|
||||
++ -- Since we're propagating a different exception, we proceed to
|
||||
++ -- release GCC_Exception, unless Saved_Cleanup was
|
||||
++ -- Claimed_Cleanup, because then we know we're not in the
|
||||
++ -- outermost handler for GCC_Exception.
|
||||
++ --
|
||||
++ -- - The handler completes normally, so it reinstalls the
|
||||
++ -- Saved_Cleanup and runs it, unless it was Claimed_Cleanup.
|
||||
++ -- If Saved_Cleanup is null, Unwind_DeleteException (currently)
|
||||
++ -- has no effect, so we could skip it, but if it is ever
|
||||
++ -- changed to do more in this case, we're ready for that,
|
||||
++ -- calling it exactly once.
|
||||
++ if Saved_Cleanup /= Claimed_Cleanup'Address
|
||||
++ and then
|
||||
++ Propagating_Exception /= GCC_Exception
|
||||
++ then
|
||||
++ declare
|
||||
++ Current : constant EOA := Get_Current_Excep.all;
|
||||
++ Cur_Occ : constant GCC_Exception_Access
|
||||
++ := To_GCC_Exception (Current.Machine_Occurrence);
|
||||
++ begin
|
||||
++ -- If we are releasing the Machine_Occurrence of the current
|
||||
++ -- exception, reset the access to it, so that it is no
|
||||
++ -- longer accessible.
|
||||
++ if Cur_Occ = GCC_Exception then
|
||||
++ Current.Machine_Occurrence := System.Null_Address;
|
||||
++ end if;
|
||||
++ end;
|
||||
++ Unwind_DeleteException (GCC_Exception);
|
||||
++ end if;
|
||||
++ end End_Handler_v1;
|
||||
++
|
||||
++ ---------------------
|
||||
++ -- Claimed_Cleanup --
|
||||
++ ---------------------
|
||||
++
|
||||
++ procedure Claimed_Cleanup
|
||||
++ (Reason : Unwind_Reason_Code;
|
||||
++ GCC_Exception : not null GCC_Exception_Access) is
|
||||
++ pragma Unreferenced (Reason);
|
||||
++ pragma Unreferenced (GCC_Exception);
|
||||
++ begin
|
||||
++ -- This procedure should never run. If it does, it's either a
|
||||
++ -- version 0 handler or a foreign handler, attempting to
|
||||
++ -- release an exception while a version 1 handler that claimed
|
||||
++ -- responsibility for releasing the exception remains still
|
||||
++ -- active. This placeholder stops GCC_Exception from being
|
||||
++ -- released by them.
|
||||
++
|
||||
++ -- We could get away with just Null_Address instead, with
|
||||
++ -- nearly the same effect, but with this placeholder we can
|
||||
++ -- detect and report unexpected releases, and we can tell apart
|
||||
++ -- a GCC_Exception without a Cleanup, from one with another
|
||||
++ -- active handler, so as to still call Unwind_DeleteException
|
||||
++ -- exactly once: currently, Unwind_DeleteException does nothing
|
||||
++ -- when the Cleanup is null, but should it ever be changed to
|
||||
++ -- do more, we'll still be safe.
|
||||
++ null;
|
||||
++ end Claimed_Cleanup;
|
||||
++
|
||||
+ -------------------
|
||||
+ -- Begin_Handler --
|
||||
+ -------------------
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
tree="fam15h_rdimm"
|
||||
romtype="normal"
|
||||
rev="1c13f8d85c7306213cd525308ee8973e5663a3f8"
|
||||
arch="x86_64"
|
||||
payload_grub="n"
|
||||
payload_grub_withseabios="n"
|
||||
payload_seabios="n"
|
||||
payload_memtest="n"
|
||||
crossgcc_ada="n"
|
||||
Reference in New Issue
Block a user