From da3c9bb3c5c3b1f2e6e67a3695ce39b17bf68d5b Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Mon, 4 Sep 2023 02:36:41 +0100 Subject: merge config/ and resources/ Signed-off-by: Leah Rowe --- ...defaults-for-KCMA-D8-for-a-little-speed-b.patch | 38 ---- ...16-enable-lc_cache_partitioning-and-exper.patch | 32 --- ...-util-cbfstool-Makefile-support-distclean.patch | 41 ---- ...sgcc-patch-binutils-2.32-for-newer-hostcc.patch | 37 ---- ...fix-crossgcc-acpica-build-on-newer-hostcc.patch | 108 ---------- ...reboot-fam15h-use-new-upstream-for-acpica.patch | 38 ---- .../patches/0011-gcc-8.3.0_gnat_eh_new.patch | 232 --------------------- 7 files changed, 526 deletions(-) delete mode 100644 resources/coreboot/fam15h_rdimm/patches/0003-Tweak-cmos-defaults-for-KCMA-D8-for-a-little-speed-b.patch delete mode 100644 resources/coreboot/fam15h_rdimm/patches/0006-asus-kgpe-d16-enable-lc_cache_partitioning-and-exper.patch delete mode 100644 resources/coreboot/fam15h_rdimm/patches/0007-util-cbfstool-Makefile-support-distclean.patch delete mode 100644 resources/coreboot/fam15h_rdimm/patches/0008-crossgcc-patch-binutils-2.32-for-newer-hostcc.patch delete mode 100644 resources/coreboot/fam15h_rdimm/patches/0009-fix-crossgcc-acpica-build-on-newer-hostcc.patch delete mode 100644 resources/coreboot/fam15h_rdimm/patches/0010-coreboot-fam15h-use-new-upstream-for-acpica.patch delete mode 100644 resources/coreboot/fam15h_rdimm/patches/0011-gcc-8.3.0_gnat_eh_new.patch (limited to 'resources/coreboot/fam15h_rdimm/patches') diff --git a/resources/coreboot/fam15h_rdimm/patches/0003-Tweak-cmos-defaults-for-KCMA-D8-for-a-little-speed-b.patch b/resources/coreboot/fam15h_rdimm/patches/0003-Tweak-cmos-defaults-for-KCMA-D8-for-a-little-speed-b.patch deleted file mode 100644 index 5a39bd69..00000000 --- a/resources/coreboot/fam15h_rdimm/patches/0003-Tweak-cmos-defaults-for-KCMA-D8-for-a-little-speed-b.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 7a00638cea41ad939a59fc0e5996959435fbdb7f Mon Sep 17 00:00:00 2001 -From: "D.d.P.F. Lombard" -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 - diff --git a/resources/coreboot/fam15h_rdimm/patches/0006-asus-kgpe-d16-enable-lc_cache_partitioning-and-exper.patch b/resources/coreboot/fam15h_rdimm/patches/0006-asus-kgpe-d16-enable-lc_cache_partitioning-and-exper.patch deleted file mode 100644 index 5ada0dff..00000000 --- a/resources/coreboot/fam15h_rdimm/patches/0006-asus-kgpe-d16-enable-lc_cache_partitioning-and-exper.patch +++ /dev/null @@ -1,32 +0,0 @@ -From f0aac7261e16adc8e61eca7a506ff2de5112be47 Mon Sep 17 00:00:00 2001 -From: Leah Rowe -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 - diff --git a/resources/coreboot/fam15h_rdimm/patches/0007-util-cbfstool-Makefile-support-distclean.patch b/resources/coreboot/fam15h_rdimm/patches/0007-util-cbfstool-Makefile-support-distclean.patch deleted file mode 100644 index 87db312c..00000000 --- a/resources/coreboot/fam15h_rdimm/patches/0007-util-cbfstool-Makefile-support-distclean.patch +++ /dev/null @@ -1,41 +0,0 @@ -From d5dc3f23eb546cf328fdfe1e918afa028fb9cd8c Mon Sep 17 00:00:00 2001 -From: Leah Rowe -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 ---- - 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 - diff --git a/resources/coreboot/fam15h_rdimm/patches/0008-crossgcc-patch-binutils-2.32-for-newer-hostcc.patch b/resources/coreboot/fam15h_rdimm/patches/0008-crossgcc-patch-binutils-2.32-for-newer-hostcc.patch deleted file mode 100644 index 72681490..00000000 --- a/resources/coreboot/fam15h_rdimm/patches/0008-crossgcc-patch-binutils-2.32-for-newer-hostcc.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 4b4b2bdc2cedb3e219c6f90809e5684441b1dafa Mon Sep 17 00:00:00 2001 -From: Leah Rowe -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 ---- - 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 -++#include -+ -+ #include "gold-threads.h" -+ --- -2.40.1 - diff --git a/resources/coreboot/fam15h_rdimm/patches/0009-fix-crossgcc-acpica-build-on-newer-hostcc.patch b/resources/coreboot/fam15h_rdimm/patches/0009-fix-crossgcc-acpica-build-on-newer-hostcc.patch deleted file mode 100644 index ecc06d00..00000000 --- a/resources/coreboot/fam15h_rdimm/patches/0009-fix-crossgcc-acpica-build-on-newer-hostcc.patch +++ /dev/null @@ -1,108 +0,0 @@ -From 373dd351e374f391c9e2048e5f3e535267a04719 Mon Sep 17 00:00:00 2001 -From: Leah Rowe -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 ---- - .../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 -+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 -+--- -+ 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 -+ #include -+-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 - diff --git a/resources/coreboot/fam15h_rdimm/patches/0010-coreboot-fam15h-use-new-upstream-for-acpica.patch b/resources/coreboot/fam15h_rdimm/patches/0010-coreboot-fam15h-use-new-upstream-for-acpica.patch deleted file mode 100644 index 6b7e6de0..00000000 --- a/resources/coreboot/fam15h_rdimm/patches/0010-coreboot-fam15h-use-new-upstream-for-acpica.patch +++ /dev/null @@ -1,38 +0,0 @@ -From ba94a3f27a26d181291b5908bdd627be375eb606 Mon Sep 17 00:00:00 2001 -From: Leah Rowe -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 ---- - 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 - diff --git a/resources/coreboot/fam15h_rdimm/patches/0011-gcc-8.3.0_gnat_eh_new.patch b/resources/coreboot/fam15h_rdimm/patches/0011-gcc-8.3.0_gnat_eh_new.patch deleted file mode 100644 index 443d8512..00000000 --- a/resources/coreboot/fam15h_rdimm/patches/0011-gcc-8.3.0_gnat_eh_new.patch +++ /dev/null @@ -1,232 +0,0 @@ -From c5a03de594d6bb6ea5012a6549404e4631c903c8 Mon Sep 17 00:00:00 2001 -From: Alexandre Oliva -Date: Wed, 9 Aug 2023 16:57:31 +0200 -Subject: [PATCH] crossgcc: Backport GNAT exception handler v1 patch - -Signed-off-by: Adrien Bourmault ---- - .../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 - -- cgit v1.2.1