summaryrefslogtreecommitdiff
path: root/libre/linux-libre-lts
diff options
context:
space:
mode:
authorDavid P <megver83@parabola.nu>2020-05-19 18:19:09 -0400
committerDavid P <megver83@parabola.nu>2020-05-19 18:19:09 -0400
commit5e3d068b210d04ca4267111e6de52feb9ad9b680 (patch)
tree3e7b06e4d5f7fa377b4b3cec9c64b66be195b7ce /libre/linux-libre-lts
parentd0c33de1915ba569007e25a7b797c9bb3a63c8e2 (diff)
updpkg: libre/linux-libre-lts 5.4.41-1
Signed-off-by: David P <megver83@parabola.nu>
Diffstat (limited to 'libre/linux-libre-lts')
-rw-r--r--libre/linux-libre-lts/0001-gcc-common.h-Update-for-GCC-10.patch92
-rw-r--r--libre/linux-libre-lts/0002-Makefile-disallow-data-races-on-gcc-10-as-well.patch32
-rw-r--r--libre/linux-libre-lts/0003-x86-Fix-early-boot-crash-on-gcc-10-next-try.patch131
-rw-r--r--libre/linux-libre-lts/PKGBUILD38
-rw-r--r--libre/linux-libre-lts/config.x86_644
-rw-r--r--libre/linux-libre-lts/linux-armv7h.preset2
6 files changed, 275 insertions, 24 deletions
diff --git a/libre/linux-libre-lts/0001-gcc-common.h-Update-for-GCC-10.patch b/libre/linux-libre-lts/0001-gcc-common.h-Update-for-GCC-10.patch
new file mode 100644
index 000000000..1eef6746f
--- /dev/null
+++ b/libre/linux-libre-lts/0001-gcc-common.h-Update-for-GCC-10.patch
@@ -0,0 +1,92 @@
+From 1a84040203e73d1bccfdb99aed98042efe3ecd16 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Pierret=20=28fepitre=29?=
+ <frederic.pierret@qubes-os.org>
+Date: Tue, 7 Apr 2020 13:32:59 +0200
+Subject: [PATCH 1/3] gcc-common.h: Update for GCC 10
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Remove "params.h" include, which has been dropped in GCC 10.
+
+Remove is_a_helper() macro, which is now defined in gimple.h, as seen
+when running './scripts/gcc-plugin.sh g++ g++ gcc':
+
+In file included from <stdin>:1:
+./gcc-plugins/gcc-common.h:852:13: error: redefinition of ‘static bool is_a_helper<T>::test(U*) [with U = const gimple; T = const ggoto*]’
+ 852 | inline bool is_a_helper<const ggoto *>::test(const_gimple gs)
+ | ^~~~~~~~~~~~~~~~~~~~~~~~~~
+In file included from ./gcc-plugins/gcc-common.h:125,
+ from <stdin>:1:
+/usr/lib/gcc/x86_64-redhat-linux/10/plugin/include/gimple.h:1037:1: note: ‘static bool is_a_helper<T>::test(U*) [with U = const gimple; T = const ggoto*]’ previously declared here
+ 1037 | is_a_helper <const ggoto *>::test (const gimple *gs)
+ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Add -Wno-format-diag to scripts/gcc-plugins/Makefile to avoid
+meaningless warnings from error() formats used by plugins:
+
+scripts/gcc-plugins/structleak_plugin.c: In function ‘int plugin_init(plugin_name_args*, plugin_gcc_version*)’:
+scripts/gcc-plugins/structleak_plugin.c:253:12: warning: unquoted sequence of 2 consecutive punctuation characters ‘'-’ in format [-Wformat-diag]
+ 253 | error(G_("unknown option '-fplugin-arg-%s-%s'"), plugin_name, argv[i].key);
+ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Signed-off-by: Frédéric Pierret (fepitre) <frederic.pierret@qubes-os.org>
+Link: https://lore.kernel.org/r/20200407113259.270172-1-frederic.pierret@qubes-os.org
+[kees: include -Wno-format-diag for plugin builds]
+Signed-off-by: Kees Cook <keescook@chromium.org>
+---
+ scripts/gcc-plugins/Makefile | 1 +
+ scripts/gcc-plugins/gcc-common.h | 4 ++++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/scripts/gcc-plugins/Makefile b/scripts/gcc-plugins/Makefile
+index aa0d0ec6936d..9e95862f2788 100644
+--- a/scripts/gcc-plugins/Makefile
++++ b/scripts/gcc-plugins/Makefile
+@@ -11,6 +11,7 @@ else
+ HOST_EXTRACXXFLAGS += -I$(GCC_PLUGINS_DIR)/include -I$(src) -std=gnu++98 -fno-rtti
+ HOST_EXTRACXXFLAGS += -fno-exceptions -fasynchronous-unwind-tables -ggdb
+ HOST_EXTRACXXFLAGS += -Wno-narrowing -Wno-unused-variable
++ HOST_EXTRACXXFLAGS += -Wno-format-diag
+ export HOST_EXTRACXXFLAGS
+ endif
+
+diff --git a/scripts/gcc-plugins/gcc-common.h b/scripts/gcc-plugins/gcc-common.h
+index 17f06079a712..9ad76b7f3f10 100644
+--- a/scripts/gcc-plugins/gcc-common.h
++++ b/scripts/gcc-plugins/gcc-common.h
+@@ -35,7 +35,9 @@
+ #include "ggc.h"
+ #include "timevar.h"
+
++#if BUILDING_GCC_VERSION < 10000
+ #include "params.h"
++#endif
+
+ #if BUILDING_GCC_VERSION <= 4009
+ #include "pointer-set.h"
+@@ -847,19 +849,21 @@ static inline gimple gimple_build_assign_with_ops(enum tree_code subcode, tree l
+ return gimple_build_assign(lhs, subcode, op1, op2 PASS_MEM_STAT);
+ }
+
++#if BUILDING_GCC_VERSION < 10000
+ template <>
+ template <>
+ inline bool is_a_helper<const ggoto *>::test(const_gimple gs)
+ {
+ return gs->code == GIMPLE_GOTO;
+ }
+
+ template <>
+ template <>
+ inline bool is_a_helper<const greturn *>::test(const_gimple gs)
+ {
+ return gs->code == GIMPLE_RETURN;
+ }
++#endif
+
+ static inline gasm *as_a_gasm(gimple stmt)
+ {
+--
+2.26.2
+
diff --git a/libre/linux-libre-lts/0002-Makefile-disallow-data-races-on-gcc-10-as-well.patch b/libre/linux-libre-lts/0002-Makefile-disallow-data-races-on-gcc-10-as-well.patch
new file mode 100644
index 000000000..b6676eed6
--- /dev/null
+++ b/libre/linux-libre-lts/0002-Makefile-disallow-data-races-on-gcc-10-as-well.patch
@@ -0,0 +1,32 @@
+From 6a183a41a1945cb79660a78536182ce9c2568291 Mon Sep 17 00:00:00 2001
+From: Sergei Trofimovich <slyfox@gentoo.org>
+Date: Tue, 17 Mar 2020 00:07:18 +0000
+Subject: [PATCH 2/3] Makefile: disallow data races on gcc-10 as well
+
+gcc-10 will rename --param=allow-store-data-races=0
+to -fno-allow-store-data-races.
+
+The flag change happened at https://gcc.gnu.org/PR92046.
+
+Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
+Acked-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
+---
+ Makefile | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/Makefile b/Makefile
+index ff2b90ddc9bc..c8dc1357079b 100644
+--- a/Makefile
++++ b/Makefile
+@@ -713,6 +713,7 @@ endif
+
+ # Tell gcc to never replace conditional load with a non-conditional one
+ KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
++KBUILD_CFLAGS += $(call cc-option,-fno-allow-store-data-races)
+
+ include scripts/Makefile.kcov
+ include scripts/Makefile.gcc-plugins
+--
+2.26.2
+
diff --git a/libre/linux-libre-lts/0003-x86-Fix-early-boot-crash-on-gcc-10-next-try.patch b/libre/linux-libre-lts/0003-x86-Fix-early-boot-crash-on-gcc-10-next-try.patch
new file mode 100644
index 000000000..4d954fb92
--- /dev/null
+++ b/libre/linux-libre-lts/0003-x86-Fix-early-boot-crash-on-gcc-10-next-try.patch
@@ -0,0 +1,131 @@
+From 2f18ace75890ccd9681f210efdb58662db0cb4c4 Mon Sep 17 00:00:00 2001
+From: Borislav Petkov <bp@suse.de>
+Date: Wed, 22 Apr 2020 18:11:30 +0200
+Subject: [PATCH 3/3] x86: Fix early boot crash on gcc-10, next try
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+... or the odyssey of trying to disable the stack protector for the
+function which generates the stack canary value.
+
+The whole story started with Sergei reporting a boot crash with a kernel
+built with gcc-10:
+
+ Kernel panic — not syncing: stack-protector: Kernel stack is corrupted in: start_secondary
+ CPU: 1 PID: 0 Comm: swapper/1 Not tainted 5.6.0-rc5—00235—gfffb08b37df9 #139
+ Hardware name: Gigabyte Technology Co., Ltd. To be filled by O.E.M./H77M—D3H, BIOS F12 11/14/2013
+ Call Trace:
+ dump_stack
+ panic
+ ? start_secondary
+ __stack_chk_fail
+ start_secondary
+ secondary_startup_64
+ -—-[ end Kernel panic — not syncing: stack—protector: Kernel stack is corrupted in: start_secondary
+
+This happens because gcc-10 tail-call optimizes the last function call
+in start_secondary() - cpu_startup_entry() - and thus emits a stack
+canary check which fails because the canary value changes after the
+boot_init_stack_canary() call.
+
+To fix that, the initial attempt was to mark the one function which
+generates the stack canary with:
+
+ __attribute__((optimize("-fno-stack-protector"))) ... start_secondary(void *unused)
+
+however, using the optimize attribute doesn't work cumulatively
+as the attribute does not add to but rather replaces previously
+supplied optimization options - roughly all -fxxx options.
+
+The key one among them being -fno-omit-frame-pointer and thus leading to
+not present frame pointer - frame pointer which the kernel needs.
+
+The next attempt to prevent compilers from tail-call optimizing
+the last function call cpu_startup_entry(), shy of carving out
+start_secondary() into a separate compilation unit and building it with
+-fno-stack-protector, is this one.
+
+The current solution is short and sweet, and reportedly, is supported by
+both compilers so let's see how far we'll get this time.
+
+Reported-by: Sergei Trofimovich <slyfox@gentoo.org>
+Signed-off-by: Borislav Petkov <bp@suse.de>
+Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
+Reviewed-by: Kees Cook <keescook@chromium.org>
+Link: https://lkml.kernel.org/r/20200314164451.346497-1-slyfox@gentoo.org
+---
+ arch/x86/include/asm/stackprotector.h | 7 ++++++-
+ arch/x86/kernel/smpboot.c | 8 ++++++++
+ arch/x86/xen/smp_pv.c | 1 +
+ include/linux/compiler.h | 6 ++++++
+ 4 files changed, 21 insertions(+), 1 deletion(-)
+
+diff --git a/arch/x86/include/asm/stackprotector.h b/arch/x86/include/asm/stackprotector.h
+index 91e29b6a86a5..9804a7957f4e 100644
+--- a/arch/x86/include/asm/stackprotector.h
++++ b/arch/x86/include/asm/stackprotector.h
+@@ -55,8 +55,13 @@
+ /*
+ * Initialize the stackprotector canary value.
+ *
+- * NOTE: this must only be called from functions that never return,
++ * NOTE: this must only be called from functions that never return
+ * and it must always be inlined.
++ *
++ * In addition, it should be called from a compilation unit for which
++ * stack protector is disabled. Alternatively, the caller should not end
++ * with a function call which gets tail-call optimized as that would
++ * lead to checking a modified canary value.
+ */
+ static __always_inline void boot_init_stack_canary(void)
+ {
+diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
+index 69881b2d446c..9674321ce3a3 100644
+--- a/arch/x86/kernel/smpboot.c
++++ b/arch/x86/kernel/smpboot.c
+@@ -262,6 +262,14 @@ static void notrace start_secondary(void *unused)
+
+ wmb();
+ cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
++
++ /*
++ * Prevent tail call to cpu_startup_entry() because the stack protector
++ * guard has been changed a couple of function calls up, in
++ * boot_init_stack_canary() and must not be checked before tail calling
++ * another function.
++ */
++ prevent_tail_call_optimization();
+ }
+
+ /**
+diff --git a/arch/x86/xen/smp_pv.c b/arch/x86/xen/smp_pv.c
+index 802ee5bba66c..0cebe5db691d 100644
+--- a/arch/x86/xen/smp_pv.c
++++ b/arch/x86/xen/smp_pv.c
+@@ -92,6 +92,7 @@ asmlinkage __visible void cpu_bringup_and_idle(void)
+ cpu_bringup();
+ boot_init_stack_canary();
+ cpu_startup_entry(CPUHP_AP_ONLINE_IDLE);
++ prevent_tail_call_optimization();
+ }
+
+ void xen_smp_intr_free_pv(unsigned int cpu)
+diff --git a/include/linux/compiler.h b/include/linux/compiler.h
+index 034b0a644efc..732754d96039 100644
+--- a/include/linux/compiler.h
++++ b/include/linux/compiler.h
+@@ -356,4 +356,10 @@ static inline void *offset_to_ptr(const int *off)
+ /* &a[0] degrades to a pointer: a different type from an array */
+ #define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
+
++/*
++ * This is needed in functions which generate the stack canary, see
++ * arch/x86/kernel/smpboot.c::start_secondary() for an example.
++ */
++#define prevent_tail_call_optimization() asm("")
++
+ #endif /* __LINUX_COMPILER_H */
+--
+2.26.2
+
diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD
index 3c76b846c..c41c71cc2 100644
--- a/libre/linux-libre-lts/PKGBUILD
+++ b/libre/linux-libre-lts/PKGBUILD
@@ -14,11 +14,11 @@ _replacesoldkernels=() # '%' gets replaced with kernel suffix
_replacesoldmodules=() # '%' gets replaced with kernel suffix
pkgbase=linux-libre-lts
-pkgver=5.4.33
+pkgver=5.4.41
pkgrel=1
pkgdesc='LTS Linux-libre'
-rcnver=5.4.33
-rcnrel=armv7-x22
+rcnver=5.4.40
+rcnrel=armv7-x27
url='https://linux-libre.fsfla.org/'
arch=(i686 x86_64 armv7h)
license=(GPL2)
@@ -42,9 +42,11 @@ source=(
# https://labs.parabola.nu/issues/877
# http://www.fsfla.org/pipermail/linux-libre/2015-November/003202.html
0002-fix-Atmel-maXTouch-touchscreen-support.patch
-
- # Arch's linux-lts patches
+ # Arch Linux patches
0001-add-sysctl-and-CONFIG-for-unprivileged_userns_clone.patch
+ 0001-gcc-common.h-Update-for-GCC-10.patch
+ 0002-Makefile-disallow-data-races-on-gcc-10-as-well.patch
+ 0003-x86-Fix-early-boot-crash-on-gcc-10-next-try.patch
sphinx-workaround.patch
)
source_armv7h=(
@@ -67,7 +69,7 @@ validpgpkeys=(
)
sha512sums=('0d0915133864eb031adfc6700066147dcf3e768a50a31c39754950c95ef4fd322dc701cd50af49c403ef0325adfcb07e354d5e46c1be3dcdd719a7a55c963f37'
'SKIP'
- '0df531c7df5292454db80da5089c98ed7070ce9c90b074e5daa9f18b310d1ff3100da6e7ab0514ad15d2c1c413686fabe2cbb115a26974a699abfa547079c9e9'
+ '0d2b68b42bf3332fe1f0ace81873d599cc12a845f2001764fd8fbdb5f635e57d41917d1b6fdb11770c489ca8bda8a772fd3f218df8672e9d514484476c1ae14b'
'SKIP'
'13cb5bc42542e7b8bb104d5f68253f6609e463b6799800418af33eb0272cc269aaa36163c3e6f0aacbdaaa1d05e2827a4a7c4a08a029238439ed08b89c564bb3'
'SKIP'
@@ -76,14 +78,17 @@ sha512sums=('0d0915133864eb031adfc6700066147dcf3e768a50a31c39754950c95ef4fd322dc
'267295aa0cea65684968420c68b32f1a66a22d018b9d2b2c1ef14267bcf4cb68aaf7099d073cbfefe6c25c8608bdcbbd45f7ac8893fdcecbf1e621abdfe9ecc1'
'SKIP'
'2f1d1f927245cc52091ab91e7e523cb6f91cdd435059d087c0268856d1ce8a6ec2af9295a8bdcaa018a40af0ac9a2940900f981b3df5f412a1c059f994e3bf3f'
- '17e83ead6022662b8fb1959501fdf2869f2bbce1a3f9aaf3b84c9c54c1c180c8fbd0e21091f684d4646d8b86360803fe30d6f5953790c07096d3653cdb42a483'
+ '384c81ce24e30d1bbd32e0b6bdfb0409f7f1f9dbb3d7faf438f15d5971ee8fe378659aee831b7ae102d4a7f0a4e7568c45cf603ef85509b2867ed67be0d3f0dc'
'1079d81e3eb69273022c601b50fce575b41a8042d8f91f95618ffce4cd01f948c69d52fbb2d3b05d9efe58e12fcef1b06498399dc0bda4bef38ab288047b18e1'
- 'b3347d99e5f472dfa842e76f1cb9973ff15d85c45908f7c0383d15f35964eba7c3a2f6d07bf140812b1e899636712f74645ae35298642744c3e879f77e92bd8c'
+ '53103bf55b957b657039510527df0df01279dec59cda115a4d6454e4135025d4546167fa30bdc99107f232561c1e096d8328609ab5a876cf7017176f92ad3e0b'
'02af4dd2a007e41db0c63822c8ab3b80b5d25646af1906dc85d0ad9bb8bbf5236f8e381d7f91cf99ed4b0978c50aee37cb9567cdeef65b7ec3d91b882852b1af'
'b8fe56e14006ab866970ddbd501c054ae37186ddc065bb869cf7d18db8c0d455118d5bda3255fb66a0dde38b544655cfe9040ffe46e41d19830b47959b2fb168'
'5f196378d50dd737d727e424d8f31b7fa8a6b92ba88f0a1467ef79bc37a097160da1fc1fd5cfb4b8983f36f2afdf27eb229ec61b35a15ac2343d660eb416a230'
+ 'aab1da6c0aae0535fd6ea5115f95fc52c4bbc0cea6580ced62f9c45dd96a392a98173a6f0a15381366d25f1441fb7ad804b36ca639a9219c01e4b911471e7e62'
+ 'df9306b6d5ee501bd72cd44911441ab34ddca74b4d14601c7e2e001aa451b49c20d0fc6c999d29f03d1b61602f2010460191099c5aae5c0c88809eae4cc1e82a'
+ '4c471f5f760261d344c3133429d8c2ddb1615afef5b8c0420d66006124bea8158a61b5100e4ba2a144f8b658493dd81cc05ca564ca813c3331a34eeafdcc86a8'
'8081673a6594e5fc2fddc98fa434e99817aa822f7136d3c14c8d465fa7b93c9ac5d3a4150a5b632e25b1dc76a814dfa19d8aede37d58b935db288465b6585c58')
-sha512sums_armv7h=('6855cabac30b5153c64b49753adbf25bd6c65ae43d6bb9b94213b353060f2fb3186ae5fbd99978b65fac622d8a732cbcdc9bdbcad23a6604d526b2a108e098f6'
+sha512sums_armv7h=('8171a88b29bd58866dfb53fa74bcbcb84dbec755da6d0dd2aad54b1aa696c0334a5a87dfee4636c358026ab6b8c83ac75ebe3c5ce625a87fc2d46ebb58c94210'
'SKIP'
'b576a9c40ba59485c350f71b9234d9e71f245e25b26382bd2f67019f3309c3b5705a6020eae0a9dfccacc763fb2056a5937c0a8ff4e64f99ba1d60f0b2acb03f'
'85a13a274d4cbaca3ddbe8eaf883f1a1184765f8d09d6d40bb32defbe0876cb0153513e8db8671d7fc053e383ced793b74245ff29364a760e1a52bb36ebc8e85'
@@ -183,6 +188,9 @@ _package() {
echo "Installing modules..."
make INSTALL_MOD_PATH="$pkgdir/usr" modules_install
+ # remove build and source links
+ rm "$modulesdir"/{source,build}
+
if [ "$CARCH" = "armv7h" ]; then
echo "Installing device tree binaries..."
make INSTALL_DTBS_PATH="$pkgdir/boot/dtbs/$pkgbase" dtbs_install
@@ -193,12 +201,6 @@ _package() {
sed "s|%PKGBASE%|$pkgbase|g;s|%KERNVER%|$kernver|g" ../linux-armv7h.preset \
| install -Dm644 /dev/stdin "$pkgdir/etc/mkinitcpio.d/$pkgbase.preset"
fi
-
- # remove build and source links
- rm "$modulesdir"/{source,build}
-
- echo "Fixing permissions..."
- chmod -Rc u=rwX,go=rX "$pkgdir"
}
_package-headers() {
@@ -298,9 +300,6 @@ _package-headers() {
echo "Adding symlink..."
mkdir -p "$pkgdir/usr/src"
ln -sr "$builddir" "$pkgdir/usr/src/$pkgbase"
-
- echo "Fixing permissions..."
- chmod -Rc u=rwX,go=rX "$pkgdir"
}
_package-docs() {
@@ -323,9 +322,6 @@ _package-docs() {
echo "Adding symlink..."
mkdir -p "$pkgdir/usr/share/doc"
ln -sr "$builddir/Documentation" "$pkgdir/usr/share/doc/$pkgbase"
-
- echo "Fixing permissions..."
- chmod -Rc u=rwX,go=rX "$pkgdir"
}
pkgname=("$pkgbase" "$pkgbase-headers" "$pkgbase-docs")
diff --git a/libre/linux-libre-lts/config.x86_64 b/libre/linux-libre-lts/config.x86_64
index d3554e8a6..d4f056910 100644
--- a/libre/linux-libre-lts/config.x86_64
+++ b/libre/linux-libre-lts/config.x86_64
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.4.33-gnu Kernel Configuration
+# Linux/x86 5.4.41-gnu Kernel Configuration
#
#
@@ -4362,7 +4362,7 @@ CONFIG_I2C_CROS_EC_TUNNEL=m
CONFIG_I2C_FSI=m
# end of I2C Hardware Bus support
-# CONFIG_I2C_STUB is not set
+CONFIG_I2C_STUB=m
CONFIG_I2C_SLAVE=y
CONFIG_I2C_SLAVE_EEPROM=m
# CONFIG_I2C_DEBUG_CORE is not set
diff --git a/libre/linux-libre-lts/linux-armv7h.preset b/libre/linux-libre-lts/linux-armv7h.preset
index 1d1169b4b..bb2ccf854 100644
--- a/libre/linux-libre-lts/linux-armv7h.preset
+++ b/libre/linux-libre-lts/linux-armv7h.preset
@@ -3,7 +3,7 @@
ALL_config="/etc/mkinitcpio.conf"
ALL_kver="%KERNVER%"
-PRESETS=('default' 'fallback')
+PRESETS=('default')
#default_config="/etc/mkinitcpio.conf"
default_image="/boot/initramfs-%PKGBASE%.img"