Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package limine for openSUSE:Factory checked in at 2025-08-16 20:39:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/limine (Old) and /work/SRC/openSUSE:Factory/.limine.new.1085 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "limine" Sat Aug 16 20:39:21 2025 rev:14 rq:1299896 version:9.6.1 Changes: -------- --- /work/SRC/openSUSE:Factory/limine/limine.changes 2025-08-06 14:35:45.898260857 +0200 +++ /work/SRC/openSUSE:Factory/.limine.new.1085/limine.changes 2025-08-16 20:44:20.488576237 +0200 @@ -1,0 +2,12 @@ +Sat Aug 16 11:40:33 UTC 2025 - Marvin Friedrich <cont...@marvinf.com> + +- Update to 9.6.1: + * EFI chainloading: Make EFI device path of loaded image relative to + the loaded image device handle. This now complies with the EFI + specification, and, amongst others, it fixes chainloading Shim. + * Miscellaneous build system changes and improvements. + * Do not disable linker relaxations for LoongArch64. + * `limine` host tool: Add check to ensure that a provided GPT BIOS + partition is at least 32KiB in size. + +------------------------------------------------------------------- Old: ---- limine-9.5.3.tar.gz New: ---- limine-9.6.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ limine.spec ++++++ --- /var/tmp/diff_new_pack.Lt6HuL/_old 2025-08-16 20:44:20.944595148 +0200 +++ /var/tmp/diff_new_pack.Lt6HuL/_new 2025-08-16 20:44:20.944595148 +0200 @@ -15,7 +15,7 @@ # Name: limine -Version: 9.5.3 +Version: 9.6.1 Release: 0 Summary: Modern, advanced, portable, multiprotocol bootloader and boot manager License: BSD-2-Clause @@ -39,7 +39,7 @@ %setup -q %build -%configure --enable-all --docdir=%{_docdir}/%{name} TOOLCHAIN_FOR_TARGET=llvm +%configure --enable-all --docdir=%{_docdir}/%{name} %make_build %install ++++++ limine-9.5.3.tar.gz -> limine-9.6.1.tar.gz ++++++ ++++ 3228 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/ChangeLog new/limine-9.6.1/ChangeLog --- old/limine-9.5.3/ChangeLog 2025-08-04 17:34:14.000000000 +0200 +++ new/limine-9.6.1/ChangeLog 2025-08-16 12:55:38.000000000 +0200 @@ -1,3 +1,49 @@ +2025-08-16 Mintsuki <mints...@protonmail.com> + + *** Release 9.6.1 *** + + Noteworthy changes compared to the previous release, 9.6.0: + + Bug fixes: + - EFI chainloading: Make EFI device path of loaded image relative to + the loaded image device handle. This now complies with the EFI + specification, and, amongst others, it fixes chainloading Shim. + + Miscellaneous: + - Miscellaneous build system changes and improvements. + - Do not disable linker relaxations for LoongArch64. + - `limine` host tool: Add check to ensure that a provided GPT BIOS + partition is at least 32KiB in size. + +2025-08-07 Mintsuki <mints...@protonmail.com> + + *** Release 9.6.0 *** + + Noteworthy changes compared to the previous release, 9.5.4: + + Miscellaneous: + - Get rid of the fragile and messy "freestanding-toolchain" build + helper tool. This allows for a simpler and more predictable way of + selecting the target toolchain components via ./configure. + +2025-08-06 Mintsuki <mints...@protonmail.com> + + *** Release 9.5.4 *** + + Noteworthy changes compared to the previous release, 9.5.3: + + Bug fixes: + - Exclude non-PCI devices from the volume discovery process on UEFI. + This is because on (especially, but not limited to) Snapdragon X + systems, firmware/flash devices, which are non-PCI, are exposed as + block I/O volumes too. This skips them, which makes the bootloader + more reliable and avoids long hangs at boot. + - Miscellaneous changes and fixes to the fallback volume discovery + path, to increase reliability and reduce the chance of accidental + damage or data loss. See GitHub issue #525. + - Minor assembly improvement that fixed Limine not building with old + NASM. + 2025-08-04 Mintsuki <mints...@protonmail.com> *** Release 9.5.3 *** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/GNUmakefile.in new/limine-9.6.1/GNUmakefile.in --- old/limine-9.5.3/GNUmakefile.in 2025-08-04 17:34:14.000000000 +0200 +++ new/limine-9.6.1/GNUmakefile.in 2025-08-16 12:55:38.000000000 +0200 @@ -62,6 +62,17 @@ LDFLAGS := @LDFLAGS@ LIBS := @LIBS@ +CC_FOR_TARGET := @CC_FOR_TARGET@ +export CC_FOR_TARGET +LD_FOR_TARGET := @LD_FOR_TARGET@ +export LD_FOR_TARGET +OBJCOPY_FOR_TARGET := @OBJCOPY_FOR_TARGET@ +export OBJCOPY_FOR_TARGET +OBJDUMP_FOR_TARGET := @OBJDUMP_FOR_TARGET@ +export OBJDUMP_FOR_TARGET +READELF_FOR_TARGET := @READELF_FOR_TARGET@ +export READELF_FOR_TARGET + override WERROR_FLAG := @WERROR_FLAG@ export WERROR_FLAG @@ -98,11 +109,10 @@ $(SED) 's/%VERSION%/@PACKAGE_VERSION@/g;s/%COPYRIGHT%/@LIMINE_COPYRIGHT@/g' <'$(call SHESCAPE,$(SRCDIR))/host/limine.c' >'$(call SHESCAPE,$(BINDIR))/limine.c' $(MAKE) -C '$(call SHESCAPE,$(BINDIR))' limine \ CC="$(CC)" \ - CFLAGS="$(CFLAGS)" \ + CFLAGS="$(CFLAGS) -Wall -Wextra $(WERROR_FLAG)" \ CPPFLAGS='$(CPPFLAGS) $(LIMINE_NO_BIOS) -DLIMINE_DATADIR=\"$(call SHESCAPE,$(datarootdir))/limine\"' \ LDFLAGS="$(LDFLAGS)" \ - LIBS="$(LIBS)" \ - WERROR_FLAG="$(WERROR_FLAG)" + LIBS="$(LIBS)" $(call MKESCAPE,$(BINDIR))/Makefile: $(call MKESCAPE,$(SRCDIR))/host/host.mk $(call MKESCAPE,$(SRCDIR))/host/.gitignore mkdir -p '$(call SHESCAPE,$(BINDIR))' @@ -290,7 +300,6 @@ cp -r '$(call SHESCAPE,$(SRCDIR))'/.git '$(call SHESCAPE,$(BUILDDIR))'/"$(DIST_OUTPUT)"/ cd '$(call SHESCAPE,$(BUILDDIR))'/"$(DIST_OUTPUT)" && git checkout . cd '$(call SHESCAPE,$(BUILDDIR))'/"$(DIST_OUTPUT)" && ./bootstrap - rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"$(DIST_OUTPUT)/build-aux/freestanding-toolchain/.git" rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"$(DIST_OUTPUT)/flanterm/.git" rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"$(DIST_OUTPUT)/flanterm/.gitignore" rm -rf '$(call SHESCAPE,$(BUILDDIR))'/"$(DIST_OUTPUT)/freestnd-c-hdrs/.git" @@ -323,7 +332,7 @@ .PHONY: distclean distclean: clean - rm -rf ovmf* config.log config.status GNUmakefile config.h toolchain-files man/man1/limine.1 + rm -rf ovmf* config.log config.status GNUmakefile config.h man/man1/limine.1 .PHONY: maintainer-clean maintainer-clean: distclean @@ -331,10 +340,9 @@ .PHONY: common-uefi-x86-64 common-uefi-x86-64: - TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-x86_64-toolchain.mk' \ - TARGET=uefi-x86-64 \ - BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-uefi-x86-64' \ - $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' -f common.mk + $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' -f common.mk \ + TARGET=uefi-x86-64 \ + BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-uefi-x86-64' .PHONY: common-uefi-x86-64-clean common-uefi-x86-64-clean: @@ -342,10 +350,9 @@ .PHONY: common-uefi-aarch64 common-uefi-aarch64: - TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-aarch64-toolchain.mk' \ - TARGET=uefi-aarch64 \ - BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-uefi-aarch64' \ - $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' -f common.mk + $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' -f common.mk \ + TARGET=uefi-aarch64 \ + BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-uefi-aarch64' .PHONY: common-uefi-aarch64-clean common-uefi-aarch64-clean: @@ -353,10 +360,9 @@ .PHONY: common-uefi-riscv64 common-uefi-riscv64: - TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-riscv64-toolchain.mk' \ - TARGET=uefi-riscv64 \ - BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-uefi-riscv64' \ - $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' -f common.mk + $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' -f common.mk \ + TARGET=uefi-riscv64 \ + BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-uefi-riscv64' .PHONY: common-uefi-riscv64-clean common-uefi-riscv64-clean: @@ -364,10 +370,9 @@ .PHONY: common-uefi-loongarch64 common-uefi-loongarch64: - TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-loongarch64-toolchain.mk' \ - TARGET=uefi-loongarch64 \ - BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-uefi-loongarch64' \ - $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' -f common.mk + $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' -f common.mk \ + TARGET=uefi-loongarch64 \ + BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-uefi-loongarch64' .PHONY: common-uefi-loongarch64-clean common-uefi-loongarch64-clean: @@ -375,10 +380,9 @@ .PHONY: common-uefi-ia32 common-uefi-ia32: - TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/uefi-i686-toolchain.mk' \ - TARGET=uefi-ia32 \ - BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-uefi-ia32' \ - $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' -f common.mk + $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' -f common.mk \ + TARGET=uefi-ia32 \ + BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-uefi-ia32' .PHONY: common-uefi-ia32-clean common-uefi-ia32-clean: @@ -386,10 +390,9 @@ .PHONY: common-bios common-bios: - TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/bios-i686-toolchain.mk' \ - TARGET=bios \ - BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-bios' \ - $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' -f common.mk + $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/common' -f common.mk \ + TARGET=bios \ + BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/common-bios' .PHONY: common-bios-clean common-bios-clean: @@ -397,9 +400,8 @@ .PHONY: decompressor decompressor: - TOOLCHAIN_FILE='$(call SHESCAPE,$(BUILDDIR))/toolchain-files/bios-i686-toolchain.mk' \ - BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/decompressor-build' \ - $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/decompressor' -f decompressor.mk + $(MAKE) -C '$(call SHESCAPE,$(SRCDIR))/decompressor' -f decompressor.mk \ + BUILDDIR='$(call SHESCAPE,$(BUILDDIR))/decompressor-build' .PHONY: decompressor-clean decompressor-clean: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/bootstrap new/limine-9.6.1/bootstrap --- old/limine-9.5.3/bootstrap 2025-08-04 17:34:14.000000000 +0200 +++ new/limine-9.6.1/bootstrap 2025-08-16 12:55:38.000000000 +0200 @@ -83,11 +83,6 @@ cp cc-runtime/src/cc-runtime.c decompressor/cc-runtime.c clone_repo_commit \ - https://codeberg.org/osdev/freestanding-toolchain.git \ - build-aux/freestanding-toolchain \ - 75fb06aae0fa3cd191f7013985dc55019f7a94d1 - - clone_repo_commit \ https://github.com/limine-bootloader/limine-protocol.git \ limine-protocol \ fedf97facd1c473ee8720f8dfd5a71d03490d928 @@ -95,7 +90,7 @@ clone_repo_commit \ https://codeberg.org/osdev/nyu-efi.git \ nyu-efi \ - 849afdaaa45cb483c6f34ad1ac42052ba7263417 + 2307e1e06c51023285ceac4b41bfdd44d746df8b clone_repo_commit \ https://github.com/jibsen/tinf.git \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/build-aux/freestanding-toolchain/LICENSE new/limine-9.6.1/build-aux/freestanding-toolchain/LICENSE --- old/limine-9.5.3/build-aux/freestanding-toolchain/LICENSE 2025-08-04 17:34:17.000000000 +0200 +++ new/limine-9.6.1/build-aux/freestanding-toolchain/LICENSE 1970-01-01 01:00:00.000000000 +0100 @@ -1,12 +0,0 @@ -Copyright (C) 2023-2025 mintsuki and contributors. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/build-aux/freestanding-toolchain/freestanding-toolchain new/limine-9.6.1/build-aux/freestanding-toolchain/freestanding-toolchain --- old/limine-9.5.3/build-aux/freestanding-toolchain/freestanding-toolchain 2025-08-04 17:34:17.000000000 +0200 +++ new/limine-9.6.1/build-aux/freestanding-toolchain/freestanding-toolchain 1970-01-01 01:00:00.000000000 +0100 @@ -1,325 +0,0 @@ -#! /bin/sh - -# Copyright (C) 2023-2025 mintsuki and contributors. -# -# Permission to use, copy, modify, and/or distribute this software -# for any purpose with or without fee is hereby granted. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -# DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -# USE OR PERFORMANCE OF THIS SOFTWARE. - -set -e - -export LC_ALL=C - -IFS=" "" "' -' - -if [ -z "$ARCHITECTURE" ]; then - echo 'error: $ARCHITECTURE must be specified' - exit 1 -fi - -case "$ARCHITECTURE" in - arm) - TRIPLET=${ARCHITECTURE}-unknown-none-eabi - ;; - *) - TRIPLET=${ARCHITECTURE}-unknown-none-elf - ;; -esac - -check_component() { - if eval [ "x\$WANT_$1" = "xyes" ]; then - printf "checking for $2 ($ARCHITECTURE)... " - if ! command -v $2 >/dev/null 2>&1; then - echo "no" - return 1 - fi - echo "yes" - eval "_$1"="$2" - fi -} - -validate_lang() { - CC_MACHINE="$($1 -dumpmachine | sed 's/-.*//g')" - - if [ "x$CC_MACHINE" = "xamd64" ]; then - CC_MACHINE=x86_64 - fi - - if [ "x$CC_MACHINE" = "xx86_64" ]; then - case "$ARCHITECTURE" in - i?86) - CC_MACHINE="$ARCHITECTURE" - ;; - esac - fi - - if ! [ "x$CC_MACHINE" = "x$ARCHITECTURE" ] || ! echo | $1 -x $2 -c - -o /dev/null >/dev/null 2>&1; then - return 1 - fi -} - -validate_cc() { - validate_lang "$1" c -} - -validate_cxx() { - validate_lang "$1" c++ -} - -unset_toolchain() { - unset _FREESTANDING_ADDR2LINE - unset _FREESTANDING_AR - unset _FREESTANDING_CC - unset _FREESTANDING_CXX - unset _FREESTANDING_CXXFILT - unset _FREESTANDING_LD - unset _FREESTANDING_NM - unset _FREESTANDING_OBJCOPY - unset _FREESTANDING_OBJDUMP - unset _FREESTANDING_RANLIB - unset _FREESTANDING_READELF - unset _FREESTANDING_SIZE - unset _FREESTANDING_STRINGS - unset _FREESTANDING_STRIP -} - -unset_toolchain - -TOOLCHAIN_VALID=no - -# First check if we have LLVM -if [ -z "$FREESTANDING_TOOLCHAIN" ] || [ "x$FREESTANDING_TOOLCHAIN" = "xllvm" ]; then while true; do - if [ -z "$FREESTANDING_ADDR2LINE" ]; then check_component FREESTANDING_ADDR2LINE llvm-addr2line || break; fi - if [ -z "$FREESTANDING_AR" ]; then check_component FREESTANDING_AR llvm-ar || break; fi - if [ -z "$FREESTANDING_CC" ]; then check_component FREESTANDING_CC clang || break; fi - if [ -z "$FREESTANDING_CXX" ]; then check_component FREESTANDING_CXX clang++ || break; fi - if [ -z "$FREESTANDING_CXXFILT" ]; then check_component FREESTANDING_CXXFILT llvm-cxxfilt || break; fi - if [ -z "$FREESTANDING_LD" ]; then check_component FREESTANDING_LD ld.lld || break; fi - if [ -z "$FREESTANDING_NM" ]; then check_component FREESTANDING_NM llvm-nm || break; fi - if [ -z "$FREESTANDING_OBJCOPY" ]; then check_component FREESTANDING_OBJCOPY llvm-objcopy || break; fi - if [ -z "$FREESTANDING_OBJDUMP" ]; then check_component FREESTANDING_OBJDUMP llvm-objdump || break; fi - if [ -z "$FREESTANDING_RANLIB" ]; then check_component FREESTANDING_RANLIB llvm-ranlib || break; fi - if [ -z "$FREESTANDING_READELF" ]; then check_component FREESTANDING_READELF llvm-readelf || break; fi - if [ -z "$FREESTANDING_SIZE" ]; then check_component FREESTANDING_SIZE llvm-size || break; fi - if [ -z "$FREESTANDING_STRINGS" ]; then check_component FREESTANDING_STRINGS llvm-strings || break; fi - if [ -z "$FREESTANDING_STRIP" ]; then check_component FREESTANDING_STRIP llvm-strip || break; fi - - if [ -z "$FREESTANDING_CC" ] && [ "x$WANT_FREESTANDING_CC" = "xyes" ]; then - _FREESTANDING_CC="clang -target $TRIPLET" - validate_cc "$_FREESTANDING_CC" || break - fi - if [ -z "$FREESTANDING_CXX" ] && [ "x$WANT_FREESTANDING_CXX" = "xyes" ]; then - _FREESTANDING_CXX="clang++ -target $TRIPLET" - validate_cxx "$_FREESTANDING_CXX" || break - fi - - TOOLCHAIN_VALID=yes - break -done; fi - -if [ "$TOOLCHAIN_VALID" = "no" ]; then - if [ "x$FREESTANDING_TOOLCHAIN" = "xllvm" ]; then - echo "error: could not detect LLVM toolchain" - exit 1 - fi - - unset_toolchain -fi - -if [ "x$FREESTANDING_TOOLCHAIN" = "xgnu" ]; then - unset FREESTANDING_TOOLCHAIN -fi - -# Now try a prefixed GCC toolchain -ENFORCE_TOOLCHAIN=no -if [ "$TOOLCHAIN_VALID" = "no" ]; then - if [ -z "$FREESTANDING_TOOLCHAIN" ]; then - FREESTANDING_TOOLCHAIN="$TRIPLET" - else - ENFORCE_TOOLCHAIN=yes - fi - - FIRST_LOOP=1 - for i in $FREESTANDING_TOOLCHAIN \ - $(echo $FREESTANDING_TOOLCHAIN | sed -E 's/-unknown-none-(elf|eabi)/-none-\1/g') \ - $(echo $FREESTANDING_TOOLCHAIN | sed -E 's/-unknown-none-(elf|eabi)/-\1/g') \ - $(echo $FREESTANDING_TOOLCHAIN | sed -E 's/-unknown-none-(elf|eabi)/-unknown-linux-gnu/g') \ - $(echo $FREESTANDING_TOOLCHAIN | sed -E 's/-unknown-none-(elf|eabi)/-pc-linux-gnu/g') \ - $(echo $FREESTANDING_TOOLCHAIN | sed -E 's/-unknown-none-(elf|eabi)/-linux-gnu/g') \ - ; do - if [ "$FIRST_LOOP" = 0 ] && [ "$ENFORCE_TOOLCHAIN" = "yes" ]; then - break - fi - FIRST_LOOP=0 - - if [ -z "$FREESTANDING_ADDR2LINE" ]; then check_component FREESTANDING_ADDR2LINE $i-addr2line || continue; fi - if [ -z "$FREESTANDING_AR" ]; then check_component FREESTANDING_AR $i-ar || continue; fi - if [ -z "$FREESTANDING_CC" ]; then check_component FREESTANDING_CC $i-gcc || continue; fi - if [ -z "$FREESTANDING_CXX" ]; then check_component FREESTANDING_CXX $i-g++ || continue; fi - if [ -z "$FREESTANDING_CXXFILT" ]; then check_component FREESTANDING_CXXFILT $i-c++filt || continue; fi - if [ -z "$FREESTANDING_LD" ]; then check_component FREESTANDING_LD $i-ld || continue; fi - if [ -z "$FREESTANDING_NM" ]; then check_component FREESTANDING_NM $i-nm || continue; fi - if [ -z "$FREESTANDING_OBJCOPY" ]; then check_component FREESTANDING_OBJCOPY $i-objcopy || continue; fi - if [ -z "$FREESTANDING_OBJDUMP" ]; then check_component FREESTANDING_OBJDUMP $i-objdump || continue; fi - if [ -z "$FREESTANDING_RANLIB" ]; then check_component FREESTANDING_RANLIB $i-ranlib || continue; fi - if [ -z "$FREESTANDING_READELF" ]; then check_component FREESTANDING_READELF $i-readelf || continue; fi - if [ -z "$FREESTANDING_SIZE" ]; then check_component FREESTANDING_SIZE $i-size || continue; fi - if [ -z "$FREESTANDING_STRINGS" ]; then check_component FREESTANDING_STRINGS $i-strings || continue; fi - if [ -z "$FREESTANDING_STRIP" ]; then check_component FREESTANDING_STRIP $i-strip || continue; fi - - if [ -z "$FREESTANDING_CC" ] && [ "x$WANT_FREESTANDING_CC" = "xyes" ]; then - validate_cc "$_FREESTANDING_CC" || continue - fi - if [ -z "$FREESTANDING_CXX" ] && [ "x$WANT_FREESTANDING_CXX" = "xyes" ]; then - validate_cxx "$_FREESTANDING_CXX" || continue - fi - - TOOLCHAIN_VALID=yes - break - done -fi - -if [ "$TOOLCHAIN_VALID" = "no" ]; then - if [ "$ENFORCE_TOOLCHAIN" = "yes" ]; then - echo "error: requested toolchain not valid" - exit 1 - fi - - unset_toolchain -fi - -# If $CC is passed, try a toolchain based on the triplet of $CC -if ! [ -z "$CC" ] && [ "$TOOLCHAIN_VALID" = "no" ]; then while true; do - CC_TRIPLET="$($CC -dumpmachine)" - - if [ -z "$FREESTANDING_ADDR2LINE" ]; then check_component FREESTANDING_ADDR2LINE $CC_TRIPLET-addr2line || break; fi - if [ -z "$FREESTANDING_AR" ]; then check_component FREESTANDING_AR $CC_TRIPLET-ar || break; fi - if [ -z "$FREESTANDING_CC" ]; then check_component FREESTANDING_CC $CC_TRIPLET-gcc || break; fi - if [ -z "$FREESTANDING_CXX" ]; then check_component FREESTANDING_CXX $CC_TRIPLET-g++ || break; fi - if [ -z "$FREESTANDING_CXXFILT" ]; then check_component FREESTANDING_CXXFILT $CC_TRIPLET-c++filt || break; fi - if [ -z "$FREESTANDING_LD" ]; then check_component FREESTANDING_LD $CC_TRIPLET-ld || break; fi - if [ -z "$FREESTANDING_NM" ]; then check_component FREESTANDING_NM $CC_TRIPLET-nm || break; fi - if [ -z "$FREESTANDING_OBJCOPY" ]; then check_component FREESTANDING_OBJCOPY $CC_TRIPLET-objcopy || break; fi - if [ -z "$FREESTANDING_OBJDUMP" ]; then check_component FREESTANDING_OBJDUMP $CC_TRIPLET-objdump || break; fi - if [ -z "$FREESTANDING_RANLIB" ]; then check_component FREESTANDING_RANLIB $CC_TRIPLET-ranlib || break; fi - if [ -z "$FREESTANDING_READELF" ]; then check_component FREESTANDING_READELF $CC_TRIPLET-readelf || break; fi - if [ -z "$FREESTANDING_SIZE" ]; then check_component FREESTANDING_SIZE $CC_TRIPLET-size || break; fi - if [ -z "$FREESTANDING_STRINGS" ]; then check_component FREESTANDING_STRINGS $CC_TRIPLET-strings || break; fi - if [ -z "$FREESTANDING_STRIP" ]; then check_component FREESTANDING_STRIP $CC_TRIPLET-strip || break; fi - - if [ -z "$FREESTANDING_CC" ] && [ "x$WANT_FREESTANDING_CC" = "xyes" ]; then - validate_cc "$_FREESTANDING_CC" || break - fi - if [ -z "$FREESTANDING_CXX" ] && [ "x$WANT_FREESTANDING_CXX" = "xyes" ]; then - validate_cxx "$_FREESTANDING_CXX" || break - fi - - TOOLCHAIN_VALID=yes - break -done; fi - -# Lastly, try a toolchain made up of unprefixed utilities -if [ "$TOOLCHAIN_VALID" = "no" ]; then while true; do - unset_toolchain - - if [ -z "$FREESTANDING_ADDR2LINE" ]; then check_component FREESTANDING_ADDR2LINE addr2line || break; fi - if [ -z "$FREESTANDING_AR" ]; then check_component FREESTANDING_AR ar || break; fi - if [ -z "$FREESTANDING_CC" ]; then check_component FREESTANDING_CC gcc || break; fi - if [ -z "$FREESTANDING_CXX" ]; then check_component FREESTANDING_CXX g++ || break; fi - if [ -z "$FREESTANDING_CXXFILT" ]; then check_component FREESTANDING_CXXFILT c++filt || break; fi - if [ -z "$FREESTANDING_LD" ]; then check_component FREESTANDING_LD ld || break; fi - if [ -z "$FREESTANDING_NM" ]; then check_component FREESTANDING_NM nm || break; fi - if [ -z "$FREESTANDING_OBJCOPY" ]; then check_component FREESTANDING_OBJCOPY objcopy || break; fi - if [ -z "$FREESTANDING_OBJDUMP" ]; then check_component FREESTANDING_OBJDUMP objdump || break; fi - if [ -z "$FREESTANDING_RANLIB" ]; then check_component FREESTANDING_RANLIB ranlib || break; fi - if [ -z "$FREESTANDING_READELF" ]; then check_component FREESTANDING_READELF readelf || break; fi - if [ -z "$FREESTANDING_SIZE" ]; then check_component FREESTANDING_SIZE size || break; fi - if [ -z "$FREESTANDING_STRINGS" ]; then check_component FREESTANDING_STRINGS strings || break; fi - if [ -z "$FREESTANDING_STRIP" ]; then check_component FREESTANDING_STRIP strip || break; fi - - if [ -z "$FREESTANDING_CC" ] && [ "x$WANT_FREESTANDING_CC" = "xyes" ]; then - validate_cc "$_FREESTANDING_CC" || break - fi - if [ -z "$FREESTANDING_CXX" ] && [ "x$WANT_FREESTANDING_CXX" = "xyes" ]; then - validate_cxx "$_FREESTANDING_CXX" || break - fi - - TOOLCHAIN_VALID=yes - break -done; fi - -if [ "$TOOLCHAIN_VALID" = "no" ]; then - echo "error: could not find any valid toolchain for target '$ARCHITECTURE'" - exit 1 -fi - -custom_check_fail() { - echo "error: custom toolchain component '$1' not valid" - exit 1 -} - -if ! [ -z "$FREESTANDING_ADDR2LINE" ]; then check_component FREESTANDING_ADDR2LINE "$FREESTANDING_ADDR2LINE" || custom_check_fail "$FREESTANDING_ADDR2LINE"; fi -if ! [ -z "$FREESTANDING_AR" ]; then check_component FREESTANDING_AR "$FREESTANDING_AR" || custom_check_fail "$FREESTANDING_AR"; fi -if ! [ -z "$FREESTANDING_CC" ]; then check_component FREESTANDING_CC "$FREESTANDING_CC" || custom_check_fail "$FREESTANDING_CC"; fi -if ! [ -z "$FREESTANDING_CXX" ]; then check_component FREESTANDING_CXX "$FREESTANDING_CXX" || custom_check_fail "$FREESTANDING_CXX"; fi -if ! [ -z "$FREESTANDING_CXXFILT" ]; then check_component FREESTANDING_CXXFILT "$FREESTANDING_CXXFILT" || custom_check_fail "$FREESTANDING_CXXFILT"; fi -if ! [ -z "$FREESTANDING_LD" ]; then check_component FREESTANDING_LD "$FREESTANDING_LD" || custom_check_fail "$FREESTANDING_LD"; fi -if ! [ -z "$FREESTANDING_NM" ]; then check_component FREESTANDING_NM "$FREESTANDING_NM" || custom_check_fail "$FREESTANDING_NM"; fi -if ! [ -z "$FREESTANDING_OBJCOPY" ]; then check_component FREESTANDING_OBJCOPY "$FREESTANDING_OBJCOPY" || custom_check_fail "$FREESTANDING_OBJCOPY"; fi -if ! [ -z "$FREESTANDING_OBJDUMP" ]; then check_component FREESTANDING_OBJDUMP "$FREESTANDING_OBJDUMP" || custom_check_fail "$FREESTANDING_OBJDUMP"; fi -if ! [ -z "$FREESTANDING_RANLIB" ]; then check_component FREESTANDING_RANLIB "$FREESTANDING_RANLIB" || custom_check_fail "$FREESTANDING_RANLIB"; fi -if ! [ -z "$FREESTANDING_READELF" ]; then check_component FREESTANDING_READELF "$FREESTANDING_READELF" || custom_check_fail "$FREESTANDING_READELF"; fi -if ! [ -z "$FREESTANDING_SIZE" ]; then check_component FREESTANDING_SIZE "$FREESTANDING_SIZE" || custom_check_fail "$FREESTANDING_SIZE"; fi -if ! [ -z "$FREESTANDING_STRINGS" ]; then check_component FREESTANDING_STRINGS "$FREESTANDING_STRINGS" || custom_check_fail "$FREESTANDING_STRING"; fi -if ! [ -z "$FREESTANDING_STRIP" ]; then check_component FREESTANDING_STRIP "$FREESTANDING_STRIP" || custom_check_fail "$FREESTANDING_STRIP"; fi - -if ! [ -z "$FREESTANDING_CC" ] && [ "x$WANT_FREESTANDING_CC" = "xyes" ]; then - if ! validate_cc "$_FREESTANDING_CC"; then - echo "error: C compiler '$FREESTANDING_CC' does not support specified architecture '$ARCHITECTURE'" - exit 1 - fi -fi -if ! [ -z "$FREESTANDING_CXX" ] && [ "x$WANT_FREESTANDING_CXX" = "xyes" ]; then - if ! validate_cxx "$_FREESTANDING_CXX"; then - echo "error: C++ compiler '$FREESTANDING_CXX' does not support specified architecture '$ARCHITECTURE'" - exit 1 - fi -fi - -unset FREESTANDING_CC_IS_CLANG -if [ "x$WANT_FREESTANDING_CC" = "xyes" ]; then - FREESTANDING_CC_IS_CLANG=no - - if $_FREESTANDING_CC --version 2>&1 | grep -q '^Target: '; then - FREESTANDING_CC_IS_CLANG=yes - fi -fi - -# Output the final makefile chunk -cat 1>&2 <<EOF -${FREESTANDING_TOOLCHAIN_PREFIX}ADDR2LINE${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_ADDR2LINE -${FREESTANDING_TOOLCHAIN_PREFIX}AR${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_AR -${FREESTANDING_TOOLCHAIN_PREFIX}CC${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_CC -${FREESTANDING_TOOLCHAIN_PREFIX}CXX${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_CXX -${FREESTANDING_TOOLCHAIN_PREFIX}CXXFILT${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_CXXFILT -${FREESTANDING_TOOLCHAIN_PREFIX}LD${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_LD -${FREESTANDING_TOOLCHAIN_PREFIX}NM${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_NM -${FREESTANDING_TOOLCHAIN_PREFIX}OBJCOPY${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_OBJCOPY -${FREESTANDING_TOOLCHAIN_PREFIX}OBJDUMP${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_OBJDUMP -${FREESTANDING_TOOLCHAIN_PREFIX}RANLIB${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_RANLIB -${FREESTANDING_TOOLCHAIN_PREFIX}READELF${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_READELF -${FREESTANDING_TOOLCHAIN_PREFIX}SIZE${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_SIZE -${FREESTANDING_TOOLCHAIN_PREFIX}STRINGS${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_STRINGS -${FREESTANDING_TOOLCHAIN_PREFIX}STRIP${FREESTANDING_TOOLCHAIN_SUFFIX} := $_FREESTANDING_STRIP - -${FREESTANDING_TOOLCHAIN_PREFIX}CC${FREESTANDING_TOOLCHAIN_SUFFIX}_IS_CLANG := $FREESTANDING_CC_IS_CLANG -EOF diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/common/common.mk new/limine-9.6.1/common/common.mk --- old/limine-9.5.3/common/common.mk 2025-08-04 17:34:14.000000000 +0200 +++ new/limine-9.6.1/common/common.mk 2025-08-16 12:55:38.000000000 +0200 @@ -1,8 +1,5 @@ .SUFFIXES: -include $(TOOLCHAIN_FILE) -export OBJDUMP_FOR_TARGET - override SRCDIR := $(shell pwd -P) override SPACE := $(subst ,, ) @@ -11,6 +8,8 @@ override SHESCAPE = $(subst ','\'',$(1)) override OBJESCAPE = $(subst .a ,.a' ',$(subst .o ,.o' ',$(call SHESCAPE,$(1)))) +override CC_FOR_TARGET_IS_CLANG := $(shell ! $(CC_FOR_TARGET) --version 2>/dev/null | $(GREP) -q '^Target: '; echo $$?) + COM_OUTPUT := false E9_OUTPUT := false @@ -36,9 +35,6 @@ -fno-strict-aliasing \ -fno-lto -override CFLAGS_FOR_TARGET := \ - $(patsubst -g,-gdwarf,$(CFLAGS_FOR_TARGET)) - override CPPFLAGS_FOR_TARGET := \ -I . \ -I libc-compat \ @@ -72,12 +68,17 @@ $(patsubst -g,-g -F dwarf,$(NASMFLAGS_FOR_TARGET)) ifeq ($(TARGET),bios) + ifeq ($(CC_FOR_TARGET_IS_CLANG),1) + override CC_FOR_TARGET += \ + -target i686-unknown-none-elf + endif override CFLAGS_FOR_TARGET += \ -fno-PIC \ -m32 \ -march=i686 \ -mabi=sysv \ - -mno-80387 + -mno-80387 \ + -mno-mmx override CPPFLAGS_FOR_TARGET := \ $(CPPFLAGS_FOR_TARGET) \ -DBIOS @@ -89,6 +90,10 @@ endif ifeq ($(TARGET),uefi-x86-64) + ifeq ($(CC_FOR_TARGET_IS_CLANG),1) + override CC_FOR_TARGET += \ + -target x86_64-unknown-none-elf + endif override CFLAGS_FOR_TARGET += \ -fPIE \ -fshort-wchar \ @@ -112,13 +117,18 @@ endif ifeq ($(TARGET),uefi-ia32) + ifeq ($(CC_FOR_TARGET_IS_CLANG),1) + override CC_FOR_TARGET += \ + -target i686-unknown-none-elf + endif override CFLAGS_FOR_TARGET += \ -fPIE \ -fshort-wchar \ -m32 \ -march=i686 \ -mabi=sysv \ - -mno-80387 + -mno-80387 \ + -mno-mmx override CPPFLAGS_FOR_TARGET := \ -I ../nyu-efi/inc \ $(CPPFLAGS_FOR_TARGET) \ @@ -131,6 +141,10 @@ endif ifeq ($(TARGET),uefi-aarch64) + ifeq ($(CC_FOR_TARGET_IS_CLANG),1) + override CC_FOR_TARGET += \ + -target aarch64-unknown-none-elf + endif override CFLAGS_FOR_TARGET += \ -fPIE \ -fshort-wchar \ @@ -144,16 +158,18 @@ endif ifeq ($(TARGET),uefi-riscv64) + ifeq ($(CC_FOR_TARGET_IS_CLANG),1) + override CC_FOR_TARGET += \ + -target riscv64-unknown-none-elf + endif override CFLAGS_FOR_TARGET += \ -fPIE \ -fshort-wchar - - ifeq ($(CC_FOR_TARGET_IS_CLANG),yes) + ifeq ($(CC_FOR_TARGET_IS_CLANG),1) override CFLAGS_FOR_TARGET += -march=rv64imac else override CFLAGS_FOR_TARGET += -march=rv64imac_zicsr_zifencei endif - override CFLAGS_FOR_TARGET += \ -mabi=lp64 \ -mno-relax @@ -165,14 +181,17 @@ endif ifeq ($(TARGET),uefi-loongarch64) + ifeq ($(CC_FOR_TARGET_IS_CLANG),1) + override CC_FOR_TARGET += \ + -target loongarch64-unknown-none-elf + endif override CFLAGS_FOR_TARGET += \ -fPIE \ -fshort-wchar \ -march=loongarch64 \ -mabi=lp64s \ -mfpu=none \ - -msimd=none \ - -mno-relax + -msimd=none override CPPFLAGS_FOR_TARGET := \ -I ../nyu-efi/inc \ @@ -224,7 +243,6 @@ ifeq ($(TARGET),uefi-loongarch64) override LDFLAGS_FOR_TARGET += \ -m elf64loongarch \ - --no-relax \ -pie \ -z text endif @@ -341,7 +359,7 @@ $(call MKESCAPE,$(BUILDDIR))/limine_stage2only.elf: $(OBJ_S2) $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker_stage2only.ld' - $(LD_FOR_TARGET) '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -T'$(call SHESCAPE,$(BUILDDIR))/linker_stage2only.ld' -o '$(call SHESCAPE,$@)' || \ + $(LD_FOR_TARGET) $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -T'$(call SHESCAPE,$(BUILDDIR))/linker_stage2only.ld' -o '$(call SHESCAPE,$@)' || \ ( echo "This error may mean that stage 2 was trying to use stage 3 symbols before loading stage 3" && \ false ) @@ -355,7 +373,7 @@ $(call MKESCAPE,$(BUILDDIR))/limine_nomap.elf: $(OBJ) $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/empty' $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker_nos2map.ld' - $(LD_FOR_TARGET) '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -T'$(call SHESCAPE,$(BUILDDIR))/linker_nos2map.ld' -o '$(call SHESCAPE,$@)' + $(LD_FOR_TARGET) $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -T'$(call SHESCAPE,$(BUILDDIR))/linker_nos2map.ld' -o '$(call SHESCAPE,$@)' $(OBJCOPY_FOR_TARGET) -O binary --only-section=.note.gnu.build-id '$(call SHESCAPE,$@)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s2.bin' cd '$(call SHESCAPE,$(BUILDDIR))' && \ $(OBJCOPY_FOR_TARGET) -I binary -B i386 -O elf32-i386 build-id.s2.bin build-id.s2.o && \ @@ -364,7 +382,7 @@ cd '$(call SHESCAPE,$(BUILDDIR))' && \ $(OBJCOPY_FOR_TARGET) -I binary -B i386 -O elf32-i386 build-id.s3.bin build-id.s3.o && \ $(OBJCOPY_FOR_TARGET) --add-section .note.GNU-stack='$(call SHESCAPE,$(BUILDDIR))/empty' --set-section-flags .note.GNU-stack=noload,readonly build-id.s3.o - $(LD_FOR_TARGET) '$(call OBJESCAPE,$^)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s2.o' '$(call SHESCAPE,$(BUILDDIR))/build-id.s3.o' $(LDFLAGS_FOR_TARGET) -T'$(call SHESCAPE,$(BUILDDIR))/linker_nos2map.ld' -o '$(call SHESCAPE,$@)' + $(LD_FOR_TARGET) $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s2.o' '$(call SHESCAPE,$(BUILDDIR))/build-id.s3.o' -T'$(call SHESCAPE,$(BUILDDIR))/linker_nos2map.ld' -o '$(call SHESCAPE,$@)' $(call MKESCAPE,$(BUILDDIR))/linker_nomap.ld: linker_bios.ld.in $(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))' @@ -373,7 +391,7 @@ $(call MKESCAPE,$(BUILDDIR))/limine_nos3map.elf: $(OBJ) $(call MKESCAPE,$(BUILDDIR))/stage2.map.o $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/empty' $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' - $(LD_FOR_TARGET) '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -T'$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' -o '$(call SHESCAPE,$@)' + $(LD_FOR_TARGET) $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -T'$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' -o '$(call SHESCAPE,$@)' $(OBJCOPY_FOR_TARGET) -O binary --only-section=.note.gnu.build-id '$(call SHESCAPE,$@)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s2.bin' cd '$(call SHESCAPE,$(BUILDDIR))' && \ $(OBJCOPY_FOR_TARGET) -I binary -B i386 -O elf32-i386 build-id.s2.bin build-id.s2.o && \ @@ -382,7 +400,7 @@ cd '$(call SHESCAPE,$(BUILDDIR))' && \ $(OBJCOPY_FOR_TARGET) -I binary -B i386 -O elf32-i386 build-id.s3.bin build-id.s3.o && \ $(OBJCOPY_FOR_TARGET) --add-section .note.GNU-stack='$(call SHESCAPE,$(BUILDDIR))/empty' --set-section-flags .note.GNU-stack=noload,readonly build-id.s3.o - $(LD_FOR_TARGET) '$(call OBJESCAPE,$^)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s2.o' '$(call SHESCAPE,$(BUILDDIR))/build-id.s3.o' $(LDFLAGS_FOR_TARGET) -T'$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' -o '$(call SHESCAPE,$@)' + $(LD_FOR_TARGET) $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s2.o' '$(call SHESCAPE,$(BUILDDIR))/build-id.s3.o' -T'$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' -o '$(call SHESCAPE,$@)' $(call MKESCAPE,$(BUILDDIR))/linker.ld: linker_bios.ld.in $(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))' @@ -391,7 +409,7 @@ $(call MKESCAPE,$(BUILDDIR))/limine.elf: $(OBJ) $(call MKESCAPE,$(BUILDDIR))/stage2.map.o $(call MKESCAPE,$(BUILDDIR))/full.map.o $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/empty' $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker.ld' - $(LD_FOR_TARGET) '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -T'$(call SHESCAPE,$(BUILDDIR))/linker.ld' -o '$(call SHESCAPE,$@)' + $(LD_FOR_TARGET) $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -T'$(call SHESCAPE,$(BUILDDIR))/linker.ld' -o '$(call SHESCAPE,$@)' $(OBJCOPY_FOR_TARGET) -O binary --only-section=.note.gnu.build-id '$(call SHESCAPE,$@)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s2.bin' cd '$(call SHESCAPE,$(BUILDDIR))' && \ $(OBJCOPY_FOR_TARGET) -I binary -B i386 -O elf32-i386 build-id.s2.bin build-id.s2.o && \ @@ -400,7 +418,7 @@ cd '$(call SHESCAPE,$(BUILDDIR))' && \ $(OBJCOPY_FOR_TARGET) -I binary -B i386 -O elf32-i386 build-id.s3.bin build-id.s3.o && \ $(OBJCOPY_FOR_TARGET) --add-section .note.GNU-stack='$(call SHESCAPE,$(BUILDDIR))/empty' --set-section-flags .note.GNU-stack=noload,readonly build-id.s3.o - $(LD_FOR_TARGET) '$(call OBJESCAPE,$^)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s2.o' '$(call SHESCAPE,$(BUILDDIR))/build-id.s3.o' $(LDFLAGS_FOR_TARGET) -T'$(call SHESCAPE,$(BUILDDIR))/linker.ld' -o '$(call SHESCAPE,$@)' + $(LD_FOR_TARGET) $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' '$(call SHESCAPE,$(BUILDDIR))/build-id.s2.o' '$(call SHESCAPE,$(BUILDDIR))/build-id.s3.o' -T'$(call SHESCAPE,$(BUILDDIR))/linker.ld' -o '$(call SHESCAPE,$@)' endif @@ -415,7 +433,7 @@ $(call MKESCAPE,$(BUILDDIR))/BOOTX64.EFI: $(call MKESCAPE,$(BUILDDIR))/limine.elf $(OBJCOPY_FOR_TARGET) -O binary '$(call SHESCAPE,$<)' '$(call SHESCAPE,$@)' chmod -x '$(call SHESCAPE,$@)' - dd if=/dev/zero of='$(call SHESCAPE,$@)' bs=4096 count=0 seek=$$(( ($$(wc -c < '$(call SHESCAPE,$@)') + 4095) / 4096 )) + dd if=/dev/zero of='$(call SHESCAPE,$@)' bs=4096 count=0 seek=$$(( ($$(wc -c < '$(call SHESCAPE,$@)') + 4095) / 4096 )) 2>/dev/null $(call MKESCAPE,$(BUILDDIR))/linker_nomap.ld: linker_uefi_x86_64.ld.in $(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))' @@ -425,7 +443,7 @@ $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' $(LD_FOR_TARGET) \ -T'$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' \ - '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -o '$(call SHESCAPE,$@)' + $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -o '$(call SHESCAPE,$@)' $(call MKESCAPE,$(BUILDDIR))/linker.ld: linker_uefi_x86_64.ld.in $(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))' @@ -435,7 +453,7 @@ $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker.ld' $(LD_FOR_TARGET) \ -T'$(call SHESCAPE,$(BUILDDIR))/linker.ld' \ - '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -o '$(call SHESCAPE,$@)' + $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -o '$(call SHESCAPE,$@)' endif @@ -450,7 +468,7 @@ $(call MKESCAPE,$(BUILDDIR))/BOOTAA64.EFI: $(call MKESCAPE,$(BUILDDIR))/limine.elf $(OBJCOPY_FOR_TARGET) -O binary '$(call SHESCAPE,$<)' '$(call SHESCAPE,$@)' chmod -x '$(call SHESCAPE,$@)' - dd if=/dev/zero of='$(call SHESCAPE,$@)' bs=4096 count=0 seek=$$(( ($$(wc -c < '$(call SHESCAPE,$@)') + 4095) / 4096 )) + dd if=/dev/zero of='$(call SHESCAPE,$@)' bs=4096 count=0 seek=$$(( ($$(wc -c < '$(call SHESCAPE,$@)') + 4095) / 4096 )) 2>/dev/null $(call MKESCAPE,$(BUILDDIR))/linker_nomap.ld: linker_uefi_aarch64.ld.in $(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))' @@ -460,7 +478,7 @@ $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' $(LD_FOR_TARGET) \ -T'$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' \ - '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -o '$(call SHESCAPE,$@)' + $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -o '$(call SHESCAPE,$@)' $(call MKESCAPE,$(BUILDDIR))/linker.ld: linker_uefi_aarch64.ld.in $(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))' @@ -470,7 +488,7 @@ $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker.ld' $(LD_FOR_TARGET) \ -T'$(call SHESCAPE,$(BUILDDIR))/linker.ld' \ - '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -o '$(call SHESCAPE,$@)' + $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -o '$(call SHESCAPE,$@)' endif ifeq ($(TARGET),uefi-riscv64) @@ -484,7 +502,7 @@ $(call MKESCAPE,$(BUILDDIR))/BOOTRISCV64.EFI: $(call MKESCAPE,$(BUILDDIR))/limine.elf $(OBJCOPY_FOR_TARGET) -O binary '$(call SHESCAPE,$<)' '$(call SHESCAPE,$@)' chmod -x '$(call SHESCAPE,$@)' - dd if=/dev/zero of='$(call SHESCAPE,$@)' bs=4096 count=0 seek=$$(( ($$(wc -c < '$(call SHESCAPE,$@)') + 4095) / 4096 )) + dd if=/dev/zero of='$(call SHESCAPE,$@)' bs=4096 count=0 seek=$$(( ($$(wc -c < '$(call SHESCAPE,$@)') + 4095) / 4096 )) 2>/dev/null $(call MKESCAPE,$(BUILDDIR))/linker_nomap.ld: linker_uefi_riscv64.ld.in $(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))' @@ -494,7 +512,7 @@ $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' $(LD_FOR_TARGET) \ -T'$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' \ - '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -o '$(call SHESCAPE,$@)' + $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -o '$(call SHESCAPE,$@)' $(call MKESCAPE,$(BUILDDIR))/linker.ld: linker_uefi_riscv64.ld.in $(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))' @@ -504,7 +522,7 @@ $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker.ld' $(LD_FOR_TARGET) \ -T'$(call SHESCAPE,$(BUILDDIR))/linker.ld' \ - '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -o '$(call SHESCAPE,$@)' + $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -o '$(call SHESCAPE,$@)' endif ifeq ($(TARGET),uefi-loongarch64) @@ -518,7 +536,7 @@ $(call MKESCAPE,$(BUILDDIR))/BOOTLOONGARCH64.EFI: $(call MKESCAPE,$(BUILDDIR))/limine.elf $(OBJCOPY_FOR_TARGET) -O binary '$(call SHESCAPE,$<)' '$(call SHESCAPE,$@)' chmod -x '$(call SHESCAPE,$@)' - dd if=/dev/zero of='$(call SHESCAPE,$@)' bs=4096 count=0 seek=$$(( ($$(wc -c < '$(call SHESCAPE,$@)') + 4095) / 4096 )) + dd if=/dev/zero of='$(call SHESCAPE,$@)' bs=4096 count=0 seek=$$(( ($$(wc -c < '$(call SHESCAPE,$@)') + 4095) / 4096 )) 2>/dev/null $(call MKESCAPE,$(BUILDDIR))/linker_nomap.ld: linker_uefi_loongarch64.ld.in $(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))' @@ -528,7 +546,7 @@ $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' $(LD_FOR_TARGET) \ -T'$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' \ - '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -o '$(call SHESCAPE,$@)' + $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -o '$(call SHESCAPE,$@)' $(call MKESCAPE,$(BUILDDIR))/linker.ld: linker_uefi_loongarch64.ld.in $(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))' @@ -538,7 +556,7 @@ $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker.ld' $(LD_FOR_TARGET) \ -T'$(call SHESCAPE,$(BUILDDIR))/linker.ld' \ - '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -o '$(call SHESCAPE,$@)' + $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -o '$(call SHESCAPE,$@)' endif ifeq ($(TARGET),uefi-ia32) @@ -552,7 +570,7 @@ $(call MKESCAPE,$(BUILDDIR))/BOOTIA32.EFI: $(call MKESCAPE,$(BUILDDIR))/limine.elf $(OBJCOPY_FOR_TARGET) -O binary '$(call SHESCAPE,$<)' '$(call SHESCAPE,$@)' chmod -x '$(call SHESCAPE,$@)' - dd if=/dev/zero of='$(call SHESCAPE,$@)' bs=4096 count=0 seek=$$(( ($$(wc -c < '$(call SHESCAPE,$@)') + 4095) / 4096 )) + dd if=/dev/zero of='$(call SHESCAPE,$@)' bs=4096 count=0 seek=$$(( ($$(wc -c < '$(call SHESCAPE,$@)') + 4095) / 4096 )) 2>/dev/null $(call MKESCAPE,$(BUILDDIR))/linker_nomap.ld: linker_uefi_ia32.ld.in $(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))' @@ -562,7 +580,7 @@ $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' $(LD_FOR_TARGET) \ -T'$(call SHESCAPE,$(BUILDDIR))/linker_nomap.ld' \ - '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -o '$(call SHESCAPE,$@)' + $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -o '$(call SHESCAPE,$@)' $(call MKESCAPE,$(BUILDDIR))/linker.ld: linker_uefi_ia32.ld.in $(MKDIR_P) '$(call SHESCAPE,$(BUILDDIR))' @@ -572,7 +590,7 @@ $(MAKE) -f common.mk '$(call SHESCAPE,$(BUILDDIR))/linker.ld' $(LD_FOR_TARGET) \ -T'$(call SHESCAPE,$(BUILDDIR))/linker.ld' \ - '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -o '$(call SHESCAPE,$@)' + $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -o '$(call SHESCAPE,$@)' endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/common/drivers/disk.s2.c new/limine-9.6.1/common/drivers/disk.s2.c --- old/limine-9.5.3/common/drivers/disk.s2.c 2025-08-04 17:34:14.000000000 +0200 +++ new/limine-9.6.1/common/drivers/disk.s2.c 2025-08-16 12:55:38.000000000 +0200 @@ -408,6 +408,32 @@ return NULL; } +static bool validate_efi_handle(EFI_HANDLE efi_handle) { + EFI_STATUS status; + + EFI_GUID dp_guid = EFI_DEVICE_PATH_PROTOCOL_GUID; + EFI_DEVICE_PATH_PROTOCOL *dp = NULL; + + status = gBS->HandleProtocol(efi_handle, &dp_guid, (void **)&dp); + if (status) { + return false; + } + + for (;; dp = (void *)dp + *(uint16_t *)dp->Length) { + if (dp->Type == END_DEVICE_PATH_TYPE && dp->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE) { + break; + } + + if (dp->Type != HARDWARE_DEVICE_PATH || dp->SubType != HW_PCI_DP) { + continue; + } + + return true; + } + + return false; +} + struct volume *disk_volume_from_efi_handle(EFI_HANDLE efi_handle) { struct volume *ret; @@ -416,13 +442,15 @@ EFI_GUID block_io_guid = BLOCK_IO_PROTOCOL; EFI_BLOCK_IO *block_io = NULL; + if (!validate_efi_handle(efi_handle)) { + return NULL; + } + status = gBS->HandleProtocol(efi_handle, &block_io_guid, (void **)&block_io); if (status) { return pxe_from_efi_handle(efi_handle); } - block_io->Media->WriteCaching = false; - uint64_t bdev_size = ((uint64_t)block_io->Media->LastBlock + 1) * (uint64_t)block_io->Media->BlockSize; if (bdev_size < UNIQUE_SECTOR_POOL_SIZE) { goto fallback; @@ -460,6 +488,9 @@ *(uint64_t *)unique_sector_pool = signature; status = block_io->WriteBlocks(block_io, block_io->Media->MediaId, 0, 4096, unique_sector_pool); if (status) { + // Attempt to restore anyways, just in case. + *(uint64_t *)unique_sector_pool = orig; + block_io->WriteBlocks(block_io, block_io->Media->MediaId, 0, 4096, unique_sector_pool); return NULL; } @@ -621,6 +652,10 @@ for (size_t i = 0; i < handle_count; i++) { EFI_BLOCK_IO *drive = NULL; + if (!validate_efi_handle(handles[i])) { + continue; + } + status = gBS->HandleProtocol(handles[i], &block_io_guid, (void **)&drive); if (status != 0 || drive == NULL || drive->Media->LastBlock == 0) @@ -638,6 +673,8 @@ status = drive->WriteBlocks(drive, drive->Media->MediaId, 0, 4096, unique_sector_pool); + drive->Media->WriteCaching = true; + struct volume *block = ext_mem_alloc(sizeof(struct volume)); if ((status || drive->Media->ReadOnly) && drive->Media->BlockSize == 2048) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/common/linker_uefi_riscv64.ld.in new/limine-9.6.1/common/linker_uefi_riscv64.ld.in --- old/limine-9.5.3/common/linker_uefi_riscv64.ld.in 2025-08-04 17:34:14.000000000 +0200 +++ new/limine-9.6.1/common/linker_uefi_riscv64.ld.in 2025-08-16 12:55:38.000000000 +0200 @@ -39,6 +39,8 @@ __data_start = ABSOLUTE(.); *(.rodata .rodata.*) + *(.srodata .srodata.*) + *(.sdata2 .sdata2.*) #ifdef LINKER_NOMAP full_map = .; @@ -54,8 +56,8 @@ } :data .bss : { - *(.sbss .sbss.*) *(.bss .bss.*) + *(.sbss .sbss.*) *(COMMON) data_end = .; } :data diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/common/protos/chainload.c new/limine-9.6.1/common/protos/chainload.c --- old/limine-9.5.3/common/protos/chainload.c 2025-08-04 17:34:14.000000000 +0200 +++ new/limine-9.6.1/common/protos/chainload.c 2025-08-16 12:55:38.000000000 +0200 @@ -195,71 +195,56 @@ #elif defined (UEFI) -/* -static void devpath_print(EFI_DEVICE_PATH_PROTOCOL *DevicePath) { - for (;;) { - uint8_t type = DevicePath->Type; - uint8_t subtype = DevicePath->SubType; - size_t length = *(uint16_t *)DevicePath->Length; - - print("Device Path Type: %x, SubType: %x, Length: %x\n", type, subtype, length); - - if (type == 4 && subtype == 4) { - for (size_t i = sizeof(EFI_DEVICE_PATH_PROTOCOL); i < length; i += 2) { - print("%c", *(uint16_t *)((void *)DevicePath + i)); - } - print("\n"); - } +static EFI_DEVICE_PATH_PROTOCOL *build_relative_efi_file_path(struct file_handle *image) { + // The file path stored in EFI_LOADED_IMAGE_PROTOCOL::FilePath is + // expected to be relative to the EFI_LOADED_IMAGE_PROTOCOL::DeviceHandle. + // For this reason the EFI_DEVICE_PATH_PROTOCOL of the efi_part_handle + // is not used as a prefix. This likely also means that the returned + // path cannot be given to gBS->LoadImage() directly. - DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)((uint8_t *)DevicePath + *(uint16_t *)DevicePath->Length); + size_t original_path_chars = strlen(image->path); - if (type == END_DEVICE_PATH_TYPE) { - break; - } - } -} -*/ + size_t efi_file_path_alloc_len = (original_path_chars + 1) * sizeof(CHAR16); + CHAR16 *efi_file_path = ext_mem_alloc(efi_file_path_alloc_len); -static size_t get_devpath_len(EFI_DEVICE_PATH_PROTOCOL *devpath) { - size_t len = 0; - EFI_DEVICE_PATH_PROTOCOL *header = devpath; - for (;;) { - size_t this_len = *(uint16_t *)header->Length; - len += this_len; - if (header->Type == END_DEVICE_PATH_TYPE) { - break; + bool leading_slash = true; + size_t j = 0; + for (size_t i = 0; i < original_path_chars; i++) { + if (image->path[i] == '/' && leading_slash) { + continue; } - header = (void *)header + this_len; + leading_slash = false; + efi_file_path[j++] = image->path[i] == '/' ? '\\' : image->path[i]; } - return len; -} + efi_file_path[j] = 0; -static EFI_DEVICE_PATH_PROTOCOL *devpath_append(EFI_DEVICE_PATH_PROTOCOL *devpath, - EFI_DEVICE_PATH_PROTOCOL *item) { - EFI_STATUS status; - size_t devpath_len = get_devpath_len(devpath); - size_t item_size = *(uint16_t *)item->Length; - size_t new_devpath_len = devpath_len + item_size; + size_t efi_file_path_len = ((j + 1) * sizeof(CHAR16)); + size_t path_item_len = sizeof(EFI_DEVICE_PATH_PROTOCOL) + efi_file_path_len; + size_t end_item_len = sizeof(EFI_DEVICE_PATH_PROTOCOL); + size_t alloc_len = path_item_len + end_item_len; - EFI_DEVICE_PATH_PROTOCOL *new_devpath = NULL; - status = gBS->AllocatePool(EfiLoaderData, new_devpath_len, (void **)&new_devpath); + EFI_DEVICE_PATH_PROTOCOL *device_path; + EFI_STATUS status = gBS->AllocatePool(EfiLoaderData, alloc_len, (void **)&device_path); if (status) { panic(true, "efi: AllocatePool() failure (%x)", status); } - memcpy(new_devpath, devpath, devpath_len); - - EFI_DEVICE_PATH_PROTOCOL *item_ptr = (void *)new_devpath + (devpath_len - sizeof(EFI_DEVICE_PATH_PROTOCOL)); - memcpy(item_ptr, item, item_size); + FILEPATH_DEVICE_PATH *path_item = (FILEPATH_DEVICE_PATH *)device_path; + path_item->Header.Type = MEDIA_DEVICE_PATH; + path_item->Header.SubType = MEDIA_FILEPATH_DP; + path_item->Header.Length[0] = path_item_len; + path_item->Header.Length[1] = path_item_len >> 8; + memcpy(&path_item->PathName, efi_file_path, efi_file_path_len); + + EFI_DEVICE_PATH_PROTOCOL *end_item = (void *)device_path + path_item_len; + end_item->Type = END_DEVICE_PATH_TYPE; + end_item->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; + end_item->Length[0] = end_item_len; + end_item->Length[1] = end_item_len >> 8; - EFI_DEVICE_PATH_PROTOCOL *end_ptr = (void *)new_devpath + (new_devpath_len - sizeof(EFI_DEVICE_PATH_PROTOCOL)); - end_ptr->Type = END_DEVICE_PATH_TYPE; - end_ptr->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; - end_ptr->Length[0] = sizeof(EFI_DEVICE_PATH); - end_ptr->Length[1] = sizeof(EFI_DEVICE_PATH) >> 8; - - return new_devpath; + pmm_free(efi_file_path, efi_file_path_alloc_len); + return device_path; } noreturn void chainload(char *config, char *cmdline) { @@ -286,46 +271,9 @@ (uintptr_t)ptr, ALIGN_UP(image_size, 4096), MEMMAP_RESERVED, MEMMAP_USABLE, true, false, true); - size_t path_len = strlen(image->path); - - size_t efi_file_path_len = (path_len + 1) * sizeof(CHAR16); - CHAR16 *efi_file_path = ext_mem_alloc(efi_file_path_len); - - bool leading_slash = true; - size_t j = 0; - for (size_t i = 0; i < path_len; i++) { - if (image->path[i] == '/' && leading_slash) { - continue; - } - leading_slash = false; - efi_file_path[j++] = image->path[i] == '/' ? '\\' : image->path[i]; - } - efi_file_path[j] = 0; - - EFI_GUID device_path_protocol_guid = EFI_DEVICE_PATH_PROTOCOL_GUID; - EFI_DEVICE_PATH_PROTOCOL *device_path = NULL; - status = gBS->HandleProtocol(image->efi_part_handle, &device_path_protocol_guid, (void **)&device_path); - if (status) { - panic(true, "efi: HandleProtocol() failure (%x)", status); - } + EFI_DEVICE_PATH_PROTOCOL *efi_file_path = build_relative_efi_file_path(image); fclose(image); - - size_t devpath_item_size = sizeof(EFI_DEVICE_PATH_PROTOCOL) + ((j + 1) * sizeof(CHAR16)); - EFI_DEVICE_PATH_PROTOCOL *devpath_item = ext_mem_alloc(devpath_item_size); - - devpath_item->Type = 0x04; - devpath_item->SubType = 0x04; - devpath_item->Length[0] = devpath_item_size; - devpath_item->Length[1] = devpath_item_size >> 8; - - memcpy(&devpath_item[1], efi_file_path, (j + 1) * sizeof(CHAR16)); - pmm_free(efi_file_path, efi_file_path_len); - - device_path = devpath_append(device_path, devpath_item); - - pmm_free(devpath_item, devpath_item_size); - term_notready(); size_t req_width = 0, req_height = 0, req_bpp = 0; @@ -388,7 +336,7 @@ new_handle_loaded_image->DeviceHandle = efi_part_handle; } - new_handle_loaded_image->FilePath = device_path; + new_handle_loaded_image->FilePath = efi_file_path; new_handle_loaded_image->LoadOptionsSize = cmdline_len * sizeof(CHAR16); new_handle_loaded_image->LoadOptions = new_cmdline; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/common/sys/smp_trampoline.asm_x86 new/limine-9.6.1/common/sys/smp_trampoline.asm_x86 --- old/limine-9.5.3/common/sys/smp_trampoline.asm_x86 2025-08-04 17:34:14.000000000 +0200 +++ new/limine-9.6.1/common/sys/smp_trampoline.asm_x86 2025-08-16 12:55:38.000000000 +0200 @@ -164,7 +164,7 @@ mov rax, qword [rdi + 16] test rax, rax jnz .out - lea rax, qword [rdi + 16] + lea rax, [rdi + 16] xor ecx, ecx xor edx, edx monitor diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/configure.ac new/limine-9.6.1/configure.ac --- old/limine-9.5.3/configure.ac 2025-08-04 17:34:14.000000000 +0200 +++ new/limine-9.6.1/configure.ac 2025-08-16 12:55:38.000000000 +0200 @@ -78,49 +78,86 @@ AC_MSG_ERROR([find not found, please install find before configuring]) fi -# $1 - UPPERCASEVAR, $2 - default program -AC_DEFUN([GET_PROG_FROM_TOOLCHAIN], [ - AC_ARG_VAR([$1], [$2 command @<:@default: $2@:>@]) +# $1 - UPPERCASEVAR, $2 - default program, $2 - 'tool' if toolchain +AC_DEFUN([GET_PROG], [ + first_elem="$(rel2abs $(echo "$$1" | cut -f 1 -d " "))" - if ! test -z "$$1"; then - first_elem="$(echo "$$1" | cut -f 1 -d " ")" + if test "x${$1+set}" = "xset"; then case "$first_elem" in - */*) + /*) + AC_MSG_CHECKING([for $first_elem]) if test -f "$first_elem" && test -x "$first_elem"; then - $1_USER_FOUND=yes + $1="$(rel2abs "$$1")" + $1_FOUND=yes + else + $1_FOUND=no fi + AC_MSG_RESULT([$$1_FOUND]) ;; *) - AC_CHECK_PROG([$1_USER_FOUND], [$$1], [yes]) + AC_CHECK_PROG([$1_FOUND], [$$1], [yes]) ;; esac - - if ! test "x$$1_USER_FOUND" = "xyes"; then - AC_MSG_ERROR([$2 not found, please install $2 before configuring]) - fi else - AC_CHECK_TOOL([$1], [$2], [:]) - if test "x$$1" = "x:"; then - AC_MSG_ERROR([$2 not found, please install $2 or set $1 to a valid command]) + if ! test -z "$2"; then + if test "x$3" = "xtool"; then + AC_CHECK_TOOL([$1_FOUND], [$2], [no]) + if ! test "x$$1_FOUND" = "xno"; then + $1="$$1_FOUND" + $1_FOUND=yes + fi + else + AC_CHECK_PROG([$1_FOUND], [$2], [yes]) + fi + else + $1_FOUND=no fi fi - $1="$(rel2abs "$$1")" + if ! test "x$$1_FOUND" = "xyes"; then + AC_MSG_ERROR([$first_elem invalid, set $1 to a valid program]) + fi ]) -GET_PROG_FROM_TOOLCHAIN([STRIP], [strip]) +AC_ARG_VAR([STRIP], [strip command @<:@default: strip@:>@]) +GET_PROG([STRIP], [strip], [tool]) -AC_CHECK_HEADERS([stdint.h stddef.h stdbool.h limits.h inttypes.h stdio.h stdlib.h string.h], +AC_CHECK_HEADERS([stdio.h stdlib.h stdint.h stddef.h stdbool.h stdarg.h string.h errno.h inttypes.h limits.h time.h], [], [AC_MSG_ERROR([required header not found])]) -AC_ARG_VAR([TOOLCHAIN_FOR_TARGET], [alternative toolchain prefix for Limine (or 'llvm', or 'gnu')]) +AC_ARG_VAR([TOOLCHAIN_FOR_TARGET], [alternative toolchain prefix for Limine]) + AC_ARG_VAR([CC_FOR_TARGET], [C compiler command for Limine]) +if test "x${CC_FOR_TARGET+set}" = "x"; then + if test "x${TOOLCHAIN_FOR_TARGET+set}" = "x"; then + CC_FOR_TARGET="clang" + else + CC_FOR_TARGET="${TOOLCHAIN_FOR_TARGET}gcc" + fi +fi AC_ARG_VAR([LD_FOR_TARGET], [linker command for Limine]) +if test "x${LD_FOR_TARGET+set}" = "x"; then + if test "x${TOOLCHAIN_FOR_TARGET+set}" = "x"; then + LD_FOR_TARGET="ld.lld" + else + LD_FOR_TARGET="${TOOLCHAIN_FOR_TARGET}ld" + fi +fi + +test "x${TOOLCHAIN_FOR_TARGET+set}" = "x" && TOOLCHAIN_FOR_TARGET=llvm- + AC_ARG_VAR([OBJCOPY_FOR_TARGET], [objcopy command for Limine]) +test "x${OBJCOPY_FOR_TARGET+set}" = "x" && OBJCOPY_FOR_TARGET="${TOOLCHAIN_FOR_TARGET}objcopy" AC_ARG_VAR([OBJDUMP_FOR_TARGET], [objdump command for Limine]) +test "x${OBJDUMP_FOR_TARGET+set}" = "x" && OBJDUMP_FOR_TARGET="${TOOLCHAIN_FOR_TARGET}objdump" AC_ARG_VAR([READELF_FOR_TARGET], [readelf command for Limine]) +test "x${READELF_FOR_TARGET+set}" = "x" && READELF_FOR_TARGET="${TOOLCHAIN_FOR_TARGET}readelf" -rm -rf toolchain-files +GET_PROG([CC_FOR_TARGET]) +GET_PROG([LD_FOR_TARGET]) +GET_PROG([OBJCOPY_FOR_TARGET]) +GET_PROG([OBJDUMP_FOR_TARGET]) +GET_PROG([READELF_FOR_TARGET]) BUILD_ALL="no" @@ -162,22 +199,6 @@ if test "x$BUILD_BIOS" = "xno"; then BUILD_BIOS="" else - $MKDIR_P toolchain-files - CC="$CC" \ - ARCHITECTURE=i686 \ - FREESTANDING_TOOLCHAIN_SUFFIX="_FOR_TARGET" \ - FREESTANDING_TOOLCHAIN="$TOOLCHAIN_FOR_TARGET" \ - WANT_FREESTANDING_CC=yes \ - FREESTANDING_CC="$CC_FOR_TARGET" \ - WANT_FREESTANDING_LD=yes \ - FREESTANDING_LD="$LD_FOR_TARGET" \ - WANT_FREESTANDING_OBJCOPY=yes \ - FREESTANDING_OBJCOPY="$OBJCOPY_FOR_TARGET" \ - WANT_FREESTANDING_OBJDUMP=yes \ - FREESTANDING_OBJDUMP="$OBJDUMP_FOR_TARGET" \ - WANT_FREESTANDING_READELF=yes \ - FREESTANDING_READELF="$READELF_FOR_TARGET" \ - "$SRCDIR/build-aux/freestanding-toolchain/freestanding-toolchain" 2>"toolchain-files/bios-i686-toolchain.mk" || exit 1 BUILD_BIOS="limine-bios" NEED_NASM=yes NEED_GZIP=yes @@ -194,20 +215,6 @@ if test "x$BUILD_UEFI_IA32" = "xno"; then BUILD_UEFI_IA32="" else - $MKDIR_P toolchain-files - CC="$CC" \ - ARCHITECTURE=i686 \ - FREESTANDING_TOOLCHAIN_SUFFIX="_FOR_TARGET" \ - FREESTANDING_TOOLCHAIN="$TOOLCHAIN_FOR_TARGET" \ - WANT_FREESTANDING_CC=yes \ - FREESTANDING_CC="$CC_FOR_TARGET" \ - WANT_FREESTANDING_LD=yes \ - FREESTANDING_LD="$LD_FOR_TARGET" \ - WANT_FREESTANDING_OBJCOPY=yes \ - FREESTANDING_OBJCOPY="$OBJCOPY_FOR_TARGET" \ - WANT_FREESTANDING_OBJDUMP=yes \ - FREESTANDING_OBJDUMP="$OBJDUMP_FOR_TARGET" \ - "$SRCDIR/build-aux/freestanding-toolchain/freestanding-toolchain" 2>"toolchain-files/uefi-i686-toolchain.mk" || exit 1 BUILD_UEFI_IA32="limine-uefi-ia32" NEED_NASM=yes fi @@ -223,20 +230,6 @@ if test "x$BUILD_UEFI_X86_64" = "xno"; then BUILD_UEFI_X86_64="" else - $MKDIR_P toolchain-files - CC="$CC" \ - ARCHITECTURE=x86_64 \ - FREESTANDING_TOOLCHAIN_SUFFIX="_FOR_TARGET" \ - FREESTANDING_TOOLCHAIN="$TOOLCHAIN_FOR_TARGET" \ - WANT_FREESTANDING_CC=yes \ - FREESTANDING_CC="$CC_FOR_TARGET" \ - WANT_FREESTANDING_LD=yes \ - FREESTANDING_LD="$LD_FOR_TARGET" \ - WANT_FREESTANDING_OBJCOPY=yes \ - FREESTANDING_OBJCOPY="$OBJCOPY_FOR_TARGET" \ - WANT_FREESTANDING_OBJDUMP=yes \ - FREESTANDING_OBJDUMP="$OBJDUMP_FOR_TARGET" \ - "$SRCDIR/build-aux/freestanding-toolchain/freestanding-toolchain" 2>"toolchain-files/uefi-x86_64-toolchain.mk" || exit 1 BUILD_UEFI_X86_64="limine-uefi-x86-64" NEED_NASM=yes fi @@ -252,20 +245,6 @@ if test "x$BUILD_UEFI_AARCH64" = "xno"; then BUILD_UEFI_AARCH64="" else - mkdir -p toolchain-files - CC="$CC" \ - ARCHITECTURE=aarch64 \ - FREESTANDING_TOOLCHAIN_SUFFIX="_FOR_TARGET" \ - FREESTANDING_TOOLCHAIN="$TOOLCHAIN_FOR_TARGET" \ - WANT_FREESTANDING_CC=yes \ - FREESTANDING_CC="$CC_FOR_TARGET" \ - WANT_FREESTANDING_LD=yes \ - FREESTANDING_LD="$LD_FOR_TARGET" \ - WANT_FREESTANDING_OBJCOPY=yes \ - FREESTANDING_OBJCOPY="$OBJCOPY_FOR_TARGET" \ - WANT_FREESTANDING_OBJDUMP=yes \ - FREESTANDING_OBJDUMP="$OBJDUMP_FOR_TARGET" \ - "$SRCDIR/build-aux/freestanding-toolchain/freestanding-toolchain" 2>"toolchain-files/uefi-aarch64-toolchain.mk" || exit 1 BUILD_UEFI_AARCH64="limine-uefi-aarch64" fi @@ -280,20 +259,6 @@ if test "x$BUILD_UEFI_RISCV64" = "xno"; then BUILD_UEFI_RISCV64="" else - mkdir -p toolchain-files - CC="$CC" \ - ARCHITECTURE=riscv64 \ - FREESTANDING_TOOLCHAIN_SUFFIX="_FOR_TARGET" \ - FREESTANDING_TOOLCHAIN="$TOOLCHAIN_FOR_TARGET" \ - WANT_FREESTANDING_CC=yes \ - FREESTANDING_CC="$CC_FOR_TARGET" \ - WANT_FREESTANDING_LD=yes \ - FREESTANDING_LD="$LD_FOR_TARGET" \ - WANT_FREESTANDING_OBJCOPY=yes \ - FREESTANDING_OBJCOPY="$OBJCOPY_FOR_TARGET" \ - WANT_FREESTANDING_OBJDUMP=yes \ - FREESTANDING_OBJDUMP="$OBJDUMP_FOR_TARGET" \ - "$SRCDIR/build-aux/freestanding-toolchain/freestanding-toolchain" 2>"toolchain-files/uefi-riscv64-toolchain.mk" || exit 1 BUILD_UEFI_RISCV64="limine-uefi-riscv64" fi @@ -308,20 +273,6 @@ if test "x$BUILD_UEFI_LOONGARCH64" = "xno"; then BUILD_UEFI_LOONGARCH64="" else - mkdir -p toolchain-files - CC="$CC" \ - ARCHITECTURE=loongarch64 \ - FREESTANDING_TOOLCHAIN_SUFFIX="_FOR_TARGET" \ - FREESTANDING_TOOLCHAIN="$TOOLCHAIN_FOR_TARGET" \ - WANT_FREESTANDING_CC=yes \ - FREESTANDING_CC="$CC_FOR_TARGET" \ - WANT_FREESTANDING_LD=yes \ - FREESTANDING_LD="$LD_FOR_TARGET" \ - WANT_FREESTANDING_OBJCOPY=yes \ - FREESTANDING_OBJCOPY="$OBJCOPY_FOR_TARGET" \ - WANT_FREESTANDING_OBJDUMP=yes \ - FREESTANDING_OBJDUMP="$OBJDUMP_FOR_TARGET" \ - "$SRCDIR/build-aux/freestanding-toolchain/freestanding-toolchain" 2>"toolchain-files/uefi-loongarch64-toolchain.mk" || exit 1 BUILD_UEFI_LOONGARCH64="limine-uefi-loongarch64" fi diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/decompressor/decompressor.mk new/limine-9.6.1/decompressor/decompressor.mk --- old/limine-9.5.3/decompressor/decompressor.mk 2025-08-04 17:34:14.000000000 +0200 +++ new/limine-9.6.1/decompressor/decompressor.mk 2025-08-16 12:55:38.000000000 +0200 @@ -1,13 +1,18 @@ .SUFFIXES: -include $(TOOLCHAIN_FILE) - override SPACE := $(subst ,, ) override MKESCAPE = $(subst $(SPACE),\ ,$(1)) override SHESCAPE = $(subst ','\'',$(1)) override OBJESCAPE = $(subst .a ,.a' ',$(subst .o ,.o' ',$(call SHESCAPE,$(1)))) +override CC_FOR_TARGET_IS_CLANG := $(shell ! $(CC_FOR_TARGET) --version 2>/dev/null | $(GREP) -q '^Target: '; echo $$?) + +ifeq ($(CC_FOR_TARGET_IS_CLANG),1) + override CC_FOR_TARGET += \ + -target i686-unknown-none-elf +endif + override CFLAGS_FOR_TARGET += \ -Os \ -Wall \ @@ -29,10 +34,8 @@ -m32 \ -march=i686 \ -mabi=sysv \ - -mno-80387 - -override CFLAGS_FOR_TARGET := \ - $(patsubst -g,-gdwarf,$(CFLAGS_FOR_TARGET)) + -mno-80387 \ + -mno-mmx override CPPFLAGS_FOR_TARGET := \ -I . \ @@ -67,7 +70,7 @@ all: $(call MKESCAPE,$(BUILDDIR))/decompressor.bin $(call MKESCAPE,$(BUILDDIR))/decompressor.bin: $(OBJ) - $(LD_FOR_TARGET) '$(call OBJESCAPE,$^)' $(LDFLAGS_FOR_TARGET) -o '$(call SHESCAPE,$(BUILDDIR))/decompressor.elf' + $(LD_FOR_TARGET) $(LDFLAGS_FOR_TARGET) '$(call OBJESCAPE,$^)' -o '$(call SHESCAPE,$(BUILDDIR))/decompressor.elf' $(OBJCOPY_FOR_TARGET) -O binary '$(call SHESCAPE,$(BUILDDIR))/decompressor.elf' '$(call SHESCAPE,$@)' -include $(HEADER_DEPS) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/host/host.mk new/limine-9.6.1/host/host.mk --- old/limine-9.5.3/host/host.mk 2025-08-04 17:34:14.000000000 +0200 +++ new/limine-9.6.1/host/host.mk 2025-08-16 12:55:38.000000000 +0200 @@ -1,3 +1,5 @@ +.POSIX: + SHELL=/bin/sh CC=cc @@ -6,8 +8,6 @@ LDFLAGS= LIBS= -WERROR_FLAG= - STRIP=strip INSTALL=./install-sh @@ -43,4 +43,4 @@ rm -f limine limine.exe limine: limine.c - $(CC) $(CFLAGS) -Wall -Wextra $(WERROR_FLAG) $(CPPFLAGS) $(LDFLAGS) -std=c99 limine.c $(LIBS) -o $@ + $(CC) $(CFLAGS) -std=c99 $(CPPFLAGS) $(LDFLAGS) $< $(LIBS) -o $@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/host/limine.c new/limine-9.6.1/host/limine.c --- old/limine-9.5.3/host/limine.c 2025-08-04 17:34:14.000000000 +0200 +++ new/limine-9.6.1/host/limine.c 2025-08-16 12:55:38.000000000 +0200 @@ -1088,6 +1088,11 @@ goto cleanup; } + if (((ENDSWAP(gpt_entry.ending_lba) - ENDSWAP(gpt_entry.starting_lba)) + 1) * lb_size < 32768) { + fprintf(stderr, "%s: error: Partition with index `%s` is smaller than 32KiB.\n", program_name, part_ndx); + goto cleanup; + } + if (!quiet) { fprintf(stderr, "GPT partition specified. Installing there instead of embedding.\n"); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/nyu-efi/riscv64/link_script.lds new/limine-9.6.1/nyu-efi/riscv64/link_script.lds --- old/limine-9.5.3/nyu-efi/riscv64/link_script.lds 2025-08-04 17:34:19.000000000 +0200 +++ new/limine-9.6.1/nyu-efi/riscv64/link_script.lds 2025-08-16 12:55:41.000000000 +0200 @@ -64,6 +64,8 @@ __data_start = ABSOLUTE(.); *(.rodata .rodata.*) + *(.srodata .srodata.*) + *(.sdata2 .sdata2.*) } :rodata .data : { @@ -72,8 +74,8 @@ } :data .bss : { - *(.sbss .sbss.*) *(.bss .bss.*) + *(.sbss .sbss.*) *(COMMON) } :data diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/timestamps new/limine-9.6.1/timestamps --- old/limine-9.5.3/timestamps 2025-08-04 17:34:22.000000000 +0200 +++ new/limine-9.6.1/timestamps 2025-08-16 12:55:42.000000000 +0200 @@ -1,3 +1,3 @@ REGEN_DATE="August 2025" -SOURCE_DATE_EPOCH="1754321320" -SOURCE_DATE_EPOCH_TOUCH="202508041728" +SOURCE_DATE_EPOCH="1755341393" +SOURCE_DATE_EPOCH_TOUCH="202508161249" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/limine-9.5.3/version new/limine-9.6.1/version --- old/limine-9.5.3/version 2025-08-04 17:34:24.000000000 +0200 +++ new/limine-9.6.1/version 2025-08-16 12:55:45.000000000 +0200 @@ -1 +1 @@ -9.5.3 +9.6.1