diff --git a/.github/workflows/loongarch64-edk2.yml b/.github/workflows/loongarch64-edk2.yml new file mode 100644 index 0000000..589c4f8 --- /dev/null +++ b/.github/workflows/loongarch64-edk2.yml @@ -0,0 +1,101 @@ +name: LoongArch64 EDK2 Build + +on: + push: + pull_request: + workflow_dispatch: + +permissions: + contents: read + +jobs: + build-loongarch64-edk2: + runs-on: ubuntu-latest + env: + EDK2BASE: ${{ github.workspace }}/edk2 + ARCH: loongarch64 + EDK2_TARGET: RELEASE + EDK2_TOOLCHAIN: GCC5 + + steps: + - name: Checkout rEFInd + uses: actions/checkout@v4 + + - name: Checkout EDK2 stable202602 + uses: actions/checkout@v4 + with: + repository: tianocore/edk2 + ref: edk2-stable202602 + path: edk2 + submodules: recursive + + - name: Install build dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + build-essential \ + gettext \ + iasl \ + mtools \ + nasm \ + python3 \ + python3-pip \ + uuid-dev \ + zip + pip3 install -r edk2/pip-requirements.txt + + - name: Download LoongArch64 cross-toolchain + run: | + curl -L --fail \ + -o /tmp/x86_64-cross-tools-loongarch64-unknown-linux-gnu-latest.tar.xz \ + https://github.com/loong64/cross-tools/releases/latest/download/x86_64-cross-tools-loongarch64-unknown-linux-gnu-latest.tar.xz + mkdir -p "$RUNNER_TEMP/x-tools" + tar -xf /tmp/x86_64-cross-tools-loongarch64-unknown-linux-gnu-latest.tar.xz -C "$RUNNER_TEMP/x-tools" + echo "LOONGARCH64_TOOLCHAIN_BIN=$RUNNER_TEMP/x-tools/loongarch64-unknown-linux-gnu/bin" >> "$GITHUB_ENV" + echo "GCC5_LOONGARCH64_PREFIX=$RUNNER_TEMP/x-tools/loongarch64-unknown-linux-gnu/bin/loongarch64-unknown-linux-gnu-" >> "$GITHUB_ENV" + + - name: Prepare EDK2 BaseTools + run: | + make -C edk2/BaseTools -j"$(nproc)" + + - name: Build rEFInd for LoongArch64 (EDK2) + run: | + export PATH="$LOONGARCH64_TOOLCHAIN_BIN:$PATH" + make EDK2BASE="$EDK2BASE" \ + ARCH="$ARCH" \ + EDK2_TARGET="$EDK2_TARGET" \ + EDK2_TOOLCHAIN="$EDK2_TOOLCHAIN" \ + edk2 fs_edk2 + + - name: Package LoongArch64 zip (official layout style) + run: | + set -euo pipefail + version="$(sed -n 's/^#define REFIND_VERSION L"\(.*\)"/\1/p' include/version.h)" + [ -n "$version" ] || { echo "Failed to parse version from include/version.h"; exit 1; } + echo "$version" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$' || { echo "Unexpected version format in include/version.h: $version"; exit 1; } + package_root="refind-bin-$version" + package_dir="$RUNNER_TEMP/$package_root" + zip_path="$GITHUB_WORKSPACE/$package_root.zip" + rm -rf "$package_dir" "$zip_path" + mkdir -p "$package_dir/refind/drivers_loongarch64" "$package_dir/refind/tools_loongarch64" + ls drivers_loongarch64/*_loongarch64.efi >/dev/null 2>&1 || { echo "No LoongArch64 driver EFI files found in drivers_loongarch64/"; exit 1; } + cp --preserve=timestamps drivers_loongarch64/*_loongarch64.efi "$package_dir/refind/drivers_loongarch64/" + cp --preserve=timestamps filesystems/LICENSE*.txt "$package_dir/refind/drivers_loongarch64/" + cp --preserve=timestamps refind/refind_loongarch64.efi "$package_dir/refind/" + cp --preserve=timestamps refind.conf-sample "$package_dir/refind/" + cp -a icons "$package_dir/refind/" + cp -a docs keys banners fonts "$package_dir/" + cp --preserve=timestamps COPYING.txt LICENSE.txt README.txt CREDITS.txt NEWS.txt "$package_dir/" + cp --preserve=timestamps refind-install refind-mkdefault refind-sb-healthcheck mkrlconf mvrefind mountesp "$package_dir/" + ( + cd "$RUNNER_TEMP" + zip -9r "$zip_path" "$package_root" + ) + echo "ZIP_PATH=$zip_path" >> "$GITHUB_ENV" + + - name: Upload LoongArch64 zip artifact + uses: actions/upload-artifact@v4 + with: + name: refind-loongarch64-binzip + if-no-files-found: error + path: ${{ env.ZIP_PATH }} diff --git a/EfiLib/DevicePath.c b/EfiLib/DevicePath.c index 023ea3f..8e4b70f 100644 --- a/EfiLib/DevicePath.c +++ b/EfiLib/DevicePath.c @@ -65,11 +65,11 @@ MyCatPrint ( ASSERT (Str->Str != NULL); } - Str->Maxlen = MAX_CHAR * sizeof (UINT16); - if (StringSize < Str->Maxlen) { - StrCat (Str->Str, AppendStr); - Str->Len = StringSize - sizeof (UINT16); - } + Str->Maxlen = MAX_CHAR * sizeof (UINT16); + if (StringSize < Str->Maxlen) { + CopyMem(&(Str->Str[StrLen(Str->Str)]), AppendStr, StrSize(AppendStr)); + Str->Len = StringSize - sizeof (UINT16); + } FreePool (AppendStr); return Str->Str; diff --git a/EfiLib/Platform.h b/EfiLib/Platform.h index 6b479aa..820f374 100644 --- a/EfiLib/Platform.h +++ b/EfiLib/Platform.h @@ -40,16 +40,13 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include -#include +#include #include #include #include -#include -#include #include -#include #include #include #include diff --git a/EfiLib/legacy.c b/EfiLib/legacy.c index 4ee6229..e024ea7 100644 --- a/EfiLib/legacy.c +++ b/EfiLib/legacy.c @@ -392,7 +392,11 @@ BdsCreateLegacyBootOption ( // // Create new BBS device path node with description string // +#ifdef __MAKEWITH_GNUEFI UnicodeStrToAsciiStr (BootDesc, HelpString); +#else + UnicodeStrToAsciiStrS (BootDesc, HelpString, sizeof (HelpString)); +#endif StringLen = AsciiStrLen (HelpString); NewBbsDevPathNode = AllocateZeroPool (sizeof (BBS_BBS_DEVICE_PATH) + StringLen); diff --git a/Make.common b/Make.common index c3cfba2..89a4141 100644 --- a/Make.common +++ b/Make.common @@ -60,6 +60,14 @@ ifeq ($(ARCH),aarch64) AR = $(prefix)aarch64-linux-gnu-ar RANLIB = $(prefix)aarch64-linux-gnu-ranlib OBJCOPY = $(prefix)aarch64-linux-gnu-objcopy +else ifeq ($(ARCH),loongarch64) + LOONGARCH64_CROSS_PREFIX ?= loongarch64-unknown-linux-gnu- + CC = $(LOONGARCH64_CROSS_PREFIX)gcc + AS = $(LOONGARCH64_CROSS_PREFIX)as + LD = $(LOONGARCH64_CROSS_PREFIX)ld + AR = $(LOONGARCH64_CROSS_PREFIX)ar + RANLIB = $(LOONGARCH64_CROSS_PREFIX)ranlib + OBJCOPY = $(LOONGARCH64_CROSS_PREFIX)objcopy else CC = $(prefix)gcc AS = $(prefix)as diff --git a/Makefile b/Makefile index 8ebc622..a342e5a 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,9 @@ export EDK2BASE=/usr/local/edk2-vUDK2018 # NOTE: Below is overridden for "tiano" targets -include $(EDK2BASE)/Conf/target.txt THISDIR=$(shell pwd) -EDK2_BUILDLOC=$(EDK2BASE)/Build/Refind/$(TARGET)_$(TOOL_CHAIN_TAG)/$(UC_ARCH) +EDK2_TARGET ?= RELEASE +EDK2_TOOLCHAIN ?= GCC5 +EDK2_BUILDLOC=$(EDK2BASE)/Build/Refind/$(EDK2_TARGET)_$(EDK2_TOOLCHAIN)/$(UC_ARCH) EDK2_PROGRAM_BASENAMES=refind gptsync EDK2_PROGRAMS=$(EDK2_PROGRAM_BASENAMES:=.efi) EDK2_DRIVER_BASENAMES=btrfs ext4 ext2 hfs iso9660 reiserfs @@ -151,20 +153,30 @@ fs_tiano: # than my own custom Makefiles (except this top-level one) edk2: build_edk2 cp $(EDK2_BUILDLOC)/refind.efi ./refind/refind_$(FILENAME_CODE).efi +ifneq ($(ARCH),loongarch64) cp $(EDK2_BUILDLOC)/gptsync.efi ./gptsync/gptsync_$(FILENAME_CODE).efi +endif ifneq ($(OMIT_SBAT), 1) $(OBJCOPY) --set-section-alignment '.sbat=512' --add-section .sbat=$(REFIND_SBAT_CSV) \ --adjust-section-vma .sbat+10000000 ./refind/refind_$(FILENAME_CODE).efi +ifneq ($(ARCH),loongarch64) $(OBJCOPY) --set-section-alignment '.sbat=512' --add-section .sbat=$(REFIND_SBAT_CSV) \ --adjust-section-vma .sbat+10000000 ./gptsync/gptsync_$(FILENAME_CODE).efi endif +endif all_edk2: build_edk2 fs_edk2 cp $(EDK2_BUILDLOC)/refind.efi ./refind/refind_$(FILENAME_CODE).efi +ifneq ($(ARCH),loongarch64) cp $(EDK2_BUILDLOC)/gptsync.efi ./gptsync/gptsync_$(FILENAME_CODE).efi +endif gptsync_edk2: build_edk2 +ifeq ($(ARCH),loongarch64) + @echo "Skipping gptsync build output for LoongArch64" +else cp $(EDK2_BUILDLOC)/gptsync.efi ./gptsync/gptsync_$(FILENAME_CODE).efi +endif fs_edk2: build_edk2 ifeq ($(OMIT_SBAT), 1) @@ -184,7 +196,7 @@ endif build_edk2: $(EDK2BASE)/RefindPkg cd $(EDK2BASE) && \ . ./edksetup.sh BaseTools && \ - build -a $(UC_ARCH) -p RefindPkg/RefindPkg.dsc + build -a $(UC_ARCH) -b $(EDK2_TARGET) -t $(EDK2_TOOLCHAIN) -p RefindPkg/RefindPkg.dsc mkdir -p ./drivers_$(FILENAME_CODE) $(EDK2BASE)/RefindPkg: diff --git a/RefindPkg.dsc b/RefindPkg.dsc index 5a7f857..8f0575a 100644 --- a/RefindPkg.dsc +++ b/RefindPkg.dsc @@ -18,6 +18,7 @@ SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf + RegisterFilterLib|MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf PciLib|MdePkg/Library/BasePciLibCf8/BasePciLibCf8.inf PciCf8Lib|MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf CacheMaintenanceLib|MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf @@ -43,11 +44,6 @@ # UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf - NetLib|MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf - IpIoLib|MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.inf - UdpIoLib|MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf - TcpIoLib|MdeModulePkg/Library/DxeTcpIoLib/DxeTcpIoLib.inf - DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf @@ -70,17 +66,18 @@ MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf - BaseStackCheckLib|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf - + StackCheckLib|MdePkg/Library/StackCheckLibNull/StackCheckLibNull.inf [LibraryClasses.AARCH64] - CompilerIntrinsicsLib|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf + CompilerIntrinsicsLib|MdePkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf [LibraryClasses.LOONGARCH64] - CompilerIntrinsicsLib|LoongArchPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf + CompilerIntrinsicsLib|MdePkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf [Components] RefindPkg/refind.inf +!if $(ARCH) != LOONGARCH64 RefindPkg/gptsync.inf +!endif RefindPkg/filesystems/ext2.inf RefindPkg/filesystems/ext4.inf RefindPkg/filesystems/btrfs.inf diff --git a/debian/control b/debian/control index 889bbd9..004f29e 100644 --- a/debian/control +++ b/debian/control @@ -9,7 +9,7 @@ Vcs-Browser: https://salsa.debian.org/debian/refind Vcs-Git: https://salsa.debian.org/debian/refind.git Package: refind -Architecture: amd64 arm64 i386 +Architecture: amd64 arm64 i386 loong64 Depends: debconf, efibootmgr, gawk, gdisk, mokutil, openssl, ${misc:Depends} Recommends: python3, sbsigntool Description: boot manager for EFI-based computers diff --git a/debian/rules b/debian/rules index d55b30d..414c9ac 100755 --- a/debian/rules +++ b/debian/rules @@ -1,6 +1,7 @@ #!/usr/bin/make -f export DH_VERBOSE := 1 +EDK2BASE ?= $(CURDIR)/edk2 include /usr/share/dpkg/architecture.mk ifeq (amd64, $(DEB_HOST_ARCH_CPU)) @@ -14,6 +15,10 @@ else ifeq (arm64, $(DEB_HOST_ARCH_CPU)) ARCH = aarch64 EFI_ARCH := aa64 +else +ifeq (loong64, $(DEB_HOST_ARCH_CPU)) + ARCH = loongarch64 + EFI_ARCH := loongarch64 else $(warning EFI architecture for $(DEB_HOST_ARCH_CPU) is unknown) ARCH := $(DEB_HOST_ARCH_CPU) @@ -21,6 +26,7 @@ else endif endif endif +endif %: dh $@ @@ -30,16 +36,24 @@ override_dh_auto_clean: rm -rf drivers_*/ override_dh_auto_build: +ifeq (loong64, $(DEB_HOST_ARCH_CPU)) + test -d '$(EDK2BASE)' || { echo "EDK2BASE not found: $(EDK2BASE)"; exit 1; } + dh_auto_build -- edk2 'ARCH=$(ARCH)' 'EDK2BASE=$(EDK2BASE)' + dh_auto_build -- fs_edk2 'ARCH=$(ARCH)' 'EDK2BASE=$(EDK2BASE)' +else dh_auto_build -- gnuefi 'ARCH=$(ARCH)' dh_auto_build -- fs_gnuefi 'ARCH=$(ARCH)' +endif override_dh_auto_install: # "make install" actually runs "efi-install" for the current system, so let's not do that :) override_dh_install: dh_install +ifneq (loong64, $(DEB_HOST_ARCH_CPU)) mkdir -p debian/refind/usr/share/refind/refind/tools_$(EFI_ARCH) cp gptsync/gptsync_$(EFI_ARCH).efi debian/refind/usr/share/refind/refind/tools_$(EFI_ARCH)/ +endif override_dh_installchangelogs: dh_installchangelogs NEWS.txt diff --git a/filesystems/btrfs.inf b/filesystems/btrfs.inf index 00a2c54..959bfe8 100644 --- a/filesystems/btrfs.inf +++ b/filesystems/btrfs.inf @@ -34,11 +34,9 @@ fsw_lib.c fsw_efi_lib.c -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec [LibraryClasses] UefiDriverEntryPoint @@ -46,15 +44,13 @@ DxeServicesTableLib MemoryAllocationLib -[LibraryClasses.AARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 - CompilerIntrinsicsLib - -[LibraryClasses.LOONGARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 - CompilerIntrinsicsLib +[LibraryClasses.AARCH64] +# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 + CompilerIntrinsicsLib + +[LibraryClasses.LOONGARCH64] +# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 + CompilerIntrinsicsLib [Guids] diff --git a/filesystems/ext2.inf b/filesystems/ext2.inf index 2df2dbd..f71fbb0 100644 --- a/filesystems/ext2.inf +++ b/filesystems/ext2.inf @@ -33,11 +33,9 @@ fsw_lib.c fsw_efi_lib.c -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec [LibraryClasses] UefiDriverEntryPoint @@ -45,15 +43,13 @@ DxeServicesTableLib MemoryAllocationLib -[LibraryClasses.AARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 - CompilerIntrinsicsLib - -[LibraryClasses.LOONGARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 - CompilerIntrinsicsLib +[LibraryClasses.AARCH64] +# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 + CompilerIntrinsicsLib + +[LibraryClasses.LOONGARCH64] +# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 + CompilerIntrinsicsLib [Guids] diff --git a/filesystems/ext4.inf b/filesystems/ext4.inf index 6e445dd..5784196 100644 --- a/filesystems/ext4.inf +++ b/filesystems/ext4.inf @@ -34,11 +34,9 @@ fsw_lib.c fsw_efi_lib.c -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec [LibraryClasses] UefiDriverEntryPoint @@ -46,15 +44,13 @@ DxeServicesTableLib MemoryAllocationLib -[LibraryClasses.AARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 - CompilerIntrinsicsLib - -[LibraryClasses.LOONGARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 - CompilerIntrinsicsLib +[LibraryClasses.AARCH64] +# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 + CompilerIntrinsicsLib + +[LibraryClasses.LOONGARCH64] +# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 + CompilerIntrinsicsLib [Guids] diff --git a/filesystems/hfs.inf b/filesystems/hfs.inf index 31bc526..59876f0 100644 --- a/filesystems/hfs.inf +++ b/filesystems/hfs.inf @@ -34,11 +34,9 @@ fsw_lib.c fsw_efi_lib.c -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec [LibraryClasses] UefiDriverEntryPoint @@ -46,15 +44,13 @@ DxeServicesTableLib MemoryAllocationLib -[LibraryClasses.AARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 - CompilerIntrinsicsLib - -[LibraryClasses.LOONGARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 - CompilerIntrinsicsLib +[LibraryClasses.AARCH64] +# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 + CompilerIntrinsicsLib + +[LibraryClasses.LOONGARCH64] +# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 + CompilerIntrinsicsLib [Guids] diff --git a/filesystems/iso9660.inf b/filesystems/iso9660.inf index 9bcf98b..39365da 100644 --- a/filesystems/iso9660.inf +++ b/filesystems/iso9660.inf @@ -34,11 +34,9 @@ fsw_lib.c fsw_efi_lib.c -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec [LibraryClasses] UefiDriverEntryPoint @@ -46,15 +44,13 @@ DxeServicesTableLib MemoryAllocationLib -[LibraryClasses.AARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 - CompilerIntrinsicsLib - -[LibraryClasses.LOONGARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 - CompilerIntrinsicsLib +[LibraryClasses.AARCH64] +# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 + CompilerIntrinsicsLib + +[LibraryClasses.LOONGARCH64] +# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 + CompilerIntrinsicsLib [Guids] diff --git a/filesystems/ntfs.inf b/filesystems/ntfs.inf index b008e10..6802cb2 100644 --- a/filesystems/ntfs.inf +++ b/filesystems/ntfs.inf @@ -34,11 +34,9 @@ fsw_lib.c fsw_efi_lib.c -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec [LibraryClasses] UefiDriverEntryPoint @@ -46,15 +44,13 @@ DxeServicesTableLib MemoryAllocationLib -[LibraryClasses.AARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 - CompilerIntrinsicsLib - -[LibraryClasses.LOONGARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 - CompilerIntrinsicsLib +[LibraryClasses.AARCH64] +# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 + CompilerIntrinsicsLib + +[LibraryClasses.LOONGARCH64] +# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 + CompilerIntrinsicsLib [Guids] diff --git a/filesystems/reiserfs.inf b/filesystems/reiserfs.inf index b2c6dfa..981e970 100644 --- a/filesystems/reiserfs.inf +++ b/filesystems/reiserfs.inf @@ -34,11 +34,9 @@ fsw_lib.c fsw_efi_lib.c -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec [LibraryClasses] UefiDriverEntryPoint @@ -46,15 +44,13 @@ DxeServicesTableLib MemoryAllocationLib -[LibraryClasses.AARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 - CompilerIntrinsicsLib - -[LibraryClasses.LOONGARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 - CompilerIntrinsicsLib +[LibraryClasses.AARCH64] +# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 + CompilerIntrinsicsLib + +[LibraryClasses.LOONGARCH64] +# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 + CompilerIntrinsicsLib [Guids] diff --git a/gptsync.inf b/gptsync.inf index 382ac97..24b25cd 100644 --- a/gptsync.inf +++ b/gptsync.inf @@ -31,11 +31,9 @@ gptsync/os_efi.c gptsync/showpart.c -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec [LibraryClasses] BaseLib @@ -45,15 +43,13 @@ UefiLib UefiApplicationEntryPoint -[LibraryClasses.AARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 - CompilerIntrinsicsLib - -[LibraryClasses.LOONGARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 - CompilerIntrinsicsLib +[LibraryClasses.AARCH64] +# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 + CompilerIntrinsicsLib + +[LibraryClasses.LOONGARCH64] +# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 + CompilerIntrinsicsLib [Guids] gEfiAcpiTableGuid @@ -81,10 +77,8 @@ gEfiSimpleTextInProtocolGuid # ALWAYS_CONSUMED gEfiSimpleTextInputExProtocolGuid # ALWAYS_CONSUMED gEfiSimpleTextOutProtocolGuid # ALWAYS_CONSUMED - gEfiUnicodeCollationProtocolGuid # ALWAYS_CONSUMED - gEfiUnicodeCollation2ProtocolGuid # ALWAYS_CONSUMED + gEfiUnicodeCollation2ProtocolGuid # ALWAYS_CONSUMED - gEfiAcpiS3SaveProtocolGuid # PROTOCOL CONSUMES gEfiBlockIoProtocolGuid # PROTOCOL CONSUMES gEfiCpuArchProtocolGuid # PROTOCOL CONSUMES gEfiDebugPortProtocolGuid # PROTOCOL CONSUMES @@ -94,14 +88,10 @@ gEfiFirmwareVolume2ProtocolGuid # PROTOCOL CONSUMES gEfiGraphicsOutputProtocolGuid # PROTOCOL SOMETIMES_CONSUMES gEfiHiiFontProtocolGuid # PROTOCOL CONSUMES - gEfiLegacy8259ProtocolGuid ## PROTOCOL SOMETIMES_CONSUMES gEfiLoadedImageProtocolGuid # PROTOCOL CONSUMES - gEfiOEMBadgingProtocolGuid # PROTOCOL CONSUMES gEfiPciIoProtocolGuid # PROTOCOL CONSUMES gEfiScsiIoProtocolGuid ## PROTOCOL SOMETIMES_CONSUMES - gEfiScsiPassThruProtocolGuid ## PROTOCOL SOMETIMES_CONSUMES gEfiSimpleNetworkProtocolGuid # PROTOCOL CONSUMES - gEfiUgaDrawProtocolGuid |PcdUgaConsumeSupport # PROTOCOL SOMETIMES_CONSUMES gEfiAbsolutePointerProtocolGuid gEfiAcpiTableProtocolGuid @@ -109,24 +99,18 @@ gEfiEdidDiscoveredProtocolGuid gEfiHiiDatabaseProtocolGuid gEfiHiiImageProtocolGuid - gEfiHiiProtocolGuid gEfiSimplePointerProtocolGuid gEfiSmbiosProtocolGuid gEfiSecurityArchProtocolGuid gEfiScsiIoProtocolGuid ## PROTOCOL SOMETIMES_CONSUMES - gEfiScsiPassThruProtocolGuid ## PROTOCOL SOMETIMES_CONSUMES gEfiExtScsiPassThruProtocolGuid ## PROTOCOL SOMETIMES_CONSUMES - gEfiLegacyBiosProtocolGuid # PROTOCOL TO_START gEfiLoadFile2ProtocolGuid gEfiLoadFileProtocolGuid gEfiHiiPackageListProtocolGuid -[FeaturePcd] - gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport - -[Pcd] +[Pcd] [BuildOptions.IA32] diff --git a/include/tiano_includes.h b/include/tiano_includes.h index a723c91..229dab0 100644 --- a/include/tiano_includes.h +++ b/include/tiano_includes.h @@ -19,14 +19,12 @@ #include #include #include -#include // Protocol Includes #include #include #include #include #include -#include #include #include #include @@ -36,16 +34,13 @@ #include #include #include -#include #include #include #include -#include #include #include #include #include -#include #include #include #include @@ -54,17 +49,13 @@ #include #include #include -#include -#include #include #include -#include // Guid Includes #include #include #include -#include #include #include #include @@ -148,4 +139,4 @@ EfiReallocatePool ( #define PoolPrint(...) CatSPrint(NULL, __VA_ARGS__) -#endif \ No newline at end of file +#endif diff --git a/mok/simple_file.c b/mok/simple_file.c index 37a163f..1e0094f 100644 --- a/mok/simple_file.c +++ b/mok/simple_file.c @@ -70,10 +70,13 @@ generate_path(CHAR16* name, EFI_LOADED_IMAGE *li, EFI_DEVICE_PATH **path, CHAR16 pathlen = StrLen(devpathstr); } + UINTN path_name_len; + if (name[0] != '\\') pathlen++; - *PathName = AllocatePool((pathlen + 1 + StrLen(name))*sizeof(CHAR16)); + path_name_len = pathlen + 1 + StrLen(name); + *PathName = AllocatePool(path_name_len * sizeof(CHAR16)); if (!*PathName) { Print(L"Failed to allocate path buffer\n"); @@ -81,11 +84,11 @@ generate_path(CHAR16* name, EFI_LOADED_IMAGE *li, EFI_DEVICE_PATH **path, CHAR16 goto error; } - StrCpy(*PathName, devpathstr); + StrCpyS(*PathName, path_name_len, devpathstr); if (name[0] != '\\') - StrCat(*PathName, L"\\"); - StrCat(*PathName, name); + StrCatS(*PathName, path_name_len, L"\\"); + StrCatS(*PathName, path_name_len, name); *path = FileDevicePath(li->DeviceHandle, *PathName); diff --git a/refind.inf b/refind.inf index 7bb6a36..90480db 100644 --- a/refind.inf +++ b/refind.inf @@ -29,11 +29,10 @@ EfiLib/GenericBdsLib.h EfiLib/BmLib.c EfiLib/DevicePath.c #included into GenericBdsLib - EfiLib/BdsConnect.c #included into GenericBdsLib - EfiLib/BdsHelper.c - EfiLib/BdsTianoCore.c - EfiLib/legacy.c - gzip/decompress_inflate.c + EfiLib/BdsConnect.c #included into GenericBdsLib + EfiLib/BdsHelper.c + EfiLib/BdsTianoCore.c + gzip/decompress_inflate.c mok/mok.c mok/guid.c mok/security_policy.c @@ -64,16 +63,22 @@ libeg/lodepng_xtra.c libeg/nanojpeg.c libeg/nanojpeg_xtra.c - libeg/screen.c - libeg/text.c - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - IntelFrameworkPkg/IntelFrameworkPkg.dec - IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec -# Uncomment the below when compiling with OS X -# StdLib/StdLib.dec + libeg/screen.c + libeg/text.c + +[Sources.IA32] + # Legacy BIOS support code is only built on x86 targets. + EfiLib/legacy.c + +[Sources.X64] + # Legacy BIOS support code is only built on x86 targets. + EfiLib/legacy.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec +# Uncomment the below when compiling with OS X +# StdLib/StdLib.dec [Packages.XCODE] StdLib/StdLib.dec @@ -94,15 +99,13 @@ IoLib PerformanceLib -[LibraryClasses.AARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 - CompilerIntrinsicsLib - -[LibraryClasses.LOONGARCH64] - BaseStackCheckLib -# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 - CompilerIntrinsicsLib +[LibraryClasses.AARCH64] +# Comment out CompilerIntrinsicsLib when compiling for AARCH64 using UDK2014 + CompilerIntrinsicsLib + +[LibraryClasses.LOONGARCH64] +# Comment out CompilerIntrinsicsLib when compiling for LOONGARCH64 using UDK2014 + CompilerIntrinsicsLib [Guids] gEfiAcpiTableGuid @@ -130,10 +133,8 @@ gEfiSimpleTextInProtocolGuid # ALWAYS_CONSUMED gEfiSimpleTextInputExProtocolGuid # ALWAYS_CONSUMED gEfiSimpleTextOutProtocolGuid # ALWAYS_CONSUMED - gEfiUnicodeCollationProtocolGuid # ALWAYS_CONSUMED - gEfiUnicodeCollation2ProtocolGuid # ALWAYS_CONSUMED + gEfiUnicodeCollation2ProtocolGuid # ALWAYS_CONSUMED - gEfiAcpiS3SaveProtocolGuid # PROTOCOL CONSUMES gEfiBlockIoProtocolGuid # PROTOCOL CONSUMES gEfiCpuArchProtocolGuid # PROTOCOL CONSUMES gEfiDebugPortProtocolGuid # PROTOCOL CONSUMES @@ -143,14 +144,10 @@ gEfiFirmwareVolume2ProtocolGuid # PROTOCOL CONSUMES gEfiGraphicsOutputProtocolGuid # PROTOCOL SOMETIMES_CONSUMES gEfiHiiFontProtocolGuid # PROTOCOL CONSUMES - gEfiLegacy8259ProtocolGuid ## PROTOCOL SOMETIMES_CONSUMES gEfiLoadedImageProtocolGuid # PROTOCOL CONSUMES - gEfiOEMBadgingProtocolGuid # PROTOCOL CONSUMES gEfiPciIoProtocolGuid # PROTOCOL CONSUMES gEfiScsiIoProtocolGuid ## PROTOCOL SOMETIMES_CONSUMES - gEfiScsiPassThruProtocolGuid ## PROTOCOL SOMETIMES_CONSUMES gEfiSimpleNetworkProtocolGuid # PROTOCOL CONSUMES - gEfiUgaDrawProtocolGuid |PcdUgaConsumeSupport # PROTOCOL SOMETIMES_CONSUMES gEfiAbsolutePointerProtocolGuid gEfiAcpiTableProtocolGuid @@ -158,24 +155,18 @@ gEfiEdidDiscoveredProtocolGuid gEfiHiiDatabaseProtocolGuid gEfiHiiImageProtocolGuid - gEfiHiiProtocolGuid gEfiSimplePointerProtocolGuid gEfiSmbiosProtocolGuid gEfiSecurityArchProtocolGuid gEfiScsiIoProtocolGuid ## PROTOCOL SOMETIMES_CONSUMES - gEfiScsiPassThruProtocolGuid ## PROTOCOL SOMETIMES_CONSUMES gEfiExtScsiPassThruProtocolGuid ## PROTOCOL SOMETIMES_CONSUMES - gEfiLegacyBiosProtocolGuid # PROTOCOL TO_START gEfiLoadFile2ProtocolGuid gEfiLoadFileProtocolGuid gEfiHiiPackageListProtocolGuid -[FeaturePcd] - gEfiMdePkgTokenSpaceGuid.PcdUgaConsumeSupport - -[Pcd] +[Pcd] [BuildOptions.IA32] diff --git a/refind/apple.c b/refind/apple.c index b7562e0..ab9f811 100644 --- a/refind/apple.c +++ b/refind/apple.c @@ -143,6 +143,7 @@ typedef struct EfiAppleSetOsInterface { EFI_STATUS SetAppleOSInfo() { CHAR16 *AppleOSVersion = NULL; CHAR8 *AppleOSVersion8 = NULL; + UINTN AppleOSVersion8Len = 0; EFI_STATUS Status; EFI_GUID apple_set_os_guid = EFI_APPLE_SET_OS_PROTOCOL_GUID; EfiAppleSetOsInterface *SetOs = NULL; @@ -161,9 +162,10 @@ EFI_STATUS SetAppleOSInfo() { MergeStrings(&AppleOSVersion, GlobalConfig.SpoofOSXVersion, ' '); if (AppleOSVersion) { LOG(2, LOG_LINE_NORMAL, L"Setting Apple OS information to '%s'", AppleOSVersion); - AppleOSVersion8 = AllocateZeroPool((StrLen(AppleOSVersion) + 1) * sizeof(CHAR8)); - UnicodeStrToAsciiStr(AppleOSVersion, AppleOSVersion8); + AppleOSVersion8Len = StrLen(AppleOSVersion) + 1; + AppleOSVersion8 = AllocateZeroPool(AppleOSVersion8Len * sizeof(CHAR8)); if (AppleOSVersion8) { + UnicodeStrToAsciiStrS(AppleOSVersion, AppleOSVersion8, AppleOSVersion8Len); Status = refit_call1_wrapper (SetOs->SetOsVersion, AppleOSVersion8); if (!EFI_ERROR(Status)) Status = EFI_SUCCESS; diff --git a/refind/config.c b/refind/config.c index e5e0b3a..44bd270 100644 --- a/refind/config.c +++ b/refind/config.c @@ -256,7 +256,7 @@ static BOOLEAN KeepReading(IN OUT CHAR16 *p, IN OUT BOOLEAN *IsQuoted) { if (p[1] == L'"') { Temp = StrDuplicate(&p[1]); if (Temp != NULL) { - StrCpy(p, Temp); + MyCopyMem(p, Temp, StrSize(Temp)); MyFreePool(Temp); } MoreToRead = TRUE; diff --git a/refind/install.c b/refind/install.c index c6995cc..e9f48ce 100644 --- a/refind/install.c +++ b/refind/install.c @@ -184,7 +184,7 @@ static EFI_STATUS RenameFile(IN EFI_FILE_PROTOCOL *BaseDir, CHAR16 *OldName, CHA if (NewInfo != NULL) { MyCopyMem(NewInfo, Buffer, sizeof(EFI_FILE_INFO)); NewInfo->FileName[0] = 0; - StrCat(NewInfo->FileName, NewName); + MyCopyMem(NewInfo->FileName, NewName, StrSize(NewName)); // Note: The below call is where Tow-Boot can error out. Status = refit_call4_wrapper(BaseDir->SetInfo, FilePtr, @@ -605,7 +605,7 @@ static EFI_STATUS ConstructBootEntry(EFI_HANDLE *TargetVolume, Working += sizeof (UINT32); *(UINT16 *)Working = DevPathSize; Working += sizeof (UINT16); - StrCpy((CHAR16 *)Working, Label); + MyCopyMem(Working, Label, StrSize(Label)); Working += StrSize(Label); MyCopyMem(Working, DevicePath, DevPathSize); // If support for arguments is required in the future, uncomment diff --git a/refind/lib.c b/refind/lib.c index 5d27526..27d61ba 100644 --- a/refind/lib.c +++ b/refind/lib.c @@ -1543,11 +1543,6 @@ InitializeUnicodeCollationProtocol (VOID) // Status = gBS->LocateProtocol(&gEfiUnicodeCollation2ProtocolGuid, NULL, (VOID **) &mUnicodeCollation); - if (EFI_ERROR(Status)) { - Status = gBS->LocateProtocol(&gEfiUnicodeCollationProtocolGuid, - NULL, (VOID **) &mUnicodeCollation); - - } return Status; } diff --git a/refind/line_edit.c b/refind/line_edit.c index 59d9b9a..7ba72ae 100644 --- a/refind/line_edit.c +++ b/refind/line_edit.c @@ -68,7 +68,7 @@ BOOLEAN line_edit(CHAR16 *line_in, CHAR16 **line_out, UINTN x_max) { line_in = L""; size = StrLen(line_in) + 1024; line = AllocatePool(size * sizeof(CHAR16)); - StrCpy(line, line_in); + StrCpyS(line, size, line_in); len = StrLen(line); print = AllocatePool(x_max * sizeof(CHAR16)); diff --git a/refind/mystrings.c b/refind/mystrings.c index 84dd678..2e29011 100644 --- a/refind/mystrings.c +++ b/refind/mystrings.c @@ -144,20 +144,21 @@ VOID MergeStrings(IN OUT CHAR16 **First, IN CHAR16 *Second, CHAR16 AddChar) { Length2 = StrLen(Second); NewString = AllocatePool(sizeof(CHAR16) * (Length1 + Length2 + 2)); if (NewString != NULL) { + UINTN NewStringSize = Length1 + Length2 + 2; if ((*First != NULL) && (Length1 == 0)) { MyFreePool(*First); *First = NULL; } NewString[0] = L'\0'; if (*First != NULL) { - StrCat(NewString, *First); + StrCatS(NewString, NewStringSize, *First); if (AddChar) { NewString[Length1] = AddChar; NewString[Length1 + 1] = '\0'; } // if (AddChar) } // if (*First != NULL) if (Second != NULL) - StrCat(NewString, Second); + StrCatS(NewString, NewStringSize, Second); MyFreePool(*First); *First = NewString; } else { @@ -216,7 +217,7 @@ BOOLEAN LimitStringLength(CHAR16 *TheString, UINTN Limit) { } else { TempString = StrDuplicate(&SubString[i]); if (TempString != NULL) { - StrCpy(&SubString[1], TempString); + MyCopyMem(&SubString[1], TempString, StrSize(TempString)); MyFreePool(TempString); HasChanged = TRUE; } else { @@ -349,7 +350,12 @@ BOOLEAN DeleteItemFromCsvList(CHAR16 *ToDelete, CHAR16 *List) { Found[0] = L'\0'; } // if/else } else { // Found is NOT final element - StrCpy(Found, &Comma[1]); + UINTN i = 0; + while (Comma[1 + i] != L'\0') { + Found[i] = Comma[1 + i]; + i++; + } + Found[i] = L'\0'; } // if/else return TRUE; } else { @@ -416,7 +422,7 @@ BOOLEAN ReplaceSubstring(IN OUT CHAR16 **MainString, IN CHAR16 *SearchString, IN FoundSearchString[-1] = L'\0'; ReplString = SearchString; } // if - StrCpy(NewString, *MainString); + MyCopyMem(NewString, *MainString, StrSize(*MainString)); MergeStrings(&NewString, ReplString, L'\0'); MergeStrings(&NewString, EndString, L'\0'); MyFreePool(MainString); diff --git a/refind/scan.c b/refind/scan.c index 47fa3f6..7fbcb4d 100644 --- a/refind/scan.c +++ b/refind/scan.c @@ -68,6 +68,12 @@ #include "driver_support.h" #include "launch_efi.h" #include "launch_legacy.h" + +#ifndef BBS_HARDDISK +#define BBS_HARDDISK 0x02 +#define BBS_CDROM 0x03 +#define BBS_USB 0x05 +#endif #include "linux.h" #include "log.h" #include "scan.h" @@ -360,7 +366,8 @@ VOID GenerateSubScreen(LOADER_ENTRY *Entry, IN REFIT_VOLUME *Volume, IN BOOLEAN } // safe mode allowed // check for Apple hardware diagnostics - StrCpy(DiagsFileName, L"System\\Library\\CoreServices\\.diagnostics\\diags.efi"); + StrCpyS(DiagsFileName, sizeof (DiagsFileName) / sizeof (DiagsFileName[0]), + L"System\\Library\\CoreServices\\.diagnostics\\diags.efi"); if (FileExists(Volume->RootDir, DiagsFileName) && !(GlobalConfig.HideUIFlags & HIDEUI_FLAG_HWTEST)) { SubEntry = InitializeLoaderEntry(Entry); if (SubEntry != NULL) { @@ -1347,8 +1354,10 @@ VOID ScanForBootloaders(BOOLEAN ShowMessage) { // If UEFI & scanning for legacy loaders & deep legacy scan, update NVRAM boot manager list if ((GlobalConfig.LegacyType == LEGACY_TYPE_UEFI) && ScanForLegacy && GlobalConfig.DeepLegacyScan) { +#ifndef EFILOONGARCH64 BdsDeleteAllInvalidLegacyBootOptions(); BdsAddNonExistingLegacyBootOptions(); +#endif } // if // We temporarily modify GlobalConfig.DontScanFiles and GlobalConfig.DontScanVolumes